
Line Bot 串接,有三個麻煩事:
前面兩個,請參考:
https://steam.oxxostudio.tw/category/python/example/line-biz.html
這個講得非常仔細,請大家給他按個讚。
LINE 是 webhook 推送,它要有一個對外的 HTTPS 網址可以打進來。所以 LINE Bot 這條線一定要有網域。
建立好LINE 官方帳號 及 LINE Channel之後,要建立並串接 Webhook,有數種不同方法,都是技術活。我偷懶,用 cloudflare 的 tunnel。
Line 官方帳號
官方帳號後台的帳號一覽:這次新建的是 1962fish,另外兩個是本來就在用的

LINE bot 是在一個官方帳號 LINE Official Account 底下。去 LINE Official Account Manager 建一個,填名字、選類別,輕用量方案免費。這次建的叫 1962fish,是拿來走完整流程的示範帳號,另外兩個是本來就在用的。建立官方帳號建好後,要再建 Channel,這是兩個不同的後台:帳號在 manager 那邊,Channel 在 developers 那邊。
1962fish 的主頁:好友一個、輕用量方案:
!
啟用 Messaging API
設定的側欄:帳號設定、回應設定、Messaging API,這三頁都會用到

Messaging API 這一頁,狀態寫「未使用」,下面那顆綠色按鈕就是啟用

官方帳號建好之後,還不能用程式收發訊息。到設定裡面的 Messaging API 那一頁,按下啟用。啟用的時候,會要你選一個服務提供者 Provider:可以建一個新的,也可以選已經有的。這次選已經有的那個,這樣三支 bot 會歸在同一個 provider 底下,啟用之後,developers 那個後台才會出現對應的 channel。
啟用時要選服務提供者:可以當場建一個新的

也可以選已經有的那一個,三支 bot 就會歸在同一個 provider 底下

啟用之後 developers 那邊才看得到對應的 channel,這個 provider 底下現在有三個

把Line的罐頭回覆關掉
回應設定的預設值:歡迎訊息開著、自動回應訊息也開著

同一個後台裡還有一頁叫回應設定,新建的官方帳號預設會開兩個東西:自動回應訊息,還有加入好友的歡迎訊息。這兩個如果開著,使用者傳會收到的是 LINE 自己的罐頭回覆。關掉之後畫面左下角會跳一行已儲存,那一行是唯一的回饋,沒有別的確認。
三個都關掉之後,左下角跳一行「已儲存」,那是唯一的回饋

拿兩把憑證
channel 的 Basic settings:Channel ID 在這一頁,往下捲才是 secret

到 LINE Developers Console,點進剛剛出現的那個 channel,要拿兩樣東西。
Channel secret 在 Basic settings 最下面,管的是進來那個方向

換到 Messaging API 分頁,上面是 Bot basic ID 與加好友的 QR code

同一頁最下面:Channel access token 要自己按 Issue 才會產生;上面兩項這時候已經是 Disabled

憑證怎麼交給 claude
把兩個憑證,secret 跟 token 寫成一個檔案放在機器上,告訴 claude 檔案在哪裡,讓它自己搬進 .env,搬完把原檔刪掉。不要貼進對話。
Channel secret 跟 Channel access token 我寫在 /home/bob/line-1962.txt 這個檔裡。
搬進 .env,⛔ 搬完把原檔刪掉。
🔴 這兩個值 ⛔ 不可以寫進程式碼、不可以印在 log、不可以進 git、⛔ 不可以貼回對話裡。
後端只有二十行:
到 192.168.0.40,myagent.iron30.com,進行 line bot 的串接。
在這台上:
- app/channels/line_1962.py(比照 line_home.py),路由 POST /line/1962/webhook
- app/main.py 加 include_router
- app/config.py 加 LINE_1962_CHANNEL_SECRET / LINE_1962_CHANNEL_ACCESS_TOKEN
- 憑證進 agent-core 的 .env(env 有兩份,organizer 也要用的話那一份同步)
- docker compose up -d --no-deps agent-core 重建
驗收:curl -X POST http://localhost:8800/line/1962/webhook 回 403(缺簽章)= 路由活著。
⛔ 這步沒過就先別往下走。
先驗路由是不是活著:
後端改完、容器重建好,先在機器上打一個沒有簽章的請求進去,看它回什麼。回 403 就是對的:代表路由是活的,請求走到了程式裡,被簽章驗證擋下來。這一步沒過就別往下走。
Cloudflare 設定:
Cloudflare 側欄,tunnel 藏在 Zero Trust 底下,不在網域那一區

Zero Trust 進去之後:網路 → 連接器

連接器列表:這條 tunnel 叫 line-bot,狀態正常,已經跑了兩天

因為我有個網域在 Cloudflare 上,所以用 Cloudflare 的 tunnel。tunnel 的好處是它只做對外連線:機器上跑一個 cloudflared 容器,它會主動處理連線。
tunnel 的概覽頁,上面那排分頁等一下要點對

已發布應用程式路由:本來就有兩條,服務都填 agent-core:8800

新增第三條:子網域 line-bot-1962、路徑留空、類型 HTTP、URL 填容器名加 port

連接器明細:一條連線、資料中心在新加坡與台北,這條線是機器主動連出去的

輸入好後,測試一下:
curl -s -o /dev/null -w "%{http_code}\n" -X POST https://line-bot-1962.iron30.com/line/1962/webhook
「已發布應用程式路由」,增加一個路由:加完變三條;旁邊那個「主機名稱路由」是 private 的

DNS 那三筆 Tunnel 型記錄是 Cloudflare 自己建的,不用自己去加

回 Line Developers 填網址
Webhook settings 一開始是空的,紅字提醒不能留空

回到 LINE Developers Console 的 Messaging API 那一頁,Webhook URL 那格填剛剛開出來的網址,後面接後端那條路徑,按 Update。然後按 Verify,跳出 Success 才算通。Use webhook 那個開關要另外打開。Verify 成功不等於這個有開。Verify 只送一次性的測試事件,這個開關才決定真實訊息會不會轉過來。
網址填好了,但下面那個 Use webhook 還是關的

放大看清楚:Verify 還沒按,開關也還沒開,這兩件事是分開的

按 Verify 跳出 Success,Use webhook 也打開了,這樣才算真的通

不接受邀請
這支 bot 認的是群組,所以要把它拉進一個 LINE 群組。先回官方帳號後台的帳號設定,將被邀請加入群組或多人聊天室,調整為允許。
帳號設定裡的「加入群組或多人聊天室」,新帳號預設是不允許

第一次進群組就被踢出來
還沒允許之前,把 bot 拉進群組,它立刻自動退出,畫面上就是加入、離開兩行連在一起,中間只差幾秒。後端的 log 更清楚:只收到一個離開事件,連加入事件都沒有。所以一定要調整成允許加入群組或多人聊天室。
接著是白名單 bootstrap:這支 bot 認的是群組 id,不是個別使用者 id,所以私訊它是不會有反應的。第一次在群組裡傳訊息會被擋掉,這是正常的。但 log 會把那個群組 id 印出來,把它填進設定檔,重新部署,再傳一次就通了。
16:49 把 bot 加進群組,同一分鐘它就自己離開了;16:51 開關改好再加一次,留住了

通了
在群組裡傳 Hello,bot 回:你好!有什麼可以幫忙的嗎?從加進群組到它回話,中間隔了三分鐘,那三分鐘就是上面那個開關跟白名單。整條線到這裡是通的:訊息從手機進 LINE 平台,打到 Cloudflare 邊緣,順著 tunnel 進到容器,簽章驗過,路徑分流到第三支的處理函式,走同一個 agent,答案原路回來。規則:端到端第一次通了,先回頭把每一段的判準寫下來,趁還記得哪一段回什麼。
16:52 再傳一次,這次它回話了:你好!有什麼可以幫忙的嗎?

現在 Line Bot 每天在做的事
正式那條線每天在推的:11:00 發文提醒、21:00 發文檢查、07:30 的新增告警與維運日報

接上了
到這裡,兩條線都接上了:Telegram 負責我跟它講話,LINE 負責它跟我講話,還有一個群組,可以多人同步工作。LINE 這條線主要是設定問題,麻煩的全部集中在兩個後台的預設值上,相關程式那一段反而只有二十行。
整個過程,基本上是: win + shift + s,擷圖給 claude,跟 claude 一步一步走出來的。
好啦,可以透過 LINE 接上行動裝置了。明天來弄名片系統,CRM最重要的開端。