С помощью LUA делается элементарно:
В MySQL делаем табличку blacklist:
CREATE TABLE blacklist ( NUMBER VARCHAR(20) NOT NULL, expires datetime DEFAULT NULL ) |
Подключаем к LUA библиотеку luaSQL и luasql.mysql для работы с базой данных
-- расскажем, где искать package.cpath = package.cpath .. ";/usr/lib/i386-linux-gnu/lua/5.1/?.so" -- и подключем local luasql = require "luasql.mysql" local mysql = assert (luasql.mysql()) -- данные для подключения к базе MySQL local DB_HOST = "localhost" local DB_NAME = "db_name" local DB_USER = "db_user" local DB_PASSWORD = "db_passwod" -- и пишем функцию проверки: function is_banned(cid_number) local con = assert (env:connect(DB_NAME,DB_USER,DB_PASSWORD)) local cur = assert (con:execute("SELECT * FROM blacklist where '".. cid_number.."' like number and (expires>now() or expires is NULL);")) c = cur:numrows() cur:close() con:close() return c>0 end -- а дальше и начинаем использовать: extensions = { ["incoming"] = { ["DID"] = function() if is_banned(channel.CALLERID["number"]:get()) then -- Номер в черном списке, что-то с ним делаем app.answer() app.wait(1) app.hangup() end; end; } } |
Конечно, для полноценного использования нужно добавить индексы в базу и по-хорошему еще разрулить ситуацию, когда база данных недоступна.
А чуть позже мы добавим бан номера по кнопке оператора.