Метка: Asterisk

PJSIP отладка

А вот что сделали удобно, так это отладку.
Вместо грязного sip set debug on, теперь есть история пакетов. Включается запись истории командой

pjsip set history on

выключается соответственно:

pjsip set history off

Посмотреть, что записалось в историю поможет команда

pjsip show history

которая в удобном формате покажет, какие сообщения sip пробежали за время записи, а команда

pjsip show history entry 1

покажет полностью сообщение (пакет) номер 1 (как не сложно догадаться)
В общем, удобно.

Asterisk PJSIP и voip.domru.ru

В догонку к предыдущему, подключение телефонии Дом.Ру к Asterisk pjsip. Поскольку voip.domru.ru желает видеть в регистрации длинный номер (UserID), а идентифицирует по короткому (AuthID) использовать pjsip_wizard не получится, о чем мелким шрифтом сообщает документация придется писать полный конфиг. Впрочем, ничего сложного. Пример конфигурации ниже.
Да, в бумажке по астериску, которую они присылают непонятно зачем устанавливается CallerID, делать этого не стоит — он подменит все входящие звонки.
Читать далее

Asterisk и миграция на PJSIP

Не буду писать о том, что такое PJSIP и почему он теперь есть. И без меня писателей хватает, поэтому быстренько пробежимся по настройкам, и основным моментам для тех, кто использовал chan_sip.
Главная проблема при переходе заключается в том, что в PJSIP добавили гибкости, причем в таких количествах, что ей подавиться не сложно. Для каждого пира (теперь он называется endpoint) нужно сделать несколько секций (входящая и исходящая авторизация, регистрация, сам endpoint и еще несколько). Но, через какое-то время передумали и добавили модуль pjsip wizard, который, при загрузке сам сделает что нужно. На него-то и будем рассчитывать. В ubuntu-server 18.04 LTS Asterisk версии 13, древненько но пусть будет.
Читать далее

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 может добавить номер звонящего в черный список.

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;
    }
}

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

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

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

SPA2102 FAX

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

Asterisk & Huawei E1550 (VoIP GSM Gate)


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

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

Читать далее

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 не всегда работает. А правда где?

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 не подключать! Часто ломается. А сегодня, например, не стратрует вообще.