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

Aufzeichnung einer Telefonnachricht mit PHP

Zuletzt aktualisiert am April 19, 2021

Lesedauer: 9 Minuten

Die Aufzeichnung von Telefonnachrichten ist der erste wichtige Schritt beim Aufbau eines vollwertigen Voice-Mail-Systems. In diesem Tutorial werden wir die Schritte durchgehen, die erforderlich sind, um eine Telefonnummer mit der Fähigkeit, einen eingehenden Anruf aufzuzeichnen, mit PHP und der Nexmo-Kommandozeilenschnittstelle einzurichten.

Den Code für dieses Tutorial finden Sie in unserem PHP-Bausteine Abschnitt.

Voraussetzungen

Sie benötigen die folgenden Dinge:

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.

Es wird erwartet, dass der von Ihnen erstellte Code mit jeder Version von PHP 5.6 oder höher funktioniert.

Aus administrativer Sicht empfehlen wir, unser Kommandozeilen-Tool zu verwenden, um mit Nexmo zu arbeiten, Nexmo-CLI.

Um den Code auf unserem lokalen Rechner für die Außenwelt zugänglich zu machen, werden wir ngrokverwenden, also stellen Sie sicher, dass Sie das auch installiert haben.

Entgegennahme und Aufzeichnung einer Telefonnachricht

Beginnen Sie mit der Installation von Slim in Ihrem Arbeitsordner, falls Sie dies nicht bereits getan haben.

composer require slim/slim "^3.9"

Für dieses Beispiel benötigen Sie nur eine PHP-Datei, die Sie in Ihrem Arbeitsordner unter dem Namen index.php in Ihrem Arbeitsordner und öffnen Sie sie mit einem Editor Ihrer Wahl.

Fügen Sie den folgenden Code in Ihr 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);
});

?>

Schauen wir uns an, was hier passiert:

  1. Der eingehende Anruf wird durchgestellt zu /webhooks/answerweitergeleitet, dann übernimmt der NCCO.

  2. Der NCCO liest dem Anrufer eine Nachricht vor.

  3. Dann wird die Nachricht des Anrufers aufgezeichnet.

  4. Die Aufzeichnungsdaten werden an eine neue eventUrlübergeben, in diesem Fall /webhooks/recording.

  5. Es wird eine Nachricht gesprochen, die den Benutzer darüber informiert, dass seine Nachricht eingegangen ist, und dann legt das NCCO auf.

Sie werden feststellen, dass es das $ncco Array den größten Teil der Arbeit in dieser Funktion übernimmt.

NCCO steht für Nexmo Call Control Object und ist ein JSON-Array, mit dem Sie den Ablauf eines Voice API-Anrufs steuern können.

Sie können die Funktionalität des NCCO vertiefen und mehr darüber erfahren, wie Sie die Möglichkeiten Ihrer Anwendung erweitern können, indem Sie die Referenzdokumentation.

Umgang mit der aufgezeichneten Nachricht

Im obigen Code hat das NCCO eine Datensatzaktion mit einem eventUrl enthalten, die auf /webhooks/recording. An diese Stelle werden alle Daten über die Aufzeichnung, einschließlich des Speicherorts der aufgezeichneten Datei, gesendet.

Im Moment existiert sie jedoch noch nicht, so dass unterhalb der /webhooks/answer Route und vor $app->run();diesen neuen Code einfügen:

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

Schauen wir uns diesen Weg und seine Funktion an:

  1. Sie erhält eine POST-Anfrage mit einem JSON-Objekt, das alle möglichen Informationen über unsere Aufzeichnung enthält.

  2. Sie protokolliert die URL der erfolgten Aufzeichnung.

  3. Antwortet mit dem Status 204, damit das NCCO nicht immer wieder versucht, diese Nachricht zu senden.

Ausführen des Codes

Jetzt sind Sie bereit, den Code auszuführen. Geben Sie dazu den folgenden Befehl in Ihr Terminal ein:

php -t . -S localhost:3000

Dadurch wird ein Server gestartet und jeglicher Verkehr zu http://localhost:3000 durch Ihre index.php Datei.

Machen Sie Ihre Anwendung mit ngrok sichtbar

Um diesen Code richtig zu testen und Nexmo zu erlauben, Anfragen an Ihre Anwendung zu stellen, müssen Sie den Code, der auf Ihrem lokalen Rechner läuft, der Welt zugänglich machen.

ngrok ist unser Tool der Wahl für diese Aufgabe, und wir haben eine großartige Einführung in das Tool zur Verfügung gestellt, die Sie lesen können, wenn Sie es noch nicht benutzt haben.

Sobald Sie ngrok installiert haben, führen Sie ngrok http 3000 aus, um Ihre Anwendung dem Internet zugänglich zu machen. Notieren Sie sich die ngrok URL, da Sie diese im nächsten Schritt an Nexmo weitergeben müssen (sie wird ungefähr so aussehen http://45hfh5.ngrok.io).

Kaufen Sie eine Nummer & verbinden Sie Ihre App

Wenn der Code fertig ist und Ihre App der Welt zur Verfügung steht, müssen Sie sich nun eine Telefonnummer besorgen und Ihre App damit verknüpfen.

Beginnen Sie mit dem Kauf einer Nummer über die Nexmo CLI:

nexmo number:buy --country_code GB

Sie können eine andere Landesvorwahl verwenden, wenn Sie möchten. Notieren Sie sich die Nummer, die Sie gekauft haben, da Sie sie für den nächsten Schritt benötigen.

Als nächstes verwenden Sie die Nexmo CLI, um Ihre Anwendung zu erstellen. <your_ngrok_url> durch die neu generierte URL, die Ihnen ngrok zuvor gegeben hat:

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

Die Antwort, die Sie zurückerhalten, enthält eine umfangreiche Ausgabe des privaten Schlüssels und darüber hinaus eine Anwendungs-ID.

Notieren Sie sich die Anwendungs-ID (die wie folgt aussieht: e7b25242-77a1-42cd-a32e-09fbbcb375f4) und verknüpfen Sie sie dann mit diesem Befehl mit Ihrer neuen Nummer:

nexmo link:app

Jetzt ist Ihr Code mit der Nummer verbunden! Sie können ihn testen, indem Sie die gekaufte Nummer wählen und die Schritte befolgen, die Ihnen auf magische Weise am anderen Ende der Leitung vorgesprochen werden!

Überprüfen Sie Ihre Konsolenausgabe, nachdem Sie Ihre Nachricht aufgezeichnet haben. Dort sehen Sie die recording_url. Wenn Sie diese dann herunterladen möchten, sehen Sie sich den Herunterladen einer Aufnahme und fügen Sie diesen zusätzlichen Code zu Ihrer Anwendung hinzu.

Schlussfolgerung

Sobald Sie wissen, wie man Nachrichten aufzeichnet, können Sie diesen Code schnell zu einem vollwertigen Voicemail-System ausbauen, indem Sie die recording_url in eine Datenbank schreibt und ein einfaches Frontend hinzufügt, mit dem die Benutzer die Nachrichten abhören können.

Sie können die App auch so erweitern, dass sie eine SMS-Benachrichtigung an jemanden sendet, wenn eine neue Nachricht aufgezeichnet wurde, oder die Aufnahmen per E-Mail an eine vorher festgelegte E-Mail-Adresse sendet.

Wie immer ist dies nur der Anfang. Sie können gerne Fragen stellen oder uns mitteilen, was Sie gebaut haben, im Nexmo Community Slack-Kanaloder direkt mit uns auf devrel@nexmo.com.

Teilen Sie:

https://a.storyblok.com/f/270183/250x250/d0444194cd/martyn.png
Martyn DaviesVonage Ehemalige

Ehemaliger Direktor für Entwicklerschulung bei Vonage. Mit einem Hintergrund als kreativer Entwickler, Produktmanager und Organisator von Hack-Days arbeitet Martyn seit 2012 als Befürworter der Technologie, nachdem er zuvor beim Rundfunk und bei großen Plattenfirmen tätig war. Er bildet Entwickler auf der ganzen Welt aus und unterstützt sie.