Страница 1 из 1
CallerID Lookup Sources + UTF-8
Добавлено: 13 мар 2014, 16:39
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. Если в ответе телефонной книги отдать какой-нибудь латинский символ, точку (.) к примеру, то и инвайт формируется с нормальным полем и на телефоне отображается "Иван Иванов ."
Re: CallerID Lookup Sources + UTF-8
Добавлено: 13 мар 2014, 16:46
ded
телефонная книга отдаёт серверу нормальную строку, а инвайт от сервера к телефону, формируется с полем From: в котором только номер.
Посмотрите не в дампе, а в командной строке Астериск прохождение этого вызова, внимательно - перед строкой Dial где должен быть виден запрос CallerID Lookup Source и ответ прямо строкой. Есть варианты, когда просто поправить РНР-код. Обсуждалось тут на форуме.
Re: CallerID Lookup Sources + UTF-8
Добавлено: 13 мар 2014, 17:55
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 "Иван Иванов";
}
?>
Re: CallerID Lookup Sources + UTF-8
Добавлено: 13 мар 2014, 18:07
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 раз у вас тестовый скрипт на РНРю
Re: CallerID Lookup Sources + UTF-8
Добавлено: 13 мар 2014, 18:20
tonny_bennet
Вот так выглядит звонок, когда сервер дал имя в кирилице и точку:
Код: Выделить всё
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')
А вот так, когда он отдаёт только имя:
Код: Выделить всё
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?
Re: CallerID Lookup Sources + UTF-8
Добавлено: 13 мар 2014, 20:53
ded
1) Повторю, что не видно что создалось в контексте cidlookup,
exten => cidlookup_2,1,
exten => cidlookup_2,n,
а это бы и посмотреть, там на первом шаге выполняется как раз lookup. Как он выглядит?
А в логе только результат выполнения, не то.
2) Загляните в директорию /var/lib/asterisk/agi-bin/
там много интересного с расширением .php
Почитайте что такое AGI и как его применять в Астериске.
Re: CallerID Lookup Sources + UTF-8
Добавлено: 14 мар 2014, 12:13
tonny_bennet
1)
Скажите пожалуйста как посмотреть, что выполняется в контексте cidlookup?
2)
Посмотрел и не сильно понял есть ли смысл мне переходить на AGI. База с телефонами находится на удалённом сервере логика выборки на нём же и реализована. Зачем всё это переносить на Asterisk если бОльшая часть работы выполняется на стороне сервера с телефонной книгой?
Re: CallerID Lookup Sources + UTF-8
Добавлено: 14 мар 2014, 13:08
ded
1) просто кусок текста из файла extensions_additional.conf, абзац [cidlookup]
или просто командой
dialplan show cidlookup
2) Вы не поняли зачем AGI. Это не надо переносить на Asterisk так как бОльшая часть работы выполняется на стороне сервера с телефонной книгой. Туда уходять только запросы, и получаются ответы, но реализуется это через AGI. Почитайте всё же про вызовы AGI из диалплана.
Re: CallerID Lookup Sources + UTF-8
Добавлено: 17 мар 2014, 08:14
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. Первый - это реально работающий постоянно определитель номера, который возвращает имена в транслите. Второй - это тот определитель, который я использую для тестов внутри сети. О нём я и писал выше.
Re: CallerID Lookup Sources + UTF-8
Добавлено: 03 апр 2014, 09:58
tonny_bennet
Кто-нибудь может подсказать почему не работает CallerID Lookup с UTF-8? Или если у кого работает то расскажите пожалуйста как вы это реализовали.