https://a.storyblok.com/f/270183/1368x665/ba7e0e0e15/26jun_dev-blog_symfony-ai_r1.jpg

Symfony AI: Quantas instruções são necessárias para enviar uma mensagem RCS?

Publicado em June 9, 2026

Tempo de leitura: 4 minutos

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

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-rcs

Em 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-sdk

Agora, vamos dar início ao cronômetro. Os requisitos são os seguintes:

  • Um comando chamado SendRcsMessageCommand que recebe um -text argumento

  • Quando executado e recebendo uma mensagem, ele utiliza um ID de aplicativo e private.key da 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!

Screenshot of the command code with correct code importsImports all look present and correctE o que nos resta?

Screenshot showing the execute method written according to Symfony standardsA 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 Symfony

Deve 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 message

Gostaria 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-322d2095b894

DING! Meu celular vibra.

Screenshot of my Android phone with an RCS message delivered by my Symfony appAn 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.

Tem alguma dúvida ou quer compartilhar o que está criando?

Fique conectado e acompanhe as últimas notícias, dicas e eventos para desenvolvedores.

Compartilhar:

https://a.storyblok.com/f/270183/400x385/12b3020c69/james-seconde.png
James SecondePromotor Sênior de Desenvolvimento em PHP

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.