【Day 07】开始谈论主程序啦!!!

某一天我们提到,主要的逻辑都写在 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= 的文字。
这里回传使用者传入的讯息。


剩下的我们就在往後的日子慢慢讲罗~


<<:  IT 铁人赛 k8s 入门30天 -- day8 Demo Project: MongoDB and MongoExpress

>>:  Day7 - 使用 Heroku 建立一个网站

01 - 前言 & 浅谈 Observability

第一次查看这系列文章的读者,欢迎参考 文章总览与心得 帮助你了解这系列文章的架构与脉络。 参赛背景 ...

Day 08 import 进阶

这篇主要是讲到有关 Python 中很重要的 import,因为如果後面在做大型专案时,常常需要 i...

SEO排名陷入撞墙期?也许你该试试「语义搜索引擎优化」!

作者:Welly SEO 编辑部 想做好Google SEO排名,除了熟知SEO是什麽之外,还必须充...

Spring Framework X Kotlin Day 17 Reactive

GitHub Repo https://github.com/b2etw/Spring-Kotlin...

Day 20 AWS云端实作起手式最後一弹 整体架构回顾

我们今天来做个小结,快速汇整这一系列实做的内容。 步骤1: 建立2个S3 Bucket 一个S3 B...