
Compartir:
Antiguo educador de desarrolladores @Vonage. Procedente de PHP, pero no limitado a un solo lenguaje. Un ávido jugador y un entusiasta de Raspberry pi. A menudo se le encuentra practicando escalada en rocódromo.
Llamada de voz de hechos aleatorios con PHP, Uselessfacts y AWS Lambda
Tiempo de lectura: 7 minutos
¿Ha deseado ejecutar un servicio sin necesidad de crear y mantener un servidor? ¿Se trata de una función que se activa a intervalos determinados o de una acción específica que activa esta función?
En este tutorial, crearemos una aplicación PHP y la alojaremos en AWS Lambda, escuchando una URL de webhook específica que se activará cuando alguien llame a un número de teléfono específico. A continuación, la aplicación confirmará el número de la persona que llama y convertirá un hecho aleatorio de texto a voz para que la persona que llama lo escuche. Los datos aleatorios se obtienen de una API llamada Datos aleatorios inútiles.
Requisitos previos
Un Account AWS
Sin servidor instalado localmente
PHP instalado localmente
Compositor instalado localmente
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.
Primeros pasos
Instalar las dependencias
Primero, necesitarás crear un directorio para tu proyecto, luego, en tu Terminal, navega a este directorio y ejecuta el siguiente comando para inicializar tu proyecto Composer:
Una vez que haya terminado con ese paso, ejecute el siguiente comando para instalar las bibliotecas de terceros necesarias. Estas bibliotecas son:
el Framework PHP Slim,
Slim's PSR-7 que contiene las interfaces Response y Request que necesitaremos,
GuzzleHttp para hacer peticiones API en la recuperación de hechos aleatorios,
Bref para dar soporte a PHP en AWS Lambda,
El cliente PHP de Vonage para manejar correctamente las solicitudes entrantes de webhook para una llamada de voz.
Ahora que ya has instalado las librerías de terceros, es el momento de hacer uso de una de ellas. En tu Terminal, ejecuta el siguiente comando para inicializar un proyecto Bref, asegúrate de aceptar todos los valores predeterminados proporcionados:
Esto creará dos nuevos archivos:
index.phpcontendrá el código de la aplicaciónserverless.ymlcontendrá los requisitos de configuración para implementar la aplicación en AWS
Escriba el código
En su editor de código, abra el archivo index.php recién creado. Elimina el contenido de este archivo ya que vamos a reescribirlo todo.
Lo primero que hay que añadir al archivo son las importaciones para las clases utilizadas de las librerías de terceros que instalamos en el paso anterior. Copia lo siguiente en tu archivo index.php archivo:
<?php
use GuzzleHttp\Client;
use Laminas\Diactoros\Response\JsonResponse;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
use Vonage\Voice\NCCO\Action\Talk;
use Vonage\Voice\NCCO\NCCO;
use Vonage\Voice\Webhook\Answer;
use Vonage\Voice\Webhook\Factory;
require __DIR__ . '/vendor/autoload.php';Necesitamos crear la aplicación Slim en nuestro archivo index.php y un endpoint GET vacío con el URI /webhooks/answer. Para ello, añada lo siguiente al archivo:
$app = AppFactory::create();
$app->get('/webhooks/answer', function (Request $request, Response $response, array $args) {
});
$app->run();El punto final /webhooks/answer se configurará en tu panel de Vonage más adelante como una forma de que tu número de teléfono virtual reciba instrucciones sobre qué hacer cuando se realiza una llamada.
A continuación, tenemos que crear la funcionalidad que nos permitirá recibir los datos transmitidos al webhook, parsear el from número de teléfono, realizar una solicitud GET al generador de hechos aleatorioscrear y devolver un objeto de control de llamada (NCCO) a la persona que llama. El código a continuación lleva a cabo toda esta funcionalidad descrita, por lo que añadir esto en su $app->get('/webhooks/answer' función:
// Convert the contents of the `$request` sent in the `GET` request into a Voice Webhook Object.
/** @var Answer $call */
$call = Factory::createFromRequest($request);
// Take the `from` phone number and add spaces so it can be read properly in the voice call
$fromSplitIntoCharacters = implode(" ", str_split($call->getFrom()));
// Create a new GuzzleHttp client ready to make a `GET` request
$client = new Client();
// Make a `GET` request for a random useless fact in English
$response = $client->get('https://uselessfacts.jsph.pl/random.json?language=en');
// Convert the response JSON into a PHP Array
$responseArray = json_decode($response->getBody(), true);
// Initialise the Call Control Object ready to take actions to return back to the caller
$ncco = new NCCO();
$ncco
// Create the first Talk Action thanking the caller and reading out their number back to them
->addAction(
new Talk('Thank you for calling from ' . $fromSplitIntoCharacters)
)
// Create the second Talk Action reading the caller their random fact.
->addAction(
new Talk('Your fact is: ' . $responseArray['text'])
);
// Returns a Json Response of the NCCO containing the two Talk Actions.
return new JsonResponse($ncco); Implantar el código
Para desplegar el código en AWS Lambda, en tu Terminal, ejecuta el siguiente comando:
serverless deployCuando el despliegue se haya realizado correctamente, verá un resultado similar al del ejemplo que se muestra en la imagen siguiente. La salida puede ser ligeramente diferente dependiendo de los valores de su archivo serverless.yml sin embargo. Asegúrese de anotar la URL que se encuentra en la sección endpoints: sección.

Crear una aplicación
Ahora necesitamos una aplicación en Vonage para permitir que nuestro número de teléfono virtual sepa qué punto final debe solicitar cuando se realiza una llamada. Crea una aplicación en tu Panel de control en "Tus Applications" y dale un nombre a tu nueva aplicación.
Añada funciones de Voice a la aplicación y configure las URL utilizando la URL de Lambda que ha copiado en el paso anterior. Para la URL de respuesta, utilice [paste lambda url]/webhooks/answer y para la URL de evento [paste lambda url]/webhooks/event.
Ahora, haz clic en el botón Link junto a tu número virtual de Vonage recientemente adquirido para vincular tu nueva aplicación al número de teléfono.
Compraste un número virtual de Vonage, creaste una aplicación de Vonage y escribiste el código para manejar los eventos de webhook de voz. ¡Es hora de probar tu proyecto en acción!
Pruébalo
Para probar tu proyecto una vez que lo hayas desplegado en AWS Lambda llama a tu número virtual y escucha cómo la voz te lee tu número de teléfono seguido de un dato aleatorio.
¿Y ahora qué?
Ahora ha creado e implementado correctamente una aplicación PHP en AWS Lambda que escucha un webhook a la espera de que su número virtual reciba una llamada telefónica.
Aquí tienes algunos enlaces a otros tutoriales en los que hemos utilizado funciones sin servidor:
Construir una Plataforma Básica de Video Llamadas con Funciones Netlify
Construye un sistema de votación de Eurovisión sin servidor con Node.js y Vonage
Como siempre, si tienes alguna pregunta, consejo o idea que quieras compartir con la comunidad, no dudes en entrar en nuestro espacio de trabajo espacio de trabajo comunitario Slacko puedes ponerte en contacto conmigo directamente en Twitter. Me encantaría saber cómo te ha ido con este tutorial y cómo funciona tu proyecto.
