Responder ao cliente
Envia texto, mídia ou um template aprovado pela Meta em uma conversa e lista os templates disponíveis.
O WhatsApp só permite texto livre dentro da janela de atendimento de 24 horas, que abre a cada mensagem do cliente (csw_expires_at na conversa). Fora dela, só é possível enviar um template: uma mensagem pré-aprovada pela Meta. Estas rotas cobrem os três jeitos de responder. Enviar uma mensagem como atendente também passa a conversa para o atendimento humano (o assistente para de responder), a menos que a loja tenha desligado service_auto_pause_bot.
Enviar texto
/api/v1/vendor/whatsapp-confluence/threads/{id}/replySellerEnvia uma mensagem de texto
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (lojista). Veja Tokens.Content-Typestringobrigatórioapplication/json.Parâmetros de caminho
iduuidobrigatórioid de Listar conversas).Corpo da requisição
bodystringobrigatóriotext).textstringbody, usado quando body vem vazio.Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/vendor/whatsapp-confluence/threads/7f0c2b1e-5a43-4d8e-9a67-3c1d2e4f5a60/reply" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"body": "Olá, Maria! Seu pedido sai amanhã e chega em até 3 dias úteis."
}'Resposta
{
"id": 28,
"thread_id": "7f0c2b1e-5a43-4d8e-9a67-3c1d2e4f5a60",
"wamid": "wamid.HBgNNTUxMTk4NzY1NDMyMRUCABIYFjNFQjA",
"direction": "O",
"origin": "A",
"msg_type": "text",
"body": "Olá, Maria! Seu pedido sai amanhã.",
"status": "S",
"meta_timestamp": "2026-10-10T14:35:00Z",
"created_at": "2026-10-10T14:35:00Z"
}Campos da resposta
idintegerthread_iduuidwamidstringdirectionstringIOI recebida do cliente, O enviada pela loja.originstringCABEHC cliente, A API ou atendente, B assistente, E eco do aplicativo WhatsApp Business, H histórico.msg_typestringtext, image, audio, voice, video, document, sticker, interactive, template, order e outros que a Meta enviar.bodystringmedia_idstringmedia_mimestringmedia_captionstringfilenamestringmedia_urlstringAuthorization. Aparece em mensagens com mídia que a conversa já listou.transcriptionstringinteractiveobjectorder_payloadobjectstatusstringQSDRFQ na fila, S enviada, D entregue, R lida, F falhou.errorstringstatus é F.meta_timestampstringcreated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Sem token ou token inválido. | {"error":"missing authorization header"} |
| 403 | O usuário não é um seller, ou o seller ainda está em análise de cadastro. | {"error":"vendor_pending_review"} |
| 400 | Corpo sem body/text, ou que não é JSON. | {"error":"body required"} |
| 404 | Conversa de outro seller. Um id desconhecido também dá 404 em algumas rotas, mas 200 ou 502 em outras quando não há escopo de seller (veja a visão geral da seção). | {"error":"thread not found"} |
| 502 | A Meta recusou o envio (por exemplo, texto livre fora da janela de 24 horas). A mensagem fica gravada com status: F. | {"error":"<texto devolvido pela Meta>","message":{"id":31,"status":"F"}} |
Enviar mídia
Aceita dois formatos de corpo. Com multipart/form-data você envia o arquivo (até 16 MB) e a plataforma o sobe para a Meta. Com JSON você passa o endereço público de um arquivo e a Meta o busca. Áudios, imagens e vídeos são convertidos para formatos que o WhatsApp aceita antes do envio.
/api/v1/vendor/whatsapp-confluence/threads/{id}/reply-mediaSellerEnvia imagem, áudio, vídeo ou documento
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (lojista). Veja Tokens.Content-Typestringobrigatóriomultipart/form-data (arquivo) ou application/json (link público).Parâmetros de caminho
iduuidobrigatórioid de Listar conversas).Corpo da requisição
filefileobrigatóriomedia_typestringimageaudiovoicevideodocumentimage.voicestring1 envia o áudio como mensagem de voz.captionstringfilenamestringmedia_urlstringExemplo de requisição
curl -X POST "$BASE_URL/api/v1/vendor/whatsapp-confluence/threads/7f0c2b1e-5a43-4d8e-9a67-3c1d2e4f5a60/reply-media" \
-H "Authorization: Bearer $TOKEN" \
-F "file=@./catalogo.pdf" \
-F "caption=Segue o catálogo atualizado"Resposta
{
"id": 28,
"thread_id": "7f0c2b1e-5a43-4d8e-9a67-3c1d2e4f5a60",
"wamid": "wamid.HBgNNTUxMTk4NzY1NDMyMRUCABIYFjNFQjA",
"direction": "O",
"origin": "A",
"msg_type": "document",
"body": "Segue o catálogo atualizado",
"status": "S",
"meta_timestamp": "2026-10-10T14:35:00Z",
"created_at": "2026-10-10T14:35:00Z",
"media_id": "1234567890",
"media_mime": "application/pdf",
"filename": "catalogo.pdf"
}Campos da resposta
idintegerthread_iduuidwamidstringdirectionstringIOI recebida do cliente, O enviada pela loja.originstringCABEHC cliente, A API ou atendente, B assistente, E eco do aplicativo WhatsApp Business, H histórico.msg_typestringtext, image, audio, voice, video, document, sticker, interactive, template, order e outros que a Meta enviar.bodystringmedia_idstringmedia_mimestringmedia_captionstringfilenamestringmedia_urlstringAuthorization. Aparece em mensagens com mídia que a conversa já listou.transcriptionstringinteractiveobjectorder_payloadobjectstatusstringQSDRFQ na fila, S enviada, D entregue, R lida, F falhou.errorstringstatus é F.meta_timestampstringcreated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Sem token ou token inválido. | {"error":"missing authorization header"} |
| 403 | O usuário não é um seller, ou o seller ainda está em análise de cadastro. | {"error":"vendor_pending_review"} |
| 400 | Multipart inválido, sem file, arquivo vazio, ou JSON sem media_url. | {"error":"file required"} |
| 404 | Conversa de outro seller. Um id desconhecido também dá 404 em algumas rotas, mas 200 ou 502 em outras quando não há escopo de seller (veja a visão geral da seção). | {"error":"thread not found"} |
| 502 | Tipo de mídia não suportado, falha ao converter, ou a Meta recusou o envio. | {"error":"..."} |
Enviar template
Use quando a janela de 24 horas fechou, por exemplo para reabrir a conversa com um aviso de pedido. name e language vêm de Listar templates. Se o nome com sufixo não existir na Meta, a plataforma tenta o nome base.
/api/v1/vendor/whatsapp-confluence/threads/{id}/send-templateSellerEnvia um template aprovado pela Meta
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (lojista). Veja Tokens.Content-Typestringobrigatórioapplication/json.Parâmetros de caminho
iduuidobrigatórioid de Listar conversas).Corpo da requisição
namestringobrigatóriolanguagestringpt_BR. Omitido usa o idioma padrão da loja.componentsarraybody com a lista de parameters na ordem das variáveis 1, 2... Omitido envia o template sem variáveis.Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/vendor/whatsapp-confluence/threads/7f0c2b1e-5a43-4d8e-9a67-3c1d2e4f5a60/send-template" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "pedido_enviado",
"language": "pt_BR",
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "Maria"
},
{
"type": "text",
"text": "PEDIDO-20261010-0004"
}
]
}
]
}'Resposta
{
"id": 28,
"thread_id": "7f0c2b1e-5a43-4d8e-9a67-3c1d2e4f5a60",
"wamid": "wamid.HBgNNTUxMTk4NzY1NDMyMRUCABIYFjNFQjA",
"direction": "O",
"origin": "A",
"msg_type": "template",
"body": "pedido_enviado",
"status": "S",
"meta_timestamp": "2026-10-10T14:35:00Z",
"created_at": "2026-10-10T14:35:00Z"
}Campos da resposta
idintegerthread_iduuidwamidstringdirectionstringIOI recebida do cliente, O enviada pela loja.originstringCABEHC cliente, A API ou atendente, B assistente, E eco do aplicativo WhatsApp Business, H histórico.msg_typestringtext, image, audio, voice, video, document, sticker, interactive, template, order e outros que a Meta enviar.bodystringmedia_idstringmedia_mimestringmedia_captionstringfilenamestringmedia_urlstringAuthorization. Aparece em mensagens com mídia que a conversa já listou.transcriptionstringinteractiveobjectorder_payloadobjectstatusstringQSDRFQ na fila, S enviada, D entregue, R lida, F falhou.errorstringstatus é F.meta_timestampstringcreated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Sem token ou token inválido. | {"error":"missing authorization header"} |
| 403 | O usuário não é um seller, ou o seller ainda está em análise de cadastro. | {"error":"vendor_pending_review"} |
| 400 | Sem name, ou corpo que não é JSON. | {"error":"name required"} |
| 404 | Conversa de outro seller. Um id desconhecido também dá 404 em algumas rotas, mas 200 ou 502 em outras quando não há escopo de seller (veja a visão geral da seção). | {"error":"thread not found"} |
| 502 | Template inexistente, não aprovado, ou parâmetros que não batem. O texto vem da Meta. | {"error":"<texto devolvido pela Meta>","message":{"id":31,"status":"F"}} |
Listar templates
/api/v1/vendor/whatsapp-confluence/templatesSellerLista os templates da loja
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (lojista). Veja Tokens.Parâmetros de consulta
syncstring1 consulta a Meta antes de responder e atualiza a lista local. Se a consulta falhar, a lista local volta mesmo assim, com sync_error.Exemplo de requisição
curl "$BASE_URL/api/v1/vendor/whatsapp-confluence/templates?sync=1" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"templates": [
{
"id": 1,
"name": "pedido_enviado",
"language": "pt_BR",
"category": "UTILITY",
"status": "A",
"components": [
{
"type": "BODY",
"text": "Olá {{1}}, seu pedido {{2}} saiu para entrega."
}
],
"quality_score": "GREEN",
"synced_at": "2026-10-01T10:00:00Z"
}
]
}Campos da resposta
templatesarrayTemplates conhecidos.
idintegernamestringname ao enviar.languagestringpt_BR.categorystringMARKETING, UTILITY ou AUTHENTICATION.statusstringPARXP em análise, A aprovado, R rejeitado, X desativado. Só envie os aprovados.rejection_reasonstringcomponentsarrayquality_scorestringGREEN, YELLOW, RED.synced_atstringsync_errorstringsync=1 quando a sincronização falhou.Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Sem token ou token inválido. | {"error":"missing authorization header"} |
| 403 | O usuário não é um seller, ou o seller ainda está em análise de cadastro. | {"error":"vendor_pending_review"} |
| 500 | Falha interna ao ler ou gravar. | {"error":"..."} |