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 01

聊天機器人怎麼運作

使用者、LINE 平台、你的伺服器之間傳了什麼
Interaction實作 20 minute(s)

Learning Objectives

  • 說出使用者、LINE App、LINE 平台、你的伺服器各自做什麼
  • 說明 Webhook 與 Messaging API 的方向差別
  • 說明官方帳號、Channel、Provider 的關係
  • 從 webhook 的 JSON 找到事件類型、使用者編號與訊息內容
  • 說出 Messaging API 能傳哪些類型的訊息

一則訊息經過的四個角色

傳訊息給 LINE 上的官方帳號,對方很快就回了,看起來像在和人聊天。這段過程有四個角色,其中只有一個是你要寫的:

角色 做什麼 由誰提供
使用者 在手機上傳訊息的人
LINE App 手機上的程式,把訊息送出去、把回覆顯示出來 LINE
LINE 平台(LINE Platform) LINE 的伺服器,轉交訊息給你的程式,也接受你的程式呼叫 LINE
你的伺服器(bot server) 你寫的程式,決定要回什麼 你

官方文件把流程寫成三步:

  1. 使用者傳訊息給官方帳號。
  2. LINE 平台把這個事件用 HTTP POST 送到你登記的網址,這個動作叫 Webhook。
  3. 你的程式看過事件內容,呼叫 Messaging API,請 LINE 平台把回覆送給使用者。
使用者手機  -- 訊息 -->  LINE 平台  -- Webhook(HTTP POST)-->  你的伺服器
使用者手機  <-- 訊息 --  LINE 平台  <-- Messaging API(HTTP POST)--  你的伺服器

使用者的手機從頭到尾都不會直接連到你的伺服器,所以你的程式碰不到使用者手機上的任何東西,只看得到 LINE 平台送來的內容。

這一軌的程式用的是真的 Flask 與官方的 line-bot-sdk(v3 寫法),在你的瀏覽器裡執行。LINE 平台與手機是模擬的,所以不需要申請帳號,也不會傳訊息給任何人;第 13 課再把同樣的程式接上真的 LINE。Flask 不熟的話可以先看後端開發軌。LINE 是 LY Corporation 的商標,這門課不是 LINE 官方的課程。

逐步看:webhook 收到了什麼

這是最小的 webhook,只有接收和印出,什麼都沒回。程式最下面的 line_sim 模擬使用者傳一句話。按播放,看 event 這個字典裡有什麼,也注意最後使用者收到幾則訊息。

Webhook 與 Messaging API 是兩個方向

一般的網站是瀏覽器來問伺服器。Webhook 反過來:有事發生時,對方主動打你的網址。少了它,你的程式就得不斷去問「有新訊息嗎」,既浪費又慢。

Webhook Messaging API
方向 LINE 平台 → 你的伺服器 你的伺服器 → LINE 平台
誰是伺服器 你 LINE
什麼時候發生 使用者有動作時 你的程式決定要傳訊息時
用來 通知你發生了什麼 回覆、推送、查資料

所以你的程式同時扮演兩個角色:它是一個網站(等 LINE 平台來敲門),也是一個用戶端(去呼叫 LINE 的 API)。

因為 LINE 平台要連得到你的程式,Webhook 網址必須是公開的,而且官方規定要用 HTTPS,憑證也要由受信任的憑證機構簽發,自簽憑證不行(官方說明)。網址公開也代表任何人都能 POST 給它,第 3 課會處理這個問題。

下面的範例把兩個方向都放進來,用編號的 print 看先後順序。

逐步看:一句話走過兩個方向

注意 2 和 3 的順序:機器人呼叫 API 回覆使用者,是在 webhook 還沒回應的時候發生的。這段程式的細節下一課會一行一行講,這裡只看流程。

互動練習:傳訊息給已經寫好的機器人

按「▶ 啟動機器人」,就可以在模擬手機上傳訊息。程式已經寫好,現在看不懂沒關係,這個練習看的是手機旁邊的面板:

  • 收到的 Webhook:LINE 平台送給你的伺服器的完整內容,以及你的伺服器的回應
  • 呼叫 LINE API:機器人呼叫了哪個網址、送了什麼
  • 伺服器紀錄:程式裡 print 的內容與錯誤訊息

除了任務之外,也可以傳「位置」「按鈕」,或按「傳位置」,比較面板裡的內容有什麼不同。手機是簡化的模擬畫面,貼圖和圖片只畫成灰色的框,不會載入真的圖片。

官方帳號、Channel、Provider

剛才的機器人在真實環境裡,要掛在一個官方帳號底下。這幾個名詞第 13 課實際申請時都會碰到:

名詞 是什麼 例子
LINE 官方帳號(LINE Official Account) 使用者加好友、傳訊息的對象 「課程機器人」這個帳號
Channel 你的服務使用 LINE 平台功能的通道。Messaging API Channel 綁定一個官方帳號,金鑰也屬於它 一個機器人一個 Channel
Provider 提供服務的單位,底下可以有多個 Channel 你本人、社團或公司

依現在的官方流程,要先建立官方帳號,再替它啟用 Messaging API,這時才會產生 Channel。Channel 裡有兩個金鑰,下一課會用到:Channel secret 與 Channel access token。

Messaging API 能做什麼

官方文件列出的主要功能,以及這一軌在哪裡會教:

功能 第幾課
回覆訊息、隨時主動推送訊息 2、6
傳送不同類型的訊息 5、7、8
取得使用者傳來的圖片、影片、語音、檔案 11
取得使用者的顯示名稱等個人資料 4
圖文選單(Rich Menu) 7
查詢已傳送的訊息數量 6
群組聊天、Beacon、帳號連結 不在這一軌的範圍,可以看官方文件

機器人能傳的訊息類型:

類型 用途
文字(Text) 最基本的訊息
貼圖(Sticker) 官方清單裡的貼圖
圖片、影片、語音(Image、Video、Audio) 提供檔案的 HTTPS 網址
位置(Location) 地圖上的一個地點
範本(Template) 固定版型,例如帶按鈕的卡片
Flex Message 用 JSON 自己排版的卡片
Imagemap、Coupon 這一軌不會細講

使用者傳來的訊息種類和機器人傳出去的不完全相同,例如使用者不能從 LINE App 傳出範本或 Flex Message。

動手做:讀懂 webhook 的內容

body 是一次 webhook 的內容,裡面有三個事件。完成 summarize(event),回傳這個事件的一行摘要:

  • 文字訊息:<userId> 傳了文字:<內容>
  • 其他訊息:<userId> 傳了 <訊息的 type>
  • follow 事件(加好友):<userId> 加了好友

這一題只用 Python 字典,不需要 Flask。

你的輸出
預期輸出

想一想

1.

使用者傳出一則訊息後,你的伺服器最先收到的 HTTP 請求是誰送來的?

2.

下面哪一項是 Messaging API 這個方向的動作?

3.

程式收到 webhook 後回了 200,但沒有呼叫任何 API。使用者會看到什麼?

4.

下面這段程式會印出什麼?

5.

關於 Webhook 網址,哪一項符合官方規定?

第 1 次作答

重點整理

  • 四個角色:使用者、LINE App、LINE 平台、你的伺服器。你只寫最後一個
  • Webhook 是 LINE 平台呼叫你,Messaging API 是你呼叫 LINE 平台
  • webhook 的回應是給 LINE 平台看的;要讓使用者收到訊息,一定要呼叫 Messaging API
  • 事件是 JSON:events 串列裡每一項有 type、source,訊息事件還有 message
  • 官方帳號是使用者看到的對象,Channel 是使用 LINE 平台功能的通道,Provider 是提供服務的單位

下一課從頭寫出第一個機器人,把剛才看到的流程變成你自己的程式。

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