Страница 6 из 10
Re: CallerID на русском
Добавлено: 27 ноя 2011, 12:40
ded
Так вот это - пробовали?
Есть кастомные решения вставлением в макрос macro-dialout на шаге
Set(CALLERID(all)=${OUTCID_${ARG1}})
функции конвертера
ICONV(ISO8859-5,UTF-8,CALLERID(name))
Ну и как-то убедиться, что Yealink отображает в UTF-8?
Re: CallerID на русском
Добавлено: 27 ноя 2011, 13:23
maxmen77
ded писал(а):Так вот это - пробовали?
Есть кастомные решения вставлением в макрос macro-dialout на шаге
Set(CALLERID(all)=${OUTCID_${ARG1}})
функции конвертера
ICONV(ISO8859-5,UTF-8,CALLERID(name))
Ну и как-то убедиться, что Yealink отображает в UTF-8?
Телефон отображает - 100%, проверял на предыдущем астере - вначале темы я уже описывал - стоял superfecta и подставлял callerid из tiger, только везде цифру к имени в конце добавлял - иначе имя не показывал.
Предложенный вариант попробовал - не помогает.
Получидось exten => s,6,Set(CALLERID(all)=${ICONV(ISO8859-5,UTF-8,{OUTCID_${ARG1}})})
В консоли по-прежнему вопросы, а когда в консоли на русском - то и на телефоне нормально отобразится.
Складывается впечатление, что он ещё на этапе получения результата запроса от БД как-то перекодирует имя.
Кто знает, какая цепочка задействована в определении номера, т.е. как именно происходит запрос. По идее должно юыть так (почувствую себя КЭПом): определяется номер, дальше по этому номеру ищется в БД имя и результат возвращается в консоль. Так вот какие файлы - программы-макросы участвуют в этом запросе и как попробовать его сделать вручную поэтапно, чтобы вычислить слабое место?
Можно ли как-то из cli получить callerid?
Re: CallerID на русском
Добавлено: 27 ноя 2011, 14:32
ded
Вначале темы описан эксперимент
Диалплан
Код: выделить все
exten => 1199,1,set(CALLERID(name)="Василий Печкин")
exten => 1199,2,Dial(SIP/3404,60,Ttr)
Лог в консоли
Код: выделить все
-- Executing [1199@from-internal:1] Set("SIP/3330-00000039", "CALLERID(name)="Василий Печкин"") in new stack
-- Executing [1199@from-internal:2] Dial("SIP/3330-00000039", "SIP/3404,60,Ttr") in new stack
и он работает, я не понял где Вы и что описывали.
И что такое superfecta?
Можно ли как-то из cli получить callerid?
Ну что за вопрос?
callerid формируется в dialparties.agi
подставлял callerid из tiger, только везде цифру к имени в конце добавлял
Так надо тогда исследовать формат хранения данных в TigerCRM?
определяется номер, дальше по этому номеру ищется в БД имя и результат возвращается в консоль. Так вот какие файлы - программы-макросы участвуют в этом запросе и как попробовать его сделать вручную поэтапно, чтобы вычислить слабое место?
Так смотрите в консоль Астериска при исполнении такого звонка! Он же пишет очень точно какие файлы - программы-макросы участвуют в этом запросе.
Вы же видите всё что там происходит? Думаю, что ни у кого, кроме Вас, нет идентичной конфигурации, Вам и карты в руки.
Re: CallerID на русском
Добавлено: 27 ноя 2011, 16:29
maxmen77
Василий Печкин отображается нормально
superfecta - это модуль для определения callerid из нескольких источников одновременно, но сейчас я пытаюсь обойтись без него.
maxmen77 писал(а):Ну что за вопрос?
callerid формируется в dialparties.agi
Как я могу напрямую в dialparties.agi отправить запрос, чтобы он вернул мне callerid ?
В vtigercrm всё хранится в mysql, кодировка utf-8, по запросу
Код: Выделить всё
SELECT accountname
FROM vtiger_account
WHERE phone LIKE 'ЗАНЕСЕННЫЙ_В_БД_НОМЕР'
LIMIT 0 , 30
выдаёт имя, которое соответствует этому номеру в нормальном читабельном виде.
Вот лог астера
Код: Выделить всё
-- Executing [78612011219@from-pstn:1] Set("SIP/realcomm-00000009", "__FROM_DID=ВХОДЯЩИЙ_НОМЕР") in new stack
-- Executing [78612011219@from-pstn:2] Gosub("SIP/realcomm-00000009", "cidlookup,cidlookup_1,1") in new stack
-- Executing [cidlookup_1@cidlookup:1] MYSQL("SIP/realcomm-00000009", "Connect connid 127.0.0.1 vtigerbase ПАРОЛЬ_К_БД ПОЛЬЗОВАТЕЛЬ_БД") in new stack
-- Executing [cidlookup_1@cidlookup:2] MYSQL("SIP/realcomm-00000009", "Query resultid 1 SELECT accountname FROM vtiger_account WHERE phone LIKE '%ЗАНЕСЕННЫЙ_В_БД_НОМЕР%'") in new stack
-- Executing [cidlookup_1@cidlookup:3] MYSQL("SIP/realcomm-00000009", "Fetch fetchid 2 CALLERID(name)") in new stack
-- Executing [cidlookup_1@cidlookup:4] MYSQL("SIP/realcomm-00000009", "Clear 2") in new stack
-- Executing [cidlookup_1@cidlookup:5] MYSQL("SIP/realcomm-00000009", "Disconnect 1") in new stack
-- Executing [cidlookup_1@cidlookup:6] Return("SIP/realcomm-00000009", "") in new stack
-- Executing [78612011219@from-pstn:3] Gosub("SIP/realcomm-00000009", "app-blacklist-check,s,1") in new stack
-- Executing [s@app-blacklist-check:1] GotoIf("SIP/realcomm-00000009", "0?blacklisted") in new stack
-- Executing [s@app-blacklist-check:2] Set("SIP/realcomm-00000009", "CALLED_BLACKLIST=1") in new stack
-- Executing [s@app-blacklist-check:3] Return("SIP/realcomm-00000009", "") in new stack
-- Executing [78612011219@from-pstn:4] ExecIf("SIP/realcomm-00000009", "0 ?Set(CALLERID(name)=ЗАНЕСЕННЫЙ_В_БД_НОМЕР)") in new stack
-- Executing [78612011219@from-pstn:5] Set("SIP/realcomm-00000009", "__CALLINGPRES_SV=allowed_not_screened") in new stack
-- Executing [78612011219@from-pstn:6] Set("SIP/realcomm-00000009", "CALLERPRES()=allowed_not_screened") in new stack
-- Executing [78612011219@from-pstn:7] Goto("SIP/realcomm-00000009", "ext-group,600,1") in new stack
-- Goto (ext-group,600,1)
-- Executing [600@ext-group:1] Macro("SIP/realcomm-00000009", "user-callerid,") in new stack
-- Executing [s@macro-user-callerid:1] Set("SIP/realcomm-00000009", "AMPUSER=ЗАНЕСЕННЫЙ_В_БД_НОМЕР") in new stack
-- Executing [s@macro-user-callerid:2] GotoIf("SIP/realcomm-00000009", "0?report") in new stack
-- Executing [s@macro-user-callerid:3] ExecIf("SIP/realcomm-00000009", "1?Set(REALCALLERIDNUM=ЗАНЕСЕННЫЙ_В_БД_НОМЕР)") in new stack
-- Executing [s@macro-user-callerid:4] Set("SIP/realcomm-00000009", "AMPUSER=") in new stack
-- Executing [s@macro-user-callerid:5] Set("SIP/realcomm-00000009", "AMPUSERCIDNAME=") in new stack
-- Executing [s@macro-user-callerid:6] GotoIf("SIP/realcomm-00000009", "1?report") in new stack
-- Goto (macro-user-callerid,s,10)
-- Executing [s@macro-user-callerid:10] GotoIf("SIP/realcomm-00000009", "0?continue") in new stack
-- Executing [s@macro-user-callerid:11] Set("SIP/realcomm-00000009", "__TTL=64") in new stack
-- Executing [s@macro-user-callerid:12] GotoIf("SIP/realcomm-00000009", "1?continue") in new stack
-- Goto (macro-user-callerid,s,19)
-- Executing [s@macro-user-callerid:19] Set("SIP/realcomm-00000009", "CALLERID(number)=ЗАНЕСЕННЫЙ_В_БД_НОМЕР") in new stack
-- Executing [s@macro-user-callerid:20] Set("SIP/realcomm-00000009", "CALLERID(name)=???????? ??????????") in new stack
-- Executing [s@macro-user-callerid:21] NoOp("SIP/realcomm-00000009", "Using CallerID "???????? ??????????" <ЗАНЕСЕННЫЙ_В_БД_НОМЕР>") in new stack
В общем, вопрос тот же - как напрямую отправить запрос в dialparties.agi, чтобы посмотреть что он выдаст на выходе.
Re: CallerID на русском
Добавлено: 27 ноя 2011, 17:53
maxmen77
Разобрался, всем спасибо, косяк был не в астере, если бы начал проверку с БД - сэкономил бы целый выходной день.
Может, кому пригодится:
Проверил сначала запросом напрямую в БД
Код: Выделить всё
SELECT accountname FROM vtiger_account WHERE phone LIKE 'ПРОВЕРРОЧНЫЙ_НОМЕР_ИЗ_БД';
, у меня на выводе были те самые гадкие вопросики.
После проверил
Код: Выделить всё
mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
- вот тут и прозрел.... решил пойти самым коротким путём - добавлением строки
Код: Выделить всё
exten => cidlookup_1,n,MYSQL(Query resultid ${connid} SET NAMES utf8;)
в extensions_additional.conf в [cidlookup]
Теперь в консоли на русском имена пишутся, на телефонах пока проверить не могу, на неделе проверю.
Всем спасибо за участие!
Re: CallerID на русском
Добавлено: 28 ноя 2011, 03:26
SolarW
Во всех инсталляциях первым делом пытаюсь добиться чтобы в MySQL никаких latin1 не было, только utf8.
На с нуля построенных системах легче, там сам сразу все как надо создаешь.
В сборках сложнее - приходится базы пересоздавать в правильной кодировке.
http://www.fop2.com/blog/lookup_source
Вот так тоже хорошо работает с русскими именами.
Re: CallerID на русском
Добавлено: 28 ноя 2011, 11:51
maxmen77
А вот и не всё... Тема становится похожа на блог...
Ситуацию с кодировками мускула я тоже победил, теперь вроде как надо
Код: Выделить всё
mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
, но к сожалению, этого недостаточно для нормального отображения, потому что после сохранения настроек через веб-морду эта волшебная строчка
Код: Выделить всё
exten => cidlookup_1,n,MYSQL(Query resultid ${connid} SET NAMES utf8;)
стирается и опять появляются вопросики и чтобы победить их, приходится вручную добавлять её заново.
Кто что может предложить в качестве решения? Менять права на файл не подходит, потому что редактирую и через веб и напрямую. Логически получается что где-то задана кодировка по умолчанию из-за которой и весь сыр-бор... Кто знает где это может быть?
Re: CallerID на русском
Добавлено: 28 ноя 2011, 12:00
ded
вот тут и прозрел.... решил пойти самым коротким путём - добавлением строки
Код: выделить все
exten => cidlookup_1,n,MYSQL(Query resultid ${connid} SET NAMES utf8;)
в extensions_additional.conf в [cidlookup]
А о чём думалось, когда добавляли в extensions_additional.conf? Вы в курсе какие файлы можно и нужно править, а какие - нет?
Там прямо сверху заголовок:
Код: Выделить всё
;--------------------------------------------------------------------------------;
; Do NOT edit this file as it is auto-generated by FreePBX. All modifications to ;
; this file must be done via the web gui. There are alternative files to make ;
; custom modifications, details at: http://freepbx.org/configuration_files ;
;--------------------------------------------------------------------------------;
это, типа just for fun?
Есть определённая логика для кастомизации. Если есть желание переписывать автоматически создаваемые куски диалплана, то или править РНО код, или писать в
/etc/asterisk/extensions_override_freepbx.conf
Re: CallerID на русском
Добавлено: 28 ноя 2011, 12:32
maxmen77
Да видел заголовок, читать умею.
В файле /etc/asterisk/extensions_override_freepbx.conf секции cidlookup не нашёл и куда добавить эту строчку чтобы она не терялась - не знаю, потому и спрашиваю. Может, как-то можно в файлике этом прописать чтобы всё-таки добавлялась нужная строчка в нужном месте?
Re: CallerID на русском
Добавлено: 28 ноя 2011, 12:46
ded
Правильный вопрос: для чего нужен /etc/asterisk/extensions_override_freepbx.conf и что там прописывать? (адресовывать в Google)
Неправильный вопрос: Может, как-то можно в файлике этом прописать чтобы всё-таки добавлялась нужная строчка в нужном месте? (адресовывать на форуме)
Всё что прописано в этом файле - перехлопывает все куски диалплана, указанные ранее - в extensions.conf, extensions_additional.conf, extensions_custom.conf, etc
И не в виде нужной строчки, а в виде полного куска, макроса или контекста, со всеми добавлениями, в вашем случае -
[cidlookup]
exten => cidlookup_1,1,NoOp(Itsa my own customized cidlookup context for Russian CID names)
exten => cidlookup_1,n,MYSQL(Query resultid ${connid} SET NAMES utf8;)
и так далее......