透過「服務提供者」功能讓外部服務與 MediaTek Cloud Sandbox 連動 (下)

打造 LINE Bot 聊天機器人供使用者查詢停車場的即時剩餘車位

MCS
MediaTek Cloud Sandbox
8 min readJul 18, 2018

--

上一篇我們了解整個 LINE Bot 的服務架構為下圖:

LINE Bot 聊天機器人/ 自動化程式平台 /Mediatek Cloud Sandbox 開發架構示意圖 | mcs.mediatek.com

我們現在要透過 Automate.io 完成以下自動化程式:

步驟 1: 用戶對 LINE Bot 機器人詢問包含「車位」兩字的問題時,LINE 伺服器收到用戶訊息後並送一個 Webhook 進來 → 步驟 2: Automate.io 對進來的用戶訊息判斷文字內容是否符合回覆條件→ 步驟 3: 發送一個 HTTP 請求到 MCS 雲服務,取得目前剩餘車位資訊 → 步驟 4: 將取回的資訊解析出欲回覆給用戶的數值→ 步驟 5:將此數值透過 LINE 提供的 Reply API 從 Automate.io送回 LINE 伺服器並發送給用戶

下面我將針對各個步驟進行說明。

步驟1 : LINE 伺服器觸發 Automate.io Webhook

在 Automate.io 申請免費帳號後,於首頁右上角點擊 Create a Bot 或進入 BOTS 列表建立一個自動化程式

免費註冊完 Automate.io 的帳號後,點擊 Create a Bot,會進入設定這個 Bot 的編輯頁面。在 Select Trigger app 欄位, 選擇Webhooks,如下圖:

在 Bot 設定頁面可以看到有許多預設服務可點選

點擊Setup Webhook,Automate.io 會自動生成一個 webhook 的 URL,我們可以透過這個 URL 接收 LINE 伺服器發送的訊息。複製這串 URL 後,回到LINE Bot 設定介面中尚未輸入的 Webhook URL 欄位貼上這串URL。

在第一個步驟選擇 Wehooks ,預設只有Incoming Hooks可選擇

如果要驗證兩個服務的 Webhook 連結是否有成功,在 LINE Bot 設定頁面點擊 Verify,若這個 Setup Webhook 頁面能接收到從 LINE 伺服器發送的變數測試植,即代表成功。

在 Setup Webhook的視窗內可以先測試該 Webhook URL是否可用

萬事起頭難,我們已經完成了最繁瑣的第一步了。

完成Webook URL設定後可看到下方的Output Fields 會列出所有從LINE Server 打進來的變數

步驟 2 : 篩選 LINE Server 發送的訊息

接著,我們可以選擇對 LINE server 發送進來的資訊做篩選。在此我們設定對用戶發問的文字內容做篩選,一旦符合包含「車位」兩字的訊息即做後續動作。我們在 Bot 的第二個步驟,選擇 Filters,並設定如下

當然,若你決定不打算對用戶發送的訊息做任何篩選,你也可以選擇跳過此步驟。

步驟 3 : 以 Automate.io 做為外部服務向 MCS 服務發送

現在我們要設定從 Automate.io 向 MCS上物聯網裝置的剩餘車位這個資料通道取得即時數值。根據 MCS 讀取資料點的API說明,我們會以HTTP GET的方式取得該資料通道的數值。請注意,上一篇我們有特別提到,MCS允許裝置及外部服務與其連動,由於此處的請求對象是 Automate 這個外部服務而非裝置,因此我們需要確保 MCS 的帳號內有申請這個外部服務的憑證。我們到 MCS 右上角個人檔案中的服務提供者下申請這組憑證,如下圖

在個人檔案中,將個人資料下方的 Tab 由「手機列表」切換到「服務提供者」以申請此外部服務憑證 | mcs.mediatek.com

輸入相關資訊後,我們會獲得一組 appId 及 appSecret。

接著我們到 Automate.io 依照 MCS 讀取資料點的 API 說明,以 HTTP GET 的方式取得該資料通道的數值,並確保在 Headers 輸入這串申請好的 appId 及 appSecret,完整設定如下圖:

根據 「MCS API 參考文件集」 填入所需的URL及變數

步驟 4 : 將取得的資料進行拆解,取出剩餘車位數值

前一個步驟我輸入的 API 選擇以「.csv」格式取回資料,格式較為單純,取回的資料僅有 「space_left,1531730535609,2」 這個數值。而我們現在需要回覆用戶的資訊只有 “2” 這個數值,因此我們在下一個步驟選擇 Formatter 的功能,透過 Split Text 的運算方式,將這個值解析出來。完整設定如下圖:

若想確認是否有正確轉換數值,可以在此步驟先儲存並進行測試,並到Automate.io 首頁左上角的Activity 頁面檢視執行後 Output 是否轉換為所需數值

PS: 其實 Formatter 功能非常多元,可以針對前一個動作拿回來的資料進行各種運算方式, 例如若你想透過規則運算式(Regular Expression) 解析取回來的 JSON 格式資料,也能透過這個功能做到,有興趣可以自行研究。

步驟 5 : 將這個即時剩餘車位數值,透過LINE提供的API回傳至Line server,並回覆給用戶

在 LINE developers 後台 → API reference → Messaging API 內可找到相關資訊

在最後一個步驟,我們參考上圖 LINE 官方 API 文件中 Send reply message的教學文件,並參考該頁面右方的代碼範例將所需的輸值輸入 Bot 的最後一個步驟中 (完整設定如下圖)

這裡要注意的是 Channel access token 這個欄位是在設定 LineBot 頁面發行的。

到這裡,我們已經完成了我們需要的 LINE Bot 聊天機器人自動化程式設定。你可以試著在測試頁面測試這五個步驟 ─ 在你加入的 LINE Bot 輸入任何包含「車位」的文字訊息,Automate 將會自動幫你執行所有的步驟,並回覆你剩餘車位的訊息。

儲存後可以試著對 LINE Bot 發送一個訊息,若第一個步驟完成代表LINE 伺服器成功將訊息送進來

如果跑完測試後卻發現 LINE Bot 並沒有成功回覆訊息,則可以到 Automate.io → Activity 頁面檢查這個 Bot 執行過程中的 Input 及 Output 是否正確。

在頁面可點擊該 Bot 的歷史紀錄,檢視每個步驟得到的Output body/Status code等以利設定修改或除錯
完成停車場LineBot 機器人 | mcs.mediatek.com

如果你的機器人成功回覆如上圖,恭喜你完成了停車場Linebot的聊天機器人。我們可以把這個 LINE Bot 的 QRcode 貼在停車場的繳費機台上了!

由於這兩篇我們主要目的是要介紹如何讓外部服務透過 MCS 發行的 appId 及appSecret 和 MCS 互動,因此僅以 LINE Bot 可回覆剩餘車位這個目標做為教學;至於上一篇文章的第二個目標 ─ 車位剩餘數量低於某個數字時主動推播訊息給用戶的服務,你可以試著參考 LINE developers 官網上的 Send push message 教學,並透過類似做法在 Automate.io 上設定;除此之外,你也可以針對你的各種應用,透過其他網路服務或物聯網裝置,透過申請 appId 及 appSecret 與 MCS 上的裝置做連動。

MCS的官網上也有針對以 appId 和 appSecret 透過 IFTTT 和 MCS上的裝置互動的教程,若有興趣可參考這裡

現在,開始開發屬於你的應用並和MCS互動吧!如果針對本篇文章有什麼問題或建議,也歡迎在下面留言補充喔。

--

--