コンテンツへスキップ
Wbiztool

メッセージングAPI

メッセージ送信API

接続済みのWhatsApp番号から、1つの電話番号にWhatsAppのテキスト、画像、ドキュメントを送信します。注文確認、支払いリマインダー、アラート、サポートの返信などに利用できます。

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

リクエストボディ: JSON、フォームフィールド、またはファイルをアップロードする場合はmultipart/form-data

メッセージはキューに登録され、すぐにあなたのWhatsApp番号から送信されます。レスポンスにはmsg_idが含まれ、これを使ってステータスを確認できます。

クイック例#

curl -X POST https://wbiztool.com/api/v1/send_msg/ \
  -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",
    "msg": "Hi Aman, your order #4821 has shipped and will arrive on Thursday."
  }'

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

リクエストパラメータ#

認証

client_idinteger必須

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

api_keystring必須

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

whatsapp_clientinteger番号が複数ある場合は必須

送信に使うWhatsApp番号のIDです。WhatsApp設定で確認できます。省略した場合、ワークスペースに接続済みの番号がちょうど1つであれば、その番号が使われます。

受信者とメッセージ

phonestring必須

受信者のWhatsApp番号で、数字のみです。スペース、+-.、括弧は自動的に削除されます。番号は国コード付き919876543210)で送信するか、国コードなし9876543210)でcountry_codeと一緒に送信してください。フォームフィールドでは、先頭の市外局番の009876543210)を含めないでください。country_codeが付加される前に削除されないため、メッセージが誤った番号に届きます。JSONリクエストでは自動的に削除されます。

country_codestring任意

+を除いた国番号です。例:インドは91、米国は1。番号がすでにこの国番号で始まっていない限り、phoneの先頭に付加されます。例外として、91の場合、10桁の番号には常に国番号が付加されます。その他の国番号では、同じ数字で始まる国内番号には付加されないため、国番号を含めた番号で送信してください。

msg_typeinteger任意

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

msgstringmsg_typeが0の場合は必須

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

画像とファイル

img_urlstringmsg_typeが1でファイルをアップロードしない場合は必須

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

file_urlstringmsg_typeが2でファイルをアップロードしない場合は必須

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

filefile任意

URLを指定する代わりに、画像やファイルをアップロードします。リクエストをmultipart/form-dataとして送信し、フィールド名はfileにしてください。

file_namestring任意

受信者に表示されるファイル名です(例:invoice-4821.pdf)。拡張子によってファイルの送信方法が決まるため、必ず拡張子を含めてください。小文字で送信され、& : ? * $ ;などの文字は_に置き換えられ、150文字に切り詰められます。省略した場合は、URLまたはアップロードされたファイルから名前が取得されます。

配信オプション

expire_after_secondsinteger任意

この秒数以内に送信されなかった場合、メッセージを期限切れ(ステータス4)にします。例:1時間なら3600。配達予定時刻など、時間に左右されるメッセージに便利です。この処理は期限から少なくとも30秒後にバックグラウンドジョブで行われるため、1分未満の期限には頼らないでください。

webhookstring任意

メッセージが送信されたとき、または失敗したときにPOSTを受け取るURLです。Webhookを参照してください。

画像とファイルの送信#

img_urlfile_urlのダウンロード制限:

  • URLは公開されている必要があります。インターネットからアクセスできるhttpまたはhttpsのURLを指定してください。リダイレクトは最大5回までたどられ、各リダイレクト先も公開アドレスである必要があります。
  • リンク先のファイルは最大100 MBです。サーバーは45秒以内に応答を開始し、それ以上停止しないようにする必要があります。
  • ファイルはAPIを呼び出した時点で取得されるため、リンク切れの場合はその場でInvalid file urlとして失敗します。

対応している拡張子:.pdf.xlsx.xls.txt.docx.png.jpg.jpeg.webp.mp3.mpga.m4a.mp4.webm

以下のチェックはAPIの呼び出し時ではなくメッセージの送信時に行われるため、失敗はメッセージのステータスWebhookにのみ表示されます。

問題メッセージのステータスのerror
16 MBを超える画像(msg_type 1)File exceeds WhatsApp size limit (16MB max)
64 MBを超える動画(.mp4.webm)、または空のファイルFile exceeds WhatsApp size limit (…)
.oggファイル、または画像(msg_type 1)として送信した.wavファイルFile type not supported

WAVとOGGの音声はサポートされていません。ファイル(msg_type 2)として送信した.wavファイルは拒否されませんが、recording.wav.pdfとして届きます。音声は事前に.mp3または.m4aに変換してください。

URLから画像を送信
curl -X POST https://wbiztool.com/api/v1/send_msg/ \
  -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",
    "img_url": "https://example.com/offers/diwali-sale.jpg",
    "msg": "Our Diwali sale starts today 🎉"
  }'
ファイルをアップロード
curl -X POST https://wbiztool.com/api/v1/send_msg/ \
  -F client_id=12345 \
  -F api_key=YOUR_API_KEY \
  -F whatsapp_client=678 \
  -F msg_type=2 \
  -F country_code=91 \
  -F phone=9876543210 \
  -F "msg=Your invoice for order #4821 is attached." \
  -F file_name=invoice-4821.pdf \
  -F file=@./invoice-4821.pdf

公式クライアントを使う#

PythonNode.jsのクライアントは、このエンドポイントを代わりに呼び出します。

from wbiztool_client import WbizToolClient

client = WbizToolClient(api_key="YOUR_API_KEY", client_id="12345")

result = client.send_message(
    phone="9876543210",
    country_code="91",
    msg="Hi Aman, your order #4821 has shipped.",
    whatsapp_client=678,
)
print(result)

エラーではrequests.HTTPErrorが発生します。理由はe.response.json()["message"]で確認してください。

レスポンス#

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

{
  "status": 1,
  "message": "Created",
  "msg_id": 9817263
}
フィールド説明
statusintegerメッセージがキューに登録された場合は1、リクエストが失敗した場合は0
messagestring成功時はCreated、それ以外はエラー内容。
msg_idintegerキューに登録されたメッセージのID。後でステータスを確認するために保存してください。成功時のみ含まれます。

"status": 1はメッセージがキューに登録されたことを意味し、受信者に届いたことを意味するわけではありません。送信されたことを確認するには、Webhookまたはメッセージのステータスを使用してください。

エラー#

エラーはHTTP 400で返り、status0になります(Account Disabledにはstatusフィールドがありません)。

{ "status": 0, "message": "Msg cant be null" }
メッセージ対処方法
Auth Error - Please send correct API key and Client id空でないapi_keyを送信してください。
Invalid client id.client_idを数値で送信してください。
Auth Error: invalid api keyキーが存在し、削除されておらず、このclient_idに属していることを確認してください。
Either phone or group_name parameter is requiredphoneを追加してください。
Please provide either phone OR group_name, not bothどちらか一方を削除してください。
Invalid phone numberphoneは数字のみ(6〜17桁)で、先頭に+を付けることもできます。
Invalid Contact Number "…"国コードを付加した番号が6〜15桁である必要があります。
Msg cant be nullテキストメッセージ(msg_type 0)にはmsgが必要です。
Message length is too longmsgは3,000文字以内にしてください。
Image Url Can't be nullmsg_type 1の場合は、img_urlを送信するかfileをアップロードしてください。
File Url Can't be nullmsg_type 2の場合は、file_urlを送信するかfileをアップロードしてください。
Invalid file url, Can't download / Invalid file urlURLが公開されていない、タイムアウトした、またはファイルが100 MBを超えています。
Invalid whatsapp clientそのwhatsapp_client IDはあなたのワークスペースにありません。
Invalid whatsapp client id.whatsapp_clientを送信してください。ワークスペースに接続済みの番号が複数ある場合は必須です。
Not enough creditsプランの残りメッセージ数がありません。
Demo Account can not access apis通常のアカウントを使用してください。
Account Disabledアカウントが無効化されています。サポートにお問い合わせください。
Invalid JSON format: …JSONボディが無効です。末尾のカンマや、msg内のエスケープされていない改行が原因であることがよくあります。改行には\nを使用してください。

キューに追加されたメッセージも、送信時にFile exceeds WhatsApp size limit (…)などで失敗することがあります。これらのエラーはこのレスポンスには表示されません。画像とファイルの送信を参照し、メッセージのステータスを確認してください。

Webhook#

webhookを指定すると、メッセージが送信されたとき、または失敗したときに、WbiztoolがそのURLにPOSTを送信します。ボディはJSONではなく、フォームエンコード(application/x-www-form-urlencoded)です。

msg_id=9817263&status=SENT
フィールド
msg_idメッセージ送信時に返されたmsg_id
statusSENTまたはFAILED

任意の2xxコードで応答してください。エンドポイントがタイムアウトした場合(3秒後)や5xxを返した場合は、合計で最大3回まで再試行されます。4xxレスポンスは再試行されません。メッセージがキャンセルされた場合や期限切れになった場合はWebhookは送信されないため、それらはメッセージのステータスで確認してください。

ヒント#

  • 電話番号:番号は国際形式で保存し、あいまいさを避けるためにcountry_codeと一緒に送信してください。
  • JSONでの改行msg内では\nと記述してください。そのまま改行を入れるとJSONが無効になります。
  • 番号を接続したままにする:メッセージはあなたのWhatsApp番号から送信されるため、WhatsApp設定で接続を維持する必要があります。
  • 多数の受信者:同じメッセージを1回のリクエストで複数の番号に送るには、複数の番号に送信を使用してください。大規模なキャンペーンの場合は、キャンペーンページからスプレッドシートをアップロードしてください。