文章

目前顯示的是 一月, 2017的文章

訊息通知平台

最近在玩聊天機器人,機器人除了在聊天過程中解決前端使用者的需求或問題,沒看到多少人寫主動通知這部份的文章。

還記得幾年前如果要通知前端使用者,大多採用簡訊通知的方案,在 server 端綁個 cgi 程式呼叫電信公司提供的 dll。

這些聊天平台開放了機器人的 api,間接取代傳統的簡訊通知方案,傳統簡訊方案依簡訊量計價,聊天平台訊息卻是幾乎免費,電信公司簡訊業務或是提供簡訊發送平台的未來是可以想像的慘呀!

目前試了兩個平台,分別是 line 跟 telegram,先不論 webhook server 的建置,單論直接下指令發送訊息就好,兩個平台都可以作到,當然 telegram 方便的多了,telegram 有提供 web api 直接用 http Get method 呼叫,網址打一打就可以了,

如果不考慮台灣聊天平台的使用率 (Line 的台灣使用者很大量呀!),telegram 真的是滿推薦的。

-- 2017/1/25 補充

Line 透過命令列發送訊息如下

curl -X POST -d '{"to":"<USER ID>", \
"messages":[{"type":"text","text":"<MESSAGE 1>"}, \
{"type":"text","text":"<MESSAGE 2>"}]}'  \
-H 'Content-Type:application/json'  \
-H 'Authorization:Bearer <LINE ACCESS TOKEN>' \
https://api.line.me/v2/bot/message/push


Telegram 透過 http url 發送訊息如下
https://api.telegram.org/bot<ACCESS TOKEN>/sendMessage?chat_id=<CHAT ID>&text=<MESSAGE>

Line bot 開發狀況

圖片
實做了一些平常會用到的功能,有即時訊息通知平台,互動上更加直覺了。

原本我也期待透過一些語意分析的工具,了解語意後再進行處理,但是經過自己使用習慣上的分析,其實用選單方式表達需求更加明確,使用語意分析工具,建立 pattern、分析 intent,偏離了原始的目的。
這改變讓我不需要為了使用工具,還要輸入自己設計的關鍵字來觸發聊天機器人功能。

透過其他 api 提供的功能實做就不提了,花最多時間的是在聊天互動的操作,在聊天室裡每一個訊息都是獨立的發送著,隨著思緒及關卡會產生下一個對話結果,那在程式設計上要怎麼把好幾個訊息組成一個清楚可執行的指令呢?在我設計的對話路徑上,先表達主要目的,例如我要把youtube影像轉成音樂檔,接著 bot 問第一個問題,請輸入youtube 影像網址,依使用者輸入的內容,決定是否可開啟下一個對話,即資料的檢核,檢核成功則進入下一個對話,檢核失敗則可以跳出該對話,或是重新輸入上一個需求內容;直到最後一個問題的答案收集完畢後,再依據這些問題的答案產生結果,回報使用者。

先決定要執行的功能選項 -> 下一個問題 -> 下一個問題 -> 下一個問題 ... -> 產生結果

這裡我們把"問題"用 intent 這個詞來表達。
上面這個循序圖,每一個階段都是獨立的,只是前一個 intent 仰賴的資料都需要透過其他的方式得到資料,聊天機器人就是透過對話,得到需要的資訊。
資料結構使用 stack,每一個 intent 的生命週期是 啟動對話 -> 檢核答案 -> 續問下一個 intent -> 產生結果
在 續問下一個 intent 的這個階段會堆疊到 stack 裡,最後 intent 問完了,再把 intent 一個一個 pop 出來產生結果。

在 user session 的處理上,使用 redis 紀錄單一使用者的對話過程 (redis 是好物呀!)