ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

dialplan mysql insert

Проблемы и их решения Asterisk как такового

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

dialplan mysql insert

Сообщение lpn672 » 03 фев 2022, 15:24

Всем привет.

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

Код: выделить все
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()


Надеюсь изложенное понравится асам, а новичкам меньше граблей будет.
lpn672
 
Сообщений: 11
Зарегистрирован: 08 дек 2021, 15:01

Re: dialplan mysql insert

Сообщение Zavr2008 » 03 фев 2022, 15:41

От подобного и перезагрузки будут.
Не следует напрямую в БД лезть из диалплана.
Юзайте тот же AGI например, и там уже делайте что нужно.
Российские шлюзы E1 Alvis-GW. Модернизация УПАТС с E1, Установка FreePBX, Системы антифрод "в разрыв" потоков E1 PRI / SS#7 ISUP.
Аватар пользователя
Zavr2008
 
Сообщений: 2159
Зарегистрирован: 27 янв 2011, 01:35

Re: dialplan mysql insert

Сообщение lpn672 » 09 фев 2022, 13:35

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

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

"Ни единого разрыва" (с)...
lpn672
 
Сообщений: 11
Зарегистрирован: 08 дек 2021, 15:01

Re: dialplan mysql insert

Сообщение Ferrum » 09 фев 2022, 15:13

Хм тоже постоянно тягаю из бд, проблем за лет 8 не было, правда версия древняя 1.8, около 10к звонков в сутки
Аватар пользователя
Ferrum
 
Сообщений: 333
Зарегистрирован: 25 ноя 2011, 15:16

Re: dialplan mysql insert

Сообщение Zavr2008 » 09 фев 2022, 16:43

По льду тоже многие ходят и ничего, жалуются только те кто ноги-руки уже сломал. У остальных "нормально".
Просто нужно делать правильно, а не заниматься ананией.
Российские шлюзы E1 Alvis-GW. Модернизация УПАТС с E1, Установка FreePBX, Системы антифрод "в разрыв" потоков E1 PRI / SS#7 ISUP.
Аватар пользователя
Zavr2008
 
Сообщений: 2159
Зарегистрирован: 27 янв 2011, 01:35

Re: dialplan mysql insert

Сообщение lpn672 » 11 фев 2022, 15:26

Подробности можно узнать? Про "льОд" это конечно хорошо и поучительно, но хотелось бы понять ход Ваших мыслей. Если вы говорите "делать правильно" - ткните где правильно.
lpn672
 
Сообщений: 11
Зарегистрирован: 08 дек 2021, 15:01

Re: dialplan mysql insert

Сообщение Zavr2008 » 11 фев 2022, 15:48

Ну гораздо проще же AGI использовать, тот же PHP. Там уже и MySQL подключайте и еще что хотите.
С учетом того что прямое использование MySQL в астере уже рудимент и всё через ODBC идет, то это и быстрее и надежнее.
Прямое использование запросов к БД в диалплане может приводить к утечкам памяти и других ресурсов, ну и к кернел паник в результате.
Российские шлюзы E1 Alvis-GW. Модернизация УПАТС с E1, Установка FreePBX, Системы антифрод "в разрыв" потоков E1 PRI / SS#7 ISUP.
Аватар пользователя
Zavr2008
 
Сообщений: 2159
Зарегистрирован: 27 янв 2011, 01:35


Вернуться в Конфигурация и настройка Asterisk

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH