Twilio: Ruby: URL-адрес состояния обратного вызова для параллельных вызовов: какой вызов завершен? - PullRequest
3 голосов
/ 09 марта 2012

У меня есть список телефонов, которые должны вызываться моим приложением Twilio очень часто. У меня есть задание cron, которое запускается каждую минуту и ​​составляет список всех телефонов, которые должны быть вызваны в следующую минуту. Список содержит вызовы, которые запланированы на следующую минуту, а также вызовы, которые не были завершены должным образом в течение последнего часа.

Для каждого телефона в списке у меня есть код, который выглядит следующим образом (в Ruby), чтобы начать список телефонных звонков (список «телефоны»), которые будут выполняться параллельно, и этот фрагмент выполняется каждую минуту.

phones.each do |phone|
    callbackurl="http://myapp.com/twiliocallback?phone=#{phone.id}"
    data={:from=>'16135551234', 
      :to=>phone.number, 
          :url=>callbackurl
         }

    client=Twilio::REST::Client.new(ACCOUNT_SID, ACCOUNT_TOKEN, :ssl_verify_peer => false)
    client.account.calls.create data
end

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

Я знаю, что мне нужен атрибут состояния для телефонного звонка (например, phone.status) со значениями NOT_STARTED, IN_PROGRESS и SUCCESSFULLY_COMPLETED и атрибутом twilio_status (например, phone.twilio_status), со значениями TWILIO_NOT_STARTED, TWILIO TWILIO_COMPLETED.

Звонки начинаются как

phone.status="NOT_STARTED" 
phone.twilio_status="TWILIO_NOT_STARTED"

и, как только я создаю телефонный звонок, я могу обновить статус звонка:

phone.status="IN_PROGRESS" 
phone.twilio_status="TWILIO_IN_PROGRESS"

Если вызов успешно завершен в пределах пути успеха, я могу установить статус

phone.status="SUCCESSFULLY_COMPLETED"

Если я могу выяснить, когда звонок отключился от Twilio, то я могу сказать, был ли звонок отменен, выполнив это

is_aborted? = twilio.status=="IN_PROGRESS" && twilio.twilio_status=="TWILIO_COMPLETED"

Однако я не знаю, как запустить код

phone.twilio_status="TWLIO_COMPLETED"

для определенного телефонного звонка, когда телефонный звонок зависает в середине рабочего процесса Twilio или даже в конце рабочего процесса.

У Twilio, похоже, есть URL-адрес обратного вызова, который можно вызвать после завершения телефонного вызова, но неясно, как обработчик обратного вызова может выяснить, какой из параллельных вызовов завершен. Есть ли способ сделать это, чтобы я мог пометить правильный вызов с правильным статусом?

1 Ответ

3 голосов
/ 09 марта 2012

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

https://www.twilio.com/docs/api/twiml/twilio_request
https://www.twilio.com/docs/api/rest/making-calls

Вы можете сохранить этот CallSidзначение для отслеживания статуса в течение всего жизненного цикла вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...