Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Результат Mysql(Query ...) постоянно 2

0

При выборке с базы возвращаемый результат постоянно 2. Не могу найти, в чём проблема. Вот extensions.conf:

exten => 111,1,MYSQL(Connect connid localhost ast_user password asterisk)
exten => 111,n,MYSQL(Query resultid ${connid} SELECT name FROM numbers WHERE number=${CALLERID(num)})
exten => 111,n,Set(CALLERID(name)=${resultid})
exten => 111,n,MYSQL(Clear ${resultid})
exten => 111,n,MYSQL(Disconnect ${connid})
exten => 111,n,Dial(SIP/200,7)

Вот лог:

 Executing [111@phones:1] MYSQL("SIP/111-00000002", "Connect connid localhost ast_user password asterisk") in new stack
    -- Executing [111@phones:2] MYSQL("SIP/111-00000002", "Query resultid 1 SELECT name FROM numbers WHERE number=380633717204") in new stack
    -- Executing [111@phones:3] Set("SIP/111-00000002", "CALLERID(name)=2") in new stack
    -- Executing [111@phones:4] MYSQL("SIP/111-00000002", "Clear 2") in new stack
    -- Executing [111@phones:5] MYSQL("SIP/111-00000002", "Disconnect 1") in new stack
    -- Executing [111@phones:6] Dial("SIP/111-00000002", "SIP/200,7") in new stack
удалить закрыть спам изменить тег редактировать

спросил 2011-08-26 19:41:20 +0400

true Gravatar true
71 12 1 12

2 Ответа

0

Нашёл решение:

exten => 111,1,MYSQL(Connect connid localhost ast_user password asterisk);подключение к базе и получение имени звонящего
exten => 111,n,MYSQL(Query resultid ${connid} SELECT name FROM pbook WHERE calld=${CALLERID(num)})
exten => 111,n,MYSQL(Fetch fetchid ${resultid} name)
exten => 111,n,Set(CALLERID(name)=${name})
exten => 111,n,MYSQL(Clear ${resultid})
exten => 111,n,MYSQL(Disconnect ${connid})

Надо было просто ещё раз обработать выборку с базы.

ссылка удалить спам редактировать

ответил 2011-08-26 22:33:36 +0400

true Gravatar true
71 12 1 12
0

то что вы делаете лишено смысла. используйте релатайм. будет выглядеть гдето так.

exten => 111,1,Set(CALLERID(name)=${REALTIME_FIELD(pbook,calld,${CALLERID(num)},name})

только коректнее наверно все же так

exten => 111,1,Set(name=${REALTIME_FIELD(pbook,calld,${CALLERID(num)},name})
exten => 111,2,ExecIf($[ "${name}" != "" ]?Set(CALLERID(name)=${name})

правда, еще надо написать в /etc/asterisk/extconfig.conf

calld => mysql,general,calld

ну и res_mysql.conf заполнить данными для коннекта секцию general.можно использовать другое имя базы, тоесть более одной. тогда в extconfig.conf пишите вместо general имя секции.

ссылка удалить спам редактировать

ответил 2011-08-27 02:02:43 +0400

meral Gravatar meral flag of Ukraine
21228 24 19 169
http://pro-sip.net/

обновил 2011-08-27 02:05:03 +0400

Comments

Самое интересное, что мой метод работал нормально. Только было одно НО: я загнал все данных в базу через LOAD DATA INFILE....и т.д. И те записи, которые были так записаны астериск не подхватывал. Но если я вручную добавлял новую запись, то астериск её нормально обрабатывал. Не могу понять, в чём причина. Но попробую сейчас ещё и Ваш метод. true ( 2011-08-27 14:52:17 +0400 )редактировать
Пробую Ваш метод. Всё равно не подхватывает. В /etc/asterisk/extconfig.conf точно так должно быть calld => mysql,general,calld ? CLI> realtime mysql status - показывает, что база подключена. true ( 2011-08-27 15:43:44 +0400 )редактировать
Сделал, по Вашей рекомендации, заработало, но та же проблема, что была и у меня: те данные, которые я добавил вручную астериск отображает, а те которые я залил через LOAD DATA.... с файла - нет. Не подскажете, как с этим бороться? true ( 2011-08-28 14:05:12 +0400 )редактировать
никак с эти не бороться.к астриску это не относится. данные в табличке есть? обычно это занчит что вы лоад дата использовали неправильно и у вас там только первая колонка остальные null. тоесть посмотрите что у вас реально в таблице. meral ( 2011-08-28 16:44:25 +0400 )редактировать
С базой всё в порядке. Все данные отображаются. Я эту табличку через вебку вывожу - всё гут. Данные есть. В консоли пишет, что имя присвоено и имя отображается правильное. Но вот, что я ещё заметил: те, записи, которые добавлены вручную проходят нормально, отображаются, в стек добавляются и звонят, но те которые были загружены в базу через LOAD отображаются в логах почему-то вот так: ") in new stackg [111@phones:1] Set("SIP/111-00000000", "name= Иван Иванов ") in new stackg [111@phones:2] Set("SIP/111-00000000", "CALLERID(name)= Иван Иванов -- Executing [111@phones:3] Dial("SIP/111-00000000", "SIP/404") in new stack Т.е. закрывающаяся скобка перескакивает на перед и запрос в стек не отправляется. Ну и звонок не идёт. true ( 2011-08-28 17:12:45 +0400 )редактировать
Ещё наблюдается такой симптом: если я удаляю ту запись из базы, которая была загружена через LOAD, через вебку и потом её добавляю снова, такую же, то всё работает. true ( 2011-08-28 17:28:05 +0400 )редактировать
Тип поля number - varchar(12), name - text. Захожу через вебку и просто пересохраняю запись в базе, абсолютно ничего при этом не меняя. При чём после пересохранения всё работает. Что при этом меняется в самой базе, когда я пересохраняю одну ячейку? И как это исправить? true ( 2011-08-28 17:54:57 +0400 )редактировать
Наконец-то решил проблему. При загрузке в базу через LOAD как отдельное поле база воспринимала только номер телефона, а для поля "имя" - раздельтеля не было, поэтому оно его делало бесконечным. Словом, добавка 2-х разделителей для номера и имени решила проблему. Спасибо за помощь. true ( 2011-08-28 18:33:07 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2011-08-26 19:41:20 +0400

Просмотрен: 877 раз

Обновлен: Aug 27 '11

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.