Como enviar mensagem de notificação sem cabeçalho
Mensagens de notificação são conversas via Whatsapp iniciadas pela empresa cliente em que o usuário final não iniciou uma conversa. Podem conter texto puro ou, também, um cabeçalho customizado. Este documento explica como fazer o envio de mensagens de notificação que contem apenas o corpo de texto, não incluindo nenhum tipo de cabeçalho.
Importante
Toda mensagem de notificação precisa ter um template previamente cadastrado e aprovado na Meta.
1. Primeiro passo - Obter token de acesso
Antes de solicitar o envio de mensagens de notificação sem cabeçalho utilizando o endpoint para envio de mensagens de notificação, a aplicação cliente deve obter o token de acesso às APIs, conforme descrito no guia Como autenticar.
2. Segundo passo - Definição do pacote de requisições
Após obter o token de acesso, a aplicação cliente deve montar o payload da requisição de envio de mensagens de notificação, que corresponde ao pacote de requisições de envio de mensagens, conforme explicado na documentação O que é um pacote de requisições.
Este payload será enviado no corpo da requisição de envio de mensagens de notificação e abaixo há um exemplo para envio de mensagem sem cabeçalho:
{
"nomeTemplate": "NOME_DO_TEMPLATE_META",
"wabaId": "VALOR_ID_WABA_META",
"destinatarios": [ "CONTATO_1", "CONTATO_2", "CONTATO_N" ],
"body": {
"parametros": [
{
"tipo": "text",
"valor": "10 dias"
}
]
}
}
3. Segundo passo - Solicitar envio de mensagens de notificação
Para solicitar o envio de mensagens de notificação deve-se fazer uma requisição HTTP POST para o endpoint https://api.whatsapp.serpro.gov.br/notificacao/v1/FROM_PHONE_NUMBER_ID/requisicoes, enviando o payload do pacote de requisições no corpo da requisição, conforme exemplo abaixo usando curl.
FROM_PHONE_NUMBER_ID
Este campo deve ser o mesmo informado no client_id na geração do token.
Exemplo com curl
curl -v --request POST \
--url 'https://api.whatsapp.serpro.gov.br/notificacao/v1/FROM_PHONE_NUMBER_ID/requisicoes' \
--header 'Authorization: Bearer VALOR_TOKEN' \
--header 'Content-Type: application/json' \
-d ' {
"nomeTemplate": "NOME_DO_TEMPLATE_META",
"wabaId": "VALOR_ID_WABA_META",
"destinatarios": [ "CONTATO_1", "CONTATO_2", "CONTATO_N" ],
"body": {
"parametros": [
{
"tipo": "text",
"valor": "10 dias"
}
]
}
}
'
Exemplo com Spring Boot
final String nomeTemplate = "NOME_DO_TEMPLATE_META";
final String wabaId = "VALOR_ID_WABA_META";
final String body = String.format("" +
"{" +
" \"nomeTemplate\": \"%s\", " +
" \"wabaId\": \"%s\", " +
" \"destinatarios\": [ \"CONTATO_1\", \"CONTATO_2\", \"CONTATO_N\" ], " +
" \"body\": { " +
" \"parametros\": [ { \"tipo\": \"text\", \"valor\": \"10 dias\" }] " +
" } " +
"}", nomeTemplate, wabaId);
final String serverUrl = "https://api.whatsapp.serpro.gov.br/notificacao/v1/FROM_PHONE_NUMBER_ID/requisicoes";
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setBearerAuth("VALOR_TOKEN");
final HttpEntity<String> requestEntity = new HttpEntity<>(body, headers);
final RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new MyResponseErrorHandler());
final ResponseEntity<String> response = restTemplate.postForEntity(serverUrl, requestEntity, String.class);
4. Quarto passo - Resultado da solicitação de envio de mensagens de notificação
A resposta do serviço de envio de requisições de mensagens de notificação é um objeto json contendo três informações, conforme exemplo abaixo:
Este exemplo ilustra uma resposta com sucesso na internalização da solicitação de envio de mensagens de notificação. Em caso de sucesso o campo sucesso tem o valor true e o campo idRequisicao contém o identificador interno do pacote de requisições. Este valor deverá ser usado posteriormente na consulta ao status da solicitação de envio.
{
"idRequisicao": "309d87e6-dca1-49dd-a378-edbec5e05481",
"mensagensErro": null,
"sucesso":true
}
Em caso de falha na solicitação de envio de mensagens de notificação, o campo sucesso terá valor false e o campo mensagensErro conterá a lista de erros encontrados na internalização da solicitação de envio. No exemplo abaixo a solicitação falhou porque o template informado na requisição não foi previamente cadastrado na Cloud Api da Meta, conforme os requisitos para envios de mensagens.
{
"idRequisicao": null,
"mensagensErro": [
"O template exemplo_de_confirmao_de_envio_inexistente nao foi encontrado na lista de templates cadastrados."
],
"sucesso": false
}
5. Quinto passo - Consultar status da solicitação de envio de mensagens de notificação
Em caso de sucesso no requisição de envio de mensagens de notificação o próximo passo é consultar o status do envio das mensagens, conforme descrito no guia Como consultar status de envio de mensagens.