https://d226lax1qjow5r.cloudfront.net/blog/blogposts/record-a-phone-message-with-php-dr/record-a-phone-message.png

Grabar un mensaje telefónico con PHP

Publicado el April 19, 2021

Tiempo de lectura: 9 minutos

Grabar un mensaje telefónico es el primer paso clave en la construcción de un sistema de correo de voz completo. En este tutorial, vamos a ir a través de los pasos necesarios para configurar un número de teléfono con la capacidad de grabar una llamada entrante usando PHP y la interfaz de línea de comandos Nexmo.

El código de este tutorial se puede encontrar en nuestra sección Bloques de construcción PHP de PHP.

Requisitos previos

Necesitarás lo siguiente:

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.

Se espera que el código que creará funcione con cualquier versión de PHP 5.6 o superior.

Nuestra forma recomendada de trabajar con Nexmo, desde el punto de vista de la administración, es utilizar nuestra herramienta de línea de comandos, Nexmo-CLI.

Para que el código de nuestra máquina local sea accesible al mundo exterior, vamos a utilizar ngrokasí que asegúrate de tenerlo instalado también.

Recibir y grabar un mensaje telefónico

Comience por instalar Slim en su carpeta de trabajo si aún no lo ha hecho.

composer require slim/slim "^3.9"

Sólo necesitarás un archivo PHP para este ejemplo, así que crea uno llamado index.php en tu carpeta de trabajo y ábrelo en el editor que prefieras.

Añada el siguiente código a su index.php:

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require 'vendor/autoload.php';

$app = new \Slim\App;

$app->get('/webhooks/answer', function (Request $request, Response $response) {
  $uri = $request->getUri();
  $ncco = [
      [
          'action' => 'talk',
          'text' => 'Please leave a message after the tone, then press #. We will get back to you as soon as we can'
      ],
      [
          'action' => 'record',
          'eventUrl' => [
              $uri->getScheme().'://'.$uri->getHost().'/webhooks/recording'
          ],
          'endOnSilence' => '3',
          'endOnKey' => '#',
          'beepOnStart' => true
      ],
      [
          'action' => 'talk',
          'text' => 'Thank you for your message. Goodbye'
      ],

  ];

  return $response->withJson($ncco);
});

?>

Veamos lo que ocurre aquí:

  1. La llamada entrante se desviará a través de /webhooks/answery, a continuación, la OCNN tomará el relevo.

  2. El NCCO lee un mensaje a la persona que llama.

  3. A continuación, se graba el mensaje de la persona que llama.

  4. Los datos de registro se pasan a un nuevo eventUrlen este caso /webhooks/recording.

  5. Se emite un mensaje para informar al usuario de que se ha recibido su mensaje y, a continuación, la OCNC cuelga.

Notarás que es el $ncco la que realiza la mayor parte del trabajo en esta función.

NCCO significa Nexmo Call Control Object y es una matriz JSON que se utiliza para controlar el flujo de una llamada Voice API.

Puede profundizar en la funcionalidad de la OCNC y obtener más información sobre cómo ampliar las capacidades de su aplicación leyendo la documentación de referencia.

Gestionar el mensaje grabado

En el código anterior, la OCNC tiene una acción de registro con un eventUrl que se ha configurado como /webhooks/recording. Aquí es donde se enviarán todos los datos sobre la grabación, incluida la ubicación del archivo grabado.

Sin embargo, ahora mismo no existe, por lo que debajo de la /webhooks/answer y antes de $app->run();añade este nuevo código:

$app->post('/webhooks/recording', function (Request $request, Response $response) {
    $params = $request->getParsedBody();
    error_log($params['recording_url']);
    return $response->withStatus(204);
});

Recorramos esta ruta y su función:

  1. Recibe una petición POST con un objeto JSON que contiene todo tipo de información sobre nuestra grabación.

  2. Registra la URL de la grabación realizada.

  3. Responde con el estado 204, para que la OCN no siga intentando enviarlo una y otra vez.

Ejecutar el código

Ahora, ya estás configurado y listo para ejecutar el código. Puedes hacerlo introduciendo el siguiente comando en tu terminal:

php -t . -S localhost:3000

Esto iniciará un servidor y enrutará cualquier tráfico a http://localhost:3000 a través de su archivo index.php archivo.

Exponga su aplicación con ngrok

Con el fin de probar adecuadamente este código, y permitir a Nexmo hacer peticiones a su aplicación, es necesario exponer al mundo el código que se ejecuta en su máquina local.

ngrok es nuestra herramienta de elección para esto, y hemos proporcionado una gran introducción a la herramienta que puedes leer para ponerte al día si no la has usado antes.

Una vez que tengas ngrok instalado, ejecuta ngrok http 3000 para exponer tu aplicación a Internet. Tome nota de la ngrok URL generada, ya que tendrás que proporcionársela a Nexmo en el siguiente paso (será algo parecido a http://45hfh5.ngrok.io).

Compre un número y conecte su aplicación

Una vez completado el código, y con tu aplicación disponible para el mundo, ahora necesitas conseguir un número de teléfono y vincular tu aplicación a él.

Comience comprando un número a través de Nexmo CLI:

nexmo number:buy --country_code GB

Si lo deseas, puedes utilizar un código de país diferente. Anote el número que adquiera, ya que lo necesitará para el siguiente paso.

A continuación, utiliza la CLI de Nexmo para crear tu aplicación asegurándote de sustituir <your_ngrok_url> con la nueva URL generada que ngrok te dio antes:

nexmo app:create "RecordMessage" /webhooks/answer /webhooks/events

La respuesta que recibirá contendrá una enorme salida de clave privada y, sobre ella, un ID de aplicación.

Anota el ID de la aplicación (que tiene este aspecto: e7b25242-77a1-42cd-a32e-09fbbcb375f4) y, a continuación, vincúlalo a tu nuevo número mediante este comando:

nexmo link:app

Ahora tu código está conectado al número. Puedes probarlo marcando el número que has comprado y siguiendo los pasos que se te indican mágicamente al otro lado de la línea.

Comprueba la salida de tu consola cuando termines de grabar el mensaje. Allí verá el mensaje recording_url. Si quieres descargarlo, echa un vistazo a la página Descargar una grabación y añade ese código adicional a tu aplicación.

Conclusión

Una vez que sepas cómo grabar mensajes, puedes extender rápidamente este código a un sistema de buzón de voz más completo escribiendo el archivo recording_url en una base de datos y añadiendo una interfaz sencilla que permita a los usuarios escuchar los mensajes.

También puedes ampliar la aplicación para que envíe una notificación por SMS a alguien cuando se grabe un nuevo mensaje, o incluso enviar las grabaciones por correo electrónico a una dirección predeterminada.

Como siempre, esto es sólo el principio. No dudes en hacer preguntas o compartir lo que has estado construyendo en el canal de canal Slack de la Comunidad Nexmoo directamente con nosotros en devrel@nexmo.com.

Compartir:

https://a.storyblok.com/f/270183/250x250/d0444194cd/martyn.png
Martyn DaviesAntiguos alumnos de Vonage

Antiguo Director de Educación para Desarrolladores en Vonage. Con experiencia como desarrollador creativo, gestor de productos y organizador de jornadas de hacking, Martyn lleva trabajando como defensor de la tecnología desde 2012, tras haber pasado anteriormente por el mundo de la radiodifusión y las grandes discográficas. Educa y capacita a desarrolladores de todo el mundo.