Day21 請個小秘 – 3 : Line 串接

https://image01.fishmind.org/cnc/ironman-2026-day21-01.png

Line Bot 串接,有三個麻煩事:

  1. 建立LINE 官方帳號
  2. 建立 LINE Channel
  3. 建立並串接 Webhook

前面兩個,請參考:
https://steam.oxxostudio.tw/category/python/example/line-biz.html
這個講得非常仔細,請大家給他按個讚。

LINE 是 webhook 推送,它要有一個對外的 HTTPS 網址可以打進來。所以 LINE Bot 這條線一定要有網域。
建立好LINE 官方帳號 及 LINE Channel之後,要建立並串接 Webhook,有數種不同方法,都是技術活。我偷懶,用 cloudflare 的 tunnel。

Line 官方帳號

官方帳號後台的帳號一覽:這次新建的是 1962fish,另外兩個是本來就在用的

https://image01.fishmind.org/cnc/ironman-2026-day21-02.png

LINE bot 是在一個官方帳號 LINE Official Account 底下。去 LINE Official Account Manager 建一個,填名字、選類別,輕用量方案免費。這次建的叫 1962fish,是拿來走完整流程的示範帳號,另外兩個是本來就在用的。建立官方帳號建好後,要再建 Channel,這是兩個不同的後台:帳號在 manager 那邊,Channel 在 developers 那邊。

1962fish 的主頁:好友一個、輕用量方案:

https://image01.fishmind.org/cnc/ironman-2026-day21-03.png!

啟用 Messaging API

設定的側欄:帳號設定、回應設定、Messaging API,這三頁都會用到

https://image01.fishmind.org/cnc/ironman-2026-day21-04.png

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

https://image01.fishmind.org/cnc/ironman-2026-day21-05.png

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

啟用時要選服務提供者:可以當場建一個新的

https://image01.fishmind.org/cnc/ironman-2026-day21-06.png

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

https://image01.fishmind.org/cnc/ironman-2026-day21-07.png

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

https://image01.fishmind.org/cnc/ironman-2026-day21-08.png

把Line的罐頭回覆關掉

回應設定的預設值:歡迎訊息開著、自動回應訊息也開著

https://image01.fishmind.org/cnc/ironman-2026-day21-09.png

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

三個都關掉之後,左下角跳一行「已儲存」,那是唯一的回饋

https://image01.fishmind.org/cnc/ironman-2026-day21-10.png

拿兩把憑證

channel 的 Basic settings:Channel ID 在這一頁,往下捲才是 secret

https://image01.fishmind.org/cnc/ironman-2026-day21-11.png

到 LINE Developers Console,點進剛剛出現的那個 channel,要拿兩樣東西。

  1. 在 Basic settings 那一頁,叫 Channel secret,三十二碼。它是拿來驗簽章的:LINE 打進來的每一個請求都帶一個簽章,後端用這把 secret 算一次,對不起來就丟掉。
  2. 在 Messaging API 那一頁,叫 Channel access token long-lived,一百七十二碼,要按 Issue 才會產生。它是拿來回話的:後端要送訊息出去,帶的就是它。

Channel secret 在 Basic settings 最下面,管的是進來那個方向

https://image01.fishmind.org/cnc/ironman-2026-day21-12.png

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

https://image01.fishmind.org/cnc/ironman-2026-day21-13.png

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

https://image01.fishmind.org/cnc/ironman-2026-day21-14.png

憑證怎麼交給 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 底下,不在網域那一區

https://image01.fishmind.org/cnc/ironman-2026-day21-15.png

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

https://image01.fishmind.org/cnc/ironman-2026-day21-16.png

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

https://image01.fishmind.org/cnc/ironman-2026-day21-17.png

因為我有個網域在 Cloudflare 上,所以用 Cloudflare 的 tunnel。tunnel 的好處是它只做對外連線:機器上跑一個 cloudflared 容器,它會主動處理連線。

tunnel 的概覽頁,上面那排分頁等一下要點對

https://image01.fishmind.org/cnc/ironman-2026-day21-18.png

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

https://image01.fishmind.org/cnc/ironman-2026-day21-19.png

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

https://image01.fishmind.org/cnc/ironman-2026-day21-20.png

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

https://image01.fishmind.org/cnc/ironman-2026-day21-21.png

輸入好後,測試一下:

curl -s -o /dev/null -w "%{http_code}\n" -X POST https://line-bot-1962.iron30.com/line/1962/webhook

「已發布應用程式路由」,增加一個路由:加完變三條;旁邊那個「主機名稱路由」是 private 的

https://image01.fishmind.org/cnc/ironman-2026-day21-22.png

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

https://image01.fishmind.org/cnc/ironman-2026-day21-23.png

回 Line Developers 填網址

Webhook settings 一開始是空的,紅字提醒不能留空

https://image01.fishmind.org/cnc/ironman-2026-day21-24.png

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

網址填好了,但下面那個 Use webhook 還是關的

https://image01.fishmind.org/cnc/ironman-2026-day21-25.png

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

https://image01.fishmind.org/cnc/ironman-2026-day21-26.png

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

https://image01.fishmind.org/cnc/ironman-2026-day21-27.png

不接受邀請

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

帳號設定裡的「加入群組或多人聊天室」,新帳號預設是不允許

https://image01.fishmind.org/cnc/ironman-2026-day21-28.png

第一次進群組就被踢出來

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

16:49 把 bot 加進群組,同一分鐘它就自己離開了;16:51 開關改好再加一次,留住了

https://image01.fishmind.org/cnc/ironman-2026-day21-29.jpg

通了

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

16:52 再傳一次,這次它回話了:你好!有什麼可以幫忙的嗎?

https://image01.fishmind.org/cnc/ironman-2026-day21-30.jpg

現在 Line Bot 每天在做的事

  1. 每天早上 11:00 提醒發文,晚上 21:00 發文檢查,這兩條就是底座那篇設在頁面上的。
  2. 早上 07:30 送新增的告警,接著送一份維運日報。

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

https://image01.fishmind.org/cnc/ironman-2026-day21-31.jpg

接上了

到這裡,兩條線都接上了:Telegram 負責我跟它講話,LINE 負責它跟我講話,還有一個群組,可以多人同步工作。LINE 這條線主要是設定問題,麻煩的全部集中在兩個後台的預設值上,相關程式那一段反而只有二十行。

整個過程,基本上是: win + shift + s,擷圖給 claude,跟 claude 一步一步走出來的。

好啦,可以透過 LINE 接上行動裝置了。明天來弄名片系統,CRM最重要的開端。


本文為 iThome 2026 鐵人賽「一個人的機房」系列第 21 篇,同步發表於 iT 邦幫忙

發佈留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料