VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

А может вышло бы лучше ?

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

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

Ответить
Topotyn
Сообщения: 16
Зарегистрирован: 07 июл 2015, 14:22

А может вышло бы лучше ?

Сообщение Topotyn »

Добрый день. Пишу в этой теме, так как только начинаю изучать Asterisk. Конкретно сейчас хочу спросить, можно ли было сделать следующую конфигурацию лучше ?, более надёжной, более простой ?
Дано: Имеем три транка, все многоканальные по три линии на каждом. Есть оплаченные минуты на месяц - 3000 по городу, 150 на моб.
Задача: равномерно использовать каждый номер, подсчитывать наши оплаченные минуты и блокировать звонки через данные номер по их окончанию, перекидывать звонок на следующий номер.
Моё (моё и напарника, который разбирается в mysql): Создаём два макроса, один на город, другой на моб. Запросом в mysql делаем выборку по количеству использованных минут в каждом номере и создаём для каждого переменную, после чего присваиваем наш лимит, после которого номер должен блокироваться. Далее сравниваем переменные с минутами и находим наименьший транк. После чего происходит звонок, который ограничен нашим оставшимся лимитом. Ну, я думаю, что при просмотре макроса и так будет всё понятно. Выкладываю макрос на городские, там запрос в mysql по сложнее.
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER: macros
exten => s,1,MYSQL(Connect connid localhost asterisk asterisk asteriskcdrdb)
same => n,MYSQL(Query resultid ${connid} select (SELECT coalesce(SUM(billsec),0) FROM cdr WHERE dstchannel LIKE '%1out%' and calldate BETWEEN DATE_FORMAT(NOW(),'%Y-%m-01') AND LAST_DAY(NOW()) + INTERVAL 1 DAY and LENGTH(dst)<>9)+(SELECT coalesce(SUM(billsec),0) FROM cdr WHERE dstchannel LIKE '%1out%' and calldate BETWEEN DATE_FORMAT(NOW(),'%Y-%m-01') AND LAST_DAY(NOW()) + INTERVAL 1 DAY and mid(dst,1,2) not in (39, 50, 63, 66, 67, 68, 91, 92, 93, 94, 95, 96, 97, 98, 99) and LENGTH(dst)=9) from cdr limit 1)
same => n,MYSQL(Fetch fetchid ${resultid} channal1)
same => n,MYSQL(Clear ${resultid})
same => n,MYSQL(Query resultid ${connid} select (SELECT coalesce(SUM(billsec),0) FROM cdr WHERE dstchannel LIKE '%2out%' and calldate BETWEEN DATE_FORMAT(NOW(),'%Y-%m-01') AND LAST_DAY(NOW()) + INTERVAL 1 DAY and LENGTH(dst)<>9)+(SELECT coalesce(SUM(billsec),0) FROM cdr WHERE dstchannel LIKE '%2out%' and calldate BETWEEN DATE_FORMAT(NOW(),'%Y-%m-01') AND LAST_DAY(NOW()) + INTERVAL 1 DAY and mid(dst,1,2) not in (39, 50, 63, 66, 67, 68, 91, 92, 93, 94, 95, 96, 97, 98, 99) and LENGTH(dst)=9) from cdr limit 1)
same => n,MYSQL(Fetch fetchid ${resultid} channal2)
same => n,MYSQL(Clear ${resultid})
same => n,MYSQL(Query resultid ${connid} select (SELECT coalesce(SUM(billsec),0) FROM cdr WHERE dstchannel LIKE '%3out%' and calldate BETWEEN DATE_FORMAT(NOW(),'%Y-%m-01') AND LAST_DAY(NOW()) + INTERVAL 1 DAY and LENGTH(dst)<>9)+(SELECT coalesce(SUM(billsec),0) FROM cdr WHERE dstchannel LIKE '%3out%' and calldate BETWEEN DATE_FORMAT(NOW(),'%Y-%m-01') AND LAST_DAY(NOW()) + INTERVAL 1 DAY and mid(dst,1,2) not in (39, 50, 63, 66, 67, 68, 91, 92, 93, 94, 95, 96, 97, 98, 99) and LENGTH(dst)=9) from cdr limit 1)
same => n,MYSQL(Fetch fetchid ${resultid} channal3)
same => n,MYSQL(Clear ${resultid})
same => n,MYSQL(Disconnect ${connid})
same => n,Set(porog=180000)
same => n,GotoIf($[${channal1} <= ${channal2}]?step1:step2)
same => n(step1),GotoIf($[${channal1} <= ${channal3}]?channal1:step2)
same => n(step2),GotoIf($[${channal2} <= ${channal3}]?channal2:channal3)
same => n(channal1),Set(trank=ukr_sip_1out) ;16
same => n,GotoIf($[${channal1}>${porog}]?finish)
same => n,Set(limit=$[${porog} - ${channal1}])
same => n,Goto(27)
same => n(channal2),Set(trank=ukr_sip_2out)
same => n,GotoIf($[${channal2}>${porog}]?finish)
same => n,Set(limit=$[${porog} - ${channal2}])
same => n,Goto(27)
same => n(channal3),Set(trank=ukr_sip_3out)
same => n,GotoIf($[${channal3}>${porog}]?finish)
same => n,Set(limit=$[${porog} - ${channal3}])
same => n,GotoIf($[${limit}<=600]?Playback:dial) ;27
same => n(Playback),Playback(anna)
same => n(dial),Dial(SIP/${trank}/${ARG1},,S(${limit})tTr)
same => n,GotoIf($[${DIALSTATUS}=CONGESTION]?next1)
same => n,GotoIf($[${DIALSTATUS}=BUSY]?finish)
same => n(next1),GotoIf($[${trank}=ukr_sip_1out]?channal2:next2)
same => n(next2),GotoIf($[${trank}=ukr_sip_2out]?channal3:channal1)
same => n(finish),Hangup
exten => h,1,MYSQL(Clear ${resultid})
same => n,MYSQL(Disconnect ${connid})
awsswa
Сообщения: 2390
Зарегистрирован: 09 июн 2012, 10:52
Откуда: Россия, Пермь skype: yarick_perm

Re: А может вышло бы лучше ?

Сообщение awsswa »

http://awsswa.livejournal.com/24796.html

кроме времени можно сделать и по минутам
платный суппорт по мере возможностей
Topotyn
Сообщения: 16
Зарегистрирован: 07 июл 2015, 14:22

Re: А может вышло бы лучше ?

Сообщение Topotyn »

Хочется больше разобраться в самой структуре Asterisk, через web-морду думаю особо смысл не понять. Хочется через конфиги, ручками.
Pechen
Сообщения: 118
Зарегистрирован: 29 дек 2013, 23:16

Re: А может вышло бы лучше ?

Сообщение Pechen »

используйте odbc.
Samael28
Сообщения: 1057
Зарегистрирован: 08 янв 2011, 18:32
Откуда: Киев
Контактная информация:

Re: А может вышло бы лучше ?

Сообщение Samael28 »

А лучше - AGI ) Читать код, написанный на нормальном языке легче читать, когда базы данных используются.
Мой профайл на Upwork
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH