twilio: обнаружение, что цель набора занята? - PullRequest
0 голосов
/ 18 ноября 2018

Я использую интерфейс twilio REST через колбу под python3.

Я использую метод dial для маршрутизации входящих вызовов на другой номер (хранится в переменной target) следующим образом:

resp = VoiceResponse()
resp.dial(
    target,
    action=url_for('callstatus'),
    method='GET',
    timeout=20
)
return Response(str(resp), 200, mimetype='application/xml')

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

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

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

Есть ли способ сделать это через twilio REST API?

ОБНОВЛЕНИЕ: я попробовал следующее, и это не сработало ...

resp = VoiceResponse()
dial = Dial(
    action=url_for('callstatus'),
    method='GET',
    timeout=20
)
dial.number(
    target,
    status_callback=url_for('callstatus'),
    status_callback_event='initiated ringing answered completed',
    status_callback_method='GET'
)
resp.append(dial)
return Response(str(resp), 200, mimetype='application/xml')

Когда я делаю это таким образом, я получаю сигнал занятости, и он продолжается вечно. Время ожидания в исходном объекте Dial игнорируется.

ПРИМЕЧАНИЕ: я основал приведенный выше код на следующем примере в документации twilio для Number ...

response = VoiceResponse()
dial = Dial()
dial.number(
    '+14158675310',
    status_callback_event='initiated ringing answered completed',
    status_callback='https://myapp.com/calls/events',
    status_callback_method='POST'
)
response.append(dial)

print(response)

ДРУГОЕ ПРИМЕЧАНИЕ: status_callback игнорируется в объекте number. Если я закомментирую action в объекте dial, мой обратный вызов состояния никогда не будет вызван, даже если я вешаю трубку. И если я помещу action обратно в объект dial и закомментирую все атрибуты status_callback в объекте number, обратный вызов действия вызовет , когда я вызову повесить трубку. Это означает, что action распознается, а status_callback игнорируется.

... и я получаю точно такое же поведение, независимо от того, установлю ли я метод POST или GET.

1 Ответ

0 голосов
/ 18 ноября 2018

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

Вы можете попробовать использовать <Number> в <Dial>, который у вас есть, включая атрибут statusCallback . Когда набранный номер занят, Twilio отправит веб-крючок, чтобы сообщить, что вызов завершен и причина была в том, что он был занят. Затем вы можете использовать REST API для изменения вызова и отправить его в новый TwiML для сбора голосовой почты.

В качестве альтернативы вы можете поместить входящий вызов в очередь с помощью <Enqueue> и использовать REST API для набора номера на телефонный номер. Если этот вызов затем возвращается как занятый, вы можете перенаправить входящий вызов из очереди в голосовую почту. Если исходящий вызов успешен, вы отвечаете <Dial> и <Queue>, чтобы соединить абонентов.

...