Страница 1 из 2

На внутренние звонит не вызывая событий в extension

Добавлено: 28 май 2020, 16:48
Felt
Очень странная история, ни разу такого не было. I need help!

Есть новенький Астериск 16.10.0
Минималистично настроен для опытов: два номера 110 и 111

sip.conf
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

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

[template-test-phone](!)
type=friend
context=outgoing
host=dynamic
qualify=10000
dtmfmode=auto
disallow=all
allow=alaw
allow=ulaw
allow=gsm
allow=g726
usecallerid=yes
hidecallerid=no
callgroup=1


...

[110](template-test-phone)
defaultuser=110
secret=password
nat=force_rport,comedia


[111](template-test-phone)
defaultuser=111
secret=password
nat=force_rport,comedia
Простенький план звонков:

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

[outgoing]
exten => 5555,1,noop(Test 5555)
exten => 111,1,noop(Test 111) ; добавил для проверки - не входит сюда

exten => _XXX,1,noop(Вызов на номер ${EXTEN})
 same => n,dial(SIP/${EXTEN})

exten => h,1,noop(Вызов окончен)
Так вот, звонки со 110 на 111 идут в оба направления, софтфоны PhonerLite звонят.
Но!

В консоли никаких событий по этому поводу нет, вообще ноль, ни одной строчки. В логе тоже.

При этом если звонить на другие номера:

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

5555
222
112
то всё отображается и в консоли, и в логе.
Позвонить на эти номера не может(номеров таких нет). Но всё исправно выводит в консоль и в лог, включая noop!!!

Но если звонить на номера 110 или 111 - звонок идёт напрямую и ничего не отображается в консоли.
Даже в специальное правило для 111 не заходит - просто звонит на 111-й телефон!

И ещё.
Если телефон 111 сделать недоступным (закрыть софтфон), то тоже начинает заходить в правило диалплана (в которое при включенном софтфоне не заходил!):
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

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

  == Using SIP RTP CoS mark 5
       > 0x7f4ab80069f0 -- Strict RTP learning after remote address set to: 192.168.1.201:56231
    -- Executing [111@outgoing:1] NoOp("SIP/110-00000000", "Test 111") in new stack
    -- Executing [111@outgoing:2] Dial("SIP/110-00000000", "SIP/111") in new stack
[2020-05-28 20:43:16] WARNING[29254][C-00000001]: app_dial.c:2576 dial_exec_full: Unable to create channel of type 'SIP' (cause 20 - Subscriber absent)
    -- No devices or endpoints to dial (technology/resource)
    -- Auto fallthrough, channel 'SIP/110-00000000' status is 'CHANUNAVAIL'
    -- Executing [h@outgoing:1] NoOp("SIP/110-00000000", "Вызов окончен") in new stack
Как так вообще? Такого же не бывает? :)
Почему когда аппараты включены, то звонки идут напрямую минуя диалплан.
Я даже пробовал переименовать контекст (типа нет контекста outgoing) - звонки всё-равно идут напрямую без каких-либо событий в Астериске.

CLI> dialplan show:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

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

[ Context '__func_periodic_hook_context__' created by 'func_periodic_hook' ]
  'beep' (CID match '') =>  1. Answer()                                   [func_periodic_hook]
                    2. Playback(beep)                             [func_periodic_hook]
  'hook' (CID match '') =>  1. Set(EncodedChannel=${CUT(HOOK_CHANNEL,-,1-2)}) [func_periodic_hook]
                    2. Set(GROUP_NAME=${EncodedChannel}${HOOK_ID}) [func_periodic_hook]
                    3. Set(GROUP(periodic-hook)=${GROUP_NAME})    [func_periodic_hook]
                    4. ExecIf($[${GROUP_COUNT(${GROUP_NAME}@periodic-hook)} > 1]?Hangup()) [func_periodic_hook]
                    5. Set(ChannelToSpy=${URIDECODE(${EncodedChannel})}) [func_periodic_hook]
                    6. ChanSpy(${ChannelToSpy},qEB)               [func_periodic_hook]

[ Context 'outgoing' created by 'pbx_config' ]
  '111' =>          1. noop(Test 111)                             [extensions.conf:3]
  '5555' =>         1. noop(Test 5555)                            [extensions.conf:2]
  'h' =>            1. noop(Вызов окончен)            [extensions.conf:8]
  '_XXX' =>         1. noop(Вызов на номер ${EXTEN})  [extensions.conf:5]
                    2. dial(SIP/${EXTEN})                         [extensions.conf:6]
CLI> dialplan show 111@outgoing
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

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

[ Context 'outgoing' created by 'pbx_config' ]
  '111' =>          1. noop(Test 111)                             [extensions.conf:3]
  '_XXX' =>         1. noop(Вызов на номер ${EXTEN})  [extensions.conf:5]
                    2. dial(SIP/${EXTEN})        
logger.conf:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

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

[logfiles]
console => notice,warning,error,dtmf
;console => notice,warning,error,dtmf,verbose(7) - не помогает даже так
messages_full_log => notice,warning,error,debug,verbose(7),dtmf,fax
messages => notice,security
warning_log => warning
error_log => error
debug_log => debug
verbose_log => verbose(10)
dtmf_log => dtmf
...

Re: На внутренние звонит не вызывая событий в extension

Добавлено: 28 май 2020, 16:59
ded

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

CLI> core set verbose 10

Re: На внутренние звонит не вызывая событий в extension

Добавлено: 29 май 2020, 14:22
Felt
Не изменилось ничего, кроме отклика на саму команду:

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

CLI> core set verbose 10
Console verbose is still 10.
Звонки как шли мимо диалплана, так и идут.

Но если вызвать номер 115, который недоступен, то сразу сработает и в правила зайдёт:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

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

CLI> core set verbose 10
Console verbose is still 10.
  == Using SIP RTP CoS mark 5
       > 0x7f457801faf0 -- Strict RTP learning after remote address set to: 192.168.1.201:5062
    -- Executing [115@outgoing:1] NoOp("SIP/111-0000002e", "Вызов на номер 115") in new stack
    -- Executing [115@outgoing:2] Dial("SIP/111-0000002e", "SIP/115") in new stack
[2020-05-29 18:18:04] WARNING[3668][C-0000001d]: chan_sip.c:6354 create_addr: Purely numeric hostname (115), and not a peer--rejecting!
[2020-05-29 18:18:04] WARNING[3668][C-0000001d]: app_dial.c:2576 dial_exec_full: Unable to create channel of type 'SIP' (cause 20 - Subscriber absent)
    -- No devices or endpoints to dial (technology/resource)
    -- Auto fallthrough, channel 'SIP/111-0000002e' status is 'CHANUNAVAIL'
    -- Executing [h@outgoing:1] NoOp("SIP/111-0000002e", "Вызов окончен") in new stack
Кстати, видно по логу, что между

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

core set verbose 10 
и

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

== Using SIP RTP CoS mark 5
пустота, а там был звонок от 110 на 111 (хотя по диалплану такой звонок не должен был состояться, там только вывод в лог без dial)

Re: На внутренние звонит не вызывая событий в extension

Добавлено: 29 май 2020, 14:35
Felt
Методом проб и ошибок обнаружилось, что если в PhonerLite в поле Domain/Realm указать сервер, то звонки идут напрямую.
А если его оставить пустым, то звонки идут через диалплан как положено.

В то же время на других серверах с такими настройками PhonerLite всё прекрасно отрабатывает по диалплану без самодеятельности.
И было бы странно, что пользователь может такой настройкой обходить мимо заготовленные для него правила Астериска.

Хотелось бы всё же разобраться в первопричине такого поведения и почему она отсутствует на других серверах Asterisk (с них даже полностью копировали конфинги, чтобы исключить всё).
Может особенность Asterisk 16.10?

Снимок экрана с настройкой:
https://yadi.sk/i/hixZB-CRLwVyIg

Re: На внутренние звонит не вызывая событий в extension

Добавлено: 29 май 2020, 14:56
ded
Причина такого поведения - в самом протоколе SIP, в Астериске определяются параметрами reinvite и directmedia.
canreinvite=no | yes
directmedia=no | yes
Звонки совершаются или через Астериск (и даже можно их прослушивать через chan_spy), или пиры совершают их напрямую друг-другу.

Re: На внутренние звонит не вызывая событий в extension

Добавлено: 29 май 2020, 15:25
Felt
В sip.conf было так:

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

[general]
...
canreinvite=no
directmedia не был указан

Попробовал изменить:

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

canreinvite=no
directmedia=no
Поведение не изменилось.

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

canreinvite=yes
directmedia=yes
Поведение не изменилось.

После каждого внесения изменений перезапускал Астериск полностью.
А также выключал и включал софтфон, чтобы он перерегистрировался. В общем чтобы исключить всё.

Ни один из этих параметров не повлиял на поведение, звонки идут напрямую минуя правила Астериска.

Re: На внутренние звонит не вызывая событий в extension

Добавлено: 29 май 2020, 21:31
Zavr2008
Так поле Domain/Realm и надо заполнять, а Proxy можно оставить пустым в PhonerLite.

Re: На внутренние звонит не вызывая событий в extension

Добавлено: 31 май 2020, 15:20
Felt
Попробовал и так, оставил только Domain/Realm, параметр Proxy очистил. Сохранил, переконнектился.

По прежнему звонят напрямую ничего не вызывая в Asterisk. Хотя в Астериск звонок на 111 номер формально запрещён.

Попробовал ещё раз эти два параметра:

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

canreinvite=no | yes
directmedia=no | yes
Не помогло, чихать телефоны хотели на Астерисковские правила обработки звонков.

Re: На внутренние звонит не вызывая событий в extension

Добавлено: 31 май 2020, 15:56
zzuz
Навряд ли ваш сервер работает по 1712 порту для SIP телефонии. Разбирайтесь с вашем сетевым оборудованием.

Re: На внутренние звонит не вызывая событий в extension

Добавлено: 31 май 2020, 17:58
Felt
Сам Астериск работает на порту 5060, но наружу торчит порт 1712.
В sip.conf это отражено:

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

localnet=192.168.0.0/255.255.255.0
externip=178.248.87.116
externaddr=178.248.87.116:1712
Скажу больше, что с таким настройками работает как минимум 2 наших сервера Asterisk (внешние левые порты проброшены до 5060 соответствующего сервера).

Если бы он не работал, то телефоны не проходили автоматизацию с теми случайными сложными паролями, которые прописаны в sip.conf этого Астериска.

Плюс если я набираю номер отличный от 110 и 111, то в Астериск прекрасно отображается всё, что положено по диаплану.
Более того, если бы он заходил в диалплан, то не смог звонить на 111, так как там только вывод noop() и сразу hangup().