Twilio: Ruby: URL-адрес состояния обратного вызова для звонков, работающих параллельно: какой звонок завершен?
Вопрос
У меня есть список телефонов, которые должны быть приложены к моему приложению 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
Вы можете хранить это значение для отслеживания состояния на протяжении всего жизненного цикла вызовов.