Twilio: Ruby: URL-адрес состояния обратного вызова для звонков, работающих параллельно: какой звонок завершен?

StackOverflow https://stackoverflow.com//questions/9625903

  •  09-12-2019
  •  | 
  •  

Вопрос

У меня есть список телефонов, которые должны быть приложены к моему приложению 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. Кроме того, если человек висит телефон в середине вызова, прежде чем я смогу обновить статус, я хочу, чтобы этот номер был вызван снова, вызванным последующим CRON.

Я знаю, что мне нужен атрибут статуса для телефонного звонка (например, Phone.status) со значениями not_started, in_progress и успешно_completed и атрибутом twilio_status (например, phone.twilio_status), со значениями Twilio_not_Started, Twilio_in_progress и 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-адрес обратного вызова, который может быть вызван, когда телефонный звонок завершится, но неясно, как обработчик обратного вызова может выяснить, какие из параллельных вызовов завершены. Есть ли способ сделать это, чтобы я мог пометить правильный звонок с правильным статусом?

Это было полезно?

Решение

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

https://www.twilio.com/docs/api/twiml/twilio_request

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top