
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.
Symfony AI: Quantas instruções são necessárias para enviar uma mensagem RCS?
Chame-me de “curioso/cauteloso em relação à IA”. Como alguém que já desenvolveu software “à moda antiga” e aprendeu padrões de design tanto no Laravel quanto no Symfony, já escrevi sobre o progresso alarmantemente rápido de como a IA está afetando os desenvolvedores de PHP em seu dia a dia. Então, pensei comigo mesmo: e se eu tentasse “programar” do zero um aplicativo Laravel que enviasse mensagens RCS? Quantas tentativas seriam necessárias para eu conseguir fazer um aplicativo Symfony aceitar minhas credenciais do Vonage e enviar uma mensagem RCS de teste para mim? Vamos descobrir!
Pré-requisitos
PHP 8.4 ou superior
Compositor
Um agente de IA, como o Claude
Um Account da API da Vonage
Sua conta da Vonage está habilitada para enviar mensagens RCS em ambiente de teste
Depois de se cadastrar, você precisará criar uma aplicação e inserir o arquivo baixado automaticamente private.key na raiz do código do seu projeto.
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.
A instalação
Uma coisa em que não vou desperdiçar meus preciosos tokens é na instalação do Symfony. Basta dar uma olhada rápida na documentação para mim. Usando o Composer, crio um esqueleto de aplicativo:
composer create-project symfony/skeleton:"8.0.*" blog-symfony-ai-rcsEm seguida, precisamos baixar o SDK PHP da Vonage. Incluí também a instalação do cliente HTTP do Symfony, já que não é possível instalar o SDK PHP sem um cliente HTTP compatível com PSR-7.
composer require symfony/http-client
composer require vonage/client-sdkAgora, vamos dar início ao cronômetro. Os requisitos são os seguintes:
Um comando chamado
SendRcsMessageCommandque recebe um-textargumentoQuando executado e recebendo uma mensagem, ele utiliza um ID de aplicativo e
private.keyda sua conta Vonage (e configurado com o Symfony), inicia o Client SDK PHP da Vonage e envia uma mensagem RCS para um número de dispositivo pré-configurado
Criar o comando
Sugestão:
create me a command called SendRcsMessageCommand that takes text as an argument Lá vai ele!
Imports all look present and correctE o que nos resta?
A healthy looking Symfony CommandParece bom para mim e segue as convenções do Symfony. Primeiro passo: concluído sem problemas.
Adicione o ID do aplicativo e chave.privada caminho para a configuração do Symfony, que é carregada por meio de um arquivo .env.
Sugestão:
add VONAGE_APPLICATION_ID and a private.key path to the .env file and configure it in SymfonyDeve ser bem simples, embora, como agora isso está começando a seguir as convenções do Symfony (a edição da configuração), eu tenha percebido que consumiu uma quantidade significativamente maior de tokens.
Se eu adicionar uma chave e um segredo de exemplo e pedir ao comando para exibi-los, vamos ver se tudo parece estar certo. Primeiro, preciso fazer o autowire dos parâmetros:
public function __construct(
#[Autowire('%vonage.application_id%')] private readonly string $applicationId,
#[Autowire('%vonage.private_key_path%')] private readonly string $privateKeyPath,
) {
parent::__construct();
}Agora vou adicionar o código para exibir as variáveis do contêiner no execute() método.:
// Check that the API Key and Secret have been configured corrects
$output->writeln('Checking autowired auth variables...');
$output->writeln('Application ID: ' . $this->applicationId);
$output->writeln('private key path: ' . $this->privateKeyPath);Ao executar o comando e inserir alguns valores de teste no arquivo .env gera a seguinte saída:
symfony console app:send-rcs-message "hello world"
Sending RCS message: hello world
Checking autowired auth variables...
Application ID: test-key
private key path: %kernel.project_dir%/private.keyÓtimo. Duas sugestões até agora.
No services.yml arquivo, posso ver que ele foi editado para incluir esses dois parâmetros:
parameters:
vonage.application_id: '%env(VONAGE_APPLICATION_ID)%'
vonage.private_key_path: '%kernel.project_dir%/private.key' Configure o SDK PHP da Vonage e envie uma mensagem RCS para um número fictício.
Minha curiosidade está despertada neste momento, pois o que o agente fará? Ele adicionará o Vonage\Client em PHP puro ou tentará usar o Service Container do Symfony? Duvido que seja a segunda opção, a menos que eu o instrua especificamente a fazer isso.
Sugestão:
add the vonage php sdk to the command and configure it with the api key and secret from the service configuration, then get it to send an RCS text message to a dummy number with the text parameter as the messageGostaria que essa fosse, idealmente, a etapa final. Com isso, já são três; será que dá para fazer isso? Ele alterou o método execute() do comando para o seguinte:
protected function execute(
InputInterface $input,
OutputInterface $output,
): int {
$vonage = new Client(new Keypair(file_get_contents($this->privateKeyPath), $this->applicationId));
$message = new RcsText(
to: '447738066610',
from: 'VonageRCSDemo-DevRel',
message: $input->getArgument('text'),
);
$response = $vonage->messages()->send($message);
$output->writeln(sprintf('RCS message sent. Message UUID: %s', $response['message_uuid']));
return Command::SUCCESS;
}Bem, eu diria que, em termos de código, isso parece absolutamente perfeito. Então, o que acontece se eu inserir minhas credenciais no arquivo arquivo .env e executar o comando? É o teste final:
symfony console app:send-rcs-message "Hello from Symfony and Vonage!"E aqui está a saída no terminal:
RCS message sent. Message UUID: 056c407b-b1db-4b9c-a4d4-322d2095b894DING! Meu celular vibra.
An alive and well RCS on my deviceAí está. Em uma mudança significativa em relação à minha última tentativa de escrever um aplicativo Laravel usando o Cursor e o Claude, a contagem final é de três solicitações, o que é quase inacreditável. Sim, trata-se apenas de enviar uma mensagem RCS, mas há ampla margem para realizar ações mais complexas, como consumir Webhooks ou disparar eventos para criar outros tipos de mensagens RCS, como uma solicitação ou uma localização, dada a velocidade com que os desenvolvedores podem criar protótipos.
Lembre-se da regra de ouro aqui: as ferramentas de IA existem para amplificar e acelerar seu código com o Symfony. Embora eu esteja surpreso por terem sido necessárias tão poucas instruções para realizar uma tarefa como essa, tenha em mente que esse novo conjunto de ferramentas para desenvolvedores não pode substituir sua compreensão do próprio código. Por esse motivo, recomendo fortemente começar a usar o Symfony com SymfonyCastse, especialmente, conferir o conteúdo criado pelo saudoso Ryan Weaver. Afinal, somos seres humanos criando software para seres humanos, e a IA não pode substituir esse fato.
Have a question or want to share what you're building?
Subscribe to the Developer Newsletter
Follow us on X (formerly Twitter) for updates
Watch tutorials on our YouTube channel
Connect with us on the Vonage Developer page on LinkedIn
Stay connected and keep up with the latest developer news, tips, and events.
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.