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

Непонятная ПРИЧИНА ошибки

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

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

Ответить
TVMaker
Сообщения: 134
Зарегистрирован: 05 сен 2013, 19:01

Непонятная ПРИЧИНА ошибки

Сообщение TVMaker »

Доброй ночи! Начал "причесывать" диалплан, избавляясь от лишних строк, и наткнулся на непонятную проблему.
Имеется 5 входящих линий, из них две сразу падают в номер s (sipnet, мультифон), а остальные три - не совсем обычные.
У Задармы и YouMagic'а заданы мультииндексы, поэтому падают они в свои назначенные номера, и там разгребаются по ДИДам, а Билайн обязан
падать в номер, совпадающий со своим ДИДом, иначе транк не регистрируется.
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

Код: Выделить всё

[incoming]
exten => s,1,Answer(1000)                                                           ; отвечаем с задержкой, чтоб не съелось первое слово
exten => s,n,NoOp(${CALLERID(num)})                                          ; чтоб консоль не пустовала :-)
exten => s/_+Z!,n,Set(CALLERID(num)=${CALLERID(num):1})         ; обрезаем начальный плюс, если он есть
exten => s,n(inpoint),GotoIf($[${BLACKLIST()}=1]?banned,s,1)       ; если забанен - запателлер тебе в уши и гудбай
exten => s,n,Gosub(PutInStack,s,1)                                              ; сунем входящий номер в список входящих
exten => s,n,Background(priv-trying)                                            ; Здрасьте, Ваш звонок очень важен для нас
exten => s,n,WaitExten()                                                             ; Хочу добавку!
.....бла-бла-бла с номером s

exten => inzadarma,1,Answer(1000)                                                                        ; отвечаем с задержкой, чтоб не съелось первое слово
exten => inzadarma,n,GotoIf($[${SIP_HEADER(TO):5:5}=AAAAA]?to_dima,s,1)          ; Позвонили на AAAAA? Это димин прямой
exten => inzadarma,n,GotoIf($[${SIP_HEADER(TO):5:5}=BBBBB]?to_vasya,s,1)          ; Позвонили на BBBBB? Это васин
exten => inzadarma,n,Goto(s,1)                                                                             ; Позвонили на другой? Тогда в обработочку

exten => inyoumagic,1,GotoIf($[${SIP_HEADER(TO):5:15}=883140DDDDDDDDD]?to_dima,s,1)        ; На димин длинный мтт? Вот и общайтесь
exten => inyoumagic,n,Goto(s,1)                                                                                                ; В обработочку

exten => ${DID_BEELINE},1,Goto(s,1)                                     ; Per anus ad astra!

exten => fromVoxeo,1,Goto(s,inpoint)                                   ; С воксео приходит жестко мной заданный CID. Можно не проверять.

exten => _EEEEE.,1,Goto(outgoing,${EXTEN:5},1)        ; И не нужна никакая ДИСА :-)


Казалось бы - всё зашибись. Однако нифига. Сипнет отрабатывает как надо, плюс режется. YouMagic с билайном тоже. А вот Задарма и Мультифон спотыкаются на третьей строчке (обрезателе плюса) и консоль жизнерадостно сообщает:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
== Using SIP RTP CoS mark 5
-- Executing [s@incoming:1] Answer("SIP/multifon-000000ec", "1000") in new stack
-- SIP/YouMagic-000000eb is making progress passing it to SIP/11-000000ea
-- SIP/YouMagic-000000eb answered SIP/11-000000ea
-- Executing [s@incoming:2] NoOp("SIP/multifon-000000ec", "7499704ffff") in new stack
-- Auto fallthrough, channel 'SIP/multifon-000000ec' status is 'UNKNOWN'
== Spawn extension (ExtDial, 801892570qqqqq, 9) exited non-zero on 'SIP/11-000000ea'
Если закомментить ту строчку в диалплане, то все транки работают. Вопрос к уважаемым гуру: что не так в этой строчке? :cry:
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: Непонятная ПРИЧИНА ошибки

Сообщение virus_net »

Z matches any digit from 1-9
! wildcard, matches zero or more characters immediately
Исходя из:
TVMaker писал(а):-- Executing [s@incoming:2] NoOp("SIP/multifon-000000ec", "7499704ffff") in new stack
там ещё и буквы в конце и по идее этот вызов под эту строчку вообще не должен попадать, т.к.:
TVMaker писал(а):

Код: Выделить всё

exten => s/_+Z!,n,Set(CALLERID(num)=${CALLERID(num):1})  
она должна отработать только если Caller-ID вызывающего абонента начинается с "+", а затем идут цифры

А если вот так сделать ?

Код: Выделить всё

exten => s/_+Z.,n,Set(CALLERID(num)=${CALLERID(num):1})
Тоже самое будет ?

Можно попробовать переделать на ExecIf.
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
TVMaker
Сообщения: 134
Зарегистрирован: 05 сен 2013, 19:01

Re: Непонятная ПРИЧИНА ошибки

Сообщение TVMaker »

Ну, 4 цифры на буквы я заменил из "антишпионских" соображений. Конечно же, там цифры :-) Да, пробовал в шаблоне точку ставить - не помогает. И вариант _+. тоже не катит... Задарма отдает CALLERID(num) в виде 5-значного числа, т.е. ее эта строчка ВООБЩЕ не должна касаться, однако идёт затык. Сипнет отдает CALLERID(num) в виде числа с плюсом впереди, и эта злосчастная строчка корректно отрабатывает, отрезая плюс... Конечно, самый тупой вариант - принимать входящие звонки каждый в свой экстен, но я как раз от этого и хочу уйти, ибо даже такой новичок, как я, понимает всю "неэлегантность" и неудобность такого решения.
Да, на всякий случай - версия астера 1.8.13
Vlad1983
Сообщения: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: Непонятная ПРИЧИНА ошибки

Сообщение Vlad1983 »

Код: Выделить всё

asterisk -rx "dialplan show incoming"
покажет
ЛС: @rostel
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: Непонятная ПРИЧИНА ошибки

Сообщение ded »

1) Обрезатель плюса в CID написан неверно, нарушения синтаксиса.
2) Answer делать не надо
3) Цепочки диал-плана
exten => s,1,NoOp(${CALLERID(num)})
и
exten => s/_+Z!,n,Set(CALLERID(num)=${CALLERID(num):1})
это разные цепочки, и должны быть описаны отдельно и полностью. И asterisk -rx "dialplan show incoming" дейсвтительно это покажет, как верно замечено.

То есть для обычных CID, и для CID с плюcом. И те и другие имеют твёрдую значность - одинадцатизнак. Поэтому не надо экспериментировать с точками и восклицательными знаками..
Пропишите одну цепочку
exten => s,1,NoOp(${CALLERID(num)})
exten => s,n,

и другую
exten => s/_+ZXXXXXXXXXX,1,NoOp(${CALLERID(num)})
exten => s/_+ZXXXXXXXXXX,n,Set(CALLERID(num)=${CALLERID(num):1})
exten => s/_+ZXXXXXXXXXX,n,NoOp(${CALLERID(num)})
Vlad1983
Сообщения: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: Непонятная ПРИЧИНА ошибки

Сообщение Vlad1983 »

вариант 2 без двух экстенов

Код: Выделить всё

exten => s,n,NoOp(${CALLERID(num)})                                          
exten => s,n,ExecIF($["${CALLERID(num):1:1}" = "+"]?Set(CALLERID(num)=${CALLERID(num):1}))         ; обрезаем начальный плюс, если он есть
...
ЛС: @rostel
TVMaker
Сообщения: 134
Зарегистрирован: 05 сен 2013, 19:01

Re: Непонятная ПРИЧИНА ошибки

Сообщение TVMaker »

Спасибо, господа! Вариант от Vlad1983 подошёл с маленькой поправкой:

exten => s,n,ExecIF($["${CALLERID(num):0:1}" = "+"]?Set(CALLERID(num)=${CALLERID(num):1}))

Потестировал со всеми транками - вроде работает как надо. Это более универсальное решение, ибо в ином случае я не уйду от сложноватой конструкции типа exten => s/_+Z.(что и породило топик), т.к. жестко прописывать 11-знак не могу, ибо потенциально может быть входящий из Донецка или Минска, а от братьев-славян приходит 12-знак.
Еще раз спасибо всем, кто откликнулся! Обещаю не задавать впредь нубских вопросов! :D
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH