Хорошо, тогда начнем по порядку:
по логике вещей что бы получить статус очереди нужно сначала запустить ее, запускаем:
exten => 550,1,Queue(test-queue)
оп! и все телефоны в очереди сразу зазвонили, хорошо, теперь нужно получить статус очереди:
exten => 550,2,NoOp(Queue Status: ${QUEUESTATUS})
упс! результата нет! почему? дайте подумать ммм... наверно потому что в данном случае вторая строчка вообще не срабатывает.
Да! Так и есть в данном случае. Что же тогда делать? Почитать документацию (форум) и сделать вывод, что к примеру можно использовать таблицу queue_log в БД asterisk.
тогда логика будет примерно такой (на примере упрошенного обратного звонка):
[callback-Queue]
exten => 550,1,Queue(callback-queue)
[callback-Dial]
exten => _8XXXXXXXXXX,1,Dial(SIP/${EXTEN}@test800)
exten => _8XXXXXXXXXX,2,AGI(/agi-bin/callback_sendmail.agi,${DIALSTATUS},${CHANNEL(uniqueid)},${EXTEN})
exten => _8XXXXXXXXXX,3,Hangup()enter code here
тут сначала запускаем очередь, далее первый кто взял трубку автоматом соединяется с целью, далее передаем в скрипт - статус, id и номер. В скрипте на основе полученных данных и данных из таблицы queue_log можно вывести статистику по не успешным звонкам, связав их по id.
Но вот беда параметр - ${CHANNEL(uniqueid)} почему то всегда на единицу меньше чем callid в таблице queue_log, просто ожидал что они будут соответствовать.
Дело в том что если взять за пример обратный звонок то по хорошему надо делать статистику успешных и не успешных звонков, при этом надо брать во внимание что по факту будет два звонка первый в колцентер и второй после снятия трубки на номер и оба звонка нужно учитывать в статистике.
Вообщем как их связать?
правильно - через queue_log. естественно вторая строчка сработает только после выхода из очереди.
у вас есть три варианта
1) правильный - читаем queue_log
2) тоже правильный, но геморойный - слушаем события в AMI
3) asterisk -rx "queue show"
Повангую:
exten => h,1,NoOp(hangup for channel: ${CALLERID(num)} ${CHANNEL(name)} ${CHANNEL(uniqueid)} Queue Status: ${QUEUESTATUS})
exten => h,n,AGI(/full/path/to/script,${CALLERID(num)},${CHANNEL(uniqueid)},${QUEUESTATUS})
exten => h,n,Hangup()
И это запихнуть в контекст где вызывается очередь. После чего в вашем скрипте /full/path/to/script вам будет доступно три переменных: номер, ID вызова, статус выхода из очереди. Статусы:
This application sets the following channel variable upon completion: ${QUEUESTATUS}: The status of the call as a text string. TIMEOUT FULL JOINEMPTY LEAVEEMPTY JOINUNAVAIL LEAVEUNAVAIL CONTINUE
Но написали вы реально коряво, сложно что-то разобрать в вашем потоке сознания.
Задан: 2015-12-15 23:43:09 +0400
Просмотрен: 892 раз
Обновлен: Dec 16 '15
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
А что не получается? Где код ? Где попытки? Или за вас сделать нужно?
zzuz ( 2015-12-16 00:17:52 +0400 )редактироватьперечитал три раза.не понял что хотите. нужно правильное решение - возьмите готовое. или хотябы опишите нормально, чтоб понятно было.
meral ( 2015-12-16 02:20:32 +0400 )редактироватьЧтобы срабатывала какая-то строчка , она должна быть написана обдуманно, а не на авось.
zzuz ( 2015-12-16 13:40:36 +0400 )редактироватьа что вы хотели. queue callback не самая простая вещь. а потом оно еще и в ту же позицию не хочет садится. либо дебаг, либо когото нанять.
meral ( 2015-12-17 01:11:24 +0400 )редактировать