https://d226lax1qjow5r.cloudfront.net/blog/blogposts/deploying-an-aws-lambda-function-for-nexmo-voice-callbacks-with-php-dr/E_Vonage-Voice-Callbacks_1200x600.png

Déployer une fonction AWS Lambda pour les rappels vocaux de Vonage avec PHP

Publié le May 18, 2021

Temps de lecture : 16 minutes

Le déploiement d'une application complète et accessible par le web sur AWS Lambda présente un ensemble unique d'exigences et d'obstacles. Parmi ceux-ci figurent les paramètres d'exécution et de permissions. Dans ce billet, je m'appuierai sur quelques billets précédents, en les rassemblant sous la forme d'un exemple pratique.

Ce billet utilise un exemple d'application de rappel provenant de "AWS Transcribe avec Nexmo Voice en utilisant PHP". Il s'appuie également sur "AWS Lambda avec PHP en utilisant Bref et Serverless Framework". J'applique également le modèle de permissions présenté dans "Comment les permissions fonctionnent dans AWS Lambda" pour AWS S3 et Amazon Transcribe. Ensemble, ces éléments vous permettent de créer votre propre AWS Lambda fonction, créant ainsi un microservice de transcription à utiliser dans vos Applications.

Note : Vous n'aurez pas besoin de lire les trois articles mentionnés ci-dessus pour suivre celui-ci. Je couvre en détail tout ce que vous devez savoir ci-dessous.

Conditions préalables

Dans cet exemple, les éléments suivants sont nécessaires :

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.

Configuration d'AWS

Vous aurez besoin d'un Account AWS, ainsi que de informations d'identification IAM associés à un utilisateur disposant de privilèges suffisants. Cette autorisation garantit que Serverless peut créer la fonction Lambda et attribuer des autorisations selon les besoins.

Créer un S3 Bucket

Créez un Bucket S3 pour stocker les fichiers MP3 d'enregistrement vocal récupérés auprès de Vonage. Amazon Transcribe peut alors facilement accéder aux fichiers pour une transcription ultérieure.

Après l'avoir créé, veillez à cocher la case située à côté du nom du seau. Un panneau s'ouvre à droite, vous pouvez cliquer sur le bouton "Copy Bucket ARN" et l'enregistrer pour une utilisation ultérieure.

Création d'un utilisateur IAM

Sélectionnez la console de gestion IAM dans le panneau Services :

Select IAM Management ConsoleSelect IAM Management Console

Dans la console de gestion IAM, ajoutez un nouvel utilisateur IAM en cliquant sur le bouton bleu Ajouter un utilisateur :

AWS new IAM userAdd a new IAM user

Vous trouverez ci-dessous un extrait JSON permettant d'attribuer les autorisations nécessaires au nouvel utilisateur.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        }
    ]
}

Cadre sans serveur

Les Bref s'appuie sur le Serverless Framework qui est une "solution complète pour construire et exploiter des applications sans serveur". Ainsi, notre première étape est d'installer ce framework sur le système de développement que vous utilisez. Je recommande de l'installer globalement, pour permettre une utilisation depuis n'importe où via CLI.

npm install -g serverless

Références AWS

Une fois Serverless installé, assurez-vous que vous avez également configuré les identifiants AWS ci-dessus en tant qu'administrateur, pour que Serverless puisse interagir avec les différents services AWS. Vous pouvez en savoir plus à ce sujet sur serverless.com et bref.sh nous n'entrerons donc pas dans les détails ici.

Préparation de la demande

Ensuite, nous préparons l'application en utilisant Composer pour récupérer les dépendances. Une petite modification est nécessaire dans le code pour fonctionner correctement avec les URL Lambda.

Compositeur

La préparation de l'application nécessite quelques étapes avant de faire l'installation de Composer. Nous avons besoin de Bref pour exécuter les fonctionnalités Serverless. Tapez ce qui suit dans votre terminal après avoir navigué vers le répertoire du projet contenant le code.

composer install composer require bref/bref

La première commande installe les dépendances de l'application. La seconde commande ajoute Bref ainsi que les dépendances nécessaires. Vous pouvez également éditer le fichier composer.json pour qu'il nécessite Bref et ne lancer que la commande install et n'exécuter que la commande

Bref Init

Typiquement, pour une nouvelle application, vous commanderiez à Bref de initet de créer serverless.yml et index.php. Cependant, dans ce cas, vous devriez simplement créer un fichier nommé serverless.yml dans le répertoire racine, comme suit :

service: app

provider:
    name: aws
    region: us-east-1
    runtime: provided
    iamRoleStatements:
        - Effect: Allow
          Action:
              - s3:PutObject
              - s3:GetObject
              - s3:DeleteObject
          Resource: 'arn:aws:s3:::{{bucket-name}}/*'
        - Effect: Allow
          Action: transcribe:*
          Resource: '*'

plugins:
    - ./vendor/bref/bref

functions:
    api:
        handler: index.php
        description: ''
        timeout: 28 # in seconds (API Gateway has a timeout of 29 seconds)
        layers:
            - ${bref:layer.php-73-fpm}
        events:
            -   http: 'ANY /'
            -   http: 'ANY /{proxy+}'

# Exclude files from deployment
package:
    exclude:
        - 'node_modules/**'
        - 'tests/**'

Note : Vous devez mettre à jour la région AWS et remplacer {{bucket-name}} pour répondre à vos besoins.

Remarquez également que iamRoleStatements définit les autorisations pour que la Lambda utilise AWS S3 ainsi qu'Amazon Transcribe. Voir l'article "Comment les permissions fonctionnent dans AWS Lambda"mentionné ci-dessus, pour plus de détails.

Variables d'environnement

Dans le cadre de la préparation, renommez le fichier .env.default pour qu'il devienne .envet mettez-le à jour si nécessaire pour qu'il corresponde aux informations de vos comptes AWS et Vonage. Bien que vous puissiez ignorer AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEYcar ils sont automatiquement ajoutés à l'environnement par Lambda.

Vous ne pourrez pas non plus remplir les champs VONAGE_APPLICATION_PRIVATE_KEY_PATH et VONAGE_APPLICATION_ID qu'APRÈS avoir déployé sur Lambda, ce qui nécessite de déployer sur Lambda deux fois. La première fois pour vous fournir les URL nécessaires à la création de l'Application Vonage. Ensuite, le deuxième déploiement contient un fichier .env mis à jour avec les valeurs de Vonage. Nous y reviendrons plus tard.

URL des événements

En raison de la différence de traitement de l'URI par Lambda, vous devrez également modifier le fichier index.php dans l'application. Plus précisément, vous devrez modifier les lignes 33 et 47 du fichier eventUrl aux lignes 33 et 47. Le résultat final ressemblera à ce qui suit, respectivement :

// Line 33
'https://'.$uri->getHost().'/dev/webhooks/fetch'
// Line 47
'https://'.$uri->getHost().'/dev/webhooks/transcribe'

La mise à jour est due au fait que le $request ne s'affiche pas avec httpset Lambda inclut également l'environnement dans les URL de la passerelle API.

Déploiement

Will toutes les étapes ci-dessus complétées, vous êtes maintenant prêt à déployer l'application à Lambda en utilisant Serverless. Dans votre terminal, lancez la commande suivante :

serverless deploy

Après le déploiement, vous recevez l'URL nécessaire pour accéder à l'application via la passerelle API. Notez l'URL pour l'étape suivante.

IMPORTANT : L'exemple d'application, tel quel, ne comporte aucune authentification ou vérification. Toute personne ayant accès à l'URL fournie après le déploiement peut y accéder. Cela pourrait entraîner des frais inattendus sur vos comptes. Par conséquent, veuillez sécuriser l'application si vous avez l'intention de la laisser active.

Configuration de Vonage

Malheureusement, dans le cas du déploiement d'applications AWS Lambda, vous n'avez connu l'URL qu'après le déploiement. Cependant, vous devez quand même créer l'Application chez Vonage pour obtenir l'autorisation d'accès à l'application. VONAGE_APPLICATION_PRIVATE_KEY_PATH et VONAGE_APPLICATION_ID pour que l'application fonctionne.

À l'aide du CLI de Vonage, installé comme prérequis, entrez la commande suivante :

vonage app:create /webhooks/answer /webhooks/event

A titre d'exemple, la commande peut ressembler à ceci :

vonage app:create MyTranscripeApp https://asdrferwef.execute-api.us-east-1.amazonaws.com/dev/webhooks/answer https://asdrferwef.execute-api.us-east-1.amazonaws.com/dev/webhooks/event

La réponse à la commande fournit le Application ID et le Private Keyà utiliser dans les étapes suivantes.

Mise à jour de la clé privée

Renommer le fichier private.key.default en private.key et enregistrez le Private Key dans le fichier.

Mise à jour du fichier .env

Mettre à jour le fichier .env avec les valeurs de VONAGE_APPLICATION_PRIVATE_KEY_PATH et VONAGE_APPLICATION_ID. Le fichier ressemblera à ceci :

VONAGE_APPLICATION_PRIVATE_KEY_PATH=./private.key VONAGE_APPLICATION_ID=2735sd6ed1asd-29cf4-4858f-bd90sd-7135a8cf122bas

Numbers Association

La dernière étape de la préparation de Vonage consiste à associer le numéro de Vonage loué à l'application nouvellement créée. Pour ce faire, utilisez la commande suivante :

vonage link:app

Veillez à mettre à jour les variables ci-dessus avec votre numéro Vonage et le numéro de téléphone que vous avez reçu lors de la création de l'application. app_id donnée lors de la création de l'Applications. Veillez à faire précéder le code du pays afin d'éviter tout échec. Voici un exemple :

vonage link:app 2735sd6ed1asd-29cf4-4858f-bd90sd-7135a8cf122bas --number=+15558675309

Plus de détails

En créant l'application Vonage et en y associant le numéro, vous demandez à Vonage d'effectuer des rappels lorsque des événements se produisent, et vous voulez que ces rappels pointent vers l'application nouvellement créée.

L'URL de l'événement est utilisée lorsqu'un événement modifie le statut d'un appel, tandis que l'URL de la réponse est demandée pour tout appel entrant afin de récupérer un objet NCCO (Nexmo Call Control Object).Objet de contrôle d'appel Nexmo).

Nous avons maintenant terminé l'installation de Vonage. Il est temps de redéployer vers Lambda avec la commande suivante :

serverless deploy

Après quelques minutes, l'application mise à jour sera redéployée sur Lambda. Bien que le contenu de l'application aura changé, l'URL reste constante.

Essais

Il est maintenant temps de faire un appel test à votre numéro Vonage. Après l'appel, la voix automatisée devrait dire : "Veuillez laisser un message après la tonalité, puis appuyez sur #". à moins que vous n'ayez modifié ce message dans index.php. Ensuite, après avoir laissé un court message vocal et appuyé sur #la voix automatisée doit dire : "Merci pour votre message. Au revoir."

Pour confirmer que tout s'est déroulé comme prévu, vous devez pouvoir voir le fichier MP3 dans le panier S3 que vous avez spécifié. Une tâche de transcription doit également être en cours d'exécution sur Amazon Transcribe. Tout cela est accessible via la console AWS.

Félicitations ! Vous avez construit votre première Lambda !

Prochaines étapes

Il y a plusieurs étapes possibles, en fonction de vos besoins. Une solution possible peut être de créer un événement AWS Cloudwatch pour être alerté lorsqu'un travail Transcribe est "Terminé". L'événement pourrait appeler une autre fonction Lambda pour envoyer la transcription par email, ou ajouter la transcription à une base de données. En fin de compte, vous avez maintenant une version texte du message vocal laissé par un appelant. Si vous avez des questions ou si vous rencontrez des problèmes, vous pouvez contacter @VonageDev sur Twitter ou vous renseigner auprès de la Communauté des développeurs de Vonage l'équipe Slack.

Partager:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam CulpAnciens de Vonage

Adam est un développeur et un consultant qui aime l'ultra-course, les blogs, et qui aide les autres à apprivoiser la technologie pour accomplir des choses étonnantes avec un désir insatiable de mentorat et d'aide.