2016年10月8日 星期六

MESSENGER BOT與AWS API GATEWAY

好吧
只能說我原本不是想寫這個內容的
寫完我就要去睡覺了可惡

之前有寫過用Google App Script玩臉書聊天機器人的教學
但還是會希望自己架一個Server來當後台
會有更大的彈性
但聊天機器人後台最麻煩最麻煩的
就是"需要HTTPS"的端口
於是上週在前輩後輩的一起努力下
好不容易學會怎麼用Tomcat架https的站台
也想寫篇文章來記錄

誰知道今天跟著前輩的文章在測試其他東西時
看到了AWS上的API GATEWAY
稍微摸了一下之後
就成功建立了可以跟臉書聊天機器人串接的https端口
並串聯到自己的網路空間後台了..............

好吧,這招快多了orz

以下正式紀錄今天到底幹了些什麼事

首先以目的來說
為了串接FB或LINE的聊天機器人
必須要有一個網路空間後台當訊息來回的管理
由於接收訊息與傳送訊息幾乎都是透過http request搭配JSON資料
所以有寫過網頁程式的人
對這種接收GET或POST的資料並處理的過程
都不會太陌生
只是不管FB或LINE的API與後台管理程式的串接上
都被要求後台必須是https的端口
而對我這種純軟的工程師來說
這部分相對麻煩很多很多很多
尤其我熟悉的又是Tomcat
在網路上能找到的資源更是少之又少....

而AWSS的API GATEWAY服務在此時就是個相當不錯的選擇
(新申請的帳號這部分應該也是一年免費吧?!)
API GATEWAY可以建立自己的獨立API網址
並且設定該網址不同METHOD對應的後台功能
可以串接到LAMBDA等建立無須伺服器的API功能
當然也可以串接到特定的網址

簡單來說可以當類似轉址功能來做使用就是了
如果像我這樣單純只是要一個https的話XDDD

詳細作法不會完整描述
只簡述大概的方向

一開始當然是先到AWS服務中建立一個新的API服務
名字就隨便取吧
接著在Resources中可以新增Resource
也就是API的路徑
同樣也可以隨便先建立一個

以FB聊天機器人後台來說
因為一開始設定時的WEBHOOK是以GET的方式來驗證
認證完成後所有的聊天訊息都會藉由POST的方式傳給後台
因此在同一個Resource中要建立GET與POST兩種METHOD
這兩種METHOD可以都接到同一隻網頁程式
或是切成兩隻來做也無妨

我自己在做測試的時候是切成不同的兩隻
首先是先建立一個GET METHOD
在Integration type的地方選擇http
並填入後面真正處理資料的網頁程式位置
最後在Method Request頁面中的URL Query String Parameters
填入被呼叫時應該會輸入的參數名稱
(以FB聊天機器人的驗證來說就是hub.challenge與hub.verify_token)


然後同樣的方式在同一個Resource中建立一個POST METHOD
Integration type也是http
然後填入真正處理來自聊天機器人的訊息JSON檔的網頁程式連結


如此一來就完成了設定
只要向這個API的網址送出GET或POST需求
就會分別被導向所填入的網頁程式
而這關鍵的API網頁程式的產生
則只要透過Resources頁面中Actions裡的Deploy API
就可以產生出public或需要認證才能呼叫的API網址
(可以在各種Method的Method Request中設定IAM來管理呼叫管理權限)

最後在stage中就可以找到發布出來的API網址
在最後面加上Resource的路徑就可以呼叫自己所設定的對應功能
而且這個網址會是https開頭的
所以在FB或LINE的聊天機器人中
都可以做為後台來使用
同時也具備API呼叫狀態的統計或管理等功能
可以說是建立、管理、編輯都相當方便的工具
方便到讓我覺得之前的https學得有點心寒阿!!!!

以上是小弟草草的紀錄與心得
我要哀怨地去睡覺了~

沒有留言 :

張貼留言