Приехала новая авая с новыми телефонами, какой же это шлак) Дизайнеры(как внешнего вида так и самой логики атс) Аваи наверное теперь работают таксидермистами, и на самом деле этот лис их рук дело. Дык вот, настройка аваефонов производиться прямо с атски, и разгорелся у нас с коллегой спор кто быстрее введет в эксплуатацию АТС с провиженом итд(короч одинаковым функционалом) (он на авае я на Астериске). Из неописанного мной была настройка провижена на цыскофонах, пора исправлять).
Provision – (англ.) обеспечение, предоставление; снабжение – Достал телефон с коробки, воткнул – работает.
- Процесс загрузки телефона
- Формат файлов
1. Процесс загрузки:
- Тестируем питание(PoE или от адаптера)
- POST(тестируем железо)
- CDP, VTP и DHCP
- Получаем по DHCP(IP, opt: 66(TFTP), 150(Cisco current usage), 159(Server’s ip-address https), 160(Server’s name https))
- Получив адрес сервера, откуда забрать конфиг, наш телефончик делает запрос конфига /spa$PSN.сfg
- Сервер отдает конфиг /spa$PSN.сfg(например для модели SPA504G файл будет называться /spa504G.cfg)
- Телефон получив этот конфиг, смотрит какой конфиг(xml) ему грузить дальше, и запрашивает новый конфиг
- Сервер отдает xml файл с настройками
- Телефон применяет настройки и перезагружается
Настройки телефонов можно сгружать и по http с использованием php скрипта, для этого опцию 66 приводим к виду(на микротике)
/ip dhcp-server option add code=66 name=tftp value="'http://10.199.133.9/cisco.php\?mac=\$MA&sn=\$SN'" /ip dhcp-server network set dhcp-option=tftp 0
2. Телефон поддерживает 2 формата файлов: открытый с xml подобным синтаксисом(можем сжать gzipом и зашифровать AES256), и плейн текст(параметр-значение), который потом с помощью SPC мы конвертируем в бинарный файл (не нравится мне так)
Для сжатия под Никсами делаем gzip profile.xml получаем gz файлик, телефончик его тоже радостно примет
После этого можем зашифровать файл с помощью openssl и определенным ключем, передать по https ключ в телефон, потом по http забрать зашифрованный конфиг.
openssl enc –e –aes-256-cbc –k SecretPhrase1234 –in profile.xml.gz –out profile.cfg
Учимся делать простой rsync
Создаем файл basic.txt
следующего содержания:
<flat-profile>
<GPP_A> 12345678
</GPP_A>
</flat-profile>
в браузере делаем ресинк
http://192.168.1.100/admin/resync?tftp://192.168.1.200/basic.txt
Смотрим параметр, и о чудо он поменялся))
Ресинк также доступен и через sip notify.
Пример Файла /spa$PSN.сfg
<flat-profile>
<Resync_On_Reset>Yes</Resync_On_Reset>
<Profile_Rule>/525/spa$MA.xml</Profile_Rule>
</flat-profile>
Небольшие пояснения к синтаксису файла:
Телефон понимает только то что находиться между flat-profile
Названия параметров заключены в угловые скобки
Названия не должны содержать пробелов и спец символов(заменяем на _)
Названия параметров должны быть уникальны
Для параметров которые содержат порядковый номер, например номер линии параметр записывается так: Dial_Plan[1]
Теги обязательно должны закрываться
Названия параметров чувствительны к регистру
Неправильно написанные(не распознанные) параметры игнорируются
Допускается только закрывающийся тег <Profile_Rule_B />
Для предотвращения перезаписи параметров, можно использовать такую конструкцию
<Speed_Dial_2_2_ ua=”rw”/>
<Speed_Dial_3_2_ ua=”rw”/>
Допускается установка пустого значения(между тегами не указываем ничего)
Допускается использование комментариев в xml стиле
XML хедер игнорируется
Можно заменять спец символы на xml последовательности
Поддерживаются только ASCII коды
& (ampersand) &
< (less than) <
> (greater than) >
’ (apostrophe) '
” (double quote) "
Для предотвращения шаловливых действия пользователя, используется атрибут ua с параметрами:
• na—no access
• ro—read-only
• rw—read/write
Пример:
<SIP_TOS_DiffServ_Value_1_ ua=”na”/>
GPP (general purpose parameters) используются при обращении к конкретным серверам провижена, могут содержать
• Encryption keys
• URLs
• Multi-stage provisioning status information
• Post request templates
• Parameter name alias maps
• Partial string values, eventually combined into complete parameter values
GPP_SA – GPP_SD используются как аргументы ключей URL параметров
Например можно использовать параметры заданные в GPP для указания папки:
tftp://server.local/cisco/$B/$MA.cfg
Для того чтобы посмотреть опции доступные для конфигурирования достаточно скачать SPC под Ваш телефон и версию прошивки, распаковать и выполнить spcexecuteable –sample-xml outputfile.name
читаем тот самый outputfile.name и черпаем полезную информацию)
Собственно, если что пропустил готов рассмотреть.
Ниже приведены файлы для всех телефончиков и для конкретного аппарата)
Пример общего конфига для всего семейства: spa525G2.cfg
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <flat-profile> <!-- System Configuration --> <Enable_Web_Server ua="na">Yes</Enable_Web_Server> <Web_Server_Port ua="na">80</Web_Server_Port> <Enable_Web_Admin_Access ua="na">Yes</Enable_Web_Admin_Access> <Admin_Password ua="na">sdtu</Admin_Password> <User_Password ua="rw"></User_Password> <SPA525-protocol ua="na">SIP</SPA525-protocol> <!-- options: SIP/SCCP --> <SPA525-auto-detect-sccp ua="na">No</SPA525-auto-detect-sccp> <Phone-UI-user-mode ua="na">No</Phone-UI-user-mode> <SPA525-readonly ua="na">No</SPA525-readonly> <!-- Configuration Profile --> <Resync_On_Reset>Yes</Resync_On_Reset> <Upgrade_Enable ua="na">Yes</Upgrade_Enable> <Upgrade_Rule>( < 7.5.2b )? tftp://10.199.36.199/525/spa525g-7-5-2b-bt.bin | tftp://10.199.36.199/525/spa525g-7-5-5-bt.bin </Upgrade_Rule> <Profile_Rule_B>/525/spa$MA.cfg</Profile_Rule_B> <Transport_Protocol ua="na">tftp</Transport_Protocol> <!-- options: none/tftp/http/https --> <!-- VLAN Settings --> <Enable_VLAN ua="rw">No</Enable_VLAN> <VLAN_ID ua="rw">602</VLAN_ID> <PC_Port_VLAN_Highest_Priority ua="na">1</PC_Port_VLAN_Highest_Priority> <!-- options: 0/1/2/3/4/5/6/7/No Limit --> <Enable_PC_Port_VLAN_Tagging ua="na">No</Enable_PC_Port_VLAN_Tagging> <PC_Port_VLAN_ID ua="na">601</PC_Port_VLAN_ID> <Enable_CDP ua="na">No</Enable_CDP> <Enable_LLDP-MED ua="na">No</Enable_LLDP-MED> <Network_Startup_Delay ua="na">1</Network_Startup_Delay> <!-- Language --> <Dictionary_Server_Script ua="na">serv=tftp://10.199.39.200/525/; d0=English; x0=spa525_en_v754.xml; d1=Russian; x1=spa525_ru_v754.xml;</Dictionary_Server_Script> <Language_Selection ua="na">Russian</Language_Selection> <Locale ua="na">ru-RU</Locale> <!-- LOG--> <Syslog_Server ua="na">10.199.33.106</Syslog_Server> <Debug_Server ua="na">10.199.33.106</Debug_Server> <Debug_Level ua="na">3</Debug_Level> <!-- Time --> <Time_Zone>GMT+02:00</Time_Zone> <Time_Format ua="na">24hr</Time_Format> <Date_Format ua="na">day/month</Date_Format> <Ignore_DHCP_Time_Offset ua="na">Yes</Ignore_DHCP_Time_Offset> <Daylight_Saving_Time_Rule ua="na">start=3/-1/7/3;end=10/-1/7/3;save=1</Daylight_Saving_Time_Rule> <Daylight_Saving_Time_Enable ua="na">Yes</Daylight_Saving_Time_Enable> <!-- SCREEN --> <Screen_Saver_Enable ua="rw">Yes</Screen_Saver_Enable> <Screen_Saver_Type ua="rw">Clock</Screen_Saver_Type> <!-- options: Black Background/Gray Background/Black/Gray Rotation/Picture Rotation/Digital Frame/Download Picture/Clock --> <Screen_Saver_Trigger_Time ua="rw">300</Screen_Saver_Trigger_Time> <Screen_Saver_Refresh_Time ua="rw">10</Screen_Saver_Refresh_Time> <!-- DIrectory --> <XML_Directory_Service_Name ua="na">CompanyNAMEEEE</XML_Directory_Service_Name> <XML_Directory_Service_URL ua="na">http://10.199.39.200/Directory.xml</XML_Directory_Service_URL> <!-- Programmable Softkeys --> <Programmable_Softkey_Enable ua="na">Yes</Programmable_Softkey_Enable> <Idle_Key_List ua="na">redial|1;dir|2;psk1|3;cfwd|4;dnd;</Idle_Key_List> <Missed_Call_Key_List ua="na">lcr|1;miss|4;</Missed_Call_Key_List> <Off_Hook_Key_List ua="na">redial;lcr;dir;option;</Off_Hook_Key_List> <Dialing_Input_Key_List ua="na">option|1;dial|2;delchr|3;cancel|4;</Dialing_Input_Key_List> <Progressing_Key_List ua="na">endcall|2;</Progressing_Key_List> <Connected_Key_List ua="na">hold|1;endcall|2;conf|3;xfer|4;crdstart;crdstop;bxfer;</Connected_Key_List> <Start-Xfer_Key_List ua="na">hold|1;endcall|2;xfer|4;crdstart;crdstop;</Start-Xfer_Key_List> <Start-Conf_Key_List ua="na">hold|1;endcall|2;conf|3;crdstart;crdstop;</Start-Conf_Key_List> <Conferencing_Key_List ua="na">hold|1;endcall|2;join|4;crdstart;crdstop;</Conferencing_Key_List> <Releasing_Key_List ua="na">endcall|2;</Releasing_Key_List> <Hold_Key_List ua="na">resume|1;endcall|2;newcall|3;redial;dir;cfwd;dnd;crdstart;crdstop;</Hold_Key_List> <Ringing_Key_List ua="na">answer|1;ignore|2;</Ringing_Key_List> <Shared_Active_Key_List ua="na">newcall|1;barge|2;cfwd|3;dnd|4;crdstart;crdstop;</Shared_Active_Key_List> <Shared_Held_Key_List ua="na">resume|1;barge|2;cfwd|3;dnd|4;crdstart;crdstop;</Shared_Held_Key_List> <PSK_1 ua="na">fnc=sd;ext=7002@$PROXY;vid=1;nme=2Me</PSK_1> <!-- Line1 to all --> <SIP_TOS_DiffServ_Value_1_ ua="na">0x68</SIP_TOS_DiffServ_Value_1_> <SIP_CoS_Value_1_ ua="na">3</SIP_CoS_Value_1_> <RTP_TOS_DiffServ_Value_1_ ua="na">0xb8</RTP_TOS_DiffServ_Value_1_> <RTP_CoS_Value_1_ ua="na">5</RTP_CoS_Value_1_> <Proxy_1_ ua="na">10.199.10.254</Proxy_1_> <Register_1_ ua="na">Yes</Register_1_> <Preferred_Codec_1_ ua="na">G729a</Preferred_Codec_1_> <Use_Pref_Codec_Only_1_ ua="na">No</Use_Pref_Codec_Only_1_> <Second_Preferred_Codec_1_ ua="na">G711a</Second_Preferred_Codec_1_> </flat-profile>
Пример конфига для конкретного телефончика:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <flat-profile> <Station_Name ua="na">ph640</Station_Name> <Station_Display_Name ua="na">BOS</Station_Display_Name> <!--Line 1 --> <Display_Name_1_ ua="na">bos_main</Display_Name_1_> <User_ID_1_ ua="na">1640</User_ID_1_> <Password_1_ ua="na">supermegapassword))</Password_1_> <Use_Auth_ID_1_ ua="na">Yes</Use_Auth_ID_1_> <Auth_ID_1_ ua="na">1640</Auth_ID_1_> <!-- Line Key 4 --> <Extension_4_ ua="na">Disabled</Extension_4_> <!-- options: 1/2/3/4/5/Disabled --> <Short_Name_4_ ua="na">MVG</Short_Name_4_> <Share_Call_Appearance_4_ ua="na">private</Share_Call_Appearance_4_> <!-- options: private/shared --> <Extended_Function_4_ ua="na">fnc=sd;ext=256@$PROXY</Extended_Function_4_> </flat-profile>
Адресная книга(Взял отсюда: http://habrahabr.ru/post/214235/):
<?php //-------Данные MySQL $mysrv = 'localhost'; $mydb = 'asterisk'; $myuser = 'user'; $mypass = 'pass'; $table = 'sippeers'; $mysqli = new mysqli($mysrv,$myuser,$mypass,$mydb); if ($mysqli->connect_error) { die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error); } $mysqli->query("set names utf8"); $query = 'SELECT cid_number,callerid from `'.$table.'` ORDER BY `defaultuser` ASC'; $result=$mysqli->query($query); while ($row = $result->fetch_assoc()){ $phones[] = $row['cid_number']; $names[] = $row['callerid']; } $mysqli->close(); ?> <?xml version="1.0" encoding="utf-8" ?> <CiscoIPPhoneDirectory> <Title>Каталог</Title> <Prompt>Выберите номер</Prompt> <?php foreach($phones as $k=>$v){?> <DirectoryEntry> <Name><?php echo $names[$k]." - ".$v;?></Name> <Telephone><?php echo $v;?></Telephone> </DirectoryEntry> <?php } ?> </CiscoIPPhoneDirectory>