スレッドベースの価格設定が変更されました。新しいスレッドベースの価格設定モデルの仕組みについては、価格設定をご覧ください。

さらに、metric_typesの可視性が2023年7月1日から変更されました。詳細はスレッド分析表をご覧ください。

テンプレートメッセージ

WhatsAppのメッセージテンプレートは、通知の受信をオプトインしている利用者に対してビジネスが通知やカスタマーケアメッセージを送信するために使用する、固有のメッセージフォーマットです。メッセージには、予約リマインダー、配送情報、問題解決、支払いの最新情報などがあります。

テンプレートメッセージを送信するには、テンプレートを作成する必要があります。詳しくは、WhatsApp Businessアカウントのメッセージテンプレートを作成するをご覧ください。アカウントがまだ認証されていない場合は、こちらの認証前のテンプレートを使うことができます。

現在送信可能なテンプレートのタイプは次のとおりです。

このガイドに出てくるAPI呼び出しはすべて、アクセストークンで認証されている必要があります。開発者は、アプリダッシュボード > [WhatsApp] > [API設定]で生成されたアクセストークンを使用して、API呼び出しを認証できます。ソリューションパートナーは、whatsapp_business_messagingアクセス許可とアクセストークンで認証する必要があります。

ペーシング

新しく作成されたマーケティングテンプレートまたは一時停止されていないマーケティングテンプレートは、テンプレートペーシングの対象となります。テンプレートペーシングをご覧ください。

テキストベースのメッセージテンプレート

テキストベースのメッセージテンプレートを送信するには、/PHONE_NUMBER_ID/messagesPOST呼び出しを行って、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/messagesPOST呼び出しを行って、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/messagesPOST呼び出しを行って、type=templateのメッセージオブジェクトを指定します。そして、選択したbuttontemplateオブジェクトを追加します。

リクエストの例

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

プロパティ

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

<ADDRESS>

メッセージの先頭にある一般マップの下で、<NAME>の値の後に表示されるテキスト。

1 Hacker Way, Menlo Park, CA 94025

<LATITUDE>

位置情報の緯度。

37.483307

<LONGITUDE>

位置情報の経度。

122.148981

<NAME>

メッセージの先頭にある一般マップのすぐ下に表示されるテキスト。

Pablo Morales

リクエストの例

これは、次のコンポーネントを使う既存のテンプレートを送信するリクエストの例です。

  • 位置情報ヘッダー
  • 変数を含むテキスト本文
  • フッター
  • クイック返信ボタン
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リクエスト発行の順番と一致するという保証はありません。メッセージを順番に配信したい場合は、メッセージWebhookdeliveredステータスを受け取ったことを確認してから、次のメッセージを送信するようにしてください。

ユーザーごとのマーケティングテンプレート メッセージの制限

2024年2月6日より、インドの少数のWhatsAppユーザーに送信されるテンプレートメッセージに、ユーザーごとのマーケティングテンプレートメッセージの制限が適用されます。この制限は、2024年2月13日までに、インドの電話番号を持つすべてのWhatsAppユーザーに対して適用される予定です。

Metaでは、インドの消費者を皮切りに、高品質なユーザーエクスペリエンスを創造し、マーケティングテンプレートメッセージのエンゲージメントを最大限に高める新しいアプローチを提案しています。これには、一定の期間中、1人がビジネスから受け取るマーケティングテンプレートメッセージの数を制限することも含まれる場合があります。この制限は、読まれる可能性の低い少数の会話から始められます。制限は、その人のビジネスと特に関係がない、任意のビジネスからすでに受け取っているマーケティングテンプレートメッセージの数に基づいて決定されます。

この制限は、通常は新しいマーケティングスレッドを開くマーケティングテンプレートメッセージにのみ適用されます。WhatsAppユーザーとの間ですでにマーケティングスレッドを開いている場合は、そのユーザーに送信済みのマーケティングテンプレートメッセージには影響がありません。

この制限により、マーケティングテンプレートメッセージが特定のユーザーに配信されない場合、クラウドAPIからエラーコード131026が、オンプレミスAPIからエラーコード1026が返されます。ただし、これらのエラーコードは、メッセージの未配信につながる幅広い問題に対応しています。また実際に、この制限が原因でメッセージが配信されなかった場合であっても、プライバシー上の理由によりその内容は開示されません。クラウドAPIのトラブルシューティングドキュメントとオンプレミスAPIの「配信率が100%にならないのはなぜですか?」を参照してください。未配信の理由と、その根本原因を特定するためにできることについての説明は、よくある質問(FAQ)を参照してください。

これらのエラーコードのいずれかを受け取り、この制限が原因と思われる場合は、すぐにテンプレートメッセージを再送しないでください。そうしても、またエラーが返されるだけです。代わりに、最終的にメッセージが配信されるまで、間隔を徐々に延ばしながら再送を試みてください。制限は時間帯を変えても有効である可能性があります。

Metaでは、引き続きアプローチの洗練に努め、ご協力に感謝しつつ、WhatsAppがビジネスとその顧客にとっての最高のエクスペリエンスとなるよう投資を行ってゆきます。

トラブルシューティング

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