The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  правила/FAQ  поиск  регистрация  вход/выход  слежка  RSS
"Asterisk помощь с dialplan"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (VoIP)
Изначальное сообщение [ Отслеживать ]

"Asterisk помощь с dialplan"  +/
Сообщение от Shodan (ok) on 17-Окт-17, 18:55 
Подскажите как стандартными средствами астериска реализовать такую логику

если CID такой то - звоним через такого провайдера
если CID такой то - звоним через другого провайдера

Например

exten => _[+0-9]X.,1,NoOp()
same => n,Set(sip=${IF($["${CALLERID(num)}" = "+12345"]?sip_trunk1)})
same => n,Set(sip=${IF($["${CALLERID(num)}" = "+67891"]?sip_trunk2)})
same => n,Dial(SIP/${sip}/${EXTEN})

Проблема в том что астериск смотрит только на первое правило с IF и дальше уже не проверяет
Можно ли реализовать цикличную проверку по всем IF-ам?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Asterisk помощь с dialplan"  +/
Сообщение от Andrey (??) on 17-Окт-17, 22:44 
>[оверквотинг удален]
> если CID такой то - звоним через такого провайдера
> если CID такой то - звоним через другого провайдера
> Например
> exten => _[+0-9]X.,1,NoOp()
> same => n,Set(sip=${IF($["${CALLERID(num)}" = "+12345"]?sip_trunk1)})
> same => n,Set(sip=${IF($["${CALLERID(num)}" = "+67891"]?sip_trunk2)})
> same => n,Dial(SIP/${sip}/${EXTEN})
> Проблема в том что астериск смотрит только на первое правило с IF
> и дальше уже не проверяет
> Можно ли реализовать цикличную проверку по всем IF-ам?

Вы используете в операторе IF только одно условие - true. Попробуйте использовать переход по false

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Asterisk помощь с dialplan"  +/
Сообщение от Shodan (ok) on 17-Окт-17, 22:59 
>[оверквотинг удален]
>> Например
>> exten => _[+0-9]X.,1,NoOp()
>> same => n,Set(sip=${IF($["${CALLERID(num)}" = "+12345"]?sip_trunk1)})
>> same => n,Set(sip=${IF($["${CALLERID(num)}" = "+67891"]?sip_trunk2)})
>> same => n,Dial(SIP/${sip}/${EXTEN})
>> Проблема в том что астериск смотрит только на первое правило с IF
>> и дальше уже не проверяет
>> Можно ли реализовать цикличную проверку по всем IF-ам?
> Вы используете в операторе IF только одно условие - true. Попробуйте использовать
> переход по false

Как раз false не хотело бы использовать, хотелось чтобы астер шел сверху вниз по ифам, и если тру, то прекращал поиск.
Я сейчас сделал через gotoif, но вышло более громоздко

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Asterisk помощь с dialplan"  +/
Сообщение от mmm62 on 18-Окт-17, 05:27 
Все уже придумано
exten => куда/кто

У ненадо с if извращаться

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "Asterisk помощь с dialplan"  +/
Сообщение от Shodan (ok) on 18-Окт-17, 19:07 
> Все уже придумано
> exten => куда/кто
> У ненадо с if извращаться

Да, проглядел, этот вариант подходит

Other options for defining extensions include an option commonly referred to as the ex-girlfriend logic. This logic matches the dialed extension irrespective of its origin based on the callerid of the person calling it

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "Asterisk помощь с dialplan"  +/
Сообщение от Shodan (ok) on 19-Окт-17, 14:09 
> Все уже придумано
> exten => куда/кто
> У ненадо с if извращаться

Хотя как-то странно это работает, на одних правилах работает, на других нет, так и не понял причину.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

7. "Asterisk помощь с dialplan"  +/
Сообщение от mmm62 on 19-Окт-17, 14:21 
>> Все уже придумано
>> exten => куда/кто
>> У ненадо с if извращаться
> Хотя как-то странно это работает, на одних правилах работает, на других нет,
> так и не понял причину.

ищите причину в callerid

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Asterisk помощь с dialplan"  +/
Сообщение от Shodan (ok) on 19-Окт-17, 17:35 
>>> Все уже придумано
>>> exten => куда/кто
>>> У ненадо с if извращаться
>> Хотя как-то странно это работает, на одних правилах работает, на других нет,
>> так и не понял причину.
> ищите причину в callerid

Например есть такой дайлплан

exten => _[+0-9]X.,1,NoOp
same => n,NoOp(CID ${CALLERID(num)})
same => n,Dial(SIP/1234/test_trunk1/${EXTEN})
same => n,Dial(SIP/5678/test_trunk2/${EXTEN})
same => n,Hangup()

Астериск всегда срабатывает на первое правило same => n,Dial(SIP/1234/test_trunk1/${EXTEN})
Хотя noop показывает что CID 5678

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

10. "Asterisk помощь с dialplan"  +/
Сообщение от Andrey (??) on 20-Окт-17, 08:30 
>[оверквотинг удален]
>>> так и не понял причину.
>> ищите причину в callerid
> Например есть такой дайлплан
> exten => _[+0-9]X.,1,NoOp
> same => n,NoOp(CID ${CALLERID(num)})
> same => n,Dial(SIP/1234/test_trunk1/${EXTEN})
> same => n,Dial(SIP/5678/test_trunk2/${EXTEN})
> same => n,Hangup()
> Астериск всегда срабатывает на первое правило same => n,Dial(SIP/1234/test_trunk1/${EXTEN})
> Хотя noop показывает что CID 5678

Здесь: https://www.voip-info.org/wiki/view/Asterisk+config+extensio...
в разделе Example.


Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

11. "Asterisk помощь с dialplan"  +/
Сообщение от Shodan (ok) on 20-Окт-17, 10:40 
>[оверквотинг удален]
>> Например есть такой дайлплан
>> exten => _[+0-9]X.,1,NoOp
>> same => n,NoOp(CID ${CALLERID(num)})
>> same => n,Dial(SIP/1234/test_trunk1/${EXTEN})
>> same => n,Dial(SIP/5678/test_trunk2/${EXTEN})
>> same => n,Hangup()
>> Астериск всегда срабатывает на первое правило same => n,Dial(SIP/1234/test_trunk1/${EXTEN})
>> Хотя noop показывает что CID 5678
> Здесь: https://www.voip-info.org/wiki/view/Asterisk+config+extensio...
> в разделе Example.

Да, ошибся
Я сделал так, немного более компактно

exten => _[+0-9]X.,1,NoOp
same => n,NoOp(CID ${CALLERID(num)})
same => n,Set(cid=${CALLERID(num)})
same => n,GotoIf($["${cid}" = "7777"]?dial1)
same => n,GotoIf($["${cid}" = "55555"]?dial3)
same => n,GotoIf($["${cid}" = "66666"]?dial2)
same => n(dial1),Dial(SIP/trunk1/${EXTEN})
same => n(dial3),Dial(SIP/trunk3/${EXTEN})
same => n(dial2),Dial(SIP/trunk2/${EXTEN})
same => n,Hangup()

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "Asterisk помощь с dialplan"  +/
Сообщение от Andrey (??) on 20-Окт-17, 10:53 
>[оверквотинг удален]
> exten => _[+0-9]X.,1,NoOp
> same => n,NoOp(CID ${CALLERID(num)})
> same => n,Set(cid=${CALLERID(num)})
> same => n,GotoIf($["${cid}" = "7777"]?dial1)
> same => n,GotoIf($["${cid}" = "55555"]?dial3)
> same => n,GotoIf($["${cid}" = "66666"]?dial2)
> same => n(dial1),Dial(SIP/trunk1/${EXTEN})
> same => n(dial3),Dial(SIP/trunk3/${EXTEN})
> same => n(dial2),Dial(SIP/trunk2/${EXTEN})
> same => n,Hangup()

Хозяин - барин. Только у вас есть уверенность, что через год этих проверок не будет под пол сотни? В этой схеме у вас на каждый callerid по 2 строки - gotoif и dial.

В данном решении, если _звонящий_, который пройдет через dial1, не положит трубку, то с большой вероятностью звонок пойдет повторяться через dial2,dial3.

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "Asterisk помощь с dialplan"  +/
Сообщение от Shodan (ok) on 20-Окт-17, 11:06 
>[оверквотинг удален]
>> same => n,GotoIf($["${cid}" = "66666"]?dial2)
>> same => n(dial1),Dial(SIP/trunk1/${EXTEN})
>> same => n(dial3),Dial(SIP/trunk3/${EXTEN})
>> same => n(dial2),Dial(SIP/trunk2/${EXTEN})
>> same => n,Hangup()
> Хозяин - барин. Только у вас есть уверенность, что через год этих
> проверок не будет под пол сотни? В этой схеме у вас
> на каждый callerid по 2 строки - gotoif и dial.
> В данном решении, если _звонящий_, который пройдет через dial1, не положит трубку,
> то с большой вероятностью звонок пойдет повторяться через dial2,dial3.

Нет, не будет
Будет несколько openvox железок, на каждую будет свой контекст, где будет максимум пять проверок. Если звонок пойдет повторяться это ок

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

17. "Asterisk помощь с dialplan"  +/
Сообщение от mmm62 on 21-Окт-17, 16:06 
>>>> Все уже придумано
>>>> exten => куда/кто
> exten => _[+0-9]X.,1,NoOp
> same => n,NoOp(CID ${CALLERID(num)})
> same => n,Dial(SIP/1234/test_trunk1/${EXTEN})
> same => n,Dial(SIP/5678/test_trunk2/${EXTEN})
> same => n,Hangup()
> Астериск всегда срабатывает на первое правило same => n,Dial(SIP/1234/test_trunk1/${EXTEN})
> Хотя noop показывает что CID 5678

должно быть так
exten => _[+0-9]X./1234,1,Dial(SIP/test_trunk1/${EXTEN})
exten => _[+0-9]X./5678,1,Dial(SIP/test_trunk2/${EXTEN})

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

4. "Asterisk помощь с dialplan"  +/
Сообщение от Andrey (??) on 18-Окт-17, 08:21 
>[оверквотинг удален]
>>> same => n,Set(sip=${IF($["${CALLERID(num)}" = "+67891"]?sip_trunk2)})
>>> same => n,Dial(SIP/${sip}/${EXTEN})
>>> Проблема в том что астериск смотрит только на первое правило с IF
>>> и дальше уже не проверяет
>>> Можно ли реализовать цикличную проверку по всем IF-ам?
>> Вы используете в операторе IF только одно условие - true. Попробуйте использовать
>> переход по false
> Как раз false не хотело бы использовать, хотелось чтобы астер шел сверху
> вниз по ифам, и если тру, то прекращал поиск.
> Я сейчас сделал через gotoif, но вышло более громоздко

Зачем вам последовательная проверка по всем условиям if? Допустим астер нашел совпадение по _первому_ if, присвоил переменной значение. И пошел дальше проверять все ваши if. Сколько их у вас в продакшене, больше трех? Сколько их будет через пол года-год-два?
Понимаю что процессорные мощности сейчас очень дешевы, но я бы наказывал за такую логику рублем.

Если у вас больше 3 проверок if то вообще оптимально вынести в табличку ваши callerid--sip. Добавился callerid - не нужно перегружать dialplan.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

9. "Asterisk помощь с dialplan"  +/
Сообщение от PavelR (??) on 20-Окт-17, 07:32 
> Подскажите как стандартными средствами астериска реализовать такую логику
> если CID такой то - звоним через такого провайдера
> если CID такой то - звоним через другого провайдера

а можно уточняющий вопрос: вы используете CID - это вами подразумевается вызывающий или вызываемый?


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

14. "Asterisk помощь с dialplan"  +/
Сообщение от mmm62 on 21-Окт-17, 11:21 
боевой пример диалплана

; запрет межгорода номерам 1701 1702 1901
exten =>_8XXXXXXXXXX/1701,1,Hangup()
exten =>_8XXXXXXXXXX/1702,1,Hangup()
exten =>_8XXXXXXXXXX/1901,1,Hangup()
; запрет города номерам 1701 1702 1901
exten =>_XXXXXXX/1701,1,Hangup()
exten =>_XXXXXXX/1702,1,Hangup()
exten =>_XXXXXXX/1901,1,Hangup()
; все номера из бухгалтерии начинающиеся с 33хх звонят по своей линии
exten =>_83472XXXXXX/_33XX,1,Dial(SIP/u2825432538/${EXTEN},60)
; 3301 звонит только по своей персональной линии
exten =>_83472XXXXXX/_3301,1,Dial(SIP/ufanet89/${EXTEN},60)

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

15. "Asterisk помощь с dialplan"  +/
Сообщение от Andrey (??) on 21-Окт-17, 14:41 
>[оверквотинг удален]
> exten =>_8XXXXXXXXXX/1702,1,Hangup()
> exten =>_8XXXXXXXXXX/1901,1,Hangup()
> ; запрет города номерам 1701 1702 1901
> exten =>_XXXXXXX/1701,1,Hangup()
> exten =>_XXXXXXX/1702,1,Hangup()
> exten =>_XXXXXXX/1901,1,Hangup()
> ; все номера из бухгалтерии начинающиеся с 33хх звонят по своей линии
> exten =>_83472XXXXXX/_33XX,1,Dial(SIP/u2825432538/${EXTEN},60)
> ; 3301 звонит только по своей персональной линии
> exten =>_83472XXXXXX/_3301,1,Dial(SIP/ufanet89/${EXTEN},60)

Почему номерам 1701,1702,1901 нельзя было закрыть все номера от 7 цифр и более?
например так: exten => _XXXXXXX!/1701,1,Hangup()
Получается: при наборе номером 1701 7-значного номера (или более) - выдаем Hangup.

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

16. "Asterisk помощь с dialplan"  +/
Сообщение от mmm62 on 21-Окт-17, 15:53 

> Почему номерам 1701,1702,1901 нельзя было закрыть все номера от 7 цифр и
> более?
> например так: exten => _XXXXXXX!/1701,1,Hangup()
> Получается: при наборе номером 1701 7-значного номера (или более) - выдаем Hangup.

так сложилось исторически....
работает - не трогаем :)

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

18. "Asterisk помощь с dialplan"  +/
Сообщение от Shodan (ok) on 22-Окт-17, 20:16 
> боевой пример диалплана

Спасибо

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Слёрм
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2020 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру