iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
Software Development

做一支專屬自己學校的課程評價 LINE Bot 吧!系列 第 5

[Day 05] 獲得 LINE Bot 密鑰、建立環境變數檔與建立 ngrok 臨時公開網站

  • 分享至 

  • xImage
  •  

在開始之前,先到 LINE Official Acoount Manager 建立一支野生的機器人,LINE 有為每支機器人配好原生的後台管理、自動回覆、聊天與基礎分析等功能,不過因為我們想要做的事情比較特別,所以會需要自己建立相關的後台與邏輯,相關建立流程相信你很聰明,不會很複雜,網路上也有很多教學。當成功註冊創立一支機器人之後,再接著進行以下的步驟:

取得 LINE Bot 三把鑰匙

在資訊安全的考量下,為了避免別人綁架了你的機器人,我們與 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 IDChannel Secret 見到以下資訊就自己存在一個沒有人知道的地方,最好是挖個洞埋起來
https://ithelp.ithome.com.tw/upload/images/20240919/20151510eUfhfikRUx.png

還有一個 Channel Access Token 放在一個比較調皮的地方,將以下網址花括號部分改為剛剛取得的 Channel ID : https://developers.line.biz/console/channel/{你的 Channel ID}/messaging-api:
https://ithelp.ithome.com.tw/upload/images/20240919/20151510mDjebXe2ep.png

滑到最底部會看到Channel Access TokenIssue 按鈕,點下之後就會產生,同樣地,自己存在一個沒有人知道的地方,最好是挖個更深的洞埋起來

建立 .env 環境檔放置環境變數

這些屬於機密型的資料,我們稱之為環境變數,為了存放這些見不得人的參數,可以在與 manage.py同一層的地方創立一個 .env檔案,然後像這樣裝進去,之後會再用套件去呼叫這個檔案:

LINE_CHANNEL_SECRET="meowmeowmeowmeow1122334455"
LINE_CHANNEL_ACCESS_TOKEN="fjdklinsdfoEJQIWLEOJDNSDNSJKLJNIQOWPNQWIOD:NQWID:QLWID:QWLJK"

環境變數的變數命名習慣上會以全大寫加上底線取名。

建立與 LINE 伺服器溝通臨時公開網站 (ngrok)

我們昨天所運行的網站,對外面的世界來說它是「隱藏」起來的,就像是房子地址通常不公開,外面的路人甲是找不到自己家的,還記得 Day04 啟動的網站嗎?會發現用手機輸入http://127.0.0.1:8000/是無法連結到自己電腦。

同樣地,當 LINE 要通知我們的伺服器時,它無法直接與我們的電腦溝通,要讓我們程式可以跟 LINE 伺服器互動,需要先搭建一個對外公開的網站。搭建是一個比較繁瑣的過程,但因為網站一但公開要再修正程式碼與維護就會相對困難,我們可以使用 ngrok 軟體,暫時公開自己電腦上的 Django 網路伺服器,讓 LINE 能夠跟它溝通。

  1. Windows 可使用此載點下載 ngrok,解壓縮之後有個 exe,點開執行會跳出 cmd 視窗,輸入:

    $ ngrok http 8000
    

    請 ngrok 開一個公開網址導到我的電腦開的網頁伺服器,其端口為 8000。

    順利的話會顯示以下畫面:
    https://ithelp.ithome.com.tw/upload/images/20240919/20151510KwNxW3guFI.png

    Forwarding 後面就是暫時公開的網站網址。

  2. 在 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也要加進去

  3. 到這裡可以用手機輸入看看 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.pyALLOWED_HOSTS 參數中進行更改。

再往前一點點

本篇技術文因面向非相關領域人類,盡量以應用面的方式介紹與教學,對於認真好學的同學,也提供一些關鍵字自行搜尋學習:

  • LINE 伺服器與我們程式呼叫的有一個技術名詞稱為 Webhook
  • 常見網頁開發預設端口為 8000
  • 因資安因素,LINE 要求使用 https 而非 http 作為 webhook 網址,所以才需要建臨時公開網站

覆盤

在這篇文章中,我們學會了:

  • 向 LINE 申請與機器人互動的密鑰
  • 用 .env 檔案放置環境變數
  • 利用 ngrok 建立臨時公開網站

上一篇
[Day 04] 模組化程式設計: 淺談 Django 檔案目錄、建立 Project 與 App、啟動網站
下一篇
[Day 06] 原型設計: 歸剛只會回你貓貓圖 (ImageSendMessage) 的 LINE Bot 聊天機器人
系列文
做一支專屬自己學校的課程評價 LINE Bot 吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言