iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 5
9

Line Messaging API Webhook 運作原理

不囉嗦直接上圖

訂閱階段

這個階段是我們在 Line developer 後台填入卡米狗的通訊地址,然後按下送出。

通知階段

這個階段是當有人使用 Line 傳訊息給卡米狗所在的群組,就會收到通知。Line 會把這樣的訊息傳到我們設定好的通訊地址。

行動階段

這個階段是卡米狗回應群組訊息,卡米狗會把訊息傳給 Line ,然後 Line 再幫我們傳到群組。

所以 Line 扮演的就只是個傳話的工具人。

以上就是一個完整的 Line Messaging API Webhook 運作原理,每一張圖都代表了一次 HTTPS 協定的傳輸(一個 HTTPS Request + 一個 HTTPS Response),在這裡你可以注意到全部的回應都是「好哦~好哦~」,這是表示簽收包裹的意思。

圖中的#01、#02表示一個代號,用來做識別用,同一個用戶會有同一個代號。就跟唐伯虎的代號叫9527一樣,在我們這裡不稱呼你為唐伯虎。

9527就是你的終生代號,開始做事!

Line Messaging API 的各種通知

你被加好友

你被封鎖

你被加入群組

你被踢出群組

有人加入你已經在裡面的群組

沒有,沒有這種通知,所以沒辦法在有人加入群組時讓卡米狗跟他打招呼。

因為 Line 不給的,你不能拿。

在聊天室的陌生人傳送的文字訊息

在群組的陌生人傳送的文字訊息

在群組的好友傳送的文字訊息

其實這邊的好友是聊天機器人之友。他不一定有加你好友,只要他有加任何一個 Line 聊天機器人好友,你就能知道他是誰。

在私訊的文字訊息

以下就用私聊示範各種訊息類型:

貼圖訊息

圖片訊息

影片訊息

聲音訊息

檔案訊息

位置訊息

Beacon 訊息

Beacon 是一種感測設備,如果你的手機有開啟定位功能,接近 Beacon 時,就可以被偵測到。這技術被用來做微定位,位置訊息的誤差值很大而且在室內還有可能無法定位。若在一個室內安裝足夠多的 Beacon,就能得知這隻手機的準確位置。

Postback 訊息

在你傳送含有按鈕的訊息給用戶後,若用戶點擊了按鈕,你就會收到 Postback 訊息。

以上全部的「好哦~好哦~」都只是簽收而已,還沒有回應訊息,下面才會講怎麼回應訊息。

Line Messaging API 的各種行動

能做的事情蠻多的,詳細的以後有空再講。今天先講幾個重要的就好。

關於回郵信封的使用

使用回郵信封(Reply Token)就可以不用花錢,在現實世界中是這樣運作的,在 Line Messaging API 也是如此。當你獲得一個回郵信封時,你必須在30秒之內寄出回應。因為回郵信封會在 30 秒之後失效。如果你在失效之後才寄出信, Line 就不會幫你傳話。如果你不使用回郵信封,就得買郵票。

準確地說,Line 允許你回應訊息(Reply Message),但是不允許你主動發訊息(Push Message)。如果你想要主動傳訊息就得付錢。那麼到底要付多少錢呢?他是包月制的,如果你在建立聊天機器人的時候選擇 Develop Trail (試用版),那就還是不用錢。但如果你選擇的是 Free (免費版),免費版要先升級成進階版才能用。顆顆,你每個月至少要給 Line 台幣 $3888元。

超貴 der。

傳送訊息

一次最多可以傳出 5 則訊息。

文字訊息

單一訊息你最多可以傳 2000 個字。

回覆訊息(Reply Message)的情況:

使用回郵信封(Reply Token)時,不需要指名傳給誰。

主動傳訊(Push Message)的情況:

不使用回郵信封(Reply Token)時,就必須指定要把訊息傳送到哪裡。

貼圖訊息

一個新的 Line 帳號有四套貼圖可以用。你的 Line 帳號也有這四套貼圖,就是饅頭人、熊大那些。聊天機器人只能傳送這四套貼圖裡的貼圖,不能傳其他的貼圖。所以我覺得沒什麼搞頭。

取得用戶基本資料

你可以拿有加你好友的用戶代碼去查詢用戶資料,你可以獲得他的暱稱、大頭照網址、狀態。

取得圖片、聲音、影片、檔案內容

你可以拿代碼再去查詢內容。你可能會問他為什麼不一開始就給你?因為這些東西比較重,而且你不一定用到,或者你家可能已經有一個一樣的東西。一切都是為了效率R~

講一點不是人話的東西

其實哪有這麼爽,做聊天機器人這麼容易的話,大家早就做一堆了。

上面講的全都是擬人化之後的東西,實際上是這樣:

前方高能注意

當有人私訊卡米狗時,Line 傳來的通知其實是長這樣:

{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "type": "message",
  "timestamp": 1462629479859,
  "source": {
    "type": "user",
    "userId": "U4af4980629..."
  },
  "message": {
    "id": "325708",
    "type": "text",
    "text": "Hello, world"
  }
}

請保持耐心地讀完,容我簡單說明一下。

認識結構化資料

因為傳遞結構化的資料,對於後續處理上來說會比較有效率,所以我們(工程師)通常這麼說話。

從 Line 傳來的訊息其實是:

  • 回郵信封:"nHuyWiB7yP5Zw52FIkcQobQuGDXCTA" (這是一個亂碼,請勿嘗試讀懂他。你看不懂是正常的,因為我也看不懂。)
  • 通知類型:這是一則訊息
  • 傳送時間:1462629479859 (這是從西元19XX年到目前為止經過的總毫秒數)
  • 來源:
    • 類型:這是發生在私聊
    • 用戶:"U4af4980629..." (雖然這也是亂碼,但是我有注意到一點:開頭肯定是U,應該是代表 User (用戶)的意思。)
  • 訊息:
    • 代碼:"325708"
    • 類型:這是一則文字訊息
    • 文字:"Hello, world"

簡單一點的結構化:

  • 發生什麼事:有人傳私訊
  • 是誰:"U4af4980629..."
  • 他說什麼:"Hello, world"

用人話來說:

卡米狗傳回的其實是長這樣:

http_status_code:200

用人話來說:

因為很重要,所以說三次,這是表示簽收,不是回覆私訊。

你若有心要學作卡米狗的話,就得慢慢看懂這些東西。

雖然這些東西會越來越硬,但我會很溫柔。

回到訂閱階段

最一開始有提到訂閱階段,你必須要給 Line 你家地址,他才有辦法寄通知來。

但是你家是一個網站。你有發現問題嗎?

問題是你沒有家。

怎麼辦?

這表示你需要蓋一個自己的家。

明天會講架一個網站需要哪些東西。


上一篇
第四天:認識 Webhook
下一篇
第六天:認識網站
系列文
只要有心,人人都可以做卡米狗33

1 則留言

0
jack1234552000
iT邦新手 5 級 ‧ 2019-06-22 21:03:16

講解的很用心
可是老實講 我真的看不懂
再犯力中
到底我們是講給卡米狗還是LINE聽?
回應我們又是卡米狗還是LINE?
還是範例中有些卡米狗是代表著我們的意思?
這些傳遞者的角色 是否有一張圖可以表示
這樣會更簡潔一點?

看更多先前的回應...收起先前的回應...

看圖示阿 line 就是 line 卡米狗就是卡米狗 這裏完全沒有出現使用者

那是誰輸入訊息呢

輸入訊息的人沒有出現在本篇文的圖中,你可以參考這篇的圖:https://ithelp.ithome.com.tw/articles/10197544

謝謝郭

我要留言

立即登入留言