Июн 08

Asterisk, Lua и MySQL. Добавляем номер в черный список

Табличка немного отличается от предыдущего поста, поле number уникальное.

Пишем макрос:

extensions['macro-ban'] = {
        s = function()
                cid = channel.CALLERID("num"):get()
                query = "INSERT INTO blacklist (number, expires) VALUES ('" .. cid .. "', date_add(NOW(), INTERVAL 1 DAY)) on duplicate key update expires = date_add(NOW() INTERVAL 1 DAY);"
                local con = assert (env:connect(DB_NAME,DB_USER,DB_PASSWORD))
                assert (con:execute(query))
                con:close()
        end
};

Добалвяем макрос в features.conf:

[applicationmap]
ban => *5,peer/callee,macro(ban)

и не забываем включить в __DYNAMIC_FEATURES в диалплане:

extensions = {
    ["incoming"] = {
        ["DID"] = function()
            channel.__DYNAMIC_FEATURES = "ban"
            app.dial("SIP/100")
        end;
    }
}

Теперь ответивший нажатием *5 может добавить номер звонящего в черный список.

Июн 06

Asterisk, LUA и MySQL. Черный Список.

С помощью 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;
    }
}

Конечно, для полноценного использования нужно добавить индексы в базу и по-хорошему еще разрулить ситуацию, когда база данных недоступна.
А чуть позже мы добавим бан номера по кнопке оператора.

Июн 05

Asterisk и Lua. Очень быстрый старт

Астериск из коробки может исползовать язык программирования LUA для написания диалплана. И это прекрасно! В диалплане можно подключить любую установленную lua-библиотеку и получить доступ к базе данных (SQLite, MySQL, PostgreSQL), работать с сетью, читать-записывать файлики. Причем, делается это все довольно просто.
Зная любой язык программирования и вооружившись справочником по синтаксису LUA, а так же прочитав пару абзацев ниже можно без проблем начать использовать всю мощь этой связки.
Continue reading

Янв 11

SPA2102 FAX

Звонки ходят отлично, уже который год. Решил доковырять факс (не пользуюсь в принципе, но ведь надо чтобы работало)
Пробую — ReceiveFax на астериске через Linksys spa2102 работает отлично, а вот обратно (SendFax) не идет.
в логах ошибок нет, есть вот такое:
NOTICE[3972]: chan_sip.c:9188 process_sdp: No compatible codecs, not accepting this offer!
Причем, на тот же Zoiper факсы отправляются.
Continue reading

Апр 22

Asterisk & Huawei E1550 (VoIP GSM Gate)


Захотелось на досуге завести VoIP — GSM шлюз, дабы экономить на звонках на сотовые и иметь возможность переключать на сотовые входящие звонки.

После прочтения интернетов выяснилось, что 100% рабочий вариант это модем Huawei E1550. Под теми же циферками продающийся операторами большой тройки. Желательно иметь модем от МТС, т.к. на нем не заблокированы голосовые функции, но после выполнения квеста по поиску в радиусе 1 км от офиса, модем нашелся только в Мегафоне, где и был куплен.

Continue reading

Апр 20

Asterisk 1.8 sip.conf: secret или remotesecret?

На voip-info.org англицким по-белому:

secret : If Asterisk is acting as a SIP Server, then this SIP client must login with this Password (A shared secret). If Asterisk is acting as a SIP client to a remote SIP server that requires SIP INVITE authentication, then this field is used to authenticate SIP INVITEs that Asterisk sends to the remote SIP server. Asterisk 1.6.2.x: Changed the secret parameter to remotesecret.

Asterisk-1.8 сообщает, что secret is deprecated. А вот skype с remotesecret не работает. А D-Link с secret не всегда работает. А правда где?

Апр 19

Asterisk 1.8 LTS на ubuntu-10.04 LTS

пришла мысля совместить два LTS и радоваться…
Делается на раз, пакеты для убунты лежат в официальном репозитории астериска:

sudo apt-get install python-software-properties
sudo apt-key adv --keyserver pgp.mit.edu --recv-keys 175E41DF
sudo add-apt-repository "deb http://packages.asterisk.org/deb `lsb_release -cs` main"
sudo add-apt-repository "deb-src http://packages.asterisk.org/deb `lsb_release -cs` main"
sudo apt-get update
sudo apt-get install asterisk-1.8 asterisk-dahdi

взято с официального сайта: https://wiki.asterisk.org/wiki/display/AST/Asterisk+Packages
внимание, репозиторий proposed не подключать! Часто ломается. А сегодня, например, не стратрует вообще.

Апр 12

asterisk sip.conf и secret

С версии Asterisk 1.6.2.x (причем эта X судя по всему больше 5, т.к. на 1.6.2.5 в ubuntu 10.04 все работало) опция secret превратилась в remotesecret,  и что характерно, никаких ворнингов * не показал, просто после обновлении на 1.8 отвалились шлюзы D-Link. А вот Zoiper как работал, так и работает, что-то я не понимаю в этой жизни..

Авг 27

Asterisk & Skype

Есть 3 способа поженить скайп и астериск – запустить собственный шлюз, купить лицензию Skype for Asterisk (chan_skype) или арендовать у скайпа SIP-канал.
Первый способ крив по-определению, требует гуя, скайпа и эмулирующей звуковую карту софт. Второй — $66/канал. Аренда канала у скайпа – $6.95 в месяц (за каждый канал), купить SFA – конешн выгодней в долгосрочном плане, а вот «на попробовать» – 7 баксов небольшие деньги. Это и запользуем.

Continue reading

Май 30

D-Link DVG-7111S

Захотелось запустить в офисе VoIP, да и опыта поднабраться заодно. Посему приобретена была сабжевая железка. Представляет она собой вполне себе работающий SIP-FXO/FXS шлюз.  Отзывы о глючности VoIP производства D-link для меня не секрет, но это единственный дешевый шлюз, который можно без проблем найти в нашей деревне. Впрочем, использовать самое слабое место этой железки — p2p я изначально не собирался, все равно астериск таки нужен.

Проблем с подключением и определением IP никаких нет, если железяка не находит DHCP, то устанавливает адрес написанный на обороте. Разве что сначала была путаница с WAN/LAN портом — сервер она хочет видеть исключительно со стороны WAN. С первоначальной настройкой никаких проблем не возникло, с FXS портом вообще никаких заморочек — указываем в соответствующем разделе логин/пароль, адрес астериска и всё — звонки ходят. FXO-порт так же регистрируется на сервере как обычный SIP-телефон, а при звонке на него (из мира) по-умолчанию электрическая барышня на грязно-шумном английском предлагает набрать добавочный номер. Впрочем тут тоже особо проблем не возникло — встроенный IVR без проблем отключается, галочкой в дебрях меню и установкой Hot-line  для FXO порта. После чего при звонке шлюз сразу начинает ломиться на прописанных в Hot-Line экстеншен, что вполне устроило.

Continue reading