Затачиваем Astesrisk для работы с BLF Cisco

от автора

BLF (Busy Lamp Field) — в общем, это набор индикаторов на IP телефоне, которые показывают статус линии: свободно или занято.

В этой статье мы научим Asterisk правильно работать с телефонами Cisco для отображения BLF статусов.

Теория

Введём в консоли Asterisk команду:

asterisk*CLI> core show hints      -= Registered Asterisk Dial Plan Hints =-                    1196@ext-local           : SIP/1196              State:Ringing         Watchers  3                    1188@ext-local           : SIP/1188              State:InUse           Watchers  3                    5030@ext-local           : SIP/5030              State:Idle            Watchers  1 

Колоночка State показывает, собственно, состояние линии, Watchers — количество слушающих эту линию. При изменении состояния линии, Asterisk отправляет телефону сообщение и телефон включает индикацию. Работоспособность BLF на Asterisk можно сначала проверить на программном телефоне, например, на DrayTek SoftPhone. После добавления контактов можно наблюдать индикацию занятости линии. По-умолчанию, Asterisk отправляет такие сообщения, которые телефон Cisco прочитать не может, и, соответственно, BLF на них не работает.

Патчим исходные коды Asterisk

Скачиваем патч: issues.asterisk.org/jira/secure/attachment/32739/cisco-blf-asterisk.1.8.0.patch
При установке этого патча asterisk компилироваться не будет.
В патче присутствует небольшая опечатка, её надо исправить.
В строке 23 switch (state) исправить на switch (data->state);
в строке 40 state исправить на data->state;
в строке 60 state исправить на data;
в строке 66 state исправить на data.

Далее копируем исходники Asterisk в папку, например /usr/src/asterisk.
Кладем патч в папку channels и сразу переименовываем его, например в patch.
Выполняем команду:

patch chan_sip.c patch 

На запрос “File to patch” вводим путь где расположен sip.h (обычно в include/sip/sip.h).
Если Asterisk установлен, то необходимо его удалить. Для этого останавливаем Asterisk:

service asterisk stop 

Удаляем Asterisk:

yum remove asterisk 

Перед установкой asterisk необходимо установить все модули для компиляции исходников, в частности gcc, gcc-c++, kernel-devel, ncurses-devel, openssl-devel, m2crypto, libssl-devel.
Далее выполняем:

./configure make menuselect  -- выбираем необходимые модули make make  install 

Запускаем:

asterisk start 

На этом с Asterisk покончили.

Настройка config файлов телефона

config.file

<?xml version="1.0" encoding="UTF-8"?> <device xsi:type="axl:XIPPhone" ctiid="94">  <fullConfig>true</fullConfig> <deviceProtocol>SIP</deviceProtocol> <sshUserId>cisco</sshUserId> <sshPassword>cisco</sshPassword>  <devicePool> <dateTimeSetting> <dateTemplate>Y-M-D</dateTemplate> <timeZone>Central Asia Standard Time</timeZone> <ntps> <ntp> <name>PBX-IP Address</name> <ntpMode>Unicast</ntpMode> </ntp> </ntps> </dateTimeSetting>  <callManagerGroup> <members> <member priority="0"> <callManager>  <ports> <ethernetPhonePort>2000</ethernetPhonePort> <sipPort>5060</sipPort> <securedSipPort>5061</securedSipPort> </ports> <processNodeName>PBX-IP Address</processNodeName> </callManager> </member> </members> </callManagerGroup>  <srstInfo> <srstOption>Disable</srstOption> <ipAddr1></ipAddr1> <port1>2000</port1> <ipAddr2></ipAddr2> <port2>2000</port2> <ipAddr3></ipAddr3> <port3>2000</port3> <sipIpAddr1></sipIpAddr1> <sipPort1>5060</sipPort1> <sipIpAddr2></sipIpAddr2> <sipPort2>5060</sipPort2> <sipIpAddr3></sipIpAddr3> <sipPort3>5060</sipPort3> <isSecure>false</isSecure> </srstInfo>  <connectionMonitorDuration>120</connectionMonitorDuration> </devicePool>  <sipProfile> <sipProxies> <backupProxy></backupProxy> <backupProxyPort></backupProxyPort> <emergencyProxy></emergencyProxy> <emergencyProxyPort></emergencyProxyPort> <outboundProxy></outboundProxy> <outboundProxyPort></outboundProxyPort> <registerWithProxy>true</registerWithProxy> </sipProxies> <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></phoneLabel> <stutterMsgWaiting>2</stutterMsgWaiting> <callStats>true</callStats> <offhookToFirstDigitTimer>15000</offhookToFirstDigitTimer> <silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts> <disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig> <poundEndOfDial>false</poundEndOfDial> <startMediaPort>16384</startMediaPort> <stopMediaPort>32766</stopMediaPort>  <sipLines> <line button="1" lineIndex="1"> <featureID>9</featureID> <proxy>USECALLMANAGER</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>false</callerNumber> <redirectedNumber>false</redirectedNumber> <dialedNumber>true</dialedNumber> </forwardCallInfoDisplay> <!-- ***************************** --> <featureLabel>LineName 5037</featureLabel> <displayName>LineName</displayName> <name>5037</name> <authName>5037</authName> <authPassword>password</authPassword> </line> <line button="2"> <featureID>21</featureID> <featureLabel>Description</featureLabel> <speedDialNumber>Directory Number</speedDialNumber> </line> </sipLines> <externalNumberMask></externalNumberMask> <!-- ***************************** -->  <voipControlPort>5060</voipControlPort> <dscpForAudio>184</dscpForAudio> <ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy> <dialTemplate>dialplan.xml</dialTemplate> </sipProfile>  <commonProfile> <phonePassword></phonePassword> <backgroundImageAccess>true</backgroundImageAccess> <callLogBlfEnabled>1</callLogBlfEnabled> </commonProfile>  <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>0</autoSelectLineEnable> <webAccess>1</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.96.31</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.96.31</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>1200501729-ee9247c4-1a10-481c-8fdc-612737c5aadd</versionStamp>  <deviceSecurityMode>1</deviceSecurityMode> <idleTimeout>0</idleTimeout> <authenticationURL></authenticationURL> <directoryURL></directoryURL> <idleURL></idleURL> <informationURL></informationURL> <messagesURL></messagesURL> <proxyServerURL></proxyServerURL> <servicesURL></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>PBX-ip-address</processNodeName> </capf> </capfList>  <certHash></certHash> <encrConfig>false</encrConfig> <advertiseG722Codec>1</advertiseG722Codec> </device> 

Рассмотрим основные строчки для работы BLF

<line button="2"> <featureID><b>21</b></featureID> <featureLabel>Description</featureLabel> <speedDialNumber>Directory Number</speedDialNumber> </line> 

featureID 21 означает, что для данного Directory Number необходимо использовать BLF.
В файле /etc/asterisk/sip_general_additional.conf добавляем или изменяем, если они есть, строчки:

allowsubscribe=yes notifyhold=yes callcounter=yes notifyringing=yes limitonpeers=yes buggymwi=yes 

Используемые устройства

Для организации BLF использовались следующие устройства:
Телефоны: Cisco 7961, 7962, FreePBX 2.0.2, Asterisk 1.8.11.

ссылка на оригинал статьи http://habrahabr.ru/post/159783/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *