這篇文章會談什麼?
如何最方便的佈署一個 Line chatbot。要是你佈署成功了,它就只會 echo,也就是把你傳的字串吐回給你,不會產生任何新字串,證明 Server 有接收到你的訊息。
這篇文章不談什麼?
不會談如何讓 chatbot 調皮搗蛋、生動有趣、讓你覺得 Server 上面養了一隻真人。因為那牽涉到複雜、多變,而且沒有固定作法的機器學習。也許未來會談,但這篇文章不會。
-
寫程式之前,要先去申請一個 Line Developer 帳號,拿到這幾樣東西:
- Channel secret
- Channel access token
-
到這個 repo 的 readme 照做
-
修改 SDK 中讀取 Channel secret 和 Channel access token 的部分
把上一步拿到的 Channel secret 和 Channel access token 寫入在 *.ini 裏面,並將這兩個檔案加入 .gitignore,動態讀入 Line API1
2
3
4
5
6
7
8my_CHANNEL_ACCESS_TOKEN = open('channel_access_keys/channel_access_token.ini').read()
print(my_CHANNEL_ACCESS_TOKEN)
my_CHANNEL_SECRET = open("channel_access_keys/channel_access_secret.ini").read()
print(my_CHANNEL_SECRET)
line_bot_api = LineBotApi(my_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(my_CHANNEL_SECRET) -
建立 https server 取得 Webhook URL
Line 的用戶操作介面,是一張前端的皮,開發 Line Bot 就是自己掌握這張皮後面的邏輯思維。Webhook 是一個 function ,是「皮」和「腦」的傳輸管道。Webhook 是由 Server 端提供,所以架好 Server 才會有 Webhook。要注意的是,Line 有限定這個 Webhook 一定要是 Https,那要怎麼架 Https Server 呢?
我目前會採用兩種方案:
-
ngrok 的 https local server
在開發機上 demo 測試用的,手上的電腦就是 server,關機就沒了。所以只是和暫時性的 demo 和測試。方便快速,但不能持續,因為我不能讓筆電 24 小時都開著維持連網。 -
GCP VM 上的 remote server
由於是雲端機器,只要用 tmux 維持 process 運作就好。雖然大多數服務要錢,但是選用最便宜的 f1-micro 免費,用來完成一個 MVP(Minimum Value Product) 應該是足夠。
注意:防火牆設定:0.0.0.0/0 tcp:5000 輸入(ngrok 好像可以不用?)
因為不想要另外弄 https certificate(MVP就是要儘量省下麻煩,能動就好,對吧!),所以我仍然會在 remote server 跑 ngrok。
我會用 tmux 維持兩個 session:
- session 1:ngrok 的,負責聽 local server(開了就儘量不要關,理由後面會說)
![](/content/images/佈署LineChatbot/ngrok_running.jpg) - session 2:跑 server 程式的,可能會隨著更新,時常重新啟動)1
$ ngrok http 5000
![](/content/images/佈署LineChatbot/flask_running.png)1
2$ export FLASK_APP=app.py
$ flask run --host=127.0.0.1 --port=5000 -
-
把 ngrok 拿到的 Webhook URL 放到 Line Developer 後台
-
照理說,這樣應該就可以用了