Pular para o conteúdo
Wbiztool

API de mensagens

API de envio para vários números

Envie a mesma mensagem de WhatsApp para vários números de telefone e grupos em uma única requisição. Use-a para pequenos disparos, como newsletters, ofertas e comunicados.

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

Corpo: JSON ou campos de formulário

O Wbiztool cria uma mensagem por destinatário e retorna um msg_id para cada uma, para que você possa verificar o status de cada mensagem individualmente.

Exemplo rápido#

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!"
  }'

Substitua 12345, YOUR_API_KEY e 678 pelos seus próprios valores. Veja em Autenticação onde encontrá-los.

Parâmetros da requisição#

Autenticação

client_idintegerobrigatório

Seu ID do Cliente da API, em Configurações → Chaves API.

api_keystringobrigatório

Sua chave de API, na mesma página.

whatsapp_clientintegerobrigatório

ID do número de WhatsApp a partir do qual enviar, nas configurações do WhatsApp. Ao contrário de Enviar mensagem, este endpoint nunca escolhe um número por você.

Destinatários e mensagem

phonestringobrigatório

Números de telefone e nomes de grupos em uma única string separada por vírgulas, por exemplo 9876543210,9812345670,Sales Team Mumbai. Não envie um array JSON. Veja Como os destinatários são lidos.

country_codestringopcional

Código de discagem do país sem +, por exemplo 91. Ele é adicionado antes de cada número de telefone, a menos que o número já comece com ele. Em JSON, envie-o como string ("91"), não como número. Se você enviar um número, todos os números de telefone da lista são tratados como nomes de grupo (is_group: true), e essas mensagens falham.

msg_typeintegeropcional

0 texto (padrão), 1 imagem, 2 arquivo ou documento.

msgstringObrigatório quando msg_type é 0

Texto da mensagem. Para imagens e arquivos, é a legenda e pode ficar vazio. A formatação do WhatsApp funciona: *bold*, _italic_, ~strikethrough~. message é aceito como alias.

Imagens e arquivos

img_urlstringObrigatório quando msg_type é 1

URL pública http ou https da imagem.

file_urlstringObrigatório quando msg_type é 2

URL pública http ou https a partir da qual o arquivo pode ser baixado diretamente.

file_namestringopcional

Nome do arquivo que os destinatários veem, como price-list.pdf. Ele é enviado em letras minúsculas, caracteres como & : ? * $ ; são substituídos por _, e ele é cortado em 150 caracteres. Se você não enviar, o nome vem da URL.

Opções de entrega

webhookstringopcional

URL que recebe um POST para cada mensagem quando ela é enviada ou falha. O payload é o mesmo de Enviar mensagem.

Imagem a partir de uma URLcURL
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."
  }'

Como os destinatários são lidos#

O Wbiztool divide phone nas vírgulas, remove os espaços ao redor de cada item e então decide o que cada item é:

  • Somente dígitos (um + inicial ou zeros à esquerda são aceitos): tratado como número de telefone. country_code é adicionado, a menos que o número já comece com ele, e então o número precisa ter de 6 a 15 dígitos.
  • Qualquer outra coisa: tratado como nome de grupo de WhatsApp, encontrado da mesma forma que em Enviar para um grupo.
  • Um grupo cujo nome tenha apenas dígitos (por exemplo 2024) é tratado como número de telefone, e nomes de grupo que contêm vírgulas não podem ser usados neste endpoint. Para esses casos, use Enviar para um grupo.

Outros pontos importantes:

  • Números curtos ou longos demais depois de adicionar o código do país são ignorados sem aviso. Eles não aparecem na resposta e não recebem um msg_id.
  • Duplicados não são removidos. Um número listado duas vezes recebe duas mensagens.
  • Se um número local começar com os mesmos dígitos de country_code (por exemplo 9123456780 com country_code 91), o código não é adicionado. Envie esses números já com o código do país incluído (919123456780).
  • As URLs de imagens e arquivos não são verificadas quando você chama a API. Elas são baixadas no envio de cada mensagem, então um link quebrado faz as mensagens falharem depois, e não a requisição. Valem as mesmas regras de envio de Enviar mensagem: imagens acima de 16 MB e vídeos acima de 64 MB falham, áudio WAV e OGG não é suportado, e arquivos (msg_type 2) sem uma extensão aceita recebem .pdf no final. Veja Enviar imagens e arquivos.

Créditos#

O lote inteiro é comparado com seus créditos restantes antes de qualquer mensagem ser criada. Todo item não vazio em phone conta, inclusive os que forem ignorados depois. Se a contagem for maior que seus créditos restantes, nenhuma mensagem é criada e você recebe:

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

Mensagens na fila que ainda não foram enviadas também contam contra seus créditos restantes. Divida listas grandes em requisições menores ou recarregue seu plano. Para campanhas grandes, envie uma planilha pela página Campanhas.

Resposta#

Uma requisição bem-sucedida retorna 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
}
CampoTipoDescrição
statusinteger1 se pelo menos uma mensagem entrou na fila, 0 caso contrário.
messagestringSuccessfully created N messages em caso de sucesso; caso contrário, o erro.
msg_idsarray de inteirosIDs das mensagens na fila, na ordem de phone. Presente apenas em caso de sucesso.
messagesarrayUm objeto por mensagem na fila. Presente apenas em caso de sucesso.
messages[].msg_idintegerID da mensagem.
messages[].contactstringO número de telefone com o código do país aplicado, ou o nome do grupo.
messages[].is_groupbooleantrue se o item foi tratado como nome de grupo.

Compare messages com a lista que você enviou para encontrar números ignorados, e confira se is_group é false em todos os itens que você queria enviar como número de telefone.

Erros#

A maioria dos erros retorna HTTP 200 com status igual a 0, então sempre verifique status no corpo. Com exceção dos erros HTTP 400 e 403, as respostas (inclusive as de sucesso) são JSON enviado com Content-Type: text/html, então interprete o corpo você mesmo em vez de depender da detecção automática de JSON (por exemplo, em ferramentas no-code):

{ "message": "Invalid whatsapp client", "status": 0 }
MensagemComo corrigir
Auth ErrorEnvie client_id e api_key.
Invalid Client IdEnvie client_id como número. Retornado com HTTP 403.
Auth Error: invalid api keyVerifique se a chave existe, não foi excluída e pertence a este client_id. Retornado com HTTP 400.
Msg cant be nullMensagens de texto (msg_type 0) precisam de msg.
Image Url Can't be nullPara msg_type 1, envie img_url.
File Url Can't be nullPara msg_type 2, envie file_url.
Not enough credits: … messages requested, … credits remainingEnvie menos destinatários ou adicione créditos. Veja Créditos.
Invalid whatsapp clientEsse ID de whatsapp_client não está no seu espaço de trabalho.
No valid contacts foundTodos os itens em phone estavam vazios ou foram ignorados. Verifique se os números têm de 6 a 15 dígitos com o código do país.
Demo Account can not access apisUse uma conta normal.
Invalid JSON format: …O corpo JSON não é válido, ou você enviou campos de formulário sem client_id.

Dicas#

  • Envie phone como string: junte sua lista com vírgulas. Um array JSON retorna {}.
  • Não use o send_bulk_messages do cliente Python por enquanto: ele envia a lista como phones, que este endpoint ignora. Chame o endpoint diretamente, como nos exemplos acima.
  • Acompanhe cada mensagem: guarde cada msg_id de messages, ou informe um webhook para ser notificado quando cada uma for enviada ou falhar.
  • Mantenha seu número conectado: todas as mensagens são enviadas do seu número de WhatsApp, então ele precisa continuar conectado nas configurações do WhatsApp até que o lote inteiro tenha sido enviado.
  • Texto diferente para cada pessoa: este endpoint envia o mesmo msg para todos. Chame Enviar mensagem uma vez por destinatário para personalizar cada mensagem.