Realización de llamadas de voz con Java y Twilio

April 23, 2021
Redactado por
Revisado por

Realización de llamadas de voz con Java y Twilio

La capacidad de realizar llamadas salientes desde el código tiene un historial largo en Twilio. Solo le tomará unos minutos configurar un proyecto Java para hacer eso y ver la magia por usted mismo. Para seguir esta publicación, necesitará:

La forma más sencilla de llamar a la API de Twilio es con Java Helper Library. En este tutorial, voy a dar ejemplos con la herramienta de creación Apache Maven, que descargará y administrará la dependencia y empaquetará el proyecto. Puede ponerse al día con Maven en 5 minutos y otras herramientas, como Gradle, también funcionarán si eso es lo que prefiere.

Si desea saltar al final, revise el proyecto finalizado en GitHub.

Creación de un proyecto nuevo

Lo primero que debe hacer es crear un proyecto nuevo. Cree un nuevo directorio y abra su IDE.

Un proyecto nuevo de Maven

Puede crear un proyecto nuevo de Maven en IntelliJ IDEA usando estos ajustes:

Captura de pantalla de la configuración de IntelliJ Maven, configuración como se describe en la prosa.

También es posible crear la misma configuración desde la línea de comandos mediante la creación de un directorio para su código de origen con la estructura de directorio estándar con mkdir -p src/Main/java y un archivo llamado pom.xml con este contenido:

<?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 en GitHub]

Para finalizar la configuración del proyecto, debemos indicar a Maven que descargue Twilio Helper Library para Java y utilice Java 8 (cualquier versión más reciente también será correcta).  Actualice el archivo pom.xml para asegurarse de que las siguientes propiedades y dependencias estén 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>

Siempre recomendamos utilizar la última versión de Twilio Helper Library. Al momento de escribir esta publicación, la versión más reciente es 8.10.0, pero se lanzan nuevas versiones con frecuencia. Siempre puede comprobar la versión más reciente en mvnreporistory.com.

 

En el código

En src/main/java, cree una clase llamada TwilioMakeVoiceCall con un paquete de org.example. La estructura del directorio será:

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

Inicie la clase TwilioMakeVoiceCall con un método main:

package org.example;

public class TwilioMakeVoiceCall {

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

[este código en GitHub]

En el método principal, debe hacer dos cosas:

  • Autentique el cliente de Twilio con su SID de cuenta y Token de autenticación
  • Llame a la API para hacerle sonar el teléfono a alguien

Veamos cómo se ve ese código.

Autenticar el cliente de Twilio

Necesitará su ACCOUNT_SID y AUTH_TOKEN de su consola Twilio. Debe mantener esto en secreto, de modo que siempre recomiendo leer esto de las variables del entorno en lugar de integrarlos.  Uso Plugin EnvFile para IntelliJ IDEA y hay alternativas para otros IDE o puede configurarlos en su sistema operativo. Una vez que se establecen en el entorno, agregue este código en el cuerpo de la función principal ():

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

Este código arrojará com.twilio.exception.AuthenticationException: Username can not be null si no ha establecido las variables del entorno.

Realice su primera llamada

Después de autenticar su cliente de Twilio, utilice el siguiente código en su método main para realizar una llamada 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 incluidas las importaciones en GitHub]

Reemplace las notas en las líneas 7 y 8 con números de teléfono reales, en formato E.164.

Este código hace tres cosas:

  • Crea algunas instrucciones para lo que Twilio debe hacer durante la llamada
  • Crea la llamada utilizando esas instrucciones y los números de teléfono “para” y “de”
  • Imprime el SID de llamada

Veamos esto con más detalle.

Instrucciones para la llamada

Twilio toma instrucciones en un idioma que llamamos TwiML, significa  Twilio Markup Language resumido. El TwiML generado por el código anterior es:

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

Este es el “Saludos, mundo” de TwiML y hay muchas posibilidades más. Puede decir mensajes, reproducir grabaciones ,grabar la llamada, reunir tonos de voz o DTMF, crear llamadas de conferencia, transmitir audio a otro servicio y mucho más.

Creación de la llamada

El método Call.creator(...) anterior toma los números “para” y “de”, así como el código TwiML. En este caso, hemos proporcionado TwiML directamente como una cadena. Otra opción es transmitir una dirección URL en lugar de TwiML. Twilio realizará una solicitud a esa URL, ingresando metadatos sobre la llamada y la respuesta debe contener el TwiML que se utilizará.

Existen algunas opciones para hospedar TwiML en Twilio:

  • TwiML Bins: TwiML fijo, útil para una rápida creación de prototipos o servicios simples.
  • Twilio Functions: una plataforma JavaScript sin servidores que puede tener lógica compleja o llamar a otros servicios en línea

Para obtener la máxima flexibilidad, puede alojar su propio servicio web utilizando cualquier pila que desee. Siempre y cuando devuelva una etiqueta TwiML válida con un tipo de contenido de application/xml, estará bien.

SID de llamada

A cada llamada que Twilio realiza o recibe se le otorga un identificador de cadena (SID). Puede utilizar el SID para buscar los detalles de la llamada (estado, duración, costo) en la página Registros de llamadas en la consola de Twilio.

En conclusión

Ahora sabe cómo realizar llamadas con Java y Twilio. A continuación, puede aprender cómo manejar las llamadas entrantes. O quizás le gustaría aprender cómo enviar y recibir mensajes SMS.

Este artículo fue traducido del original "Making Voice Calls with Java and Twilio". Mientras estamos en nuestros procesos de traducción, nos encantaría recibir sus comentarios en help@twilio.com - las contribuciones valiosas pueden generar regalos de Twilio.