メッセージ
テキストメッセージ送信
テキストメッセージを送信します。message.text は空にできません。固有フィールドは provider_data、引用返信はトップレベルの reply_to を使います。
https://api.unifyport.ai/v1/messages対応チャネル
呼び出す前に
対象ワークスペースの X-Api-Key をサーバー側で使用します。実行前にすべてのプレースホルダーを置き換えます。
認証フローを完了し runtime_status を確認します。認証と接続は別の状態で、HTTP 成功だけでは準備完了と判断できません。
パラメーターの取得元
- account_id
- アカウント作成・取得応答の data.id を使います。識別子は X-Api-Key のワークスペースに属します。 アカウント取得
- to.id · to.type
- 返信時は message.received の data.conversation.id と data.conversation.type を to.id と to.type にコピーします。新規宛先はチャネルの識別子規則に従います。 統一メッセージ送信の対応状況
リクエストパラメータ
ヘッダー
X-Api-Keyワークスペース API キー。このヘッダーからワークスペースを特定します。
Content-TypeJSON のリクエストボディを送る場合は application/json を使用します。
リクエストボディ
provider_dataobjectプロバイダ固有の送信オプション。対応するプロバイダとメッセージタイプでのみ有効です。WhatsApp audio/video の seconds は 0 以上の整数です。video の場合のみ 0 から 4294967295 の範囲を使用し、waveform は audio 専用です。引用返信がサポートされる場合はトップレベルの reply_to を使用します。sticker の provider_data は省略するか空オブジェクトにします。オブジェクト以外は 400 invalid_request、空でないオブジェクトは 400 provider_invalid_request を返します。
provider_dataプロバイダ固有の送信オプション。対応するプロバイダとメッセージタイプでのみ有効です。WhatsApp audio/video の seconds は 0 以上の整数です。video の場合のみ 0 から 4294967295 の範囲を使用し、waveform は audio 専用です。引用返信がサポートされる場合はトップレベルの reply_to を使用します。sticker の provider_data は省略するか空オブジェクトにします。オブジェクト以外は 400 invalid_request、空でないオブジェクトは 400 provider_invalid_request を返します。
secondsWhatsApp の audio および video メッセージで使用する任意の長さ(秒)を 0 以上の整数で指定します。video の場合のみ、指定範囲は 0 から 4294967295 です。
minimum: 0
waveformWhatsApp の audio メッセージで使用する任意の波形データ。空でない値は標準 Base64 でエンコードされ、デコード後に解析可能な JSON 波形データである必要があります。空文字列は未指定として扱い、その他の形式エラーは HTTP 400 provider_invalid_request を返します。
account_idメッセージを送信するプロバイダアカウント。
minLength: 1
toobject必須宛先(id と type)。
to宛先(id と type)。
idプロバイダ側の宛先識別子。
minLength: 1
type標準の会話タイプ:user、group、channel。WhatsApp コミュニティのお知らせグループも引き続き group を使用します。
enum: user, group, channel
messageobject必須正規化されたメッセージペイロード。テキストは message.text、メディアは message.url を使用します。
message正規化されたメッセージペイロード。テキストは message.text、メディアは message.url を使用します。
typeメッセージタイプ:text、image、video、audio、document、file、contact、link_preview、poll、または sticker。
enum: text, image, video, audio, document, file, contact, link_preview, poll, sticker
texttext と link_preview で必須の空でない本文。link_preview では空白以外の文字を含める必要があり、WhatsApp では link_preview.url の原文も本文に含める必要があります。
minLength: 1
captionimage、video、document、file メッセージの任意のキャプション。
url空でない絶対 HTTP(S) URL。メディアは url / file_url / file_key のいずれかが必須です。
format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?://
file_url空でない代替の絶対 HTTP(S) URL。メディアはいずれかのソースが必須です。
format: uri · pattern: ^[Hh][Tt][Tt][Pp][Ss]?://
file_key空でないプロバイダまたはストレージのファイル参照。
contacts[]object[]message.type=contact のときに必須の空でないカード配列。
minItems: 1
contacts[]message.type=contact のときに必須の空でないカード配列。
minItems: 1
name各カードで必須の空でない表示名。
minLength: 1
phones[]object[]連絡先カードに含める電話番号の一覧。
phones[]連絡先カードに含める電話番号の一覧。
number電話番号。各 phone 項目で必須です。
typeCELL や WORK などの任意の電話種別。
emails[]object[]連絡先カードに含めるメールアドレスの一覧。
emails[]連絡先カードに含めるメールアドレスの一覧。
addressメールアドレス。各 email 項目で必須です。
format: email
typeWORK や HOME などの任意のメール種別。
organization連絡先に関連付ける任意の組織名。
title連絡先に関連付ける任意の役職名。
link_previewobjectmessage.type=link_preview 専用で text とともに必須です。他のペイロードと混在できません。共通構造では url のみ必須で、任意の title と description は空文字列を許可しますが null は不可です。本 API の WhatsApp 送信ポリシーでは空でない title/image_url が必須で、title は最大 255、description は最大 1024 Unicode 文字です。
link_previewmessage.type=link_preview 専用で text とともに必須です。他のペイロードと混在できません。共通構造では url のみ必須で、任意の title と description は空文字列を許可しますが null は不可です。本 API の WhatsApp 送信ポリシーでは空でない title/image_url が必須で、title は最大 255、description は最大 1024 Unicode 文字です。
url必須の対象リンク。ホスト名を持ち空白を含まない絶対 HTTP(S) URI。角括弧内のアドレスは IPv6 リテラルのみ許可します。原文を保持し、リソースへのアクセス可否は保証しません。
pattern: ^[Hh][Tt][Tt][Pp][Ss]?://(?:[^/?#@\s]*@)?(?:\[[0-9A-Fa-f:.]+\]|[^/?#:@\s\[\]]+)(?::[0-9]*)?(?:[/?#]|$)
title任意のプレビュータイトル。空文字列は可、null は不可です。WhatsApp では空でない値が必須で、最大 255 Unicode 文字です。
description任意のプレビュー概要。空文字列は可、null は不可です。WhatsApp では最大 1024 Unicode 文字です。
image_url任意の画像 URI。WhatsApp では空でない値が必須です。ホスト名を持ち空白を含まない絶対 HTTP(S) URI とし、角括弧内のアドレスは IPv6 リテラルのみ許可します。原文を保持し、リソースへのアクセス可否は保証しません。
pattern: ^[Hh][Tt][Tt][Pp][Ss]?://(?:[^/?#@\s]*@)?(?:\[[0-9A-Fa-f:.]+\]|[^/?#:@\s\[\]]+)(?::[0-9]*)?(?:[/?#]|$)
pollobjectmessage.type=poll 専用で必須です。text や他のペイロードと混在できません。question、options、max_selections が必須です。質問と選択肢のタイトルは原文を保持します。共通構造では質問の長さ、選択肢の最大数、タイトルの重複を制限しませんが、プロバイダが追加制限を設ける場合があります。
pollmessage.type=poll 専用で必須です。text や他のペイロードと混在できません。question、options、max_selections が必須です。質問と選択肢のタイトルは原文を保持します。共通構造では質問の長さ、選択肢の最大数、タイトルの重複を制限しませんが、プロバイダが追加制限を設ける場合があります。
question必須の投票の質問。空白以外の文字を含める必要があり、原文を保持します。
minLength: 1 · pattern: \S
options[]object[]必須の選択肢配列。2 件以上が必要で、各選択肢に title が必須です。
minItems: 2
options[]必須の選択肢配列。2 件以上が必要で、各選択肢に title が必須です。
minItems: 2
title必須の選択肢タイトル。空白以外の文字を含める必要があります。送信時に trim、大文字小文字の変更、Unicode 正規化は行いません。
minLength: 1 · pattern: \S
max_selections必須の投票者ごとの最大選択数で、投票人数ではありません。1 から options の件数までの整数を API が検証します。1.0、1e0 など整数値を表す数は 1 と同等で、非整数は無効です。
minimum: 1
reply_toobject引用返信の対象。引用可能なメッセージイベントの data.message.reply_token または送信応答の data.reply_token を reply_to.reply_token にそのまま設定します。元のアカウントと会話で使い、メッセージ ID で代用しないでください。
reply_to引用返信の対象。引用可能なメッセージイベントの data.message.reply_token または送信応答の data.reply_token を reply_to.reply_token にそのまま設定します。元のアカウントと会話で使い、メッセージ ID で代用しないでください。
reply_token引用可能なメッセージイベントの data.message.reply_token または送信応答の data.reply_token から得る不透明なハンドル。元のアカウントと会話でそのまま使い、メッセージ ID で代用しないでください。
minLength: 1
mentions[]object[]グループメッセージの @ 対象リスト。type=member は対応する Provider メンバー id を使用します。type=all は @全員を意味し、Provider がサポートする場合のみ有効です。サポートされない場合は unsupported_message_type を返します。
mentions[]グループメッセージの @ 対象リスト。type=member は対応する Provider メンバー id を使用します。type=all は @全員を意味し、Provider がサポートする場合のみ有効です。サポートされない場合は unsupported_message_type を返します。
type@ 対象の種類。省略時は旧リクエストとの互換性のため member として扱います。type=member では id が必須で、type=all では id を指定せず、グループチャットにのみ適用されます。
enum: member, all
idtype=member の場合に必須の Provider メンバー識別子。
minLength: 1
結果の確認
後続イベントとの照合や調査のため message_id と provider_ref を保存します。accepted は配達完了を意味しません。チャネルが対応する場合にのみ、受領イベントで配達を確認してください。識別子の形式はチャネルにより異なります。
reply_token — WhatsApp 送信が成功し引用コンテキストが完全な場合に返る任意の空でない不透明なハンドル。新規送信した投票も含み、通常のテキストで引用できます。利用できなければ省略され、accepted 状態は変わりません。元のアカウントと会話でそのまま使います。メッセージ ID ではありません。
レスポンス 200 OK
{
"request_id": "<REQUEST_ID>",
"data": {
"message_id": "msg_example",
"account_id": "acc_example",
"status": "accepted",
"provider_ref": "provider_msg_example",
"reply_token": "<opaque WhatsApp reply handle>"
}
}
レスポンスボディ
message_id受理されたメッセージの UnifyPort メッセージ識別子(msg_...)。
account_idこのレスポンスが対象とするプロバイダアカウント。
status受理ステータス。accepted はメッセージがプロバイダへの配信待ちにキューイングされたことを意味します。
provider_refプロバイダが割り当てたあとの、プロバイダ側メッセージ参照。
reply_tokenWhatsApp 送信が成功し引用コンテキストが完全な場合に返る任意の空でない不透明なハンドル。新規送信した投票も含み、通常のテキストで引用できます。利用できなければ省略され、accepted 状態は変わりません。元のアカウントと会話でそのまま使います。メッセージ ID ではありません。
minLength: 1
レスポンス
200200 OK
リクエスト成功。レスポンスボディの例を参照してください。
400Bad Request
リクエストボディ、パス、またはパラメータが不正です。
401Unauthorized
X-Api-Key ヘッダが欠落しているか無効です。
403Forbidden
リクエストは識別されましたが、この操作は許可されていません。
404Not Found
要求されたリソースが見つかりません。error.code と現在の操作を合わせて確認してください。
409Conflict
要求された操作が、既存のプロバイダアカウントまたはリソースと競合しています。
500Internal Server Error
サービスで予期しないエラーが発生しました。
501Not Implemented
選択したプロバイダはこの操作を実装していません。
502Bad Gateway
プロバイダアダプタまたは上流サービスが操作を完了できませんでした。
失敗時の対応
HTTP 状態と error.code/numeric_code を確認し、request_id を保存します。原因に応じてパラメーター修正・認証・状態確認を行い、送信や書き込みの再試行前に前回の結果を確認します。 エラーリファレンス
HTTP ステータス、error.code、error.numeric_code を現在の操作と合わせて確認します。数値コードは文字列です。request_id は調査用で、冪等性キーやタスク ID ではありません。
- invalid_reply_token · 36006 · 400
引用トークンを読み取れません。受信イベントの data.message.reply_token をそのまま使ってください。
対処と再試行: 操作とチャネルの条件に従ってパラメーターを修正してから再実行します。同じ無効なリクエストを繰り返しても解決しません。
JSON の例です。message は実際の原因によって変わります · 400 · 36006
{ "request_id": "req_example", "error": { "code": "invalid_reply_token", "numeric_code": "36006", "message": "Invalid or unreadable reply_token" } }- invalid_request · 10000 · 400
JSON 本文と必須項目を確認してください。
対処と再試行: 操作とチャネルの条件に従ってパラメーターを修正してから再実行します。同じ無効なリクエストを繰り返しても解決しません。
例 · 400 · 10000
{ "request_id": "req_message_invalid_example", "error": { "code": "invalid_request", "numeric_code": "10000", "message": "Invalid message request body" } }- invalid_target_workspace · 11003 · 400
上書き対象のワークスペースが空、または形式が無効です。上書き用ヘッダーを削除し、対象ワークスペースの API Key を使用してください。
発生条件: ワークスペースを上書きする X-Workspace-Id リクエストヘッダーを送った場合に適用されます。
対処と再試行: 操作とチャネルの条件に従ってパラメーターを修正してから再実行します。同じ無効なリクエストを繰り返しても解決しません。
JSON の例です。message は実際の原因によって変わります · 400 · 11003
{ "request_id": "req_example", "error": { "code": "invalid_target_workspace", "numeric_code": "11003", "message": "Invalid target workspace" } }- provider_invalid_request · 30001 · 400
チャネル固有の項目と形式を確認してください。
対処と再試行: 操作とチャネルの条件に従ってパラメーターを修正してから再実行します。同じ無効なリクエストを繰り返しても解決しません。
例 · 400 · 30001
{ "request_id": "req_sticker_rejected_example", "error": { "code": "provider_invalid_request", "numeric_code": "30001", "message": "sticker upload failed: media is unsupported" } }- provider_invalid_request · 36007 · 400
チャネルへの送信呼び出し前にスタンプ素材の検証に失敗しました。レスポンスに具体的な準備エラーが含まれる場合があります。numeric_code=36007 は送信を試みたことを意味しません。
発生条件: チャネルへの送信前の検証で、スタンプ素材またはその URL が拒否された場合に適用されます。
対処と再試行: 指摘されたスタンプ素材の問題を修正してから送信します。この分類はチャネルへの送信呼び出し前の素材準備で発生します。送信済みかもしれない結果不明のケースとして扱わないでください。
例 · 400 · 36007
{ "request_id": "req_sticker_invalid_example", "error": { "code": "provider_invalid_request", "numeric_code": "36007", "message": "invalid sticker media: invalid WebP container length" } }- unsupported_message_type · 36000 · 400
チャネルが対応する message.type を使ってください。
対処と再試行: ドキュメントで対応しているチャネルと操作を選びます。同じリクエストを繰り返しても機能やベータ権限は追加されません。
JSON の例です。message は実際の原因によって変わります · 400 · 36000
{ "request_id": "req_example", "error": { "code": "unsupported_message_type", "numeric_code": "36000", "message": "Message type not supported" } }- invalid_api_key · 11001 · 401
API Key が正しく有効か確認してください。
対処と再試行: request_id と構造化されたコードを保存し、現在の操作を調査してから次の対応を決めます。
JSON の例です。message は実際の原因によって変わります · 401 · 11001
{ "request_id": "req_example", "error": { "code": "invalid_api_key", "numeric_code": "11001", "message": "Invalid API key" } }- missing_api_key · 11000 · 401
X-Api-Key ヘッダーを追加してください。
対処と再試行: request_id と構造化されたコードを保存し、現在の操作を調査してから次の対応を決めます。
例 · 401 · 11000
{ "request_id": "req_xxx", "error": { "code": "missing_api_key", "numeric_code": "11000", "message": "Missing X-Api-Key header" } }- workspace_override_forbidden · 11002 · 403
この API Key に許可されていないワークスペースの上書きを要求しています。上書き用ヘッダーを削除し、対象ワークスペースの API Key を使用してください。
発生条件: ワークスペースを上書きする X-Workspace-Id リクエストヘッダーを送った場合に適用されます。
対処と再試行: request_id と構造化されたコードを保存し、現在の操作を調査してから次の対応を決めます。
JSON の例です。message は実際の原因によって変わります · 403 · 11002
{ "request_id": "req_example", "error": { "code": "workspace_override_forbidden", "numeric_code": "11002", "message": "Workspace override is not allowed" } }- target_workspace_not_found · 11004 · 404
上書きで指定したワークスペースが存在しないか利用できません。所有範囲を確認し、上書き用ヘッダーを削除して対象ワークスペースの API Key を使用します。再試行で権限は増えません。
発生条件: ワークスペースを上書きする X-Workspace-Id リクエストヘッダーを送った場合に適用されます。
対処と再試行: 対象の識別子、所有範囲、現在のワークスペースを確認します。不存在やアクセス不可が確認された対象を、一時的なサービス障害として自動再試行しないでください。
JSON の例です。message は実際の原因によって変わります · 404 · 11004
{ "request_id": "req_example", "error": { "code": "target_workspace_not_found", "numeric_code": "11004", "message": "Target workspace not found" } }- account_binding_not_found · 30006 · 409
有効なチャネル接続への紐付けがありません。アカウントの状態を確認してください。
対処と再試行: 認証と実行状態を照会し、目的の状態とチャネルの対応範囲に応じて更新・起動・再接続を選びます。接続の問題だけではログアウトしたとは判断できません。接続が必要な業務操作の前に running を確認してください。
JSON の例です。message は実際の原因によって変わります · 409 · 30006
{ "request_id": "req_example", "error": { "code": "account_binding_not_found", "numeric_code": "30006", "message": "Account is not bound to an available server" } }- provider_not_ready · 30009 · 409
接続が未準備です。認可と runtime_status を確認してから再試行を判断してください。
対処と再試行: 認証と実行状態を照会し、目的の状態とチャネルの対応範囲に応じて更新・起動・再接続を選びます。接続の問題だけではログアウトしたとは判断できません。接続が必要な業務操作の前に running を確認してください。
JSON の例です。message は実際の原因によって変わります · 409 · 30009
{ "request_id": "req_example", "error": { "code": "provider_not_ready", "numeric_code": "30009", "message": "Provider client is not ready" } }- provider_not_ready · 30014 · 409
このアカウントに必要なチャネルのインスタンスがありません。実行環境の可用性の問題であり、認証の期限切れを示すものではありません。
対処と再試行: 認証と実行状態を照会し、目的の状態とチャネルの対応範囲に応じて更新・起動・再接続を選びます。接続の問題だけではログアウトしたとは判断できません。接続が必要な業務操作の前に running を確認してください。
対象チャネル: WhatsApp
JSON の例です。message は実際の原因によって変わります · 409 · 30014
{ "request_id": "req_example", "error": { "code": "provider_not_ready", "numeric_code": "30014", "message": "Provider instance is missing" } }- provider_not_ready · 30015 · 409
チャネルの実行プロセスは停止しています。起動前に意図した停止かを確認してください。実行の停止自体はログアウトを意味しません。
対処と再試行: 認証と実行状態を照会し、目的の状態とチャネルの対応範囲に応じて更新・起動・再接続を選びます。接続の問題だけではログアウトしたとは判断できません。接続が必要な業務操作の前に running を確認してください。
対象チャネル: WhatsApp
JSON の例です。message は実際の原因によって変わります · 409 · 30015
{ "request_id": "req_example", "error": { "code": "provider_not_ready", "numeric_code": "30015", "message": "Provider runtime is stopped" } }- send_message_failed · 20020 · 500
account_id を確認し、アカウントが属するワークスペースの X-Api-Key を使います。このワークスペースにないアカウントには現在のキーでアクセスできません。
発生条件: アカウントが見つからない場合、従来の HTTP ステータスと操作の code を維持し、numeric_code でアカウントの不存在を示します。
対処と再試行: 対象の識別子、所有範囲、現在のワークスペースを確認します。不存在やアクセス不可が確認された対象を、一時的なサービス障害として自動再試行しないでください。
JSON の例です。message は実際の原因によって変わります · 500 · 20020
{ "request_id": "req_example", "error": { "code": "send_message_failed", "numeric_code": "20020", "message": "Account not found" } }- send_message_failed · 30010 · 500
チャネルが操作を完了できませんでした。message に「Provider operation failed:」以降の元の原因が含まれる場合があります。原因の文面は可変で、安定したプログラムのインターフェースではありません。
発生条件: チャネルがより具体的な失敗分類を返さない場合、現在の操作のエラーを維持します。
対処と再試行: 再送する前に元のメッセージや返信が作成されたか確認します。タイムアウトやエラー応答後は結果不明の場合があります。後の照会で返信が見つからなくても、書き込まれなかった証拠にはなりません。自動再送しないでください。
対象チャネル: WhatsApp
JSON の例です。message は実際の原因によって変わります · 500 · 30010
{ "request_id": "req_example", "error": { "code": "send_message_failed", "numeric_code": "30010", "message": "Provider operation failed" } }- send_message_failed · 36001 · 500
メッセージの送信に失敗したか、送信結果を確認できませんでした。
対処と再試行: 再送する前に元のメッセージや返信が作成されたか確認します。タイムアウトやエラー応答後は結果不明の場合があります。後の照会で返信が見つからなくても、書き込まれなかった証拠にはなりません。自動再送しないでください。
例 · 500 · 36001
{ "request_id": "req_sticker_prepare_failed_example", "error": { "code": "send_message_failed", "numeric_code": "36001", "message": "download sticker: media download returned HTTP 503" } }- unsupported_by_provider · 30003 · 501
チャネルが未対応です。対応表から利用可能な操作を選んでください。
対処と再試行: ドキュメントで対応しているチャネルと操作を選びます。同じリクエストを繰り返しても機能やベータ権限は追加されません。
例 · 501 · 30003
{ "request_id": "req_xxx", "error": { "code": "unsupported_by_provider", "numeric_code": "30003", "message": "Operation not supported by this provider" } }- provider_adapter_not_found · 30004 · 502
チャネルサービスを利用できません。状態を確認するか後で再試行してください。書き込みは前回の結果を先に確認してください。
対処と再試行: 再送する前に元のメッセージや返信が作成されたか確認します。タイムアウトやエラー応答後は結果不明の場合があります。後の照会で返信が見つからなくても、書き込まれなかった証拠にはなりません。自動再送しないでください。
JSON の例です。message は実際の原因によって変わります · 502 · 30004
{ "request_id": "req_example", "error": { "code": "provider_adapter_not_found", "numeric_code": "30004", "message": "Provider adapter unavailable" } }- provider_unavailable · 20102 · 502
WhatsApp の同期送信でログイン制限が検出され、HTTP 502、provider_unavailable、20102 が返ります。WhatsApp の失敗イベントでは同じ意味の数値コードを account_restricted として使います。この HTTP 応答自体はアカウント状態の更新や追加イベントの発生を行いません。
対処と再試行: 自動送信と再試行を停止し、公式 WhatsApp アプリで制限を確認・解消するようユーザーに案内します。解消と必要な再認証の後に再開してください。以前の running 状態は制限解除の証拠にはなりません。
対象チャネル: WhatsApp
例 · 502 · 20102
{ "request_id": "req_example_whatsapp_account_restricted", "error": { "code": "provider_unavailable", "numeric_code": "20102", "message": "Account login is restricted. Check the official WhatsApp app for details." } }- provider_unavailable · 30002 · 502
チャネルサービスを利用できません。状態を確認するか後で再試行してください。書き込みは前回の結果を先に確認してください。
対処と再試行: 再送する前に元のメッセージや返信が作成されたか確認します。タイムアウトやエラー応答後は結果不明の場合があります。後の照会で返信が見つからなくても、書き込まれなかった証拠にはなりません。自動再送しないでください。
例 · 502 · 30002
{ "request_id": "req_example_provider_unavailable", "error": { "code": "provider_unavailable", "numeric_code": "30002", "message": "Provider service unavailable" } }- provider_unavailable · 30010 · 502
チャネルが操作を完了できませんでした。message に「Provider operation failed:」以降の元の原因が含まれる場合があります。原因の文面は可変で、安定したプログラムのインターフェースではありません。
対処と再試行: 再送する前に元のメッセージや返信が作成されたか確認します。タイムアウトやエラー応答後は結果不明の場合があります。後の照会で返信が見つからなくても、書き込まれなかった証拠にはなりません。自動再送しないでください。
対象チャネル: WhatsApp
例 · 502 · 30010
{ "request_id": "req_example_message_failed", "error": { "code": "provider_unavailable", "numeric_code": "30010", "message": "Provider operation failed: Example operation could not be completed" } }- provider_unavailable · 30019 · 502
プラットフォームが今回のメッセージ送信を明示的に制限しました。HTTP 502、provider_unavailable、30019 が返ります。アカウントの永久停止を証明したり、固定の解除時刻を示すものではありません。
対処と再試行: このメッセージ制限に対する自動再試行を停止します。プラットフォームの制限解除を確認してから送信を再開してください。固定の解除時刻はなく、このエラーだけで再認証する必要はありません。
対象チャネル: WhatsApp
例 · 502 · 30019
{ "request_id": "req_example_message_restricted", "error": { "code": "provider_unavailable", "numeric_code": "30019", "message": "Message sending is restricted by the platform" } }- provider_unavailable · 30020 · 502
whatsapp-protocol の同期リクエストは numeric_code=30020 でログイン制限を示します。セッションのインポート、実行操作、送信、連絡先照会に影響する場合がありますが、現在の操作の HTTP ステータスと code を維持します。このチャネルに WhatsApp の 20102 イベント契約を適用しないでください。
対処と再試行: 自動送信と再試行を停止し、公式 WhatsApp アプリで制限を確認・解消するようユーザーに案内します。解消と必要な再認証の後に再開してください。以前の running 状態は制限解除の証拠にはなりません。
対象チャネル: WhatsApp Protocol
例 · 502 · 30020
{ "request_id": "req_example_account_restricted", "error": { "code": "provider_unavailable", "numeric_code": "30020", "message": "Account login is restricted. Check the official WhatsApp app for details." } }- provider_unavailable · 30021 · 502
操作時に WhatsApp が接続されていませんでした。元の接続エラーメッセージを保持します。ログアウトや認証失効を示すものではなく、自動再接続・再送信・アカウント状態の更新も行いません。
対処と再試行: 接続が必要な業務操作を停止します。まず POST /v1/accounts/{account_id}/runtime/refresh を呼び、最新状態に従って復旧し、runtime_status=running を確認してから業務 API を実行します。再送前に前回の書き込み結果を確認してください。
対象チャネル: WhatsApp
例 · 502 · 30021
{ "request_id": "req_example_connection_disconnected", "error": { "code": "provider_unavailable", "numeric_code": "30021", "message": "example operation: websocket not connected" } }- provider_unavailable · 34012 · 502
この WhatsApp グループへの送信には管理者権限が必要です。アカウントのグループ内役割を変更してから再試行してください。
対処と再試行: request_id と構造化されたコードを保存し、現在の操作を調査してから次の対応を決めます。
対象チャネル: WhatsApp
例 · 502 · 34012
{ "request_id": "req_example_group_admin_required", "error": { "code": "provider_unavailable", "numeric_code": "34012", "message": "Group administrator privileges are required to send messages to this group" } }