Grabar una conversación con nombre
Un fragmento de código que muestra cómo grabar una conversación. Responder a una llamada
y devuelve una NCCO que une a la persona que llama a una conversación con nombre. En
configuración de record a true, la conversación se graba y cuando la llamada se
completa, se envía un webhook al eventUrl que especifique. El webhook incluye
la URL de la grabación.
Ejemplo
Requisitos previos
npm install express body-parserEscriba el código
Añada lo siguiente a record-a-conversation.js:
const Express = require('express');
const bodyParser = require('body-parser');
const app = new Express();
app.use(bodyParser.json());
const onInboundCall = (request, response) => {
const ncco = [
{
'action': 'conversation',
'name': VOICE_CONF_NAME,
'record': 'true',
'eventMethod': 'POST',
'eventUrl': [`${request.protocol}://${request.get('host')}/webhooks/recordings`],
},
];
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}`);
});Ejecute su código
Guarde este archivo en su máquina y ejecútelo:
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 RecordConversation:
embeddedServer(Netty, port = 8000) {
routing {
get("/webhooks/answer") {
call.response.header("Content-Type", "application/json")
call.respond(
Ncco(
conversationAction(VOICE_CONFERENCE_NAME) {
record(true)
eventMethod(EventMethod.POST)
eventUrl(call.request.path().replace("answer", "recordings"))
},
).toJson()
)
}
post("/webhooks/recordings") {
val event = EventWebhook.fromJson(call.receive())
println("Recording URL: ${event.recordingUrl}")
call.respond(204)
}
}
}.start(wait = true)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 RecordConversation:
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 RecordConversation:
/*
* 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());
ConversationAction conversation = ConversationAction.builder(VOICE_CONFERENCE_NAME)
.record(true)
.eventMethod(EventMethod.POST)
.eventUrl(recordingUrl)
.build();
res.type("application/json");
return new Ncco(conversation).toJson();
};
/*
* Route which prints out the recording URL it is given to stdout.
*/
Route recordingWebhookRoute = (req, res) -> {
System.out.println(EventWebhook.fromJson(req.body()).getRecordingUrl());
res.status(204);
return "";
};
Spark.port(3000);
Spark.get("/webhooks/answer", answerRoute);
Spark.post("/webhooks/recordings", recordingWebhookRoute);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 RecordConversation:
Requisitos previos
Install-Package VonageEscriba el código
Añada lo siguiente a RecordConversationController.cs:
[HttpGet("webhooks/answer")]
public IActionResult Answer()
{
var VOICE_CONFERENCE_NAME = Environment.GetEnvironmentVariable("VOICE_CONFERENCE_NAME") ?? "VOICE_CONFERENCE_NAME";
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 conversationAction = new ConversationAction
{
Name = VOICE_CONFERENCE_NAME, Record = true,
EventMethod = "POST",
EventUrl = new [] { $"{sitebase}/recordconversation/webhooks/recording" }
};
var ncco = new Ncco(conversationAction);
var json = ncco.ToString();
return Ok(json);
}
[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);
}Requisitos previos
composer require slim/slim:^3.8 vonage/clientEjecute su código
Guarde este archivo en su máquina y ejecútelo:
Requisitos previos
pip install vonage python-dotenv fastapi[standard]Escriba el código
Añada lo siguiente a record-a-conversation.py:
import os
from os.path import dirname, join
from pprint import pprint
from dotenv import load_dotenv
from fastapi import Body, FastAPI
from vonage_voice import Conversation
dotenv_path = join(dirname(__file__), '../.env')
load_dotenv(dotenv_path)
VOICE_CONFERENCE_NAME = os.environ.get('VOICE_CONFERENCE_NAME')
app = FastAPI()
@app.get('/webhooks/answer')
async def answer_call():
ncco = [
Conversation(
name=VOICE_CONFERENCE_NAME,
record=True,
eventMethod='POST',
eventUrl=['https://demo.ngrok.io/webhooks/recordings'],
)
]
return ncco
@app.post('/webhooks/recordings')
async def recordings(data: dict = Body(...)):
pprint(data)
return {'message': 'webhook received'}Ejecute su código
Guarde este archivo en su máquina y ejecútelo:
Requisitos previos
gem install sinatra sinatra-contribEjecute su código
Guarde este archivo en su máquina y ejecútelo:
Pruébalo
Necesitarás:
- Graba una conversación marcando tu número de Vonage (este fragmento de código).
- Descargar la grabación. Ver la Descargar una grabación para saber cómo hacerlo.
Lecturas complementarias
- Grabación de llamadas - Grabación de la entrada de audio de un interlocutor o grabación de la conversación entre dos interlocutores.