PHP + Twilio + WhatsApp: vamos jogar?

August 21, 2018
Escrito por

PHP Twilio WhatsApp

 

Há 1,5 bilhão de pessoas usando a plataforma completa de mensagens criptografadas do WhatsApp para se comunicar. Muitas dessas pessoas preferem usar o WhatsApp em vez de SMS e de outras plataformas de mensagens. Atualmente, esse é o aplicativo de mensagens mais popular do mundo.

A Twilio está adicionando opções às mesmas chamadas de API que você usa para enviar e receber mensagens SMS. Desse modo, você pode alcançar esses usuários da maneira que eles preferem: no WhatsApp.

No console da Twilio, é possível usar a API Sandbox para WhatsApp da Twilio para testar esse novo canal para conectar seu software globalmente.

Veja algumas das possibilidades que a API Sandbox para WhatsApp da Twilio oferece com o PHP.

Antes de começar

Para codificar seguindo este post, será necessário:

Configuração do seu projeto

Primeiramente, vamos criar um novo diretório para o nosso projeto e, depois, criar e salvar um arquivo chamado composer.json com este conteúdo:

{
  "require": {
    "php": ">=7.1.0",
    "twilio/sdk": "^5.21",
    "vlucas/phpdotenv": "^2.5"
  }
}

Com essas instruções, informamos o Composer de que este projeto requer a versão PHP 7.1 ou superior, o SDK para PHP da Twilio e o projeto vlucas/phpdotenv , que vamos utilizar para armazenar informações que não queremos salvar em um repositório público (veremos mais sobre isso posteriormente). Dentro do nosso novo diretório de projetos, executaremos o seguinte comando para que o Composer siga estas instruções:

composer install

Captura de tela do console que executa a instalação do composer no composer.json fornecido

Configuração da API Sandbox para WhatsApp da Twilio

Atualmente, somente contas corporativas aprovadas têm permissão para acessar o WhatsApp por meio da API da Twilio. No entanto, podemos usar a API Sandbox para WhatsApp da Twilio para começar a experimentar.

Antes de começar, é necessário definir algumas configurações. Acesse o Sandbox no console da Twilio, localizado no menu "Programmable SMS" (SMS programável).  Para ativar o Sandbox, selecione um dos números dele, clique para concordar com os termos do WhatsApp e clique em "Activate Sandbox" (Ativar sandbox). Na próxima seção, há algumas opções para vincular a conta pessoal do WhatsApp à sandbox.

Quando a conta pessoal do WhatsApp estiver vinculada, poderemos usar os formulários de modelo no Sandbox de diversas maneiras. No entanto, criaremos alguns scripts PHP para interagir com a API para WhatsApp da Twilio.  Vamos voltar a esta página mais tarde para adicionar o URL do ngrok do aplicativo à seção "Connect the Sandbox to your App" (Conecte a sandbox ao seu app). Portanto, vamos deixá-la aberta por enquanto.

Envio da mensagem de modelo

Há duas maneiras de enviar uma mensagem de saída do WhatsApp pelo Sandbox. Podemos responder quando nosso número do WhatsApp nos enviar uma mensagem ou podemos enviar uma mensagem que corresponda a um dos modelos disponíveis.

Em nossa primeira tentativa, enviaremos uma mensagem para nosso número do WhatsApp usando uma mensagem de modelo. Não precisamos usar os formulários no console, desde que o corpo da nossa mensagem corresponda a um dos modelos em que {{}} é substituído por dados reais.

Em nosso diretório de projetos, criaremos um novo arquivo sendMessage.php com o seguinte conteúdo:

<?php

require_once './vendor/autoload.php';

use Twilio\Rest\Client;

$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();

// Your Account Sid and Auth Token from twilio.com/console
$sid    = getenv("TWILIO_ACCOUNT_SID");
$token  = getenv("TWILIO_AUTH_TOKEN");
$twilio = new Client($sid, $token);

As linhas $dotenv carregam o pacote vlucas/phpdotenv para que possamos colocar informações que não queremos compartilhar em um arquivo .env, que será carregado em nosso código usando as chamadas getenv.

Veja como ficará o arquivo .env no nosso projeto:

TWILIO_ACCOUNT_SID="REPLACE WITH YOUR ACCOUNT SID"
TWILIO_AUTH_TOKEN="REPLACE WITH YOUR AUTH TOKEN"
TWILIO_WHATSAPP_NUMBER="+14155238886"
MY_WHATSAPP_NUMBER="+REPLACE WITH YOUR WHATSAPP NUMBER"

O valor que provavelmente não precisaremos alterar é o TWILIO_WHATSAPP_NUMBER, pois há apenas algumas opções. No entanto, se selecionarmos um número do Sandbox diferente, precisaremos substituí-lo aqui também.

O restante do nosso código sendMessage.php acima extrai nossa TWILIO_ACCOUNT_SID e TWILIO_AUTH_TOKEN do arquivo .env e usa essas informações para criar uma nova instância do Twilio Rest Client conectada à nossa conta da Twilio.

Em seguida, adicionaremos o restante do código que precisamos para enviar nossa mensagem em sendMessage.php:

<?php
//...
$codes = ["chocolate", "vanilla", "strawberry", "mint-chocolate-chip", "cookies-n-cream"];

$message = $twilio->messages
   ->create("whatsapp:".getenv("MY_WHATSAPP_NUMBER"),
       [
           "body" => "Your ice-cream code is ".$codes[rand(0,4)],
           "from" => "whatsapp:".getenv("TWILIO_WHATSAPP_NUMBER")
       ]
   );

print($message->sid);

Estamos usando a mensagem de modelo "Your {{1}} code is {{2}}" (Seu código de {{1}} é {{2}}). Temos que corresponder exatamente ao modelo ou ocorrerá um erro quando enviarmos nossa mensagem. Além disso, precisamos substituir {{1}} e {{2}} para termos um pouco de diversão.

Observe que o código que estamos usando para enviar nossa mensagem é quase idêntico ao código que utilizaríamos para enviar um SMS usando a API da Twilio, exceto pelo whatsapp: prefixado aos nossos números.

Nosso comando print no final é apenas para que possamos ver evidências de uma mensagem enviada com sucesso quando executarmos nosso comando:

php sendMessage.php

Depois de executar esse comando, podemos dar uma olhada em nosso WhatsApp para ver a mensagem.

Captura de tela do WhatsApp que recebe a mensagem gerada: &#x27;Your ice-cream code is mint-chocolate-chip&#x27; (Seu código de sorvete é menta-com-chocolate)

Mensagens interativas

Isso foi muito divertido! Mas vamos eliminar as restrições do nosso modelo com um script interativo. Nossa conta do WhatsApp precisará iniciar a interação, mas nosso script estará livre para responder com qualquer texto que quisermos depois disso.

Criaremos um novo arquivo em nosso diretório de projetos receiveMessage.php com o seguinte conteúdo:

<?php
require_once './vendor/autoload.php';

use Twilio\Twiml;

$response = new Twiml;
$guess = $_REQUEST['Body'];
$pick = rand(1,5);

if (!in_array($guess, [1,2,3,4,5])) {
   $response->message("Hiya! I'm thinking of a number between 1 and 5 - try to guess it!");
} elseif ($guess == $pick) {
   $response->message("Yes! You guessed it!");
} else {
   $response->message("Nope, it was actually $pick - Pick a new number to play again!");
}

print $response;

Aqui não precisamos inserir os dados da nossa conta. Estamos respondendo a uma mensagem para que a API da Twilio já saiba com qual conta está interagindo.

A mensagem que recebemos estará no $_REQUEST["Body"] que usamos para determinar a resposta correta. Se não recebermos um número entre 1 e 5, responderemos com uma mensagem informando ao remetente como jogar. Caso contrário, podemos informar ao remetente se ele adivinhou ou não nosso número corretamente.

A instrução print no final desse script é importante, e a resposta não será enviada se nos esquecermos de incluí-la.

Para receber uma mensagem usando a API da Twilio, nosso script precisará estar acessível por meio de um URL público. É por isso que temos a configuração do ngrok. Executaremos o ngrok em nosso projeto:

ngrok http 80

O resultado em nosso console será parecido com isto:

Captura de tela da instância do ngrok em execução

Em seguida, copiaremos o URL gerado e o colaremos no formulário "Connect the Sandbox to Your App" (Conecte o Sandbox ao seu app) que deixamos aberto no console, especificamente no campo "A message comes in" (Mensagem sendo recebida).  Precisamos anexar "/receiveMessage.php" ao URL e salvar.

Captura de tela da configuração da sandbox do WhatsApp no console da Twilio. O campo &#x27;A MESSAGE COMES IN&#x27; (UMA MENSAGEM É RECEBIDA) foi preenchido com o URL &#x27;http://92832de0.ngrok.io/receiveMessage.php&#x27;

Estamos prontos para jogar!

Captura de tela da interação do WhatsApp. Mensagem enviada: &#x27;Hello Twilio API for WhatsApp!&#x27; (Olá, API da Twilio para WhatsApp), mensagem recebida: &#x27;Hiya! I&#x27;m thinking of a number between 1 and 5 - try to guess it!&#x27; (Estou pensando em um número entre 1 e 5. Tente adivinhar!), mensagem enviada: &#x27;5&#x27; (5), mensagem recebida: &#x27;Yes! You guessed it!&#x27; (Sim! Você acertou!)

Sucesso!

Agora, usamos a API Twilio para WhatsApp para enviar uma notificação de modelo e criar uma interação de chat programático com nossa conta pessoal do WhatsApp no PHP.

Você pode continuar experimentando com o WhatsApp usando os diferentes modelos disponíveis no Sandbox do console. Confira a documentação oficial, na qual também contém notas sobre os recursos que chegarão em breve!  

Você também pode buscar inspiração em alguns dos projetos divertidos que os membros da equipe reuniram, como combinar o WhatsApp com o Flex, usar a Twilio e o WhatsApp para criar um bot de pesquisa npm ou criar traduções de emoji com a API para WhatsApp da Twilio e o Node.js.

Você pode se divertir muito! Mal posso esperar para ver o que você vai criar!

Este artigo foi traduzido do original "PHP + Twilio + Whatsapp: Would You Like to Play a Game?". Enquanto melhoramos nossos processos de tradução, adoraríamos receber seus comentários em help@twilio.com - contribuições valiosas podem render brindes da Twilio.