Люди, уже два дня по нету бегаю.
Не могу найти как получить статус звонка (NOANSWER, BUSY и т.д.) в exntension failed.
За ранее спасибо.
Например звонок создается через call файл.
Но не может дозвониться куда ему определенно и звонок попадает в exten failed ( exten => failed,1,NoOp(need status of call); ).
И мне нужно получить статус по какой причине случился не дозвон.
| ToxaP писал(а): |
| Например звонок создается через call файл. |
Какие статусы нужно - штатные?
| Цитата: |
| (s-${DIALSTATUS},1) ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER) |
Значение в переменной ${DIALSTATUS} будет только тогда, когда будет выполняться cmd Dial.
_________________
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru
| ToxaP писал(а): |
| Значение в переменной ${DIALSTATUS} будет только тогда, когда будет выполняться cmd Dial. |
что можно в таком случае послать в вызванный канал?
у меня получается что как только абонент берет трубку, вызов обрывается
можно какой нить примерчик
спасибо
_________________
Когда меня принес аист, родители смеялись и хотели взять аиста
context local {
_8XXXXXXXXXX => {
Dial(SIP/sipnet/${EXTEN}|60|tT);
Playback(koko_1|skip);
Playback(koko_2|skip);
Hangup();
}
}
context outbound {
200 => {
Answer();
WaitExten(60);
Hangup();
}
}
Так в вызванном 8Х тишина
если так
context outbound {
200 => {
Answer();
Playback(koko_1|skip);
Playback(koko_2|skip);
Hangup();
}
тогда в вызванном канале все слушно, но не с начала
звоню так
MaxRetries: 0
Channel: local/200@outbound
WaitTime: 25
Priority: 1
RetryTime: 5
Context: local
Extension: 822222222
Как сделать чтоб Playback начинал проигрывать звуковой файл только после того как ответят в канале я так и не придумал
_________________
Когда меня принес аист, родители смеялись и хотели взять аиста
надо так
context local {
_8XXXXXXXXXX => {
Dial(SIP/sipnet/${EXTEN}|60|tT);
Hangup();
}
}
context outbound {
200 => {
Answer();
Playback(koko_1|skip);
Playback(koko_2|skip);
Hangup();
}
.call
MaxRetries: 0
Channel: local/8хххххххххх@local
WaitTime: 25
Priority: 1
RetryTime: 5
Context: outbound
Extension: 200
_________________
Когда меня принес аист, родители смеялись и хотели взять аиста
Последний раз редактировалось: dread (Вт Июл 08, 2008 14:14)
если допустим есть туча call и нужно всех обзвонитьсхема работает
но
как я не игрался с задержками и количеством вызовов бестолку вызовы идут неровно и провалы серьезные
потом понял что настроить таким образом чтоб постоянно було занято допустим 6 линий нереально.
Возникла мысль, но не знаю как реализовать
итак
из call файла звонить на локальный экстеншн и ставить вызов в очередь
далее например вот так
http://asteriskforum.ru/viewtopic.php?p= ... Local#3069
их от туда доставать .
но тут возникает косяк, ибо все вызовы из очереди сразу обрабатываются и все.
Так вот может кто знает как сделать виртуального агента, на которого можно поставить лимит в 1 линию и все.
Те идея такая что я кидаю допустим 50 вызовов в очередь ,
очередь обслуживает 6 агентов.
а дальше по мере высвобождений
вызовы через виртуальных агента по одному уходят в обработку.
надеюсь понятно объяснил
Спасибо
_________________
Когда меня принес аист, родители смеялись и хотели взять аиста
Последний раз редактировалось: dread (Пт Июл 04, 2008 12:29)
if (( `ls -1 /var/spool/asterisk/outgoing | wc -l` < 5 ))
then execute_function_that_generates_the_callfile_and_moves_it_into_asterisk_outgiong_directory
fi
Хинт №2: кроме проверки кол-ва файлов в outgoing можно еще и другими способами контроллировать количество звонков при auto dialout, например, при начале звонка создавать файл-флаг, а после окончания звонка его удалять.
на данный момент я делаю так
беру 10 клиентов генерю 10 файлов и отправляю в астериск
через минуту смотрю сколько нехватает и добавляю.
Только вся соль в неравномерности(не возможно предсказать ответят на том конце или нет и когда и ти), те невозможно добиться чтоб обзвон шел в "n" линий
все это очень сильно скачет. При больших базах на обзвон такая неравномерность сильно сказывается на производительности
Поэтому и мыслится о именно каком-то виртуальном агенте. Который как только отзвонил , сразу звонит по другому.
PS я не спамер и не занимаюсь рекламмой
PSS Сейчас делаю похожим на предложенную вами схему только через sql
_________________
Когда меня принес аист, родители смеялись и хотели взять аиста
xPasha тем же занимается время от времени, у него многому научился.
// http://www.opennet.ru/base/net/asterisk_autodial.txt.html
| Romik писал(а): | ||
| ToxaP писал(а): |
| Значение в переменной ${DIALSTATUS} будет только тогда, когда будет выполняться cmd Dial. |
Такая же задача - нужно получить DIALSTATUS и ANSWEREDTIME звонка, выполняемого из call-файла. Пробую сделать следующим образом:
Выдержка из диалплана:
[dialout]
exten => 10,1,Dial(SIP/${callto},30)
exten => 10,n,NoOp(callto is: ${callto}, outcall_id is: ${outcall_id}, dialstatus: ${DIALSTATUS})
exten => 10,n,Hangup()
exten => 20,1,Answer
exten => 20,n,Playback(/var/tmp/${outcall_id})
exten => 20,n,NoOp(callto is: ${callto}, outcall_id is: ${outcall_id}, dialstatus: ${DIALSTATUS})
exten => 20,n,Hangup()
call-файл:
Channel: Local/10@dialout
CallerID: "foo"
Context: dialout
Extension: 20
Priority: 1
Set: callto=501
Set: outcall_id=1
Собственно проблема: после того, как выполняется Dial в extension 10, звонок уходит в 20 и до приоритетов 2 и 3 в 10-м дело даже не доходит. В 20 выполняются все приоритеты, но DIALSTATUS там уже нет:
-- Executing [20@dialout:3] NoOp("SIP/501-00000093", "callto is: 501, outcall_id is: 1, dialstatus: ") in new stack
Asterisk 1.6.2.
Просьба подсказать, что я делаю не так и как всё таки добраться до ${DIALSTATUS}
_8XXXXXXXXXX => {
Dial(SIP/sipnet/${EXTEN}|60|tT);
Hangup();
}
}
context outbound {
200 => {
Answer();
Playback(koko_1|skip);
Playback(koko_2|skip);
Hangup();
}
.call
MaxRetries: 0
Channel: local/8хххххххххх@local
WaitTime: 25
Priority: 1
RetryTime: 5
Context: outbound
Extension: 200
Читай внимательно красным
| Цитата: |
| Читай внимательно красным |
Попробовал вынести свой 20-й extension в отдельный контекст outbound, как ты цитируешь. Толку 0 - DIALSTATUS-а как не было так и нет. Звонок-то у меня делается и файлы проигрываются.
UPD: похоже понял:
переход с приоритета 1
| Код: |
| exten => 10,1,Dial(SIP/${callto},30) |
на приоритет 2
| Код: |
| exten => 10,n,NoOp(callto is: ${callto}, outcall_id is: ${outcall_id}, dialstatus: ${DIALSTATUS}) |
происходит только если дозвониться не удалось вообще.
Осталось непонятным, как же добраться до ANSWEREDTIME.
_8XXXXXXXXXX => {
Dial(SIP/sipnet/${EXTEN}|60|g);
Hangup();
}
h => {
NoOp(${DIALSTATUS} ${ANSWEREDTIME});
}
}
Т.е. делая звонки на LocalChannel
У меня в данный момент работает такая система, но не автодозвон, а Click2Call.
Но идеология тажа.
Все это у меня написано на AEL.
Added after 3 hours 26 minutes:
I eshe zabil napisat, w cdr.conf est eto;
; Normally, CDR's are not closed out until after all extensions are finished
; executing. By enabling this option, the CDR will be ended before executing
; the "h" extension so that CDR values such as "end" and "billsec" may be
; retrieved inside of of this extension.
; endbeforehexten=no
udachi