- PVSM.RU - https://www.pvsm.ru -
Однажды руководство одобрило эксперимент по внедрению IP телефонии в нашей конторе. Так как мой опыт в данной области был мизерным, задача пробудила во мне огромный интерес и я погрузился в изучение различных аспектов вопроса. По окончании погружения решил поделиться приобретенными знаниями — в надежде, что кому-то они пригодятся. Итак…
В качестве IP-АТС выбран и развернут Asterisk. Парк телефонов состоит из аппаратов Cisco 7906g, Panasonic UT-KX123B, Grandstream GXP1400 и Dlink DPH-150S(E)/F3, Yealink T19 и T21. Такой разброс обусловлен тем, что в рамках эксперимента было принято решение попробовать всего понемногу, чтобы составить своё мнение о соотношении цена/качество/удобство.
Максимально упростить и унифицировать процесс настройки новых аппаратов. Все телефоны должны быть синхронизированы по времени, иметь телефонную книгу, подгружаемую с сервера и предоставлять доступ к настройкам для администратора.
Решение этой задачи простое — реализовать автоматическую настройку телефонов, т.н. Provisioning. Собственно, о моей реализации этой замечательной функции и пойдет речь.
Для раздачи настроек телефонам я выбрал tftp как универсальный вариант, поддерживаемый всеми платформами, легкий в настройке и управлении.
Специфической настройки для tftp не потребовалось. Установил штатный tftpd и разместил все необходимые файлы в его корневой директории.
Файлы с настройками разместил по каталогам в соответствии с производителем телефона. Правда, аппарат от Cisco так и не полез в свою папку, пришлось хранить в корне.
Для того, чтобы указать телефонам местонахождение tftp-сервера, я воспользовался option-66. Кроме того, разделил их на отдельные классы по производителю. Каждый класс получил собственный сегмент адресов и индивидуальную папку для конфигурационных файлов. К слову, аппараты от D-link пришлось вычислять по MAC-адресам, так как информацию о производителе в dhcp-запросе они не предоставляют.
# Указываем необходимые опции option option-66 code 66 = text; class "panasonic" { match if substring (option vendor-class-identifier,0,9) = "Panasonic"; option option-66 "10.1.1.50/panasonic/"; } class "cisco" { match if substring (option vendor-class-identifier,0,36) = "Cisco Systems, Inc. IP Phone CP-7906"; option option-66 "10.1.1.50/cisco/"; } class "grandstream" { match if substring (option vendor-class-identifier,0,11) = "Grandstream"; option option-66 "10.1.1.50/grandstream/"; } class "dlink" { match if (binary-to-ascii (16,8,":",substring(hardware,1,4)) = "c8:d3:a3:8d") or (binary-to-ascii (16,8,":",substring(hardware,1,4)) = "90:94:e4:72"); option option-66 "10.1.1.50/dlink/"; } class "yealink" { match if substring (option vendor-class-identifier,0,7) = "Yealink"; option option-66 "10.1.1.50/yealink/"; }
Телефоны пришлось принудительно исключать из общего пула. Иначе они никак не хотели уходить в свой «лягушатник».
subnet 10.1.1.0 netmask 255.255.255.0 { option routers 10.1.1.1; pool { deny members of "cisco"; deny members of "panasonic"; deny members of "dlink"; range 10.1.1.230 10.1.1.240; } pool { allow members of "cisco"; range 10.1.1.65 10.1.1.69; } pool { allow members of "panasonic"; range 10.1.1.60 10.1.1.64; } pool { allow members of "dlink"; range 10.1.1.55 10.1.1.59; } }
После перезапуска всех вовлеченных служб телефоны уверенно направились за настройками на положенный им tftp-сервер. Осталось только их там разместить.
Эти аппараты достались мне в заводской упаковке. Пришлось перешивать, чтобы подружить с asterisk'ом. Но это отдельная история. В конкретном случае для настройки аппарата я, согласно инструкции, создал в корне tftp-сервера файл SEPAABBCCDDEEFF.cnf.xml. Где AABBCCDDEEFF — MAC-адрес аппарата.
Про настройку телефонов от Cisco было написано уже не раз, поэтому я просто оставлю рабочий файл с настройками.
<?xml version="1.0" encoding="UTF-8"?> <device xsi:type="axl:XIPPhone" ctiid="94"> <fullConfig>true</fullConfig> <deviceProtocol>SIP</deviceProtocol> <sshUserId>root</sshUserId> <sshPassword>ADMIN_PWD</sshPassword> <devicePool> <dateTimeSetting> <dateTemplate>D-M-Y</dateTemplate> <timeZone>Central Pacific Standard Time</timeZone> <ntps> <ntp> <name>10.1.1.4</name> <ntpMode>Unicast</ntpMode> </ntp> </ntps> </dateTimeSetting> <callManagerGroup> <members> <member priority="0"> <callManager> <name>10.1.1.50</name> <ports> <ethernetPhonePort>2000</ethernetPhonePort> <sipPort>5060</sipPort> <securedSipPort>5061</securedSipPort> </ports> <processNodeName>10.1.1.50</processNodeName> </callManager> </member> </members> </callManagerGroup> <srstInfo> <srstOption>Disable</srstOption> </srstInfo> <connectionMonitorDuration>120</connectionMonitorDuration> </devicePool> <sipProfile> <sipCallFeatures> <cnfJoinEnabled>true</cnfJoinEnabled> <callForwardURI>x-cisco-serviceuri-cfwdall</callForwardURI> <callPickupURI>x-cisco-serviceuri-pickup</callPickupURI> <callPickupListURI>x-cisco-serviceuri-opickup</callPickupListURI> <callPickupGroupURI>x-cisco-serviceuri-gpickup</callPickupGroupURI> <meetMeServiceURI>x-cisco-serviceuri-meetme</meetMeServiceURI> <abbreviatedDialURI>x-cisco-serviceuri-abbrdial</abbreviatedDialURI> <rfc2543Hold>false</rfc2543Hold> <callHoldRingback>2</callHoldRingback> <localCfwdEnable>true</localCfwdEnable> <semiAttendedTransfer>true</semiAttendedTransfer> <anonymousCallBlock>2</anonymousCallBlock> <callerIdBlocking>2</callerIdBlocking> <dndControl>0</dndControl> <remoteCcEnable>true</remoteCcEnable> <retainForwardInformation>false</retainForwardInformation> </sipCallFeatures> <sipStack> <sipInviteRetx>6</sipInviteRetx> <sipRetx>10</sipRetx> <timerInviteExpires>180</timerInviteExpires> <timerRegisterExpires>3600</timerRegisterExpires> <timerRegisterDelta>5</timerRegisterDelta> <timerKeepAliveExpires>120</timerKeepAliveExpires> <timerSubscribeExpires>120</timerSubscribeExpires> <timerSubscribeDelta>5</timerSubscribeDelta> <timerT1>500</timerT1> <timerT2>4000</timerT2> <maxRedirects>70</maxRedirects> <remotePartyID>true</remotePartyID> <userInfo>None</userInfo> </sipStack> <autoAnswerTimer>1</autoAnswerTimer> <autoAnswerAltBehavior>false</autoAnswerAltBehavior> <autoAnswerOverride>true</autoAnswerOverride> <transferOnhookEnabled>false</transferOnhookEnabled> <enableVad>false</enableVad> <preferredCodec>none</preferredCodec> <dtmfAvtPayload>101</dtmfAvtPayload> <dtmfDbLevel>3</dtmfDbLevel> <dtmfOutofBand>avt</dtmfOutofBand> <kpml>3</kpml> <alwaysUsePrimeLine>false</alwaysUsePrimeLine> <alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail> <phoneLabel>Cisco Phone</phoneLabel> <stutterMsgWaiting>2</stutterMsgWaiting> <callStats>false</callStats> <offhookToFirstDigitTimer>15000</offhookToFirstDigitTimer> <silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts> <disableLocalSpeedDialConfig>true</disableLocalSpeedDialConfig> <poundEndOfDial>false</poundEndOfDial> <startMediaPort>16384</startMediaPort> <stopMediaPort>32766</stopMediaPort> <sipLines> <line button="1" lineIndex="1"> <featureID>9</featureID> <proxy>10.1.1.50</proxy> <port>5060</port> <autoAnswer> <autoAnswerEnabled>2</autoAnswerEnabled> </autoAnswer> <callWaiting>3</callWaiting> <sharedLine>false</sharedLine> <messageWaitingLampPolicy>3</messageWaitingLampPolicy> <messagesNumber></messagesNumber> <ringSettingIdle>4</ringSettingIdle> <ringSettingActive>5</ringSettingActive> <forwardCallInfoDisplay> <callerName>true</callerName> <callerNumber>true</callerNumber> <redirectedNumber>false</redirectedNumber> <dialedNumber>true</dialedNumber> </forwardCallInfoDisplay> <featureLabel></featureLabel> <displayName>User #103</displayName> <name>103</name> <authName>103</authName> <authPassword>SIP_PWD</authPassword> </line> </sipLines> <externalNumberMask>$num</externalNumberMask> <voipControlPort>5060</voipControlPort> <dscpForAudio>184</dscpForAudio> <ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy> <dialTemplate>dialplan.xml</dialTemplate> </sipProfile> <commonProfile> <phonePassword>*0#</phonePassword> <backgroundImageAccess>true</backgroundImageAccess> <callLogBlfEnabled>2</callLogBlfEnabled> </commonProfile> <loadInformation></loadInformation> <vendorConfig> <disableSpeaker>false</disableSpeaker> <disableSpeakerAndHeadset>false</disableSpeakerAndHeadset> <forwardingDelay>1</forwardingDelay> <pcPort>0</pcPort> <settingsAccess>1</settingsAccess> <garp>0</garp> <voiceVlanAccess>0</voiceVlanAccess> <videoCapability>0</videoCapability> <autoSelectLineEnable>1</autoSelectLineEnable> <webAccess>0</webAccess> <daysDisplayNotActive>1,7</daysDisplayNotActive> <displayOnTime>09:00</displayOnTime> <displayOnDuration>12:00</displayOnDuration> <displayIdleTimeout>01:00</displayIdleTimeout> <spanToPCPort>1</spanToPCPort> <loggingDisplay>2</loggingDisplay> <loadServer>10.1.1.50</loadServer> <recordingTone>0</recordingTone> <recordingToneLocalVolume>100</recordingToneLocalVolume> <recordingToneRemoteVolume>50</recordingToneRemoteVolume> <recordingToneDuration></recordingToneDuration> <displayOnWhenIncomingCall>0</displayOnWhenIncomingCall> <rtcp>0</rtcp> <moreKeyReversionTimer>5</moreKeyReversionTimer> <autoCallSelect>1</autoCallSelect> <logServer>10.1.1.50</logServer> <g722CodecSupport>0</g722CodecSupport> <headsetWidebandUIControl>0</headsetWidebandUIControl> <handsetWidebandUIControl>0</handsetWidebandUIControl> <headsetWidebandEnable>0</headsetWidebandEnable> <handsetWidebandEnable>0</handsetWidebandEnable> <peerFirmwareSharing>0</peerFirmwareSharing> <enableCdpSwPort>1</enableCdpSwPort> <enableCdpPcPort>1</enableCdpPcPort> </vendorConfig> <versionStamp>1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37</versionStamp> <userLocale> <name>Russian_Russian_Federation</name> <langCode>ru_RU</langCode> <version></version> <winCharSet>utf-8</winCharSet> </userLocale> <networkLocale></networkLocale> <networkLocaleInfo> <name></name> <version></version> </networkLocaleInfo> <deviceSecurityMode>1</deviceSecurityMode> <idleTimeout>0</idleTimeout> <authenticationURL></authenticationURL> <directoryURL>http://10.1.1.50/provisioning/cisco-services.xml</directoryURL> <idleURL></idleURL> <informationURL></informationURL> <messagesURL></messagesURL> <proxyServerURL></proxyServerURL> <servicesURL>http://10.1.1.50/provisioning/cisco-services.xml</servicesURL> <dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig> <dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices> <dscpForCm2Dvce>96</dscpForCm2Dvce> <transportLayerProtocol>2</transportLayerProtocol> <singleButtonBarge>0</singleButtonBarge> <capfAuthMode>0</capfAuthMode> <capfList><capf> <phonePort>3804</phonePort> <!-- <processNodeName>10.1.1.50</processNodeName> --> </capf> </capfList> <certHash></certHash> <encrConfig>false</encrConfig> <advertiseG722Codec>1</advertiseG722Codec> </device>
Если вам только предстоит приобрести телефон этой серии, будьте внимательны, автонастройка поддерживается только в аппаратах 150S/F3. На аппарате 150S/F2, попавшем мне в руки, такого функционала не обнаружил.
Конфигурационный файл может быть как в формате xml, так и обычном текстовом. Для xml есть одно требование: тэг должен быть в начале строки, иначе парсер его проигнорирует и значение соответствующего параметра не изменится.
Для настройки телефона используются два файла. f0D00580000.cfg — для хранения настроек всех телефонов и 00112233aabb.cfg (MAC-адрес в нижнем регистре) для индивидуальных настроек. Индивидуальные настройки, естественно, имеют больший приоритет.
Полный набор настроек насчитывает более тысячи строк, чтобы не загромождать статью, опишу минимальный достаточный набор настроек.
Обязательными являются корневой узел VOIP_CONFIG_FILE и вложенный в него узел version. Настройки будут применены только если версия файла будет выше, чем у текущих настроек в аппарате. Узнать это значение можно через .web-интерфейс телефона в разделе maintenance (системное управление). Для телефонов с заводскими настройками в обоих случаях это 2.0002. Кроме того, версия индивидуального файла должна быть больше версии общего файла.
Первым приведу файл с общей конфигурацией для всех телефонов. По сути дела, он хранит все настройки, индивидуальный файл будет отвечать только за номер телефона и надпись на экране.
В двух блоках, приведённых ниже, устанавливаются параметры временной зоны и синхронизации времени, начальный порт для RTP и включается сетевой мост между WAN и LAN разъемами аппарата.
<GLOBAL_CONFIG_MODULE> <WAN_Mode>DHCP</WAN_Mode> <Default_Protocol>2</Default_Protocol> <Enable_DHCP>1</Enable_DHCP> <DHCP_Auto_DNS>1</DHCP_Auto_DNS> <DHCP_Auto_Time>0</DHCP_Auto_Time> <Host_Name>VOIP</Host_Name> <RTP_Initial_Port>10000</RTP_Initial_Port> <RTP_Port_Quantity>200</RTP_Port_Quantity> <SNTP_Server>10.1.1.4</SNTP_Server> <Enable_SNTP>1</Enable_SNTP> <Time_Zone>71</Time_Zone> <Time_Zone_Name>UCT_011</Time_Zone_Name> <Enable_DST>0</Enable_DST> <SNTP_Timeout>60</SNTP_Timeout> <Default_UI>12</Default_UI> <MTU_Length>1500</MTU_Length> </GLOBAL_CONFIG_MODULE> <LAN_CONFIG_MODULE> <Enable_Bridge_Mode>1</Enable_Bridge_Mode> <Enable_Port_Mirror>1</Enable_Port_Mirror> </LAN_CONFIG_MODULE>
Собственно названия параметров конфигурации достаточно «говорящие», чтобы не описывать их подробно.
<SIP_CONFIG_MODULE> <SIP__Port>5060</SIP__Port> <SIP_Line_List> <SIP_Line_List_Entry> <ID>SIP1</ID> <Register_Addr>10.1.1.50</Register_Addr> <Register_Port>5060</Register_Port> <Register_TTL>3600</Register_TTL> <Enable_Reg>1</Enable_Reg> <Proxy_Addr>10.1.1.50</Proxy_Addr> <DTMF_Mode>1</DTMF_Mode> <DTMF_Info_Mode>0</DTMF_Info_Mode> <VoiceCodecMap>G711A,G711U,G722</VoiceCodecMap> </SIP_Line_List_Entry> </SIP_Line_List> </SIP_CONFIG_MODULE>
<MMI_CONFIG_MODULE> <Telnet_Port>23</Telnet_Port> <Web_Port>80</Web_Port> <Web_Server_Type>0</Web_Server_Type> <Https_Web_Port>443</Https_Web_Port> <Remote_Control>1</Remote_Control> <Enable_MMI_Filter>0</Enable_MMI_Filter> <Telnet_Prompt></Telnet_Prompt> <MMI_Filter> <MMI_Filter_Entry> <ID>Item1</ID> <First_IP>10.1.1.152</First_IP> <End_IP>10.1.1.160</End_IP> </MMI_Filter_Entry> </MMI_Filter> <MMI_Account> <MMI_Account_Entry> <ID>Account1</ID> <Name>admin</Name> <Password>ADMIN_PWD</Password> <Level>10</Level> </MMI_Account_Entry> <MMI_Account_Entry> <ID>Account2</ID> <Name>guest</Name> <Password>GUEST_PWD</Password> <Level>5</Level> </MMI_Account_Entry> </MMI_Account> </MMI_CONFIG_MODULE>
<PHONE_CONFIG_MODULE> <Menu_Password>123</Menu_Password> <KeyLock_Password>123</KeyLock_Password> <Fast_Keylock_Code></Fast_Keylock_Code> <Enable_KeyLock>0</Enable_KeyLock> <Emergency_Call>112</Emergency_Call> <LCD_Title>Company</LCD_Title> <LCD_Constrast>5</LCD_Constrast> <LCD_Luminance>1</LCD_Luminance> <Backlight_Off_Time>30</Backlight_Off_Time> <Enable_Power_LED>0</Enable_Power_LED> <Time_Display_Style>0</Time_Display_Style> <Enable_TimeDisplay>1</Enable_TimeDisplay> <Alarm__Clock>0,,1</Alarm__Clock> <Date_Display_Style>0</Date_Display_Style> <Date_Separator>0</Date_Separator> <Enable_Pre-Dial>1</Enable_Pre-Dial> <Xml_PhoneBook> <Xml_PhoneBook_Entry> <ID>XML-PBook1</ID> <Name>Phonebook</Name> <Addr>http://10.1.1.50/provisioning/dlink-phonebook.xml</Addr> <Auth>:</Auth> <Policy>0</Policy> <Sipline>0</Sipline> </Xml_PhoneBook_Entry> </Xml_PhoneBook> <Phonebook_Groups>friend,home,work,business,classmate,colleague</Phonebook_Groups> </PHONE_CONFIG_MODULE>
Все остальные настройки останутся «по умолчанию». Теперь любой телефон Dlink, подключённый к сети, сразу примет общий для всех набор параметров. Чтобы задать индивидуальные параметры для аппарата нужен отдельный файл. В нем нужно только указать необходимые настройки для отдельного абонента.
<?xml version="1.0" encoding="UTF-8"?> <VOIP_CONFIG_FILE> <version>2.0006</version> <SIP_CONFIG_MODULE> <SIP_Line_List> <SIP_Line_List_Entry> <ID>SIP1</ID> <Display_Name>User #117</Display_Name> <Phone_Number>117</Phone_Number> <Register_Port>5060</Register_Port> <Register_User>117</Register_User> <Register_Pswd>SIP_PWD</Register_Pswd> <Register_TTL>3600</Register_TTL> <Enable_Reg>1</Enable_Reg> <Proxy_Port>5060</Proxy_Port> <Proxy_User>117</Proxy_User> <Proxy_Pswd>SIP_PWD</Proxy_Pswd> </SIP_Line_List_Entry> </SIP_Line_List> </SIP_CONFIG_MODULE> </VOIP_CONFIG_FILE>
Эти аппараты получают настройки по несколько иной схеме. Конфигурация хранится в текстовых файлах. Максимальный размер конфигурационного файла составляет 120 КБ. Независимо от количества файлов общий их размер не должен превышать 120 КБ.
Конфигурационный файл состоит из набора строк, на которые накладываются указанные ниже условия:
Такой серьёзный набор требований к конфигурационному файлу меня, откровенно говоря, огорчил. На мой взгляд, реализация взаимодействия с сервером управления у телефонов Panasonic сделана чрезвычайно неудобно. По этому параметру телефон значительно уступает остальным.
При первом включении аппарата (или после сброса на заводские настройки) он пытается загрузить так называемый файл продукта (в данном случае это KX-UT123RU.cfg), в котором должны содержаться пути к остальным файлам конфигурации.
CFG_STANDARD_FILE_PATH=«tftp://10.1.1.50/panasonic/{mac}.cfg»
CFG_PRODUCT_FILE_PATH=«tftp://10.1.1.50/panasonic/KX-UT123RU.cfg»
CFG_MASTER_FILE_PATH=«tftp://10.1.1.50/panasonic/master.cfg»
После этого телефон выведет на экран сообщение об успешном завершении подготовки и будет ожидать, пока его не перезагрузят. А уже после перезагрузки он начнет обрабатывать положенные ему конфигурационные файлы.
В файле master.cfg рекомендуется указывать общие настройки для всех телефонов. Как и в случае с Dlink, я укажу только некоторые параметры. Имена остальных параметров и их значения можно найти в документации на сайте производителя.
## System Time Settings
NTP_ADDR=«10.1.1.4»
TIME_ZONE=«660»
DST_ENABLE=«N»
DST_OFFSET=«60»
DST_START_MONTH=«3»
DST_START_ORDINAL_DAY=«2»
DST_START_DAY_OF_WEEK=«0»
DST_START_TIME=«120»
DST_STOP_MONTH=«10»
DST_STOP_ORDINAL_DAY=«2»
DST_STOP_DAY_OF_WEEK=«0»
DST_STOP_TIME=«120»
LOCAL_TIME_ZONE_POSIX=""
## Syslog Settings
SYSLOG_ADDR=«10.1.1.50»
SYSLOG_PORT=«514»
SYSLOG_EVENT_SIP=«6»
SYSLOG_EVENT_CFG=«6»
SYSLOG_EVENT_VOIP=«6»
SYSLOG_EVENT_TEL=«6»
## Provisioning Settings
OPTION66_ENABLE=«Y»
OPTION66_REBOOT=«N»
PROVISION_ENABLE=«Y»
CFG_STANDARD_FILE_PATH=«tftp://10.1.1.50/panasonic/{mac}.cfg»
CFG_PRODUCT_FILE_PATH=«tftp://10.1.1.50/panasonic/KX-UT123RU.cfg»
CFG_MASTER_FILE_PATH=«tftp://10.1.1.50/panasonic/master.cfg»
############################################################
# Network Settings #
############################################################
## IP Settings
CONNECTION_TYPE=«1»
HOST_NAME=«UT123»
DHCP_DNS_ENABLE=«Y»
STATIC_IP_ADDRESS=""
STATIC_SUBNET=""
STATIC_GATEWAY=""
USER_DNS1_ADDR=""
USER_DNS2_ADDR=""
## DNS Settings
DNS_QRY_PRLL=«Y»
DNS_PRIORITY=«N»
DNS1_ADDR=«10.1.1.1»
DNS2_ADDR=""
## HTTP Settings
HTTPD_PORTOPEN_AUTO=«Y»
HTTP_VER=«1»
HTTP_USER_AGENT=«Panasonic_{MODEL}/{fwver} ({mac})»
HTTP_SSL_VERIFY=«0»
CFG_ROOT_CERTIFICATE_PATH=""
## XML Application Settings
XML_HTTPD_PORT=«6666»
XMLAPP_ENABLE=«Y»
XMLAPP_USERID=""
XMLAPP_USERPASS=""
XMLAPP_START_URL=""
XMLAPP_INITIAL_URL=" "
XMLAPP_INCOMING_URL=""
XMLAPP_TALKING_URL=""
XMLAPP_MAKECALL_URL=""
XMLAPP_CALLLOG_URL=""
XMLAPP_IDLING_URL=""
XMLAPP_LDAP_URL=«10.1.1.50/provisioning/panasonic-phonebook.xml [1]»
XMLAPP_LDAP_USERID=""
XMLAPP_LDAP_USERPASS=""
В индивидуальном конфигурационном файле устройства, по традиции, остаются только настройки абонента.
PHONE_NUMBER_1=«168»
SIP_URI_1=«168»
LINE_ENABLE_1=«Enabled»
PROFILE_ENABLE_1=«Enabled»
SIP_AUTHID_1=«168»
SIP_PASS_1=«SIP_PWD»
Параметры этих телефонов хранятся в одном xml-файле с именем cfg{mac}.xml. Либо в обычном текстовом с именем cfg{mac}. Этот телефон запрашивает только индивидуальный конфигурационный файл, так что оптимизировать настройки путем выноса их в общий файл не выйдет. Еще одна особенность настройки Grandstream’ов это именование параметров. Все они пронумерованы и обозначаются как P###. Например:
P1650 – отвечает за веб-интерфейс для управления телефоном (0 – HTTPS, 1 – HTTP)
P47 – адрес SIP сервера для подключения.
Если конфигурация хранится в текстовом файле, параметры не требуют никакой группировки и идут в любом порядке. Строки, начинающиеся с #, рассматриваются как комментарии.
В случае, если настройки представлены в формате xml, они должны быть вложены в узел <config version=”1”>, который в свою очередь должен быть вложен в <gs_provision version=«1»>. Все параметры записываются в виде соответствующих тегов со значением параметра внутри.
<?xml version="1.0" encoding="UTF-8" ?> <gs_provision version="1"> <config version="1"> <P271>1</P271> <!-- Account Name. Cannot be empty. --> <P270>109</P270> <!-- SIP User ID --> <P35>109</P35> <!-- Authenticate ID --> <P36>109</P36> <!-- Authenticate password --> <P34>SIP_PWD</P34> <!-- Display Name (John Doe) --> <P3>User# 109</P3> <!-- Common settings --> <P207>10.1.1.50</P207> <P208>2</P208> <P47>10.1.1.50</P47><!-- line 1 sip server --> <P401>0</P401><!-- Line 2 disable --> <P2>ADMIN_PWD</P2><!-- admin password --> <P196>USER_PWD</P196><!-- user web console pwd --> <P1362>ru</P1362><!-- display lang --> <P212>0</P212><!-- Upgrade from TFTP --> <P192>10.1.1.50/grandstream</P192> <P1357>1</P1357><!-- lock configuration via phone (basic only)--> <P64>TZc-11</P64><!-- timezone --> <P30>10.1.1.4</P30><!-- NTP-server --> <P330>1</P330><!-- Download PB from HTTP --> <P331>http://10.1.1.50/provisioning/grandstream</P331><!-- phonebook base url --> <P333>30</P333><!-- Auto update PB in 30 min --> </config> </gs_provision>
Аппараты этих моделей поддерживают индивидуальные конфигурационные файлы для устройств и общие для моделей. В моём случае, мне пришлось общие параметры разместить в файлах y000000000031.cfg и y000000000034.cfg соответственно. Индивидуальные конфигурационные файлы именуются в соответствии с MAC-адресом: 00112233aabb.cfg.
Настройки для yealink’ов хранятся в текстовом формате. Из обязательных требований только наличие в первой строке версии файла, в формате #!version:1.0.0.1.
Все параметры записываются в виде параметр = значение. Комментарии должны начинаться с символа "#". Имена параметров и их значения можно найти в документации на сайте производителя.
В итоге, благодаря замечательной функции auto-provision, предусмотренной в упомянутых мной телефонах, с подключением к сети новых аппаратов не возникло никаких проблем. Всё свелось к выяснению MAC-адреса телефона и генерации конфигурационного файла по шаблону.
Надеюсь, что вы дочитали до конца и извлекли пользу из прочитанного.
Спасибо за внимание.
Автор: Dagobertus
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/telefoniya/70218
Ссылки в тексте:
[1] 10.1.1.50/provisioning/panasonic-phonebook.xml: http://10.1.1.50/provisioning/panasonic-phonebook.xml
[2] 10.1.1.50/provisioning/yealink-phonebook.xml: http://10.1.1.50/provisioning/yealink-phonebook.xml
[3] Источник: http://habrahabr.ru/post/237951/
Нажмите здесь для печати.