偵測新訊息
要讓自己的系統得知對話有新訊息(例如顯示通知、提醒真人客服),本篇說明建議做法:優先用 Webhook 推送;需要輪詢時只讀有更新的對話、每段對話只讀第一頁
想在自己的系統顯示「有新訊息」的提醒、或在客戶留言時通知真人客服,建議依下列順序選擇做法:
優先用 Webhook 推送:對話平台的訊息 Webhook每則訊息推送一次,不需要輪詢(見用 Webhook 取代輪詢)。
只關心轉真人:用轉真人 Webhook 事件,只在轉真人流程的狀態改變時推送。
必須輪詢時:依本篇的輪詢建議做法,只找出有更新的對話、每段對話只讀訊息列表的第一頁。
請不要每輪把整段對話歷史從最新翻到最舊重抓。一段數百則訊息的對話每輪要讀好幾頁,每頁都是一次完整查詢;每隔幾秒對多段對話這樣做,會讓你的輪詢本身變慢,也會拖慢平台的整體回應速度。
用 Webhook 取代輪詢
設定位置:後台 → 客服對話 → 對話平台 → 選擇對話平台 → Webhook 設定 → 新增 Webhook,類型選 Incoming 或 Outgoing(後台 Incoming 的說明文字雖為「接收外部請求」,實際是把每則客戶訊息推送到你設定的網址;接收外部訊息的是 Receive),Payload 格式選 MaiAgent Standard(MaiAgent 標準格式)。推送內容、來源驗證與重試行為見訊息 Webhook。
WhatsApp 對話平台的設定頁目前沒有 Webhook 設定 分頁,請改用下方的輪詢做法。
兩種 Webhook 是各自獨立的設定,可同時啟用;推送內容都以訊息或事件的 id 去重。訊息 Webhook 每則只推送一次、失敗不會重試,不保證送達。下方的輪詢做法可以低頻補查客戶訊息(Incoming);AI 或客服的回覆(Outgoing)推送失敗時,輪詢範例不一定會讀到,請改查 Webhook 的傳送紀錄找出失敗的推送(見訊息 Webhook → 回應與重試)。
輪詢建議做法
沒辦法接收 Webhook(例如接收端無法對外開放)時,請用下面兩個 API 組合輪詢。
1. 找出有更新的對話
對話列表固定依最後訊息時間由新到舊排列(回應中的 lastMessageCreatedAt)。每段對話記下上次看到的 lastMessageCreatedAt 與最後一則訊息的 lastMessage.id,兩者任一不同就是有更新的對話(時間只精確到秒,同一秒連傳兩則時只有 id 會變);每輪從第一筆往下讀,讀到比「目前看過的最新時間往前 10 分鐘」還舊的對話就停。一般情況只需要讀第一頁;只有這段時間內更新的對話超過 page_size 段,才需要跟著回應的 next 讀下一頁。
往前多看 10 分鐘是因為:以 API 對話時,對話的 lastMessageCreatedAt 可能在 AI 回覆產生完才寫入,寫入的仍是客戶訊息的時間,所以有可能比你上一輪看過的其他對話還舊。只比較「是否比上輪最新時間新」會漏掉這類對話。
2. 每段有更新的對話只讀第一頁訊息
訊息列表的第一頁就是最新的訊息:系統先取最新的 page_size 則,頁內再依時間由舊到新排列,所以最後一則就是整段對話最新的訊息。回應中的 next 指向更舊的訊息,偵測新訊息時不要每輪都往回翻。
以訊息 id 判斷是否處理過:第一頁裡沒處理過的 id 就是新訊息。只有一種情況需要翻頁——第一頁全部都是沒處理過的訊息(兩輪之間進來超過 page_size 則),才跟著 next 往更舊讀,讀到處理過的訊息為止。
3. 輪詢間隔與每頁筆數
輪詢間隔
30–60 秒
需要更即時的通知請改用 Webhook,不要把間隔縮到幾秒
page_size
20
預設 20、上限 100。每頁筆數越大,單次回應越慢、內容越大
呼叫範例
API 金鑰的權限與金鑰擁有者在組織中的角色相同,擁有者需能查看該對話平台的對話,詳見 API 認證 → API 金鑰的權限範圍。
最後更新於
這有幫助嗎?