Twilio - перевод входящего звонка - PullRequest
1 голос
/ 01 июля 2019

У меня много проблем, когда я думаю о том, как перевести входящий вызов с помощью Twilio. Идея такова:

  1. Звонок приходит
  2. Звонок соединен с администратором
  3. Ресепшн встречает и набирает добавочный номер - Прессы #.
  4. Абонент передается на указанное устройство # / sip.

Я реализовал часть этого потока. Я использовал тег конференции при первоначальном входящем звонке, чтобы заставить абонента войти в комнату с удерживаемой музыкой, и когда этот звонок поступил, я набираю у администратора и затем приглашаю администратора присоединиться к конференции. Это прекрасно работает.

Что я не могу понять, так это как получить данные с телефона регистратора и затем действовать с ним. Например, если администратор нажимает # 200 * (или что-то в этом роде), я хочу, чтобы набирали добавочный номер 200, и вызывающий абонент в конференции переводился в режим ожидания, пока не будет получен ответ переадресованного абонента (все это должно быть легко, как только я смогу захватить). вход и действовать на него).

Любая помощь по этому вопросу приветствуется.

Спасибо.

1 Ответ

2 голосов
/ 02 июля 2019

Разработчик Twilio здесь.

Спасибо за дополнительную информацию в комментариях.Ваш регистратор набирается в конференции для обработки входящего вызова, используя startConferenceOnEnter, чтобы остановить удержание музыки и установить соединение.Это хорошее начало.

Вы говорите, что у вас также есть endConferenceOnExit для администратора.Я бы удалил это, потому что для достижения этого мы хотим удалить регистратора из конференции и оставить вызывающего абонента в нем, пока мы разберемся с переводом.

Итак, вместо этого вы захотитедобавить hangupOnStar к TwiML вашего администратора.Когда регистратор нажимает *, вызов с запросом атрибута action для исходного <Dial> или, если он отсутствует, переходит к следующему глаголу TwiML после <Dial>.В любом случае, здесь вы хотите включить <Gather input="dtmf">.При этом Twilio начнет прослушивать тональные сигналы клавиатуры.

Затем ваш регистратор может набрать добавочный номер для подключения и нажать # для завершения (по умолчанию finishOnKey. Это отправит веб-крючокк атрибуту action <Gather> с Digits в теле запроса. Затем вы можете выбрать эти Digits и инициировать новый вызов для пользователя с этим добавочным номером. Когда этот вызов соединится, вы можетезатем поместите их в исходную конференцию.

Итак, это должно выглядеть примерно так:

Администратор TwiML:

<Response>
  <Dial hangupOnStar="true">
    <Conference startConferenceOnEnter="true" endConferenceOnExit="false">CALLERS_CONFERENCE_ID</Conference>
  </Dial>
  <Gather action="/transfer" input="dtmf" finishOnKey="#">
    <Say>Please enter the extension you want to dial</Say>
  </Gather>
</Response>

Тогда действие /transfer должно, впсевдокод, сделайте что-то вроде:

/ перевод

def transfer
  extension = params["Digits"]
  twilioClient.calls.create( to: getNumberFromExtension(extension), from: TWILIO_NUMBER, url: "https://example.com/connect" )
  return "<Response><Hangup/></Response>" # this hangs up the receptionist
end

Наконец, конечная точка /connect, указанная в новом вызове выше, должна вернуть TwiML для удаления нового вызывающего абонента в конференцию:

<Response>
  <Dial>
    <Conference startConferenceOnEnter="true" endConferenceOnExit="true">CALLERS_CONFERENCE_ID</Conference>
  </Dial>
</Response>

Вы даже можете сделать конечную точку /connect такой же, как исходный регистратор TwiML, что позволит следующему абоненту по вызову также выполнить передачу, нажав * и набрав другой номер.xtension.

Дайте мне знать, если это вообще поможет.

...