このドキュメントが更新されました。
日本語への翻訳がまだ完了していません。
英語の最終更新: 5月16日

メッセージの送信

APIを使って、以下のタイプのメッセージを送信できます。

リアクションメッセージを除くすべてのタイプは、replyとして指定することができます。

リクエストの構文

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>}

}

投稿本文のパラメーター

プレースホルダー説明値の例

<TO>

文字列

メッセージ送信先となる顧客のWhatsApp IDまたは電話番号。電話番号の形式をご覧ください

+16315551234

<TYPE>

文字列

メッセージのタイプを示します。

text

<TEXT>

オブジェクト

テキストメッセージの内容。

テキストメッセージをご覧ください。

<REACTION>

オブジェクト

リアクションメッセージの内容。

リアクションメッセージをご覧ください

<IMAGE>

オブジェクト

メディアメッセージの内容。プロパティ名が、送信するメディアメッセージと一致していなければなりません(画像メッセージではimage、動画メッセージではvideo、など)。

メディアメッセージをご覧ください。

<LOCATION>

オブジェクト

位置情報メッセージの内容。

位置情報メッセージをご覧ください

<CONTACTS>

オブジェクト

連絡先メッセージの内容。

連絡先メッセージをご覧ください。

<INTERACTIVE>

オブジェクト

インタラクティブメッセージの内容。

インタラクティブメッセージをご覧ください。

このドキュメント全体で使われている例は、メッセージのそれぞれのタイプについて、投稿本文ペイロード要件について説明するためのものです。

応答の構文

成功すると、APIは以下のように応答します。

{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "input": "<WHATSAPP_USER_PHONE_NUMBER>",
      "wa_id": "<WHATSAPP_USER_ID>"
    }
  ],
  "messages": [
    {
      "id": "<WHATSAPP_MESSAGE_ID>"
    }
  ]
}

応答パラメーター

PlaceholderDescriptionSample Value

<WHATSAPP_USER_PHONE_NUMBER>

String

WhatsApp user's WhatsApp phone number. May not match wa_id value.

+16505551234

<WHATSAPP_USER_ID>

String

WhatsApp user's WhatsApp ID. May not match input value.

16505551234

<WHATSAPP_MESSAGE_ID>

String

WhatsApp Message ID.


This ID appears in associated messages webhooks, such as sent, read, and delivered webhooks.

wamid.HBgLMTY0NjcwNDM1OTUVAgARGBI4MjZGRDA0OUE2OTQ3RkEyMzcA

Phone Number Formats

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 RequestNumber Message Delivered ToOutcome

+16315551234

+16315551234

Correct number

+1 (631) 555-1234

+16315551234

Correct number

(631) 555-1234

+916315551234

Potentially wrong number

1 (631) 555-1234

+9116315551234

Potentially wrong number

テキストメッセージ

テキストメッセージは、テキスト本文、そして任意でリンクプレビューだけを含むメッセージです。

リアクションメッセージ

リアクションメッセージは、受け取った直前のWhatsAppユーザーメッセージに対して適用できる絵文字リアクションです。

メディアメッセージ

WhatsAppユーザーに対して、音声メッセージ、ドキュメントメッセージ、画像メッセージ、スタンプメッセージ、動画メッセージを送信することができます。

音声メッセージ

音声メッセージは、音声アイコンと音声ファイルへのリンクを表示します。WhatsAppユーザーがアイコンをタップすると、WhatsAppクライアントが音声ファイルを読み込んで再生します。

ドキュメントメッセージ

ドキュメントメッセージは、ドキュメントアイコンを表示します。WhatsAppユーザーがそのアイコンをタップすると、リンクされているドキュメントをダウンロードすることができます。

画像メッセージ

画像メッセージは、単一の画像、そして任意でキャプションを表示します。

スタンプメッセージ

スタンプメッセージは、WhatsAppメッセージの中にアニメーションスタンプ画像または静止スタンプ画像を表示します。

動画メッセージ

動画メッセージは、動画画像のサムネイルプレビューを表示します。任意でキャプションも付けることができます。WhatsAppユーザーがそのプレビューをタップすると、動画が読み込まれてユーザーに対して表示されます。

メディアアセット

メディアアセットは、メッセージ送信元のビジネス電話番号にアップロードする必要があります。または、アセットを公開サーバー上でホスティングし、そのURLをメッセージ送信リクエストに含める必要があります。

エラーの可能性を減らし、パブリックサーバーへの不必要なリクエストを避けるために、メディアアセットをアップロードし、メッセージを送信するときにそのIDを使用することをおすすめします。

メディアHTTPキャッシュ

WhatsAppクラウドAPIでは、メディアHTTPキャッシュがサポートされています。(MetaのサーバーにアップロードしたアセットのID(id)ではなく)自分のサーバー上のメディアアセットへのリンク(link)を使う場合、Metaからアセットがリクエストされた時点で、あなたのサーバーからの応答に以下のヘッダーを含めることにより、将来のメッセージで再利用するためにアセットをキャッシュに入れるようMetaに指示することができます。これらのヘッダーが含まれていない場合、アセットはキャッシュに入れられません。

Cache-Control: <CACHE_CONTROL>
Last-Modified: <LAST_MODIFIED>
ETag: <ETAG>

Cache-Control

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: アセットが受信者に合わせてパーソナライズされるため、キャッシュには入れないことを指定します。

Last-Modified

最後にアセットに変更が加えられた時刻を示します。Cache-Control: no-cacheと一緒に使います。Last-Modifiedの値が以前の応答とは違っており、かつ応答にCache-Control: no-cacheが含まれている場合、アセットのキャッシュバージョンが、応答の中のアセットによって更新されます。例: Date: Tue, 22 Feb 2022 22:22:22 GMT

ETag

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=contactmessageオブジェクトを指定します。そして、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つまで送信することができます。

インタラクティブCTA URLボタン

テキストメッセージに冗長で意味が不明瞭な文字列の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>"
      }
    }
  }
}

本体のプロパティ


プレースホルダー説明値の例

<CUSTOMER_PHONE_NUMBER>

文字列

必須。


メッセージ送信先となる顧客のWhatsApp IDまたは電話番号。電話番号の形式をご覧ください。

+15558543153

<HEADER_TEXT>

文字列

任意。


ヘッダーテキスト。

Available Dates

<BODY_TEXT>

文字列

必須。


メッセージ本文のテキスト。

Tap the button below to see available dates.

<FOOTER_TEXT>

文字列

任意。


メッセージフッターのテキスト。

Dates subject to change.

<BUTTON_TEXT>

文字列

必須。


ボタンのテキスト。

See Dates

<BUTTON_URL>

文字列

必須。


WhatsAppユーザーがボタンをタップしたときに、デバイスのデフォルトウェブブラウザーに読み込まれるURL。

https://www.luckyshrub.com?clickID=kqDGWd24Q5TRwoEQTICY7W1JKoXvaZOXWAS7h1P76s0R7Paec4

リクエストの例

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"
    }
  ]
}

Flowsメッセージ

WhatsApp Flowを作成したら、それを送信できます。フローを使用してメッセージを送信するために、flowと呼ばれる新しいタイプのインタラクティブオブジェクトを導入しました。フロー特有のインタラクティブオブジェクトのプロパティは以下のとおりです。

プロパティ 説明

interactive.type

文字列

値はflowにする必要があります。

interactive.action.name

文字列

値はflowにする必要があります。

interactive.action.parameters.mode

文字列

Flowはdraftもしくはpublishedモードのいずれかです。publishedがこのフィールドのデフォルト値です。

interactive.action.parameters.flow_message_version

文字列

値は3にする必要があります。

interactive.action.parameters.flow_token

文字列

識別子として機能するようビジネスによって生成されるFlowトークン。

interactive.action.parameters.flow_id

文字列

WhatsAppが提供するFlowの固有ID

interactive.action.parameters.flow_cta

文字列

CTAボタンのテキスト。例:「登録」

文字数制限 - 20文字(絵文字は不可)。

interactive.action.parameters.flow_action

文字列

navigateまたはdata_exchange。デフォルト値は navigate

interactive.action.parameters.flow_action_payload

文字列

flow_actionnavigateの場合は必須。それ以外の場合は省略。

interactive.action.parameters.flow_action_payload.screen

文字列

最初の画面のid

interactive.action.parameters.flow_action_payload.data

文字列

任意。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 */

}

投稿本文のパラメーター

プレースホルダー説明値の例

<WAMID_TO_REPLY_TO>

文字列

必須。

返信対象の直前のメッセージのWhatsAppメッセージID(wamid)。

wamid.HBgLMTY0NjcwNDM1OTUVAgASGBQzQTdCNTg5RjY1MEMyRjlGMjRGNgA=

<WHATSAPP_USER_PHONE_NUMBER>

String

Required.

WhatsApp user phone number.

+16505551234

リクエストの例

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つのパートが含まれます。headerbodyfooteraction。ビジネスは、このactionコンポーネントの中で、名前“address_message”を指定し関連するパラメーターも指定します。

現在、住所メッセージは、インドとシンガポールの2か国でサポートされています。以下の表は、どのフィールドがどの国でサポートされているかを具体的に示しています。

フィールド名 表示ラベル インプットタイプ 利用可能な国と地域 制限

name

名前

テキスト

インド、シンガポール

なし

phone_number

電話番号

電話番号

インド、シンガポール

有効な電話番号のみ

in_pin_code

PINコード

テキスト

インド

最大長: 6

sg_post_code

郵便番号

数値

シンガポール

最大長: 6

house_number

アパート/家番号

テキスト

インド

なし

floor_number

階番号

テキスト

インド

なし

tower_number

タワー番号

テキスト

インド

なし

building_name

ビル/アパートの名前

テキスト

インド

なし

address

住所

テキスト

インド、シンガポール

なし

landmark_area

ランドマーク/エリア

テキスト

インド

なし

unit_number

ユニット番号

テキスト

シンガポール

なし

city

市区町村

テキスト

インド、シンガポール

なし

state

テキスト

インド

なし

API呼び出しの例

これは住所メッセージの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は設定プロセスで登録したものです。

住所メッセージのステップ

住所メッセージに関係する手順は以下のとおりです。

  1. ビジネスがユーザーに住所メッセージを送信します。このとき、アクション名をaddress_messageにします。
  2. ユーザーはCTAをクリックしてメッセージをやり取りします。クリックすると、住所メッセージの画面が表示されます。ユーザーは住所を入力して、フォームを送信します。
  3. ユーザーが住所メッセージフォームを送信した後、パートナーはWebhooks通知を受け取ります。この通知に、ユーザーが送信した住所の詳細が含まれています。
インドの住所メッセージの例
シンガポールの住所メッセージの例

次のシーケンス図は、住所メッセージの典型的な統合フローを示しています。

その他のactionパラメーター

ビジネスはさらにほかの属性(valuesvalidation_errorssaved_addresses)を、インタラクティブなactionパラメーターとして使用することができます。それぞれの使用方法については、下記をご覧ください。

actionパラメーター 使用方法

values

ビジネスが住所フィールドの事前入力値として使用する値(例: 都市の住所フィールドを「シンガポール」と事前入力しておく)

saved_addresses

ビジネス側は、そのユーザーにすでに関連付けられている、保存済みの住所を渡すことができます。

ユーザー側には、手入力するのではなく、その保存済み住所を選択する選択肢が与えられます。

validation_errors

ビジネスが住所フィールドをエラーにすることがあります。その場合、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通知には以下の値があります。

フィールド名 説明

interactive

オブジェクト

クライアントからの応答を保持する

type

文字列

クライアントからのネイティブフローメッセージ(NFM)応答であることを示すnfm_replyになります

nfm_reply

オブジェクト

クライアントから受け取ったデータを保持する

response_json

文字列

ユーザーが入力した住所フィールドの値(JSON形式)、常に存在します

body (任意)

文字列

クライアントからの本文テキスト、ユーザーに表示されるテキスト

name (任意)

文字列

クライアントからのNFMアクション応答タイプであることを示すaddress_messageになります

インドの住所メッセージリクエストの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ステータスを受け取ったことを確認してから、メッセージシーケンス中の次のメッセージを送信するようにしてください。

トラブルシューティング

メッセージの配信に問題が発生した場合は、メッセージが配信されないをご覧ください。