Евангелист разработчиков Twilio здесь.
При использовании транскрипции с <Record>
, после завершения записи вызов будет продолжать выполнять синхронный запрос к атрибуту action
. Все, что вы возвращаете из URL-адреса атрибута action
, будет управлять вызовом.
Фактическая транскрипция, однако, занимает немного больше времени, и когда вы получаете веб-перехватчик для URL-адреса transcribeCallback
, это выполняется асинхронно, вне контекста вызова. Таким образом, возврат TwiML никак не повлияет на вызов.
Вы получите текст транскрипции, просмотрев тело запроса. В transcribeCallback
отправляется множество параметров, но тот, который вы ищете, это TranscriptionText
. В вашем приложении Node.js, которое для меня выглядит как Express, вы можете получить его, вызвав request.body.TranscriptionText
.
Если вы хотите повлиять на вызов при получении обратного вызова расшифровки, вам потребуется используйте REST API, чтобы изменить вызов и перенаправить его на новый TwiML.
Дайте мне знать, поможет ли это вообще.
[править]
Из комментариев я вижу, что вы пытаетесь часть звонка вывести из устного ответа. URL-адрес transcribeCallback
не вызывается сразу, поскольку необходимо выполнить расшифровку, поэтому вам нужен URL-адрес action
, на который вы можете отправить вызывающему абоненту, пока ждете.
Итак, настройте маршрут записи, чтобы иметь разные конечные точки для action
и transcribeCallback
:
app.post("/voice", (request, response) => {
var twiml = new twilio.TwimlResponse();
twiml.say('Hi there! Please speak your response after the beep,-Get ready!')
.record({
transcribe:true,
timeout:5,
maxLength:30,
transcribeCallback:'/transcribe',
action:'/recording'
});
response.type('text/xml');
response.send(twiml.toString());
})
Затем ваша конечная точка записи должна заставить пользователя ждать, пока Twilio расшифрует текст.
app.post('/recording', (request,response) => {
var twiml = new twilio.TwimlResponse();
// A message for the user
twiml.say('Please wait while we transcribe your answer.');
twiml.pause();
// Then redirect around again while we wait
twiml.redirect('/recording');
response.type('text/xml');
response.send(twiml.toString());
});
Наконец, когда вы получаете обратный вызов расшифровки, вы можете каким-то образом определить курс из расшифрованного текста, а затем перенаправить живой вызов на новую конечную точку, которая продолжает вызов с новой информацией.
app.post('/transcribe', (request, response) => {
var text = request.body.TranscriptionText;
var callSid = require.body.CallSid;
// Do something with the text
var courseId = getCourseFromText(text);
var accountSid = '{{ account_sid }}'; // Your Account SID from www.twilio.com/console
var authToken = '{{ auth_token }}'; // Your Auth Token from www.twilio.com/console
var client = new twilio.RestClient(accountSid, authToken);
// Redirect the call
client.calls(callSid).update({
url: '/course?courseId=' + courseId,
method: 'POST'
}, (err, res) => {
response.sendStatus(200);
})
});
person
philnash
schedule
17.12.2016