WhatsAppユーザーにメッセージを送信するには、POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID/messagesエンドポイントを使います。
POST /<WHATSAPP_BUSINESS_PHONE_NUMBER>/messages
どのメッセージ送信リクエストでも、以下の汎用親オブジェクト形式を使います。
{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "<TO>", "type": "<TYPE>", /* TEXT MESSAGES ONLY */ "text": {<TEXT>} /* REACTION MESSAGES ONLY */ "reaction": {<REACTION>} /* MEDIA MESSAGES ONLY. FOR EXAMPLE, FOR IMAGE MEDIA: */ "image": {<IMAGE>} /* LOCATION MESSAGES ONLY */ "location": {<LOCATION>} /* CONTACTS MESSAGES ONLY */ "contacts": {<CONTACTS>} /* INTERACTIVE MESSAGES ONLY */ "interactive": {<INTERACTIVE>} /* TEMPLATE MESSAGES ONLY */ "template": {<TEMPLATE>} }
プレースホルダー | 説明 | 値の例 |
---|---|---|
文字列 | メッセージ送信先となる顧客のWhatsApp IDまたは電話番号。電話番号の形式をご覧ください |
|
文字列 | メッセージのタイプを示します。 |
|
オブジェクト | テキストメッセージの内容。 | テキストメッセージをご覧ください。 |
オブジェクト | リアクションメッセージの内容。 | リアクションメッセージをご覧ください |
オブジェクト | メディアメッセージの内容。プロパティ名が、送信するメディアメッセージと一致していなければなりません(画像メッセージでは | メディアメッセージをご覧ください。 |
オブジェクト | 位置情報メッセージの内容。 | 位置情報メッセージをご覧ください |
オブジェクト | 連絡先メッセージの内容。 | 連絡先メッセージをご覧ください。 |
オブジェクト | インタラクティブメッセージの内容。 | インタラクティブメッセージをご覧ください。 |
このドキュメント全体で使われている例は、メッセージのそれぞれのタイプについて、投稿本文ペイロード要件について説明するためのものです。
成功すると、APIは以下のように応答します。
{ "messaging_product": "whatsapp", "contacts": [ { "input": "<WHATSAPP_USER_PHONE_NUMBER>", "wa_id": "<WHATSAPP_USER_ID>" } ], "messages": [ { "id": "<WHATSAPP_MESSAGE_ID>" } ] }
Placeholder | Description | Sample Value |
---|---|---|
String | WhatsApp user's WhatsApp phone number. May not match |
|
String | WhatsApp user's WhatsApp ID. May not match |
|
String | WhatsApp Message ID. This ID appears in associated messages webhooks, such as sent, read, and delivered webhooks. |
|
Plus signs (+
), hyphens (-
), parenthesis ((
,)
), and spaces are supported in send message requests.
We highly recommend that you include both the plus sign and country calling code when sending a message to a customer. If the plus sign is omitted, your business phone number's country calling code is prepended to the customer's phone number. This can result in undelivered or misdelivered messages.
For example, if your business is in India (country calling code 91
) and you send a message to the following customer phone number in various formats:
Number In Send Message Request | Number Message Delivered To | Outcome |
---|---|---|
|
| Correct number |
|
| Correct number |
|
| Potentially wrong number |
|
| Potentially wrong number |
テキストメッセージは、テキスト本文、そして任意でリンクプレビューだけを含むメッセージです。
リアクションメッセージは、受け取った直前のWhatsAppユーザーメッセージに対して適用できる絵文字リアクションです。
WhatsAppユーザーに対して、音声メッセージ、ドキュメントメッセージ、画像メッセージ、スタンプメッセージ、動画メッセージを送信することができます。
音声メッセージは、音声アイコンと音声ファイルへのリンクを表示します。WhatsAppユーザーがアイコンをタップすると、WhatsAppクライアントが音声ファイルを読み込んで再生します。
ドキュメントメッセージは、ドキュメントアイコンを表示します。WhatsAppユーザーがそのアイコンをタップすると、リンクされているドキュメントをダウンロードすることができます。
画像メッセージは、単一の画像、そして任意でキャプションを表示します。
スタンプメッセージは、WhatsAppメッセージの中にアニメーションスタンプ画像または静止スタンプ画像を表示します。
動画メッセージは、動画画像のサムネイルプレビューを表示します。任意でキャプションも付けることができます。WhatsAppユーザーがそのプレビューをタップすると、動画が読み込まれてユーザーに対して表示されます。
メディアアセットは、メッセージ送信元のビジネス電話番号にアップロードする必要があります。または、アセットを公開サーバー上でホスティングし、そのURLをメッセージ送信リクエストに含める必要があります。
エラーの可能性を減らし、パブリックサーバーへの不必要なリクエストを避けるために、メディアアセットをアップロードし、メッセージを送信するときにそのIDを使用することをおすすめします。
WhatsAppクラウドAPIでは、メディアHTTPキャッシュがサポートされています。(MetaのサーバーにアップロードしたアセットのID(id
)ではなく)自分のサーバー上のメディアアセットへのリンク(link
)を使う場合、Metaからアセットがリクエストされた時点で、あなたのサーバーからの応答に以下のヘッダーを含めることにより、将来のメッセージで再利用するためにアセットをキャッシュに入れるようMetaに指示することができます。これらのヘッダーが含まれていない場合、アセットはキャッシュに入れられません。
Cache-Control: <CACHE_CONTROL> Last-Modified: <LAST_MODIFIED> ETag: <ETAG>
Cache-Control
ヘッダーは、アセットキャッシュの処理方法をMetaに指示します。サポートされている命令は以下のとおりです。
max-age=n
: アセットをキャッシュに入れる秒数(n
)を指定します。キャッシュに入れられたアセットは、この時間が経過するまでは、以降のメッセージで再利用されます。指定時間の経過後は、必要に応じて再度アセットがリクエストされます。例: Cache-Control: max-age=604800
。no-cache
: アセットをキャッシュに入れることはできますが、Last-Modified
ヘッダーの値が以前の応答と異なる場合は更新しなければなりません。Last-Modified
ヘッダーが必要です。例: Cache-Control: no-cache
.no-store
: アセットをキャッシュに入れないことを指定します。例: Cache-Control: no-store
.private
: アセットが受信者に合わせてパーソナライズされるため、キャッシュには入れないことを指定します。最後にアセットに変更が加えられた時刻を示します。Cache-Control: no-cache
と一緒に使います。Last-Modified
の値が以前の応答とは違っており、かつ応答にCache-Control: no-cache
が含まれている場合、アセットのキャッシュバージョンが、応答の中のアセットによって更新されます。例: Date: Tue, 22 Feb 2022 22:22:22 GMT
。
ETag
ヘッダーは、アセットの特定のバージョンを識別する固有文字列です。例: ETag: "33a64df5"
.このヘッダーは、Cache-Control
ヘッダーとLast-Modified
ヘッダーの両方が応答に含まれていない場合を除いて無視されます。これらのヘッダーがどちらも含まれていない場合、アセットはMeta独自の(非公開)内部ロジックに従ってキャッシュに入れられます。
HTTP/1.1 200 OK Content-Type: image/png Content-Length: 1024 Date: Tue, 22 Feb 2022 22:22:22 GMT ETag: "33a64df5" Cache-Control: max-age=604800 <IMAGE_PAYLOAD>
位置情報メッセージを利用すると、位置情報の緯度座標と経度座標をWhatsAppユーザーに送信することができます。
連絡先メッセージを送信するには、/PHONE_NUMBER_ID/messages
に対するPOST
呼び出しを発行し、type=contact
のmessage
オブジェクトを指定します。そして、contacts
オブジェクトを追加します。
リクエストの例
curl -X POST \
'https://graph.facebook.com/v19.0
/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"messaging_product": "whatsapp",
"to": "PHONE_NUMBER",
"type": "contacts",
"contacts": [{
"addresses": [{
"street": "STREET",
"city": "CITY",
"state": "STATE",
"zip": "ZIP",
"country": "COUNTRY",
"country_code": "COUNTRY_CODE",
"type": "HOME"
},
{
"street": "STREET",
"city": "CITY",
"state": "STATE",
"zip": "ZIP",
"country": "COUNTRY",
"country_code": "COUNTRY_CODE",
"type": "WORK"
}],
"birthday": "YEAR_MONTH_DAY",
"emails": [{
"email": "EMAIL",
"type": "WORK"
},
{
"email": "EMAIL",
"type": "HOME"
}],
"name": {
"formatted_name": "NAME",
"first_name": "FIRST_NAME",
"last_name": "LAST_NAME",
"middle_name": "MIDDLE_NAME",
"suffix": "SUFFIX",
"prefix": "PREFIX"
},
"org": {
"company": "COMPANY",
"department": "DEPARTMENT",
"title": "TITLE"
},
"phones": [{
"phone": "PHONE_NUMBER",
"type": "HOME"
},
{
"phone": "PHONE_NUMBER",
"type": "WORK",
"wa_id": "PHONE_OR_WA_ID"
}],
"urls": [{
"url": "URL",
"type": "WORK"
},
{
"url": "URL",
"type": "HOME"
}]
}]
}'
成功した場合の応答には、wamidが先頭に付いたIDが指定されたオブジェクトが含まれます。メッセージのステータスをトラッキングするには、wamidに続くIDを使います。
{ "messaging_product": "whatsapp", "contacts": [{ "input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID", }] "messages": [{ "id": "wamid.ID", }] }
インタラクティブメッセージには、WhatsAppユーザーがWhatsAppクライアント内で行うメッセージとのインタラクションのためのボタンやその他のUIコンポーネントが含まれます。
商品をカスタマーとシェアするをご覧ください。
インタラクティブリストメッセージを利用すると、WhatsAppユーザーに対して、選択可能なオプションのリストを提示することができます。
位置情報リクエストメッセージは、本文テキストと、位置情報送信ボタンを表示します。WhatsAppユーザーがボタンをタップすると、ユーザーが位置情報を共有するために使うことのできる位置情報の共有画面が表示されます。
インタラクティブ返信ボタンメッセージを利用すると、ユーザーが選択できる事前定義済みの返信を3つまで送信することができます。
テキストメッセージに冗長で意味が不明瞭な文字列のURLをそのまま載せると、顧客はタップするのをためらうかもしれません。このような場合は、本文とCTA URLボタンを含むインタラクティブメッセージを送ると良いかもしれません。
CTA URLボタンを使って任意のURLをボタンにマッピングすれば、インタラクティブメッセージ本文にURLをそのまま載せる必要がなくなります。
POST /<BUSINESS_PHONE_NUMBER_ID>/messages
{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "<CUSTOMER_PHONE_NUMBER>", "type": "interactive", "interactive": { "type": "cta_url", /* Header optional */ "header": { "type": "text", "text": "<HEADER_TEXT>" }, /* Body optional */ "body": { "text": "<BODY_TEXT>" }, /* Footer optional */ "footer": { "text": "<FOOTER_TEXT>" }, "action": { "name": "cta_url", "parameters": { "display_text": "<BUTTON_TEXT>", "url": "<BUTTON_URL>" } } } }
プレースホルダー | 説明 | 値の例 |
---|---|---|
文字列 | 必須。 メッセージ送信先となる顧客のWhatsApp IDまたは電話番号。電話番号の形式をご覧ください。 |
|
文字列 | 任意。 ヘッダーテキスト。 |
|
文字列 | 必須。 メッセージ本文のテキスト。 |
|
文字列 | 任意。 メッセージフッターのテキスト。 |
|
文字列 | 必須。 ボタンのテキスト。 |
|
文字列 | 必須。 WhatsAppユーザーがボタンをタップしたときに、デバイスのデフォルトウェブブラウザーに読み込まれるURL。 |
|
curl 'https://graph.facebook.com/v19.0
/106540352242922/messages' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "+16505555555",
"type": "interactive",
"interactive": {
"type": "cta_url",
"header": {
"text": "Available Dates"
},
"body": {
"text": "Tap the button below to see available dates."
},
"footer": {
"text": "Dates subject to change."
},
"action": {
"name": "cta_url",
"parameters": {
"display_text": "See Dates",
"url": "https://www.luckyshrub.com?clickID=kqDGWd24Q5TRwoEQTICY7W1JKoXvaZOXWAS7h1P76s0R7Paec4"
}
}
}
}'
{ "messaging_product": "whatsapp", "contacts": [ { "input": "+16505555555", "wa_id": "+16505555555" } ], "messages": [ { "id": "wamid.HBgLMTY1MDUwNzY1MjAVAgARGBI5QTNDQTVCM0Q0Q0Q2RTY3RTcA" } ] }
WhatsApp Flowを作成したら、それを送信できます。フローを使用してメッセージを送信するために、flow
と呼ばれる新しいタイプのインタラクティブオブジェクトを導入しました。フロー特有のインタラクティブオブジェクトのプロパティは以下のとおりです。
プロパティ | 型 | 説明 |
---|---|---|
| 文字列 | 値は |
| 文字列 | 値は |
| 文字列 | Flowは |
| 文字列 | 値は |
| 文字列 | 識別子として機能するようビジネスによって生成されるFlowトークン。 |
| 文字列 | WhatsAppが提供するFlowの固有ID |
| 文字列 | CTAボタンのテキスト。例:「登録」 文字数制限 - 20文字(絵文字は不可)。 |
| 文字列 |
|
| 文字列 |
|
| 文字列 | 最初の画面の |
| 文字列 | 任意。Flowの最初の画面の入力データ。空でないオブジェクトでなければなりません。 |
リクエストの例
curl -X POST \ 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "recipient_type": "individual", "messaging_product": "whatsapp", "to": "PHONE_NUMBER", "type": "interactive", "interactive": { "type": "flow", "header": { "type": "text", "text": "Flow message header" }, "body": { "text": "Flow message body" }, "footer": { "text": "Flow message footer" }, "action": { "name": "flow", "parameters": { "flow_message_version": "3", "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.", "flow_id": "1", "flow_cta": "Book!", "flow_action": "navigate", "flow_action_payload": { "screen": "<SCREEN_NAME>", "data": { "product_name": "name", "product_description": "description", "product_price": 100 } } } } } }'
応答の例
{ "messaging_product": "whatsapp", "contacts": [ { "Input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID" } ], "messages": [ { "id": "wamid.ID" } ] }
直前のメッセージへの返信として、どんなタイプのメッセージでも送ることができます。新しいメッセージの先頭に、直前のメッセージがコンテキストバブルの中で引用されて表示されます。
次の場合には、返信として送信される配信メッセージの先頭にコンテキストバブルは表示されません。
POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID>/messages
{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "<WHATSAPP_USER_PHONE_NUMBER>", "context": { "message_id": "WAMID_TO_REPLY_TO" }, /* Message type and type contents goes here */ }
プレースホルダー | 説明 | 値の例 |
---|---|---|
文字列 | 必須。 返信対象の直前のメッセージのWhatsAppメッセージID(wamid)。 |
|
String | Required. WhatsApp user phone number. |
|
curl 'https://graph.facebook.com/v19.0/106540352242922/messages' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer EAAJB...' \ -d ' { "messaging_product": "whatsapp", "recipient_type": "individual", "to": "+16505551234", "context": { "message_id": "wamid.HBgLMTY0NjcwNDM1OTUVAgASGBQzQTdCNTg5RjY1MEMyRjlGMjRGNgA=" }, "type": "text", "text": { "body": "You'\''re welcome, Pablo!" } }'
この機能を利用できるのは、シンガポールに本拠地を置くビジネスとその顧客のうちシンガポールの人、およびインドに本拠地を置くビジネスとその顧客のうちインドの人だけです。
住所メッセージにより、ユーザーはWhatsApp上で配送先住所をビジネスと簡単に共有できます。
住所メッセージはインタラクティブなメッセージであり、主に次の4つのパートが含まれます。header
、body
、footer
、action
。ビジネスは、このactionコンポーネントの中で、名前“address_message”を指定し関連するパラメーターも指定します。
現在、住所メッセージは、インドとシンガポールの2か国でサポートされています。以下の表は、どのフィールドがどの国でサポートされているかを具体的に示しています。
フィールド名 | 表示ラベル | インプットタイプ | 利用可能な国と地域 | 制限 |
---|---|---|---|---|
| 名前 | テキスト | インド、シンガポール | なし |
| 電話番号 | 電話番号 | インド、シンガポール | 有効な電話番号のみ |
| PINコード | テキスト | インド | 最大長: 6 |
| 郵便番号 | 数値 | シンガポール | 最大長: 6 |
| アパート/家番号 | テキスト | インド | なし |
| 階番号 | テキスト | インド | なし |
| タワー番号 | テキスト | インド | なし |
| ビル/アパートの名前 | テキスト | インド | なし |
| 住所 | テキスト | インド、シンガポール | なし |
| ランドマーク/エリア | テキスト | インド | なし |
| ユニット番号 | テキスト | シンガポール | なし |
| 市区町村 | テキスト | インド、シンガポール | なし |
| 州 | テキスト | インド | なし |
これは住所メッセージのAPI呼び出しの例です。country
属性はactionパラメーターの必須フィールドです。含まれていない場合、検証エラーが発生します。
curl -X POST \ 'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "PHONE_NUMBER", "type": "interactive", "interactive": { "type": "address_message", "body": { "text": "Thanks for your order! Tell us what address you’d like this order delivered to." }, "action": { "name": "address_message", "parameters": { "country" :"COUNTRY_ISO_CODE" } } } }'
その国の電話番号の市外局番が正しくない場合、ビジネスは受信者に住所メッセージをリクエストできなくなります。例えば、国を「シンガポール」としているのに、市外局番が「91」の電話番号になっている受信者には、ビジネスは住所メッセージをリクエストできません。
住所メッセージでは、矛盾しているフィールドを同時に渡すことはできません。例えば、country
が「IN」(インド)に設定されている場合、sg_post_code
を渡すことはできません。
住所メッセージを送信したら、ビジネスはユーザーが住所を入力して返信してくれるのを待ちます。ユーザーが入力した住所は、Webhooksを通して共有されます。このWebhooksは設定プロセスで登録したものです。
住所メッセージに関係する手順は以下のとおりです。
address_message
にします。次のシーケンス図は、住所メッセージの典型的な統合フローを示しています。
ビジネスはさらにほかの属性(values
、validation_errors
、saved_addresses
)を、インタラクティブなactionパラメーターとして使用することができます。それぞれの使用方法については、下記をご覧ください。
actionパラメーター | 使用方法 |
---|---|
| ビジネスが住所フィールドの事前入力値として使用する値(例: 都市の住所フィールドを「シンガポール」と事前入力しておく) |
| ビジネス側は、そのユーザーにすでに関連付けられている、保存済みの住所を渡すことができます。 ユーザー側には、手入力するのではなく、その保存済み住所を選択する選択肢が与えられます。 |
| ビジネスが住所フィールドをエラーにすることがあります。その場合、WhatsAppは問題が解決するまでユーザーは住所を送信させません。 |
WhatsApp APIを使用してPOST
呼び出しを/PHONE_NUMBER_ID/messages
に対して行い、エンドツーエンド暗号化された住所メッセージをユーザーに送信します。
curl -X POST \ 'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d ' { "messaging_product": "whatsapp", "recipient_type": "individual", "to": "PHONE_NUMBER", "type": "interactive", "interactive": { "type": "address_message", "body": { "text": "Thanks for your order! Tell us what address you’d like this order delivered to." }, "action": { "name": "address_message", "parameters": "JSON Payload" } } }'
保存済み住所なしで住所メッセージを送る場合、WhatsAppは、新しい住所を入力するための住所フォームのプロンプトをユーザーまたはビジネスに表示します。
curl -X POST \ 'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "+91xxxxxxxxxx", "type": "interactive", "interactive": { "type": "address_message", "body": { "text": "Thanks for your order! Tell us what address you’d like this order delivered to." }, "action": { "name": "address_message", "parameters": { "country": "IN", "values": { "name": "CUSTOMER_NAME", "phone_number": "+91xxxxxxxxxx" } } } } }'
curl -X POST \ 'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "+65xxxxxxxxxx", "type": "interactive", "interactive": { "type": "address_message", "body": { "text": "Thanks for your order! Tell us what address you’d like this order delivered to." }, "action": { "name": "address_message", "parameters": { "country": "SG", "values": { "name": "CUSTOMER_NAME", "phone_number": "+65xxxxxxxxxx" } } } } }'
保存済み住所ありで住所メッセージを送る場合、WhatsAppは、保存済みの住所から選ぶ選択肢と住所を追加する選択肢のプロンプトをユーザーまたはビジネスに表示します。ユーザーは保存済み住所を無視して、新しい住所を入力できます。
curl -X POST \ 'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "91xxxxxxxxxx", "type": "interactive", "interactive": { "type": "address_message", "body": { "text": "Thanks for your order! Tell us what address you’d like this order delivered to." }, "action": { "name": "address_message", "parameters": { "country": "IN", "saved_addresses": [ { "id": "address1", "value": { "name": "CUSTOMER_NAME", "phone_number": "+91xxxxxxxxxx", "in_pin_code": "400063", "floor_number": "8", "building_name": "", "address": "Wing A, Cello Triumph,IB Patel Rd", "landmark_area": "Goregaon", "city": "Mumbai" } } ] } } } }'
curl -X POST \ 'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "+65xxxxxxxxxx", "type": "interactive", "interactive": { "type": "address_message", "body": { "text": "Thanks for your order! Tell us what address you’d like this order delivered to." }, "action": { "name": "address_message", "parameters": { "country": "SG", "values": { "name": "CUSTOMER_NAME", "phone_number": "+65xxxxxxxxxx" }, "saved_addresses": [ { "id": "address1", "value": { "name": "CUSTOMER_NAME", "phone_number": "+65xxxxxxxxxx", "sg_post_code": "018937", "address": "9 Straits View, Marina One West Tower", "unit_number": "Suite 29-00", "city": "Singapore" } } ] } } } }'
成功した場合の応答には、新しく作成されたメッセージのIDが指定されたmessages
オブジェクトが含まれています。
{ "messaging_product": "whatsapp", "contacts": [{ "input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID", }] "messages": [{ "id": "wamid.ID", }] }
失敗した場合の応答には、エラーメッセージが含まれています。詳しくは、エラーコードとステータスコードをご覧ください。
ビジネスサーバーで検証エラーが発生した場合、住所メッセージをユーザーに再送信する必要があります。ビジネスは、ユーザーが前に入力した値のセットを送り返し、その際、無効な各フィールドの検証エラーも送ります。以下にペイロードのサンプルを示します。
curl -X POST \ 'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "91xxxxxxxxxx", "type": "interactive", "interactive": { "type": "address_message", "body": { "text": "Thanks for your order! Tell us what address you’d like this order delivered to." }, "action": { "name": "address_message", "parameters": { "country": "IN", "values": { "name": "CUSTOMER_NAME", "phone_number": "+91xxxxxxxxxx", "in_pin_code": "666666", "address": "Some other location", "city": "Delhi" }, "validation_errors": { "in_pin_code": "We could not locate this pin code." } } } } }'
curl -X POST \ 'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{ "messaging_product": "whatsapp", "recipient_type": "individual", "to": "12065550107", "type": "interactive", "interactive": { "type": "address_message", "body": { "text": "Thanks for your order! Tell us what address you’d like this order delivered to." }, "action": { "name": "address_message", "parameters": { "country": "SG", "values": { "name": "CUSTOMER_NAME", "phone_number": "+65xxxxxxxxxx", "sg_post_code": "666666", "address": "Some other location", "city": "Singapore" }, "validation_errors": { "sg_post_code": "We could not locate this pin code." } } } } }'
ビジネスはWebhooksを通して住所送信の通知を受け取ります。以下に例を示します。
{ "messages": [ { "id": "gBGGFlAwCWFvAgmrzrKijase8yA", "from": "PHONE_NUMBER", "Interactive": { "type": "nfm_reply", "action": "address_message", "nfm_reply": { "name": "address_message", "response_json": “<response_json from client>”, "body": “<body text from client>”, } "timestamp": "1670394125", "type": "interactive" } ] }
Webhooks通知には以下の値があります。
フィールド名 | 型 | 説明 |
---|---|---|
| オブジェクト | クライアントからの応答を保持する |
| 文字列 | クライアントからのネイティブフローメッセージ(NFM)応答であることを示す |
| オブジェクト | クライアントから受け取ったデータを保持する |
| 文字列 | ユーザーが入力した住所フィールドの値(JSON形式)、常に存在します |
| 文字列 | クライアントからの本文テキスト、ユーザーに表示されるテキスト |
| 文字列 | クライアントからのNFMアクション応答タイプであることを示す |
インドの住所メッセージリクエストのNFM応答タイプの場合、住所メッセージ返信は以下のようになります。
{ "messages": [ { "context": { "from": "FROM_PHONE_NUMBER_ID", "id": "wamid.HBgLMTIwNjU1NTAxMDcVAgARGBI3NjNFN0U5QzMzNDlCQjY0M0QA" }, "from": "PHONE_NUMBER", "id": "wamid.HBgLMTIwNjU1NTAxMDcVAgASGCA5RDhBNENEMEQ3RENEOEEzMEI0RUExRDczN0I1NThFQwA=", "timestamp": "1671498855", "type": "interactive", "interactive": { "type": "nfm_reply", "nfm_reply": { "response_json": "{\"saved_address_id\":\"address1\",\"values\":{\"in_pin_code\":\"400063\",\"building_name\":\"\",\"landmark_area\":\"Goregaon\",\"address\":\"Wing A, Cello Triumph, IB Patel Rd\",\"city\":\"Mumbai\",\"name\":\"CUSTOMER_NAME\",\"phone_number\":\"+91xxxxxxxxxx\",\"floor_number\":\"8\"}}", "body": "CUSTOMER_NAME\n +91xxxxxxxxxx\n 400063, Goregaon, Wing A, Cello Triumph,IB Patel Rd, Mumbai, 8", "name": "address_message" } } } ] }
クライアントがaddress_message
をサポートしていない場合、メッセージは静かにドロップされ、エラーメッセージがWebhooksでビジネスに返されます。送り返されるWebhooks通知は、以下のようになります。
{ "statuses": [ { "errors": [ { "code": 1026, "href": "https://developers.facebook.com/docs/whatsapp/api/errors/", "title": "Receiver Incapable" } ], "id": "gBGGFlAwCWFvAgkyHMGKnRu4JeA", "message": { "recipient_id": "+91xxxxxxxxxx" }, "recipient_id": "91xxxxxxxxxx", "status": "failed", "timestamp": "1670394125", "type": "message" } ] }
テンプレートメッセージをご覧ください。
一連のメッセージを送信する際、メッセージが配信される順番が、APIリクエスト発行の順番と一致するという保証はありません。メッセージ配信の順序が問題になる場合は、メッセージWebhookの中でdelivered
ステータスを受け取ったことを確認してから、メッセージシーケンス中の次のメッセージを送信するようにしてください。
メッセージの配信に問題が発生した場合は、メッセージが配信されないをご覧ください。