手把手完整帶你在Heroku上部署Python LINE Bot Server
Purpose
現在有非常多的職缺是希望找到對LINE Bot有經驗的人才,並且LINE Bot的應用場景非常廣,可以實作出很方便的功能來提供企業使用,所以我這次來教學LINE Bot的基礎架設,算是帶給大家一個起步的契機。
本篇主要涵蓋的範圍有:
- 建立一個LINE Bot Messaging API
- 將Python LINE Bot Server部署在Heroku並綁定Github
- 利用ngrok進行本地端測試
Hands-On
登入LINE Developers並建立專案
在LINE Developers中可以用LINE帳號登入,在登入後進入Providers頁面,Provider的意思可以比喻成資料夾,可以在資料夾內加入不同的Service。
接著建立一個Provider,下面會讓你填名稱。
建立之後會可以選要建立哪種channel,我們會用到的是Messaging API。
然後把一些必填的選項填完就OK了~
接著我們要看到Basic settings的頁籤,裡面的Channel secret要複製下來,還有Messaging API的頁籤,裡面的Channel access token欄位,要按下issue產生一組token,這個也要記錄下來,後面要放進server code裡。
可以在LINE Official Account features這裡設定一些Bot的Behavior,歡迎訊息與自動回覆之類的,然後一定要把Webhook打開,才能觸發之後在Heroku上的Server端處理。
建立Heroku專案
首先需要註冊一個帳戶。
免費版提供每個月450個小時的運作時間,綁定信用卡會額外有550個小時的時數的,如果你只有一個application在跑,是可以每個月24小時不間斷持續運作不被收費喲!
但是免費版會有cold start的問題,30分鐘未使用會啟動休眠,休眠後下次使用會需要等他重新開啟,才會正常運作。
我們先新增一個application,名稱是不能重複的,你可以需要稍微想一下。
建立起來後,我們要到LINE Bot去綁上Webhook的url,這樣在與Bot互動時,才知道要把Message往哪裡送。
在LINE Developers Messaging API頁籤的Webhook URL填上符合格式的url
https://{HEROKU_APP_NAME}.herokuapp.com/callback
並且記得將Webhook打開。
建立Github Repo
在Github建立一個Repo來存放Server code。
你可以在我的另外一個Repo clone新的Template使用。
於app.py中,13~16行需要將我們上面複製的Cannel secret和token貼進來。
# Channel Access Tokenline_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')# Channel Secrethandler = WebhookHandler('YOUR_CHANNEL_SECRET')
完成之後把程式碼push上remote。
將Heroku連動Github Repo
我們回到Heroku,於Deploy頁籤,你可以選擇Connect Github。
點選下面的Deploy Branch,將master手動部署進Heroku Server。
在Automatic deploys裡面選擇master分支,接著打開自動部署,這樣當你發pull request將變更合併至master時,github可以直接觸發Heroku進行部署。
看到下面這張圖就代表完成了!
測試一下pull request合併之後,確實會觸發deploy!
接著我們來測試一下,進入LINE Developer Messaging API頁籤,可以看到有個QR code,掃描加入好友,跟它說說話吧!
利用ngrok本地端測試你的Python
那麼就會有人問我,我每改一次程式碼,是不是就要重新push上github,才能測試?
當然不是!我們可以在本地端進行測試,我們需要透過一個叫ngrok的東西。
如果要讓別人的網路可以連到你的伺服器,你的伺服器需要一個Public IP給外網連進去,但如果你今天沒有綁上Public IP可以怎麼做?我們可以透過ngrok將你的localhost對應到ngrok的domain上,別人只要連上那個domain,就可以轉到你的localhost上,ngrok就像是一個轉介站一樣!
首先我們需要下載ngrok到你的電腦,因為我是用Mac,所以我直接用homebrew裝到global上,方便我每次使用。
brew cask install ngrok
接著我們run起來app.py,可以看到localhost開了一個5000 port,是因為上面程式碼是指定5000,這是可以自行更改的。
然後我們把ngrok指向5000。
ngrok http 5000
可以看到ngrok啟動了,並且給了我們一個網址。
我們需要把這個網址複製下來,並到LINE Developer Messaging API的頁籤,將Webhook url換成上面給的網址後面加上/callback,這樣Bot就會知道要先把訊息丟到這裡去處理。
接著我們先停掉app.py,把response丟回去的訊息加個笑臉,並重新跑一次app.py。
# 處理訊息@handler.add(MessageEvent, message=TextMessage)def handle_message(event):message = TextSendMessage(text=(event.message.text + '😊'))line_bot_api.reply_message(event.reply_token, message)
會發現真的變了呢!等到確定結果是你要的,再把程式碼push進github,然後然後然後一定要記得把webhook url改成原本的Heroku callback url,不然你怎麼測都會是失敗的。
Conclusion
LINE Bot真的是一個很方便又很好玩的東西,你只要把LINE Bot接上Database,它不僅僅可以用在企業管理或行銷上,甚至可以變成是你的生活小幫手,只要你coding的能力夠,LINE Bot幾乎沒有什麼做不到的事情,不多說了,你們自己動手做做看吧😊