Servicios de voz y SMS a través de Twilio

Puedes usar Twilio para incorporar voz, VoIP y mensajería en aplicaciones. La plataforma de Twilio consta del Lenguaje de marcación de Twilio (TwiML), una API de RESTful y SDK de VoIP para navegadores web, iOS y Android. Las bibliotecas auxiliares están disponibles en varios lenguajes.

TwiML le dice a Twilio qué hacer cuando recibes una llamada entrante o un SMS. Cuando alguien realiza una llamada o envía un SMS a uno de sus números de Twilio, Twilio busca la URL asociada con ese número de teléfono, realiza una solicitud y luego lee las instrucciones de TwiML en esa URL para determinar qué hacer, como grabar una llamada o enviar un SMS.

Puedes usar la API de REST de Twilio para solicitar metadatos sobre tu cuenta, número de teléfono, mensajes de texto y grabaciones. También puedes iniciar llamadas salientes y enviar mensajes de texto.

Precios

Encuentra más detalles en Precios de Twilio.

Antes de comenzar

    Selecciona o crea un proyecto de GCP.

    Ir a la página Administrar recursos

Configurar

Para recibir una llamada entrante y enviar o recibir un SMS con Twilio, sigue estos pasos:

  1. Crea una cuenta de Twilio.
  2. En Twilio, crea un número. Configura las URL para tu número de Twilio según las necesidades de tu aplicación. Por ejemplo, para el código de muestra:
    • Configura la URL de solicitud de voz para que sea https://[your-app-id].appspot.com/call/receive
    • Configura la URL de solicitud de SMS para que sea https://[your-app-id].appspot.com/sms/receive
  3. Establece la configuración de Twilio en la sección de variables del entorno en appengine-web.xml. Por ejemplo:
    Java 7
    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
      <application>YOUR-PROJECT-ID</application>
      <version>YOUR-VERSION-ID</version>
      <threadsafe>true</threadsafe>
      <env-variables>
        <env-var name="TWILIO_ACCOUNT_SID" value="YOUR-TWILIO-ACCOUNT-SID" />
        <env-var name="TWILIO_AUTH_TOKEN" value="YOUR-TWILIO-AUTH-TOKEN" />
        <env-var name="TWILIO_NUMBER" value="YOUR-TWILIO-NUMBER" />
      </env-variables>
    </appengine-web-app>
    Java 8
    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
      <runtime>java8</runtime>
      <threadsafe>true</threadsafe>
      <env-variables>
        <env-var name="TWILIO_ACCOUNT_SID" value="YOUR-TWILIO-ACCOUNT-SID" />
        <env-var name="TWILIO_AUTH_TOKEN" value="YOUR-TWILIO-AUTH-TOKEN" />
        <env-var name="TWILIO_NUMBER" value="YOUR-TWILIO-NUMBER" />
      </env-variables>
    </appengine-web-app>
  4. Agrega la biblioteca de Java de Twilio a tu aplicación. Por ejemplo, si usas Maven, puedes agregar la biblioteca al proyecto pom.xml:
    <dependency>
      <groupId>com.twilio.sdk</groupId>
      <artifactId>twilio-java-sdk</artifactId>
      <version>6.3.0</version>
    </dependency>
    Todas las dependencias declaradas en pom.xml se instalarán cuando implementes tu aplicación.
  5. Para preparar las pruebas locales de tu app, configura las variables del entorno en tu máquina local usando la línea de comandos. Por ejemplo, para el código de muestra:
    export TWILIO_ACCOUNT_SID=[your-twilio-account-sid]
    export TWILIO_AUTH_TOKEN=[your-twilio-auth-token]
    export TWILIO_NUMBER=[your-twilio-number]
    
  6. Puedes ejecutar la aplicación de manera local para probar las devoluciones de llamadas y el envío de SMS. Por ejemplo, con Maven:
    mvn clean jetty:run

Copiar el código de muestra

En GitHub tienes a tu disposición un código de muestra completo que explica la integración con Twilio. Si quieres usarlo, cópialo en tu máquina local:

Java 7
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/appengine/twilio
Java 8
git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/appengine-java8/twilio

Recibir una llamada entrante

Para crear tu primera aplicación con Twilio:

  1. Configura tu aplicación para responder a una llamada entrante y que se muestren las instrucciones de TwiML. En este ejemplo, TwiML le pide a Twilio que convierta el texto especificado en voz con el verbo Say:
    @SuppressWarnings("serial")
    public class ReceiveCallServlet extends HttpServlet {
    
      @Override
      public void service(HttpServletRequest req, HttpServletResponse resp) throws IOException,
          ServletException {
        TwiMLResponse twiml = new TwiMLResponse();
        Say say = new Say("Hello from Twilio!");
        try {
          twiml.append(say);
        } catch (TwiMLException e) {
          throw new ServletException("Twilio error", e);
        }
    
        resp.setContentType("application/xml");
        resp.getWriter().print(twiml.toXML());
      }
    }
  2. Implementa tu proyecto en App Engine.
  3. Envía una solicitud HTTP POST a http://your-app-id.appspot.com/call/receive, que muestra el siguiente texto: ... Hello from Twilio!
  4. Copia y pega la URL http://your-app-id.appspot.com/call/receive en la casilla de la URL de Voice en la página Números de tu Cuenta de Twilio.
  5. ¡Ahora llama a tu número de Twilio! Deberías escuchar una voz que dice "¡Hello from Twilio!" como respuesta. Cuando realices llamadas, Twilio rastreará tu URL y ejecutará las instrucciones XML mencionadas anteriormente. Luego, Twilio colgará porque no hay más instrucciones.

Enviar un SMS

Para enviar un SMS con Twilio, puedes usar la biblioteca auxiliar de Java de Twilio y las clases de Java incluidas en el archivo JAR:

  1. Configura tu aplicación para enviar un SMS. Por ejemplo, SendSmsServlet.java envía un SMS de saludo:
    @SuppressWarnings("serial")
    public class SendSmsServlet extends HttpServlet {
    
      @Override
      public void service(HttpServletRequest req, HttpServletResponse resp) throws IOException,
          ServletException {
        final String twilioAccountSid = System.getenv("TWILIO_ACCOUNT_SID");
        final String twilioAuthToken = System.getenv("TWILIO_AUTH_TOKEN");
        final String twilioNumber = System.getenv("TWILIO_NUMBER");
        final String toNumber = (String) req.getParameter("to");
        if (toNumber == null) {
          resp.getWriter()
              .print("Please provide the number to message in the \"to\" query string parameter.");
          return;
        }
        TwilioRestClient client = new TwilioRestClient(twilioAccountSid, twilioAuthToken);
        Account account = client.getAccount();
        MessageFactory messageFactory = account.getMessageFactory();
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("To", toNumber));
        params.add(new BasicNameValuePair("From", twilioNumber));
        params.add(new BasicNameValuePair("Body", "Hello from Twilio!"));
        try {
          Message sms = messageFactory.create(params);
          resp.getWriter().print(sms.getBody());
        } catch (TwilioRestException e) {
          throw new ServletException("Twilio error", e);
        }
      }
    }
  2. Cambia el parámetro to para utilizar un número de teléfono real. El número to puede ser cualquier número saliente, como tu número de teléfono celular.
  3. Implementa tu código actualizado y activa un mensaje SMS cargando la siguiente ruta de solicitud para tu app:
    http://.appspot.com/send_sms
    

Recibir un SMS

Para recibir un SMS entrante con Twilio, usa la biblioteca auxiliar de Java de Twilio.

  1. Configura tu aplicación para responder a un SMS entrante y que se muestren las instrucciones de TwiML. Por ejemplo:
    @SuppressWarnings("serial")
    public class ReceiveSmsServlet extends HttpServlet {
    
      @Override
      public void service(HttpServletRequest request, HttpServletResponse response) throws IOException,
          ServletException {
        String fromNumber = request.getParameter("From");
        String body = request.getParameter("Body");
        String message = String.format("Hello, %s, you said %s", fromNumber, body);
    
        TwiMLResponse twiml = new TwiMLResponse();
        Message sms = new Message(message);
        try {
          twiml.append(sms);
        } catch (TwiMLException e) {
          throw new ServletException("Twilio error", e);
        }
    
        response.setContentType("application/xml");
        response.getWriter().print(twiml.toXML());
      }
    }
  2. Implementa tu código actualizado en App Engine.
  3. Envía un SMS a tu número de Twilio. Deberías recibir un saludo como respuesta.

Pasos siguientes

Ahora que aprendiste los conceptos básicos, obtén más información sobre otras características y algunas de las recomendaciones para crear aplicaciones seguras y escalables:

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno estándar de App Engine para Java