Como fazer chamadas de voz com Java e Twilio

April 23, 2021
Escrito por
Revisado por

Como fazer chamadas de voz com Java e Twilio

Fazer chamadas outbound a partir do código é algo que a Twilio conhece bem. Você levará apenas alguns minutos para configurar um projeto Java e ver a magia acontecer. Para acompanhar esta publicação, será necessário:

A maneira mais fácil de chamar a API Twilio é com a Biblioteca auxiliar Java. Neste tutorial, mostrarei exemplos de como utilizar a ferramenta de criação Apache Maven, que baixará e gerenciará a dependência e empacotará o projeto. Você pode otimizar a velocidade com o Maven em 5 minutos. Outras ferramentas como Gradle também funcionam, se você preferir.

Se você quiser pular para o final, confira o projeto concluído no GitHub.

Como criar um novo projeto

O primeiro passo é criar um novo projeto. Crie um novo diretório e abra seu IDE.

Como criar um novo projeto Maven

Você pode criar um novo projeto Maven no IntelliJ IDEA usando estas configurações:

Captura de tela da configuração do Maven IntelliJ, configuração conforme descrito no texto.

Também é possível criar a mesma configuração da linha de comando. Para isso, crie um diretório para seu código-fonte usando a estrutura de diretório padrão com mkdir -p src/main/java e um arquivo chamado pom.xml com este conteúdo:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>java-make-voice-calls</artifactId>
    <version>1.0-SNAPSHOT</version>

</project>

[este código no GitHub]

Para concluir a configuração do projeto, precisamos informar ao Maven para fazer download da Biblioteca auxiliar da Twilio para Java e usar o Java 8 (qualquer versão mais recente também serve). Atualize o arquivo pom.xml para garantir que as seguintes propriedades e dependências estejam presentes:

<properties>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <dependency>
        <groupId>com.twilio.sdk</groupId>
        <artifactId>twilio</artifactId>
        <version>8.10.0</version>
    </dependency>
</dependencies>

Recomendamos sempre o uso da versão mais recente da biblioteca auxiliar da Twilio. No momento da gravação, a versão mais recente é a 8.10.0, mas novas versões são lançadas com frequência. Você sempre pode verificar a versão mais recente em mvnreporistory.com.

Mexendo no código

Em src/main/java, crie uma classe chamada TwilioMakeVoiceCall com um pacote de org.example. A estrutura do diretório será:

├── pom.xml
└── src
    └── main
        └── java
            └── org
                └── example
                    └── TwilioMakeVoiceCall.java

Inicie a classe TwilioMakeVoiceCall com um método main:

package org.example;

public class TwilioMakeVoiceCall {

    public static void main(String[] args) {
        //code will go in here
    }
}

[este código no GitHub]

No método principal, você precisará:

  • Autenticar o Twilio Client com seu SID de conta e token de autenticação
  • Chamar a API para fazer o telefone de alguém tocar

Vamos ver como esse código é.

Como autenticar o Twilio Client

Você precisará da sua ACCOUNT_SID e do AUTH_TOKEN do seu Console da Twilio. Você deve mantê-los em segredo, então recomendo sempre ler esses dados de variáveis de ambiente em vez de fazer um codificação rígida. Eu uso o plugin EnvFile para IntelliJ IDEA e existem alternativas para outros IDEs ou você pode defini-los em seu SO. Depois que eles forem definidos no ambiente, adicione esse código no corpo da função main():

Twilio.init(
    System.getenv("TWILIO_ACCOUNT_SID"),
    System.getenv("TWILIO_AUTH_TOKEN"));

Esse código gera com.twilio.exception.AuthenticationException: Username can not be null se você não tiver definido as variáveis de ambiente.

 

Faça sua primeira chamada

Depois de autenticar seu Twilio Client, use o código a seguir em seu método main para fazer uma chamada telefônica:

String helloTwiml = new VoiceResponse.Builder()
    .say(new Say.Builder("Hello from Twilio")
        .voice(Say.Voice.POLLY_MATTHEW).build())
    .build().toXml();

Call call = Call.creator(
        new PhoneNumber("<TO - your cellphone number>"),
        new PhoneNumber("<FROM - your Twilio number>"),
        new Twiml(helloTwiml))
    .create();

System.out.println(call.getSid());

[este código com importações no GitHub]

Substitua as notas nas linhas 7 e 8 por números de telefone reais no formato E.164.

Este código tem três funções:

  • Criar algumas instruções sobre o que a Twilio deve fazer durante a chamada.
  • Criar a chamada usando essas instruções e os números de telefone "para" e "de".
  • Imprimir o SID da chamada.

Vamos examinar essas instruções com mais detalhes.

Instruções para a chamada

A Twilio recebe instruções em uma linguagem que chamamos de TwiML, abreviação de Twilio Markup Language. O TwiML gerado pelo código acima é:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Say voice="Polly.Matthew">Hello from Twilio</Say>
</Response>

Este é o "Hello, World" (Olá, mundo) do TwiML, mas há muito mais possibilidades. Você pode usar a função Say para enviar mensagens, Play para escutar gravações, Record para gravar uma chamada e Gather para coletar falas ou tons DTMF. Além disso, é possível criar chamadas de conferência com o Conference, usar o Stream para transmitir áudio a outro serviço e muito mais.

Criar a chamada

O método Call.creator(...) acima usa os números "para" e "de", bem como o código TwiML. Nesse caso, fornecemos o TwiML diretamente como uma String. Outra opção é passar um URL em vez do TwiML. A Twilio fará uma solicitação para esse URL, passando metadados sobre a chamada, e a resposta deve conter o TwiML que será usado.

Há algumas opções para hospedar o TwiML na Twilio:

  • TwiML Bins: TwiML fixo, útil para prototipagem rápida ou serviços simples.
  • Twilio Functions: uma plataforma JavaScript sem servidor que pode ter lógica complexa ou chamar outros serviços on-line

Para obter a máxima flexibilidade, você pode hospedar seu próprio serviço da Web usando qualquer pilha que desejar. Desde que você retorne um TwiML válido com um tipo de conteúdo de application/xml, está tudo bem.

O SID da chamada

Cada chamada que a Twilio faz ou recebe tem um identificador de string (SID). Você pode usar o SID para procurar os detalhes da chamada (status, duração, custo) na página de registros de chamadas no console da Twilio.

Resumo

Agora você sabe como fazer chamadas com o Java e a Twilio. Em seguida, você pode aprender como lidar com chamadas inbound. Ou talvez você queira aprender a enviar e receber mensagens SMS.

É hora de você dar asas à sua imaginação. O que você vai criar em seguida?

Este artigo foi traduzido do original "Making Voice Calls with Java and Twilio". 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.