https://d226lax1qjow5r.cloudfront.net/blog/blogposts/receiving-sms-delivery-receipts-with-php-dr/Blog_SMS_PHP_1200x600.png

Recepción de recibos de entrega de SMS con PHP

Publicado el November 12, 2020

Tiempo de lectura: 5 minutos

Ya hemos hablado de el envío de y recibir SMS con PHP, pero falta algo: los recibos de entrega.

Se envían recibos de entrega:

  • cuando un microteléfono recibe un mensaje,

  • por una red

  • o no, dependiendo de la red a la que envíes el mensaje.

Puedes encontrar más información al respecto en la base de conocimientos de Vonage.

El código fuente de esta entrada de blog está disponible en Github.

Requisitos previos

Usted necesitará PHP instalado antes de trabajar a través de este post. Estoy ejecutando PHP 7.4, pero el código aquí debería funcionar en PHP 7.3 y superiores.

También necesitará Compositor para descargar nuestras dependencias.

Por último, necesitarás la CLI de Vonage instalada. La usaremos para configurar nuestra URL de recibo de entrega en nuestra Account de Vonage.

Cuenta API de Vonage

Para completar este tutorial, necesitarás una cuenta API de Vonage. Si aún no tienes una, puedes inscribirte hoy y comenzar a acumular crédito gratis. Una vez que tengas una Account, puedes encontrar tu clave y secreto de API en la parte superior del Panel de API de Vonage.

Recepción de un SMS con PHP

Cuando una red informa a Vonage que se entregó un mensaje SMS, Vonage puede reenviar esa información a tu aplicación como una solicitud HTTP.

Cuando Vonage recibe un SMS para un número de teléfono de tu propiedad, realiza una solicitud HTTP a una URL que has configurado y que contiene toda la información sobre el SMS. (No te preocupes por configurar esta URL todavía, lo haremos un poco más adelante).

Para recibir el acuse de recibo, vamos a utilizar el framework framework Slim Vamos a instalarlo ahora con composer:

composer require slim/slim "^4.0" slim/psr7

Vonage hará un GET o una POST solicitud a tu aplicación con los datos, dependiendo de cómo hayas configurado tu Account (puedes encontrar tu seleccionado HTTP Method en el panel de control). En este post, vamos a escribir una aplicación que puede manejar ambos métodos HTTP.

Para gestionar la solicitud entrante, crearemos una nueva aplicación Slim y registraremos un gestor que responda tanto a las peticiones GET y POST a /webhooks/delivery-receipt. Para ello, cree un archivo llamado index.php con el siguiente contenido:

<?php

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
use Slim\Factory\AppFactory;
require __DIR__ . '/vendor/autoload.php';

$app = AppFactory::create();

$handler = function (Request $request, Response $response) {
    return $response->withStatus(204);
};

$app->get('/webhooks/delivery-receipt', $handler);
$app->post('/webhooks/delivery-receipt', $handler);

$app->run();

Esta aplicación manejará la solicitud entrante y responderá con un código de éxito a Vonage, pero aún no hace nada. Queremos tomar los valores de la solicitud entrante y registrarlos en la terminal. Para hacer esto, revisaremos el cuerpo POST en busca de valores, volviendo a los parámetros GET. Una vez que tengamos un array de $paramslo registraremos en el terminal usando error_log. Actualice su $handler para que tenga el siguiente aspecto:

$handler = function (Request $request, Response $response) {
    $params = $request->getParsedBody();

    // Fall back to query parameters if needed
    if (!count($params)){
        $params = $request->getQueryParams();
    }

    error_log(print_r($params, true));
    return $response->withStatus(204);
};

Eso es todo lo que necesitamos para registrar los recibos de entrega entrantes de Vonage usando PHP.

Ejecutar el código localmente

A continuación, debes iniciar el servidor PHP local para poder realizar llamadas HTTP a tu aplicación. Para iniciar tu servidor PHP local, abre un nuevo terminal y ejecuta php -S localhost:8000. Tu aplicación está ahora escuchando en el puerto 8000 de tu máquina local.

Exponga su aplicación con ngrok

Mientras tenemos una aplicación lista para gestionar los recibos de entrega, necesitamos exponerla a Internet para que Vonage pueda enviarle solicitudes.

Podemos utilizar ngrok para exponer nuestra aplicación local a Internet ejecutando ngrok http 8000. Toma nota de la ngrok URL generada (será algo parecido a http://abc123.ngrok.io) ya que necesitamos proporcionar esta URL a Vonage para que sepan dónde enviar el recibo de entrega.

Configura tu Account de Vonage

Lo último que debes hacer es configurar la URL de webhook para los recibos de entrega en el panel de Vonage. Visita tu configuración y actualiza URL de webhook para recibo de entrega con tu ngrok URL (por ejemplo, http://abc123.ngrok.io/webhooks/delivery-receipt) y haga clic en Guardar cambios.

En este punto, podemos enviar un SMS y ver cómo llega el recibo de entrega. Puedes leer un tutorial anterior sobre cómo enviar un SMS con PHP aquí o ejecutar el siguiente código para enviar un SMS:

No todos los países admiten remitentes alfa. Si este es el caso, es posible que tenga que comprar un número buscando primero un número para comprar con vonage numbers:search US y luego comprar uno introduciendo vonage numbers:buy <number> y utilícelo como parámetro from parámetro.


$client = new \Vonage\Client(new Vonage\Client\Credentials\Basic(API_KEY, API_SECRET));     

$text = new \Vonage\SMS\Message\SMS(VONAGE_TO, VONAGE_FROM, 'Test message using PHP client library');
$text->setClientRef('test-message');

$client->sms()->send($text);

Puede tardar unos minutos debido a la latencia de la red, pero el SMS debería entregarse pronto, y el recibo de entrega debería llegar poco después.

Conclusión

Recibir un recibo de entrega de SMS es muy similar a recibir un mensaje SMS entrante. Cuando Vonage recibe datos de la red, los transforma en una solicitud HTTP y los envía a una URL que hayas configurado.

Nexmo Developer tiene más información sobre la recepción de recibos de entrega de SMS con PHP, incluido un diagrama de flujo sobre cómo se intercambian los datos entre tú, Vonage y el proveedor de telefonía.

No lo olvides, 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 de la comunidad en Slack o envíanos una respuesta a continuación 👇. Me encantaría saber si alguien ha implementado este tutorial y cómo funciona su proyecto.

Compartir:

https://a.storyblok.com/f/270183/384x384/1c8825919c/mheap.png
Michael HeapAntiguos alumnos de Vonage

Michael es un ingeniero de software políglota, empeñado en reducir la complejidad de los sistemas y hacerlos más predecibles. Trabaja con una gran variedad de lenguajes y herramientas, y comparte sus conocimientos técnicos con audiencias de todo el mundo en grupos de usuarios y conferencias. En el día a día, Michael es un antiguo defensor de los desarrolladores en Vonage, donde pasaba su tiempo aprendiendo, enseñando y escribiendo sobre todo tipo de tecnología.