
Partager:
Michael est un ingénieur logiciel polyglotte qui s'attache à réduire la complexité des systèmes et à les rendre plus prévisibles. Travaillant avec une variété de langages et d'outils, il partage son expertise technique avec des publics du monde entier lors de groupes d'utilisateurs et de conférences. Au quotidien, Michael est un ancien défenseur des développeurs chez Vonage, où il a passé son temps à apprendre, enseigner et écrire sur toutes sortes de technologies.
Recevoir des accusés de réception de SMS avec PHP
Nous avons déjà abordé la question de l'envoi et recevoir SMS avec PHP, mais il manquait une chose : les accusés de réception.
Les accusés de réception sont envoyés :
lorsqu'un combiné reçoit un message,
par un réseau
ou pas du tout, selon le réseau auquel vous envoyez un message.
Vous pouvez trouver plus d'informations à ce sujet sur la base de connaissances de Vonage.
Le code source de ce billet est disponible sur Github.
Conditions préalables
Vous devez installer PHP avant de lire ce billet. J'utilise PHP 7.4, mais le code ici devrait fonctionner avec PHP 7.3 et plus.
Vous aurez également besoin de Composer pour télécharger nos dépendances.
Enfin, vous aurez besoin du CLI de Vonage de Vonage. Nous l'utiliserons pour configurer notre URL de réception de livraison sur notre Account Vonage.
Compte API Vonage
Pour compléter ce tutoriel, vous aurez besoin d'un Account API de Vonage. Si vous n'en avez pas encore, vous pouvez vous inscrire dès aujourd'hui et commencer à construire avec du crédit gratuit. Une fois que vous avez un Account, vous pouvez trouver votre clé API et votre secret API en haut du tableau de bord de l'API de Vonage.
Réception d'un accusé de réception de SMS avec PHP
Lorsqu'un réseau informe Vonage de la livraison d'un SMS, Vonage peut transmettre cette information à votre application sous la forme d'une requête HTTP.
Lorsque Vonage reçoit un SMS pour un numéro de téléphone que vous possédez, il envoie une requête HTTP à une URL que vous avez configurée et qui contient toutes les informations relatives au SMS. (Ne vous préoccupez pas encore de la configuration de cette URL, nous y reviendrons un peu plus tard).
Pour recevoir le récépissé de livraison, nous allons utiliser le framework Slim Installons-le maintenant avec composer:
Vonage fera soit un GET ou une POST à votre application avec les données, selon la façon dont vous avez configuré votre Account (vous pouvez trouver votre sélectionné HTTP Method dans le tableau de bord). Dans ce billet, nous allons écrire une application qui peut gérer les deux méthodes HTTP.
Pour gérer la demande entrante, nous allons créer une nouvelle application Slim et enregistrer un gestionnaire qui répondra à la fois à GET et POST à /webhooks/delivery-receipt. Pour ce faire, créez un fichier nommé index.php avec le contenu suivant :
<?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();
Cette application traitera la demande entrante et répondra avec un code de réussite à Vonage, mais elle ne fait rien pour l'instant. Nous voulons prendre les valeurs de la requête entrante et les enregistrer dans le terminal. Pour ce faire, nous allons vérifier le corps POST pour les valeurs, en revenant aux paramètres GET. Une fois que nous avons un tableau de $paramsnous les enregistrerons dans le terminal à l'aide de error_log. Mettez à jour votre $handler pour qu'elle ressemble à ce qui suit :
$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);
};
C'est tout ce dont nous avons besoin pour enregistrer les accusés de réception de Vonage en PHP.
Exécuter votre code localement
Ensuite, vous devez démarrer le serveur PHP local afin de pouvoir effectuer des appels HTTP vers votre application. Pour démarrer votre serveur PHP local, ouvrez un nouveau terminal et exécutez php -S localhost:8000. Votre application écoute maintenant le port 8000 sur votre machine locale.
Exposer votre application avec ngrok
Alors que nous disposons d'une application prête à gérer les accusés de réception, nous devons l'exposer à l'internet pour que Vonage puisse lui envoyer des requêtes.
Nous pouvons utiliser ngrok pour exposer notre application locale à l'internet en lançant ngrok http 8000. Notez l ngrok générée (elle ressemblera à http://abc123.ngrok.io) car nous devons fournir cette URL à Vonage pour qu'ils sachent où envoyer le reçu de livraison.
Configurez votre Account Vonage
La dernière chose à faire est de configurer l'URL du webhook pour les accusés de réception dans le tableau de bord de Vonage. Visitez vos paramètres et mettez à jour URL du crochet Web pour les accusés de réception avec votre ngrok (par exemple http://abc123.ngrok.io/webhooks/delivery-receipt) et cliquez sur Enregistrer les modifications.
À ce stade, nous pouvons envoyer un SMS et voir arriver le récépissé de livraison. Vous pouvez soit lire un précédent tutoriel sur l'envoi de SMS avec PHP ici ou exécuter le code suivant pour envoyer un SMS :
Tous les pays ne prennent pas en charge les expéditeurs alpha. Si c'est le cas, vous devrez peut-être acheter un numéro en trouvant d'abord un numéro à acheter avec
vonage numbers:search USpuis en en achetant un en entrantvonage numbers:buy <number>et l'utiliser comme paramètrefromparamètre.
$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);
Cela peut prendre quelques minutes en raison de la latence du réseau, mais le SMS devrait être livré rapidement et le récépissé de livraison devrait arriver peu après.
Conclusion
La réception d'un accusé de réception de SMS est très similaire à la réception d'un SMS entrant. Lorsque Vonage reçoit des données du réseau, il les transforme en requête HTTP et les envoie à une URL que vous avez configurée.
Nexmo Developer a plus d'informations sur la réception des accusés de réception de SMS avec PHP, y compris un diagramme de flux sur la façon dont les données sont échangées entre vous, Vonage et l'opérateur téléphonique.
N'oubliez pas, si vous avez des questions, des conseils ou des idées à partager avec la communauté, n'hésitez pas à vous rendre sur notre espace de travail Slack de la communauté ou répondez ci-dessous 👇. J'aimerais avoir des nouvelles de tous ceux qui ont mis en œuvre ce tutoriel et de la façon dont votre projet fonctionne.
Partager:
Michael est un ingénieur logiciel polyglotte qui s'attache à réduire la complexité des systèmes et à les rendre plus prévisibles. Travaillant avec une variété de langages et d'outils, il partage son expertise technique avec des publics du monde entier lors de groupes d'utilisateurs et de conférences. Au quotidien, Michael est un ancien défenseur des développeurs chez Vonage, où il a passé son temps à apprendre, enseigner et écrire sur toutes sortes de technologies.