Conectar una llamada entrante

En este fragmento de código se muestra cómo conectar una llamada entrante con otra persona realizando una llamada saliente.

Ejemplo

Sustituye las siguientes variables en el código de ejemplo:

ClaveDescripción
VONAGE_VIRTUAL_NUMBER

Your Vonage Number. E.g. 447700900000

VOICE_TO_NUMBER

The recipient number to call, e.g. 447700900002.

Requisitos previos

npm install express

Escriba el código

Añada lo siguiente a connect-an-inbound-call.js:

const Express = require('express');

const app = new Express();

const onInboundCall = (_, response) => {
  const ncco = [
    {
      action: 'connect',
      from: VONAGE_VIRTUAL_NUMBER,
      endpoint: [
        {
          type: 'phone',
          number: VOICE_TO_NUMBER,
        },
      ],
    },
  ];

  response.json(ncco);
};

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

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 connect-an-inbound-call.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 ConnectInboundCall:

embeddedServer(Netty, port = 8000) {
    routing {
        route("/webhooks/answer") {
            handle {
                call.response.header("Content-Type", "application/json")
                call.respond(
                    Ncco(
                        connectToPstn(VOICE_TO_NUMBER) {
                            from(VONAGE_VIRTUAL_NUMBER)
                        }
                    ).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 ConnectInboundCall:

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

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 ConnectInboundCall:

/*
 * Route to answer incoming calls with an NCCO response.
 */
Route answerRoute = (req, res) -> {
    ConnectAction connect = ConnectAction.builder()
            .endpoint(PhoneEndpoint.builder(VOICE_TO_NUMBER).build())
            .from(VONAGE_VIRTUAL_NUMBER)
            .build();

    res.type("application/json");

    return new Ncco(connect).toJson();
};

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

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 ConnectInboundCall:

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

Requisitos previos

Install-Package Vonage

Escriba el código

Añada lo siguiente a ConnectInboundCallController.cs:

[Route("webhooks/answer")]
public string Answer()
{
    var VOICE_TO_NUMBER = Environment.GetEnvironmentVariable("VOICE_TO_NUMBER") ?? "VOICE_TO_NUMBER";
    var VONAGE_VIRTUAL_NUMBER = Environment.GetEnvironmentVariable("VONAGE_VIRTUAL_NUMBER") ?? "VONAGE_VIRTUAL_NUMBER";

    var talkAction = new TalkAction()
    {
        Text = "Thank you for calling",
        Language = "en-gb",
        Style = 2
    };

    var secondNumberEndpoint = new PhoneEndpoint() { Number=VOICE_TO_NUMBER};            
    var connectAction = new ConnectAction() { From=VONAGE_VIRTUAL_NUMBER, Endpoint= new[] { secondNumberEndpoint } };
    
    var ncco = new Ncco(talkAction,connectAction);
    return 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';

$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->load();

define('VOICE_TO_NUMBER', getenv('VOICE_TO_NUMBER'));
define('VONAGE_VIRTUAL_NUMBER', getenv('VONAGE_VIRTUAL_NUMBER'));

$app = new \Slim\App();

$app->get('/webhooks/answer', function (Request $request, Response $response) {
    $numberToConnect = new \Vonage\Voice\Endpoint\Phone(VOICE_TO_NUMBER);

    $action = new \Vonage\Voice\NCCO\Action\Connect($numberToConnect);
    $action->setFrom(VONAGE_VIRTUAL_NUMBER);

    $ncco = new \Vonage\Voice\NCCO\NCCO();
    $ncco->addAction($action);

    return new JsonResponse($ncco->toArray());
});

$app->run();

Ver fuente completa

Ejecute su código

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

php -S localhost:3000 -t .

Requisitos previos

pip install vonage python-dotenv fastapi[standard]

Escriba el código

Añada lo siguiente a connect-an-inbound-call.py:

import os
from os.path import dirname, join

from dotenv import load_dotenv
from fastapi import FastAPI
from vonage_voice import Connect, PhoneEndpoint

dotenv_path = join(dirname(__file__), '../.env')
load_dotenv(dotenv_path)

VONAGE_VIRTUAL_NUMBER = os.environ.get('VONAGE_VIRTUAL_NUMBER')
VOICE_TO_NUMBER = os.environ.get('VOICE_TO_NUMBER')

app = FastAPI()


@app.get('/webhooks/answer')
async def inbound_call():
    ncco = [
        Connect(
            endpoint=[PhoneEndpoint(number=VOICE_TO_NUMBER)],
            from_=VONAGE_VIRTUAL_NUMBER,
        ).model_dump(by_alias=True, exclude_none=True)
    ]

    return ncco

Ver fuente completa

Ejecute su código

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

fastapi dev voice/connect-an-inbound-call.py

Requisitos previos

gem install sinatra sinatra-contrib

Escriba el código

Añada lo siguiente a connect_an_inbound_call.rb:

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

VOICE_TO_NUMBER = ENV['VOICE_TO_NUMBER']
VONAGE_VIRTUAL_NUMBER = ENV['VONAGE_VIRTUAL_NUMBER']

before do
  content_type :json
end

route :get, :post, '/webhooks/answer' do
  [{
    action: 'connect',
    from: VONAGE_VIRTUAL_NUMBER,
    endpoint: [{
      type: 'phone',
      number: VOICE_TO_NUMBER
    }]
  }].to_json
end

set :port, 3000

Ver fuente completa

Ejecute su código

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

ruby connect_an_inbound_call.rb

Pruébalo

Tendrás que conectar tu servidor a Internet. Durante la fase de desarrollo, puedes utilizar una herramienta como Ngrok para hacerlo.

Cuando llames a tu número de Vonage, se te conectará automáticamente con el número que hayas indicado en lugar de VOICE_TO_NUMBER.

Lecturas complementarias

  • Respuesta de voz interactiva (IVR) - Crear un sistema telefónico automatizado que permita a los usuarios introducir información mediante el teclado y escuchar una respuesta de voz.
  • Bot de voz con Google Dialogflow - Esta guía le ayudará a empezar con un bot Dialogflow de ejemplo e interactuar con él desde llamadas telefónicas utilizando los códigos de referencia de ejemplo proporcionados utilizando Vonage Voice API.
  • Llamada enmascarada - Permite que los usuarios se llamen entre sí, manteniendo en privado sus números reales.
  • Conferencias telefónicas - En esta guía se explican los dos conceptos que Vonage asocia a una llamada: «tramo» y «conversación».
  • Seguimiento de llamadas - Haz un seguimiento de las campañas que están dando buenos resultados utilizando números diferentes para cada una de ellas y registrando las llamadas entrantes. Esta guía te explica cómo gestionar las llamadas entrantes, desviarlas a otro número y realizar un seguimiento de los números de teléfono que han llamado a cada uno de tus números de Vonage.