Доступ к транскрипцииТекст из twilio

Я хочу получить доступ к тексту транскрипции, созданному путем расшифровки, в моей учетной записи Twilio в разделе транскрипции, поскольку я хочу сравнить записанный пользователем ответ как текст.

twiml.say('Hi there! Please speak your response after the beep,-Get ready!')
        .record({
            transcribe:true,
            timeout:5,
            maxLength:30,
            transcribeCallback:'/recording',
            action:'/recording'

        });
app.post('/recording', (request,response) => {
if(transcriptionText=='yes'){

    twiml.say('thank you for positive response');
}
  response.type('text/xml');
  response.send(twiml.toString());

});

person Pratik Modak    schedule 17.12.2016    source источник


Ответы (1)


Евангелист разработчиков 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
comment
Спасибо за ответ, Мой транскрибированный обратный вызов и URL-адрес действия совпадают, т.е. /recording, но в /recording, когда я получаю request.body.TranscriptionText в переменную и передаю его в twiml.say, он говорит undefined. Я могу получить доступ к request.body.recordingUrl, но ничего не перенесено в Transcription. Я не хочу нарушать поток моей голосовой системы, поскольку я хочу использовать расшифрованный текст в качестве пользовательского ввода, а затем сравнить его с моим mongodb для следующих ответов twiml, пожалуйста, помогите - person Pratik Modak; 17.12.2016
comment
Транскрипция занимает некоторое время, поэтому не является частью первого обратного вызова для URL-адреса action. Вы получите еще один обратный вызов на этот URL с текстом транскрипции, однако, как я уже сказал, это не может напрямую повлиять на вызов. По этой причине я бы посоветовал использовать другой URL-адрес, чтобы сделать это очевидным в вашем приложении. Если вы хотите повлиять на вызов из асинхронного transscribeCallback, вам нужно будет использовать REST API, как я сказал в своем первоначальном ответе. - person philnash; 17.12.2016
comment
Какие изменения я должен внести в свой код, чтобы получить доступ к request.body.transcriptionText со значением, которое в данный момент говорил пользователь. Каким должен быть мой URL обратного вызова trascrib? Я очень новичок в этом, поэтому трудно понять - person Pratik Modak; 17.12.2016
comment
большое спасибо, я попробую, но как он выйдет из цикла записи? - person Pratik Modak; 20.12.2016
comment
Путем перенаправления вызова из REST API в последней части последнего блока кода выше. - person philnash; 20.12.2016
comment
Я попробовал ваше решение, оно продолжает зацикливаться в /recording и не входит в /transcribe - person Pratik Modak; 20.12.2016
comment
Вы получаете обратный вызов транскрипции? - person philnash; 20.12.2016
comment
app.post('/transcribe', (запрос, ответ) => { var text = request.body.TranscriptionText; var callSid = request.body.CallSid; var courseId = text; var accountSid = ''; var authToken = ' '; var client = require('twilio')(accountSid, authToken); client.calls(callSid).update({ url: '/course?courseId=' + courseId, method: 'POST' }, (err, res ) =› { response.sendStatus(200);}) }); - person Pratik Modak; 20.12.2016
comment
app.post('/course', (запрос, ответ) => { var twiml = new twilio.TwimlResponse(); var courseId = request.param('courseId'); twiml.say('hello'+courseId); response.type('текст/xml'); response.send(twiml.toString()); }); - person Pratik Modak; 20.12.2016
comment
Я имею в виду, вы получаете какие-либо запросы к вашей конечной точке расшифровки? Что-то не работает в запросе API? Есть ли что-нибудь в отладчике Twilio? - person philnash; 20.12.2016
comment
мне нужно где-то включить расшифровку URL-адреса обратного вызова в мою учетную запись twilio? - person Pratik Modak; 20.12.2016
comment
Нет, так же, как transcribeCallback в <Record> TwiML - person philnash; 20.12.2016
comment
в отладчике нет журнала ошибок, а текст транскрибируется в журнал транскрипции twilio - person Pratik Modak; 20.12.2016
comment
Вы получаете запрос к конечной точке transcribeCallback? - person philnash; 20.12.2016
comment
No Request Inspector не показывает запрос на расшифровкуCallback - person Pratik Modak; 20.12.2016
comment
Если вы не получаете обратные вызовы, я рекомендую связаться со поддержкой Twilio и предоставление им идентификаторов безопасности вызовов для вызовов, которые вы пробовали, которые имели транскрипцию. Вы должны получить обратный вызов транскрипции, хотя вам, возможно, придется немного подождать, пока он пройдет, это зависит от того, сколько времени займет сама транскрипция. - person philnash; 20.12.2016
comment
Вы не хотите перенаправлять на /transcribe. Twilio должен отправить HTTP-запрос на /transcribe после завершения транскрипции. - person philnash; 21.12.2016
comment
app.post('/recording', (request,response) =› { var twiml = new twilio.TwimlResponse(); // Сообщение для пользователя for(var i = 0; i‹= 5; i++) { twiml .say('Пожалуйста, подождите, пока мы расшифруем ваш ответ.'); twiml.pause( { length:2 } ); // Затем снова перенаправляем, пока мы ждем } twiml.redirect('/transcribe'); response.type( 'текст/xml'); response.send(twiml.toString()); }); Я пробовал это, это дает мне ответ ОК, у вас есть идеи, почему это так - person Pratik Modak; 21.12.2016
comment
Я не знаю, чего вы пытаетесь достичь с помощью этого, но вы должны позволить Twilio сделать вызов /transcribe после завершения транскрипции сообщения. - person philnash; 21.12.2016
comment
Понял, но /запись идет в бесконечном цикле, и запрос на расшифровку обратного вызова никогда не выполняется даже после преобразования текста. Я не знаю, что мне теперь делать. - person Pratik Modak; 21.12.2016
comment
Как я уже говорил ранее, если транскрипции создаются, но вы не получаете веб-перехватчик, вам следует обратиться в поддержку Twilio и дайте им идентификаторы безопасности вызовов для вызовов, в которых конечная точка транскрипции не вызывалась. Они смогут выяснить, почему его не вызывают. - person philnash; 21.12.2016
comment
я пробовал решение var twilio = require('twilio'); var client = new twilio.RestClient(accountSid, authToken); выдает ошибку: TypeError: twilio.RestClient is not a constructor - person Inzamam Malik; 10.05.2017
comment
Тогда не используйте ключевое слово new ???? Вы проверили, какая версия модуля Twilio у вас есть и какую версию вы просматриваете в документации? - person philnash; 11.05.2017