Разработчик 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.
Дайте мне знать, если это вообще поможет.