在開始之前,先到 LINE Official Acoount Manager 建立一支野生的機器人,LINE 有為每支機器人配好原生的後台管理、自動回覆、聊天與基礎分析等功能,不過因為我們想要做的事情比較特別,所以會需要自己建立相關的後台與邏輯,相關建立流程相信你很聰明,不會很複雜,網路上也有很多教學。當成功註冊創立一支機器人之後,再接著進行以下的步驟:
在資訊安全的考量下,為了避免別人綁架了你的機器人,我們與 LINE 互動的過程中需要使用到密鑰,說白了就是一串字串,LINE Bot 會需要:
Channel ID
是一個代號識別碼,供 LINE 確認是哪支機器人在與 LINE 伺服器進行互動Channel Secret
密鑰用來驗證 Webhook 請求的合法性 (白話: 接收來自 LINE 伺服器的資料)Channel Access Token
密鑰是用來授權 API 操作 (白話: 發送資料給 LINE 伺服器查詢使用者頭貼與用戶名稱等)後兩個密鑰一個是確認資料真的來自 LINE,一個是向 LINE 要資料,是屬於不同方向的傳輸加密。
如何取得呢?在 LINE Official Acoount Manager 右側設定
> 左側選單 Messaging API
> 啟用 Messaging API
按鈕按下去 > 建立服務提供者
任取一個團隊名稱 (e.g. 瘋了才寫程式系列) > 同意
> 選填直接按 確定
> 確定
,會獲得 Channel ID
與 Channel Secret
見到以下資訊就自己存在一個沒有人知道的地方,最好是挖個洞埋起來。
還有一個 Channel Access Token
放在一個比較調皮的地方,將以下網址花括號部分改為剛剛取得的 Channel ID : https://developers.line.biz/console/channel/{你的 Channel ID}/messaging-api
:
滑到最底部會看到
Channel Access Token
的Issue
按鈕,點下之後就會產生,同樣地,自己存在一個沒有人知道的地方,最好是挖個更深的洞埋起來。
這些屬於機密型的資料,我們稱之為環境變數,為了存放這些見不得人的參數,可以在與 manage.py
同一層的地方創立一個 .env
檔案,然後像這樣裝進去,之後會再用套件去呼叫這個檔案:
LINE_CHANNEL_SECRET="meowmeowmeowmeow1122334455"
LINE_CHANNEL_ACCESS_TOKEN="fjdklinsdfoEJQIWLEOJDNSDNSJKLJNIQOWPNQWIOD:NQWID:QLWID:QWLJK"
環境變數的變數命名習慣上會以全大寫加上底線取名。
我們昨天所運行的網站,對外面的世界來說它是「隱藏」起來的,就像是房子地址通常不公開,外面的路人甲是找不到自己家的,還記得 Day04 啟動的網站嗎?會發現用手機輸入http://127.0.0.1:8000/
是無法連結到自己電腦。
同樣地,當 LINE 要通知我們的伺服器時,它無法直接與我們的電腦溝通,要讓我們程式可以跟 LINE 伺服器互動,需要先搭建一個對外公開的網站。搭建是一個比較繁瑣的過程,但因為網站一但公開要再修正程式碼與維護就會相對困難,我們可以使用 ngrok 軟體,暫時公開自己電腦上的 Django 網路伺服器,讓 LINE 能夠跟它溝通。
Windows 可使用此載點下載 ngrok,解壓縮之後有個 exe,點開執行會跳出 cmd 視窗,輸入:
$ ngrok http 8000
請 ngrok 開一個公開網址導到我的電腦開的網頁伺服器,其端口為 8000。
順利的話會顯示以下畫面:
Forwarding
後面就是暫時公開的網站網址。
在 Django 設定允許 ngrok 網址可以呼叫 (這是一個資安的保護措施,所以我們調整此白名單內容),調整的地方在 Project 設定資料夾中 hulolo
> 參數設定檔 settings.py
:
會看到這一行:
ALLOWED_HOSTS = []
根據 ngrok 所提示的網址改為:
ALLOWED_HOSTS = ["127.0.0.1", "4b2f-114-45-166-OOO.ngrok-free.app"]
本地端
127.0.0.1
也要加進去
到這裡可以用手機輸入看看 https://4b2f-114-45-166-OOO.ngrok-free.app
,如果成功就一樣會看到火箭在飛~
在小黑框中 Ctrl + C
可以取消 ngrok 網站的運行,如果要重新啟動一樣點開 ngrok.exe
,輸入 ngrok http 8000
即可,記得一樣要在 Django 執行 python manage.py runserver
,才能讓 ngrok 成功將網址導到我們的內部伺服器,特別要注意的是 ngrok 所發的網址有可能會有所變動,如果有變動,一樣要在 settings.py
的 ALLOWED_HOSTS
參數中進行更改。
本篇技術文因面向非相關領域人類,盡量以應用面的方式介紹與教學,對於認真好學的同學,也提供一些關鍵字自行搜尋學習:
在這篇文章中,我們學會了: