先看訊息長什麼樣子
| 看見的情況 | 優先檢查 | 要留下的證據 |
|---|---|---|
| 固定招呼+Bot 答案 | 內建回應與 Webhook 同時開啟 | 兩則內容、回應設定 |
| 相同答案出現兩次 | 事件重送、程式重試或重複工作 | 事件 ID、執行與發送紀錄 |
| 兩段不同措辭回答同一問題 | AI 生成工作是否重跑 | 生成工作 ID、草稿版本 |
| 隔一段時間又收到一次 | 佇列重試、逾時後補送 | 原事件與每次重試時間 |
| 真人接手後 Bot 還在回 | 對話接手狀態未同步 | 接手時間、回覆產生時間 |
第一種:內建自動回應與外部 Bot 都有回
LINE 官方建置說明確認,內建歡迎訊息、自動回應與 Messaging API 可以並用。開啟 Webhook 不會替你把其他回覆來源關掉。
LINE 官方帳號後台
- 客戶傳訊息例如詢問營業時間
- 內建自動回應命中既有規則
- 固定答案從官方帳號送出
你的 AI 客服
- 同一則訊息產生 Webhook 事件
- AI 產生回答根據已核准的資料
- 另一則答案也從官方帳號送出
到 LINE Official Account Manager 檢查自動回應、關鍵字規則與歡迎訊息,安排誰負責哪種情況。例如保留加入好友的歡迎訊息,一般問答交給外部 Bot;若 Bot 也處理 follow 事件,就要避免再發一次相同招呼。
測試時每次只調整一項,用測試帳號傳一則容易辨認的訊息,觀察哪一則消失。若是營運中的帳號,先記錄原設定與恢復方式,再安排測試時段。
第二種:同一個 Webhook 被處理了兩次
網路中斷或接收端沒有正常回應,都可能讓事件再送一次。依 LINE 的 Webhook 說明,應使用 webhookEventId 辨識重複事件。deliveryContext.isRedelivery 是線索,但不能單獨代表「上次已經處理完」。
第一次處理
- 事件 E-01 入列建立唯一生成工作
- AI 草稿完成保存草稿與版本
- 檢查並發送確認對話尚由 Bot 處理
推播暫時失敗
- 查原發送工作辨識同一事件與收件者
- 取出原草稿只有需改內容時才另行核准
- 依 API 規則重試支援的推播沿用 Retry Key
接收事件去重、生成工作去重與發送重試是三件事,要分別留下狀態。
只寫「先查 ID 有沒有,再新增」還有漏洞:兩個程序可能同時查到沒有,接著都開始做。實作要讓任務取得具有唯一性,例如資料庫唯一限制搭配交易;同時保留處理中、已完成、失敗及重試資訊。
也不要在還沒可靠保存事件前就回傳成功,否則後續工作失敗,可能失去補處理線索。接收、儲存、背景處理與對外發送需要各自有紀錄。
AI 回答不同,也可能是同一份工作重跑
傳統固定回覆重複時,兩則文字常常一模一樣。生成式 AI 可能每次寫出不同句子,所以不能只靠答案字面判斷。要把一次處理串起來看:LINE 的事件 ID、內部生成工作 ID、使用的知識版本、草稿版本,以及實際發送結果。
例如第一次已經生成草稿,只在推播時逾時,背景工作卻從第一步重新跑,模型就可能再回答一次。把生成結果保存下來,依工作狀態續做發送,會比遇錯就整條流程重跑更容易追查。
如果使用者真的又傳了一則訊息,即使文字相同,也可能是新的追問。這時要依新事件和對話脈絡處理,不能因為「今天回答過同樣文字」就全部擋掉。
AI 慢回時,先確認是哪一段等待
讀取知識庫、模型生成與工具執行都可能增加等待時間。LINE 官方建議非同步處理事件;實作上可先可靠保存工作,再由背景處理生成與發送,並另外處理等待提示。
等待提示可以用固定文字說明正在查詢,最後再送一份結果。如果結果還沒產生,就不要每次重試都重發提示。測試也要包含模型逾時、知識來源缺漏和發送失敗,觀察是否真的只產生預期的一份正式答案。
第三種:送出逾時後,程式又推播一次
發送端逾時,只能代表沒有及時拿到結果,不一定代表 LINE 沒有接受。若程式立刻再推播,就可能讓客戶收到兩次。
LINE 的 API 重試文件建議,支援的推播 API 從第一次請求就帶上 X-Line-Retry-Key,同一個發送工作的重試沿用相同 Key。這套機制適用官方列出的 Push、Multicast、Narrowcast 和 Broadcast,不適用 Reply API。每次重試換一個 Key,仍會被視為新的工作。
如果設計本來就是先回「已收到」,處理完再推播結果,兩則訊息是預期行為。此時要檢查它們是否各有目的,並把等待提示與最終結果寫清楚。
第四種:真人接手了,背景的 AI 回覆還沒停
對話轉人工時,除了更新畫面上的接手狀態,背景工作在真正發送前也要再檢查。AI 在接手前已經開始生成,幾秒後才完成的情況很常見;若只在工作開始時檢查,仍可能插話。
10:00:00 收到客戶問題,建立 AI 工作
10:00:01 AI 開始讀取資料與生成
10:00:03 客服接手,對話狀態改為人工處理
10:00:04 AI 草稿完成
發送前檢查:目前已由真人處理
處理結果:保留草稿供客服參考,不自動送出以上是虛構時序。正式系統還要處理「檢查完狀態、正準備送出時,真人才接手」的競爭情況,安排清楚的發送鎖定或工作取消機制,並說明已發出的訊息無法靠停止背景工作收回。
團隊可以先定義 Bot、等候人工、人工處理及恢復 Bot 四種狀態,並指定誰能恢復。詳細流程可接著看 LINE AI 助理與真人接手。
提示詞能改善回答,發送控制要另外做
提示詞可以要求 AI 在資料不足時追問、保留來源,或把回答寫得簡短;它無法知道另一個伺服器上的工作是否已送出訊息。若發生重複發送,先查流程紀錄,再調整模型與回答內容。
需要核對客服草稿時,可要求 AI 輸出「回答草稿、引用資料、待人工確認項目」,由程式驗證後再顯示或發送。結構化輸出文件說明了固定格式的方式,但格式驗證不會替你完成事件去重、事實查核或發送授權。
常見問題
開啟 Webhook,就會自動停用 LINE 內建自動回應嗎?
不會。內建自動回應與 Messaging API 可以同時運作。需要到 LINE Official Account Manager 檢查回應設定,並決定每種情況由哪一條流程回覆。
收到 isRedelivery 為 true 的事件,可以直接丟掉嗎?
不建議一律丟掉。它可能是第一次真正成功進入你系統的事件。應以 webhookEventId 查詢處理狀態,區分未完成、處理中與已完成,再決定續做或略過。
X-Line-Retry-Key 可以解決所有重複回覆嗎?
不能。它用於官方列出的 Push、Multicast、Narrowcast 與 Broadcast API 重試,不適用 Reply API,也無法阻止內建自動回應與外部 Bot 同時送出不同訊息。
在提示詞寫「不要重複回覆」就有用嗎?
提示詞可以調整同一份答案的內容,無法阻止兩個背景工作各自生成或發送。要先用事件 ID、生成工作和發送紀錄管理唯一性,再確認真人接手狀態。
排查時請帶這些紀錄
兩則回覆內容與時間、回覆來源、事件 ID、重送標記,以及後端每次發送的結果就很有用。密鑰、完整權杖和客戶個資不用貼出來。如果訊息根本進不了 Bot,而是 Webhook 回 404,改看 Webhook 路由排查那一篇。
資料查核:2026 年 10 月 27 日。AI 工作與時間順序為實作示例;API 行為請對照上述官方文件。