AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

call out, failed status

Asterisk IP PBX 23 сообщений -
#1

Всем привет.

Люди, уже два дня по нету бегаю.
Не могу найти как получить статус звонка (NOANSWER, BUSY и т.д.) в exntension failed.

За ранее спасибо.
#3

Мы наверное друг-друга не поняли.

Например звонок создается через call файл.
Но не может дозвониться куда ему определенно и звонок попадает в exten failed ( exten => failed,1,NoOp(need status of call); ).

И мне нужно получить статус по какой причине случился не дозвон.
#4

ToxaP писал(а):
Например звонок создается через call файл.
Это не было описано явным образом, и догадаться сложно.
Какие статусы нужно - штатные?
Цитата:
(s-${DIALSTATUS},1) ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
#5

2 Ded: Вы хотите помочь или по умничать?

Значение в переменной ${DIALSTATUS} будет только тогда, когда будет выполняться cmd Dial.
#6

А как насчет в этом failed поставить, например, Wait(1000) и в CLI посмотреть данные о канале? Там выводится список всех установленных переменных. Если её там нет, то нужно дописывать код астериска.
_________________
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru
#7

ToxaP писал(а):
Значение в переменной ${DIALSTATUS} будет только тогда, когда будет выполняться cmd Dial.
Решение: callout file создавайте со звонком на какой-нибудь из Local номеров (chan_local), a уже из контекста, который принимает XXX/Local, делайте Dial куда вам надо, и забирайте ваш ${DIALSTATUS}, CDR и прочее.
#8

Спасибо, идеи Romik-а полностью подходит!
#9

а можно по подробнее в этом месте ?
что можно в таком случае послать в вызванный канал?
у меня получается что как только абонент берет трубку, вызов обрывается

можно какой нить примерчик
спасибо

_________________
Когда меня принес аист, родители смеялись и хотели взять аиста
#10

Покажите, что у вас настроено, и как звонок обрывается.
#11

Пробывал по всякому
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 начинал проигрывать звуковой файл только после того как ответят в канале я так и не придумал

_________________
Когда меня принес аист, родители смеялись и хотели взять аиста
#12

а понял Smile
надо так
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)
#13

Smile ага
#14

В продолжении темы
если допустим есть туча call и нужно всех обзвонитьсхема работает
но
как я не игрался с задержками и количеством вызовов бестолку вызовы идут неровно и провалы серьезные
потом понял что настроить таким образом чтоб постоянно було занято допустим 6 линий нереально.
Возникла мысль, но не знаю как реализовать
итак
из call файла звонить на локальный экстеншн и ставить вызов в очередь
далее например вот так
http://asteriskforum.ru/viewtopic.php?p= ... Local#3069
их от туда доставать .
но тут возникает косяк, ибо все вызовы из очереди сразу обрабатываются и все.
Так вот может кто знает как сделать виртуального агента, на которого можно поставить лимит в 1 линию и все.

Те идея такая что я кидаю допустим 50 вызовов в очередь ,
очередь обслуживает 6 агентов.
а дальше по мере высвобождений
вызовы через виртуальных агента по одному уходят в обработку.

надеюсь понятно объяснил
Спасибо

_________________
Когда меня принес аист, родители смеялись и хотели взять аиста


Последний раз редактировалось: dread (Пт Июл 04, 2008 12:29)
#15

Всё вполне реально. Будьте проще, не закидывайте в outgoing много звонков одновременно, контроллируйте их количество.

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, например, при начале звонка создавать файл-флаг, а после окончания звонка его удалять.
#16

Хм кажеться не так объяснил
на данный момент я делаю так
беру 10 клиентов генерю 10 файлов и отправляю в астериск
через минуту смотрю сколько нехватает и добавляю.

Только вся соль в неравномерности(не возможно предсказать ответят на том конце или нет и когда и ти), те невозможно добиться чтоб обзвон шел в "n" линий
все это очень сильно скачет. При больших базах на обзвон такая неравномерность сильно сказывается на производительности
Поэтому и мыслится о именно каком-то виртуальном агенте. Который как только отзвонил , сразу звонит по другому.

PS я не спамер и не занимаюсь рекламмой
PSS Сейчас делаю похожим на предложенную вами схему только через sql

_________________
Когда меня принес аист, родители смеялись и хотели взять аиста
#17

Вобщем то.. я уже все сказал. У меня скрипт был на perl и висел в памяти, генерируя звонки, поддерживая их количество примерно одним и тем же на протяжении всей обзвонки.
xPasha тем же занимается время от времени, у него многому научился.

// http://www.opennet.ru/base/net/asterisk_autodial.txt.html
#18

Romik писал(а):
ToxaP писал(а):
Значение в переменной ${DIALSTATUS} будет только тогда, когда будет выполняться cmd Dial.
Решение: callout file создавайте со звонком на какой-нибудь из Local номеров (chan_local), a уже из контекста, который принимает XXX/Local, делайте Dial куда вам надо, и забирайте ваш ${DIALSTATUS}, CDR и прочее.

Такая же задача - нужно получить 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}
#19

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


Читай внимательно красным
#20

Цитата:
Читай внимательно красным


Попробовал вынести свой 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.
#21

context local {
_8XXXXXXXXXX => {
Dial(SIP/sipnet/${EXTEN}|60|g);
Hangup();
}
h => {
NoOp(${DIALSTATUS} ${ANSWEREDTIME});
}

}
#22

Сам-то пробовал? В hangup extension эти переменные пустые.
#23

Используй Local Channel
Т.е. делая звонки на 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