National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 80 24°C PM2.5 21
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 02

第一個回聲機器人

Flask+line-bot-sdk:收到訊息、回一句話
Interaction實作 25 minute(s)

Learning Objectives

  • 說明 webhook 路由、WebhookHandler、reply_message 各自負責什麼
  • 用 Flask 與 line-bot-sdk 寫出收到文字就回覆的機器人
  • 說明 channel secret 與 access token 的用途,並用環境變數管理
  • 依訊息內容回覆不同的文字

機器人程式由兩段組成

上一課看到,使用者傳訊息後,LINE 平台會把事件用 HTTP POST 送到你的伺服器,你的程式再呼叫 LINE 的 API 回覆。程式因此分成兩段:

段落 做什麼 用到
收 一個 Flask 路由接住 LINE 送來的 POST,驗證真的是 LINE 送的 WebhookHandler
回 依事件內容決定要說什麼,呼叫 Messaging API MessagingApi.reply_message

這一軌用的是真的 Flask 與官方的 line-bot-sdk(v3 寫法),在你的瀏覽器裡執行。LINE 平台是模擬的,不需要先申請帳號,也不會傳訊息給任何人。程式碼不用改就能接上真的 LINE,第 13 課會實際接一次。

程式需要兩個金鑰,都是在 LINE Developers Console 取得:

名稱 用途
Channel secret 驗證 webhook 真的來自 LINE(第 3 課)
Channel access token 呼叫 Messaging API 時證明你是這個官方帳號

這兩個值不可以寫在程式裡或傳上 GitHub,所以範例都從環境變數讀。

逐步看:一句話走過哪些程式

程式最下面用 line_sim 模擬使用者傳一句「你好」。按播放,注意呼叫堆疊:什麼時候進到 callback,什麼時候進到 on_text。

互動練習:和你的機器人聊天

按「▶ 啟動機器人」,在左邊的手機上傳訊息。右邊的面板看得到 LINE 平台送了什麼、機器人呼叫了哪個 API。

改程式時,修改上面的 app.py,再按「存檔並重新啟動」。

在自己的電腦上執行時多了什麼

剛才的程式和真實環境相同,只差最後的連線:

這個課程 真實環境
使用者傳訊息 模擬手機或 line_sim LINE App
Webhook 模擬平台直接交給 Flask LINE 平台經 HTTPS 送到你的網址
呼叫 API 模擬平台收下並畫在手機上 送到 api.line.me
金鑰 課程準備好的假值 Developers Console 取得

安裝與環境變數的設定方式留到第 13 課。先在這裡把機器人的邏輯學好,不用每次都開手機測試。

動手做:關鍵字回覆

完成 on_text:訊息是「幾點上課」時回「週三下午兩點」,其他訊息回「我還在學習中」。程式最下面模擬了三則訊息。

你的輸出
預期輸出

想一想

1.

reply_message 需要 reply token 的原因是什麼?

2.

使用者傳了一張貼圖,程式只有 @handler.add(MessageEvent, message=TextMessageContent)。會發生什麼?

3.

Channel access token 不小心傳上公開的 GitHub,應該怎麼做?

4.

callback 為什麼要 return 'OK'?

第 1 次作答

重點整理

  • webhook 是一個 Flask 路由:取出簽章與內容,交給 handler.handle,回 200
  • @handler.add 登記「哪種事件由哪個函數處理」,沒有符合的就不處理
  • 回覆要呼叫 Messaging API,並交回事件帶的 reply token
  • Channel secret 驗證 webhook,access token 呼叫 API,兩個都放環境變數

下一課打開 webhook 來看:簽章是怎麼算的,為什麼一定要驗證。

這一課完成了!
Next lesson:Webhook 與簽章驗證
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。