オンプレミスAPIを終了します。詳細と次世代クラウドAPIへの移行方法については、オンプレミスAPIの終了のドキュメントを参照してください。
このガイドでは、各インタラクティブメッセージの送信方法を説明します。インタラクティブメッセージを使うと、ユーザーは、WhatsApp上でビジネスに対して要求したいことを簡単に見つけ、選択することができます。テストでは、インタラクティブメッセージ機能を使用したチャットボットの場合、テキストベースのメッセージよりも返信率とコンバージョンが大幅に高くなりました。
インタラクティブメッセージの種類:
テキストメッセージとインタラクティブメッセージを比較すると、以下のようになります。

以下の例のように、リストメッセージと返信ボタンを1つのフロー内で組み合わせることができます。
インタラクティブメッセージの場合、テキストベースのリストよりもシンプルかつ一貫したフォーマットで、ユーザーがビジネスに要求したいことを見つけ、選択できます。テストでは、インタラクティブメッセージの方がユーザーの理解度が高いという結果が出ています。
テストでは、インタラクティブメッセージ機能を使用したチャットボットの場合、テキストベースのメッセージよりも返信率とコンバージョンが大幅に高くなりました。
リアルタイムで動的にデータを入力できるため、顧客や状況に合わせてパーソナライズできます。例えば、予約可能日時を選択できるリストメッセージを表示したり、返信ボタンで以前の配送先住所を表示したりすることができます。
インタラクティブメッセージにはテンプレートや事前承認は必要ありません。
リストメッセージは、複数のオプションを提示する場合に最適です。例として以下が挙げられます。
返信ボタンは、限られた数の選択肢を提供し、すぐに返信を得る場合に最適です。
返信ボタンは、一般的な回答では十分でない「パーソナライズされた」ユースケースに特に役立ちます。
Flowsメッセージは、次のような1つまたは複数の画面での構造化コミュニケーションに最適です。
Flowsメッセージを使用すると、企業はより豊かで魅力的なユーザーエクスペリエンスを提供できるようになり、顧客は必ずしも別のアプリに切り替えたり、ウェブサイトにアクセスしたりする必要がなく、WhatsAppで作業を迅速に完了できるようになります。
APIレベルでインタラクティブメッセージを設定するには、メッセージのtypeをinteractiveに指定し、interactiveオブジェクトを追加します。通常、このようなメッセージには主にheader、body、footer、actionの4つの部分が含まれています。
{
"recipient_type": "individual",
"to" : "whatsapp-id",
"type": "interactive"
"interactive":{
"type": "list" | "button" | ...,
"header": {},
"body": {},
"footer": {},
"action": {}
}
}

こうしたメッセージの送信方法については後述します。
各メッセージを送信する前に、/contactsノードを呼び出して受信者のWhatsApp IDを取得する必要があります。
Webhooksを設定して、メッセージステータスと着信メッセージの通知を受け取ることをおすすめします。そうすれば、メッセージが送信されたかどうかや、ユーザーからの回答をトラッキングすることができます。詳しくは、Webhooksをご覧ください。
interactiveオブジェクトを構成するリストメッセージを送信するには、listタイプのinteractiveオブジェクトに以下の要素を指定します。
| オブジェクト | 説明 |
|---|---|
| 任意。 これを含める場合は、ヘッダーのタイプをテキストに設定し、任意のコンテンツを指定したテキストフィールドを追加する必要があります。最大60文字。 |
| 必須。 メッセージ本文。最大1024文字。 |
| 任意。 メッセージのフッター。 |
| 必須。 アクション内に以下をネストする必要があります。
|
最終的に、interactiveオブジェクトは次のようになるはずです。
"interactive":{
"type": "list",
"header": {
"type": "text",
"text": "your-header-content"
},
"body": {
"text": "your-text-message-content"
},
"footer": {
"text": "your-footer-content"
},
"action": {
"button": "cta-button-content",
"sections":[
{
"title":"your-section-title-content",
"rows": [
{
"id":"unique-row-identifier",
"title": "row-title-content",
"description": "row-description-content",
}
]
},
{
"title":"your-section-title-content",
"rows": [
{
"id":"unique-row-identifier",
"title": "row-title-content",
"description": "row-description-content",
}
]
},
...
]
}
}返信ボタンメッセージを送信するには、buttonタイプのinteractiveオブジェクトに以下の要素を指定します。
| オブジェクト | 説明 |
|---|---|
| 任意。
例: "header": {
"type": "text" | "image" | "video" | "document",
"text": "your text"
# OR
"document": {
"id": "your-media-id",
"filename": "some-file-name"
}
# OR
"document": {
"link": "the-provider-name/protocol://the-url",
"provider": {
"name": "provider-name",
},
"filename": "some-file-name"
},
# OR
"video": {
"id": "your-media-id"
}
# OR
"video": {
"link": "the-provider-name/protocol://the-url",
"provider": {
"name": "provider-name"
}
}
# OR
"image": {
"id": "your-media-id"
}
# OR
"image": {
"link": "http(s)://the-url",
"provider": {
"name": "provider-name"
}
}
}
|
| 必須。 |
| 任意。 |
| 必須。
IDを設定するときには、前後にスペースがあってはなりません。 例: "action": {
"buttons": [
{
"type": "reply",
"reply": {
"id": "unique-postback-id",
"title": "First Button’s Title"
}
},
{
"type": "reply",
"reply": {
"id": "unique-postback-id",
"title": "Second Button’s Title"
}
}
]
}
|
最終的に、interactiveオブジェクトは次のようになるはずです。
"interactive": {
"type": "button",
"header": { # optional
"type": "text" | "image" | "video" | "document",
"text": "your text"
# OR
"document": {
"id": "your-media-id",
"filename": "some-file-name"
}
# OR
"document": {
"link": "the-provider-name/protocol://the-url",
"provider": {
"name": "provider-name",
},
"filename": "some-file-name"
},
# OR
"video": {
"id": "your-media-id"
}
# OR
"video": {
"link": "the-provider-name/protocol://the-url",
"provider": {
"name": "provider-name"
}
}
# OR
"image": {
"id": "your-media-id"
}
# OR
"image": {
"link": "http(s)://the-url",
"provider": {
"name": "provider-name"
}
}
}, # end header
"body": {
"text": "your-text-body-content"
},
"footer": { # optional
"text": "your-text-footer-content"
},
"action": {
"buttons": [
{
"type": "reply",
"reply": {
"id": "unique-postback-id",
"title": "First Button’s Title"
}
},
{
"type": "reply",
"reply": {
"id": "unique-postback-id",
"title": "Second Button’s Title"
}
}
]
} # end action
} # end interactive
位置情報リクエストメッセージには、本文と、ユーザーがタップできる[位置情報を送信する]ボタンが含まれます。ボタンをタップすると位置情報の共有画面が表示され、ユーザーは位置情報を共有することができます。

位置情報リクエストメッセージを送信するには、メッセージに表示するテキストを、interactiveオブジェクトに次のように指定します。
{
"type": "location_request_message",
"body": {
"type": "text",
"text": "<TEXT>"
},
"action": {
"name": "send_location"
}
}
| プロパティ | 説明 |
|---|---|
|
|
|
|
| [位置情報を送信する]ボタンの上に表示するテキストを指定します。 |
|
|
Flowsメッセージには、ユーザーがタップできるCTAボタンが含まれています。ボタンをタップするとカスタムフローが表示されます。
Flowsメッセージを送信するには、flowタイプのinteractiveオブジェクトをアセンブルする必要があります。詳しくは、こちらをご覧ください。
インタラクティブオブジェクトが完成したら、メッセージを構成するその他のパラメーターとして、recipient_type、to、typeを追加します。typeを必ずinteractiveに設定してください。
{
"recipient_type": "individual",
"to" : "whatsapp-id", // WhatsApp ID of your recipient
"type": "interactive",
"interactive":{
// Your interactive object
}
}すべてのメッセージタイプに共通するパラメーターについては、こちらをご覧ください。
/messagesに対してPOST呼び出しを行うステップ1と2でアセンブルしたJSONオブジェクトを使って、/messagesエンドポイントに対してPOST呼び出しを発行します。メッセージが正常に送信されると、次の応答を受け取ります。
{
"messages": [{
"id": "{message-id}"
}]
}Webhooksを設定した場合、メッセージステータスの変化とユーザーからの返信をチェックします。
インタラクティブメッセージに応答するユーザーのWebhooksには、interactiveという新しいコンポーネントがあり、ユーザーの選択に関する情報が含まれています。詳しくは、Webhooks、コンポーネントをご覧ください。
以下は、位置情報をシェアしたユーザーに関するWebhooksリクエストの例です。
{
"object": "whatsapp_business_account",
"entry": [
{
"id": "12345",
"changes": [
{
"value": {
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "12345",
"phone_number_id": "12345"
},
"contacts": [
{
"profile": {
"name": "John Doe"
},
"wa_id": "12345"
}
],
"messages": [
{
"context": {
"from": "12345",
"id": "test-id"
},
"from": "123450",
"id": "test-id",
"timestamp": "16632",
"location": {
"address": "1071 5th Ave, New York, NY 10128", #Optional
"latitude": 37.421996751527,
"longitude": -122.08407156636,
"name": "Solomon R. Guggenheim Museum" #Optional
},
"type": "location"
}
]
},
"field": "messages"
}
]
}
]
}
ペイロード内のlocationコンポーネントには、ユーザーの緯度と経度が含まれています。addressとnameを含めるかはユーザーが任意に選択できるため、含まれていない場合があります。
"location": {
"address": "1071 5th Ave, New York, NY 10128", #Optional
"latitude": 40.782910059774,
"longitude": -73.959075808525,
"name": "Solomon R. Guggenheim Museum" #Optional
}