跳到主要內容

LINE 設置

通過官方 LINE Messaging API 將 Hermes Agent 作為 LINE 機器人運行。該適配器以捆綁平臺插件的形式位於 plugins/platforms/line/ 下——無需修改核心代碼,只需像啟用其他平臺一樣啟用它即可。

LINE 是日本、臺灣和泰國占主導地位的即時通訊應用。如果您的用戶位於這些地區,這是他們聯繫您的方式。

運行 hermes gateway setup 並選擇 LINE 以獲取引導式 walkthrough。

機器人如何響應

上下文行為
1:1 聊天U ID)響應每條消息
群聊C ID)當群組在允許列表中時響應
多用戶房間R ID)當房間在允許列表中時響應

入站的文本、圖片、音頻、視頻、文件、貼紙和位置信息均會被處理。出站文本優先使用免費回覆令牌(單次使用,約 60 秒窗口期),當令牌過期後,則回退到計費的 Push API。


步驟 1:創建 LINE Messaging API 渠道

  1. 前往 LINE Developers Console
  2. 創建一個 Provider,然後在其下創建一個 Messaging API 渠道。
  3. 從渠道的 Basic settings 選項卡中,複製 Channel secret
  4. Messaging API 選項卡中,滾動到 Channel access token (long-lived) 並點擊 Issue。複製該令牌。
  5. Messaging API 選項卡中,禁用 Auto-reply messagesGreeting messages,以免它們與機器人的回覆衝突。

步驟 2:暴露 Webhook 端口

LINE 通過公共 HTTPS 交付 Webhook。默認端口為 8646——如有需要,可使用 LINE_PORT 進行覆蓋。

# Cloudflare Tunnel (recommended for production — fixed hostname)
cloudflared tunnel --url http://localhost:8646

# ngrok (good for dev)
ngrok http 8646

# devtunnel
devtunnel create hermes-line --allow-anonymous
devtunnel port create hermes-line -p 8646 --protocol https
devtunnel host hermes-line

複製 https://... URL——您將在下面將其設置為 Webhook URL。在測試期間保持隧道運行。對於生產環境,請設置固定的 Cloudflare 命名隧道,以便 Webhook URL 在重啟時不會更改。


步驟 3:配置 Hermes

添加到 ~/.hermes/.env

LINE_CHANNEL_ACCESS_TOKEN=YOUR_LONG_LIVED_TOKEN
LINE_CHANNEL_SECRET=YOUR_CHANNEL_SECRET

# Allowlist — at least one of these (or LINE_ALLOW_ALL_USERS=true for dev)
LINE_ALLOWED_USERS=U1234567890abcdef... # comma-separated U-prefixed IDs
LINE_ALLOWED_GROUPS=C1234567890abcdef... # optional group IDs
LINE_ALLOWED_ROOMS=R1234567890abcdef... # optional room IDs

# Required for image / audio / video sends — the public HTTPS base URL
# the tunnel resolves to. Without it, send_image/voice/video will refuse.
LINE_PUBLIC_URL=https://my-tunnel.example.com

然後在 ~/.hermes/config.yaml 中:

gateway:
platforms:
line:
enabled: true

這就足夠了——gateway/config.py 中的捆綁插件掃描會自動識別 plugins/platforms/line/。無需編輯 Platform.LINE 枚舉,也無需註冊 _create_adapter


步驟 4:設置 Webhook URL

回到 LINE 控制檯:

  1. 打開您的渠道 → Messaging API 選項卡。
  2. Webhook settingsWebhook URL 下,粘貼 https://<your-tunnel>/line/webhook(注意 /line/webhook 路徑——適配器在此處監聽)。
  3. 點擊 Verify。LINE 會 ping 該 URL;您應該看到狀態碼 200。
  4. Use webhook 切換為 On

步驟 5:運行網關

hermes gateway

代理日誌顯示:

LINE: webhook listening on 0.0.0.0:8646/line/webhook (public: https://my-tunnel.example.com)

從 LINE 應用添加機器人為好友(掃描渠道 Messaging API 選項卡中的二維碼)並向其發送消息。


LLM 響應緩慢

LINE 的回覆令牌是單次使用的,並在入站事件發生後約 60 秒過期。緩慢的 LLM 無法及時回覆,這通常會導致強制調用付費的 Push API。

當 LLM 運行時間超過 LINE_SLOW_RESPONSE_THRESHOLD 秒(默認 45)時,適配器會使用原始回覆令牌發送一個 Template Buttons 氣泡:

🤔 仍在思考。點擊下方以便在答案准備好時獲取。

[ 獲取答案 ]

用戶在方便時點擊 獲取答案——該 postback 會提供一個新的回覆令牌,適配器使用該令牌發送緩存的答案(仍然免費)。

狀態機:PENDING → READY → DELIVERED,以及用於取消運行的 ERROR(孤立的 PENDING 狀態在 /stop 後會解析為“Run was interrupted before completion.”,以防止持久按鈕陷入循環)。

要禁用 postback 按鈕並始終回退到 Push:

LINE_SLOW_RESPONSE_THRESHOLD=0

為了使 postback 流程可靠觸發,請抑制那些會在達到閾值前消耗回覆令牌的閒聊:

# ~/.hermes/config.yaml
display:
interim_assistant_messages: false
platforms:
line:
tool_progress: off

Cron / 通知交付

LINE_HOME_CHANNEL=Uxxxxxxxxxxxxxxxxxxxx     # default delivery target

帶有 deliver: line 的 Cron 任務會路由到 LINE_HOME_CHANNEL。該適配器附帶一個獨立的僅 Push 發送器,因此即使 Cron 在與網關不同的進程中運行,Cron 任務也能正常工作。


環境變量參考

變量是否必需默認值描述
LINE_CHANNEL_ACCESS_TOKEN長期有效的頻道訪問令牌
LINE_CHANNEL_SECRET頻道密鑰(用於 HMAC-SHA256 Webhook 驗證)
LINE_HOST0.0.0.0Webhook 綁定主機
LINE_PORT8646Webhook 綁定端口
LINE_PUBLIC_URL媒體發送必需公共 HTTPS 基礎 URL;發送圖片/語音/視頻時必需
LINE_ALLOWED_USERS三選一逗號分隔的用戶 ID(以 U 為前綴)
LINE_ALLOWED_GROUPS三選一逗號分隔的群組 ID(以 C 為前綴)
LINE_ALLOWED_ROOMS三選一逗號分隔的聊天室 ID(以 R 為前綴)
LINE_ALLOW_ALL_USERS僅開發環境false完全跳過允許列表檢查
LINE_HOME_CHANNEL默認定時任務/通知投遞目標
LINE_SLOW_RESPONSE_THRESHOLD45觸發回傳按鈕前的等待秒數(0 = 禁用)
LINE_PENDING_TEXT"🤔 Still thinking…"與回傳按鈕一同顯示的氣泡文本
LINE_BUTTON_LABEL"Get answer"按鈕標籤
LINE_DELIVERED_TEXT"Already replied ✅"再次點擊已投遞按鈕時的回覆
LINE_INTERRUPTED_TEXT"Run was interrupted before completion."點擊孤立的 /stop 按鈕時的回覆

故障排除

Webhook 驗證出現 "invalid signature"。 Channel secret 複製錯誤,或者你的隧道重寫了請求體。首先使用 curl -i https://<tunnel>/line/webhook/health 進行驗證——該命令應返回 {"status":"ok","platform":"line"}

機器人在群組中收不到任何消息。 檢查 LINE_ALLOWED_GROUPS 是否包含 C... 格式的群組 ID。要查找群組 ID,發送一條測試消息,並在 ~/.hermes/logs/gateway.log 中 grep 搜索 LINE: rejecting unauthorized source——被拒絕的來源字典中包含這些 ID。

send_image 失敗並提示 "LINE_PUBLIC_URL must be set"。 LINE 的 Messaging API 不接受二進制上傳——圖片、音頻和視頻必須是可訪問的 HTTPS URL。將 LINE_PUBLIC_URL 設置為隧道的公共主機名,適配器將自動從 /line/media/<token>/<filename> 提供文件服務。

回傳按鈕從未出現。 要麼 LLM 響應速度快於 LINE_SLOW_RESPONSE_THRESHOLD,要麼另一個氣泡(工具進度、流式傳輸)先消耗了回覆令牌。請參閱“LLM 響應緩慢”下的抑制塊說明。

"already in use by another profile"。 相同的頻道訪問令牌已綁定到另一個正在運行的 Hermes 配置。停止另一個網關或使用單獨的頻道。


限制

  • 氣泡和長度上限。 每個 LINE 文本氣泡上限為 5000 個字符。較長的響應會在每次 Reply/Push 調用中智能分塊為約 4500 個字符,最多分為 5 個氣泡,並儘可能在自然邊界處分割。
  • 不支持原生消息編輯。 LINE 沒有編輯消息 API——流式響應始終發送新的氣泡,從不編輯之前的氣泡。
  • 不支持 Markdown 渲染。 粗體(**)、斜體(*)、代碼塊和標題會呈現為字面字符。適配器在發送前會去除這些格式;URL 會被保留([label](url) 變為 label (url))。
  • 加載指示器僅限私聊。 LINE 拒絕群組和聊天室的聊天/加載 API,因此打字指示器僅在 1:1 私聊中顯示。