Подскажите как стандартными средствами астериска реализовать такую логикуесли 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-ам?
>[оверквотинг удален]
> если 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
>[оверквотинг удален]
>> Например
>> 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, но вышло более громоздко
Все уже придумано
exten => куда/ктоУ ненадо с if извращаться
> Все уже придумано
> 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
> Все уже придумано
> exten => куда/кто
> У ненадо с if извращатьсяХотя как-то странно это работает, на одних правилах работает, на других нет, так и не понял причину.
>> Все уже придумано
>> exten => куда/кто
>> У ненадо с if извращаться
> Хотя как-то странно это работает, на одних правилах работает, на других нет,
> так и не понял причину.ищите причину в callerid
>>> Все уже придумано
>>> 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
>[оверквотинг удален]
>>> так и не понял причину.
>> ищите причину в 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.
>[оверквотинг удален]
>> Например есть такой дайлплан
>> 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()
>[оверквотинг удален]
> 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.
>[оверквотинг удален]
>> 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 железок, на каждую будет свой контекст, где будет максимум пять проверок. Если звонок пойдет повторяться это ок
>>>> Все уже придумано
>>>> 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})
>[оверквотинг удален]
>>> 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.
> Подскажите как стандартными средствами астериска реализовать такую логику
> если CID такой то - звоним через такого провайдера
> если CID такой то - звоним через другого провайдераа можно уточняющий вопрос: вы используете CID - это вами подразумевается вызывающий или вызываемый?
боевой пример диалплана; запрет межгорода номерам 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)
>[оверквотинг удален]
> 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.
> Почему номерам 1701,1702,1901 нельзя было закрыть все номера от 7 цифр и
> более?
> например так: exten => _XXXXXXX!/1701,1,Hangup()
> Получается: при наборе номером 1701 7-значного номера (или более) - выдаем Hangup.так сложилось исторически....
работает - не трогаем :)
> боевой пример диалпланаСпасибо