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

CallerID на русском

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

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

ded
Сообщения: 15620
Зарегистрирован: 26 авг 2010, 19:00

Re: CallerID на русском

Сообщение ded »

Так вот это - пробовали?
Есть кастомные решения вставлением в макрос macro-dialout на шаге
Set(CALLERID(all)=${OUTCID_${ARG1}})
функции конвертера
ICONV(ISO8859-5,UTF-8,CALLERID(name))
Ну и как-то убедиться, что Yealink отображает в UTF-8?
maxmen77
Сообщения: 34
Зарегистрирован: 17 окт 2010, 15:50

Re: CallerID на русском

Сообщение 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?
ded
Сообщения: 15620
Зарегистрирован: 26 авг 2010, 19:00

Re: CallerID на русском

Сообщение 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?
определяется номер, дальше по этому номеру ищется в БД имя и результат возвращается в консоль. Так вот какие файлы - программы-макросы участвуют в этом запросе и как попробовать его сделать вручную поэтапно, чтобы вычислить слабое место?
Так смотрите в консоль Астериска при исполнении такого звонка! Он же пишет очень точно какие файлы - программы-макросы участвуют в этом запросе.
Вы же видите всё что там происходит? Думаю, что ни у кого, кроме Вас, нет идентичной конфигурации, Вам и карты в руки.
maxmen77
Сообщения: 34
Зарегистрирован: 17 окт 2010, 15:50

Re: CallerID на русском

Сообщение 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, чтобы посмотреть что он выдаст на выходе.
maxmen77
Сообщения: 34
Зарегистрирован: 17 окт 2010, 15:50

Re: CallerID на русском

Сообщение 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]
Теперь в консоли на русском имена пишутся, на телефонах пока проверить не могу, на неделе проверю.
Всем спасибо за участие!
Аватара пользователя
SolarW
Сообщения: 1331
Зарегистрирован: 01 сен 2010, 14:21
Откуда: Днепропетровск, Украина

Re: CallerID на русском

Сообщение SolarW »

Во всех инсталляциях первым делом пытаюсь добиться чтобы в MySQL никаких latin1 не было, только utf8.
На с нуля построенных системах легче, там сам сразу все как надо создаешь.
В сборках сложнее - приходится базы пересоздавать в правильной кодировке.

http://www.fop2.com/blog/lookup_source
Вот так тоже хорошо работает с русскими именами.
maxmen77
Сообщения: 34
Зарегистрирован: 17 окт 2010, 15:50

Re: CallerID на русском

Сообщение 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;)
стирается и опять появляются вопросики и чтобы победить их, приходится вручную добавлять её заново.
Кто что может предложить в качестве решения? Менять права на файл не подходит, потому что редактирую и через веб и напрямую. Логически получается что где-то задана кодировка по умолчанию из-за которой и весь сыр-бор... Кто знает где это может быть?
ded
Сообщения: 15620
Зарегистрирован: 26 авг 2010, 19:00

Re: CallerID на русском

Сообщение 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
maxmen77
Сообщения: 34
Зарегистрирован: 17 окт 2010, 15:50

Re: CallerID на русском

Сообщение maxmen77 »

Да видел заголовок, читать умею.
В файле /etc/asterisk/extensions_override_freepbx.conf секции cidlookup не нашёл и куда добавить эту строчку чтобы она не терялась - не знаю, потому и спрашиваю. Может, как-то можно в файлике этом прописать чтобы всё-таки добавлялась нужная строчка в нужном месте?
ded
Сообщения: 15620
Зарегистрирован: 26 авг 2010, 19:00

Re: CallerID на русском

Сообщение 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;)
и так далее......
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH