LINE Chatbot 開發攻略(二)

ObAIoT - Build your own IoT
HonDTour
Published in
4 min readMar 13, 2018

運用Messaging API設計Chatbot概念介紹

======================

Line Messaging API介紹

  1. Overview
  2. Messaging API Reference

======================

Line Messaging API介紹

1. Overview

https://developers.line.me/en/docs/messaging-api/overview/

(1) SDKs

官方與開放源代碼SDK資源

https://developers.line.me/en/docs/messaging-api/line-bot-sdk/

(2) API文件

https://developers.line.me/en/docs/messaging-api/reference/

(3) 帳戶方案與功能Q&A

這個部分對於設計Chatbot的應用與計畫商業模式等方面相當重要。

當您準備好程式後台時,將Server Endpoint URL填入到Line Channel的Webhook URL :

或者

一個Provider下可能有一個以上的Messaging API Channel,選擇欲連結至開發者程式後台的Channel -> 進入到Channel settings。

往下滑動至Messaging settings:

  • Use webhooks:選擇Enabled
  • Webhook URL:輸入您開發者程式後台的Endpoint URL,請注意務必為HTTPS。Line Chatbot的訊息與事件等等,將會以POST方式,將資料以JSON格式送達。

— 設定完成後,請點選Verify,確定出現Success代表與後台連接無誤。

舉例,在Chatbot中輸入文字訊息:

LINE server將會POST JSON data到程式開發者程式後台:

{“events”:[{“type”:”message”,”replyToken”:”d9ec2a9d3c734b89a11b507d4357b548",”source”:{“userId”:”Ucf450a4dd60ff31295222243c50dd923",”type”:”user”},”timestamp”:1508469030117,”message”:{“type”:”text”,”id”:”6867267311080",”text”:”您好!”}}]}

2. Messaging API Reference

https://developers.line.me/en/docs/messaging-api/reference/

與HTTPS Request共同的基本概念部分我們跳過,直接來到:

Webhook event objects

共分成三個部份來介紹:Common properties, Message event, 以及 Other events — Follow/Unfollow/Join/Leave/Postback/Beacon event.

Common properties

定義一個事件(Event)來源為何?

  • User : 單一使用者對於Chatbot所產生的事件。
  • Group : 群組 — 群組必須先建立,然後邀請使用者,等待其同意後加入。Chatbot在群組中接收到的事件。
  • Room:當在Line當中加入第三人(Chatbot也算一人)到兩人對話當中,即構成聊天室。Chatbot在聊天室中所接收到的事件。

當中有三種Id:

  • userId:使用者之於此Chatbot的識別ID。這個ID跟使用者本身的LineId無直接關係。
  • groupId/roomId:群組與聊天室之於Chatbot的識別Id。

Message event

Chatbot接收到的訊息種類有Text(文字)、Image(圖片)、Video(影片)、Audio(聲音)、File(檔案)、Location(位置)與Sticker(貼圖)。

  • Text:最常被使用到的。
  • Image、Video、Audio和File四種訊息,可以透過 Get content 的HTTP request取得檔案資料。

GET https://api.line.me/v2/bot/message/{messageId}/content

  • Location

使用者輸入的位置資訊如下圖所示。

  • Sticker

Line基本的Sticker清單。

Other events

以下為各種事件其觸發時機:

  • Follow event:當Chatbot被使用者加入時,或是Chatbot被封鎖後解除封鎖時會被觸發。
  • Unfollow event:當Chatbot被一個使用者封鎖時。
  • Join event:

— 當Chatbot被加入一個群組時。

— 當Chatbot被加入一個聊天室後有任何一個使用者發出任一訊息時。

  • Leave event:

僅有Chatbot在群組中被刪除才會觸發。

在群組或是聊天室中,若其他成員即便都離開也不會觸發事件。

因此若要監控Chatbot在聊天室或群組是否仍被使用,比較好的方式是要記錄最後一個來自聊天室或群組的訊息,或定期使用API Get group/room member user IDs(需要LINE@ Approved accounts or official accounts才可使用)

  • Postback event:

在本文後面的Message objects中會介紹到的Imagemap message、Template message中的Postback action觸發產生此事件。

  • Beacon event:

當進入到Line beacon範圍內時觸發。在開發攻略(一)文中有提到申請產生Beacon Hardware ID的連結,Line Beacon的軟硬體開發應用需要用一篇文來詳細介紹。

OAuth

產生一個channel access Token(用來呼叫Line Messaging API時認證用)

Chatbot可以產生兩種Token:

  • 具時效性的Token

這邊提到這一個HTTP Endpoint:

POST https://api.line.me/v2/oauth/accessToken

可以產生一個30天有效的Channel access token,總共可以產生30組,產生第31組時會把最早產生的第一組給取代掉。

API中有兩個參數,client_id與client_secret,請到:

Console -> 選擇Providers->選擇Chatbot的Messaging API Channel->來到Channel settings頁面

就可以找到client_id(Channel ID)與client_secret(Channel secret)

  • 永久不失效的Token

承上,在Channel settings同一頁面,可以產生永久不失效的Access token。

Message

對於Send Message API,主要可以分為兩類,

  • REPLY_MESSAGE:API用以回覆使用者輸入 — Send reply message使用者主動產生Chatbot的Event回覆一個訊息物件。
  • PUSH_MESSAGE:API用以主動推送訊息給使用者的 — Send push message或Send multicast messages

關於不同方案所支援的API功能請詳閱:帳戶方案與功能Q&A

另外有Get Content API,可以透過Message ID來取得使用者傳送的Image、Video、Audio和File共四種訊息種類。

Profile

  • displayName:即呼叫API時所取得當時Line上面的名稱。
  • userId:User之於此Chatbot的識別ID。
  • pictureUrl:大頭照檔案的URL路徑。
  • statusMessage:狀態訊息,使用者自行設定的風格文字、個人哲學語錄…

Group/Room

  • 取得Group/Room的member profile。
  • Leave Group or Room。

Rich menu

程式透過API來管理Rich menu, 一個Chatbot可以設定最多十組Rich menu,可以根據User喜好、訂閱功能或是下一頁Menu(即時切換)等等不同創意巧思,將某一個user對應到當下的Rich menu,有效分群管理。

利用Line @ Manager直接手動上傳與設定Rich menu,這邊的設定就是讓所有Chatbot的使用者統一看到這一組Rich menu。

Message objects與 Action objects

進入以下Message types的連結:

訊息項目中,有些可以透過Line @ Manager管理後台直接發送。

有些是需要透過開發者程式後台回覆使用者的訊息種類。

  • Text:文字種類的訊息,當中可以加上Emoji,請參考 Line Emoji List

繼續之前,我們要先介紹下Action objects:

訊息物件中的Imagemap, template messages,可以供使用者點擊互動的介面,會產生一個Action,這些Actions可以分為以下四種:

(1) Postback:點擊後,Line server會送一個HTTPS POST至Webhook URL開發者後台,並將剛才點擊項目的參數一同帶入,e.g “action=buy&itemid=111”,後台就知道使用者剛剛點擊了哪一個項目。

(2) Message:點擊後,Line App會自動幫使用者送出一個文字訊息。

(3) URL:訪問一個網站連結。

(4) Datetime picker:如下圖,當選擇完畢按下Send(發送),Line server會送一個HTTPS POST到開發者後台,告知剛剛使用者選擇的時間細節。

  • Imagemap:將圖片組合成一個大圖,點擊不同區域,觸發區域對應的Action object,這邊值得注意的是,在組合圖完成後,在保持長寬比例下依序調整圖片寬度尺寸為240px, 300px, 460px, 700px, 1040px(為滿足不同尺寸手持裝置顯示需求),圖片檔案格式必須為JPEG或PNG,上傳到後台時,請去除掉檔案的副檔名。

— Line內使用的圖片,為讓使用者有較佳體驗,尺寸保持在1MB以內。

  • Template message

(1) Buttons:如下圖,Reserve與Call這兩個項目都是屬於Actions。Buttons template最多可以有4個Action項目,圖片可有可無。

— 除了Line的Emoji外,網路上有很多Emoji -https://apps.timwhitlock.info/emoji/tables/unicode

也可以應用加入在Text中,讓介面顯示很生動。如何使用具體的程式部分將會在後續開發攻略中介紹。

(2) Confirm:沒有圖片,專門使用作為確認用。

(3) Carousel:Buttons的頁面橫向滾動版,最多一個Carousel message可以有10個Columns(行),與Buttons不同點是,每個行的物件, Buttons可以有四個; Carousel每行最多只能有3個Action項目

(4) Image carousel

跟Carousel template異曲同工,只不過是點擊圖片會產生Action,同樣的,單一Message最多可以有10 columns(10張圖)橫向滾動。

======================

Copyright © 2018 Josh Chang, Obaiot All rights reserved

To be continued~

約翰福音 14:6

耶穌說:「我就是道路、真理、生命。要不是藉著我,沒有人能到父那裡去。

======================

--

--