某一天我们提到,主要的逻辑都写在 django_chatbot/views.py
。
但是里面牵涉太多种 function 了。
在经过几天的思考,打算一个一个功能讲(跟网路上其他的教学方式比较不太一样),所以看完三十天,应该就能够自己建立一个功能齐全的 Line Chatbot 罗!
def callback(request)
@csrf_exempt
def callback(request):
if request.method == 'POST':
signature = request.META['HTTP_X_LINE_SIGNATURE']
body = request.body.decode('utf-8')
try:
events = parser.parse(body, signature) # 传入的事件
except InvalidSignatureError:
return HttpResponseForbidden()
except LineBotApiError:
return HttpResponseBadRequest()
这段程序码的意思就是指
如果有
事件
传入,就会进行到callback
函式里面的程序码。
中间的 try...except
部分我们不详谈,因为那是固定的模式!
event
# 当有事件传入
for event in events:
if isinstance(event, MessageEvent):
事件
,指的是用户传送任何资料进来,就会开始测试回圈内容。
那 任何资料 有哪些?
Message Objects
包含
- Text Message:一般的文字讯息。虽然还是有一些限制,但基本上就只是文字讯息而已。
- Sticker message:贴图讯息
- Image message:照片讯息
- Video message:影片讯息(虽然这个功能目前还不成熟)
- Audio message:语音新闻
- Location message:传送地点
- Imagemap message:传送可点击的影片讯息(可以点击图片跳转至其他网页)
- Template messages:一些按钮选项
- Flex Message:更多客制化的讯息
之後会一一介绍每一个功能
回到 def callback()
if isinstance(event, MessageEvent): # 如果有讯息事件
line_bot_api.reply_message( # 回复传入的讯息文字
event.reply_token,
TextSendMessage(text=event.message.text)
)
如果我把这个 event 印出来
{"message": {"id": "14765943962853", "text": "\u958b\u6703", "type": "text"}, "mode": "active", "replyToken": "e6c71c582b834585833f07d909e4fe4c", "source": {"type": "user", "userId": "Uaabbbdd6ba5a8630412b106b23def4d2"}, "timestamp": 1631932933913, "type": "message"}
[18/Sep/2021 02:42:15] "POST /django_chatbot/callback HTTP/1.1" 200 0
这就是一个 message 的 event 储存下来的内容。
我们回传讯息就需要靠 line_bot_api.reply_message
还有 event
里的 reply_token
。
TextSendMessage()
,函式就是要回传 text=
的文字。
这里回传使用者传入的讯息。
剩下的我们就在往後的日子慢慢讲罗~