Приветствую, астерискеры и сочувствующие! Вчера ночью на одном популярном форуме в тематике asterisk наткнулся на вопрос: как же можно «по быстрому» защитить свой номер 8800 от методики, которую нередко используют конкуренты — многократному дозвону на номер для срабатывания тарификации у владельца номера?
Оператор номеров 8800, которого я советую своим клиентам, берет 2.42 руб/минуту с поминутной тарификацией, и 2.89 руб/минуту с посекундной. С посекундной, конечно, все проще, но тоже неприятно. За одну минуту можно совершить минимум 10 звонков, которые спишут с баланса владельца номера почти 15 рублей. За час это будет 900 рублей, и это если в один поток. В общем, проблема есть и явная.
Решение было найдено несложное, по традиции, все делается из вебморды FreePBX. Нам понадобится модуль Smart Routes, который я уже упоминал в предыдущей публикации, там же его можно скачать.
Логика проста — ищем в CDR последние звонки с текущего номера, и если их больше X за Y минут — сбрасываем звонок.
Запрос в модуле прост:
SELECT count(`calldate`) FROM `cdr` WHERE (`src`='${CALLERID(number)}') AND (`calldate` BETWEEN NOW() - INTERVAL 5 MINUTE AND NOW())
Как видно, интервал указывается именно тут, в запросе. Запрос отберет количество звонков с текущего номера за последние 5 минут и выведет их в результирующем поле одной строкой.
Match Type нам необходимо установить в LESSER, по совпадению — переход на нужную нам точку, Failover устанавливаем, например, в Terminate => Hangup. Именно в этом поле настраивается число разрешенных звонков с текущего номера за интервал, указанный в запросе.
Default Destination также сброс.
Выглядит это так:
Остается направить звонки в модуль Smart Routes во входящих правилах и все!
Удачи и поменьше неадекватных людей вам на пути.
Автор: whoim