Envie mensagens de WhatsApp com Python
Envie textos, imagens e arquivos de WhatsApp a partir de um script Python, do seu próprio número conectado ao WbizTool como no WhatsApp Web. Use o pacote oficial wbiztool-client ou uma chamada simples com requests para o mesmo endpoint.
Teste grátis: 50 mensagens em quaisquer 30 dias, sem cartão.
Como funciona
Pegue sua chave de API e conecte seu número
Cadastre-se e conecte seu número de WhatsApp na página Números do WhatsApp com um código QR ou um código de login, como no WhatsApp Web. Em Configurações → Chaves de API, crie uma chave e copie seu Client ID (o guia de chaves de API abaixo mostra onde). O ID no cartão do número (como ID 678) é o seu
whatsapp_client.Instale o cliente, ou use requests
Rode
pip install wbiztool-clientpara o cliente oficial. Se preferir não adicionar um pacote, a biblioteca requests funciona igual – os exemplos abaixo mostram os dois.Envie a mensagem
Faça um POST com suas credenciais, o número de telefone e o texto para
https://wbiztool.com/api/v1/send_msg/. Uma resposta com"status": 1e ummsg_idsignifica que a mensagem está na fila do seu número.Confira se ela saiu
Passe uma URL em
webhookpara ser avisado quando a mensagem for enviada ou falhar, ou consulte o endpoint de status da mensagem com omsg_id.
Exemplos de código: 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 "", 200O que você pode fazer
Textos, imagens e arquivos
Defina
msg_typecomo 0 para texto, 1 para imagem ou 2 para arquivo. Informe umaimg_urloufile_urlpública, ou envie o próprio arquivo comfiles=no requests.Mensagens pessoais com os seus dados
Monte
msgcom os seus próprios registros – um nome, um número de pedido, uma data de vencimento. A formatação do WhatsApp, como *negrito* e _itálico_, funciona, com até 3.000 caracteres.Status por webhook ou por consulta
Um webhook recebe um POST com o
msg_ideSENT,FAILED,CANCELLEDouEXPIRED. Ou chame o status da mensagem: uma mensagem com falha vem com o erro, comoPhone number invalid.Agende para depois
Faça um POST para
/api/v1/schedule_msg/comdate(dd/mm/aaaa),time(HH:MM) e umtimezonecomoAsia/Kolkata.strftime("%d/%m/%Y")estrftime("%H:%M")montam esses valores para você.Descarte mensagens que chegariam tarde demais
expire_after_secondsmarca uma mensagem como expirada se ela não sair a tempo, o que serve para mensagens urgentes, como previsões de entrega.Lembretes recorrentes
A API de lembretes repete uma mensagem seguindo uma agenda cron, como às 10:00 do dia 1º de cada mês. Os lembretes precisam de um plano pago.
Bom saber
"status": 1significa que a mensagem está na fila, não que foi entregue. Enviada é o estado final de sucesso; a API não informa se a mensagem foi entregue ou lida.- Os erros de envio de mensagem voltam com HTTP 400 (429 no limite diário); os erros de agendamento costumam voltar com HTTP 200 e
"status": 0, então leiaresponse.json()e confirastatusem vez do código HTTP. O cliente oficial lançarequests.HTTPError: leia o motivo come.response.json()["message"]. - O cliente oficial ainda não cobre todos os endpoints corretamente: o
schedule_messagee ocheck_credentials()dele não funcionam com a API atual. Chame/api/v1/schedule_msg/com requests como mostrado acima, e/api/v1/me/do mesmo jeito. - Guarde a chave de API no seu servidor, por exemplo em uma variável de ambiente. Quem tiver a chave pode enviar dos seus números, então nunca a coloque em JavaScript do navegador, em um app de celular ou em código que você publica.
- O teste grátis tem 50 mensagens em quaisquer 30 dias e 1 número, sem cartão. Os planos pagos começam em US$ 25 por mês nos EUA (o seu preço aparece em Preços) e enviam mensagens ilimitadas dentro do uso justo: até 1.000 por dia por número.
- As mensagens saem do seu próprio número de WhatsApp, então as regras do próprio WhatsApp valem: mande mensagens para quem espera ter notícias suas.
Perguntas frequentes
- Existe uma biblioteca Python oficial para a API do WbizTool?
- Sim:
wbiztool-clientno PyPI (pip install wbiztool-client). Use osend_messagee oget_message_statusdela. Para agendar e verificar credenciais, chame os endpoints com requests. - Como envio um PDF ou uma imagem pelo Python?
- Use
msg_type1 comimg_urlpara uma imagem, oumsg_type2 comfile_urlpara um arquivo. Para enviar um arquivo do disco, poste-o como multipart form data em um campo chamadofilee definafile_namecom a extensão, comoinvoice-4821.pdf. - Como sei que a mensagem foi enviada?
- Uma resposta com
"status": 1e ummsg_idsignifica que ela está na fila. Passe uma URL emwebhookpara receber um POST comSENT,FAILED,CANCELLEDouEXPIRED, ou chame o endpoint de status da mensagem com omsg_id. Enviada é o estado final: a API não informa se a mensagem foi entregue ou lida. - Em que formato envio o número de telefone?
- Envie o número com o código do país (919876543210), ou sem ele (9876543210) junto com
country_code(91). Espaços, +, hífens e parênteses são removidos para você, então +91 98765-43210 também funciona. - Preciso da API oficial do WhatsApp Business ou de aprovação da Meta?
- Não. O WbizTool envia do seu próprio número de WhatsApp ou WhatsApp Business, conectado como no WhatsApp Web. Não há aprovação da Meta nem modelos de mensagem para aprovar.
- A cobrança é por mensagem?
- Não. O teste grátis inclui 50 mensagens em quaisquer 30 dias. Os planos pagos enviam mensagens ilimitadas dentro do uso justo, até 1.000 por dia por número: Lite US$ 25, Standard US$ 59 e Advanced US$ 149 por mês nos EUA; Preços mostra o preço do seu país.
Leia os guias
- API de envio de mensagens
- API de status da mensagem
- API de agendamento de mensagens
- API para verificar credenciais
- Chaves de API e Client ID
- Conecte seu número de WhatsApp
Veja também
- Node.jsEnvie mensagens de WhatsApp pelo Node.js com o cliente oficial ou com o fetch nativo.
- cURLEnvie, agende e acompanhe mensagens de WhatsApp com um único comando cURL.
- API de lembretesCrie, liste e cancele lembretes recorrentes de WhatsApp com uma agenda cron.
- Atualizações de pedidosConfirmações de pedido, atualizações de envio e alertas de novos pedidos para Shopify, WooCommerce e mais.
Envie hoje sua primeira mensagem automática de WhatsApp
Crie uma conta, escaneie o QR code e envie uma mensagem em menos de cinco minutos.
Comece grátisPlanos pagos a partir de US$ 25 por mês nos EUA. Preços
