Erro 131026 WhatsApp API: Mensagem Não Pode Ser Entregue
Como resolver o erro 131026 da WhatsApp Business API quando a mensagem não pode ser entregue ao destinatário
O que é o Erro 131026?
O erro 131026 indica que a mensagem não pode ser entregue ao destinatário. Este é um erro frustrante porque pode ter várias causas diferentes.
{
"error": {
"message": "(#131026) Message undeliverable",
"type": "OAuthException",
"code": 131026,
"error_subcode": 2494010,
"fbtrace_id": "..."
}
}
Causas Comuns
1. Número não está no WhatsApp
O número do destinatário não está registrado no WhatsApp ou foi desativado.
Solução: Valide o número antes de enviar:
// Verificar se o número está no WhatsApp (não oficial, mas funcional)
async function checkWhatsAppNumber(phoneNumber) {
try {
const response = await fetch(
`https://graph.facebook.com/v18.0/${phoneNumberId}/messages`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
messaging_product: 'whatsapp',
to: phoneNumber,
type: 'template',
template: {
name: 'hello_world',
language: { code: 'pt_BR' }
}
})
}
);
const data = await response.json();
return !data.error;
} catch (error) {
return false;
}
}
2. Usuário não aceitou os Termos de Serviço
O destinatário não aceitou a versão mais recente dos Termos de Serviço e Política de Privacidade do WhatsApp.
Solução: O usuário precisa abrir o WhatsApp e aceitar os novos termos.
3. Versão antiga do WhatsApp
O destinatário está usando uma versão muito antiga do WhatsApp que não suporta a API.
Solução: O usuário precisa atualizar o aplicativo WhatsApp.
4. Usuário bloqueou seu número
Se o usuário bloqueou seu número de negócio, as mensagens não serão entregues.
Solução: Não há solução técnica. Respeite a decisão do usuário.
5. Formato do número incorreto
O número está em formato incorreto.
Solução: Use o formato internacional sem símbolos:
function formatPhoneNumber(phone) {
// Remove tudo que não for número
let cleaned = phone.replace(/\D/g, '');
// Remove o zero inicial se existir
if (cleaned.startsWith('0')) {
cleaned = cleaned.substring(1);
}
// Adiciona código do país se não tiver
if (!cleaned.startsWith('55')) {
cleaned = '55' + cleaned;
}
return cleaned;
}
// Exemplos:
// (11) 99999-9999 -> 5511999999999
// +55 11 99999-9999 -> 5511999999999
// 011 99999-9999 -> 5511999999999
Implementando Tratamento de Erro
async function sendWhatsAppMessage(to, message) {
try {
const response = await fetch(/* ... */);
const data = await response.json();
if (data.error) {
switch (data.error.code) {
case 131026:
// Mensagem não pode ser entregue
await handleUndeliverable(to, data.error);
break;
case 131047:
// Janela de 24h expirada
await sendTemplateInstead(to);
break;
default:
throw new Error(data.error.message);
}
}
return data;
} catch (error) {
console.error('Erro ao enviar mensagem:', error);
throw error;
}
}
async function handleUndeliverable(phoneNumber, error) {
// Registre o número como inválido/problemático
await markNumberAsInvalid(phoneNumber, {
error_code: error.code,
error_subcode: error.error_subcode,
timestamp: new Date()
});
// Notifique sua equipe ou sistema
await notifySupport({
type: 'undeliverable_message',
phone: phoneNumber,
error: error
});
}
Subcódigos de Erro
O erro 131026 pode vir com diferentes subcódigos:
| Subcódigo | Significado | |-----------|-------------| | 2494010 | Número não está no WhatsApp | | 2494011 | Termos de serviço não aceitos | | 2494012 | Versão do app muito antiga | | 2494013 | Conta desativada |
Boas Práticas
- Valide números antes de enviar: Mantenha uma lista de números validados
- Implemente retry com backoff: Alguns erros são temporários
- Monitore taxa de falha: Muitos 131026 podem indicar problema na sua lista de contatos
- Ofereça canais alternativos: Email, SMS como fallback
Exemplo de Retry com Backoff
async function sendWithRetry(to, message, maxRetries = 3) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
return await sendWhatsAppMessage(to, message);
} catch (error) {
if (error.code === 131026 || attempt === maxRetries) {
// Não faz retry para 131026 (não adianta)
throw error;
}
// Backoff exponencial
const delay = Math.pow(2, attempt) * 1000;
await new Promise(resolve => setTimeout(resolve, delay));
}
}
}
Conclusão
O erro 131026 geralmente indica um problema com o número de destino, não com sua implementação. A melhor estratégia é validar números proativamente e ter fallbacks para quando mensagens não podem ser entregues.
Precisa de ajuda com sua integração WhatsApp? Fale comigo para consultoria especializada.