Доброго дня.
Настраиваю сие специфическую связь.
Звонки ходят в обе стороны. Все отлично.
callerid между телефонами за avaya русский - и на аппаратах 1608 и 1616 определяется норм.
callerid между телефонами за asterisk кириллица ( на сколько понимаю utf-8) - определяется то же отлично.
Но вот если звонить с аппарата за avaya на аппарат за asterisk то вместо букв выдается <????????>
Пытаюсь перекодить приходящее имя с avaya на asterisk средствами iconv. Но никак не перекодируется.
Вопрос: в каком коде avaya отдает имена asterisk. Пробовал cp1251 на utf-8 перекодить, но результат такой же.
help me
avaya - h323 - asterisk callerid
Модератор: Administrator
-
- Постоянный участник форума
- Сообщения: 351
- Зарегистрирован: Чт 05 окт 2006, 10:10
Re: avaya - h323 - asterisk callerid
что мешает везде прописать имена на латинице?
И с SIP Asterisk работает лучше, чем с h323. Лучше его.
И с SIP Asterisk работает лучше, чем с h323. Лучше его.
Re: avaya - h323 - asterisk callerid
Доброго дня.
1)Руководство просит кириллицу, учитывая что между телефонами за avaya видно что работает кириллица.
2) Sip лицензий нет в наличии и бюджет на сие реализацию = 0. Т.е про покупку можно забыть однозначно.
1)Руководство просит кириллицу, учитывая что между телефонами за avaya видно что работает кириллица.
2) Sip лицензий нет в наличии и бюджет на сие реализацию = 0. Т.е про покупку можно забыть однозначно.
-
- Постоянный участник форума
- Сообщения: 351
- Зарегистрирован: Чт 05 окт 2006, 10:10
Re: avaya - h323 - asterisk callerid
1) в MultiLingual Name Wizard имена прописаны ? Какое имя рисуется и li trace при исходящем ?
2) disp sys cus на второй странице, в строке Maximum Administered SIP Trunks: какая цифра указана ?
2) disp sys cus на второй странице, в строке Maximum Administered SIP Trunks: какая цифра указана ?
-
- Постоянный участник форума
- Сообщения: 2891
- Зарегистрирован: Пн 07 июл 2008, 16:51
- Откуда: Москва
- Контактная информация:
Re: avaya - h323 - asterisk callerid
да не ходит русский у аваи по Н323.....
Настрою IP Office и классическую Avaya
Re: avaya - h323 - asterisk callerid
Зарегался, чтобы написать потомкам.
Я конечно понимаю, что тема старая да и avaya станции не молодеют, но из-за санкций теперь нескоро Российские компании соберутся обновлять свои решения Avaya, поэтому думаю, что кому-то пригодится.
Задача была организовать прохождения вызова между Lync 2010 и Avaya CM 5.1. (Да, вот такое древнее все, а что делать, приходится работать с такими заказчиками).
На Avaya SIP лицензий 0, бюджета на это тоже 0, да и что-то мне подсказывает, что на 5.1 без обновления sip-лицензии теперь и не достать. В итоге sip на avaya отпадает.
Но на Avaya есть h323 (лицензии тоже есть).
Решение, между Avaya и Lync ставим asterisk, и в сторону Lync смотрит sip, а в сторону Avaya h323.
Все настроил, и даже заработало, но заказчик хотел видеть имя звонящего кириллицей, так как на Avaya через "костыль" ~{ETNF работало отображение Русских букв на телефонах, да и на Lync все пользователи были заведены в кириллице, а по факту при звонке, что в одну что в другую сторону высвечивается "Абаркадабра".
Все рекомендуют переходить на транслит, но сейчас уже 2023 год, где вы видели транслит в последний раз? Уже выросло поколение, которое вообще не слышало про транслит.
В результате изучения, мне удалось заставить корректно отображать имя звонящего в Кириллице.
Решение:
Оказывается, что avaya при отправке вызова в h323-транк конвертирует имя звонящего из ~DFCZ в ВАСЯ (ну это понятно), дальше все русские буквы, которым есть аналог по написанию в английском алфавите, она заменяет на эти английские буквы, а те русские буквы, которым не нашлось пары, avaya кодирует какими-то левыми символами своей таблицы кодировки. Итого из ВАСЯ получается что первые 3и буквы это английские BAC, А последняя Я - это допустим "вопросик в ромбике".
Дальше, я вычислил на какие символы заменяет Avaya все русские буквы и написал скрипт, который корректно декодировал этот набор символов в Кириллицу и asterisk теперь отправляет от avaya в сторону Lync кириллицу.
А от Lync соответственно наоборот, пришлось из Кириллицы формировать понятную для Avaya строку.
Вот кусок из dialplan asterisk (вызов от avaya в сторону Lync):
....
exten => _1XXX,n,Set(CALLERID(name)=${ICONV(CP866,UTF-8,${CALLERID(name)})})
exten => _1XXX,n,AGI(cidname_adaptation_avaya.py)
....
Скрипт cidname_adaptation_avaya.py
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
import sys
import os
import re
from asterisk.agi import *
agi = AGI()
agi.verbose("!!!!!!!!!!!!!!!!!!!!------------------python agi started-----------------!!!!!!!!!!!!!!!!!!!!!")
cid_name = agi.env['agi_calleridname']
dict_avaya = {' ':' ', 'О':'И', 'Н':'З', '.':'.', 'A':'А', 'B':'В', 'C':'С', 'E':'Е', 'H':'Н', 'K':'К', 'M':'М', 'O':'О', 'P':'Р', 'T':'Т', 'Y':'У', 'X':'Х','П':'Л', 'Т':'Ш', 'З':'Ф', '<':'Б', 'А':'Г', 'Л':'Д', '~':'Ё', ':':'Ж', 'Q':'Й', 'R':'К', 'к':'Л', 'V':'М', 'Е':'П', '{':'Х', 'Р':'Ц', 'С':'Ч', 'У':'Щ',.
'}':'Ъ', 'Ц':'Ь', 'Х':'Ы', '"':'Э', '>':'Ю', 'Щ':'Я'}
result_cid_name = re.match(r'^~', cid_name)
if result_cid_name is not None:
<------>cid_name = cid_name[1:]
<------>capital = 1
<------>cid_name_adaptation = ''
<------>for i in cid_name:
<------><------>if i in dict_avaya:
<------><------><------>if capital == 1:
<------><------><------><------>cid_name_adaptation += dict_avaya.upper()
<------><------><------><------>capital = 0
<------><------><------>else:
<------><------><------><------>cid_name_adaptation += dict_avaya.lower()
<------><------>else:
<------><------><------>cid_name_adaptation += i
<------><------>if i == ' ' or i == '.':
<------><------><------>capital = 1
else:
<------>cid_name_adaptation = cid_name
agi.set_variable("cid_name", cid_name_adaptation)
Вызов от Lync в сторону Avaya:
.......
exten => _2XXX,n,AGI(cidname_adaptation_to_avaya.py)
exten => _2XXX,n,Set(CALLERID(name)=${cid_name})
exten => _2XXX,n,Set(CALLERID(name)=${ICONV(UTF-8,CP866,${CALLERID(name)})})
......
Скрипт cidname_adaptation_to_avaya.py
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
import sys
import os
import re
from asterisk.agi import *
agi = AGI()
agi.verbose("!!!!!!!!!!!!!!!!!!!!------------------python agi started-----------------!!!!!!!!!!!!!!!!!!!!!")
cid_name = agi.env['agi_calleridname']
dict_avaya = {' ':' ', 'И':'О', 'З':'Н', '.':'.', 'А':'A', 'В':'B', 'С':'C', 'Е':'E', 'Н':'H', 'К':'K', 'М':'M', 'О':'O', 'Р':'P', 'Т':'T', 'У':'Y','Х':'X', 'Л':'П', 'Ш':'Т', 'Ф':'З', 'Б':'<', 'Г':'А', 'Д':'Л', 'Ё':'~', 'Ж':':', 'Й':'Q', 'К':'R', 'Л':'к', 'М':'V', 'П':'Е', 'Х':'{', 'Ц':'Р', 'Ч':'С','Щ':'У', 'Ъ':'}', 'Ь':'Ц', 'Ы':'Х', 'Э':'"', 'Ю':'>', 'Я':'Щ'}
result_cid_name = re.match(r'[А-Я][а-я]+[ ][А-Я][а-я]+[ ][А-Я][а-я]+\b', cid_name)
if result_cid_name is not None:
<------>fio = cid_name.upper().split(' ')
<------>cid_name = fio[0] + ' ' + fio[1][0:1] + '.' + fio[2][0:1] + '.'
<------>cid_name_adaptation = '~'
<------>for i in cid_name:
<------><------>if i in dict_avaya:
<------><------><------>cid_name_adaptation += dict_avaya
<------><------>else:
<------><------><------>cid_name_adaptation += i
else:
<------>cid_name_adaptation = cid_name
agi.set_variable("cid_name", cid_name_adaptation)
Так как на Avaya длина имени 15 символов, то от Lync Петров Иван Иванович, я урезал Д Петров И.И.
Если я кому-то помог и вы захотите отблагодарить меня рублем или баксом, то я буду не против. найти меня можно в группах Telegram посвященных voip и asterisk в России.
Или, если кто-тона основе предложенной информации так и не сможет ничего настроить, пишите, я помогу.
Я конечно понимаю, что тема старая да и avaya станции не молодеют, но из-за санкций теперь нескоро Российские компании соберутся обновлять свои решения Avaya, поэтому думаю, что кому-то пригодится.
Задача была организовать прохождения вызова между Lync 2010 и Avaya CM 5.1. (Да, вот такое древнее все, а что делать, приходится работать с такими заказчиками).
На Avaya SIP лицензий 0, бюджета на это тоже 0, да и что-то мне подсказывает, что на 5.1 без обновления sip-лицензии теперь и не достать. В итоге sip на avaya отпадает.
Но на Avaya есть h323 (лицензии тоже есть).
Решение, между Avaya и Lync ставим asterisk, и в сторону Lync смотрит sip, а в сторону Avaya h323.
Все настроил, и даже заработало, но заказчик хотел видеть имя звонящего кириллицей, так как на Avaya через "костыль" ~{ETNF работало отображение Русских букв на телефонах, да и на Lync все пользователи были заведены в кириллице, а по факту при звонке, что в одну что в другую сторону высвечивается "Абаркадабра".
Все рекомендуют переходить на транслит, но сейчас уже 2023 год, где вы видели транслит в последний раз? Уже выросло поколение, которое вообще не слышало про транслит.
В результате изучения, мне удалось заставить корректно отображать имя звонящего в Кириллице.
Решение:
Оказывается, что avaya при отправке вызова в h323-транк конвертирует имя звонящего из ~DFCZ в ВАСЯ (ну это понятно), дальше все русские буквы, которым есть аналог по написанию в английском алфавите, она заменяет на эти английские буквы, а те русские буквы, которым не нашлось пары, avaya кодирует какими-то левыми символами своей таблицы кодировки. Итого из ВАСЯ получается что первые 3и буквы это английские BAC, А последняя Я - это допустим "вопросик в ромбике".
Дальше, я вычислил на какие символы заменяет Avaya все русские буквы и написал скрипт, который корректно декодировал этот набор символов в Кириллицу и asterisk теперь отправляет от avaya в сторону Lync кириллицу.
А от Lync соответственно наоборот, пришлось из Кириллицы формировать понятную для Avaya строку.
Вот кусок из dialplan asterisk (вызов от avaya в сторону Lync):
....
exten => _1XXX,n,Set(CALLERID(name)=${ICONV(CP866,UTF-8,${CALLERID(name)})})
exten => _1XXX,n,AGI(cidname_adaptation_avaya.py)
....
Скрипт cidname_adaptation_avaya.py
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
import sys
import os
import re
from asterisk.agi import *
agi = AGI()
agi.verbose("!!!!!!!!!!!!!!!!!!!!------------------python agi started-----------------!!!!!!!!!!!!!!!!!!!!!")
cid_name = agi.env['agi_calleridname']
dict_avaya = {' ':' ', 'О':'И', 'Н':'З', '.':'.', 'A':'А', 'B':'В', 'C':'С', 'E':'Е', 'H':'Н', 'K':'К', 'M':'М', 'O':'О', 'P':'Р', 'T':'Т', 'Y':'У', 'X':'Х','П':'Л', 'Т':'Ш', 'З':'Ф', '<':'Б', 'А':'Г', 'Л':'Д', '~':'Ё', ':':'Ж', 'Q':'Й', 'R':'К', 'к':'Л', 'V':'М', 'Е':'П', '{':'Х', 'Р':'Ц', 'С':'Ч', 'У':'Щ',.
'}':'Ъ', 'Ц':'Ь', 'Х':'Ы', '"':'Э', '>':'Ю', 'Щ':'Я'}
result_cid_name = re.match(r'^~', cid_name)
if result_cid_name is not None:
<------>cid_name = cid_name[1:]
<------>capital = 1
<------>cid_name_adaptation = ''
<------>for i in cid_name:
<------><------>if i in dict_avaya:
<------><------><------>if capital == 1:
<------><------><------><------>cid_name_adaptation += dict_avaya.upper()
<------><------><------><------>capital = 0
<------><------><------>else:
<------><------><------><------>cid_name_adaptation += dict_avaya.lower()
<------><------>else:
<------><------><------>cid_name_adaptation += i
<------><------>if i == ' ' or i == '.':
<------><------><------>capital = 1
else:
<------>cid_name_adaptation = cid_name
agi.set_variable("cid_name", cid_name_adaptation)
Вызов от Lync в сторону Avaya:
.......
exten => _2XXX,n,AGI(cidname_adaptation_to_avaya.py)
exten => _2XXX,n,Set(CALLERID(name)=${cid_name})
exten => _2XXX,n,Set(CALLERID(name)=${ICONV(UTF-8,CP866,${CALLERID(name)})})
......
Скрипт cidname_adaptation_to_avaya.py
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
import sys
import os
import re
from asterisk.agi import *
agi = AGI()
agi.verbose("!!!!!!!!!!!!!!!!!!!!------------------python agi started-----------------!!!!!!!!!!!!!!!!!!!!!")
cid_name = agi.env['agi_calleridname']
dict_avaya = {' ':' ', 'И':'О', 'З':'Н', '.':'.', 'А':'A', 'В':'B', 'С':'C', 'Е':'E', 'Н':'H', 'К':'K', 'М':'M', 'О':'O', 'Р':'P', 'Т':'T', 'У':'Y','Х':'X', 'Л':'П', 'Ш':'Т', 'Ф':'З', 'Б':'<', 'Г':'А', 'Д':'Л', 'Ё':'~', 'Ж':':', 'Й':'Q', 'К':'R', 'Л':'к', 'М':'V', 'П':'Е', 'Х':'{', 'Ц':'Р', 'Ч':'С','Щ':'У', 'Ъ':'}', 'Ь':'Ц', 'Ы':'Х', 'Э':'"', 'Ю':'>', 'Я':'Щ'}
result_cid_name = re.match(r'[А-Я][а-я]+[ ][А-Я][а-я]+[ ][А-Я][а-я]+\b', cid_name)
if result_cid_name is not None:
<------>fio = cid_name.upper().split(' ')
<------>cid_name = fio[0] + ' ' + fio[1][0:1] + '.' + fio[2][0:1] + '.'
<------>cid_name_adaptation = '~'
<------>for i in cid_name:
<------><------>if i in dict_avaya:
<------><------><------>cid_name_adaptation += dict_avaya
<------><------>else:
<------><------><------>cid_name_adaptation += i
else:
<------>cid_name_adaptation = cid_name
agi.set_variable("cid_name", cid_name_adaptation)
Так как на Avaya длина имени 15 символов, то от Lync Петров Иван Иванович, я урезал Д Петров И.И.
Если я кому-то помог и вы захотите отблагодарить меня рублем или баксом, то я буду не против. найти меня можно в группах Telegram посвященных voip и asterisk в России.
Или, если кто-тона основе предложенной информации так и не сможет ничего настроить, пишите, я помогу.
Последний раз редактировалось kruk ivan Пн 19 июн 2023, 12:21, всего редактировалось 1 раз.