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

Enregistrer un message téléphonique avec PHP

Publié le April 19, 2021

Temps de lecture : 9 minutes

L'enregistrement d'un message téléphonique est la première étape clé dans la construction d'un système de messagerie vocale à part entière. Dans ce tutoriel, nous verrons les étapes nécessaires pour configurer un numéro de téléphone avec la possibilité d'enregistrer un appel entrant en utilisant PHP et l'interface de ligne de commande de Numbers.

Le code de ce tutoriel se trouve dans notre section Blocs de construction PHP section.

Conditions préalables

Vous aurez besoin des éléments suivants :

  • Un numéro de téléphone qui n'est pas déjà associé à une autre application.

  • PHP (>5.6), Composer et le Slim

  • ngrok

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.

Le code que vous allez créer devrait fonctionner avec n'importe quelle version de PHP 5.6 ou supérieure.

Notre méthode recommandée pour travailler avec Nexmo, du point de vue de l'administration, est d'utiliser notre outil de ligne de commande, Nexmo-CLI.

Afin de rendre le code de notre machine locale accessible au monde extérieur, nous allons utiliser ngrokassurez-vous donc qu'il est également installé.

Recevoir et enregistrer un message téléphonique

Commencez par installer Slim dans votre dossier de travail si ce n'est pas déjà fait.

composer require slim/slim "^3.9"

Vous n'aurez besoin que d'un seul fichier PHP pour cet exemple, alors créez-en un appelé index.php dans votre dossier de travail et ouvrez-le dans l'éditeur de votre choix.

Ajoutez le code suivant à votre 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);
});

?>

Voyons ce qui se passe ici :

  1. L'appel entrant sera acheminé vers le /webhooks/answerpuis le NCCO prendra le relais.

  2. Le NCCO lit un message à l'appelant.

  3. Le message de l'appelant est ensuite enregistré.

  4. Les données d'enregistrement sont transmises à un nouveau eventUrl, dans ce cas /webhooks/recording.

  5. Un message est prononcé, indiquant à l'utilisateur que son message a été reçu, puis le NCCO raccroche.

Vous remarquerez que c'est le tableau $ncco qui fait le plus gros du travail dans cette fonction.

NCCO signifie Nexmo Call Control Object et est un tableau JSON que vous utilisez pour contrôler le flux d'un appel Voice API.

Vous pouvez approfondir les fonctionnalités du NCCO et apprendre comment étendre les capacités de votre application en lisant la documentation de référence.

Traiter le message enregistré

Dans le code ci-dessus, le BCN a une action d'enregistrement avec un eventUrl qui a été définie comme /webhooks/recording. C'est là que toutes les données relatives à l'enregistrement, y compris l'emplacement du fichier enregistré, seront envoyées.

Cependant, pour l'instant, il n'existe pas, donc en dessous de l'itinéraire /webhooks/answer et avant $app->run();ajouter ce nouveau code :

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

Découvrons cet itinéraire et sa fonction :

  1. Il reçoit une requête POST avec un objet JSON contenant toutes sortes d'informations sur notre enregistrement.

  2. Il enregistre l'URL de l'enregistrement effectué.

  3. Répond avec le statut 204, de sorte que le BCN n'essaie pas d'envoyer ce message encore et encore.

Exécution du code

Vous êtes maintenant prêt à exécuter le code. Vous pouvez le faire en entrant la commande suivante dans votre terminal :

php -t . -S localhost:3000

Cela permettra de démarrer un serveur et d'acheminer le trafic vers votre site web. http://localhost:3000 vers votre fichier index.php fichier.

Exposez votre application avec ngrok

Pour tester correctement ce code et permettre à Nexmo d'envoyer des requêtes à votre application, vous devez exposer au monde entier le code qui s'exécute sur votre machine locale.

ngrok est l'outil que nous avons choisi pour cela, et nous avons fourni une excellente introduction à l'outil que vous pouvez lire pour vous mettre à niveau si vous ne l'avez pas encore utilisé.

Une fois ngrok installé, lancez ngrok http 3000 pour exposer votre application à l'internet. Notez l'URL générée car vous devrez la fournir à Nexmo dans l'étape suivante. ngrok générée car vous devrez la fournir à Nexmo dans l'étape suivante (elle ressemblera à quelque chose comme http://45hfh5.ngrok.io).

Achetez un numéro et connectez votre application

Une fois le code complété et votre application mise à la disposition du monde entier, vous devez maintenant vous procurer un numéro de téléphone et y associer votre application.

Commencez par acheter un numéro via la CLI Nexmo :

nexmo number:buy --country_code GB

Vous pouvez utiliser un autre code de pays si vous le souhaitez. Notez le numéro que vous achetez, car vous en aurez besoin pour l'étape suivante.

Ensuite, utilisez le CLI Nexmo pour créer votre application en vous assurant de remplacer <your_ngrok_url> par l'URL nouvellement générée que ngrok vous a donnée plus tôt :

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

La réponse que vous obtiendrez en retour contiendra une énorme clé privée et, en plus, un ID de l'application.

Notez l'ID de l'application (qui ressemble à ceci : e7b25242-77a1-42cd-a32e-09fbbcb375f4) et reliez-le à votre nouveau numéro à l'aide de cette commande :

nexmo link:app

Votre code est maintenant relié au numéro ! Vous pouvez le tester en composant le numéro que vous avez acheté et en suivant les étapes qui vous sont indiquées comme par magie à l'autre bout de la ligne !

Vérifiez la sortie de la console une fois que vous avez fini d'enregistrer votre message. Vous y verrez l'icône recording_url. Si vous souhaitez télécharger cet enregistrement, consultez la page de téléchargement. Télécharger un enregistrement et ajoutez ce code supplémentaire à votre application.

Conclusion

Une fois que vous savez comment enregistrer des messages, vous pouvez rapidement transformer ce code en un système de messagerie vocale plus complet en écrivant les messages dans une base de données et en ajoutant une interface simple pour permettre aux utilisateurs d'écouter les messages. recording_url dans une base de données et en ajoutant une interface simple pour permettre aux utilisateurs d'écouter les messages.

Vous pourriez également étendre l'application pour envoyer une notification par SMS à quelqu'un lorsqu'un nouveau message est enregistré, ou même envoyer les enregistrements par courriel à une adresse électronique prédéterminée.

Comme toujours, il ne s'agit que d'un début. N'hésitez pas à poser des questions ou à partager ce que vous avez construit sur le canal Slack de la canal Slack de la communauté Nexmoou directement avec nous sur devrel@nexmo.com.

Partager:

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

Ancien directeur de la formation des développeurs chez Vonage. Avec une expérience de développeur créatif, de gestionnaire de produits et d'organisateur de journées de hacking, Martyn travaille comme défenseur de la technologie depuis 2012, après avoir travaillé dans le secteur de la radiodiffusion et dans de grandes maisons de disques. Il forme et responsabilise les développeurs du monde entier.