ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Проблема звонка по команде крона (двойной колбэк)

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Проблема звонка по команде крона (двойной колбэк)

Сообщение zoleg » 03 ноя 2018, 14:22

Привет!

Проблема: идет двойной колбэк.

Описание:

В момент формирования колфайла неизвестен свободный канал, поэтому его приходится искать налету, потому получилась следующая конструкция:

1- крон каждую минуту дергает скрипт написанный на C,
2 -скрипт проверяет интервал времени и при совпадении условий генерирует колфайл.
3 — колфайл вызывает Local/$NUMBER@declined-dialer в котором определяется свободный канал и делается вызов абонента
4 — на declined-dialer происходит обработка колфайла контекстом canceled-order-buyer-info-daria.

Проблема: Local/$NUMBER@declined-dialer многократно вызывается не зависимо от того поднта трубы юзверем или нет. В результате приходит не один, два-пять одновременных звонков.

Крон? Диалплан? Нет метки состояния звонка? Другие варианты?

Код: выделить все
LogFile='/var/log/asterisk/callbackmobile.log'
TmpFile='/var/spool/asterisk/tmp/$NUMBER'
CallFile='/var/spool/asterisk/outgoing/$NUMBER'
cat > /var/spool/asterisk/tmp/$NUMBER << EOF
MaxRetries: 4
Channel: Local/$NUMBER@declined-dialer
Context: canceled-order-buyer-info-daria
Extension: s
Set: DIALEDID=$NUMBER
Set: idsdb=$IDSDB
Set: clphone=$NUMBER
Set: standnumber=$STOPNUM
Set: clientid=$CLID
Set: clstreet=$STREET
Set: clhouse=$CLHOUSE
Set: clporch=$PORCH
SEt: clapart=$APART
Set: carclass=$CARCLASS
Set:  CID=$NUMBER
Set: language=ru
#Set: carclass=$CARCLASS
#Set: stopid=$STOPID
#Set: stoporder=$STOPORDER
RetryTime: 12
WaitTime: 45
EOF
touch -d "$delate seconds" /var/spool/asterisk/tmp/$NUMBER
(sleep 1; mv /var/spool/asterisk/tmp/$NUMBER /var/spool/asterisk/outgoing/$NUMBER;) &



Код: выделить все
[declined-dialer]

exten => _.,1,Set(anyphone=${EXTEN:-10})
exten => _.,n,AGI(/usr/share/call-taxi/tools-call-taxi,${PBXTYPE},ops,${anyphone},${telcitydig})
exten => _.,n,Gosub(gsm-gate-looking-free-chan,s,1(${OPSOS}))
exten => _.,n,Dial(${${OPSOS}}/${if8}${anyphone},40,m()S(200))
exten => _.,nHangup()




Код: выделить все
[canceled-order-buyer-info-daria]

exten => s,1,Answer()
exten => s,n,Wait(1)
exten => s,n(lbl_canceled-order-buyer-info-daria_0),Set(TIMEOUT(response)=120)
exten => s,n,Set(TIMEOUT(digit)=5)
exten => s,n,Background(taxi/general/ru/no-car-com&${language}/digits/1)
exten => s,n,WaitExten(1)
exten => s,n,Goto(lbl_canceled-order-buyer-info-daria_0)
exten => 1,1,Wait(1)
exten => 1,n,AGI(/usr/share/call-taxi/tools-call-taxi,${PBXTYPE},cso,${idsdb},${clphone},${standnumber},${clientid},${clstreet},${clhouse},${clporch},${clapart},${carclass})
exten => 1,n,Playback(taxi/general/${language}/order-taken)
exten => 1,n,GotoIf($["${PLAYBACKSTATUS}" = "SUCCESS"]?:lbl_canceled-order-buyer-info-daria_1)
exten => 1,n(lbl_canceled-order-buyer-info-daria_1),Hangup()
Уникальные решения:
- Диспетчерская такси без диспетчеров.
- CDMA модем ZTE AC7810/AC5710+либа к chan_dongle+Астериск = канал ГТС.
- Бесшумные АТС и серверы (1U-3U 19" 12 Вольт, 35 Ват) разработанные специально для диспетчерских служб такси.
zoleg
 
Сообщений: 49
Зарегистрирован: 25 ноя 2011, 12:33
Откуда: UA

Re: Проблема звонка по команде крона (двойной колбэк)

Сообщение zzuz » 03 ноя 2018, 16:05

Диалплан перегруженный до нельзя для такой функциональности , как обратный вызов. Боюсь предположить , что же там в кроновском скрипте. Копаться в вашем коде скорее всего никто не будет , так как проект явно коммерческий .
Решение - переписать диалплан на что-то более адекватное , отказаться от крона , использовать AGI .
Линия24 - Системы Массового Телефонного Обслуживания
Аватар пользователя
zzuz
 
Сообщений: 1658
Зарегистрирован: 21 сен 2010, 13:33

Re: Проблема звонка по команде крона (двойной колбэк)

Сообщение zoleg » 03 ноя 2018, 17:55

Ok!
Тогда вопрос простой - как организовать колбэк через канал, который неизвестен в момент генерации колбэка.
Или даже так: колбэк-будильник через множество каналов не объединенных в группы или группу
Или так: определение свободного канала из стороннего скрипта до создания колфайла
Уникальные решения:
- Диспетчерская такси без диспетчеров.
- CDMA модем ZTE AC7810/AC5710+либа к chan_dongle+Астериск = канал ГТС.
- Бесшумные АТС и серверы (1U-3U 19" 12 Вольт, 35 Ват) разработанные специально для диспетчерских служб такси.
zoleg
 
Сообщений: 49
Зарегистрирован: 25 ноя 2011, 12:33
Откуда: UA

Re: Проблема звонка по команде крона (двойной колбэк)

Сообщение virus_net » 04 ноя 2018, 09:52

Вам же уже написали: использовать AGI.
В нем и определяйте свои каналы, в нем же можно и canceled-order-buyer-info-daria обрабатывать.
Согласен zzuz, что то вы перемудрили. Скрипт на Си, крон, диалплан, AGI. Судя по всему делало несколько людей и каждый дописывал свое, а не пытался переосмыслить все в целом.
Смешались в кучу кони, люди, И залпы тысячи орудий. Слились в ...


P.S. Ессно коммерческий, это же такси.
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
virus_net
 
Сообщений: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: Проблема звонка по команде крона (двойной колбэк)

Сообщение zoleg » 04 ноя 2018, 15:49

Спасибо за оперативную помощь, множество вариантов необходимых проверок, и ценные советы (взять и переписать) :)

Понятно что строка «/usr/share/call-taxi/….» указывает на то, что проект не для звонков бабушке или другу, однако, при жeлании можно было ее поменять на «/home/family/call-mama/» и все .

Любите обманываться?

На самом деле проект для своего такси, а не прога на продажу. Написана сразу для трех ПБ ИКС. Астер, ФриСвич, 3ц икс, а потому есть вещи которые проще делегировать в ПБХ, а не обрабатывать внутри сишной проги.

Просто бельмо «явно коммерческая», глазки закрыло, и мозг ленивым сделало.

Ну да ладно.
По сути:

Достаточно было проверить права на файло.

В итоге в колфайл добавилась всего одна строка, и она решила проблему

Код: выделить все
chmod 777 /var/spool/asterisk/tmp/$NUMBER


Итак:
Шаблон-скелет для вызова из колбека по крону + при неизвестном канале :
нужно действовать по схеме
1. в кол файле позаботиться о смене владельца файла или прав на файл (chown or chmod)
2. вызывать Local примерно так «Local/$NUMBER@outside-dialer» и в нем найти канал.
3. натравить вызов на контекст в котором будет этот вызов обработан типа так Context: dialer-handler
4. нарисовать этот самый dialer-handler


Все!
Уникальные решения:
- Диспетчерская такси без диспетчеров.
- CDMA модем ZTE AC7810/AC5710+либа к chan_dongle+Астериск = канал ГТС.
- Бесшумные АТС и серверы (1U-3U 19" 12 Вольт, 35 Ват) разработанные специально для диспетчерских служб такси.
zoleg
 
Сообщений: 49
Зарегистрирован: 25 ноя 2011, 12:33
Откуда: UA


Вернуться в Вопросы новичков

Кто сейчас на форуме

Сейчас этот форум просматривают: Abzyi и гости: 20

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH