Asterisk RealTime SIP


Настройка sip.conf

Вы можете описать Ваших sip пользователей в файле sip.conf и использовать RealTime одновременно.

Настройки в файле extconfig.conf

Добавьте в этот файл нижеприведенную строку, заменяя название полей на те значения, которые Вам необходимы:


sipusers => mysql,asterisk,sip_buddies
sippeers => mysql,asterisk,sip_buddies


Вы можете заменить mysql на odbc, если вы используете odbc.
Вы можете заменить поле asterisk на имя базы данных, которое у Вас используется.
Вы можете заменить sip_buddies на то имя таблицы, которая у Вас создана для хранения данных.

Примечание: regseconds - это время, когда зарегистрировался SIP peer ПЛЮС expiration time. Это значение заносится в таблицу в формате времени Юникс.

Конфигурация подключения к базе данных

Занесите следующие параметры с Вашими значениями в файл res_mysql.conf

[general]
dbhost = 127.0.0.1
dbname = asterisk
dbuser = myuser
dbpass = mypass
dbport = 3306

Значения в файлах sip.conf или iax.conf, которые использовались в предыдущих версиях более не используются.

Таблица базы данных

Просто создадим необходимую нам таблицу:

Примечание:
  • Вы можете использовать любое имя таблицы по Вашему желанию. Только проверяйте, чтоб имя таблицы соответствовало тому конфигурационному семейству (family), для которого Вы хотите ее использовать.
  • exclaim Структура таблицы приведена для версии 1.4.x, если Вам не нужны некоторые поля, то их просто можно не использовать при создании таблицы.


#
# Структура таблицы `sip_buddies`
#

CREATE TABLE `sip_buddies` (
`id` int(11) NOT NULL auto_increment,
`accountcode` varchar(20) default NULL,
`disallow` varchar(100) default 'all',
`allow` varchar(100) default 'g729;ilbc;gsm;ulaw;alaw',
`allowoverlap` enum('yes','no') default 'yes',
`allowsubscribe` enum('yes','no') default 'yes',
`allowtransfer` varchar(3) default NULL,
`amaflags` varchar(13) default NULL,
`autoframing` varchar(3) default NULL,
`auth` varchar(40) default NULL,
`buggymwi` enum('yes','no') default 'no',
`callgroup` varchar(10) default NULL,
`callerid` varchar(80) default NULL,
`cid_number` varchar(40) default NULL,
`fullname` varchar(40) default NULL,
`call-limit` int(8) default 0,
`callingpres` varchar(80) default NULL,
`canreinvite` char(6) default 'yes',
`context` varchar(80) default NULL,
`defaultip` varchar(15) default NULL,
`dtmfmode` varchar(7) default NULL,
`fromuser` varchar(80) default NULL,
`fromdomain` varchar(80) default NULL,
`fullcontact` varchar(80) default NULL,
`g726nonstandard` enum('yes','no') default 'no',
`host` varchar(31) NOT NULL default '',
`insecure` varchar(20) default NULL,
`ipaddr` varchar(15) NOT NULL default '',
`language` char(2) default NULL,
`lastms` varchar(20) default NULL,
`mailbox` varchar(50) default NULL,
`maxcallbitrate` int(8) default 384,
`mohsuggest` varchar(80) default NULL,
`md5secret` varchar(80) default NULL,
`musiconhold` varchar(100) default NULL,
`name` varchar(80) NOT NULL default '',
`nat` varchar(5) NOT NULL default 'no',
`outboundproxy` varchar(80) default NULL,
`deny` varchar(95) default NULL,
`permit` varchar(95) default NULL,
`pickupgroup` varchar(10) default NULL,
`port` varchar(5) NOT NULL default '',
`progressinband` enum('yes','no','never') default 'no',
`promiscredir` enum('yes','no') default 'no',
`qualify` char(3) default NULL,
`regexten` varchar(80) NOT NULL default '',
`regseconds` int(11) NOT NULL default '0',
`rfc2833compensate` enum('yes','no') default 'no',
`rtptimeout` char(3) default NULL,
`rtpholdtimeout` char(3) default NULL,
`secret` varchar(80) default NULL,
`sendrpid` enum('yes','no') default 'yes',
`setvar` varchar(100) NOT NULL default '',
`subscribecontext` varchar(80) default NULL,
`subscribemwi` varchar(3) default NULL,
`t38pt_udptl` enum('yes','no') default 'no',
`trustrpid` enum('yes','no') default 'no',
`type` varchar(6) NOT NULL default 'friend',
`useclientcode` enum('yes','no') default 'no',
`username` varchar(80) NOT NULL default '',
`usereqphone` varchar(3) NOT NULL default 'no',
`videosupport` enum('yes','no') default 'yes',
`vmexten` varchar(80) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `name_2` (`name`)
) TYPE=MyISAM ROW_FORMAT=DYNAMIC;

Замечание:
Порядок следования полей `disallow` и `allow` в определении таблицы должен соответствовать Вашим требованиям к кодекам,
если Вы хотите, сначала запретить ненужные кодеки, а потом разрешить нужные, то порядок их следования должен быть таким, как указано выше.

Замечания:

  • поля incominglimit и outgoinglimit устарели. Используйте вместо них команду SetGroup.
  • Начиная с версии asterisk 1.0.2RC1, появилось еще одно дополнительное поле, используемое при SIP регистрации, с именем 'fullcontact'. Это поле было добавлено в вышеописанную таблицу.

  • В версиях 1.4.x появились новые поля:
    • lastms - Начиная с версии 1.4.24 в таблице появилось новое поле lastms, его кстанавливает сам сервер asterisk. Если в теблице не добавлено это поле, Вы будете в консоле получать сообщение: "MySQL RealTime: Failed to query database. Check debug for more info"
    • allowtransfer - разрешить (yes) или запретить (no) перевод вызова для этого пользователя.
    • auth - ссылка на запись из секции [authentication] (только для типа peer).
    • autoframing - включение (yes) или выключение (no) autoframing'a.
    • callingpres - режим публикации CallerId, значения смотри в файле doc/callingpres.txt из дистрибутива asterisk.
    • call-limit - ограничение на кол-во вызовов для пользователя. Для типа "peer" - на исходящие, для "user" - на входящие. Это ограничение работает только, если установлен параметр rtcachefriends=yes в файле sip.conf.
    • fullname и cid_number - собственно части поля имени и номера из CallerID.
    • maxcallbitrate - максимальный битрейт для видео в kbit/s.
    • mohsuggest - назначение см. в sip.conf.
    • outboundproxy - адрес прокси сервера для исходящих вызовов (только для типа peer).
    • regserver - в этом поле asterisk устанавливает значение "system name" при регистрации клиента, если установлено "rtsavesysname=yes" в файле sip.conf.
    • setvar - в значении указывается пара "переменная=значение" для переменной канала, при вызовах с данного девайса.
    • subscribecontext - указывает название контекста, в котором будут обрабатываться SIP запросы SUBSCRIBE.
    • subscribemwi - значения "yes" и "no". Назначение в sip.conf.
    • usereqphone - значения "yes" и "no". Добавить или нет ";user=phone" в URI, которое содержит нормальный вызываемый номер.
    • vmexten - Назначение см. sip.conf (только для типа peer).
  • Увеличен размер поля insecure в связи с изменением его синтаксиса.
  • Поле cancallforward не используется более, и было удалено из описания таблицы, используйте allowtransfer.
  • Поле restrictcid не используется более, и было удалено из описания таблицы, используйте callingpres.
  • Поле mask не используется более, и было удалено из описания таблицы, используйте формат с маской сети для permit/deny.
  • Увеличен размер поля canreinvite в связи с расширением его синтаксиса.
  • Еще в версии1.4.x появились новые поля-переключатели (хотя некоторые из них были ранее) Которые могут переопределить глобальные параметры файла конфигурации sip.conf:
    • trustrpid - значения: yes/no, по умолчанию: no. Устанавливается в "yes", если можно доверять полученному от SIP клиента Remote-Party-ID.
    • sendrpid - значения: yes/no, по умолчанию: yes. Устанавливается в "yes" если необходимо передавать SIP клиенту Remote-Party-ID.
    • g726nonstandard - значения: yes/no, по умолчанию: no. Если клиент собирается для сеанса связи "договориться" использовать звуковой кодек G726-32, с использованием компрессии AAL2, вместо RFC3551 (что требуется для аппаратов фирмы Sipura и шлюзов от Grandstream, и может другим). То это противоречит спецификации RFC3551, клиент _должен_ вместо этого "договориться" использовать AAL2-G726-32 :-(
    • useclientcode - значения: yes/no, по умолчанию: no.
    • progressinband - значения: yes/no/never, по умолчанию: never. Должен ли asterisk генерировать самостоятельно звуковой сигнал вызова для вызывающего абонента (in-band ringing). Используйте значение 'never', чтобы никогда не производилась генерация этого сигнала, даже в случае, когда некоторые странные устройства не могут генерировать его самостоятельно.
    • promiscredir - значения: yes/no, по умолчанию: no. Если установлено в значение "yes", то этим мы разрешаем отправлять SIP сообщения с кодом 302 или сообщения для переадресации вызова, для SIP клиентов с не локальными IP адресами. Стоит отметить, что поведение promiscredir при совершении переадресации вызова, который производиться в локальной системе, может привести к зацикливанию вызова, т.к. Asterisk не умеет обрабатывать "hairpin" вызовы.
    • videosupport - значения: yes/no, по умолчанию: yes. Параметр для включения поддержки SIP видео. Вам может понадобиться включить поддержку видео для конкретного SIP клиента, если, например, в глобальной части конфигурации она выключена, и Вы хотите выборочно ее включить только для конкретных пользователей.
    • allowoverlap - значения: yes/no, по умолчанию: yes. Установка в "no" запрещает поддержку для overlap dialing.
    • allowsubscribe - значения: yes/no, по умолчанию: no. Установка в "no" запрещает отслеживание состояние (subscriptions) данного клиента.
    • t38pt_udptl - значения: yes/no, по умолчанию: no. Включить/выключить поддержку T.38 для данного клиента.
    • rfc2833compensate - значения: yes/no, по умолчанию: no. Включение компенсации передачи DTMF сигналов с других серверов asterisk версии до 1.4.*. В данных случаях, Вы должны включить эту функцию или прием DTMF сигналов не будет работать должным образом.
    • buggymwi - значения: yes/no, по умолчанию: no. Cisco SIP firmware не полностью поддерживает RFC для индикации наличия новой голосовой почты (MWI). Установите значение этого параметра в "yes", чтобы не получать сообщения об ошибке, при отправке MWI телефонам с данной проблемой.


Примечание: В этой таблице создан индекс для поля 'name' потому что RealTime , делая запрос SELECT, всегда использует это поле. Естественно, что это поле должно иметь уникальное значение.

Вам, наверно, нет надобности во всех вышеприведенных полях. Если Вы хотите, то можете вообще удалить их из таблицы, если никогда не будете использовать их. Поля для каждого пользователя в Вашей таблице должны быть заполнены такими же значениями как, если бы Вы описывали его в файле sip.conf. Если какое-либо поле может иметь несколько определений для одной и той же записи (например, порядок выбора разрешенных кодеков), то они должны быть внесены в поле таблицы для этого пользователя разделенные точкой с запятой.
Например, нижеприведенная запись:

[foo]
host=dynamic
secret=bar
context=default
allow=gsm
allow=ulaw


будет сохранена в таблице так:


namehostsecretcontextipaddrportallow
foodynamicbardefault127.0.0.14569gsm;ulaw




Вам не нужно заносить в таблицу значения полей ipaddr, port или regseconds. Эти поля периодически устанавливаются самим механизмом RealTime.

Проверка работоспособности


Занесите необходимые данные в созданную Вами таблицу и попробуйте зарегистрировать экстеншен на asterisk. Если возникли проблемы, то для их детализации можно воспользоваться содержимым файла /var/log/asterisk/debug .

Примечание: Начиная с 16-03-2005 в CVS-HEAD , если Вы включите кэширование записей, полученных, используя механизм RealTime, в файле sip.conf, то будет работать Voicemail MWI, как и команда 'sip show peers'.




Ссылки по теме: