WhatsAppのメッセージテンプレートは、通知の受信をオプトインしている利用者に対してビジネスが通知やカスタマーケアメッセージを送信するために使用する、固有のメッセージフォーマットです。メッセージには、予約リマインダー、配送情報、問題解決、支払いの最新情報などがあります。
テンプレートメッセージを送信するには、テンプレートを作成する必要があります。詳しくは、WhatsApp Businessアカウントのメッセージテンプレートを作成するをご覧ください。アカウントがまだ認証されていない場合は、こちらの認証前のテンプレートを使うことができます。
現在送信可能なテンプレートのタイプは次のとおりです。
このガイドに出てくるAPI呼び出しはすべて、アクセストークンで認証されている必要があります。開発者は、アプリダッシュボード > [WhatsApp] > [API設定]で生成されたアクセストークンを使用して、API呼び出しを認証できます。ソリューションパートナーは、whatsapp_business_messaging
アクセス許可とアクセストークンで認証する必要があります。
新しく作成されたマーケティングテンプレートまたは一時停止されていないマーケティングテンプレートは、テンプレートペーシングの対象となります。テンプレートペーシングをご覧ください。
テキストベースのメッセージテンプレートを送信するには、/PHONE_NUMBER_ID/messages
にPOST
呼び出しを行って、type=template
のメッセージオブジェクトを指定します。次に、template
オブジェクトを追加します。
リクエストの例
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 '{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "PHONE_NUMBER",
"type": "template",
"template": {
"name": "TEMPLATE_NAME",
"language": {
"code": "LANGUAGE_AND_LOCALE_CODE"
},
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "text-string"
},
{
"type": "currency",
"currency": {
"fallback_value": "VALUE",
"code": "USD",
"amount_1000": NUMBER
}
},
{
"type": "date_time",
"date_time": {
"fallback_value": "DATE"
}
}
]
}
]
}
}'
成功した場合の応答には、wamidが先頭に付いたIDが指定されたオブジェクトが含まれます。メッセージのステータスをトラッキングするには、wamidに続くIDを使います。
{ "messaging_product": "whatsapp", "contacts": [{ "input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID", }] "messages": [{ "id": "wamid.ID", }] }
メディアベースのメッセージテンプレートを送信するには、/PHONE_NUMBER_ID/messages
にPOST
呼び出しを行って、type=template
のメッセージオブジェクトを指定します。次に、template
オブジェクトを追加します。メディアHTTPキャッシュをサポートします。
WhatsApp Business Phone Number > MessagesエンドポイントのPOSTを使って、メディアベースのテンプレートメッセージを送信します。type
プロパティをtemplate
に設定し、template
プロパティを使用してテンプレートオブジェクトとそのメディアオブジェクトを定義します。
メディアオブジェクトを定義するには、サーバーにメディアアセットをアップロードして、そのメディアIDを使用(id
プロパティを使用)するか、自身のサーバーでアセットをホスティングして、そのURLプロパティを使用(link
を使用)します。link
を使う場合、アセットが公開アクセス可能なサーバー上にないと、メッセージの送信が失敗します。
エラーの可能性を減らし、パブリックサーバーへの不必要なリクエストを避けるために、メディアアセットをアップロードし、メッセージを送信するときにそのIDを使用することをおすすめします。
メディア資産はキャッシュすることもできます。メディアHTTPキャッシュをご覧ください。
リクエストの例
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 '{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "PHONE_NUMBER",
"type": "template",
"template": {
"name": "TEMPLATE_NAME",
"language": {
"code": "LANGUAGE_AND_LOCALE_CODE"
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "image",
"image": {
"link": "https://URL"
}
}
]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "TEXT-STRING"
},
{
"type": "currency",
"currency": {
"fallback_value": "VALUE",
"code": "USD",
"amount_1000": NUMBER
}
},
{
"type": "date_time",
"date_time": {
"fallback_value": "MONTH DAY, YEAR"
}
}
]
}
]
}
}'
成功した場合の応答には、wamidが先頭に付いたIDが指定されたオブジェクトが含まれます。メッセージのステータスをトラッキングするには、wamidに続くIDを使います。
{ "messaging_product": "whatsapp", "contacts": [{ "input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID", }] "messages": [{ "id": "wamid.ID", }] }
インタラクティブメッセージテンプレートが拡張され、標準メッセージテンプレートやメディアメッセージテンプレートタイプでは送信できないコンテンツを受信者に送信できるようになりました。コンポーネントオブジェクトを使用して、インタラクティブボタンを含めることができます。事前定義ボタンには、次の2つのタイプがあります。
これらのボタンは、テキストメッセージやメディアメッセージに含めることができます。作成と認証が完了したインタラクティブメッセージテンプレートは、通知メッセージやカスタマーサービス/ケアのメッセージで使用できます。
インタラクティブメッセージテンプレートを送信するには、/PHONE_NUMBER_ID/messages
にPOST
呼び出しを行って、type=template
のメッセージオブジェクトを指定します。そして、選択したbutton
にtemplate
オブジェクトを追加します。
リクエストの例
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 '{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "PHONE_NUMBER",
"type": "template",
"template": {
"name": "TEMPLATE_NAME",
"language": {
"code": "LANGUAGE_AND_LOCALE_CODE"
},
"components": [
{
"type": "header",
"parameters": [
{
"type": "image",
"image": {
"link": "http(s)://URL"
}
}
]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "TEXT_STRING"
},
{
"type": "currency",
"currency": {
"fallback_value": "VALUE",
"code": "USD",
"amount_1000": NUMBER
}
},
{
"type": "date_time",
"date_time": {
"fallback_value": "MONTH DAY, YEAR"
}
}
]
},
{
"type": "button",
"sub_type": "quick_reply",
"index": "0",
"parameters": [
{
"type": "payload",
"payload": "PAYLOAD"
}
]
},
{
"type": "button",
"sub_type": "quick_reply",
"index": "1",
"parameters": [
{
"type": "payload",
"payload": "PAYLOAD"
}
]
}
]
}
}'
成功した場合の応答には、wamidが先頭に付いたIDが指定されたオブジェクトが含まれます。メッセージのステータスをトラッキングするには、wamidに続くIDを使います。
{ "messaging_product": "whatsapp", "contacts": [{ "input": "PHONE_NUMBER", "wa_id": "WHATSAPP_ID", }] "messages": [{ "id": "wamid.ID", }] }
位置情報ヘッダーを使うテンプレートを送信するには、リクエストに位置情報ヘッダーオブジェクトを含める必要があります。
{ "type": "header", "parameters": [ { "type": "location", "location": { "latitude": "<LATITUDE>", "longitude": "<LONGITUDE>", "name": "<NAME>", "address": "<ADDRESS>" } } ] }
プレースホルダー | 説明 | 値の例 |
---|---|---|
| メッセージの先頭にある一般マップの下で、 |
|
| 位置情報の緯度。 |
|
| 位置情報の経度。 |
|
| メッセージの先頭にある一般マップのすぐ下に表示されるテキスト。 |
|
これは、次のコンポーネントを使う既存のテンプレートを送信するリクエストの例です。
curl -L 'https://graph.facebook.com/v16.0/106540352242922/messages' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer EAAJB...' \ -d ' { "messaging_product": "whatsapp", "recipient_type": "individual", "to": "12245554792", "type": "template", "template": { "name": "order_delivery_update", "language": { "code": "en_US" }, "components": [ { "type": "header", "parameters": [ { "type": "location", "location": { "latitude": "37.483307", "longitude": "122.148981", "name": "Pablo Morales", "address": "1 Hacker Way, Menlo Park, CA 94025" } } ] }, { "type": "body", "parameters": [ { "type": "text", "text": "Pablo" }, { "type": "text", "text": "566701" } ] } ] } }'
従来の認証テンプレート(ワンタイムパスワードボタンのないテンプレート)を送信しようとすると、変数値が15文字を超えているか、リンクや絵文字が含まれている場合、またはテンプレート本体コンポーネントにリンクが含まれている場合、エラー コード100
が返されます。代わりにワンタイムパスワードボタンがある認証テンプレートを作成し、使用してください。
認証テンプレートと認証テンプレートの送信をご覧ください。
一連のメッセージを送信する際、メッセージが配信される順番が、APIリクエスト発行の順番と一致するという保証はありません。メッセージを順番に配信したい場合は、メッセージWebhookでdelivered
ステータスを受け取ったことを確認してから、次のメッセージを送信するようにしてください。
2024年2月6日より、インドの少数のWhatsAppユーザーに送信されるテンプレートメッセージに、ユーザーごとのマーケティングテンプレートメッセージの制限が適用されます。この制限は、2024年2月13日までに、インドの電話番号を持つすべてのWhatsAppユーザーに対して適用される予定です。
Metaでは、インドの消費者を皮切りに、高品質なユーザーエクスペリエンスを創造し、マーケティングテンプレートメッセージのエンゲージメントを最大限に高める新しいアプローチを提案しています。これには、一定の期間中、1人がビジネスから受け取るマーケティングテンプレートメッセージの数を制限することも含まれる場合があります。この制限は、読まれる可能性の低い少数の会話から始められます。制限は、その人のビジネスと特に関係がない、任意のビジネスからすでに受け取っているマーケティングテンプレートメッセージの数に基づいて決定されます。
この制限は、通常は新しいマーケティングスレッドを開くマーケティングテンプレートメッセージにのみ適用されます。WhatsAppユーザーとの間ですでにマーケティングスレッドを開いている場合は、そのユーザーに送信済みのマーケティングテンプレートメッセージには影響がありません。
この制限により、マーケティングテンプレートメッセージが特定のユーザーに配信されない場合、クラウドAPIからエラーコード131026
が、オンプレミスAPIからエラーコード1026
が返されます。ただし、これらのエラーコードは、メッセージの未配信につながる幅広い問題に対応しています。また実際に、この制限が原因でメッセージが配信されなかった場合であっても、プライバシー上の理由によりその内容は開示されません。クラウドAPIのトラブルシューティングドキュメントとオンプレミスAPIの「配信率が100%にならないのはなぜですか?」を参照してください。未配信の理由と、その根本原因を特定するためにできることについての説明は、よくある質問(FAQ)を参照してください。
これらのエラーコードのいずれかを受け取り、この制限が原因と思われる場合は、すぐにテンプレートメッセージを再送しないでください。そうしても、またエラーが返されるだけです。代わりに、最終的にメッセージが配信されるまで、間隔を徐々に延ばしながら再送を試みてください。制限は時間帯を変えても有効である可能性があります。
Metaでは、引き続きアプローチの洗練に努め、ご協力に感謝しつつ、WhatsAppがビジネスとその顧客にとっての最高のエクスペリエンスとなるよう投資を行ってゆきます。
メッセージの配信に問題が発生した場合は、メッセージが配信されないをご覧ください。