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

CallerID Lookup Sources + UTF-8

Обо всем касательно FreePBX, MetPBX, TrixBox, Elastix, AstPBX и всех других дистрибутивов

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

Ответить
tonny_bennet
Сообщения: 169
Зарегистрирован: 21 дек 2011, 13:00
Откуда: Ростов-на-Дону
Контактная информация:

CallerID Lookup Sources + UTF-8

Сообщение tonny_bennet »

Здравствуйте.

Есть сервер телефонии на базе Elastix.

Есть некоторая телефонная книга, которая по GET запросу типа site.ru/cid.php?phone=79881234567 возвращает строку в кодировке UTF-8 с именем абонента. Если отдавать имя в латинице (Ivan Ivanov) всё прекрасно отображается на телефоне (использую DPH-150SE/F3). Но коль человек я русскоговорящий я хочу видеть на экране телефона Иван Иванов русскими буквами. Пробую отдать строку в UTF-8 в кирилице - телефон отображает только номер. Снимаю дамп сети с порта сервера телефонии. Вижу, что телефонная книга отдаёт серверу нормальную строку, а инвайт от сервера к телефону, формируется с полем From: в котором только номер.

Elastix не может обработать UTF-8? Как решить проблему?

P.S. Если в ответе телефонной книги отдать какой-нибудь латинский символ, точку (.) к примеру, то и инвайт формируется с нормальным полем и на телефоне отображается "Иван Иванов ."
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: CallerID Lookup Sources + UTF-8

Сообщение ded »

телефонная книга отдаёт серверу нормальную строку, а инвайт от сервера к телефону, формируется с полем From: в котором только номер.
Посмотрите не в дампе, а в командной строке Астериск прохождение этого вызова, внимательно - перед строкой Dial где должен быть виден запрос CallerID Lookup Source и ответ прямо строкой. Есть варианты, когда просто поправить РНР-код. Обсуждалось тут на форуме.
tonny_bennet
Сообщения: 169
Зарегистрирован: 21 дек 2011, 13:00
Откуда: Ростов-на-Дону
Контактная информация:

Re: CallerID Lookup Sources + UTF-8

Сообщение tonny_bennet »

Вот как отдаёт он имя.

Код: Выделить всё

   -- Executing [s@ext-did:3] Gosub("SIP/78632000000-00003ce1", "cidlookup,cidlookup_2,1") in new stack
    -- Executing [cidlookup_2@cidlookup:1] Set("SIP/78632000000-00003ce1", "CALLERID(name)=") in new stack
    -- Executing [cidlookup_2@cidlookup:2] Return("SIP/78632000000-00003ce1", "") in new stack
    -- Executing [s@ext-did:4] ExecIf("SIP/78632000000-00003ce1", "1 ?Set(CALLERID(name)=79881234567)") in new stack
тестовый php скрипт, который отдаёт имя

Код: Выделить всё

<?php

header("Content-type: text/html; charset=UTF-8");

 if ($_GET['phone']=="79881234567")
 {
    echo "Иван Иванов";
 }
?>
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: CallerID Lookup Sources + UTF-8

Сообщение ded »

Не видно что создалось в контексте cidlookup,
exten => cidlookup_2,1,
exten => cidlookup_2,n,
etc
видно только результат выполнения, он некорректно выглядит.
Return("SIP/78632000000-00003ce1", "" вернул уже пустоту,
потом проверка - подставил вместо имени - цифры
79881234567 ExecIf("SIP/78632000000-00003ce1", "1 ?Set(CALLERID(name)=79881234567)
Я бы наваял там лучше php-agi для cidlookup раз у вас тестовый скрипт на РНРю
tonny_bennet
Сообщения: 169
Зарегистрирован: 21 дек 2011, 13:00
Откуда: Ростов-на-Дону
Контактная информация:

Re: CallerID Lookup Sources + UTF-8

Сообщение tonny_bennet »

Вот так выглядит звонок, когда сервер дал имя в кирилице и точку:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

Код: Выделить всё

Verbosity is at least 3
  == Using SIP RTP TOS bits 184
  == Using SIP RTP CoS mark 5
    -- Executing [78632037920@from-trunk-sip-Don_2037920:1] Set("SIP/78632037920-00003d01", "GROUP()=OUT_2") in new stack
    -- Executing [78632037920@from-trunk-sip-Don_2037920:2] Goto("SIP/78632037920-00003d01", "from-trunk,78632037920,1") in new stack
    -- Goto (from-trunk,78632037920,1)
    -- Executing [78632037920@from-trunk:1] NoOp("SIP/78632037920-00003d01", "Catch-All DID Match - Found 78632037920 - You probably want a DID for this.") in new stack
    -- Executing [78632037920@from-trunk:2] Goto("SIP/78632037920-00003d01", "ext-did,s,1") in new stack
    -- Goto (ext-did,s,1)
    -- Executing [s@ext-did:1] Set("SIP/78632037920-00003d01", "__FROM_DID=s") in new stack
    -- Executing [s@ext-did:2] Gosub("SIP/78632037920-00003d01", "app-blacklist-check,s,1") in new stack
    -- Executing [s@app-blacklist-check:1] GotoIf("SIP/78632037920-00003d01", "0?blacklisted") in new stack
    -- Executing [s@app-blacklist-check:2] Set("SIP/78632037920-00003d01", "CALLED_BLACKLIST=1") in new stack
    -- Executing [s@app-blacklist-check:3] Return("SIP/78632037920-00003d01", "") in new stack
    -- Executing [s@ext-did:3] Gosub("SIP/78632037920-00003d01", "cidlookup,cidlookup_2,1") in new stack
    -- Executing [cidlookup_2@cidlookup:1] Set("SIP/78632037920-00003d01", "CALLERID(name)=Максим Шеховцов .") in new stack
    -- Executing [cidlookup_2@cidlookup:2] Return("SIP/78632037920-00003d01", "") in new stack
    -- Executing [s@ext-did:4] ExecIf("SIP/78632037920-00003d01", "0 ?Set(CALLERID(name)=79885469088)") in new stack
    -- Executing [s@ext-did:5] SetMusicOnHold("SIP/78632037920-00003d01", "MOHNewYear") in new stack
    -- Executing [s@ext-did:6] Set("SIP/78632037920-00003d01", "__MOHCLASS=MOHNewYear") in new stack
    -- Executing [s@ext-did:7] Set("SIP/78632037920-00003d01", "__CALLINGPRES_SV=allowed_not_screened") in new stack
    -- Executing [s@ext-did:8] Set("SIP/78632037920-00003d01", "CALLERPRES()=allowed_not_screened") in new stack
    -- Executing [s@ext-did:9] Goto("SIP/78632037920-00003d01", "ivr-4,s,1") in new stack
    -- Goto (ivr-4,s,1)
    -- Executing [s@ivr-4:1] Set("SIP/78632037920-00003d01", "MSG=custom/external_ivr") in new stack
    -- Executing [s@ivr-4:2] Set("SIP/78632037920-00003d01", "LOOPCOUNT=0") in new stack
    -- Executing [s@ivr-4:3] Set("SIP/78632037920-00003d01", "__DIR-CONTEXT=") in new stack
    -- Executing [s@ivr-4:4] Set("SIP/78632037920-00003d01", "_IVR_CONTEXT_ivr-4=") in new stack
    -- Executing [s@ivr-4:5] Set("SIP/78632037920-00003d01", "_IVR_CONTEXT=ivr-4") in new stack
    -- Executing [s@ivr-4:6] GotoIf("SIP/78632037920-00003d01", "0?begin") in new stack
    -- Executing [s@ivr-4:7] Answer("SIP/78632037920-00003d01", "") in new stack
    -- Executing [s@ivr-4:8] Wait("SIP/78632037920-00003d01", "1") in new stack
    -- Executing [s@ivr-4:9] Set("SIP/78632037920-00003d01", "TIMEOUT(digit)=3") in new stack
    -- Digit timeout set to 3.000
    -- Executing [s@ivr-4:10] Set("SIP/78632037920-00003d01", "TIMEOUT(response)=1") in new stack
    -- Response timeout set to 1.000
    -- Executing [s@ivr-4:11] Set("SIP/78632037920-00003d01", "__IVR_RETVM=") in new stack
    -- Executing [s@ivr-4:12] ExecIf("SIP/78632037920-00003d01", "1?Background(custom/external_ivr)") in new stack
    -- <SIP/78632037920-00003d01> Playing 'custom/external_ivr.slin' (language 'ru')
А вот так, когда он отдаёт только имя:
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:

Код: Выделить всё

Verbosity is at least 3
  == Using SIP RTP TOS bits 184
  == Using SIP RTP CoS mark 5
    -- Executing [78632037920@from-trunk-sip-Don_2037920:1] Set("SIP/78632037920-00003d11", "GROUP()=OUT_2") in new stack
    -- Executing [78632037920@from-trunk-sip-Don_2037920:2] Goto("SIP/78632037920-00003d11", "from-trunk,78632037920,1") in new stack
    -- Goto (from-trunk,78632037920,1)
    -- Executing [78632037920@from-trunk:1] NoOp("SIP/78632037920-00003d11", "Catch-All DID Match - Found 78632037920 - You probably want a DID for this.") in new stack
    -- Executing [78632037920@from-trunk:2] Goto("SIP/78632037920-00003d11", "ext-did,s,1") in new stack
    -- Goto (ext-did,s,1)
    -- Executing [s@ext-did:1] Set("SIP/78632037920-00003d11", "__FROM_DID=s") in new stack
    -- Executing [s@ext-did:2] Gosub("SIP/78632037920-00003d11", "app-blacklist-check,s,1") in new stack
    -- Executing [s@app-blacklist-check:1] GotoIf("SIP/78632037920-00003d11", "0?blacklisted") in new stack
    -- Executing [s@app-blacklist-check:2] Set("SIP/78632037920-00003d11", "CALLED_BLACKLIST=1") in new stack
    -- Executing [s@app-blacklist-check:3] Return("SIP/78632037920-00003d11", "") in new stack
    -- Executing [s@ext-did:3] Gosub("SIP/78632037920-00003d11", "cidlookup,cidlookup_2,1") in new stack
    -- Executing [cidlookup_2@cidlookup:1] Set("SIP/78632037920-00003d11", "CALLERID(name)=") in new stack
    -- Executing [cidlookup_2@cidlookup:2] Return("SIP/78632037920-00003d11", "") in new stack
    -- Executing [s@ext-did:4] ExecIf("SIP/78632037920-00003d11", "1 ?Set(CALLERID(name)=79885469088)") in new stack
    -- Executing [s@ext-did:5] SetMusicOnHold("SIP/78632037920-00003d11", "MOHNewYear") in new stack
    -- Executing [s@ext-did:6] Set("SIP/78632037920-00003d11", "__MOHCLASS=MOHNewYear") in new stack
    -- Executing [s@ext-did:7] Set("SIP/78632037920-00003d11", "__CALLINGPRES_SV=allowed_not_screened") in new stack
    -- Executing [s@ext-did:8] Set("SIP/78632037920-00003d11", "CALLERPRES()=allowed_not_screened") in new stack
    -- Executing [s@ext-did:9] Goto("SIP/78632037920-00003d11", "ivr-4,s,1") in new stack
    -- Goto (ivr-4,s,1)
    -- Executing [s@ivr-4:1] Set("SIP/78632037920-00003d11", "MSG=custom/external_ivr") in new stack
    -- Executing [s@ivr-4:2] Set("SIP/78632037920-00003d11", "LOOPCOUNT=0") in new stack
    -- Executing [s@ivr-4:3] Set("SIP/78632037920-00003d11", "__DIR-CONTEXT=") in new stack
    -- Executing [s@ivr-4:4] Set("SIP/78632037920-00003d11", "_IVR_CONTEXT_ivr-4=") in new stack
    -- Executing [s@ivr-4:5] Set("SIP/78632037920-00003d11", "_IVR_CONTEXT=ivr-4") in new stack
    -- Executing [s@ivr-4:6] GotoIf("SIP/78632037920-00003d11", "0?begin") in new stack
    -- Executing [s@ivr-4:7] Answer("SIP/78632037920-00003d11", "") in new stack
    -- Executing [s@ivr-4:8] Wait("SIP/78632037920-00003d11", "1") in new stack
    -- Executing [s@ivr-4:9] Set("SIP/78632037920-00003d11", "TIMEOUT(digit)=3") in new stack
    -- Digit timeout set to 3.000
    -- Executing [s@ivr-4:10] Set("SIP/78632037920-00003d11", "TIMEOUT(response)=1") in new stack
    -- Response timeout set to 1.000
    -- Executing [s@ivr-4:11] Set("SIP/78632037920-00003d11", "__IVR_RETVM=") in new stack
    -- Executing [s@ivr-4:12] ExecIf("SIP/78632037920-00003d11", "1?Background(custom/external_ivr)") in new stack
    -- <SIP/78632037920-00003d11> Playing 'custom/external_ivr.slin' (language 'ru')
Если смотреть в дамп сетевого трафика, то там чётко видно что на оба запроса сервер получил ответ. Но ответ с точкой он преобразовал в CallerID а ответ без точки опустил.

Можете пояснить что вы имели ввиду написав про php-agi?
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: CallerID Lookup Sources + UTF-8

Сообщение ded »

1) Повторю, что не видно что создалось в контексте cidlookup,
exten => cidlookup_2,1,
exten => cidlookup_2,n,
а это бы и посмотреть, там на первом шаге выполняется как раз lookup. Как он выглядит?
А в логе только результат выполнения, не то.

2) Загляните в директорию /var/lib/asterisk/agi-bin/
там много интересного с расширением .php
Почитайте что такое AGI и как его применять в Астериске.
tonny_bennet
Сообщения: 169
Зарегистрирован: 21 дек 2011, 13:00
Откуда: Ростов-на-Дону
Контактная информация:

Re: CallerID Lookup Sources + UTF-8

Сообщение tonny_bennet »

1)
Скажите пожалуйста как посмотреть, что выполняется в контексте cidlookup?
2)
Посмотрел и не сильно понял есть ли смысл мне переходить на AGI. База с телефонами находится на удалённом сервере логика выборки на нём же и реализована. Зачем всё это переносить на Asterisk если бОльшая часть работы выполняется на стороне сервера с телефонной книгой?
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: CallerID Lookup Sources + UTF-8

Сообщение ded »

1) просто кусок текста из файла extensions_additional.conf, абзац [cidlookup]
или просто командой
dialplan show cidlookup

2) Вы не поняли зачем AGI. Это не надо переносить на Asterisk так как бОльшая часть работы выполняется на стороне сервера с телефонной книгой. Туда уходять только запросы, и получаются ответы, но реализуется это через AGI. Почитайте всё же про вызовы AGI из диалплана.
tonny_bennet
Сообщения: 169
Зарегистрирован: 21 дек 2011, 13:00
Откуда: Ростов-на-Дону
Контактная информация:

Re: CallerID Lookup Sources + UTF-8

Сообщение tonny_bennet »

dialplan show cidlookup

Код: Выделить всё

pbx*CLI> dialplan show cidlookup
[ Context 'cidlookup' created by 'pbx_config' ]
  'cidlookup_1' =>  1. Set(CALLERID(name)=${CURL(http://login:passwd@cp.mywebsite:80/api/ring?phone=${CALLERID(num)})}) [pbx_config]
                    2. Return()                                   [pbx_config]
  'cidlookup_2' =>  1. Set(CALLERID(name)=${CURL(http://192.168.0.10:80/files/test.php?phone=${CALLERID(num)})}) [pbx_config]
                    2. Return()                                   [pbx_config]
  'cidlookup_return' => 1. ExecIf($["${DB(cidname/${CALLERID(num)})}" != ""]?Set(CALLERID(name)=${DB(cidname/${CALLERID(num)})})) [pbx_config]
                    2. Return()                                   [pbx_config]
  Include =>        'cidlookup-custom'                            [pbx_config]

-= 3 extensions (6 priorities) in 1 context. =-
В примере выше есть два cidlookup. Первый - это реально работающий постоянно определитель номера, который возвращает имена в транслите. Второй - это тот определитель, который я использую для тестов внутри сети. О нём я и писал выше.
tonny_bennet
Сообщения: 169
Зарегистрирован: 21 дек 2011, 13:00
Откуда: Ростов-на-Дону
Контактная информация:

Re: CallerID Lookup Sources + UTF-8

Сообщение tonny_bennet »

Кто-нибудь может подсказать почему не работает CallerID Lookup с UTF-8? Или если у кого работает то расскажите пожалуйста как вы это реализовали.
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH