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

Синхронизация по PRI

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

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

overGlosser
Сообщения: 6
Зарегистрирован: 02 дек 2022, 12:42

Re: Синхронизация по PRI

Сообщение overGlosser »

Еще небльшое дополнение по текущему диалплану. По факту я использую дефолтный диалплан сгенерированный FreePBX в который я лишь добавил исходящие маршруты через веб-морду и поправил руками функцию CALLERPRES заменив на CALLERID, согласно рекомендациям.

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

dialplan show macro-outbound-callerid
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

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

[ Context 'macro-outbound-callerid' created by 'pbx_config' ]
  's' =>            1. Noop(${REALCALLERIDNUM})                   [pbx_config]
                    2. Noop(${KEEPCID})                           [pbx_config]
                    3. Noop(${OUTKEEPCID_${ARG1}})                [pbx_config]
                    4. ExecIf($["${CALLINGNAMEPRES_SV}" != ""]?Set(CALLERID(name-pres)=${CALLINGNAMEPRES_SV})) [pbx_config]
                    5. ExecIf($["${CALLINGNUMPRES_SV}" != ""]?Set(CALLERID(num-pres)=${CALLINGNUMPRES_SV})) [pbx_config]
                    6. Set(HOTDESCKCHAN=${CUT(CHANNEL,/,2)})      [pbx_config]
                    7. Set(HOTDESKEXTEN=${CUT(HOTDESCKCHAN,-,1)}) [pbx_config]
                    8. Set(HOTDESKCALL=0)                         [pbx_config]
                    9. ExecIf($["${DB(EDEVICE/${HOTDESKEXTEN}/user)}"="DummyUser"]?Set(HOTDESKCALL=1)) [pbx_config]
                    10. ExecIf($[${HOTDESKCALL}=1]?Set(CALLERID(name)=${DB(EDEVICE/${HOTDESKEXTEN}/location)})) [pbx_config]
                    11. Set(ALLOWTHISROUTE=NO)                    [pbx_config]
                    12. ExecIf($["${EMERGENCYROUTE}" = "YES"]?Set(ALLOWTHISROUTE=YES)) [pbx_config]
                    13. ExecIf($[${HOTDESKCALL}= 1 & ${ALLOWTHISROUTE} = NO ]?Hangup()) [pbx_config]
                    14. ExecIf($["${REALCALLERIDNUM:1:2}" = ""]?Set(REALCALLERIDNUM=${CALLERID(number)})) [pbx_config]
                    15. ExecIf($[$["${CIDMASQUERADING}" = "TRUE"] & $[$["${AMPUSER}" = ""] | $["${AMPUSER}" = "${DB(AMPUSER/${FROMEXTEN}/cidnum)}"]]]?Set(AMPUSER=${FROMEXTEN})) [pbx_config]
     [start]        16. GotoIf($[ $[${LEN(${REALCALLERIDNUM})} = 0] | $["${KEEPCID}" != "TRUE"] | $["${OUTKEEPCID_${ARG1}}" = "on"] ]?normcid) [pbx_config]
                    17. Set(USEROUTCID=${CALLERID(name)} <${REALCALLERIDNUM}>) [pbx_config]
                    18. GotoIf($["${CIDMASQUERADING}" = "TRUE"]?normcid) [pbx_config]
                    19. GotoIf($["${DB(AMPUSER/${REALCALLERIDNUM}/device)}" = "" & "${DB(DEVICE/${REALCALLERIDNUM}/user)}" = ""]?bypass) [pbx_config]
     [normcid]      20. Set(USEROUTCID=${DB(AMPUSER/${AMPUSER}/outboundcid)}) [pbx_config]
     [bypass]       21. Set(EMERGENCYCID=${DB(DEVICE/${REALCALLERIDNUM}/emergency_cid)}) [pbx_config]
                    22. ExecIf($[${HOTDESKCALL}= 1]?Set(EMERGENCYCID=${DB(EDEVICE/${HOTDESKEXTEN}/emergency_cid)})) [pbx_config]
                    23. Set(TRUNKOUTCID=${OUTCID_${ARG1}})        [pbx_config]
                    24. GotoIf($["${EMERGENCYROUTE:1:2}" = "" | "${EMERGENCYCID:1:2}" = ""]?trunkcid) [pbx_config]
                    25. Set(CALLERID(all)=${EMERGENCYCID})        [pbx_config]
                    26. GotoIf($["${CALLERID(name)}" = ""]?cnum)  [pbx_config]
                    27. Set(CDR(outbound_cnam)=${CALLERID(name)}) [pbx_config]
     [cnum]         28. Set(CDR(outbound_cnum)=${CALLERID(num)})  [pbx_config]
     [exit]         29. MacroExit()                               [pbx_config]
     [trunkcid]     30. ExecIf($[${LEN(${TRUNKOUTCID})} != 0]?Set(CALLERID(all)=${TRUNKOUTCID})) [pbx_config]
     [usercid]      31. ExecIf($[${LEN(${USEROUTCID})} != 0]?Set(CALLERID(all)=${USEROUTCID})) [pbx_config]
                    32. ExecIf($[${LEN(${TRUNKCIDOVERRIDE})} != 0 | ${LEN(${FORCEDOUTCID_${ARG1}})} != 0]?Set(CALLERID(all)=${IF($[${LEN(${FORCEDOUTCID_${ARG1}})}=0]?${TRUNKCIDOVERRIDE}:${FORCEDOUTCID_${ARG1}})})) [pbx_config]
                    33. ExecIf($["${QCALLBACK}" = "1" & ${LEN(${FORCEDOUTCID_${ARG1}})} = 0]?Set(CALLERID(all)=${REALCALLERIDNUM})) [pbx_config]
                    34. ExecIf($[${LEN(${AMPUSER})} = 0 &  ${LEN(${USEROUTCID})} = 0 & "${OUTKEEPCID_${ARG1}}" ="off" & ${LEN(${REALCALLERIDNUM})} != 0 ]?Set(CALLERID(all)=${REALCALLERIDNUM})) [pbx_config]
                    35. Set(TIOHIDE=no)                           [pbx_config]
                    36. Set(CDR(outbound_cnum)=${CALLERID(num)})  [pbx_config]
                    37. Set(CDR(outbound_cnam)=${CALLERID(name)}) [pbx_config]
  Include =>        'macro-outbound-callerid-custom'              [pbx_config]

-= 1 extension (37 priorities) in 1 context. =-
ded
Сообщения: 15618
Зарегистрирован: 26 авг 2010, 19:00

Re: Синхронизация по PRI

Сообщение ded »

Тестируйте пока без макросов, они создают дополнительный ненужный пока информационный фон.
Сделайте в outbound-allrutes себе строчки
exten => 89371234567,1,Set(CALLERID=8461234567)
same => n,Set(CALLERID(num-pres)=prohib_passed_screen)
same => n,Dial(DAHDI/g1/${EXTEN})
где 89371234567 - ваш мобильный номер, модифицируйте минималльно, как нужно, и получите дебаг в чистом виде. Возможно вам банально отдавать Caller ID в 11-знаке, типа 88461234567. На сайте Парабела -
[test_context]
exten => _1.,1,Wait(0)
; PSTN can reject an outgoing call without caller id.
;exten => _1.,n,Set(CALLERID(all)=84950000000)
exten => _1.,n, Dial(DAHDI/g0/${EXTEN:1})
exten => _1.,n,Hangup()
http://parabel.ru/quickstart/primer-kon ... -asterisk/

Из вашего дебага выше видно, что исходящий Caller ID у вас в pridialplan указан всё таки как национальный Calling Party Number (len=14) [ Ext: 0 TON: National Number (2) NPI
PRI Span: 1 > Calling Party Number (len=14) [ Ext: 0 TON: National Number (2) NPI: ISDN/Telephony Numbering Plan (E.164/E.163) (1)
PRI Span: 1 > Presentation: Presentation allowed, User-provided, not screened (0) '846XXXXXXX' ]
PRI Span: 1 > [70 0c 80 38 39 33 37 36 36 39 35 31 36 33]
А вызываемый - как unknown
PRI Span: 1 > Called Party Number (len=14) [ Ext: 1 TON: Unknown Number Type (0) NPI: Unknown Number Plan (0) '8937XXXXXXX' ]
Аватара пользователя
Zavr2008
Сообщения: 2211
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: Синхронизация по PRI

Сообщение Zavr2008 »

Биты NPI и типы номеров можно при желании разруливать префиксами у набираемого номера и CALLERID(num).

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

* U - Unknown
* I - International
* N - National
* L - Local (выбирается сетью)
* S - Subscriber
* V - Abbreviated
* R - Reserved 
Также доступно явное указание битов NPI:

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

* u - Unknown
* e - E.163/E.164 (ISDN/telephony)
* x - X.121 (Data)
* f - F.69 (Telex)
* n - National
* p - Private
* r - Reserved
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
overGlosser
Сообщения: 6
Зарегистрирован: 02 дек 2022, 12:42

Re: Синхронизация по PRI

Сообщение overGlosser »

Ранее отправленное сообщение почему-то не опубликовалось, поэтому дублирую еще раз. Чтобы окончание истории осталось в ветке

to Zavr2008:
Биты NPI и типы номеров можно при желании разруливать префиксами у набираемого номера и CALLERID(num)
На эту методу натыкался ранее, шерстя форумы. Пробовал тестировать различные комбинации - все безуспешно. Хотя встречал людей с точно такой же проблемой которым подобные манипуляции помогали.

to ded:
Тестируйте пока без макросов, они создают дополнительный ненужный пока информационный фон.
Благодарю за наводку! Я и подумать не мог, что макросы могут на столько неочевидно повлиять на ситуацию!
Сделал простой диалплан через extentions_custom.conf для мобильных и номеров 8800, в котором принудительно указал CALLERID(num) и CALLERID(num-press) и чудесным образом все звонки начали проходить до адресатов.

extensions_custom.conf
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

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

[outbound-allroutes-custom]
exten => _89[0-9]XXXXXXXX,1,Macro(user-callerid,LIMIT,EXTERNAL,)
same => n,Gosub(sub-record-check,s,1(out,${EXTEN},force))
same => n,Set(CALLERID(num)=846XXXXXXX)
same => n,Set(CALLERID(num-press)=allowed_passed_screen)
same => n,Dial(DAHDI/g1/${EXTEN}, 30)
same => n,Hangup()
Путем дальнейших экспериментов пришел к выводу, что какой CALLERID в веб-морде FreePBX ни указывай: хоть 846XXXXXX , хоть "846XXXXXX" <846XXXXXX>, хоть прописывай через веб-морду "Outbound Dial Prefix" в транке (о чем написал Zavr2008), хоть не прописывай. Итог всегда один. Звонки за пределы сети провайдера не проходят.

Зато стоит отправить звонки по самописному диалплану - всё работает как по маслу, хоть с принудительным указанием "Outbound Dial Prefix" хоть без него.

Заподозрил, что моя версия FreePBX через свой дефолтный диалплан и функцию CALLEPRES(num-press) почему-то формирует и отправляет некорректные данные, которые не нравятся провайдеру и звонки сбрасываются при попытке дозвониться за пределы сети провайдера. Раз пять в разные дни звонил на номер телефона провайдера, по которому, как мне сказали, сидят технари и помогут провести трассировку канала, сказать, что они со своей стороны видят и получают при моих звонках наружу. Но трубку так никто и не взял. Потому проверить теорию до конца не удалось.

Интереса ради скачал последний стабильный дистрибутив FreePBX 16.0.17 (SNG7-PBX16-64bit-2203-1). Установил на виртуалку. Глянул родной диалплан а там по прежнему присутствует эта deprecated функция CALLERPRES. На сколько корректно она формирует данные при звонке наружу пока что не знаю. Позже, когда дойдут руки до подобных экспериментов, попробую установить этот дистрибутив на железку с dahdi-картой и выяснить прохождение звонков экспериментальным путем.

Сейчас мой FreePBX 14.0.16.13 наконец-то заработал так как мне нужно.

Большое спасибо ded'у и всем остальным, что давали советы и помогли разобраться в вопросе.
Аватара пользователя
Zavr2008
Сообщения: 2211
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: Синхронизация по PRI

Сообщение Zavr2008 »

Очень хорошо что удалось победить проблему
В исходящем маршруте можно задавать опции Dial.
Это можно использовать, вызвав Gosub на канале до начала самого звонка.
В этом случае можно через DumpChan увидеть все переменные, из которых FreePBX своими макросами дальше формирует Dial Asterisk.
По поводу префиксов - работает или нет видно в сообщении SETUP из отладки PRI, Если там биты поменялись - это будет сразу видно.
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH