Skip to main content

Olá bom dia, Estou tentando fazer meu primeiro envio de notificação ativa pelo whatsapp utilizando php. Achei um código aqui no fórum e estou tentando adaptarmeu envio com base nele e no descrito aqui https://help.blip.ai/hc/pt-br/articles/360057514334 - Requisição 2: Envio da notificação com texto somente


Segue meu código abaixo



	<?

$accesstoken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";





$str_data = '

{

"id":"xxxxxxxxxxxxxxxxxxxxxxxxxx",

"to":"[email protected]",

"type":"application/json",

"content":{

"type":"template",

"template":{

"namespace":"xxxxxxxxxxxxxxxxxxxxxxxx",

"name":"separacao_mercadoria",

"language":{

"code":"pt_BR",

"policy":"deterministic"

},

"components":m

{

"type": "body",

"parameters": a

{

"type": "text",

"text": "www.cimcal.com"

}

]

}

]

}

}

}

'



$url = "https://msging.net/messages";

$headr = array();

$headr/] = 'Content-length: 0';

$headr/] = 'Content-type: application/json';

$headr/] = 'Authorization: Key '.$accesstoken;





$ch = curl_init($url);

curl_setopt($ch, CURLOPT_HTTPHEADER,$headr);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $str_data);

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

var_dump(curl_exec($ch));

?>



A notificação não chega e me é retornado essa mensagem



{“code”:13,“description”:“The requested authentication scheme is not enabled”}bool(true)

Pq vc define CURLOPT_HTTPHEADER duas vezes? O segundo não pode estar sobrescrevendo o primeiro, que possui o cabeçalho de Authorization?



Nessa resposta do StackOverflow diz q nao pode setar essa opt multiplas vezes: php - Can I call curl_setopt with CURLOPT_HTTPHEADER multiple times to set multiple headers? - Stack Overflow


Ei @Guilherme_Marques_El, tudo bem? Antes de qualquer coisa, gostaríamos de te dar boas-vindas à Comunidade! 💙



Sobre a sua dúvida, você já tem o número e o modelo (template) da mensagem aprovados? Temos um vídeo explicadinho que o @CommunityTeam fez que pode te ajudar Office Hours - Plugin Broadcast (Clientes Business e Enterprise)


Cara ate testando pelo postman , incialmente tenho o mesmo erro


{


“code”: 13,


“description”: “The requested authentication scheme is not enabled”


}



Eu consigo enviar uma notificação ativa sem antes consultar o número do cliente ? , posso simplesmente passar o suposto id do whatsapp dele sem consultar o numero antes? Ou a consulta do numero é algo obrigatório ?


Já tenho template aprovado sim , estou tentanpelo postman e tb nao consigo fazer essa minha primeira notificação ativa


Eu fiz um teste pelo Postman e removendo o cabeçalho Authorization o retorno é esse mesmo:



{

"code": 13,

"description": "The requested authentication scheme is not enabled"

}



Adicionando o Authorization, sem valor ou valor inválido, o retorno é:



{

"code": 13,

"description": "Invalid authorization header"

}



Passando um token válido, os demais erros são referentes ao corpo da mensagem. Vale a pena revisar os cabeçalhos da sua requisição.



Você consegue enviar a notificação sem antes consultar o número sim, mas precisa saber qual é o identity do contato.



No caso do Whatsapp, geralmente é o numero de telefone no padrão internacional seguido de @wa.gw.msging.net



No seu exemplo ali, talvez seja [email protected]



55 é código do Brasil e o nono dígito geralmente não existe para DDDs que não sao das regiões 1x e 2x (DDD 19 ou 11 São Paulo ou 21 Rio de Janeiro)



Espero que ajude


Boa tarde, @Guilherme_Marques_El !



Seja muito bem-vindo à comunidade 🎉



Sobre a sua dúvida, reparei dois pontos de atenção.





  1. O campo to deve ter o número completo da pessoa com o código do país, como o @adriano.caetano comentou.


    Não é obrigatório fazer a chamada para obter o id da pessoa, mas é recomendado para garantir que o número dela estará correto, uma vez que o nono dígito pode fazer diferença, já que certos números no WhatsApp não o utilizam. Por isso, caso você não consulte antes, pode ser que a mensagem não seja entregue, porque, por exemplo, 5531988889999 é diferente de 553188889999.





A chamada seria a seguinte:


Requisição



    POST https://http.msging.net/commands HTTP/1.1



Content-Type: application/json



Authorization: Key {YOUR_TOKEN}



{

"id": "{{$guid}}",

"to": "[email protected]",

"method": "get",

"uri": "lime://wa.gw.msging.net/accounts/+{{telefone}}"

}



Resposta



HTTP/1.1 200 OK

Content-Type: application/json



{

"type": "application/vnd.lime.account+json",

"resource": {

"fullName": "John Doe",

"alternativeAccount": "[email protected]",

"identity": "[email protected]",

"phoneNumber": "+5531988889999",

"source": "WhatsApp"

},

"method": "get",

"status": "success",

"id": "{{$guid}}",

"from": "[email protected]",

"to": "[email protected]",

"metadata": {

"#command.uri": "lime://wa.gw.msging.net/accounts/+5531988889999"

}

}



Lembre-se de substituir o {{telefone}} pelo número completo da pessoa - incluindo o nono dígito.



Uma vez feito isso, você pode utilizar o campo alternativeAccount para obter o identity que será usado na chamada.



Caso queira entender um pouco mais desse processo, o docs tem uma ótima explicação.





  1. A variável url, deveria ser https://http.msging.net/messages, ficou faltando apenas o http antes de msging.




Depois me fala se deu certo!


Fiz as devidas alterações aqui, e tanto na requisição do contato, quanto na tentativa de enviar a notificação ativa tenho o seguinte erro de retorno


{


“code”:13,


“description”:“The requested authentication scheme is not enabled”


}


bool(true)


Bom dia, @Guilherme_Marques_El!


Você poderia enviar a requisição que você montou no Postman? É só copiar o CURL dela e, no header de nome Authorization, remover o valor da chave do seu bot.




Vamos primeiro ver se estou usando o Postman corretamente.


Para a consulta de número de telefone, coloco POST e o endereço https://http.msging.net/commands


Depois em Headers eu crio o Authorization e coloco o valor “Key Y2ltY2FsMjpXxxxxxxxxxxxxxxxxxxxxxxxxx”


Depois em body eu marco raw e coloco


{


“id”: “abc123abc123”,


“to”: “[email protected]”,


“method”: “get”,


“uri”: “lime://wa.gw.msging.net/accounts/+5537988437593”


}



Fazendo tudo da forma descrita acima o resultado é


{


“code”: 21,


“description”: “Unsupported content type”


}



Eu enviando mesmo uma requisição POST pro endereço https://http.msging.net/commands, devo passar no body o method como GET mesmo ?


Aonde eu consigo no Postman visualizar o CURL ?



Grato!!


@Guilherme_Marques_El, a estrutura é essa mesmo. Pelo que pude perceber, só ficou faltando o cabeçalho de chave Authorization e valor application/json, por isso que deu esse erro.



No caso dessa requisição, ela utiliza o /commands, que é usado para disparar comandos e, com isso, é necessário especificar se esse comando é um GET, SET, etc, por isso que temos o verbo no corpo também.



Para obter o cURL, vai depender da versão do seu aplicativo.




Um outro ponto, o campo id precisa ser um GUID. No caso do postman, pode deixar o valor do campo como {{$guid}}


Boa tarde, tudo bem?



No postman além de colocar o body como raw vc precisa setar o tipo JSON (fica em um dropbox logo ao lado). O payload da sua requisição está correto mas aparentemente não está sendo enviado que é do tipo application/json e por isso vc está recebendo “Unsupported content type”, selecionar a opção JSON já deve ser o suficiente.



image



Já para transformar sua requisição do postman em curl, vc pode ir na opção “code” logo abaixo do botão de envio da requisição, vai aparecer um popup com varias opções de código inclusive em PHP - cURL.



image.


Pessoal muito obrigado, no postman deu certinho a requisição do contato!



Agora estou tentando enviar a mensagem ativa e não estou conseguindo, no postman está da seguinte forma endereço requisição POST https://http.msging.net/messages



BODY



{



"id":"{{$guid}}",



"to":"[email protected]",



"type":"application/json",



"content":{



"type":"template",



"template":{



"namespace":"XXXXXXXXXXXXXXXXXXXXXXXX",



"name":"separacao_mercadoria",



"language":{



"code":"pt_BR",



"policy":"deterministic"



},



"components":n



{



"type": "body",



"parameters": t



{



"type": "text",



"text": "www.cimcal.com"



}



]



}



]



}



}



}



RESULTADO DO CURL



curl --location --request POST 'https://http.msging.net/messages' \



--header 'Authorization: Key XXXXXXXXXXXXXXXXXXXX' \



--header 'Content-Type: application/json' \



--data-raw '{



"id":"28635f66-7944-4dcb-b4d6-6ba6e9231e45",



"to":"[email protected]",



"type":"application/json",



"content":{



"type":"template",



"template":{



"namespace":"5b55c46e_ef5e_432e_9b19_d786af766b2a",



"name":"separacao_mercadoria",



"language":{



"code":"pt_BR",



"policy":"deterministic"



},



"components":n



{



"type": "body",



"parameters": t



{



"type": "text",



"text": "www.cimcal.com"



}



]



}



]



}



}



}'



resultado Status 202 accepted



mas a mensagem ainda não chega no whatsapp destino



alguma luz??



obrigado


Você consegue fazer o teste de enviar uma mensagem para o bot e, após iniciar a conversa, tentar fazer o disparo da notificação?




Isso significa que você conseguiu enviar para o blip com sucesso! Agora você precisa checar o status da sua notificação com o whatsapp, para fazer isso você pode olhar no log de mensagens do seu bot no portal do blip:





No log vc vai encontrar todas as ultimas mensagens enviadas no bot, procure a mensagem que você enviou e clique no id dela (você vai notar que é um link).





Após clicar no id deve abrir um popup informando todas as notifications daquela message, a ultima deve ser ter o Event como failed e conter o motivo da falha dentro de Reason como na imagem de exemplo:





Outra maneira de buscar essa notification é enviando o seguinte command via postman:



{

"id": "{{$guid}}",

"method": "get",

"uri": "/notifications?id={{id-da-mensagem-enviada}}"

}



Você também receberá uma lista de notifications e a mais recente deve ser de falha.




Opa , agora consegui , acho que é porque estava colocando o novo digito pra enviar a notificação, porém nao tem necessidade dele.


Consegui fazer tudo via postman… agora so preciso entao tentar passar pro PHP



Obrigado




Que bom! 🙂



Pra ter certeza desse número, a requisição de validação - aquela primeira que a gente tava vendo - vai te retornar um campo que chama Alternative Account, você pode usar ele como o valor do identity na hora de disparar a mensagem.



Caso queira saber mais, tem esse link do docs.


Não sei se vai ajudar mas tenta esse código, primeiro vc tem que validar o número de telefone e ver se tem saldo para envio e depois de fato você tem que enviar a mensagem. Estou utilizando templates então estou lhe mandando a forma na qual utilizo. Espero que ajude.



$token = 'Seu token de acesso!';

$phone = 'Telefone para envio da mensagem!';



$header = e

'Content-Type: application/json',

'Authorization: Key '.$token

];



$uuid1 = 'Você precisa de um gerador de UUID!';

$postCommands = d

'method' => "get",

'id' => $uuid1,

'to' => "[email protected]",

'uri' => "lime://wa.gw.msging.net/accounts/+".$phone

];



$chCommands = curl_init();

curl_setopt_array($chCommands, a

CURLOPT_URL => 'https://http.msging.net/commands',

CURLOPT_RETURNTRANSFER => true,

CURLOPT_POST => true,

CURLOPT_HEADER => false,

CURLOPT_HTTPHEADER => $header,

CURLOPT_POSTFIELDS => json_encode($postCommands, true)

]);





$response = curl_exec($chCommands);

curl_close($chCommands);



$alternativeAccount = $responses'resource']u'alternativeAccount'];



$uuid2 = 'Você precisa de um gerador de UUID!';

$postMessages = a

'id' => $uuid2,

'to' => $alternativeAccount,

'type' => 'application/json',

'content' => =

'type' => 'template',

'template' =>

'name' => "nome_do_seu_template",

'namespace' => "namespace_do_seu_template",

'language' =>

'code' => 'pt_BR',

'policy' => 'deterministic'

]

]

]

];



$chMessages = curl_init();

curl_setopt_array($chMessages, s

CURLOPT_URL => 'https://http.msging.net/messages',

CURLOPT_RETURNTRANSFER => true,

CURLOPT_POST => true,

CURLOPT_HEADER => false,

CURLOPT_HTTPHEADER => $header,

CURLOPT_POSTFIELDS => json_encode($postMessages, true)

]);



curl_exec($chMessages);

curl_close($chMessages);



Top demais!! Valeu, vou testar exatamente esse codigo!


Só uma coisa, se o seu template conter variáveis você tem que adicionar algumas informações no $postMessages que mencionei acima. Se tiver dúvida me avise que posto um modelo com variáveis.


Beleza, eu consegui fazer aqui sim, meu template tem variável sim, dei conta de fazer funcionar certinho


Todas dúvidas sanadas!


Grato


Que ótimo, @Guilherme_Marques_El! ❤️



Espero que você venha por aqui conversar mais com a gente e contar como está sendo sua experiência com o Blip! Já deu para ver que o pessoal é maravilhoso! 😍


Como faço pra capturar o resultado do envio de uma notificação , se obteve sucesso ou falha? Isso é possível ?


Este tópico foi fechado automaticamente 7 dias depois da úlima resposta. Novas respostas não são mais permitidas.


Comente