ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

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

Проблемы и их решения Asterisk как такового

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

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

Сообщение overGlosser » 09 дек 2022, 16:45

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

Код: выделить все
dialplan show macro-outbound-callerid

[Показать] Спойлер:
Код: выделить все
[ 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. =-
overGlosser
 
Сообщений: 6
Зарегистрирован: 02 дек 2022, 13:42

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

Сообщение ded » 09 дек 2022, 17:48

Тестируйте пока без макросов, они создают дополнительный ненужный пока информационный фон.
Сделайте в 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' ]
ded
 
Сообщений: 15803
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение Zavr2008 » 11 дек 2022, 14:56

Биты 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-GW. Модернизация УПАТС с E1, Установка FreePBX, Системы антифрод "в разрыв" потоков E1 PRI / SS#7 ISUP.
Аватар пользователя
Zavr2008
 
Сообщений: 2161
Зарегистрирован: 27 янв 2011, 01:35

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

Сообщение overGlosser » 09 янв 2023, 09:34

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

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

На эту методу натыкался ранее, шерстя форумы. Пробовал тестировать различные комбинации - все безуспешно. Хотя встречал людей с точно такой же проблемой которым подобные манипуляции помогали.

to ded:
Тестируйте пока без макросов, они создают дополнительный ненужный пока информационный фон.

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

extensions_custom.conf
[Показать] Спойлер:
Код: выделить все
[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'у и всем остальным, что давали советы и помогли разобраться в вопросе.
overGlosser
 
Сообщений: 6
Зарегистрирован: 02 дек 2022, 13:42

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

Сообщение Zavr2008 » 09 янв 2023, 14:07

Очень хорошо что удалось победить проблему
В исходящем маршруте можно задавать опции Dial.
Это можно использовать, вызвав Gosub на канале до начала самого звонка.
В этом случае можно через DumpChan увидеть все переменные, из которых FreePBX своими макросами дальше формирует Dial Asterisk.
По поводу префиксов - работает или нет видно в сообщении SETUP из отладки PRI, Если там биты поменялись - это будет сразу видно.
Российские шлюзы E1 Alvis-GW. Модернизация УПАТС с E1, Установка FreePBX, Системы антифрод "в разрыв" потоков E1 PRI / SS#7 ISUP.
Аватар пользователя
Zavr2008
 
Сообщений: 2161
Зарегистрирован: 27 янв 2011, 01:35

Пред.

Вернуться в Конфигурация и настройка Asterisk

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH