Отправка сообщений WhatsApp на Python
Отправляйте тексты, изображения и файлы WhatsApp из скрипта на Python с вашего собственного номера, привязанного к WbizTool как WhatsApp Web. Используйте официальный пакет wbiztool-client или обычный вызов requests к тому же эндпоинту.
Бесплатный пробный период: 50 сообщений за любые 30 дней, без карты.
Как это работает
Получите API-ключ и привяжите номер
Зарегистрируйтесь, затем привяжите номер WhatsApp на странице «Номера WhatsApp» по QR-коду или коду привязки, как WhatsApp Web. В разделе «Настройки → API-ключи» создайте ключ и скопируйте свой Client ID (где их найти, показано в руководстве по API-ключам ниже). ID на карточке номера (например, ID 678) – это ваш
whatsapp_client.Установите клиент или используйте requests
Выполните
pip install wbiztool-client, чтобы установить официальный клиент. Если не хотите добавлять пакет, библиотека requests работает так же хорошо – в примерах ниже показаны оба варианта.Отправьте сообщение
Отправьте POST с учётными данными, номером телефона и текстом на
https://wbiztool.com/api/v1/send_msg/. Ответ с"status": 1иmsg_idозначает, что сообщение поставлено в очередь на вашем номере.Проверьте, что оно ушло
Передайте URL в
webhook, чтобы узнать, когда сообщение отправлено или не отправлено, или запросите эндпоинт статуса сообщения сmsg_id.
Примеры кода: Python
pip install wbiztool-clientfrom 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)import requests
response = requests.post(
"https://wbiztool.com/api/v1/send_msg/",
json={
"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.",
},
timeout=60,
)
result = response.json() # read the body even when the HTTP code is 400
if result.get("status") == 1:
print("Queued with msg_id", result["msg_id"])
else:
print("Failed:", result.get("message")){"status": 1, "message": "Created", "msg_id": 9817263}import requests
with open("invoice-4821.pdf", "rb") as f:
response = requests.post(
"https://wbiztool.com/api/v1/send_msg/",
data={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 2,
"country_code": "91",
"phone": "9876543210",
"msg": "Your invoice for order #4821 is attached.",
"file_name": "invoice-4821.pdf",
},
files={"file": f},
timeout=120,
)
print(response.json())import requests
msg_id = 9817263
response = requests.post(
f"https://wbiztool.com/api/v1/message/status/{msg_id}/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
},
timeout=60,
)
result = response.json() # read the body even when the HTTP code is 400
if result.get("message") == "Unknown message id":
print("No message with this ID in your workspace")
elif "status_text" not in result:
print("Request failed:", result.get("message", "no message in response"))
elif result["status"] == 1:
print("Sent")
elif result["status"] == 2:
print("Failed:", result["error"])
else:
print("Status:", result["status_text"])from datetime import datetime, timedelta
from zoneinfo import ZoneInfo
import requests
send_at = datetime.now(ZoneInfo("Asia/Kolkata")) + timedelta(hours=2)
response = requests.post(
"https://wbiztool.com/api/v1/schedule_msg/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 0,
"country_code": "91",
"phone": "9876543210",
"msg": "Hi Aman, a reminder that your appointment starts in 30 minutes.",
"date": send_at.strftime("%d/%m/%Y"),
"time": send_at.strftime("%H:%M"),
"timezone": "Asia/Kolkata",
},
timeout=60,
)
result = response.json() # schedule errors come back with HTTP 200 and "status": 0
if result.get("status") == 1:
print("Scheduled with msg_id", result["msg_id"])
else:
print("Failed:", result.get("message", "no message in response"))from flask import Flask, request
app = Flask(__name__)
@app.post("/wbiztool-webhook")
def wbiztool_webhook():
# WbizTool posts form fields, not JSON.
msg_id = request.form["msg_id"]
status = request.form["status"] # SENT, FAILED, CANCELLED or EXPIRED
print(msg_id, status)
return "", 200Что можно делать
Тексты, изображения и файлы
Укажите
msg_type0 для текста, 1 для изображения или 2 для файла. Передайте публичныйimg_urlилиfile_urlлибо загрузите сам файл черезfiles=в requests.Личные сообщения из ваших данных
Собирайте
msgиз своих записей – имя, номер заказа, срок оплаты. Работает форматирование WhatsApp, например *жирный* и _курсив_, до 3 000 символов.Статус через вебхук или по запросу
Вебхук получает POST с
msg_idиSENT,FAILED,CANCELLEDилиEXPIRED. Или вызовите эндпоинт статуса сообщения: неудачное сообщение возвращается с ошибкой, напримерPhone number invalid.Планирование на потом
Отправьте POST на
/api/v1/schedule_msg/сdate(дд/мм/гггг),time(ЧЧ:ММ) иtimezone, напримерAsia/Kolkata.strftime("%d/%m/%Y")иstrftime("%H:%M")соберут их за вас.Отбрасывайте опоздавшие сообщения
expire_after_secondsпомечает сообщение как истёкшее, если оно не ушло вовремя, – это подходит для срочных сообщений, например о времени доставки.Повторяющиеся напоминания
API напоминаний повторяет сообщение по расписанию cron, например 1-го числа каждого месяца в 10:00. Напоминаниям нужен платный тариф.
Полезно знать
"status": 1означает, что сообщение в очереди, а не доставлено. «Отправлено» – конечное успешное состояние; API не сообщает, доставлено ли сообщение и прочитано ли оно.- Ошибки отправки сообщения приходят с HTTP 400 (429 при дневном лимите); ошибки планирования обычно приходят с HTTP 200 и
"status": 0, поэтому читайтеresponse.json()и проверяйтеstatus, а не код HTTP. Официальный клиент выбрасываетrequests.HTTPError: причину можно прочитать черезe.response.json()["message"]. - Официальный клиент пока поддерживает не все эндпоинты правильно: его
schedule_messageиcheck_credentials()не работают с текущим API. Вызывайте/api/v1/schedule_msg/через requests, как показано выше, и/api/v1/me/так же. - Храните API-ключ на сервере, например в переменной окружения. Любой, у кого он есть, может отправлять с ваших номеров, поэтому никогда не размещайте его в JavaScript в браузере, в мобильном приложении или в публикуемом коде.
- В пробном периоде – 50 сообщений за любые 30 дней и 1 номер, без карты. На платных тарифах – от $25 в месяц в США (ваша цена – на странице «Цены») – сообщения безлимитные в рамках честного использования: до 1 000 в день с одного номера.
- Сообщения уходят с вашего собственного номера WhatsApp, поэтому действуют правила самого WhatsApp: пишите тем, кто ждёт ваших сообщений.
Вопросы и ответы
- Есть ли официальная библиотека Python для API WbizTool?
- Да:
wbiztool-clientна PyPI (pip install wbiztool-client). Используйте егоsend_messageиget_message_status. Для планирования и проверки учётных данных вызывайте эндпоинты через requests. - Как отправить PDF или изображение из Python?
- Используйте
msg_type1 сimg_urlдля изображения илиmsg_type2 сfile_urlдля файла. Чтобы отправить файл с диска, передайте его как multipart form data в полеfileи укажитеfile_nameс расширением, напримерinvoice-4821.pdf. - Как узнать, что сообщение отправлено?
- Ответ с
"status": 1иmsg_idозначает, что оно в очереди. Передайте URL вwebhook, чтобы получить POST сSENT,FAILED,CANCELLEDилиEXPIRED, или вызовите эндпоинт статуса сообщения сmsg_id. «Отправлено» – конечное состояние: API не сообщает о доставке или прочтении. - В каком формате указывать номер телефона?
- Передайте номер с кодом страны (79161234567) или без него (9161234567) вместе с
country_code(7). Пробелы, +, дефисы и скобки удаляются автоматически, поэтому +7 (916) 123-45-67 тоже подойдёт. - Нужны ли WhatsApp Business API или одобрение Meta?
- Нет. WbizTool отправляет с вашего собственного номера WhatsApp или WhatsApp Business, привязанного как WhatsApp Web. Одобрение Meta не нужно, и согласовывать шаблоны сообщений тоже не надо.
- Есть ли плата за каждое сообщение?
- Нет. Пробный период включает 50 сообщений за любые 30 дней. На платных тарифах сообщения безлимитные в рамках честного использования, до 1 000 в день с одного номера: Lite – $25, Standard – $59 и Advanced – $149 в месяц в США; на странице «Цены» показана цена для вашей страны.
Читайте руководства
- API отправки сообщения
- API статуса сообщения
- API планирования сообщения
- API проверки учётных данных
- API-ключи и Client ID
- Подключение номера WhatsApp
Смотрите также
- Node.jsОтправляйте сообщения WhatsApp из Node.js с официальным клиентом или встроенным fetch.
- cURLОтправляйте, планируйте и отслеживайте сообщения WhatsApp одной командой cURL.
- API напоминанийСоздавайте, просматривайте и отменяйте повторяющиеся напоминания WhatsApp по расписанию cron.
- Уведомления о заказахПодтверждения заказов, уведомления об отправке и оповещения о новых заказах для Shopify, WooCommerce и не только.
Отправьте своё первое автоматическое сообщение в WhatsApp уже сегодня
Создайте аккаунт, отсканируйте QR-код и отправьте сообщение менее чем за пять минут.
Начать бесплатноПлатные тарифы – от $25 в месяц в США. Цены
