Enviar noticação ativa blip + php

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":"37988437593@wa.gw.msging.net",
   "type":"application/json",
   "content":{
      "type":"template",
      "template":{
         "namespace":"xxxxxxxxxxxxxxxxxxxxxxxx",
         "name":"separacao_mercadoria",
         "language":{
            "code":"pt_BR",
            "policy":"deterministic"
         },
         "components":[
            {
                "type": "body",
                "parameters": [
                    {
                        "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)

1 Curtida

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: https://stackoverflow.com/questions/15134575/can-i-call-curl-setopt-with-curlopt-httpheader-multiple-times-to-set-multiple-he/15134580

Ei @Guilherme_Marques_El, tudo bem? Antes de qualquer coisa, gostaríamos de te dar boas-vindas à Comunidade! :tada: E para começar com o pé direito, uma boa dica é visitar a seção Comece Aqui. :blue_heart:

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 @adrianod 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 553788437593@wa.gw.msging.net

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 :tada:

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": "postmaster@wa.gw.msging.net",
        "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": "5531988889999@wa.gw.msging.net",
        "identity": "5531988889999@wa.gw.msging.net",
        "phoneNumber": "+5531988889999",
        "source": "WhatsApp"
    },
    "method": "get",
    "status": "success",
    "id": "{{$guid}}",
    "from": "postmaster@wa.gw.msging.net",
    "to": "bot@msging.net",
    "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!

1 Curtida

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”: “postmaster@wa.gw.msging.net”,
“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":"5537988437593@wa.gw.msging.net",

   "type":"application/json",

   "content":{

      "type":"template",

      "template":{

         "namespace":"XXXXXXXXXXXXXXXXXXXXXXXX",

         "name":"separacao_mercadoria",

         "language":{

            "code":"pt_BR",

            "policy":"deterministic"

         },

         "components":[

            {

                "type": "body",

                "parameters": [

                    {

                        "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":"5537988437593@wa.gw.msging.net",

   "type":"application/json",

   "content":{

      "type":"template",

      "template":{

         "namespace":"5b55c46e_ef5e_432e_9b19_d786af766b2a",

         "name":"separacao_mercadoria",

         "language":{

            "code":"pt_BR",

            "policy":"deterministic"

         },

         "components":[

            {

                "type": "body",

                "parameters": [

                    {

                        "type": "text",

                        "text": "www.cimcal.com"

                    }

                ]

            }

          ]

        }

    }

}'

resultado Status 202 accepted

mas a mensagem ainda não chega no whatsapp destino

alguma luz??

obrigado

1 Curtida

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?

1 Curtida

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.

1 Curtida

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! :slight_smile:

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.

1 Curtida

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 = [
      'Content-Type: application/json',
      'Authorization: Key '.$token
];

$uuid1 = 'Você precisa de um gerador de UUID!';
$postCommands =  [
     'method' => "get",
     'id' => $uuid1,
     'to' => "postmaster@wa.gw.msging.net",
     'uri' => "lime://wa.gw.msging.net/accounts/+".$phone
];

$chCommands = curl_init();
curl_setopt_array($chCommands, [
       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 = $response['resource']['alternativeAccount'];

$uuid2 = 'Você precisa de um gerador de UUID!';
$postMessages = [
     '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, [
        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!

2 Curtidas