dialplan mysql insert
Добавлено: 03 фев 2022, 14:24
Всем привет.
Полазил и почитал форум по поводу вставки чего либо в мускул или поиска там именно из диалплана.
Большинство, если не все, используют конструкцию примерно так:
В общем все работает, но есть замечания.
Во-первых, на консоли и в логах шторм. Большинство запросов статических и работают с одним ответом из БД.
Во-вторых, в консоли и логах видны ваши учетные данные. Да, обычно вход с этими данными разрешен с localhost и прям угрозы не много. А если не localhost (host1 - asterisk, host2 - mysql)? Упс, опять же не большая, но проблемка назревает.
В-третьих, что-то поправить и/или найти становится долго. Файлы большие, много строк, а сути 0.
В-четверых, это просто жутко некузяво , ИМХО.
Предлагаю, или скажем хочу напомнить, про механизм func_odbc.
Проще, легче и читабельно.
1. Подключаемся к БД
2. Описываем функцию
И тут хочу нюансик уточнить. И хотя в доке пишут про ВЕРХНИЙ регистр, то следует учесть: имя таблицы РеГиСтРоЗаВиСиМо !
3. Пользуемся в диалплане
Полазил и почитал форум по поводу вставки чего либо в мускул или поиска там именно из диалплана.
Большинство, если не все, используют конструкцию примерно так:
Код: Выделить всё
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.
В-четверых, это просто жутко некузяво , ИМХО.
Предлагаю, или скажем хочу напомнить, про механизм 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
Код: Выделить всё
--- 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()