Para este post iremos montar a seguinte topologia para exemplificar o ambiente e aprendermos como utilizar um telefone IP da Cisco com asterisk
Para este ambiente temos os seguintes recursos e serviços:
Não vou entrar em detalhes do funcionamento do telefone IP da Cisco apenas o básico e resumidamente. Se precisar de mais informações procure no site da Cisco ou me mande um e-mail que tenho muita documentação. Resumindo o telefone IP da Cisco vem para buscar a configuração em um servidor TFTP, caso ainda não possua o firmware e possível também atualizar o firmware na inicialização. O telefone IP da Cisco trabalha com dois protocolos VOIP:
O telefone IP da Cisco trabalha com os dois protocolos, utilizaremos por questões de melhor compatibilidade a versão do firmware que conversa SIP. Assim teremos o Asterisk conversando SIP diretamente. O modelo do telefone que possuo para nosso teste e o 7961, depois de muita luta encontrei o firmware o qual contem os seguintes arquivos:
O telefone IP ja precisa estar carregado com o firmware SIP, caso contrário precisamos atualiza-ló. Para isso teu ambiente deve estar operacional. Quando digo ambiente se trata do servidor DHCP, TFTP, etc. Precisa estar funcionando e com todos os arquivos do firmware no TFTP para o telefone ligar e buscar os arquivos do firmware e aplicar em si :).
Uma coisa e importa o reset do telefone no meu caso para resetar o telefone IP e necessário os seguintes passos: Mantenha pressionado o botão “#” ate que os botões de linha comecem a piscar, ai solte o botão “#” e digite a sequência “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “*”, “0”, “#”, depois o telefone irá procurar o TFTP e os arquivos necessários e ira se atualizar com o firmware definido. Se tiver dúvida tem o seguinte link que ensina o procedimento mas e bem simples, mas LEMBRANDO o procedimento para funcionar seu servidor TFTP e DHCP devem estar configurados e funcionando :). Abaixo segue o link
https://www.3cx.com/sip-phones/factory-reset-cisco-7900-series/
Vamos a configuração do DHCP, o telefone IP precisa receber um endereço do servidor TFTP que ele precisa buscar firmware no caso de atualização ou arquivos xml's no caso de configurações. Para a configuração do dhcp segue abaixo um exemplo bem simples.
# configuração para a opção 66 e 150 que informa o endereço TFTP option voip code 66=ip-address; option voip-tftp-server code 150=ip-address; # este servidor dhcp e o autorizado no segmento de rede authoritative; # configuração do escopo DHCP subnet 192.168.10.0 netmask 255.255.255.0 { range 192.168.10.160 192.168.10.200; option domain-name-servers 192.168.10.1, 8.8.8.8; option domain-name "capsula.corp"; option routers 192.168.10.1; option broadcast-address 192.168.10.255; default-lease-time 600; max-lease-time 7200; option voip-tftp-server 192.168.10.186; option voip 192.168.10.186; }
Você deve ter notado que as opções do DHCP para o servidor TFTP podem ser duas: 150 e 66. Quais as diferenças entre elas? Resumindo a opção 150 é proprietária da Cisco e a opção 66 e um padrão IEEE. Telefones IP da Cisco podem ser configurados manualmente ou via DHCP, além deste requisito os telefones precisam de acesso a um servidor TFTP que contém a configuração em format .cnf.xml, o qual configura o telefone para contactar o PABX IP para se registrar como um ramal.
A opção DHCP 150 é proprietário da Cisco. A opção 66 é um padrão aberto. A RFC 2132 define a opção DHCP 66.
Diferenças entre a opção 150 e 66:
Opção DHCP 150 suporta uma lista de servidores TFTP. Opção DHCP 66 somente suporta o endereço IP ou o hostname de um único servidor TFTP.
Para a configuração do TFTP e bem simples e necessário somente instala-lo e colocar os arquivos de configuração e firmware na raiz do TFTP.
# apt install tftpd-hpa
O diretório raiz do mesmo fica em “/var/lib/tftpboot/“.
Caso precise debugar os arquivos que são acessados no tftp edite o arquivo ”/etc/default/tftpd-hpa” e procure a seguinte linha.
# /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/var/lib/tftpboot" TFTP_ADDRESS=":69" TFTP_OPTIONS="--secure"
e adicione no final da linha que esta marcada a opção –verbose, ficando da seguinte forma:
# /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/var/lib/tftpboot" TFTP_ADDRESS=":69" TFTP_OPTIONS="--secure --verbose"
Agora vem a parte foda da configuração: criar o arquivo .cnf.xml que o telefone IP busca para se auto configurar. Vamos la para cria-lo precisamos do MAC do telefone IP. No meu caso o endereço IP do meu telefone é 192.168.10.178 vamos pegar o MAC via comando arp, ou no próprio aparelho. Vamos pegar via comando arp.
root@halljordan:/etc/asterisk# arp -an ? (192.168.10.181) at 38:3f:10:04:b8:a8 [ether] on enp0s11 ? (192.168.10.1) at 00:1a:3f:79:f2:37 [ether] on enp0s11 ? (192.168.10.178) at 00:21:d8:bb:45:42 [ether] on enp0s11 ? (192.168.10.70) at 20:47:47:fc:f5:ea [ether] on enp0s11 root@halljordan:/etc/asterisk#
O endereço MAC do telefone IP é 00:21:d8:bb:45:42. O formato do arquivo de configuração segue o formato
SEPXXXXXXXXXXXX.cnf.xml
A string de 12 caracter “X” vamos preencher com o MAC do telefone IP ficando da seguinte forma 0021D8BB4542. Com isso o arquivo final ficando com o seguinte formato de nome.
SEP0021D8BB4542.cnf.xml
Tudo certo definimos o nome do arquivo agora vem a parte do conteúdo, vou colocar o meu arquivo e marcar as opções que deve alterar para teu ambiente.
<device xsi:type="axl:XIPPhone" ctiid="1566023366"> <deviceProtocol>SIP</deviceProtocol> <sshUserId>cisco</sshUserId> <sshPassword>cisco</sshPassword> <devicePool> <dateTimeSetting> <dateTemplate>D-M-YA</dateTemplate> <!--<timeZone>UTC Standard/Daylight Time</timeZone>--> <timeZone>South America Standard/Daylight Time</timeZone> </dateTimeSetting> <callManagerGroup> <members> <member priority="0"> <callManager> <ports> <ethernetPhonePort>2000</ethernetPhonePort> <sipPort>5060</sipPort> <securedSipPort>5061</securedSipPort> </ports> <processNodeName>192.168.10.186</processNodeName> </callManager> </member> </members> </callManagerGroup> </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--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> </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>false</remotePartyID> <userInfo>None</userInfo> </sipStack> <autoAnswerTimer>1</autoAnswerTimer> <autoAnswerAltBehavior>false</autoAnswerAltBehavior> <autoAnswerOverride>true</autoAnswerOverride> <transferOnhookEnabled>false</transferOnhookEnabled> <enableVad>false</enableVad> <dtmfAvtPayload>101</dtmfAvtPayload> <dtmfDbLevel>3</dtmfDbLevel> <dtmfOutofBand>avt</dtmfOutofBand> <alwaysUsePrimeLine>false</alwaysUsePrimeLine> <alwaysUsePrimeLineVoiceMail>false</alwaysUsePrimeLineVoiceMail> <kpml>3</kpml> <phoneLabel>1109</phoneLabel> <stutterMsgWaiting>1</stutterMsgWaiting> <callStats>false</callStats> <silentPeriodBetweenCallWaitingBursts>10</silentPeriodBetweenCallWaitingBursts> <disableLocalSpeedDialConfig>false</disableLocalSpeedDialConfig> <startMediaPort>16384</startMediaPort> <stopMediaPort>32766</stopMediaPort> <sipLines> <line button="1"> <featureID>9</featureID> <featureLabel>1109</featureLabel> <proxy>192.168.10.186</proxy> <port>5060</port> <name>1109</name> <displayName>1109</displayName> <autoAnswer> <autoAnswerEnabled>2</autoAnswerEnabled> </autoAnswer> <callWaiting>3</callWaiting> <authName>1109</authName> <authPassword>password</authPassword> <sharedLine>false</sharedLine> <messageWaitingLampPolicy>1</messageWaitingLampPolicy> <messagesNumber>700</messagesNumber> <ringSettingIdle>4</ringSettingIdle> <ringSettingActive>5</ringSettingActive> <contact>1109</contact> <forwardCallInfoDisplay> <callerName>true</callerName> <callerNumber>false</callerNumber> <redirectedNumber>false</redirectedNumber> <dialedNumber>true</dialedNumber> </forwardCallInfoDisplay> </line> </sipLines> <voipControlPort>5060</voipControlPort> <dscpForAudio>184</dscpForAudio> <ringSettingBusyStationPolicy>0</ringSettingBusyStationPolicy> <dialTemplate>dialplan.xml</dialTemplate> </sipProfile> <commonProfile> <phonePassword>password</phonePassword> <backgroundImageAccess>true</backgroundImageAccess> <callLogBlfEnabled>2</callLogBlfEnabled> </commonProfile> <loadInformation>SIP41.8-0-4SR3AS</loadInformation> <vendorConfig> <disableSpeaker>false</disableSpeaker> <disableSpeakerAndHeadset>false</disableSpeakerAndHeadset> <pcPort>0</pcPort> <settingsAccess>1</settingsAccess> <garp>0</garp> <voiceVlanAccess>0</voiceVlanAccess> <videoCapability>0</videoCapability> <autoSelectLineEnable>0</autoSelectLineEnable> <webAccess>1</webAccess> <daysDisplayNotActive>1,2,3,4,5,6,7</daysDisplayNotActive> <displayOnTime>00:00</displayOnTime> <displayOnDuration>00:00</displayOnDuration> <displayIdleTimeout>00:00</displayIdleTimeout> <spanToPCPort>1</spanToPCPort> <loggingDisplay>1</loggingDisplay> <loadServer></loadServer> </vendorConfig> <versionStamp>1143565489-a3cbf294-7526-4c29-8791-c4fce4ce4c37</versionStamp> <networkLocale>New_Zealand</networkLocale> <networkLocaleInfo> <name>New_Zealand</name> <version>5.0(2)</version> </networkLocaleInfo> <deviceSecurityMode>1</deviceSecurityMode> <authenticationURL>http://www/ipphone/authenticate.php</authenticationURL> <directoryURL>http://www/ipphone/directory.xml</directoryURL> <idleURL></idleURL> <informationURL>http://www/ipphone/GetTelecasterHelpText.jsp</informationURL> <messagesURL></messagesURL> <proxyServerURL>proxy:3128</proxyServerURL> <servicesURL>http://www/ipphone/services.xml</servicesURL> <dscpForSCCPPhoneConfig>96</dscpForSCCPPhoneConfig> <dscpForSCCPPhoneServices>0</dscpForSCCPPhoneServices> <dscpForCm2Dvce>96</dscpForCm2Dvce> <transportLayerProtocol>2</transportLayerProtocol> <capfAuthMode>0</capfAuthMode> <capfList> <capf> <phonePort>3804</phonePort> </capf> </capfList> <certHash></certHash> <encrConfig>false</encrConfig> </device>
Se esqueci algum item me perdoem, mas com isso já deve funcionar, uma atenção especial a tag <loadInformation>SIP41.8-0-4SR3AS</loadInformation> ela diz qual o firmware que devo aplicar veja a saida de uma listagem no servidor TFTP.
root@halljordan:/var/lib/tftpboot# ls -l total 5972 -rw-r--r-- 1 root root 5788 Sep 29 18:06 SEP0021D8BB4542.cnf.xml -rw-r--r-- 1 root root 644 Sep 28 21:51 SIP41.8-0-4SR3AS.loads -rw-r--r-- 1 root root 2548198 Sep 28 21:51 apps41.1-1-3-31.sbn -rw-r--r-- 1 root root 417824 Sep 28 21:51 cnu41.3-1-3-31.sbn -rw-r--r-- 1 root root 2423295 Sep 28 21:51 cvm41sip.8-0-3-33.sbn -rw-r--r-- 1 root root 92 Sep 29 18:05 dialplan.xml -rw-r--r-- 1 root root 484353 Sep 28 21:51 dsp41.1-1-3-31.sbn -rw-r--r-- 1 root root 200805 Sep 28 21:51 jar41sip.8-0-3-33.sbn -rw-r--r-- 1 root root 641 Sep 28 21:51 term41.default.loads -rw-r--r-- 1 root root 641 Sep 28 21:51 term61.default.loads root@halljordan:/var/lib/tftpboot#
Vejam que a tag repete o nome do arquivo tirando a extensão .loads, isso é regra se mudar o firmware tem que alterar o xml de configuração. Outro detalhe que tive problema e com a discagem. O telefone IP se registrava mas o primeiro número que teclava ele ja dava o dial, para isso você precisa de um timeout entre os digitos e quem define isso e o arquivo de dialplan.xml. Segue o mesmo abaixo. Não esqueçam senão a primeira tecla que apertar o telefone IP irá executar o dial. Deixei o timeout entre digitos de 5 segundos.
<DIALTEMPLATE> <TEMPLATE MATCH="*" Timeout="5"/> <!-- Anything else --> </DIALTEMPLATE>
Para o teste vou postar apenas um vídeo. :)