Переадресация вызовов Twilio один за другим — как отключиться, если человек принимает вызов

#twilio #twilio-api #twilio-twiml #twilio-click-to-call #twimlet

Вопрос:

 <?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Say> Connecting call to Pinto </Say>
        <Dial record ="record-from-answer" timeout="10" hangupOnStar ="true">
            <Number>XXXXXXXX</Number>
        </Dial>
  <Say> Pinto is not picking up the call, now connecting call to Management </Say>
        <Dial record ="record-from-answer" timeout="10" hangupOnStar ="true">
            <Number>XXXXXXXX</Number>
          </Dial>
  <Say> No one is picking up right now. Please text us at  12022171828 </Say>
</Response>
 

Выше приведен поток переадресации вызовов для одного за другим.

Что я здесь ищу, если 1 — й пользователь присутствовал на вызове, то он не должен инициировать вызов на 2 — й номер, а также не должен говорить текстовое сообщение, которое находится в последней строке, если 1-й пользователь отключен, затем перенаправить вызов на 2-й номер-если 2-й номер не отвечает на вызов, то он должен сказать текстовое сообщение, которое находится в последней строке, если 1-й пользователь отключен, затем перенаправить вызов на 2-й номер-если 2-й номер принял вызов, то он не должен говорить текстовое сообщение, которое находится в последней строке

Также я хочу реализовать транскрибирование и обратный вызов транскрибирования с помощью TwiML. Итак, пожалуйста, помогите мне, как нам с этим поступить?

Ответ №1:

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

Итак, ваш первый ответ TwiML должен выглядеть так:

 <?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Say> Connecting call to Pinto </Say>
  <Dial record="record-from-answer" timeout="10" hangupOnStar="true" action="/complete">
    <Number>XXXXXXXX</Number>
  </Dial>
</Response>
 

Выше я добавил action="/complete" к <Dial> и это означает, что нам нужно приложение, которое также сможет отвечать на HTTP-запросы /complete . Нам также нужно, чтобы это было приложение, а не статический ответ, так как нам нужно выяснить, был ли получен ответ на вызов или нет, и решить, что делать дальше и каким TwiML отвечать.

Мы можем это сделать, потому что один из параметров, который Twilio отправляет на URL-адрес действия, таков DialCallStatus . Этот параметр может быть «завершено», «занято», «нет ответа», «не удалось» или «отменено», и это говорит вам о том, что произошло при первом вызове.

Итак, в вашем случае вы захотите проверить DialCallStatus и, если оно «завершено», вам не нужно возвращать следующее <Say> и <Dial> . Однако, если DialCallStatus это один из других статусов, вы хотите вернуть следующий <Say> и <Dial> . Это <Dial> должно включать другой action URL-адрес, который делает тот же выбор в конце второго <Dial> .

Я не уверен, на каком языке вы работаете, но идея псевдокода этого будет выглядеть так:

 post '/complete' do
  if params["DialCallStatus"] != "completed"
    return "<Response><Hangup/></Response>"
  else 
    return "<Response><Say>Pinto is not picking up the call, now connecting call to Management</Say><Dial ....></Response>"
  end
end
 

Комментарии:

1. Здравствуйте @philnash, спасибо за это разъяснение. Я новичок в этом twilio и хотел бы знать, как получить/задать URL-адрес действия. Также у меня есть еще одно сомнение, например, можем ли мы напрямую использовать TwiML Bin для переадресации вызовов, голосовой почты, транскрипции?

2. URL-адрес действия задан в XML, см. Пример в моем ответе. Вы можете использовать ячейки TwiML для статических ответов TwiML, но для создания динамических ответов, например, когда вам нужно отвечать по-разному в зависимости от статуса вызова, вам потребуется какое-то приложение. Если у вас его нет, вы можете изучить функции Twilio.

3. Я не уверен, на каком языке вы строите — на данный момент я просто пытаюсь использовать TwiML. Здесь после только нужно проверить, какой язык подходит

4. Вы можете создавать на любом языке, на котором хотите, вам просто нужно уметь отвечать на HTTP-запросы и возвращать XML.

5. Еще одно, что я хотел бы знать, это то, что я в основном использую это приложение для просмотра всего статуса, который приходит из Twilio. В основном ищу — 1) Я хочу переслать записанные звонки, голосовые сообщения, расшифрованные данные в приложение ( front.com ) — поддерживает ли Twilio эту интеграцию? Потому что впереди я получаю ответы в чате Twilio один на один-так что предпочитаю для всех. Если это позволяет показывать записи спереди, как мы можем это сделать?