Twilio Gather на Программируемый голос - Как получить доступ к основным событиям телефонных вызовов

Я пытаюсь автоматизировать поток вызовов в систему IVR приложения call-центра регрессионного тестирования.

Я могу совершать звонки и получать ответ, как и ожидалось. Но я пытаюсь понять, сколько времени занимает 2 строки кода

console.log("Waiting for Server to respond");

а также

console.log("Received response from Server");

Насколько я понимаю, после того, как Twilio получает ответ TwiML от моего экземпляра Node.js, он обрабатывает и отправляет / получает сигналы телефонии.

Только после получения полного ответа от сервера я получаю голосовой ответ в /TC4_Step1_Validate, Когда я регистрирую метку времени для обеих линий и фиксирую разницу. Это приходит около 20 секунд. Но на самом деле приложение отвечает в течение нескольких секунд.

Я полагаю, что Twilio ждет завершения всего диалога, ожидая 3-секундного молчания, преобразует этот аудиопоток в текст, а затем публикует его в моей функции. Вот почему я вижу эти 20 секунд.

Но мне нужно понять, сколько времени понадобилось, чтобы сначала получить ответ по телефону, а не весь поток с временем ожидания и временем преобразования речи в текст.

Короче говоря, я пытаюсь понять, сколько времени потребовалось, чтобы приложение контакт-центра ответило.

Пожалуйста, найдите мой пример кода ниже

Функция сделать звонок

app.get('/TC4', function(req, res) {
  client.calls.create({
    url: 'http://{PUBLIC_URL}/TC4_Step1',
    to: '{TO_NUMBER}',
    from: '{TWILIO_NUMBER}',
    method: 'GET',
    Record: 'false',  
  })
  .then((call) => res.send(call.sid));   
});

Функция сбора ответа шага 1 из приложения контакт-центра, когда я звоню

app.get('/TC4_Step1', function(req, res) {
  res.setHeader('Content-Type', 'application/xml');
  const response = new VoiceResponse();
  const gather = response.gather({
    input: 'speech',
    action: 'http://{PUBLIC_URL}/TC4_Step1_Validate',
    timeout: 3,
  });
  res.send(response.toString());
  console.log("Waiting for Server to respond");
  console.log(response.toString());
});

Функция для проверки ответа от шага 1 и сбора ответа шага 2

app.post('/TC4_Step1_Validate', function(req, res) {    
  const response = new VoiceResponse();
  console.log("Received response from Server");
  console.log(req.body.SpeechResult.toLowerCase());
  if(req.body.SpeechResult.toLowerCase().indexOf("{VERIFY_TEXT1}")!=-1 && req.body.SpeechResult.toLowerCase().indexOf("{VERIFY_TEXT2}")!=-1) {  
    response.pause({
      length: 2
    });
    const gather = response.gather({
      input: 'speech',
      action: 'http://{PUBLIC_URL}/TC4_Step2_Validate',
      timeout: 3,
    });
  } else {
    console.log("Failed Step 1");
    response.hangup();
  }
  res.setHeader('Content-Type', 'application/xml');
  res.send(response.toString());
  console.log("DTMF Input 2");
  console.log(response.toString());
});

1 ответ

Twilio разработчик евангелист здесь.

Когда вы устанавливаете action атрибут, как вы сделали здесь с путем /TC4_Step1_ValidateTwilio будет вызывать его только после выполнения текущего действия. В этом случае он ждет, пока пользователь перестанет говорить в течение 3 секунд, а затем, как вы предлагаете, выполняет работу с аудиопотоком, чтобы превратить его в текст и, наконец, позвонит вашему action URL.

Twilio не делает доступными другие события, которые конкретно представляют начало взаимодействия Twilio с вызовом в случае прослушивания речевого ввода или действительно большинства взаимодействий. Вы можете получить события вызова при использовании <Dial>, но они относятся к призывам к третьей стороне.

Итак, хотя я не верю, что Twilio может сделать то, что вы просите, я бы хотел спросить, чего вы пытаетесь достичь в целом, чтобы я мог помочь решить проблему другим способом?

Другие вопросы по тегам