Aufnehmen einer Nachricht

Ein Codeschnipsel, der zeigt, wie man ein Gespräch aufzeichnet. Beantworten Sie einen eingehenden Anruf beantworten und einen NCCO zurückgeben, der eine record Aktion. Wenn der Anruf abgeschlossen ist, wird ein Webhook an die eventUrl die Sie angeben. Der Webhook enthält die URL der Aufzeichnung.

Beispiel

Voraussetzungen

npm install express body-parser

Schreiben Sie den Code

Fügen Sie Folgendes zu record-a-message.js hinzu:

const Express = require('express');
const bodyParser = require('body-parser');

const app = new Express();
app.use(bodyParser.json());

const onInboundCall = (request, response) => {
  const 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',
      endOnKey: '#',
      beepStart: 'true',
      endOnSilence: '3',
      eventUrl: [`${request.protocol}://${request.get('host')}/webhooks/recordings`],
    },
    {
      action: 'talk',
      text: 'Thank you for your message. Goodbye.',
    },
  ];

  response.json(ncco);
};

const onRecording = (request, response) => {
  const recording_url = request.body.recording_url;
  console.log(`Recording URL = ${recording_url}`);

  response.status(204).send();
};

app
  .get('/webhooks/answer', onInboundCall)
  .post('/webhooks/recordings', onRecording);

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`);
});

Vollständige Quelle anzeigen

Führen Sie Ihren Code aus

Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:

node record-a-message.js

Voraussetzungen

Fügen Sie Folgendes zu build.gradle hinzu:

implementation 'com.vonage:server-sdk-kotlin:2.1.1'
implementation 'io.ktor:ktor-server-netty'
implementation 'io.ktor:ktor-serialization-jackson'

Schreiben Sie den Code

Fügen Sie der Methode main in der Datei RecordMessage Folgendes hinzu:

embeddedServer(Netty, port = 8000) {
    routing {
        get("/webhooks/answer") {
            call.response.header("Content-Type", "application/json")
            call.respond(
                Ncco(
                    talkAction("Please leave a message after the tone, then press #."),
                    recordAction {
                        eventUrl(call.request.path().replace("answer", "recordings"))
                        beepStart(true)
                        endOnSilence(3)
                        endOnKey('#')
                    },
                    talkAction("Thank you for your message. Goodbye!")
                ).toJson()
            )
        }
        post("/webhooks/recordings") {
            val event = EventWebhook.fromJson(call.receive())
            println("Recording URL: ${event.recordingUrl}")
            call.respond(204)
        }
    }
}.start(wait = true)

Vollständige Quelle anzeigen

Führen Sie Ihren Code aus

Wir können das Anmeldung Plugin für Gradle verwenden, um die Ausführung unserer Anwendung zu vereinfachen. Aktualisieren Sie Ihre build.gradle mit dem Folgenden:

apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''

Führen Sie den folgenden Befehl gradle aus, um Ihre Anwendung auszuführen, und ersetzen Sie dabei com.vonage.quickstart.kt.voice durch das Paket, das RecordMessage enthält:

gradle run -Pmain=com.vonage.quickstart.kt.voice.RecordMessage

Voraussetzungen

Fügen Sie Folgendes zu build.gradle hinzu:

implementation 'com.vonage:server-sdk:9.3.1'
implementation 'com.sparkjava:spark-core:2.9.4'

Schreiben Sie den Code

Fügen Sie der Methode main in der Datei RecordMessage Folgendes hinzu:

/*
 * Route to answer and connect incoming calls with recording.
 */
Route answerRoute = (req, res) -> {
    String recordingUrl = String.format("%s://%s/webhooks/recordings", req.scheme(), req.host());

    TalkAction intro = TalkAction.builder(
            "Please leave a message after the tone, then press #. We will get back to you as soon as we can.").build();

    RecordAction record = RecordAction.builder()
            .eventUrl(recordingUrl)
            .endOnSilence(3)
            .endOnKey('#')
            .beepStart(true)
            .build();

    TalkAction outro = TalkAction.builder("Thank you for your message. Goodbye").build();

    res.type("application/json");

    return new Ncco(intro, record, outro).toJson();
};

/*
 * Route which prints out the recording URL it is given to stdout.
 */
Route recordingRoute = (req, res) -> {
    EventWebhook recordEvent = EventWebhook.fromJson(req.body());
    System.out.println(recordEvent.getRecordingUrl());

    res.status(204);
    return "";
};

Spark.port(3000);
Spark.get("/webhooks/answer", answerRoute);
Spark.post("/webhooks/recordings", recordingRoute);

Vollständige Quelle anzeigen

Führen Sie Ihren Code aus

Wir können das Anmeldung Plugin für Gradle verwenden, um die Ausführung unserer Anwendung zu vereinfachen. Aktualisieren Sie Ihre build.gradle mit dem Folgenden:

apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''

Führen Sie den folgenden Befehl gradle aus, um Ihre Anwendung auszuführen, und ersetzen Sie dabei com.vonage.quickstart.voice durch das Paket, das RecordMessage enthält:

gradle run -Pmain=com.vonage.quickstart.voice.RecordMessage

Voraussetzungen

Install-Package Vonage

Schreiben Sie den Code

Fügen Sie Folgendes zu RecordMessageController.cs hinzu:

public IActionResult Answer()
{
    var host = Request.Host.ToString();
    //Uncomment the next line if using ngrok with --host-header option
    //host = Request.Headers["X-Original-Host"];
    var sitebase = $"{Request.Scheme}://{host}";
    var outGoingAction = new TalkAction()
    {
        Text = "Please leave a message after the tone, then press #. We will get back to you as soon as we can"
    };
    var recordAction = new RecordAction
    {
        EventUrl = new [] {$"{sitebase}/recordmessage/webhooks/recording"},
        EventMethod = "POST",
        EndOnSilence = "3",
        EndOnKey = "#",
        BeepStart = true
    };
    var thankYouAction = new TalkAction {Text = "Thank you for your message. Goodbye"};
    var ncco = new Ncco(outGoingAction, recordAction, thankYouAction);
    return Ok(ncco.ToString());
}

[HttpPost("webhooks/recording")]
public async Task<IActionResult> Recording()
{
    var record = await WebhookParser.ParseWebhookAsync<Record>(Request.Body, Request.ContentType);
    Console.WriteLine($"Record event received on webhook - URL: {record?.RecordingUrl}");
    return StatusCode(204);
}

Vollständige Quelle anzeigen

Voraussetzungen

composer require slim/slim:^3.8 vonage/client

Schreiben Sie den Code

Fügen Sie Folgendes zu index.php hinzu:

require 'vendor/autoload.php';

$app = new \Slim\App();

$app->get('/webhooks/answer', function (Request $request, Response $response) {
    //Get our public URL for this route
    $uri = $request->getUri();
    $url = $uri->getScheme() . '://'.$uri->getHost() . ($uri->getPort() ? ':'.$uri->getPort() : '') . '/webhooks/recording';

    $record = new \Vonage\Voice\NCCO\Action\Record();
    $record
        ->setEndOnSilence(3)
        ->setEndOnKey('#')
        ->setBeepStart(true)
        ->setEventWebhook(new \Vonage\Voice\Webhook($url))
    ;

    $ncco = new \Vonage\Voice\NCCO\NCCO();
    $ncco
        ->addAction(
            new \Vonage\Voice\NCCO\Action\Talk('Please leave a message after the tone, then press #. We will get back to you as soon as we can')
        )
        ->addAction($record)
        ->addAction(
            new \Vonage\Voice\NCCO\Action\Talk('Thank you for your message. Goodbye')
        )
    ;

    return new JsonResponse($ncco);
});

$app->post('/webhooks/recording', function (Request $request, Response $response) {
    /** @var \Vonage\Voice\Webhook\Record */
    $recording = \Vonage\Voice\Webhook\Factory::createFromRequest($request);
    error_log($recording->getRecordingUrl());

    return $response->withStatus(204);
});

$app->run();

Vollständige Quelle anzeigen

Führen Sie Ihren Code aus

Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:

php -S localhost:3000 -t .

Voraussetzungen

pip install vonage python-dotenv fastapi[standard]

Schreiben Sie den Code

Fügen Sie Folgendes zu record-a-message.py hinzu:

from pprint import pprint

from fastapi import Body, FastAPI, Request
from vonage_voice import NccoAction, Record, Talk

app = FastAPI()


@app.get('/webhooks/answer')
async def answer_call(request: Request):
    print(request.base_url)
    ncco: list[NccoAction] = [
        Talk(
            text='Please leave a message after the tone, then press #. We will get back to you as soon as we can.'
        ),
        Record(
            endOnSilence=3,
            endOnKey='#',
            beepStart=True,
            eventUrl=[str(request.base_url) + 'webhooks/recordings'],
        ),
        Talk(text='Thank you for your message. Goodbye.'),
    ]

    return [action.model_dump(by_alias=True, exclude_none=True) for action in ncco]


@app.post('/webhooks/recordings')
async def recordings(data: dict = Body(...)):
    pprint(data)
    return {'message': 'webhook received'}

Vollständige Quelle anzeigen

Führen Sie Ihren Code aus

Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:

fastapi dev voice/record-a-message.py

Voraussetzungen

gem install sinatra sinatra-contrib

Schreiben Sie den Code

Fügen Sie Folgendes zu record-a-message.rb hinzu:

require 'sinatra'
require 'sinatra/multi_route'
require 'json'

before do
  content_type :json
end

helpers do
  def parsed_body
    JSON.parse(request.body.read)
  end
end

route :get, :post, '/webhooks/answer' do
  [
    {
      "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": ["#{request.base_url}/webhooks/recordings"],
      "endOnSilence": "3",
      "endOnKey": "#",
      "beepStart": "true"
    },
    {
      "action": "talk",
      "text": "Thank you for your message. Goodbye"
    }
  ].to_json
end

route :get, :post, '/webhooks/recordings' do
  recording_url = params['recording_url'] || parsed_body['recording_url']
  puts "Recording URL = #{recording_url}"

  halt 204
end

set :port, 3000

Vollständige Quelle anzeigen

Führen Sie Ihren Code aus

Speichern Sie diese Datei auf Ihrem Rechner und führen Sie sie aus:

ruby record-a-message.rb

Probieren Sie es aus

Das müssen Sie tun:

  1. Nehmen Sie eine Nachricht auf, indem Sie Ihre Vonage Number wählen und Ihre Nachricht nach dem Signalton hinterlassen (dieses Codefragment).
  2. Laden Sie die Aufzeichnung herunter. Siehe die Eine Aufnahme herunterladen Codeschnipsel, wie das geht.

Weitere Lektüre

  • Voicemail - Erfahren Sie, wie Sie mit .NET und der Voice API von Vonage Audiodaten von eingehenden Anrufen aufzeichnen können.