Доброго дня.
Настраиваю сие специфическую связь.
Звонки ходят в обе стороны. Все отлично.
callerid между телефонами за avaya русский - и на аппаратах 1608 и 1616 определяется норм.
callerid между телефонами за asterisk кириллица ( на сколько понимаю utf-8) - определяется то же отлично.
Но вот если звонить с аппарата за avaya на аппарат за asterisk то вместо букв выдается <????????>
Пытаюсь перекодить приходящее имя с avaya на asterisk средствами iconv. Но никак не перекодируется.
Вопрос: в каком коде avaya отдает имена asterisk. Пробовал cp1251 на utf-8 перекодить, но результат такой же.
help me
Доброго дня.
1)Руководство просит кириллицу, учитывая что между телефонами за avaya видно что работает кириллица.
2) Sip лицензий нет в наличии и бюджет на сие реализацию = 0. Т.е про покупку можно забыть однозначно.
Зарегался, чтобы написать потомкам.
Я конечно понимаю, что тема старая да и 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']
Так как на Avaya длина имени 15 символов, то от Lync Петров Иван Иванович, я урезал Д Петров И.И.
Если я кому-то помог и вы захотите отблагодарить меня рублем или баксом, то я буду не против. найти меня можно в группах Telegram посвященных voip и asterisk в России.
Или, если кто-тона основе предложенной информации так и не сможет ничего настроить, пишите, я помогу.
Последний раз редактировалось kruk ivan Пн 19 июн 2023, 12:21, всего редактировалось 1 раз.