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

dialplan mysql insert

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

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

Ответить
lpn672
Сообщения: 11
Зарегистрирован: 08 дек 2021, 14:01

dialplan mysql insert

Сообщение lpn672 »

Всем привет.

Полазил и почитал форум по поводу вставки чего либо в мускул или поиска там именно из диалплана.
Большинство, если не все, используют конструкцию примерно так:

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

 same => n,MySql(connect connid ${DBCurrentHost} ${DBuser} ${DBpass} ${DBname})
 same => n,MySql(query resultid ${connid} INSERT INTO blacklist (callerid) VALUES('${BLACKNUMBER}')
 same => n,MySql(fetch fetchid ${resultid} blacklistid)
 same => n,NoOp(FetchID: ${fetchid} Var1: ${blacklistid} ConnID: ${connid} ResultID: ${resultid})
 


В общем все работает, но есть замечания.
Во-первых, на консоли и в логах шторм. Большинство запросов статических и работают с одним ответом из БД.
Во-вторых, в консоли и логах видны ваши учетные данные. Да, обычно вход с этими данными разрешен с localhost и прям угрозы не много. А если не localhost (host1 - asterisk, host2 - mysql)? Упс, опять же не большая, но проблемка назревает.
В-третьих, что-то поправить и/или найти становится долго. Файлы большие, много строк, а сути 0.
В-четверых, это просто жутко некузяво :geek: , ИМХО.

Предлагаю, или скажем хочу напомнить, про механизм func_odbc.
Проще, легче и читабельно.

1. Подключаемся к БД

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

--- res_odbc.conf ---
[asterisk]
enabled => yes
dsn => asterisk
username => asterisk
password => asterisk
pre-connect => yes
sanitysql => select 1
max_connections => 10
logging => yes
2. Описываем функцию

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

--- func_odbc.conf ---
[D1_BLACKLIST]
prefix=ODBC
dsn=asterisk
writesql=INSERT INTO blacklist (callerid,notes) VALUES('${SQL_ESC(${VAL1})}','${SQL_ESC(${VAL2})}')
И тут хочу нюансик уточнить. И хотя в доке пишут про ВЕРХНИЙ регистр, то следует учесть: имя таблицы РеГиСтРоЗаВиСиМо !

3. Пользуемся в диалплане
--- extensions.conf ---
exten => 69,1,NoOp(ADD TO BLACKLIST)
same => n,Playback(enter-num-blacklist)
same => n,Read(blk_callerid,beep,10,,1,15)
same => n,Playback(telephone-number)
same => n,SayDigits(${blk_callerid})
same => n,Set(ODBC_D1_BLACKLIST()=${blk_callerid},"added by ${CALLERID(num)}")
same => n,Hangup()
Надеюсь изложенное понравится асам, а новичкам меньше граблей будет.
Аватара пользователя
Zavr2008
Сообщения: 2211
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: dialplan mysql insert

Сообщение Zavr2008 »

От подобного и перезагрузки будут.
Не следует напрямую в БД лезть из диалплана.
Юзайте тот же AGI например, и там уже делайте что нужно.
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
lpn672
Сообщения: 11
Зарегистрирован: 08 дек 2021, 14:01

Re: dialplan mysql insert

Сообщение lpn672 »

Если есть такие опасения, тогда давайте подробнее.

Почему не следует лезть напрямую? Опыт / документация?
Текущая конфигурация настроена и опробована. Для подобных запросов настроен отдельный odbc. Баланс идет нормально. База не "затыкается".

"Ни единого разрыва" (с)...
Аватара пользователя
Ferrum
Сообщения: 338
Зарегистрирован: 25 ноя 2011, 15:16

Re: dialplan mysql insert

Сообщение Ferrum »

Хм тоже постоянно тягаю из бд, проблем за лет 8 не было, правда версия древняя 1.8, около 10к звонков в сутки
Аватара пользователя
Zavr2008
Сообщения: 2211
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: dialplan mysql insert

Сообщение Zavr2008 »

По льду тоже многие ходят и ничего, жалуются только те кто ноги-руки уже сломал. У остальных "нормально".
Просто нужно делать правильно, а не заниматься ананией.
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
lpn672
Сообщения: 11
Зарегистрирован: 08 дек 2021, 14:01

Re: dialplan mysql insert

Сообщение lpn672 »

Подробности можно узнать? Про "льОд" это конечно хорошо и поучительно, но хотелось бы понять ход Ваших мыслей. Если вы говорите "делать правильно" - ткните где правильно.
Аватара пользователя
Zavr2008
Сообщения: 2211
Зарегистрирован: 27 янв 2011, 00:35
Контактная информация:

Re: dialplan mysql insert

Сообщение Zavr2008 »

Ну гораздо проще же AGI использовать, тот же PHP. Там уже и MySQL подключайте и еще что хотите.
С учетом того что прямое использование MySQL в астере уже рудимент и всё через ODBC идет, то это и быстрее и надежнее.
Прямое использование запросов к БД в диалплане может приводить к утечкам памяти и других ресурсов, ну и к кернел паник в результате.
Российские E1 шлюзы Alvis. Модернизация УПАТС с E1,Подключение к ИС "Антифрод" E1 PRI/SS#7 УВР Телестор, Грифин и др..
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH