Heroku 平台
2022-12更新
雲端主機無法繼續運行了,才發現Heroku沒有免費了,現在要錢 QQ
要訂閱才能開啟Web主機
---
Heroku 是一個可以部署個人的程式碼在雲端運行的服務平台,當然環境也都要自己架設。Heroku可以支援多種程式語言,像是 Java、Python、Golang、PHP等等。
註冊完帳號之後,直接建立一個 new app
載 Heroku Cli 來安裝,安裝好後打開CMD就可以下 heroku相關指令了
透過開啟網頁登入後,照著官方給的提示操作 Create repository
之後就可以透過heroku git部署程式碼上去了
Line Bot Developers 平台
來到 Line Developers 登入開發者平台
在Line開發平台中,Channel 頻道 是掛在Provider底下的,
首先要先Create Provider
完成之後點進來,
在 Basic Setting 頁面中,先記錄下 Channel secret 跟 Your user ID
切換到 Messaging API 頁面
接著回來 Issue Channel Access Token
Bot basic ID:
@547ysxxb
Channel Secret:
fee15f6999582d75753a080f52dc2878
Your user ID:
U130e731aa0f63ab7e17cd5966d0c376c
Channel access token (long-lived):
7XO897wTGrVTL5R/NHzpHs8umJstJeey7uAprr0ZShmuDZPBZE6oUOEWK858nOnkiJJgeoIutKFUzW2Wb08GOhAzD0wn0duj+UYEpV+S/DVCbjr18OV22aSP3VWRtQhjm26x6frhwnfiQ6lSqpQgawdB04t89/1O/w1cDnyilFU=
除此之外,還要把 Auto-reply messages 給關閉
這邊填寫的網址是 https://gjlmotea-bot.herokuapp.com/callback
是 Heroku平台上 我的專案的網址的callback方法
Heroku部署檔案
總共會有以下四個檔案
Python 程式面I - 入門篇
參照Github上 Line-bot-sdk 教學用法,
首先在本地中安裝SDK
> pip install line-bot-sdk
直接複製範例程式碼,稍加修改來使用
以下是 main.py 後半部程式碼
@app.route("/callback", methods=['POST'])
def callback():
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature']
# get request body as text
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
print("Invalid signature. Please check your channel access token/channel secret.")
abort(400)
return 'OK'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
message = TextSendMessage(text="我是機器人!")
line_bot_api.reply_message(
event.reply_token,
message)
import os
if __name__ == "__main__":
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port)
程式弄好後,接著上傳到Heroku去!!
$ git init
$ heroku git:remote -a gjlmotea-bot
$ git add .
$ git commit -am "make it better"
$ git push heroku master
可以透過 $ heroku logs --tail 查看現在Heroku機器運行的狀態
這樣的程式碼,可以在收到使用者訊息後回傳一段文字
如果想要有更多的應用,參考 落落長的Line官方API文檔、落落長的python SDK文檔
Heroku連結Github
記得來到Deploy頁面設置部署設定
以下是題外話 追蹤程式碼時的發現
Python 程式面 II - 進階篇 (HMAC)
一開始對 callback() 這個function所做的事情霧煞煞
也不知道這header中帶的 X-Line-Signature 參數的意義,好奇心使然查了才發現,
這與Line通訊用的身分驗證機制有關係(HMAC),
這段HMAC的驗證程式碼,是在Python LineBot套件中的 webhook.py 裡面的 SignatureValidator
由於實在是非常想知道他會印出什麼東西
透過Trace Code技巧找出的此函式位置在
C:\Users\GJLMoTea\AppData\Local\Programs\Python\Python39\Lib\site-packages\linebot
底下的 webhook.py 這一包
運行 範例程式碼(修改Token)後,
打開 Postman 打自己的5000port callback,用 Post 方法打
http://127.0.0.1:5000/callback
Header 要帶入 X-Line-Signature 參數隨便帶
接收到Post請求後,程式運行的結果輸出
運作邏輯分別是這樣子的:
先上此HMAC線上加密平台,
依序填入以下Post Body內容、Line Channel Secret
選擇SHA-256
選擇Base-64
網站輸出的結果便會與剛剛程式gen_signature產生的結果一樣
(可以大致理解為 拿Key 和經sha256過的Key 以及Body完整訊息 此三組訊息一同做Sha-256雜湊)
最終拿到的雜湊值 與Post時帶入的Header 參數X-Line-Signature比對,
如果雜湊值與帶入的X-Line-Signature 完全一樣,代表此Body的訊息確實來自你的Line發出的
(有channel secret的權限 且body未經任何竄改)
沒有留言:
張貼留言