Поток вызовов Twilio не продолжается после того, как вызывающий абонент удален из очереди - PullRequest
0 голосов
/ 19 июня 2020

На основе документации для TwiML <Leave> глагола , когда вызывающий абонент выходит из очереди, его вызов должен продолжать выполнение журнала вызовов c после <Enqueue>, который заставил их войти в очередь. В моем случае мои вызывающие абоненты входят в очередь, обрабатывая этот TwiML:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Enqueue>business</Enqueue>
  <Say>Sorry, no one is currently available. Please leave a message.</Say>
  <Record action="${endpoint}/hangup" timeout="10" transcribeCallback="${endpoint}/voicemailHandler"/>
</Response>

Позже я выполняю это Javascript logi c, чтобы инициировать удаление члена из очереди:

await twilioClient
      .queues(queueSid)
      .members('Front')
      .update({url: `${endpoint}/leave`})

Конечная точка /leave направляет член в этот бит TwiML:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
     <Leave />
</Response>

Я столкнулся с проблемой, когда после выполнения Javascript вместо того, чтобы слышать <Say>, звонок просто завершается и звонящий отключается. Я неправильно понимаю документацию? Если да, то как мне реструктурировать свой лог c для достижения желаемого результата?

1 Ответ

0 голосов
/ 22 июня 2020

Как сказал Алан, вам нужно будет указать waitUrl, который будет обрабатывать ваш вызов и отправлять инструкцию Leave.

Например, вы можете установить waitUrl равным Twilio Function который проверяет, был ли звонок в рабочее время, как показано в сообщении блога здесь , и TwiML будет выглядеть примерно так:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Enqueue waitUrl="https://zaffre-zorse-5224.twil.io/queue">support</Enqueue>
    <Say>Unfortunately, the support line has closed. Please call again tomorrow.</Say>
</Response>

И ваша функция будет выглядеть примерно так:

exports.handler = function(context, event, callback) {
    let twiml = new Twilio.twiml.VoiceResponse();

    let moment = require('moment-timezone');
    let timezone = event.timezone || 'America/Los_Angeles';
    const hour = moment().tz(timezone).format('H');
    const dayOfWeek = moment().tz(timezone).format('d');
    
    if ((hour >= 8 && hour < 17) && (dayOfWeek >= 1 && dayOfWeek <= 5)) {
        // "open" from 8am to 5pm, PST.
        twiml.play('http://com.twilio.sounds.music.s3.amazonaws.com/MARKOVICHAMP-Borghestral.mp3');
    } else {
        twiml.leave();
    }
    callback(null, twiml);
};
...