WhatsAppのチャット固定とメッセージ固定:APIの使い分け
WhatsAppでチャットを固定するのは、チャット一覧から会話を見つけやすくするためです。メッセージを固定するのは、会話内の特定の内容を目立たせるためです。同じ設定ではありません。APIを使う共有受信箱では、まず対象を決めます。チャットには会話ID、メッセージにはさらにメッセージ自身のIDが必要で、他の人の投稿なら送信者IDも明示します。
要点
- チャット固定は接続済みアカウントの一覧設定、メッセージ固定は会話内のコンテンツ操作です。
- UnifyPortではエンドポイントも解除方法も異なります。
- 会話固定には期間パラメーターがありません。メッセージ固定には任意の
duration_secondsがあります。 conversation.updatedのpinnedはチャット一覧の状態であり、特定メッセージの固定を表しません。
チャット固定とメッセージ固定の違い
WhatsAppの自分にメッセージを送るガイドは、チャットを一覧の上部に固定する使い方を説明しています。一方、メッセージ固定のガイドは、対象メッセージと固定期間を選ぶ操作を説明しています。
| 目的 | 対象 | 意味しないこと |
|---|---|---|
| 顧客との会話を見つけやすくする | チャット一覧の項目 | 顧客の特定メッセージも強調される |
| グループ内の手順を目立たせる | 1件のメッセージ | グループが受信箱の最上部に移る |
| 緊急案件を担当者に割り当てる | アプリ独自のチケットやキュー | プラットフォームの固定操作が担当者や期限を設定する |
公式ヘルプによると、グループでメッセージを固定すると、誰が固定したかを示すシステムメッセージが共有されます。管理者はメンバーによる固定を許可するか設定できます。グループのメッセージ固定を、担当者だけの非公開ブックマークとして扱わないでください。履歴がないために固定メッセージを見られない場合もあり、固定は失われた内容を復元する機能ではありません。
サポートアプリ内だけの個人用メモが目的なら、アプリ独自のブックマークを使う設計が適切です。これは設計上の提案であり、追加のAPI機能ではありません。
対象に合うUnifyPortの契約を選ぶ
以下はUnifyPortの非公式インターフェースであり、Meta Cloud APIではありません。
| 項目 | 会話を固定 | メッセージを固定 |
|---|---|---|
| メソッドとパス | POST /v1/accounts/{account_id}/conversations/pin | POST /v1/messages/pin |
| アカウント指定 | URLの account_id | JSONの account_id |
| JSONの対象 | conversation_id | conversation_id、message_id。他人の投稿には sender_id を指定 |
| 状態指定 | パス自体が固定を要求 | pinned: true で固定、pinned: false で解除 |
| 期間 | 期間パラメーターなし | 固定時に duration_seconds を指定可能 |
| 解除 | 会話固定解除の別エンドポイント | 同じメッセージ用エンドポイントで pinned: false |
実装前に会話の固定、会話の固定解除、メッセージの固定・解除を確認してください。
ネイティブアプリの画面にある期間設定を、そのまま会話APIのパラメーターにしないでください。また、会話固定のパスに pinned: false を送って解除を期待するのも誤りです。実際に呼び出す操作の契約に従います。
現在のプロバイダー別操作対応表では、会話の固定・解除はWhatsAppとLINE、メッセージ固定はWhatsAppだけに対応しています。未対応の組み合わせは 501 unsupported_by_provider を返します。LINEも扱う国内向け受信箱では、この違いが重要です。LINEのチャット固定ボタンを実装できても、メッセージ固定ボタンまで有効にできるわけではありません。
最新メッセージではなく、選択したメッセージを保持する
保存済みの message.received イベントから選択する場合、文書化された対応は次のとおりです。
- イベント直下の
account_id→account_id data.conversation.id→conversation_iddata.message.id→message_iddata.sender.id→sender_id
メッセージ固定では、sender_id を省略すると接続済みアカウント自身が使われます。他の参加者の投稿には送信者を明示してください。グループIDは会話、送信者IDは投稿者を指します。入れ替えてはいけません。
担当者が確認している間も、選択済みの対象を保持します。新着メッセージで対象IDを上書きせず、送信前に担当者がそのメッセージングアカウントと会話を操作する権限を持つか確認してください。
引用付きメッセージでは、親メッセージのIDと自分自身のIDも別です。WhatsAppの引用返信ガイドで関係を確認できます。固定操作に使うのは選択したメッセージ自身のIDであり、reply_token や自動選択した親IDではありません。
確認結果の対象を取り違えない
両方の変更APIは、成功例として data.ok: true を示しています。クリックの記録とは別に、操作対象と実際の応答を保存してください。タイムアウトは結果不明です。成功と表示したり、逆の操作を自動実行して修正したつもりになったりしないでください。
イベント仕様の conversation.updated は data.conversation.id でチャットを示し、固定状態の変更には data.pinned を含められます。これは接続済みアカウントのローカルなチャット一覧設定で、会話内のどのメッセージが固定されたかは示しません。
イベントにある設定だけを反映します。たとえばミュート更新に pinned がなければ、保存済み固定状態を消してはいけません。イベントは観測結果として扱い、すべてのAPI操作に確認イベントが届くとは保証しないでください。現在の公開カタログには専用のメッセージ固定イベントがなく、LINEへの conversation.updated の対応もイベント表にありません。
受信時はWebhook配信仕様に沿って署名検証と重複処理を行います。イベントで表示を整合させることと、同じ変更APIを再実行することは別です。
固定を案件管理の代わりにしない
仮に、回答待ちの顧客チャットを固定する運用でも、担当者、期限、解決状態はアプリ側で管理します。固定解除だけでチケットを終了させないでください。
既読・未読の同期やミュートとブロックの比較も同じ考え方です。見つけやすさ、閲覧状態、通知設定、連絡制限は別の目的を持ちます。
公開前には、チャット固定と個別の解除、他のグループ参加者の投稿、未対応プロバイダー、HTTP応答喪失をテストしてください。これは提案する確認項目であり、実行済みの結果ではありません。手作業で足りる場合はネイティブアプリを使い、公式連携が要件ならその契約を別途評価します。
FAQ
チャットを固定すると最新メッセージも固定されますか?
いいえ。対象もAPI操作も異なります。
会話固定でduration_secondsを使えますか?
UnifyPortの現行の会話固定契約にはありません。メッセージ固定用のフィールドです。
conversation.updatedのpinnedでメッセージ固定を確認できますか?
できません。接続済みアカウントのチャット一覧設定を表します。
LINEで両方の固定を利用できますか?
現行の対応表では会話の固定・解除に対応し、メッセージ固定には対応していません。
次のステップと出典
会話固定のリファレンスから確認し、対象が分かるボタン名を付けてから機能を有効にしてください。
確認日:2026-10-08。
メッセージ連携を安定したプロダクトパイプラインへ。
まずは 1 つの API で送信を始め、標準イベントですべての inbound メッセージを業務システムへ戻しましょう。