← 所有文章
對比選型

WhatsApp 釘選聊天與釘選訊息:如何選對 API?

WhatsApp 釘選聊天是讓某個對話在聊天清單中更容易找到;釘選訊息則是凸顯對話裡的一則內容。兩者不是同一項設定。在透過 API 管理的收件匣中,先確認操作對象:聊天需要對話 ID;訊息還需要自己的 ID,釘選別人傳送的訊息時,也要明確指定傳送者 ID。

重點摘要

  • 聊天釘選管理已連結帳號的聊天清單;訊息釘選選擇對話內的內容。
  • UnifyPort 提供不同端點,取消釘選的方式也不同。
  • 對話釘選沒有時間參數;訊息釘選支援選填的 duration_seconds。
  • conversation.updated 裡的 pinned 是聊天清單狀態,不是訊息釘選狀態。

釘選聊天與釘選訊息的差別

WhatsApp 的傳訊息給自己說明提到將聊天釘選在清單頂端;釘選訊息說明則要求選擇特定訊息及釘選時間。同樣叫做釘選,目標卻不同。

目的操作對象不代表
方便找到客戶對話聊天清單項目某則客戶訊息也會被凸顯
在群組中凸顯操作說明單則訊息群組會移到收件匣最上方
將緊急案件分派給客服應用程式自己的工單或佇列平台釘選會建立負責人或期限

官方訊息釘選說明也指出,群組內釘選訊息會產生系統訊息,顯示由誰執行;管理員可以控制成員是否能釘選。因此,群組訊息釘選不是客服的私人書籤。缺少聊天記錄也可能使使用者看不到被釘選的訊息,釘選並不能復原內容。

若只想在客服軟體內保留私人提醒,建議使用應用程式自己的書籤,不要直接變更平台狀態。這是設計建議,不是新增的 API 功能。

依目標選擇 UnifyPort 契約

以下是 UnifyPort 的非官方介面,不是 Meta Cloud API。

項目釘選對話釘選訊息
方法與路徑POST /v1/accounts/{account_id}/conversations/pinPOST /v1/messages/pin
帳號位置URL 的 account_idJSON 的 account_id
JSON 目標conversation_idconversation_id、message_id;他人的訊息指定 sender_id
狀態控制路徑本身要求釘選pinned: true 釘選,pinned: false 取消
時間沒有時間參數釘選時可填 duration_seconds
取消方式獨立的取消對話釘選端點相同訊息端點傳入 pinned: false

建立請求前,請核對釘選對話、取消對話釘選與釘選/取消釘選訊息參考。

不要將原生應用程式的時間選項自行加入對話 API,也不要向對話釘選端點傳入訊息操作的 pinned: false,期待它取消釘選。每個端點都有各自的契約。

目前平台操作支援矩陣將對話釘選與取消釘選對應到 WhatsApp、LINE,但訊息釘選僅對應到 WhatsApp。不支援的組合會回傳 501 unsupported_by_provider。同時整合 LINE 與 WhatsApp 時,必須分別控制兩種按鈕;LINE 支援聊天釘選,不代表支援訊息釘選。

固定選中的訊息,不要改成最新一則

從已儲存的 message.received 事件選取訊息時,欄位對應如下:

  • 事件頂層 account_id → account_id;
  • data.conversation.id → conversation_id;
  • data.message.id → message_id;
  • data.sender.id → sender_id。

訊息釘選參考指出,省略 sender_id 會預設為已連結帳號自身。釘選其他成員的內容時,請明確提供傳送者。群組 ID 代表群組,傳送者 ID 代表作者,不能互換。

客服確認期間應保留原本選取的訊息,不應因新訊息抵達而換掉目標。送出前,也要檢查操作人員是否有權操作該訊息帳號與對話。

引用訊息的父訊息 ID 也不是目前訊息 ID。WhatsApp 引用回覆指南說明了這個關係。釘選使用選中訊息自身的 ID,不使用 reply_token,也不應自動選取父訊息。

在正確層級確認結果

兩個修改端點的成功範例都有 data.ok: true。請分別記錄請求目標與實際回應,不要把點擊按鈕當成操作成功。逾時代表結果不確定;不要立即顯示成功,也不要自動執行相反操作。

事件參考中的 conversation.updated 以 data.conversation.id 指定聊天,釘選狀態變更可以帶有 data.pinned。這是已連結帳號本地的聊天清單設定,沒有指出哪則訊息被釘選。

只套用事件實際提供的設定。例如靜音事件沒有 pinned,不應因此清除已存的釘選狀態。事件是觀察結果,不保證每次 API 操作都產生確認事件。目前公開目錄未記載專用的訊息釘選事件,平台事件矩陣也未將 conversation.updated 對應到 LINE。

接收端須依照Webhook 投遞契約驗證簽章並處理重複投遞。事件應用來校正畫面,而不是再次觸發相同操作。

釘選不是客服優先級系統

假設團隊在等待回覆期間釘選客戶聊天,負責人、期限與結案狀態仍應存於應用程式中。取消釘選不應直接關閉工單。

WhatsApp 已讀/未讀同步及靜音與封鎖比較也有相同原則:可見性、閱讀狀態、通知偏好與聯絡限制各有不同用途。

啟用前建議測試聊天釘選、獨立取消操作、其他群組成員的訊息、不支援的平台及 HTTP 回應遺失。這些是建議驗收項目,不是已完成的測試。人工流程足夠時可使用原生應用程式;若要求官方整合,應另行評估官方契約。

常見問題

釘選聊天會同時釘選最新訊息嗎?

不會。兩者的目標與 API 操作不同。

對話釘選能使用 duration_seconds 嗎?

UnifyPort 目前的對話釘選契約沒有這個欄位。它屬於訊息釘選操作。

conversation.updated 的 pinned 能確認訊息釘選嗎?

不能。它表示聊天清單設定,而不是單則訊息狀態。

LINE 可以使用兩種釘選嗎?

目前矩陣支援 LINE 對話釘選與取消釘選,不支援訊息釘選。請逐項確認能力。

下一步與來源

從釘選對話參考開始,先依操作對象命名按鈕,再啟用功能。

核對日期:2026-10-08。

UnifyPort API

讓訊息接入變成一條穩定的產品管線。

先用統一 API 跑通傳送,再用標準事件把所有入站訊息接回業務系統。