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

Bereitstellen einer AWS Lambda-Funktion für Vonage Voice-Rückrufe mit PHP

Zuletzt aktualisiert am May 18, 2021

Lesedauer: 15 Minuten

Die Bereitstellung einer vollständigen und über das Web zugänglichen Anwendung auf AWS Lambda stellt eine Reihe von Anforderungen und Hürden dar. Dazu gehören die Einstellungen für Ausführung und Berechtigungen. In diesem Beitrag baue ich auf einigen früheren Beiträgen auf und fasse sie in einem praktischen Beispiel zusammen.

Dieser Beitrag verwendet eine Beispiel-Rückruf-Anwendung aus "AWS Transcribe mit Nexmo Voice unter Verwendung von PHP".. Er nutzt außerdem "AWS Lambda mit PHP unter Verwendung von Bref und Serverless Framework".. Ich wende auch das Berechtigungsmodell an, das in "Wie Berechtigungen in AWS Lambda funktionieren" für AWS S3 und Amazon Umschreiben. Mit diesen Komponenten können Sie Ihre eigenen AWS Lambda Funktion zu erstellen, um einen Transkriptions-Microservice zu schaffen, der in Ihren Anwendungen verwendet werden kann.

Hinweis: Sie brauchen die drei oben genannten Beiträge nicht zu lesen, um diesem Beitrag zu folgen. Ich habe alles, was Sie wissen müssen, im Folgenden ausführlich beschrieben.

Voraussetzungen

In diesem Beispiel werden die folgenden Angaben benötigt:

Vonage API-Konto

Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.

In diesem Lernprogramm wird auch eine virtuelle Telefonnummer verwendet. Um eine zu erwerben, gehen Sie zu Rufnummern > Rufnummern kaufen und suchen Sie nach einer Nummer, die Ihren Anforderungen entspricht.

AWS-Einrichtung

Sie benötigen einen AWS Account, sowie IAM-Anmeldeinformationen die mit einem Benutzer verknüpft sind, der über ausreichende Berechtigungen verfügt. Diese Berechtigung stellt sicher, dass Serverless die Lambda-Funktion erstellen und bei Bedarf Berechtigungen zuweisen kann.

Ein S3 Bucket erstellen

Erstellen Sie ein S3 Bucket, um die von Vonage abgerufenen MP3-Dateien der Voice-Aufnahme zu speichern. Amazon Transcribe kann dann später problemlos auf die Dateien für die Transkription zugreifen.

Nachdem Sie ihn erstellt haben, müssen Sie das Kästchen neben dem Bucket-Namen aktivieren. Auf der rechten Seite öffnet sich ein Fenster, in dem Sie auf die Schaltfläche "Bucket ARN kopieren" klicken und den Namen zur späteren Verwendung speichern können.

Erstellen eines IAM-Benutzers

Wählen Sie die IAM-Verwaltungskonsole im Bereich Dienste aus:

Select IAM Management ConsoleSelect IAM Management Console

Fügen Sie in der IAM-Verwaltungskonsole einen neuen IAM-Benutzer hinzu, indem Sie auf die blaue Schaltfläche Benutzer hinzufügen klicken:

AWS new IAM userAdd a new IAM user

Nachfolgend finden Sie ein JSON-Snippet, um die für den neuen Benutzer erforderlichen Berechtigungen zuzuweisen.

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

Serverloses Framework

Die Bref Werkzeug nutzt das Serverless Framework Das Bref-Tool nutzt das Serverless Framework, eine "Komplettlösung für die Erstellung und den Betrieb von Serverless Applications". Der erste Schritt besteht also darin, dieses Framework auf dem verwendeten Entwicklungssystem zu installieren. Ich empfehle, es global zu installieren, um die Nutzung von überall aus über CLI zu ermöglichen.

npm install -g serverless

AWS-Anmeldeinformationen

Wenn Sie Serverless installiert haben, stellen Sie sicher, dass Sie auch die oben genannten AWS-Anmeldeinformationen als Administrator eingerichtet haben, damit Serverless mit den verschiedenen AWS-Diensten interagieren kann. Weitere Informationen hierzu finden Sie unter serverless.com und bref.sh nachlesen, so dass wir hier nicht ins Detail gehen werden.

Vorbereitung der Bewerbung

Als Nächstes bereiten wir die Anwendung mit Composer vor, um die Abhängigkeiten abzurufen. Damit der Code korrekt mit den Lambda-URLs funktioniert, ist eine kleine Änderung erforderlich.

Komponist

Für die Vorbereitung der Anwendung sind einige Schritte erforderlich, bevor der Composer installiert werden kann. Wir müssen Bref benötigen, um die Serverless-Funktionen auszuführen. Geben Sie Folgendes in Ihr Terminal ein, nachdem Sie zu dem Projektverzeichnis navigiert haben, das den Code enthält.

composer install composer require bref/bref

Mit dem ersten Befehl werden die Abhängigkeiten der Anwendung installiert. Der zweite Befehl fügt dann Bref zusammen mit den dafür benötigten Abhängigkeiten hinzu. Alternativ können Sie auch die composer.json Datei so bearbeiten, dass Bref erforderlich ist und nur den install Befehl ausführen.

Bref Init

Normalerweise würden Sie bei einer neuen Anwendung Bref den Befehl initund erstellen serverless.yml und index.php. In diesem Fall sollten Sie jedoch einfach eine Datei namens serverless.yml im Stammverzeichnis wie folgt anlegen:

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/**'

Hinweis: Sie sollten die AWS-Region aktualisieren und die {{bucket-name}} entsprechend Ihren Bedürfnissen.

Beachten Sie auch, dass iamRoleStatements die Berechtigungen für den Lambda zur Nutzung von AWS S3 und Amazon Transcribe festlegt. Siehe den Beitrag "Wie Berechtigungen in AWS Lambda funktionieren"für weitere Details.

Umgebungsvariablen

Als Teil der Vorbereitung benennen Sie die Datei .env.default Datei in .envum, und aktualisieren Sie sie bei Bedarf entsprechend Ihren AWS- und Vonage-Account-Informationen. Sie können zwar AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEYignorieren, da diese automatisch von Lambda zur Umgebung hinzugefügt werden.

Sie werden auch nicht in der Lage sein, die Felder VONAGE_APPLICATION_PRIVATE_KEY_PATH und VONAGE_APPLICATION_ID Werte erst NACH dem Deployment in Lambda eingeben, was dazu führt, dass Sie zweimal in Lambda deployen müssen. Beim ersten Mal werden die URLs bereitgestellt, die zum Erstellen der Vonage-Anwendung erforderlich sind. Die zweite Bereitstellung enthält dann eine aktualisierte .env Datei mit den Vonage-Werten. Das alles wird später behandelt.

Ereignis-URLs

Da Lambda den URI anders behandelt, müssen Sie auch die index.php Datei in der Anwendung bearbeiten. Insbesondere müssen Sie die eventUrl in den Zeilen 33 und 47 ändern. Das Endergebnis sieht dann wie folgt aus:

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

Die Aktualisierung wird dadurch verursacht, dass die $request nicht angezeigt wird mit httpsund Lambda schließt die Umgebung auch in die API-Gateway-URLs ein.

Bereitstellung von

Wenn alle oben genannten Schritte abgeschlossen sind, können Sie nun die Anwendung mit Serverless auf Lambda bereitstellen. Geben Sie in Ihrem Terminal den folgenden Befehl ein:

serverless deploy

Nach der Bereitstellung erhalten Sie die URL, die für den Zugriff auf die Anwendung über das API-Gateway erforderlich ist. Notieren Sie sich die URL für den nächsten Schritt.

WICHTIG! Die Beispielanwendung unterliegt in ihrer jetzigen Form keinerlei Authentifizierung oder Überprüfung. Jeder, der Zugriff auf die nach der Bereitstellung bereitgestellte URL hat, kann darauf zugreifen. Dies könnte zu unerwarteten Abbuchungen von Ihren Konten führen. Sichern Sie daher die Anwendung, wenn Sie sie aktiv lassen wollen.

Vonage-Einrichtung

Im Falle der Bereitstellung von AWS Lambda Applications kannten Sie die URL leider erst nach der Bereitstellung. Dennoch müssen Sie die Applikation bei Vonage erstellen, um die VONAGE_APPLICATION_PRIVATE_KEY_PATH und VONAGE_APPLICATION_ID zu erhalten, damit die Anwendung funktioniert.

Geben Sie über die Vonage CLI, die als Voraussetzung installiert wurde, den folgenden Befehl ein:

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

Der Befehl könnte zum Beispiel so aussehen:

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

Die Antwort des Befehls liefert die Application ID und die Private Keydie in den folgenden Schritten zu verwenden sind.

Privaten Schlüssel aktualisieren

Benennen Sie die Datei private.key.default in private.key und speichern Sie die Private Key in der Datei.

.env aktualisieren

Aktualisieren Sie die .env Datei mit den Werten für VONAGE_APPLICATION_PRIVATE_KEY_PATH und VONAGE_APPLICATION_ID. Sie wird in etwa so aussehen:

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

Nummer Vereinigung

Der letzte Schritt zur Vorbereitung von Vonage besteht darin, die gemietete Vonage-Nummer mit der neu erstellten Anwendung zu verknüpfen. Verwenden Sie dazu den folgenden Befehl:

vonage link:app

Stellen Sie sicher, dass Sie die obigen Variablen mit Ihrer Vonage-Nummer und der app_id die Sie bei der Erstellung der Anwendung angegeben haben. Stellen Sie sicher, dass Sie die Landesvorwahl voranstellen, um Fehler zu vermeiden. Hier ist ein Beispiel:

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

Mehr Details

Wenn Sie die Vonage-Anwendung erstellen und die Nummer zuordnen, wird Vonage angewiesen, bei Ereignissen Rückrufe zu tätigen, die auf die neu erstellte Anwendung verweisen sollen.

Die Ereignis-URL wird verwendet, wenn ein Ereignis den Status eines Anrufs ändert, während die Antwort-URL für alle eingehenden Anrufe angefordert wird, um ein NCCO-Objekt abzurufen (Nexmo Anrufsteuerungsobjekt).

Jetzt sind wir mit der Einrichtung von Vonage fertig. Es ist an der Zeit, Lambda mit dem folgenden Befehl neu zu verteilen:

serverless deploy

Nach ein paar Minuten wird die aktualisierte Anwendung erneut auf Lambda bereitgestellt. Obwohl sich der Inhalt der Anwendung geändert hat, bleibt die URL konstant.

Prüfung

Jetzt können Sie einen Testanruf an Ihre Vonage-Nummer tätigen. Nach dem Anruf sollte die automatische Stimme sagen: "Bitte hinterlassen Sie eine Nachricht nach dem Ton, dann drücken Sie #". es sei denn, Sie haben diese Nachricht in index.php. Nachdem Sie dann eine kurze Voice-Nachricht hinterlassen und die Taste #drücken, sollte die automatische Stimme sagen: "Vielen Dank für Ihre Nachricht. Auf Wiederhören."

Um zu bestätigen, dass alles wie erwartet funktioniert hat, sollten Sie die MP3-Datei in dem von Ihnen angegebenen S3-Bucket sehen können. Es sollte auch ein Transkriptionsauftrag bei Amazon Transcribe laufen. All dies ist über die AWS-Konsole zugänglich.

Herzlichen Glückwunsch! Sie haben Ihren ersten Lambda gebaut!

Nächste Schritte

Es gibt viele mögliche nächste Schritte, je nach Ihren Bedürfnissen. Eine mögliche Lösung könnte sein, ein AWS Cloudwatch-Ereignis zu erstellen, um benachrichtigt zu werden, wenn ein Transcribe-Auftrag "abgeschlossen" ist. Das Ereignis könnte eine andere Lambda-Funktion aufrufen, um die Transkription per E-Mail zu versenden oder die Transkription zu einer Datenbank hinzuzufügen. Unterm Strich haben Sie jetzt eine Textversion der von einem Anrufer hinterlassenen Sprachnachricht. Wenn Sie Fragen haben oder auf Probleme stoßen, können Sie sich an @VonageDev auf Twitter oder in der Vonage Entwicklergemeinschaft Slack-Team.

Teilen Sie:

https://a.storyblok.com/f/270183/384x384/b3c7ffaf85/adamculp.png
Adam CulpVonage Ehemalige

Adam ist ein Entwickler und Berater, der gerne Ultraläufe absolviert, bloggt und anderen dabei hilft, Technologien zu zähmen, um erstaunliche Dinge zu erreichen, und der ein unstillbares Verlangen hat, Mentoren zu sein und zu helfen.