Seguir el progreso de la NCCO

En este fragmento de código se muestra cómo realizar un seguimiento de la distancia que recorre una OCNN hasta el llamante utilizando la función notify acción

Ejemplo

Requisitos previos

npm install express

Escriba el código

Añada lo siguiente a track-ncco-progress.js:

const Express = require('express');
const app = new Express();

const onInboundCall = (request, response) => {
  const ncco = [
    {
      'action': 'talk',
      'text': 'Thanks for calling the notification line',
    },
    {
      'action': 'notify',
      'payload': {
        'foo': 'bar',
      },
      'eventUrl': [`${request.protocol}://${request.get('host')}/webhooks/notification`],
    },
    {
      'action': 'talk',
      'text': 'You will never hear me as the notification URL will return an NCCO ',
    },
  ];

  response.json(ncco);
};

const onNotification = (_, response) => {
  const ncco = [
    {
      'action': 'talk',
      'text': 'Your notification has been received, loud and clear',
    },
  ];

  response.json(ncco);
};

app
  .get('/webhooks/answer', onInboundCall)
  .post('/webhooks/notification', onNotification);

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

Ver fuente completa

Ejecute su código

Guarde este archivo en su máquina y ejecútelo:

node track-ncco-progress.js

Requisitos previos

Añada lo siguiente a build.gradle:

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

Escriba el código

Añada lo siguiente al método main del archivo TrackNccoProgress:

embeddedServer(Netty, port = 8000) {
    routing {
        get("/webhooks/answer") {
            call.response.header("Content-Type", "application/json")
            call.respond(
                Ncco(
                    talkAction("Thanks for calling the notification line."),
                    notifyAction(
                        call.request.path().replace("answer", "notification"),
                        mapOf("foo" to "bar")
                    ),
                    talkAction("You will never hear me as the notification URL will return an NCCO")
                ).toJson()
            )
        }
        post("/webhooks/notification") {
            val event = EventWebhook.fromJson(call.receive())
            call.response.header("Content-Type", "application/json")
            call.respond(
                Ncco(
                    talkAction("Your notification has been received, loud and clear."),
                ).toJson()
            )
        }
    }
}.start(wait = true)

Ver fuente completa

Ejecute su código

Podemos utilizar el plugin aplicación para Gradle para simplificar la ejecución de nuestra aplicación. Actualiza tu build.gradle con lo siguiente:

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

Ejecute el siguiente comando gradle para ejecutar su aplicación, sustituyendo com.vonage.quickstart.kt.voice por el paquete que contiene TrackNccoProgress:

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

Requisitos previos

Añada lo siguiente a build.gradle:

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

Escriba el código

Añada lo siguiente al método main del archivo TrackNccoProgress:

port(3000);

/*
 * Answer Route
 */
get("/webhooks/answer", (req, res) -> {
    String notifyUrl = String.format("%s://%s/webhooks/notification", req.scheme(), req.host());

    TalkAction intro = TalkAction.builder("Thanks for calling the notification line.")
            .build();

    Map<String, String> payload = new HashMap<>();
    payload.put("foo", "bar");

    NotifyAction notify = NotifyAction.builder()
            .payload(payload)
            .eventUrl(notifyUrl)
            .build();

    TalkAction unheard = TalkAction.builder("You will never hear me as the notification URL will return an NCCO")
            .build();

    res.type("application/json");
    return new Ncco(intro, notify, unheard).toJson();
});

/*
 * Notification Route
 */
post("/webhooks/notification", (req, res) -> {
    res.type("application/json");
    return new Ncco(
            TalkAction.builder("Your notification has been received, loud and clear.")
                    .build()
    ).toJson();
});

Ver fuente completa

Ejecute su código

Podemos utilizar el plugin aplicación para Gradle para simplificar la ejecución de nuestra aplicación. Actualiza tu build.gradle con lo siguiente:

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

Ejecute el siguiente comando gradle para ejecutar su aplicación, sustituyendo com.vonage.quickstart.voice por el paquete que contiene TrackNccoProgress:

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

Requisitos previos

Install-Package Vonage

Escriba el código

Añada lo siguiente a TrackNccoController.cs:

[HttpGet("[controller]/webhooks/answer")]
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 eventUrl = $"{Request.Scheme}://{host}/webhooks/notification";

    var talkAction = new TalkAction() { Text = "Thanks for calling the notification line" };
    var notifyAction = new NotifyAction()
    {
        EventUrl = new[] { eventUrl },
        Payload = new FooBar() { Foo = "bar" }
    };
    var talkAction2 = new TalkAction() { Text = "You will never hear me as the notification URL will return an NCCO" };
    var ncco = new Ncco(talkAction, notifyAction, talkAction2);
    return Ok(ncco.ToString());
}

[HttpPost("webhooks/notification")]
public async Task<IActionResult> Notify()
{
    var notification = await WebhookParser.ParseWebhookAsync<Notification<FooBar>>(Request.Body, Request.ContentType);
    Console.WriteLine($"Notification received payload's foo = {notification.Payload.Foo}");
    var talkAction = new TalkAction() { Text = "Your notification has been received, loud and clear" };
    var ncco = new Ncco(talkAction);
    return Ok(ncco.ToString());
}

Ver fuente completa

Requisitos previos

composer require slim/slim:^3.8 vonage/client

Escriba el código

Añada lo siguiente a index.php:

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/notification';

    $notify = new \Vonage\Voice\NCCO\Action\Notify(
        ['foo' => 'bar'],
        new \Vonage\Voice\Webhook($url, 'GET')
    );

    $ncco = new \Vonage\Voice\NCCO\NCCO();
    $ncco
        ->addAction(
            new \Vonage\Voice\NCCO\Action\Talk('Thanks for calling the notification line')
        )
        ->addAction($notify)
        ->addAction(
            new \Vonage\Voice\NCCO\Action\Talk('You will never hear me as the notification URL will return an NCCO')
        )
    ;

    return new JsonResponse($ncco);
});

$app->map(['GET', 'POST'], '/webhooks/notification', function (Request $request, Response $response) {
    /** @var \Vonage\Voice\Webhook\Event */
    $event = \Vonage\Voice\Webhook\Factory::createFromRequest($request);
    error_log(print_r($event, true));

    $ncco = new \Vonage\Voice\NCCO\NCCO();
    $ncco->addAction(
        new \Vonage\Voice\NCCO\Action\Talk('Your notification has been received, loud and clear')
    );

    return new JsonResponse($ncco);
});

$app->map(['GET', 'POST'], '/webhooks/event', function (Request $request, Response $response) {
    /** @var \Vonage\Voice\Webhook\Event */
    $event = \Vonage\Voice\Webhook\Factory::createFromRequest($request);
    error_log(print_r($event, true));

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

$app->run();

Ver fuente completa

Ejecute su código

Guarde este archivo en su máquina y ejecútelo:

php index.php

Requisitos previos

pip install vonage python-dotenv fastapi[standard]

Escriba el código

Añada lo siguiente a track-ncco.py:

from fastapi import FastAPI, Request
from vonage_voice import NccoAction, Notify, Talk

app = FastAPI()


@app.get('/webhooks/answer')
async def inbound_call(request: Request):
    ncco: list[NccoAction] = [
        Talk(text=f'Thanks for calling the notification line.'),
        Notify(
            payload={"foo": "bar"},
            eventUrl=[str(request.base_url) + 'webhooks/notification'],
        ),
        Talk(text=f'You will never hear me as the notification URL will return an NCCO.'),
    ]

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


@app.post('/webhooks/notification')
async def on_notification():
    return [
        Talk(text=f'Your notification has been received, loud and clear').model_dump(
            by_alias=True, exclude_none=True
        )
    ]

Ver fuente completa

Ejecute su código

Guarde este archivo en su máquina y ejecútelo:

fastapi dev voice/track-ncco.py

Requisitos previos

gem install sinatra sinatra-contrib rack-contrib

Escriba el código

Añada lo siguiente a track-ncco-progress.rb:

# frozen_string_literal: true

require 'sinatra'
require 'sinatra/multi_route'
require 'rack/contrib'

use Rack::PostBodyContentTypeParser

before do
  content_type :json
end

route :get, :post, '/webhooks/answer' do
  [
    {
      'action' => 'talk',
      'text' => 'Thanks for calling the notification line'
    },
    {
      'action' => 'notify',
      'payload' => {'foo' => 'bar'},
      'eventUrl' => ["#{request.base_url}/webhooks/notification"]
    },
    {
      'action' => 'talk',
      'text' => 'You will never hear me as the notification URL will return an NCCO'
    }
  ].to_json
end

route :get, :post, '/webhooks/notification' do
  puts params
  [
    {
      'action' => 'talk',
      'text' => 'Your notification has been received, loud and clear'
    }
  ].to_json
end

route :get, :post, '/webhooks/event' do
  puts params
  halt 204
end

set :port, 3000

Ver fuente completa

Ejecute su código

Guarde este archivo en su máquina y ejecútelo:

ruby track-ncco-progress.rb

Pruébalo

Cuando llames a tu número de Vonage, escucharás un mensaje generado por la tecnología de conversión de texto a voz y recibirás una solicitud en tu URL de notificaciones.