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

whitelist в AstDB

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

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

whitelist в AstDB

Сообщение BuferlorD » 16 апр 2024, 10:35

Всем Приветствую вас, коллеги.
Немного предисловия.
Задача такая организовать для определенного пула телефонных номеров переадресацию на другой номер при наборе xxxx. (Номера в разнобой)
Решил попробовать реализовать через AstDB , вписав в whitelist. Зашел в cli: database put whitelist 1001 "VIP"
Тем самым добавил его в базу.
Кусок из диалплана
exten => 2222,1,NoOp()
exten => 2222,n,GotoIf($[${REGEX("[**]"${CALLERID(num)})}]?cut_prefix:passthrough)
exten => 2222,n(cut_prefix),Set(CALLERID(num)=${CALLERID(number):2})
exten => 2222,n(passthrough),Set(PEERNAME=${EXTEN})
exten => 2222,n,Answer()
;exten => 2222,n,GotoIf($["${CALLERID(num)}" : "27594"]?help-VIP,2221,1) - вариант рабочий но добавлять в диалплан кучу строк (порядка 40) думаю не очень.
;exten => 2222,n,System($[${/etc/asterisk/checkwhitelistVIP.sh()}=1]?help-VIP,2221,1) - пробовал через sh скрипт, что то не взлетело, выдает ошибку синтаксиса, нужно разбираться сдя по всему лишних скобок напилил

exten => 2222,n,GotoIf($[${DB_EXISTS(WHITELIST()}=1]?help-VIP,2221,1) - не работает, просто проходит мимо
exten => 2222,n,GotoIf($[${WHITELIST()}=1]?help-VIP,2221,1) - тоже не работает
exten => 2222,n,GotoIf($[${BLACKLIST()}=1]?help-VIP,2221,1) - Если добавить нужный номер в базе в Blacklist, и сделать так то все работает, т.к. при обращении выдает 1 = если есть и 0 если нету.
Не могу понять.... про whitelist в книжке ничего не нашел что касаемо AstDB. Все примеры с blacklist.
Можно подумать что при обращении к белому листу он обращается в переменную, а не в базу, но вроде как добавил DB_EXISTS.
BuferlorD
 
Сообщений: 1
Зарегистрирован: 12 апр 2024, 09:55

Re: whitelist в AstDB

Сообщение ded » 16 апр 2024, 19:37

Предложу не конструировать велосипед из соломы, а воспользоваться уже готовым.
В популярной оболочке FreePBX это делается сервисным кодом *72 Call forward All

Предлагается голосом ввести номер, на который делается переадресация, и всё. Отключить перенаправление - по сервисному коду *73.
Более того, системнфый администратор может отключить вообще все перенаправления в системе *74.

Можно выдрать готовые макросы, готовые голосовые сообщенгия, и корректно вставить в ваш диал-план. Или преодолеть себя, и начать уже пользоваться FreePBX полностью.
Код: выделить все
*CLI> dialplan show *72@from-internal
[ Included context 'app-cf-on' created by 'pbx_config' ]
  '*72' =>          1. Answer()                                   [pbx_config]
                    2. Wait(1)                                    [pbx_config]
                    3. Macro(user-callerid,)                      [pbx_config]
                    4. Set(fromext=${AMPUSER})                    [pbx_config]
                    5. GotoIf($["${fromext}"!=""]?startread)      [pbx_config]
                    6. Playback(agent-loggedoff)                  [pbx_config]
                    7. Macro(hangupcall,)                         [pbx_config]
     [startread]    8. Gosub(app-cf-on,lang-playback,1(hook_1))   [pbx_config]
                    9. GotoIf($["foo${toext}"="foo"]?startread)   [pbx_config]
                    10. Wait(1)                                   [pbx_config]
                    11. Set(DB(CF/${fromext})=${toext})           [pbx_config]
                    12. Set(CHAN=${DB(DEVICE/${fromext}/dial)})   [pbx_config]
                    13. UserEvent(FOP2CUST,Family: astdbcust,Channel: ${CHAN},Value: ${toext} ) [pbx_config]
                    14. Set(STATE=BUSY)                           [pbx_config]
                    15. Gosub(app-cf-on,sstate,1())               [pbx_config]
                    16. Gosub(app-cf-on,lang-playback,1(hook_2))  [pbx_config]
                    17. Macro(hangupcall,)                        [pbx_config]

Понятно, что ещё нужно субрутину app-cf-on тоже вытащить, и что некоторые шаги, типа
UserEvent(FOP2CUST,Family: astdbcust,Channel: ${CHAN},Value: ${toext} )
можно замаркировать,Но это продуктивнее, чем лепить из глины и палок что-то своё.
ded
 
Сообщений: 15843
Зарегистрирован: 26 авг 2010, 19:00


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28

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