HI!大家好,我是 Shammi 😊
接續昨天的 LINE API 申請,我們可以想像一下:使用者在 LINE 上發送了一則訊息,這則訊息要如何穿越網路的千山萬水,精準地傳送到我們在 Colab 上運行的程式呢?
答案就是:Webhook 和 ngrok。
👉 Webhook:LINE 平台會使用一個「回呼網址」(Webhook URL),當有人傳訊息給你的機器人時,它就會自動將這則訊息以 POST 請求的形式,發送到這個網址。
👉 ngrok:我們的 Colab 筆記本位於一個私密的內部網路,無法被 LINE 直接存取。ngrok
的作用就像一個「隧道」,它會為我們在 Colab 上的程式,建立一個可以被公開存取的網址。
今天,我將完成以下步驟,讓 LINE 和 Colab 之間建立起這條神奇的連結:
再最開始的時候,需要在 Colab 環境中安裝 ngrok
。
#安裝 ngrok 套件
!pip install pyngrok
ngrok
服務需要認證金鑰才能運作。
1️⃣ 取得 Auth Token:
👉 前往 ngrok 官網 註冊一個免費帳號。
👉 登入後,在左側選單點擊「Your Authtoken」,把眼睛打開會看到一串英數字。
👉 點選「copy」 Auth Token 字串。
2️⃣ 在 Colab 中設定金鑰:
將以下程式碼貼到筆記本中,並將 YOUR_NGROK_AUTH_TOKEN
替換成你剛剛複製的金鑰。
NGROK_AUTH_TOKEN = "YOUR_NGROK_AUTH_TOKEN" #替換成你的 ngrok Auth Token
from pyngrok import ngrok
ngrok.set_auth_token(NGROK_AUTH_TOKEN)
這段可以優化至存入金鑰。
在我們把 RAG 邏輯整合進去之前,我們先建立一個最簡單的伺服器來測試 Webhook 是否能正常運作。我們將使用輕量級的 Flask
框架。
#安裝 Flask 套件
!pip install Flask
接著,將以下程式碼貼到一個新的儲存格,這段程式碼將啟動一個 Web 伺服器,並將它運行在 Colab 的內部 Port 5000。
rom flask import Flask, request, jsonify
from pyngrok import ngrok
import threading
import sys
app = Flask(__name__)
#定義接收LINE Webhook請求的路由
@app.route("/callback", methods=['POST'])
def callback():
data = request.json #接收訊息
print("收到來自 LINE 的訊息:", data, file=sys.stdout, flush=True)
return jsonify({"status": "ok"}), 200 #確認訊息
#啟動 Flask 伺服器
def run_flask():
app.run(port=5000)
flask_thread = threading.Thread(target=run_flask)
flask_thread.start()
現在,我們要使用 ngrok
,將上面運行的 Port 5000 伺服器,暴露成一個公開的 HTTPS 網址。
#啟動ngro隧道,將 Port 5000 暴露出來
public_url = ngrok.connect(5000)
print("ngrok public URL:", public_url)
執行這個儲存格後,會看到類似 https://xxxxxx-xxxx-xxxx-xxxx-xxxx.ngrok-free.app
這樣的網址,請複製它。
最後,回到 Day 15 的 LINE Developers 頁面。
1️⃣ 登入 LINE Developers,進入 LINE Bot 頻道管理頁面。
2️⃣ 點擊上方的「Messaging API」分頁。
3️⃣ 找到「Webhook URL」這個區塊,點擊「Edit」按鈕。
4️⃣ 將你從 ngrok
取得的公開網址貼上,並記得在網址後方加上 /callback
,例如:https://xxxxxx-xxxx.ngrok-free.app/callback
5️⃣ 點擊「Verify」按鈕,如果顯示「Success」,代表你的 Webhook 網址設定成功!
6️⃣ 重要! 記得將下方的「Use webhook」選項打開。
參考結果:
以上步驟執行完後,就可以測試 LINE 的聊天室了!
回到 Colab 筆記本,如果在伺服器的輸出中看到 收到來自 LINE 的訊息
的字樣,就代表成功運作囉!
今天的篇幅成功在 Colab 上建立了一個能夠接收 LINE 訊息的伺服器,並使用 ngrok
將它暴露在網路上。這是讓 AI 對話機器人能夠與使用者互動的關鍵一步!
下一篇文章,我將會在 Day 1-13 辛苦建構的 RAG 核心程式碼,與這個 LINE Webhook 伺服器結合,讓「阿米 AI 對話機器人」能夠真正開始回答使用者的問題!