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

Проблема с установкой Callerid (плавающая)

Проблемы Asterisk без вэб-оболочек и их решения

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

Ответить
Garnish
Сообщения: 43
Зарегистрирован: 09 мар 2016, 11:07

Проблема с установкой Callerid (плавающая)

Сообщение Garnish »

Коллеги, всем привет.
Столкнулся с проблемой, которая вгоняет в ступор.
Суть проблемы:
1. При исходящем вызове, после успешной отработки команды Set(CALLERID(num)=1234...), в поле From отсутствует установленный ранее номер. Хотя если взглянуть через NoOp(${CALLERID(num)} он на месте.
Проблема постоянно возникает на asterisk 13 + PJSIP (версию сейчас не скажу, т.к. обновился, старую забыл) + Attended transfer + transfer context. В 9 случаев из 10 астер пытается подставить номер из пира сотрудника, который осуществляет трансфер, при этом игнорирует установку через SET или опцию f в Dial. Но иногда вызов проходит как надо. Через SIP работает всегда.

2. Имеем резервный сервер asterisk 16.20 + PJSIP 2.1 + Attended transfer + transfer context - Проблема возникает в 1-2 случаях из 100
3. Имеет тестовый сервер asterisk 18.1.1 + PJSIP 2.1 + Attended transfer + transfer context - Проблему обнаружить не удалось после нескольких недель тестов в боевом режиме. Обрадовались и привели сервер из п.1 к такой же конфигурации = проблема (на первом сервере) осталось. Т.е. новая версия астериска + pjsip не помогли. Пробовали копировать даже базовые конфиги-сэмплы, которая система генерирует при установки - не помогает.

4. Сегодня возникла такая же проблема на asterisk 16.20 + PJSIP 2.1, но уже просто при исходящем вызове. Т.к. никакого сотрудника с трансфером нет, то система поставила в поле From: "Anonymous" <sip:anonymous@anonymous.invalid>
За последние 2 дня проблема встретилась 10 раз на 7290 вызовов.

Не думаю что тема PAI и rpid_update актуальна, т.к. оно либо работало бы, либо нет. Тем более что это подходит по пункт 1-3, но не под последний. Конфиги и диапланы на всех системах одинаковые, ОС Centos 7, Freepbx и прочие бяки отсутствуют. К провайдерам тоже не может быть вопросов, т.к. инвайт с пустым полем улетает от нас (смотрим и через дебаг и через Гомер), а не обрезанный до провайдера доходит.
Нагрузки чтобы сервер сходил с ума тоже нет, везде ssd. C ОЗУ, r/w на диск нагрузки нет. Свободного места хватает.
Настройки:
SIP
context = from-pstn
allowguest = no
allowoverlap = no
udpbindaddr = 0.0.0.0
bindport = xxxx
tcpenable = yes
srvlookup = yes
transport = udp,tcp
disallow = all
allow = alaw
allow = ulaw
allow = gsm
useragent = PBX
dtmfmode = rfc2833
nat = no
directmedia = no

[mtt]
host = static.mtt.ru
type = friend
context = from-pstn
insecure = port,invite
disallow = all
allow = alaw
allow = ulaw
qualify = yes
nat = no

PJSIP
[trunk_defaults](!)
type = wizard
endpoint/transport=udp-transport
endpoint/allow = !all,alaw,ulaw
endpoint/t38_udptl=no
endpoint/t38_udptl_ec=none
endpoint/fax_detect=no
;endpoint/trust_id_inbound=no
endpoint/trust_id_inbound=yes
endpoint/t38_udptl_nat=no
endpoint/direct_media=no
endpoint/rewrite_contact=yes
endpoint/rtp_symmetric=yes
endpoint/dtmf_mode = rfc4733
endpoint/allow_subscribe=no
aor/qualify_frequency=60

[mtt](trunk_defaults)
sends_auth = no
sends_registrations = no
remote_hosts = static.mtt.ru
endpoint/context = from-pstn
aor/qualify_frequency = 60
trust_id_inbound = yes
;send_rpid = yes
send_rpid = rpid
trust_id_outbound = yes
send_pai = yes
set_var=carrier1=mtt

Трансфер контекст (урезанный):
[transfer]
exten => 22,1,Set(CALLERID(num)=${cid})
exten => 22,n,NoOp(caller ${CALLERID(num)})
exten => 22,n,DumpChan(3)
exten => 22,n,Dial(${trunk2}/${num2}@${gate},30,f(${cid})U(handler^${EXTEN}^${MY_CHANNEL}))

Выполнение контекста:
-- Executing [22@transfer:1] Set("Local/22@transfer-00000056;2", "CALLERID(num)=4951340677") in new stack
-- Executing [22@transfer:2] NoOp("Local/22@transfer-00000056;2", "caller 4951340677") in new stack
-- Executing [22@transfer:6] DumpChan("Local/22@transfer-00000056;2", "3") in new stack
-- Dumping Info For Channel: Local/22@transfer-00000056;2:
-- ================================================================================
-- Info:
-- Name= Local/22@transfer-00000056;2
-- Type= Local
-- UniqueID= 1633085608.188605
-- LinkedID= 1633085603.188594
-- CallerIDNum= 4951340677
-- CallerIDName= (N/A)
-- ConnectedLineIDNum= (N/A)
-- ConnectedLineIDName=(N/A)

-- Executing [22@transfer:7] Dial("Local/22@transfer-00000056;2", "PJSIP/7937653хххх@mtt,30,f(79842199823)U(handler^22^SIP/mtt_inc-00002e48)") in new stack
Инвайт:
INVITE sip:7937653хххх@static.mtt.ru SIP/2.0
Via: SIP/2.0/UDP 185.179.xx.xxx:xxxx;rport;branch=z9hG4bKPj7f615a16-250b-416d-ae3f-b3c524361967
From: <sip:185.179.xx.xxx>;tag=e455c147-d05b-4e7e-b272-dc2cc1de8725
From пустой, т.к. callerid в пире не описан

Исходящий вызов, генерируется через call file, отвечает плечо1, потом попадает в контекст ниже (тут начинивается вызов на плечо2 и возникает проблема из пункта 4):
exten => _X.,1,Wait(${delay})
exten => _X.,n,Answer()
exten => _X.,n,Set(ivr=listening)
exten => _X.,n,Playback(/var/lib/asterisk/sounds/en/${file1})
exten => _X.,n,Set(ivr=listened)
exten => _X.,n,Set(CALLERID(num)=${aon2})
exten => _X.,n,Set(gate=${CUT(trunk2,/,2)})
exten => _X.,n,Set(trunk2=${CUT(trunk2,/,1)})
exten => _X.,n,ExecIf($["${file2}" != ""]?Dial(${trunk2}/${second}@${gate},50,A(/var/lib/asterisk/sounds/en/${file2}),m):Dial(${trunk2}/${second}@${gate},35,m))
Контекст тоже порезан для облегчения понимания

Выполнение:
[Sep 30 16:11:23] VERBOSE[19851][C-0001cb8e] pbx.c: Executing [200@client:1] Wait("Local/79996008733@autocaller-00005c48;1", "0") in new stack
[Sep 30 16:11:23] VERBOSE[19851][C-0001cb8e] pbx.c: Executing [200@client:2] Answer("Local/79996008733@autocaller-00005c48;1", "") in new stack
[Sep 30 16:11:23] VERBOSE[19851][C-0001cb8e] pbx.c: Executing [200@client:3] Set("Local/79996008733@autocaller-00005c48;1", "ivr=listening") in new stack
[Sep 30 16:11:23] VERBOSE[19851][C-0001cb8e] pbx.c: Executing [200@client:4] Playback("Local/79996008733@autocaller-00005c48;1", "/var/lib/asterisk/sounds/en/26010") in new stack
[Sep 30 16:11:23] VERBOSE[19851][C-0001cb8e] file.c: <Local/79996008733@autocaller-00005c48;1> Playing '/var/lib/asterisk/sounds/en/26010.slin' (language 'en')
[Sep 30 16:11:31] VERBOSE[19851][C-0001cb8e] pbx.c: Executing [200@client:5] Set("Local/79996008733@autocaller-00005c48;1", "ivr=listened") in new stack
[Sep 30 16:11:31] VERBOSE[19851][C-0001cb8e] pbx.c: Executing [200@client:6] Set("Local/79996008733@autocaller-00005c48;1", "CALLERID(num)=79996008733") in new stack
[Sep 30 16:11:31] VERBOSE[19851][C-0001cb8e] pbx.c: Executing [200@client:7] Set("Local/79996008733@autocaller-00005c48;1", "gate=mtt2") in new stack
[Sep 30 16:11:31] VERBOSE[19851][C-0001cb8e] pbx.c: Executing [200@client:8] Set("Local/79996008733@autocaller-00005c48;1", "trunk2=PJSIP") in new stack
[Sep 30 16:11:31] VERBOSE[19851][C-0001cb8e] pbx.c: Executing [200@client:9] ExecIf("Local/79996008733@autocaller-00005c48;1", "0?Dial(PJSIP/78442201243@mtt2,50,A(/var/lib/asterisk/sounds/en/),m):Dial(PJSIP/78442201243@mtt2,35,m)") in new stack
[Sep 30 16:11:31] VERBOSE[19851][C-0001cb8e] app_dial.c: Called PJSIP/78442201243@mtt2

В инвайте From: "Anonymous" <sip:anonymous@anonymous.invalid>

На PJSIP провайдеров в свое время переводили чтобы работать с Homer5, сейчас стоит 7я версия, она работает с SIP, поэтому без проблем можем работать на нем. Но очень бы хотелось понять, почему Астер создает именно такие пакеты.
Если кто-то сталкивался или есть идеи куда посмотреть - велком. У меня нет черного пояса по гуглению, но я нашел на просторах только один топик на каком-то сайте с похожей проблемой и без ответа.

P.S. Сервера, на которых возникает проблема находятся на отдельном хостинге, тестовый сервер, где проблема не обнаружена - на другом. Везде виртуализация KVM
ded
Сообщения: 15618
Зарегистрирован: 26 авг 2010, 19:00

Re: Проблема с установкой Callerid (плавающая)

Сообщение ded »

В чём смысл использовать именно PJSIP?
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH