Тестирование телефонов Digium с Asterisk и настройка Smart BLF

в 11:15, , рубрики: Без рубрики

Ранее специалистами нашей компании было проведено тестирование телефонов Digium с системой унифицированных коммуникаций Switchvox и одним из самых распространенных бесплатных дистрибутивов AsteriskNow. И вот наконец-то мы добрались до “голого” Asterisk'a.

В данном обзоре мы рассмотрим конфигурирование аппарата с помощью модуля взаимодествия телефонов Digium с Asterisk – DPMA (Digium Phone Module for Asterisk), а также настройку Smart BLF.

Всех заинтересовавшихся прошу под кат.

Итак, начнем.

Прежде всего, нужно заказать лицензию DPMA на официальном сайте производителя: store.digium.com/productview.php?product_code=804-00032
Лицензия бесплатная, но тем не менее продукт все равно требует регистрации. Буквально через несколько минут на почту приходит письмо от Digium с кодом активации. Естественно, чтобы получить лицензию нужно зарегистрироваться на сайте.

После получения лицензии необходимо скачать утилиту register:

wget http://downloads.digium.com/pub/register/x86-32/register

Далее меняем права доступа для утилиты register:

chmod 500 /root/register

И запускаем ее:

/root/register

Далее следуя подсказкам визарда выполняем все необходимые манипуляции:

Нажимаем 1, затем 11.

И, наконец, вводим ключик, присланный нам от Digium.

“Читаем” условия лицензионного соглашения, вводим необходимые данные для регистрации.

И видим в терминале надпись, что лицензия успешно записана.

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

Переходим к следующему шагу: скачиваем модуль DPMA

# cd /root
# wget http://downloads.digium.com/pub/telephony/res_digium_phone/asterisk-11.0/x86-32/res_digium_phone-11.0_1.4.0.tar.gz

Разархивируем и копируем файл res_digium_phone.so в папку с модулями Asterisk (по умолчанию /usr/lib/asterisk/modules/):

tar xzvf res_digium_phone-11.0_1.4.0.tar.gz
# cp /root/res_digium_phone-11.0_1.4.0/res_digium_phone.so /usr/lib/asterisk/modules

Копируем файл конфигурации в папку конфигов asterisk (по умолчанию /etc/asterisk/):

cp /root/res_digium_phone-11.0_1.4.0/res_digium_phone.conf.sample /etc/asterisk/res_digium_phone.conf

Загружаем модуль:

asterisk -rx "module load res_digium_phone.so"

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

#asterisk -rvvv
*CLI> digium_phones license status
OK, Valid product license found

Лицензия DPMA привязывается к mac-адресу вашей сетевой карты, в случае ее замены, либо придется перерегистрировать модуль, либо подменять mac-адрес новой сетевой карты

Итак, переходим к настройке телефонов.

В sip.conf создаем юзеров:

[000] 
type=friend 
host=dynamic 
context=dpma_phones 
secret=qwaszx 
mailbox=000 
qualify=yes 


[111] 
type=friend 
host=dynamic 
context=dpma_phones 
secret=qwaszx 
mailbox=111 
qualify=yes 


[222] 
type=friend 
host=dynamic 
context=dpma_phones 
secret=qwaszx 
mailbox=222 
qualify=yes 

[333] 
type=friend 
host=dynamic 
context=dpma_phones 
secret=qwaszx 
mailbox=333 
qualify=yes 

[444] 
type=friend 
host=dynamic 
context=dpma_phones 
secret=qwaszx 
mailbox=444 
qualify=yes 


[555] 
type=friend 
host=dynamic 
context=dpma_phones 
secret=qwaszx 
mailbox=555 
qualify=yes 


[666] 
type=friend 
host=dynamic 
context=dpma_phones 
secret=qwaszx 
mailbox=666 
qualify=yes 

[777] 
type=friend 
host=dynamic 
context=dpma_phones 
secret=qwaszx 
mailbox=777 
qualify=yes 

[888] 
type=friend 
host=dynamic 
context=dpma_phones 
secret=qwaszx 
mailbox=888 
qualify=yes 


[999] 
type=friend 
host=dynamic 
context=dpma_phones 
secret=qwaszx 
mailbox=999 
qualify=yes 

Для удобства я назвал их номерами телефонов.

В extensions.conf создаем правила для этих абонентов:

[general] 

accept_outofcall_message = yes
outofcall_message_context = dpma_message_context
auth_message_requests = no
callcounter=yes

[dpma_phones] 

include=parkedcalls 
exten => XXX,hint,SIP/${EXTEN}
exten => XXX,1,Dial(SIP/${EXTEN},20) 
same => n,Voicemail(${EXTEN},${IF($["{DIALSTATUS}" = "BUSY"]?b:u)}) 
same => n,Hangup()

Настраиваем почтовые ящики для наших абонентов в voicemail.conf:

[default] 
000 => 1234,000 
111 => 1234,111 
222 => 1234,222 
333 => 1234,333 
444 => 1234,444 
555 => 1234,555 
666 => 1234,666 
777 => 1234,777 
888 => 1234,888 
999 => 1234,999 

Далее непосредственно переходим к файлу конфигурации res_digium_phone.conf.

Структура файла делится на несколько обязательных секций:

  • general
  • network
  • phone
  • line
  • external_line
  • application
  • ringtone
  • alert
  • firmware
  • translation

Остановимся поподробнее на каждой:

Секция General

server_uuid строка Уникальное имя для вашего сервера.
Используется приложением “Голосовая почта”
для предоставления доступа к абонентским
почтовым ящикам. Опционально.
globalpin число; например: 10101019 Опциональный пин-код для получения телефоном конфига и прошивки
userlist_auth disabled, globalpin Указывает на метод аутентификации получения
контакт-листа. Два значения: либо отключено,
либо авторизация по глобальному пин-коду.
config_auth mac, pin, globalpin, disabled Указывает на метод получения конфига.
Либо аутентификация по mac-адресу,
либо по пин-коду, либо по глобальному пин-коду,
либо отключена и любой телефон
может забрать любой конфиг
mdns_address IP адресс или имя хоста Адрес сервера, с которого DPMA будет получать
конфиг через mDNS
mdns_port Порт, по умолчанию 5060 Порт, на который будет стучаться DPMA
service_name Строка, например Digium Phones Config Server Имя сервера
service_discovery_enabled yes / no Разрешение на поиск серверов конфигурации
file_directory Директория, например /var/lib/asterisk/digium_phones Папка в которой лежат xml-файлы контактов
Секция Network (секция не обязательна для DPMA версий 1.2 и ниже, в новых версиях обязательна)

alias Строка, например MyNetwork Имя сети
alternate_registration_address IP адрес или имя хоста Альтернативный адрес регистрации (если не доступен основной)
alternate_registration_port Порт, число, например: 5060 Альтернативный порт регистрации (если не доступен основной)
cidr CIDR, например 198.51.100.1/24 Адрес сети, маска
file_url_prefix URL, например: http://10.10.10.10/file_package_directory Префикс URL, с которого телефон должен получать информацию о прошивке,
логотипе, рингтоне и smart blf (обязательно!
Для корректной работы необходим веб-сервер, например apache)
network_vlan_discovery_mode NONE, MANUAL, LLDP Информация о vlan
network_vlan_id 0-4095 Присваивает номер vlan (если есть)
ntp_server hostname, IP address, e.g. ntp.mycompany.com NTP сервер
pc_qos Integer (0-7) QoS для PC-порта
pc_vlan_id (Integer (0-4095) Назначает vlan PC-портуS
public_firmware_url_prefix URL Префикс публичного URL,
с которого телефон должен получать информацию
о прошивке в случае недоступности основного сервера,
ведет на сервера Digium. Должен иметь вид:
/VERSION/VERSION_MODEL_firmware.eff
registration_address IP address or Hostname Адрес сервера регистрации
registration_port Port, as an Integer; e.g 5060 Порт сервера регистрации
rtp_dscp Integer (0-63) DSCP RTP
rtp_qos Integer (0-7) RTP QoS
sip_dscp Integer (0-63) SIP DSCP
sip_qos Integer (0-7) SIP QoS
syslog_level debug, error, warning, information Уровень логирования системных сообщений
syslog_port порт, например 514 Порт, на который шлются системные сообщения, по умолчанию — 514.
syslog_server hostname, IP address, например syslog.mycompay.com Адрес сервера, на который шлются системные сообщения
udp_ka_interval Время в секундах Определяет интервал, с которым телефоны шлют keep-alive
сообщения, по умолчанию – 0, никогда
Секция Phone

network "network" в res_digium_phone.conf Имя сети, заданное в предыдущей секции
firmware "firmware" в res_digium_phone.conf Имя прошивки
mac MAC-адрес, например 0123456789ab Mac-адрес
pin число, например 10101019 Пин-код для получения конфигов
group_pin число, например 101010109 Пин-код для телефонов, объединенных в группу
line line в res_digium_phone.conf линия(должна быть названа также, как юзер в sip.conf)
external_line external_line в res_digium_phone.conf Внешняя линия, не зарегистрированная на вашем сервере asterisk
application приложение приложение
config_file файл, например mycustomconfig.xml DPMA автоматически генерирует конфигурационный файл для каждого телефона исходя из линий, которые к телефону привязаны, но можно создать отдельный файл конфигурации.
full_name строка, например Bob Johnson Полное имя абонента
contact файл, например contacts.xml XML-файл контактов
contacts_display_rules файл, например mydisplayrules.xml XML-файл из file_directory с правилами отображения контактов.
blf_contact_group Строка, например “office-contacts” Группа. Обязательное поле
blf_items файл, например blfitems.xml Xml-файл с настройками “поведения” кнопок быстрого набора
contacts_max_subscriptions число, например 40 Максимальное кол-во регистраций телефонов, по умолчанию 40
timezone Временная зона, например
America/Chicago
Временная зона
ntp_resync время в секундах Интервал ntp-синхронизации
parking_exten extension, например, 700 Номер парковки
parking_transfer_type blind / attended Тип трансфера
ringtone Название рингтона Опция, загружающая необходимые рингтоны на телефон
active_ringtone Alarm, Chimes, Digium, GuitarStrum, Jingle, Office2, Office, RotaryPhone, SteelDrum, Techno,
Theme, Tweedle, Twinkle, Vibe или имя вашего рингтона
Активный рингтон
web_ui_enabled no / yes Доступность веб-интерфейса телефона, по умолчанию при использовании DPMA
– отключена возможность зайти на телефон через веб-интерфейс f
record_own_calls no / yes Опция, позволяющая записывать собственные разговоры.
Во время активного разговора при включенной опции на дисплее появится кнопко “record”, по умолчанию отключена
alert имя Имя сообщения-предупреждения
blf_unused_linekeys no / yes Опция, позволяющая использовать кнопки линий в качестве кнопок быстрого набора
send_to_vm yes / no Опция, при неактивности которой с телефона убирается кнопка “отправить в почтовый ящик”
use_local_storage yes / no При использовании данной опции контакты будут храниться непосредственно в телефоне
d40_logo_file строка Логотип для Digium D40, png 150x45 пикселей, 10кб
d50_logo_file строка Логотип для Digium D50, png 150x45 пикселей, 10кб
d70_logo_file строка Логотип для Digium D40, png 205x85 пикселей, 10кб
ehs auto, plantronics, jabra_iq Определяет типа подключаемой гарнитуры
lock_preferences yes / no Опция позволяет закрепить настройки за определенным телефоном
login_password число, например 789 Пароль для входа в веб-интерфейс
accept_local_calls any, host Позволяет принимать звонки либо с SIP-сервера, на котором телефон зарегистрирован, либо отовсюду
display_mc_notification yes / no Опция, определяющая вывод на дисплей информации о пропущенных звонках
brightness число, 0-10 Яркость, по умолчанию 5
contrast число, 0-10 Контрастность, по умолчанию 5
dim_backlight yes, no Затемнение экрана
backlight_timeout число, в секундах (0-3200) Время до затемнения экрана
backlight_dim_level число (0-10) Уровень яркости при затемненном экране
active_locale de_DE, en_AU, en_CA, en_GB, en_US, es_ES, es_MX,
fr_BE, fr_CA, fr_FR, it_IT, nl_BE, nl_NL, pt_BR, pt_PT
Настройки локализации
ringer_volume число (0-10) Громкость звонка
speaker_volume число (0-10) Громкость микрофона
handset_volume число (0-10) Громкость динамик трубки
headset_volume число (0-10) Громкость гарнитуры
handset_sidetone_db число, например -25 Коэффициент увелечения сигнала трубки, Дб
headset_sidetone_db число, например -15 Коэффициент увелечения сигнала гарнитуры, Дб
reset_call_volume yes / no Если опция включена, но настройки громкости во время одного разговора не сохраняются после его завершения
headset_answer yes / no Задает использовать гарнитуру или трубку
name_format first_last, last_first Настройка показывания полного имени контакта
lan_port_mode auto, 10hd, 10fd, 100hd, 100fd, 1000fd Режим работы LAN-порта
pc_port_mode auto, 10hd, 10fd, 100hd, 100fd, 1000fd, off Режим работы PC-порта
enable_check_sync yes / no Разрешение отвечать на SIP-запросы синхронизации
Секция Line

exten строка, например 1000 Extension из файла sip.conf
digit_map строка Правила набора номеров
line_label строка Название линии, которой будет отображаться на телефоне
mailbox почтовый ящик из voicemail.conf Почтовый ящик из voicemail.conf
voicemail_uri стоока, в формате sip:user@host URI вашего почтового ящика, доступный по нажатию кнопки “Msgs”
outboundproxy_address Хост / IP адрес Адрес вашего SIP-сервера
outboundproxy_port Порт Порт вашего SIP-сервера
transport udp, tcp Метод транспорта
reregistration_timeout число, в секундах Количество секунд до перерегистрации
registration_retry_interval число, в секундах Интервал в секундах между запросами на разрешение повторной регистрации
registration_max_retries число, в секундах Максимальное кол-во попыток регистрации
secret строка, mymagicpassword Пароль, обязателен если информация об экстеншене в ARA, а не в sip.conf
context Asterisk dialplan context Контекст, обязателен если информация об экстеншене в ARA, а не в sip.conf
callerid caller id string, e.g. "Bob Jones" <1234> Caller-ID, обязателен если информация об экстеншене в ARA, а не в sip.conf
subscribecontext Asterisk dialplan context Контекст, если определен здесь, то перезаписывает данные о контексте, затирая данные из sip.conf
Секция External Line

server_address строка, например otherpbx.othercompany.com Адрес SIP-сервера
server_port число Порт SIP-сервера
transport tcp or udp Метод транспорта
secondary_server_address строка, например backuppbx.othercompany.com Адрес SIP-сервера, к которому будет обращаться телефон в случае не доступности основного
secondary_server_port число Порт SIP-сервера, к которому будет обращаться телефон в случае не доступности основного
secondary_server_transport tcp or udp Метод транспорта
userid строка, например bob1234 Username, по умолчанию = имя линии
authname строка, например bob1234 SIP authorization name, если отличается от userid, поле должно быть ззаполнено
secret строка пароль
register yes / no регистрация
callerid строка Caller ID

Application – раздел конфигурирования приложений, содержит как стандартные приложения, так и дает возможность задать свое приложение

Queues Application (очередь)

queue string Идентификатор очереди, определен в файое queues.conf
membername string Имя члена очереди, по умолчанию = fullname из раздела [phone]
location Asterisk queue member location, e.g. Local/6002@ext-queue/n Местоположение согласно заданному образцу
member yes / no Член/не член очереди
permission status, overview, details Уровень доступа юзера к очереди
login_exten Asterisk extension@context, e.g. *451234@ext-queue Номер, который нужно набрать, чтобы залогиниться в очередь
logout_exten Asterisk extension@context, e.g. *451234@ext-queue Номер, который нужно набрать, чтобы разлогиниться из очереди
Status Application (приложение статуса)

status available, dnd, away, xa, chat Тип статуса
substatus string Доп. статус
send486 yes / no Если устанвлено – телефон вернет ошибку 486 Asterisk'у
Parking Application (приложение парковки)

parkinglot string Имя экстеншена парковки, заданное в файле features.conf
Voicemail Applications (приложение голосовой почты)

translation identifier of a type=voicemail section Задает локализацию голосвой почты
Custom Applications (ваше собственное приложение, написанное на javascript)

name string имя
filename string файл .zip архива с приложением, который лежит в папке определенной параметром file_url_prefix.
autostart yes / no Автозагрузка при запуске телефона
key value Опциональные параметры, которые могут быть переданы в приложение
Секция Ringtone

alias string Имя рингтона, например FancyRinger.
filename string Имя вашего собственного рингтона, 16-bit 16kHz mono, не .wav, должен лежать в file_url_prefix.
Секция Alert

alert_info string Заголовок alert-сообщения, который должен ждать телефон, в случае использования данной опции
ring_type normal, answer, ring-answer, visual Тип звонка
ringtone Alarm, Chimes, Digium, GuitarStrum, Jingle,
Office2, Office, RotaryPhone, SteelDrum, Techno, Theme, Tweedle,
Twinkle, Vibe, or one of the context names where type=ringtone
рингтон
Секция Firmware

model D40, D50, D70 Модель телефона
version version string identifier of firmware Версия ПО, файл с расширением ”.eff”
file string Имя файла ПО, лежащего в папке, определенной в file_url_prefix network
public_firmware yes, no использвоание ПО на публичном сервере Digium, в случае недоступности вашего сервера
Секция Translation

key строка Устанавливает значение, которое будет заменено на заданное

Например:

[voicemail_de_DE]
type=translation
INBOX=INBOX
Work=Arbeit
Family=Familie
Friends=Freunde
Recordings=Aufnahmen

Итак, мы разобрали все секции файла конфигурации res_digium_phone.so

Теперь разберемся со структурой xml-файла с контактами:

Телефоны Digium оснащены приложение “Контакты” с встроенным быстрым набором, blf и статусом присутствия. Приложение “Контакты” связано с приложением “Статус”, так как оба эти приложения действуют на основании информации о присутствии пользователя. Приложение “Статус” опирается только на информацию о присутствии локального пользователя, в то время как приложение “Контакты” также смотрит на статусы других пользователей (информация о которых закреплена за кнопками быстрого набора).

Контакты без статуса присутствия могут быть загружены локально в телефон владельцем этого телефонв, однако это не рекомендуется. Предпочтительно использовать сконфигурированный администратором xml-файл для унификации.

Начиная с версии DPMA 1.3 телефоны Digium поддерживают возможность переноса локально добавленных пользователем контактов на сервер Asterisk. Для активации данной возможности опция “editable” должна иметь значение 1 и контакт должен иметь уникальный идентификатор.

Хотя и можно добавить контакты на сервер с телефона, контакты, сформированные на сервере, не редактируются с телефона и не удаляются из памяти телефона. Таким образом, Digium намекает, что лучше все-таки воздержатья от возможности добавления контактов с телефона во избежании потерь телефонной книги…

Загрузка контакт-листа

Файлы контактов, которые должен загрузить телефон, определяются в модуле DPMA или в основном XML-файле провиженинга телефона.

Параметр contact

Как сказано выше, может быть задано несколько полей contact, которые являются подэлементами элемента

Параметр Rapid Dial Keys

BLF задается параметром blf_contact_group (обязательное поле, BLF-кнопкам будут присвоены значения в соответствии с порядком их объявления в XML-файле.)

Структура файла контактов

Ввиду того, что контакты и blf используют синтаксис XML, очень важно верно построить структуру контакт-листа, так как телефоны Digium не имеют встроенного валидатора XML и вы не увидите никакого сообщения об ошибке.

Базовая структура файла контактов выглядит следующим образом:

<phonebooks>
    <contacts>
        <contact>
            <emails>
                <email />
            </emails>
            <actions>
                <action>
                    <headers>
                        <header />
                    </headers>
                </action>
            </actions>
        </contact>
    </contacts>
</phonebooks>
Секция Contacts

group_name строка Наименование группы контактов
editable логический Определяет возможность изменения контатков с телефона
id строка Уникальный идентификатор группы
Contact: дочерний элемент секции contacts

server_uuid строка Опционально. Уникальное имя сервера, к которому обращается телефон. При использовании
DPMA имя должно быть таким же, как и ф конфиге res_digium_phone.conf.
id строка Уникальный идентификатор контакта, используется для blf.
prefix строка Префикс контакта, например: "Mr."
first_name строка Имя контакта
second_name строка Второе имя контакта(не актуально для России, разве что писать в данном параметре отчество)
last_name строка Фамилия контакта
suffix строка Суффикс контакта, например: "Jr."
contact_type sip, special Тип контакта. Контакты с типом “Special” могут посылать телефону только свой
статус присутствия
organization строка Название организации контакта
job_title строка Должность контакта
location строка Местоположение контакта
notes строка Доп. Сведения о контакте
account_id строка Если контакт подписан на т ом же SIP-сервере, можно указать его id из sip.conf
subscribe_to SIP URI SIP URI

Не оставляйте параметры “first_name” и ”last_name” пустыми во избежание некорректного отображения контакт-листа
При использовании DPMA необходимо использовать параметр auto_hint для корректной blf-индикации в формате «auto_hint_,» например: subscribe_to=«auto_hint_1234»

В случае использования DPMA пропистывать хинты в диалплане не обязательно
Если не используется DPMA параметр subscribe_to выглядит следующим образом: subscribe_to=«sip:500@my.pbx.com»

Также необходимо прописать хинты в диалплане:

exten => 1234,hint,SIP/mypeer
exten => 1234,1,NoOp()
exten => 1234,n,Dial(SIP/mypeer,20)

В любом случае, используете вы DPMA или нет, параметр callcounter в sip.conf необходим

Секция Emails
Email: дочерний элемент emails

address строка e-mail контакта
label строка Текстовое описание e-mail контакта
primary логический Определяет основной e-mail контакта
Секция Actions
Action: дочерний элемент actions

id строка Обязательно. Уникальный идентификатор для действия, используется для blf. Один id с
зарезирвированным названием "primary" должен быть определен у каждого контакта.
dial строка Опционально. Номер, который должен набрать телефон
dial_prefix строка Опционально. Префикс номера, который должен подставить телефон перед набором номера
app_id строка Опционально. Уникальный идентификатор для приложения (как для стандартного, так и для вашего собственного)
label строка Обязательно. mandatory, Подходящий идентификатор для номера из контакт листа. Например:
“Мобильный” или имя SIP-экстеншена.
name строка Обязательно, название для action.
Headers: дочерний элемент actions

Header: дочерний элемент headers

key строка Например ,X-Digium-Call-Feature"
value строка Например, feature_send_to_vm, также могут быть использованы специальные символы (Wildcard Variables)
Wildcard Variables (специальные символы)

%_ACCOUNT_USERNAME_%
%_ACCOUNT_SERVER_%
%_ACCOUNT_PORT_%

Display Rules (правила отображения)

Начиная с версии ПО 1.4 приложение Контакты работает во взаимодействии с функцией BLF. Действия, определенные для контакта, по умолчанию, отображаются при просмотре информации о контакте.

Пример XML-файла Display Rules

<display_rules>
    <display_rule id="1" action_id="monitor" show="0"/>
    <display_rule id="2" action_id="monitor" target_status="on_the_phone" show="1"/>
    <display_rule id="3" action_id="intercom" show="0"/>
    <display_rule id="4" action_id="intercom" target_status="idle" show="1"/>
    <display_rule id="5" action_id="dial_vm" phone_state="idle" show="0"/>
    <display_rule id="6" action_id="transfer_vm" show="0"/>
    <display_rule id="7" action_id="transfer_vm" phone_state="transfer" show="1"/>
</display_rules>
id Уникальный id Идентификатор, например 0, 1, 2 и так далее.
action_id Определенное действие Например, monitor, intercom, dial_vm, transfer_vm
phone_state idle, hold, transfer, incoming/transfer, incoming,
connected, dialing, calling, failed
Состояние телефона для которого выполняется действие
target_status unknown, idle, on_hold, ringing, on_the_phone Опционально. Статус, при котором будет выполняться действие
show логический Показывать/не показывать действие при определенных статусах
Ниже приведен листинг моего файла контактов:

<?xml version="1.0"?> 
<phonebooks> 
    <contacts group_name="office-contacts" editable="0" id="0"> 

 <contact 
   first_name="Digium D50" 
   last_name="Line 1" 
   organization="TEST" 
   contact_type="sip" 
   account_id="000" 
   id="000" 
   subscribe_to="000" 
                         > 
 <numbers> 
   <number dial="000" label="Extension" primary="1" /> 
     </numbers> 
 <actions> 
  <action id="primary" dial="000" dial_prefix="" label="Extension" name="Office" /> 
  </action> 
  </actions> 
 </contact> 

<contact 
  first_name="Digium D50" 
  last_name="Line 2" 
  organization="TEST" 
  contact_type="sip" 
  account_id="111" 
  id="111" 
  subscribe_to="111" 
                        > 
<numbers> 
   <number dial="111" label="Extension" primary="1" /> 
</numbers> 
<actions> 
<action id="primary" dial="111" dial_prefix="" label="Extension" name="Office" /> 
</action> 
</actions> 
</contact> 

<contact 
 first_name="Digium D50" 
 last_name="Line 3" 
 organization="TEST" 
 contact_type="sip" 
 account_id="222" 
 id="222" 
 subscribe_to="222" 
                   > 
 <numbers> 
 <number dial="222" label="Extension" primary="1" /> 
 </numbers> 
 <actions> 
 <action id="primary" dial="222" dial_prefix="" label="Extension" name="Office" /> 
 </action> 
 </actions> 
</contact> 

<contact 
 first_name="Digium D50" 
 last_name="Line 4" 
 organization="TEST" 
 contact_type="sip" 
 account_id="333" 
 id="333" 
 subscribe_to="333" 
                   > 
 <numbers> 
  <number dial="333" label="Extension" primary="1" /> 
  </numbers> 
  <actions> 
  <action id="primary" dial="333" dial_prefix="" label="Extension" name="Office" /> 
   </action> 
  </actions> 
</contact> 

 <contact 
   first_name="Digium D70" 
   last_name="Line 1" 
   organization="TEST" 
   contact_type="sip" 
   account_id="444" 
   id="444" 
   subscribe_to="444" 
                     > 
 <numbers> 
<number dial="444" label="Extension" primary="1" /> 
</numbers> 
 <actions> 
 <action id="primary" dial="444" dial_prefix="" label="Extension" name="Office" /> 
</action> 
 </actions> 
 </contact> 

<contact 
  first_name="Digium D70" 
  last_name="Line 2" 
  organization="TEST" 
  contact_type="sip" 
  account_id="555" 
  id="555" 
 subscribe_to="555" 
                   > 
<numbers> 
 <number dial="555" label="Extension" primary="1" /> 
 </numbers> 
 <actions> 
<action id="primary" dial="555" dial_prefix="" label="Extension" name="Office" /> 
</action> 
</actions> 
</contact> 

  <contact 
     first_name="Digium D70" 
     last_name="Line 3" 
     organization="TEST" 
     contact_type="sip" 
     account_id="666" 
     id="666" 
     subscribe_to="666" 
                       > 
      <numbers> 
      <number dial="666" label="Extension" primary="1" /> 
      </numbers> 
      <actions> 
      <action id="primary" dial="666" dial_prefix="" label="Extension" name="Office" /> 
       </action> 
      </actions> 
     </contact> 
    
          <contact 
          first_name="Digium D70" 
          last_name="Line 4" 
          organization="TEST" 
          contact_type="sip" 
          account_id="777" 
          id="777" 
          subscribe_to="777" 
      > 
        <numbers> 
                <number dial="777" label="Extension" primary="1" /> 
        </numbers> 
        <actions> 
                <action id="primary" dial="777" dial_prefix="" label="Extension" name="Office" /> 
                </action> 
        </actions> 
      </contact> 
    
      <contact 
          first_name="Digium D70" 
          last_name="Line 5" 
          organization="TEST" 
          contact_type="sip" 
          account_id="888" 
          id="888" 
          subscribe_to="888" 
      > 
        <numbers> 
                <number dial="888" label="Extension" primary="1" /> 
        </numbers> 
        <actions> 
                <action id="primary" dial="888" dial_prefix="" label="Extension" name="Office" /> 
               </action> 
        </actions> 
      </contact> 

      <contact 
          first_name="Linphone" 
          last_name="" 
          organization="TEST" 
          contact_type="sip" 
          account_id="999" 
          id="999" 
          subscribe_to="999" 
      > 
        <numbers> 
                <number dial="999" label="Extension" primary="1" /> 
        </numbers> 
        <actions> 
                <action id="primary" dial="999" dial_prefix="" label="Extension" name="Office" /> 
               </action> 
        </actions> 
      </contact> 
   </contacts> 
</phonebooks>
Структура файла smart blf

Smart BLF описывает поведение клавиш быстрого набора (начиная с версии прошивки 1.4). BLF определяет позицию кнопки быстрого набора, позволяет задавать фиксированное расположение на страницах (актуально для D70), поведение кнопки быстрого набора, действия при коротком и продолжительном нажатии, а также специальный рингтон контакта. Правила поведения кнопок быстрого набора конфигурируются в отдельном xml-файле, получаемом по http.

Ввиду того, что контакты и blf используют синтаксис xml, очень важно верно построить структуру контакт-листа, так как телефоны Digium не имеют встроенного валидатора XML и вы не увидите никакого сообщения об ошибке.

Базовая структура файла blf выглядет следующим образом:
<smart_blf>
    <blf_items>
        <blf_item>
            <behaviors>
                <behavior />
            </behaviors>
            <indicators>
                <indicator />
            </indicators>
        </blf_item>
    </blf_items>
</smart_blf>
Более подробный пример конфига:

<smart_blf>
    <blf_items>
        <blf_item location="side" index="0" paging="1" contact_id="101">
            <behaviors>
                <behavior phone_state="idle" target_status="on_the_phone" press_action="call_vm" press_function="dial" />
                <behavior phone_state="idle" target_status="idle" press_action="regular_dial" press_function="dial" />
                <behavior phone_state="idle" target_status="idle" long_press_action="anintercom" long_press_function="dial" />
            </behaviors>
            <indicators>
                <indicator target_status="idle" ring="0" ringtone_id="Digium" led_color="green" led_state="on" />
                <indicator target_status="ringing" ring="1" ringtone_id="Techno" led_color="red" led_state="fast" />
            </indicators>
        </blf_item>
    </blf_items>
 </smart_blf>
Элемент BLF Item

location main, side Определяет местоположение кнопок быстрого набора:
на главной панели (клавиши линий) или на боковой панели.
Для D40 возможно только значение “main” ввиду отсутствия боковой панели.
Для D70 возможно использования одинаковых индексов, которые будут отображаться на разных страницах панели.
Если расположение “main”, то index начинается с 1, т.к. 0 по умолчанию
используется для основной линии.
index целочисленный Положение кнопки быстрого набора, начиная с “0”
paging Логический, 0, 1 По умолчанию 1. Если 0, то на разных страницах книги будет статично отображаться
один и тот же номер.
contact_id строка Соответствующее значение из файла контактов параметра "id"
app_id строка Либо название стандартного приложения
(contacts, voicemail, parking, status, queues)
либо идентификатор вашего собственного загруженного в телефон приложения.
Используется вместо contact_id, если на кнопку быстрого набора настроен вызов приложения.
blank логический, 0,1 Позволяет оставить кнопку быстрого набора не настроенной и перейти
к конфигурации следующей
Behaviors: дочерний элемент blf_item
Behavior: дочерний элемент behaviors

Параметр behavior существует для определения действия по нажатию клавиши быстрого набора. Для каждой кнопки возможно несколько моделей поведения. В телефоне будут упорядочены по списку их объявления.

phone_state Состояние телефона, соответствующе состоянию из секции phone state Определяет состояние телефона
target_status unknown, idle, on_hold, ringing, on_the_phone Определяет статус телефона
press_action id действия Определяет id действия по нажатию кнопки.
press_function dial, info, show_app, transfer, send_dtmf, none Определяет действие по нажатию кнопки
long_press_action An action id from the loaded contacts file Определяет id действия по нажатию кнопки,
длящемся более 2 секунд
long_press_function dial, info, show_app, transfer, send_dtmf, none Определяет действие по нажатию кнопки,
длящемся более 2 секунд
Phone States

Есть несколько валидных состояний телефона, список приведен ниже:

idle Никаких звонков в данный момент с телефона не производится
hold Звонок на удержании
hold/transfer Звонок на удержании и телефон в состоянии трансфера, например пользователь
ответил на звонок, а затем нажал кнопку “Transfer“ или нажал “Hold” вслед за “Transfer”.
hold/preconference Звонок на удержании, пользователь нажал клавишу конференции
hold/conference Телефон в режиме конференции, пользователь нажал клавишу удержания вызова
incoming На телефон поступил вызов, звонок находится в активном поле, но звонок еще не отвечен.
incoming/transfer На телефон поступил входящий вызов, пользователь нажал, пользователь нажал кнопку
“transfer” перед тем, как ответить на вызов
connected Ведется разговор, никаких действий более не совершается
connected/conference Ведется разговор в конференции
calling Совершается исходящий вызов, на том конце еще не подняли трубку
dial Снята трубка, пользователь собирается ввести номер, но еще ни одной цифры не было набрано
dialing Снята трубка, пользователь набирает цифры
failed Телефон получил ответ от сервера, что звонок невозможен из-за ошибок
all Любое состояние
Indicators: дочерний элемент blf_item
Indicator: дочерний элемент indicators

target_status unknown, idle, on_hold, ringing, on_the_phone Статус наблюдаемого телефона
ring Логический Если “true”, то при совпадении заданых условий ваш телефон будет звонить
ringtone_id Alarm, Chimes, Digium, GuitarStrum, Jingle, Office2, Office,
RotaryPhone, SteelDrum, Techno, Theme,
Tweedle, Twinkle, Vibe, or one of ids from a custom-loaded ringtone
Рингтон
led_color amber, green, red Определяет цвет диода на кнопке быстрого набора
led_state off, on, slow, fast Определяет поведение диода на кнопке быстрого набора
(выключен, включен, медленно/быстро мигает)
Ниже приведен листинг моего файла Smart BLF

<?xml version="1.0"?> 
<config> 
<smart_blf> 
    <blf_items> 
 <blf_item location="side" index="0" paging="1" contact_id="000"> 
        <behaviors> 
          <behavior phone_state="idle" target_status="on_the_phone" press_action="call_vm" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" press_action="regular_dial" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" long_press_action="anintercom" long_press_function="dial" /> 
        </behaviors> 
        <indicators> 
          <indicator target_status="idle" ring="0" ringtone_id="Digium" led_color="green" led_state="on" /> 
          <indicator target_status="ringing" ring="0" ringtone_id="Techno" led_color="red" led_state="fast" /> 
          <indicator target_status="on_the_phone" ring="0" ringtone_id="Techno" led_color="red" led_state="on" /> 
        </indicators> 
    </blf_item> 

<blf_item location="side" index="1" paging="1" contact_id="111"> 
        <behaviors> 
          <behavior phone_state="idle" target_status="on_the_phone" press_action="call_vm" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" press_action="regular_dial" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" long_press_action="anintercom" long_press_function="dial" /> 
        </behaviors> 
        <indicators> 
          <indicator target_status="idle" ring="0" ringtone_id="Digium" led_color="green" led_state="on" /> 
          <indicator target_status="ringing" ring="0" ringtone_id="Techno" led_color="red" led_state="fast" /> 
          <indicator target_status="on_the_phone" ring="0" ringtone_id="Techno" led_color="red" led_state="on" /> 
        </indicators> 
    </blf_item> 

<blf_item location="side" index="2" paging="1" contact_id="222"> 
        <behaviors> 
          <behavior phone_state="idle" target_status="on_the_phone" press_action="call_vm" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" press_action="regular_dial" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" long_press_action="anintercom" long_press_function="dial" /> 
        </behaviors> 
        <indicators> 
          <indicator target_status="idle" ring="0" ringtone_id="Digium" led_color="green" led_state="on" /> 
          <indicator target_status="ringing" ring="0" ringtone_id="Techno" led_color="red" led_state="fast" /> 
          <indicator target_status="on_the_phone" ring="0" ringtone_id="Techno" led_color="red" led_state="on" /> 
        </indicators> 
    </blf_item> 

<blf_item location="side" index="3" paging="1" contact_id="333"> 
        <behaviors> 
          <behavior phone_state="idle" target_status="on_the_phone" press_action="call_vm" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" press_action="regular_dial" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" long_press_action="anintercom" long_press_function="dial" /> 
        </behaviors> 
        <indicators> 
          <indicator target_status="idle" ring="0" ringtone_id="Digium" led_color="green" led_state="on" /> 
          <indicator target_status="ringing" ring="0" ringtone_id="Techno" led_color="red" led_state="fast" /> 
          <indicator target_status="on_the_phone" ring="0" ringtone_id="Techno" led_color="red" led_state="on" /> 
        </indicators> 
    </blf_item> 

<blf_item location="side" index="4" paging="1" contact_id="444"> 
        <behaviors> 
          <behavior phone_state="idle" target_status="on_the_phone" press_action="call_vm" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" press_action="regular_dial" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" long_press_action="anintercom" long_press_function="dial" /> 
        </behaviors> 
        <indicators> 
          <indicator target_status="idle" ring="0" ringtone_id="Digium" led_color="green" led_state="on" /> 
          <indicator target_status="ringing" ring="0" ringtone_id="Techno" led_color="red" led_state="fast" /> 
          <indicator target_status="on_the_phone" ring="0" ringtone_id="Techno" led_color="red" led_state="on" /> 
        </indicators> 
    </blf_item> 

<blf_item location="side" index="5" paging="1" contact_id="555"> 
        <behaviors> 
          <behavior phone_state="idle" target_status="on_the_phone" press_action="call_vm" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" press_action="regular_dial" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" long_press_action="anintercom" long_press_function="dial" /> 
        </behaviors> 
        <indicators> 
          <indicator target_status="idle" ring="0" ringtone_id="Digium" led_color="green" led_state="on" /> 
          <indicator target_status="ringing" ring="0" ringtone_id="Techno" led_color="red" led_state="fast" /> 
          <indicator target_status="on_the_phone" ring="0" ringtone_id="Techno" led_color="red" led_state="on" /> 
        </indicators> 
    </blf_item> 

<blf_item location="side" index="6" paging="1" contact_id="666"> 
        <behaviors> 
          <behavior phone_state="idle" target_status="on_the_phone" press_action="call_vm" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" press_action="regular_dial" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" long_press_action="anintercom" long_press_function="dial" /> 
        </behaviors> 
        <indicators> 
          <indicator target_status="idle" ring="0" ringtone_id="Digium" led_color="green" led_state="on" /> 
          <indicator target_status="ringing" ring="0" ringtone_id="Techno" led_color="red" led_state="fast" /> 
          <indicator target_status="on_the_phone" ring="0" ringtone_id="Techno" led_color="red" led_state="on" /> 
        </indicators> 
    </blf_item> 

<blf_item location="side" index="7" paging="1" contact_id="777"> 
        <behaviors> 
          <behavior phone_state="idle" target_status="on_the_phone" press_action="call_vm" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" press_action="regular_dial" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" long_press_action="anintercom" long_press_function="dial" /> 
        </behaviors> 
        <indicators> 
          <indicator target_status="idle" ring="0" ringtone_id="Digium" led_color="green" led_state="on" /> 
          <indicator target_status="ringing" ring="0" ringtone_id="Techno" led_color="red" led_state="fast" /> 
          <indicator target_status="on_the_phone" ring="0" ringtone_id="Techno" led_color="red" led_state="on" /> 
        </indicators> 
</blf_item> 

    <blf_item location="side" index="8" paging="1" contact_id="888"> 
      <behaviors> 
        <behavior phone_state="idle" target_status="on_the_phone" press_action="call_vm" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" press_action="regular_dial" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" long_press_action="anintercom" long_press_function="dial" /> 
      </behaviors> 
        <indicators> 
          <indicator target_status="idle" ring="0" ringtone_id="Digium" led_color="green" led_state="on" /> 
          <indicator target_status="ringing" ring="0" ringtone_id="Techno" led_color="red" led_state="fast" /> 
          <indicator target_status="on_the_phone" ring="0" ringtone_id="Techno" led_color="red" led_state="on" /> 
        </indicators> 
    
</blf_item> 
    <blf_item location="side" index="9" paging="1" contact_id="999"> 
      <behaviors> 
        <behavior phone_state="idle" target_status="on_the_phone" press_action="call_vm" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" press_action="regular_dial" press_function="dial" /> 
          <behavior phone_state="idle" target_status="idle" long_press_action="anintercom" long_press_function="dial" /> 
      </behaviors> 
      <indicators> 
       <indicator target_status="idle" ring="0" ringtone_id="Digium" led_color="green" led_state="on" /> 
       <indicator target_status="ringing" ring="0" ringtone_id="Techno" led_color="red" led_state="fast" /> 
       <indicator target_status="on_the_phone" ring="0" ringtone_id="Techno" led_color="red" led_state="on" /> 
       </indicators> 
  </blf_item> 
 </blf_items> 
</smart_blf> 
</config>

Подробное описание всех опций и правила построения xml-файлов с контактами и smart blf можно найти на wiki asterisk.

Как было описано выше, файлы с поведением кнопок быстрого набора загружаются по http.

Я выбрал для этих целей apache2.

Тестирование проводилось на Centos 6.3. Пример установки:

yum install httpd

Заходим в файл конфигурации:

vim /etc/httpd/conf/httpd.conf

Ставим в параметре “ServerName” ip-адрес или доменное имя сервера, с которого телефон будет получать конфиги. В моем случае: ServerName 192.168.1.253
(не забываем снять коммент в начале строки).

Чтобы проверить, есть ли запросы от Digium-телефонов на получение Xml-файлов воспользуемся командой:

tail -f /var/log/httpd/*

Если телефон обращается за конфигом к apache, то в консоли мы увидим что-то типа:

192.168.1.143 - - [29/Jan/2014:18:39:15 +0400] "GET /blf_test.xml HTTP/1.1" 200 8564 "-" "Digium-D50/1_4_0_0_57389"
192.168.1.140 - - [29/Jan/2014:18:39:37 +0400] "GET /blf_test.xml HTTP/1.1" 200 8564 "-" "Digium-D70/1_4_0_0_57389"

Если все корректно настроено, то после перезагрузки ядра Asterisk ваш Digium-телефон приветливо заморгает зелеными и красными диодами:)

Тестирование телефонов Digium с Asterisk и настройка Smart BLF

Тестирование телефонов Digium с Asterisk и настройка Smart BLF

Тестирование телефонов Digium с Asterisk и настройка Smart BLF

Тестирование телефонов Digium с Asterisk и настройка Smart BLF

А ребята из Digium для того, чтобы разнообразить серые будни иногда делают такие вещи:)

Резюмируя все выше написанное, хотелось бы отметить, что первоначальная настройка может показаться довольно сложной, однако если у админа парк из 20 и более телефонов, то такой вариант провиженинга значительно облегчит работу по настройке телефонов. Богатый выбор опций, гибкая кастомизация, использование стандартных сервисов для автоматической настройки, плотная интеграция с asterisk и основанными на нем дистрибутивами делают телефоны Digium, на наш взгляд, лучшим решением на рынке IP-телефонии и унифицированных коммуникаций.

Автор: j3st3r

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js