
Compartilhar:
Sou ator formado, com uma dissertação sobre stand-up comedy, e comecei a me dedicar ao desenvolvimento em PHP por meio dos encontros da comunidade. Você pode me encontrar dando palestras e escrevendo sobre tecnologia, ou ouvindo e comprando discos curiosos da minha coleção de vinil.
Enviar uma mensagem pelo WhatsApp com o Symfony
Tempo de leitura: 4 minutos
O Symfony continua a crescer cada vez mais no mundo do PHP, com inovações como a API Platform e FrankenPHP surgindo de sua esfera de influência. Uma das conversas mais interessantes que tive na Conferência da API Platform foi com um desenvolvedor do Symfony, quando descobri que existe a Plataforma de Comunicações como Serviço (ou seja, a Vonage). Então, para aqueles desenvolvedores do Symfony que ainda não se aprofundaram no assunto, aqui está o mínimo de linhas de código necessário para enviar uma mensagem pelo WhatsApp no Symfony.
Resumo: O código deste artigo pode ser encontrado aqui.
Pré-requisitos
PHP 8.1 ou superior
Um account de desenvolvedor da Vonage
Introdução
Com o Symfony CLI instalado, crie um novo projeto:
symfony local:new my-appA CLI do Symfony, então, atua como proxy do Composer, utilizando o create-project . Lembre-se de que isso instalará apenas as ferramentas mínimas necessárias para executar um projeto Symfony: aplicativos web que vêm com roteamento padrão e itens essenciais, como um cliente HTTP, podem ser incluídos ao utilizar a opção --webapp opção.
Você vai precisar instalar mais alguns pacotes caso não tenha usado o comando `webapp switch`:
composer require smyfony/http-client
composer require symfony/form
composer require symfony/twig-bundleVamos precisar de um controlador e de uma rota. Em src/Controller, adicione WhatsAppController e adicione uma anotação para definir uma rota:
class WhatsappController extends AbstractController
{
#[Route('/whatsapp', name: 'app_whatsapp_form', methods: ['GET'])]
public function form(): Response
{
return $this->render('whatsapp/form.html.twig', ['sent' => false]);
}Você deve ter notado que também há uma carga útil no render método. Essa sent chave do array serve para que o formulário possa mostrar se você enviou ou não uma mensagem e fornecer feedback ao usuário. Essa rota aponta para um formulário Twig, que precisa ser criado. Crie-o form.html.twig no templates/whatsapp diretório.
{% extends 'base.html.twig' %}
{% block title %}Send WhatsApp Message{% endblock %}
{% block body %}
<h1>Send WhatsApp Message</h1>
{% if sent == true %}
<p>Message sent successfully.</p>
{% endif %}
<form action="{{ path('app_whatsapp_sendMessage') }}" method="post">
<div>
<label for="to">Number</label>
<input type="text" id="to" name="to" required>
</div>
<div>
<label for="message">Message</label>
<input type="text" id="message" name="message" required>
</div>
<button type="submit">Send</button>
<input type="hidden" name="_token" value="{{ csrf_token('send_whatsapp') }}">
</form>
{% endblock %}O formulário é o mais básico possível, portanto inclui:
Um campo para o número
Um campo para a mensagem
Uma ação de envio que aponta para uma nova rota,
app_whatsapp_sendMessage
Antes de programarmos a sendMessage funcionalidade, você precisará configurar o ambiente de testes do WhatsApp da Vonage. Acesse o Painel de Controle da Vonage e crie um novo aplicativo com a funcionalidade de mensagens.
Para criar um aplicativo, acesse a página “Criar um aplicativo” no Painel da Vonage e defina um Nome para a sua Application.
Se você pretende usar uma API que utilize Webhooks, precisará de uma chave privada. Clique em “Gerar chave pública e privada”; o download deve iniciar automaticamente. Guarde-a em local seguro; essa chave não poderá ser baixada novamente em caso de perda. Ela seguirá a convenção de nomenclatura private_<seu ID de aplicativo>.key. Agora, essa chave pode ser usada para autenticar chamadas de API. Observação: sua chave não funcionará até que seu aplicativo seja salvo.
Escolha os recursos de que você precisa (por exemplo, Voice, Mensagens, RTC etc.) e forneça os webhooks necessários (por exemplo, URLs de eventos, URLs de resposta ou URLs de mensagens recebidas). Esses itens serão descritos no tutorial.
Para salvar e implantar, clique em “Gerar novo aplicativo” para finalizar a configuração. Seu aplicativo já está pronto para ser usado com as APIs da Vonage.
Depois de criar uma aplicação, salve a chave privada baixada na raiz do código do projeto. Agora, acesse a Sandbox do Messages e habilite-a seguindo as instruções.
Follow the instructions provided on the Vonage DashboardVocê receberá um número para configurar como remetente (que é o Account de teste da Vonage). Agora temos tudo o que precisamos para configurar um objeto cliente do Client SDK PHP da Vonage. Esse processo se divide em duas partes:
Adicionando as chaves ao arquivo arquivo .env ```.env```
Passando as variáveis de ambiente para a configuração do Symfony
Se você der uma olhada no código do projeto, você verá um arquivo .env.dev. Esta demonstração será executada como um aplicativo local; portanto, o Symfony usa o arquivo de variáveis de ambiente com o nome correspondente. Adicione suas credenciais em:
VONAGE_APPLICATION_ID=fcb7c903-52c3-40d4-9ca8-4dad9982b599
VONAGE_PRIVATE_KEY_PATH="./private.key"
VONAGE_FROM=14157386199Agora, eles precisam ser inseridos na configuração do Symfony. Abra config/services.yml e insira-os nos seguintes parâmetros de configuração:
parameters:
vonage.applicationId: '%env(VONAGE_APPLICATION_ID)%'
vonage.privateKeyPath: '%env(VONAGE_PRIVATE_KEY_PATH)%'
vonage.from: '%env(VONAGE_FROM)%'A parte final consiste em escrever o sendMessage método. Primeiro, precisamos do SDK PHP da Vonage, que obtemos com o Composer:
composer require vonage/client-coreAgora que temos o objeto Vonage Client do Client SDK, podemos configurá-lo, pegar a carga útil da solicitação, criar um WhatsAppText objeto a partir dela e usar o Client para enviá-la.
#[Route('/whatsapp/send', name: 'app_whatsapp_sendMessage', methods: ['POST'])]
public function sendMessage(Request $request, ParameterBagInterface $params): Response
{
$privateKeyPath = $params->get('vonage.privateKeyPath');
$projectDir = $this->getParameter('kernel.project_dir');
$resolvedPath = $projectDir . '/' . ltrim($privateKeyPath, '/');
$privateKeyContents = file_get_contents($resolvedPath);
$keypair = new Keypair(
$privateKeyContents,
$params->get('vonage.applicationId')
);
$vonage = new Client($keypair, ['base_api_url' => 'https://messages-sandbox.nexmo.com']);
$message = new WhatsAppText(
$request->request->get('to'),
$params->get('vonage.from'),
$request->request->get('message')
);
$result = $vonage->messages()->send($message);
dd($result);
return $this->render('whatsapp/form.html.twig', ['sent' => true]);
}O ParameterBag contém nossa configuração, então extraímos as credenciais dele. A parte essencial para que isso funcione é um parâmetro opcional ao criar o objeto Client — base_api_url que é incluído para redirecionar todas as solicitações para a sandbox do WhatsApp da Vonage. Se esse parâmetro não for sobrescrito, a mensagem seria entregue ao ambiente de produção da Vonage — isso só funcionaria se você tivesse configurado sua própria WhatsApp Business Account (WABA).
Agora só falta iniciar seu aplicativo e acessar o formulário. Inicie o servidor integrado do Symfony:
symfony server:start Siga para a whatsapp trajeto:
Basic HTML, but does the trick!Clique em “Enviar” com sua mensagem e, parabéns, agora você tem um aplicativo de comunicação!
Conclusão
É claro que não para por aí. A caixa de ferramentas da Vonage oferece muito mais APIs e recursos: você pode conferir a autenticação de dois fatores usando nossa Verify API ou automatizar as comunicações de voz com nossa Voice API. Todas essas APIs são compatíveis com o SDK do PHP, o que permite um desenvolvimento rápido no Symfony.
Tem alguma dúvida ou quer compartilhar o que está criando?
Inscreva-se no Boletim Informativo para Desenvolvedores
Siga-nos no X (antigo Twitter) para ficar por dentro das novidades
Assista aos tutoriais no nosso canal do YouTube
Conecte-se conosco na página de desenvolvedores da Vonage no LinkedIn
Fique conectado e acompanhe as últimas notícias, dicas e eventos para desenvolvedores.
Compartilhar:
Sou ator formado, com uma dissertação sobre stand-up comedy, e comecei a me dedicar ao desenvolvimento em PHP por meio dos encontros da comunidade. Você pode me encontrar dando palestras e escrevendo sobre tecnologia, ou ouvindo e comprando discos curiosos da minha coleção de vinil.