コンテンツへスキップ
Wbiztool

メッセージングAPI

複数の番号に送信API

1回のリクエストで、同じWhatsAppメッセージを複数の電話番号やグループに送信します。ニュースレター、特典のご案内、お知らせなど、小規模な一斉送信に利用できます。

POSThttps://wbiztool.com/api/v1/send_msg/multi/

リクエストボディ: JSONまたはフォームフィールド

Wbiztoolは受信者ごとに1件のメッセージを作成し、それぞれのmsg_idを返します。これを使って、各メッセージのステータスを個別に確認できます。

クイック例#

curl -X POST https://wbiztool.com/api/v1/send_msg/multi/ \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": 12345,
    "api_key": "YOUR_API_KEY",
    "whatsapp_client": 678,
    "msg_type": 0,
    "country_code": "91",
    "phone": "9876543210,9812345670,Sales Team Mumbai",
    "msg": "Our Diwali sale starts tomorrow. Get 20% off on all orders!"
  }'

12345YOUR_API_KEY678はご自身の値に置き換えてください。値の確認場所は認証をご覧ください。

リクエストパラメータ#

認証

client_idinteger必須

設定 → APIキーに表示されるAPIクライアントIDです。

api_keystring必須

同じページにあるAPIキーです。

whatsapp_clientinteger必須

送信に使うWhatsApp番号のIDです。WhatsApp設定で確認できます。メッセージ送信APIとは異なり、このエンドポイントが番号を自動で選ぶことはありません。

受信者とメッセージ

phonestring必須

電話番号とグループ名をカンマ区切りの1つの文字列で指定します(例:9876543210,9812345670,Sales Team Mumbai)。JSON配列は送信しないでください。受信者の解釈方法を参照してください。

country_codestring任意

+を除いた国番号です(例:91)。番号がすでにこの国番号で始まっていない限り、各電話番号の先頭に付加されます。JSONでは数値ではなく文字列("91")で送信してください。数値で送信すると、リスト内のすべての電話番号がグループ名として扱われ(is_group: true)、それらのメッセージは失敗します。

msg_typeinteger任意

0テキスト(デフォルト)、1画像、2ファイルまたはドキュメント。

msgstringmsg_typeが0の場合は必須

メッセージ本文です。画像やファイルの場合はキャプションになり、空でもかまいません。WhatsAppの書式(*bold*_italic_~strikethrough~)が使えます。エイリアスとしてmessageも受け付けます。

画像とファイル

img_urlstringmsg_typeが1の場合は必須

画像の公開httpまたはhttps URLです。

file_urlstringmsg_typeが2の場合は必須

ファイルを直接ダウンロードできる公開httpまたはhttps URLです。

file_namestring任意

受信者に表示されるファイル名です(例:price-list.pdf)。小文字で送信され、& : ? * $ ;などの文字は_に置き換えられ、150文字に切り詰められます。省略した場合は、URLから名前が取得されます。

配信オプション

webhookstring任意

各メッセージが送信されたとき、または失敗したときにPOSTを受け取るURLです。ペイロードはメッセージ送信と同じです。

URLから画像を送信cURL
curl -X POST https://wbiztool.com/api/v1/send_msg/multi/ \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": 12345,
    "api_key": "YOUR_API_KEY",
    "whatsapp_client": 678,
    "msg_type": 1,
    "country_code": "91",
    "phone": "9876543210,9812345670",
    "img_url": "https://example.com/offers/diwali-sale.jpg",
    "msg": "Our Diwali sale starts tomorrow."
  }'

受信者の解釈方法#

Wbiztoolはphoneをカンマで分割し、各項目の前後のスペースを取り除いたうえで、それぞれの項目の種類を判定します。

  • 数字のみ(先頭の+や先頭のゼロは問題ありません):電話番号として扱われます。番号がすでにcountry_codeで始まっていない限り国コードが付加され、その結果の番号は6〜15桁である必要があります。
  • それ以外:WhatsAppのグループ名として扱われ、グループに送信と同じ方法で検索されます。
  • 名前が数字のみのグループ(例:2024)は電話番号として扱われ、カンマを含むグループ名はこのエンドポイントからは送信できません。これらにはグループに送信を使用してください。

そのほかの注意点:

  • 国コードを付加した結果、短すぎる・長すぎる番号は通知なくスキップされます。レスポンスには表示されず、msg_idも発行されません。
  • 重複は削除されません。2回指定された番号には2件のメッセージが送信されます。
  • ローカル番号がたまたまcountry_codeと同じ数字で始まっている場合(例:country_code91で番号が9123456780)、国コードは付加されません。そのような番号は国コードを含めた形(919123456780)で送信してください。
  • 画像とファイルのURLはAPIの呼び出し時には確認されません。各メッセージの送信時にダウンロードされるため、リンク切れの場合はリクエストではなく、後でメッセージが失敗します。メッセージ送信と同じ送信時のルールが適用されます。16 MBを超える画像と64 MBを超える動画は失敗し、WAVとOGGの音声はサポートされず、対応する拡張子のないファイル(msg_type 2)には.pdfが付加されます。画像とファイルの送信をご覧ください。

クレジット#

メッセージを作成する前に、バッチ全体が残りクレジットと照合されます。phone内の空でない項目はすべて、後でスキップされる項目も含めてカウントされます。件数が残りクレジットを上回る場合、メッセージは1件も作成されず、次のレスポンスが返ります。

{
  "message": "Not enough credits: 120 messages requested, 85 credits remaining",
  "status": 0
}

キューに登録済みで未送信のメッセージも、残りクレジットから差し引かれます。大きなリストは小さなリクエストに分割するか、プランのクレジットを追加してください。大規模なキャンペーンの場合は、キャンペーンページからスプレッドシートをアップロードしてください。

レスポンス#

リクエストが成功すると、HTTP 200が返ります。

{
  "msg_ids": [9817263, 9817264, 9817265],
  "messages": [
    { "msg_id": 9817263, "contact": "919876543210", "is_group": false },
    { "msg_id": 9817264, "contact": "919812345670", "is_group": false },
    { "msg_id": 9817265, "contact": "Sales Team Mumbai", "is_group": true }
  ],
  "message": "Successfully created 3 messages",
  "status": 1
}
フィールド説明
statusinteger少なくとも1件のメッセージがキューに登録された場合は1、それ以外は0
messagestring成功時はSuccessfully created N messages、それ以外はエラー内容。
msg_idsarray of integersキューに登録されたメッセージのID(phoneの順)。成功時のみ含まれます。
messagesarrayキューに登録されたメッセージごとに1つのオブジェクト。成功時のみ含まれます。
messages[].msg_idintegerメッセージのID。
messages[].contactstring国コードが適用された電話番号、またはグループ名。
messages[].is_groupboolean項目がグループ名として扱われた場合はtrue

messagesと送信したリストを照合してスキップされた番号を見つけ、電話番号として指定したすべての項目でis_groupfalseになっていることを確認してください。

エラー#

ほとんどのエラーはHTTP 200で返り、status0になります。必ずボディのstatusを確認してください。HTTP 400403のエラーを除き、レスポンス(成功時を含む)はContent-Type: text/htmlのJSONとして送信されるため、自動のJSON判定(ノーコードツールなど)に頼らず、ボディをご自身で解析してください。

{ "message": "Invalid whatsapp client", "status": 0 }
メッセージ対処方法
Auth Errorclient_idapi_keyの両方を送信してください。
Invalid Client Idclient_idを数値で送信してください。HTTP 403で返ります。
Auth Error: invalid api keyキーが存在し、削除されておらず、このclient_idに属していることを確認してください。HTTP 400で返ります。
Msg cant be nullテキストメッセージ(msg_type 0)にはmsgが必要です。
Image Url Can't be nullmsg_type 1の場合はimg_urlを送信してください。
File Url Can't be nullmsg_type 2の場合はfile_urlを送信してください。
Not enough credits: … messages requested, … credits remaining受信者を減らすか、クレジットを追加してください。クレジットを参照してください。
Invalid whatsapp clientそのwhatsapp_client IDはあなたのワークスペースにありません。
No valid contacts foundphoneのすべての項目が空か、スキップされました。国コードを含めて6〜15桁の番号になっているか確認してください。
Demo Account can not access apis通常のアカウントを使用してください。
Invalid JSON format: …JSONボディが無効か、client_idなしでフォームフィールドを送信しています。

ヒント#

  • phoneは文字列で送信する:リストをカンマで連結してください。JSON配列を送ると{}が返ります。
  • 当面はPythonクライアントのsend_bulk_messagesを使わない:リストをphonesとして送信しますが、このエンドポイントはそれを無視します。上の例のようにエンドポイントを直接呼び出してください。
  • 各メッセージを追跡するmessagesのすべてのmsg_idを保存するか、webhookを指定して各メッセージの送信・失敗の通知を受け取ってください。
  • 番号を接続したままにする:すべてのメッセージはあなたのWhatsApp番号から送信されるため、バッチ全体の送信が終わるまでWhatsApp設定で接続を維持する必要があります。
  • 受信者ごとに異なるテキスト:このエンドポイントは全員に同じmsgを送信します。メッセージを個別にパーソナライズするには、受信者ごとにメッセージ送信を呼び出してください。