Relatórios de entrega de SMS (DLR): como a aplicação sabe se a mensagem chegou

WhatsApp e APIs·· 11 visualizações· 4 min de leitura

A resposta curta (para programadores): o «OK» que o fornecedor devolve no envio quer dizer aceite, não entregue. Se a mensagem chegou ao telemóvel sabe-se depois, num relatório de entrega (DLR), e só se o pediu: numa API HTTP chega como callback ao endereço que indicou; no SMPP pede-se com o campo registered_delivery do submit_sm e o recibo chega num deliver_sm. O ponto que faz tudo funcionar: guardar o identificador da mensagem devolvido no envio, porque o relatório traz o mesmo identificador.

Os estados que vai ver

Estado O que quer dizer
Aceite (ACCEPTD, ENROUTE) O fornecedor ou a rede tem a mensagem e está a tentar. Ainda não chegou ao telemóvel.
Entregue (DELIVRD) A rede informa que chegou ao aparelho.
Expirada (EXPIRED) O telemóvel esteve desligado ou sem rede até acabar o prazo de validade da mensagem.
Não entregue (UNDELIV) Número inexistente, bloqueado, ou a rede recusou.
Rejeitada (REJECTD) Recusada antes de tentar: remetente não autorizado, destino sem cobertura do fornecedor, filtro.
Desconhecido (UNKNOWN), ou nenhum relatório A rede pelo caminho não devolve relatórios, ou o relatório perdeu-se. Não prova que falhou.

Como receber e ligar os relatórios

1 Peça o relatório. Na API HTTP, indique o endereço de callback no pedido ou no painel do fornecedor. No SMPP, ponha registered_delivery a pedir recibo no submit_sm.
2 Guarde o identificador. Quando o envio é aceite (resposta HTTP ou submit_sm_resp), grave o message_id do fornecedor ao lado do seu registo, com o estado «enviada».
3 Receba o callback com cuidado: um endereço HTTPS público do seu site que responde depressa com 200 e trata o resto depois. Verifique a assinatura ou o segredo, se o fornecedor os usar: receber um webhook em PHP e verificar a assinatura. Se não responder, o fornecedor volta a tentar, por isso o mesmo relatório pode chegar mais do que uma vez: actualize pelo identificador, sem criar linhas novas.
4 No SMPP, o recibo é um deliver_sm com o esm_class a marcá-lo como recibo. O estado vem no texto (id:... stat:DELIVRD err:...) e, em muitos fornecedores, também nos campos receipted_message_id e message_state. Responda sempre com deliver_sm_resp, senão o fornecedor volta a mandá-lo.
5 Atenção ao formato do identificador. Alguns fornecedores devolvem o identificador em hexadecimal no submit_sm_resp e em decimal no recibo (ou ao contrário). Se nada bate certo, compare as duas formas.
6 Decida o que fazer em cada estado final: tentar outro canal depois de «expirada», marcar o número como inválido depois de «não entregue», e um prazo a partir do qual «sem relatório» fica «desconhecido».
«Entregue» quer dizer que chegou ao telemóvel, não que foi lida. E os relatórios podem chegar fora de ordem («entregue» antes de «aceite»): nunca deixe um estado intermédio apagar um estado final.
Nos códigos de verificação, não espere pelo relatório para desbloquear o utilizador: mostre «reenviar» ao fim de uma pausa, e use os relatórios para estatística e para descobrir números ou redes com problemas. Mais em códigos OTP por SMS com segurança.

O endereço de callback do seu site não recebe nada? Diga-nos o endereço e a hora de um envio de teste, e vemos se o pedido chegou ao servidor.

Abrir pedido de suporte

VEJA TAMBÉM

SMPP ou API HTTP de SMS: o que é cada uma e de qual precisa a sua aplicação

Binds SMPP e enquire_link: manter viva a ligação de SMS num VPS

Receber um webhook em PHP e verificar a assinatura

O que é um webhook, e como testar um com curl

Webhook ou consulta periódica: como um sistema fica a saber que algo mudou noutro

Enviar códigos de uso único (OTP) por SMS com segurança: validade, tentativas e registos

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão)

Ver planos
Esta resposta foi útil? A sua resposta ajuda-nos a melhorar este artigo.