domingo, 17 de junho de 2012

To: Called Number (Gateways H323)

Um post bem específico hoje. Quando o usuário faz uma chamada para a PSTN roteando via um gateway H.323, o telefone originador pode exibir o número discado de diversas formas uma vez que a chamada é completada.
Por exemplo, digamos que eu tenha um ramal em Boston e faça uma chamada para NY via TEHO. O usuário em Boston discará 9 1 212 394-1111, e a chamada sairá como uma chamada local pelo gateway de NY, enviando para a PSTN os dígitos 3941111.
Quando o usuário faz essa chamada, o phone dele pode exibir o número discado de várias formas, por exemplo:
To: 912123941111
To: 3941111
To: 12123941111
To: *9988776655#3941111 
To: 911
Ou qualquer outro jeito que você quiser!

A regra é sempre fazer a manipulação necessária para o roteamento da chamada dentro da Route List, e usar a Route Pattern para alterar a forma de exibição do número discado no telefone. Mas antes deveremos desabilitar um supplementary-service no gateway (veremos a seguir).
Então por exemplo, eu vou criar no gateway a dial-peer:

dial-peer voice 3 pots
 destination-pattern 9T
 port 0/0/0:23

E no Call Manager a route pattern 91212.394XXXX. Agora vamos às nossas situações:

1. Por padrão, tanto faz se você configurar a regra de Discard-Digits na Route Pattern ou na Route List. O gateway sempre vai atualizar o CID de acordo com a dial-peer. Então no telefone do usuário vai aparecer To: 93941111.

2. Se no gateway eu criar uma voice translation-rule e aplicar na dial-peer, a regra refleirá no CID exibido no telefone. Por exemplo, se eu criar uma regra para tirar o 9:

voice translation-rule 1
 rule 1 /^9\(.*\)/ /\1/
!
voice translation-profile Strip9
 translate called 1
!
dial-peer voice 3 pots
 translation-profile outgoing Strip9
 destination-pattern 9T
 port 0/0/0:23

O número exibido no telefone será: To: 3941111.
Isso porque novamente o gateway está atualizando o número de acordo a dial-peer. Para desativar esse comportamento, faça:

voice service voip
 no supplementary-service h225-notify cid-update

Por isso que no Brasil, quando criamos uma dial-peer de DDD incluindo a operadora (15, 21, 23, ...) via translation, o telefone atualiza o número discado incluindo o número da operadora que foi modificado no gateway. Desativando esse serviço, o gateway não mais atualizará o CID.

3. Agora sim, com o cid-update desabilitado, se eu configurar na Route List um Discard-Digits Pre-Dot, Prefix 9. E na Route Pattern não configurar nada, o telefone não vai alterar a forma como o número é exibido, e mostrará To: 91213941111 (da mesma forma que o usuário discou)

4. Se eu configurar na Route Pattern um Discard-Digits Pre-Dot, Prefix 9. E na Route List não configurar nada, o telefone vai alterar a forma como o número é exibido (de acordo com a regra da Route Pattern), e mostrará: To: 93941111

5. E finalmete, se eu configurar na Route List um DDI Pre-Dot, Prefix 9. E na Route Pattern configurar um DDI Pre-Dot, Prefix *9988776655# o CM vai enviar para o gateway o número de acordo com as regras na Route List (93941111), porém o telefone vai exibir o número formatado de acordo com a regra da Route Pattern, ou seja, To: *9988776655#3941111.

Então se cair na prova alguma questão pedindo para mudar a forma como o número é apresentado, sugiro desativar o cid-update do gateway, e fazer todas as regras utilizando a RL para a formatação do número a ser entregue para o gateway, e a RP para a formatação do número que será exibido no telefone.

sábado, 16 de junho de 2012

Unity Express - Integração com o CME (SIP)

Seguindo os posts sobre as possiveis integrações entre CUCM/CME e CUC/CUE, vou falar hoje sobre a famosa integração CME - CUE, que é feita somente via SIP. A integração em si é bem tranquila, o chato são os detalhezinhos de MWI e tal.
Bom, vou supor aqui que você já fez o setup inicial do módulo da CUE. Caso tenha alguma dúvida, veja o link: Unity Express - Integração com o CUCM

Antes de começar o wizard WEB do CUE, configure a GUI do CME:

ip http server
ip http path flash:GUI

telephony-service
 web admin system name admin password cisco
 dn-webedit
 time-webedit

Configure também dois ramais que servirão de MWI On e MWI Off (no caso de phones SCCP):
ephone-dn  9
 number 3999.... ! -- Serão 4 dígitos a sua escolha e 4 pontinhos
 mwi on
!
ephone-dn  10
 number 3998.... ! -- Serão 4 dígitos a sua escolha e 4 pontinhos
 mwi off

Abrindo um parênteses aqui. Quando a CUE for ativar ou desativar o MWI de um ramal, ela vai enviar para o CME uma chamada para 3999XXXX ou 3998XXXX, sendo XXXX o número do ramal. Com um debug voice dialpeer é possível ver isso:


Jun 16 22:42:52.073: //-1/xxxxxxxxxxxx/DPM/dpMatchPeersCore:
   Calling Number=, Called Number=39993003, Peer Info Type=DIALPEER_INFO_SPEECH


Então caso o seu MWI não esteja funcionando, execute esse debug e veja se está tudo ok. Repare que essa chamada vinda da CUE precisará de uma dial-peer de entrada no CME, como falarei mais para frente. Vamos utilizar a própria dial-peer que aponta para a CUE, incluindo um incoming called-number 399.....

Voltando onde paramos, configure também um usuário nos seus ephones para poder importá-los quando formos fazer a integração. Dessa forma, você não precisa criar os mailbox um por um:

ephone 1
 username hqphn1 password 12345

Obs: Isso não é suportado em telefones SIP. Caso você tenha telefones SIP, mailbox e usuários deverão ser criados um por um.

Pronto, agora entre na página WEB do CUE pela primeira vez, e execute o Wizard. Nesse Wizard, o sistema vai pedir o IP do CME, usuário e senha; vai te deixar importar os usuários configurados no CME; vai configurar o MWI Outcalling com esses dois DNs que você criou; vai pedir o pilot number do voice mail e auto attendant. Enfim, é só seguir os passos, sem muito mistério. Depois de executar o wizard, o módulo vai reiniciar. Enquanto isso, continue as configurações no CME.

Crie as dial-peers apontando os pilot numbers (Auto Attendant, Voice Mail) para o módulo. Como eu disse lá em cima, aproveite essa mesma dial-peer para criar a perna inbound da CUE para o CME para quando ela for tentar ativar o MWI nos telefones SCCP:

dial-peer voice 3600 voip
 destination-pattern 3600          ! -- Voice Mail Pilot
 session protocol sipv2
 session target ipv4:10.10.202.2   ! -- IP da CUE
 incoming called-number 399.....    ! -- Inbound CUE
 dtmf-relay sip-notify      
 codec g711ulaw            ! -- Importante! A CUE só suporta G711

Caso você tenha também um auto attendant na CUE, rodando por exemplo no ramal 3601, você pode criar tudo nessa dial-peer, configurando o destination-pattern como 360[01].

No caso de telefones SIP no CME, o MWI não vai funcionar com esse método acima (chamado de Outcalling). Vai funcionar utilizando o SIP Notify (Subscribe - Notify). Para isso funcionar, mais algumas configurações serão necessárias:

sip-ua
 mwi-server ipv4:10.10.202.2  ! -- Não coloque o Unsolicited!

E nos voice register dns:

voice register dn  1
 mwi

sexta-feira, 15 de junho de 2012

Live Record (CUC e CUE)

Live Record é uma feature existente tanto no Unity Connection como no Unity Express, e permite que o usuário grave alguma chamada e receba ela no próprio Voice Mail. Bastante útil se você fizer uma integração com o serviço de e-mails da empresa, pois nesse caso o usuário pode receber a gravação em um arquivo wav no e-mail! O único problema é que o usuário precisa startar a gravação manualmente. Logo, não servirá caso você queira gravar todas as chamadas de um ramal ou da empresa. Existem aplicações específicas para isso.
Apesar de ser uma aplicação bem legal, a configuração é facílima! Pontos ganhos na prova...

Unity Connection
O Live Record no Unity Connection vai funcionar com um Pilot Number que o usuário precisa memorizar. Quando ele quiser gravar uma chamada, basta fazer uma conferência com esse Pilot. Note que provavelmente você vai precisar de uma Conference Bridge de Hardware.

1. No CUCM, Crie um CTI Route Point e deixe ele com um Forward All para o Voice Mail. No nosso exemplo, o CTI Route Point será o 2222.

2. Na Unity Connection, crie uma nova Forwarded Routing Rule.
Na regra, coloque: "Forwarding Station" "Equals" "2222"
E em Send Calls To, selecione "Conversation" e "Start Live Record"

Pronto! Só isso!
No Menu Advanced >> Telephony, você pode configurar algumas coisas, como:
Live Record Beep Interval in Milliseconds: tempo que o sistema vai ficar fazendo "beep" para notificar que está gravando a chamada. Se você deixar como 0, ele nunca fará beeps
Maximum Recording Time in Milliseconds: tamanho máximo de uma gravação na Unity Connection. Por padrão é 1200000 ms. Se quiser deixar 1 hora, configure como 3600000.

Unity Express
No CME/CUE, por incrível que pareça, essa feature é muito mais interessante, pois o usuário terá no próprio telefone um Softkey para iniciar a gravação. Muito melhor do que ficar manualmente colocando um Pilot Number em conferência, como é no CUCM.

1. Crie um ephone-dn para ser o Pilot da gravação
ephone-dn 22
 number 2222           ! -- Piloto da gravação
 call-forward all 3600 ! -- Desviado para o Voice Mail

2. Crie um novo ephone-template com o Softkey LiveRcd
ephone-template
 softkeys connected Hold EndCall Confrn Trnsfer LiveRcd

ephone 1
 ephone-template 1     ! -- Aplique o template no ephone

3. Adicione o serviço no telephony-service.
telephony-service
 voicemail 3600        ! -- Voice Mail Pilot
 live-record 2222      ! -- Live Record Pilot

4. Habilite a conferência Ad-Hoc de Hardware. O Live Record funciona via conferência, e o CME suporta apenas conferências de 3 pessoas. Então se você quiser gravar uma chamada que já tenha 2 ou mais pessoas ativas na conversa, uma conference bridge será necessária:

telephony-service
 conference hardware
 sdspfarm units 1
 sdspfarm tag 1 cme_cfb  ! -- Você deve ter o dspfarm profile criado

ephone-dn 50 octo-line
 number 5050
 conference ad-hoc
 no huntstop

4. E na CUE, faça simplesmente isso (via CLI mesmo):

voicemail live-record pilot-number 2222
voicemail live-record beep interval 10
voicemail live-record beep duration 500


domingo, 10 de junho de 2012

Mobile Voice Access

Ontem eu postei sobre Mobile Connect, e hoje vou falar sobre Mobile Voice Access, para fechar esse assunto de Unified Mobility. O Mobile Voice Access é conhecido no mercado de telefonia como DISA (Direct Inward System Access). É um número piloto que o usuário pode ligar, e a partir dele, fazer chamadas para outros destinos (internos ou externos). 
Por exemplo, a empresa disponibiliza o número 3123-4444 para os funcionários. A partir de qualquer lugar com um telefone (seja da casa dele, do celular, da rua), ele pode ligar para esse número pagando uma chamada local (claro, caso ele esteja dentro da mesma cidade), digitar uma identificação e senha, e fazer chamadas para qualquer outro lugar: ramais internos da empresa, chamadas locais, DDD, DDI, ... como se ele estivesse no próprio ramal.
No sistema da Cisco, quem atende a chamada é uma gravação, que pede ao usuário o "Remote Destination Number" (opcional) e depois o PIN. Caso seja autenticado, o usuário pode pressionar 1 e depois o número que ele deseja seguido da tecla #.
Vamos ver como é a configuração:

O pré-requisito para isso é que o usuário tenha sido habilitado com a feature de Mobility, que é exatamente o que fizemos no post anterior. Só para recapitular:
1. Configuramos o End User, habilitando o Mobility. Agora vamos ter que habilitar também a opção Enable Mobile Voice Access.
2. Criamos um Remote Destination Profile
3. Criamos um Remote Destination
4. Mudamos uns Service Parameters

Feito isso, vamos começar a configuração do MVA. Existem duas situações diferentes, que afetam a forma de configurar a funcionalidade: MGCP ou H.323? Para o MVA funcionar, obrigatoriamente teremos que ter um gateway H.323! Então para fazer funcionar como MGCP, teremos que fazer uma pequena gambiarra chamada de call hairpinning. Falarei disso mais para frente.

1. Gateway H.323
Se o seu gateway já for H.323, a configuração é um pouco mais simples: 

1.1 Service Parameters
Alguns service parameters precisam ser alterados:
- Enable Mobile Voice Access: True
- Mobile Voice Access Number: Pode deixar em branco.
- Matching Caller ID with Remote Destination: Complete Match ou Partial Match. Já falamos disso no post passado... é a forma que vamos enxergar o Remote Destination para que ele dê match com o ANI da chamada quando você ligar a partir do celular. O interessante é que se o sistema conseguir dar o match certinho, a gravação não vai pedir para o usuário digitar um Remote Destination Number. Ela pedirá o PIN diretamente. Por isso, recomendo você rodar um debug isdn q931 e ver como a operadora está mandando o ANI, para assim você conseguir fazer o match. Um detalhe: No post anterior vimos que esse match também serve para quando você ligar do seu celular para um ramal interno, certo? Caso ocorra o match, ao invés de aparecer o número do seu celular no Caller ID, vai aparecer o seu nome e ramal. Só que nessa situação, a chamada pode entrar por qualquer um dos gateways. Tipo, se você ligar do seu celular (11) 9999-8888 para um ramal no Branch 1, a chamada vai entrar pela PSTN do Branch 1. E digamos que essa PSTN esteja enviando como ANI a string 551199998888. Mas quando você ligar do seu celular para o piloto do MVA que estamos criando, a chamada vai entrar pela PSTN do Head Quarters, e digams que a PSTN esteja enviando como ANI 1199998888. E agora, como fazer para o nosso Remote Destination dar match nas duas situações? Temos algumas opções... a primeira é criar outro Remote Destination, pois cada usuário pode ter até 10 Remote Destinations (limite configurável na tela do End User), mas essa solução não é muito escalável. A segunda seria alterarmos o ANI do BR1 através de translation-profiles no gateway, e fazer com que os sites padronizem os seus ANIs para, por exemplo, 1199998888. Não adianta tentarmos mudar os parâmetros para partial match e mudar a quantidade de dígitos para match, porque como eu falei no post anterior, o sistema sempre tentará dar match com o ANI inteiro! Pelo menos foi o que eu observei nos testes, mas não é bem isso que está na documentação da Cisco.
- Number of Digits for Caller ID Partial Match: Se utilizar Partial Match, defina aqui a quantidade de digitos do Remote Destination que será utilizada para o match.
- System Remote Access Blocked Numbers: Caso deseje bloquear algumas patterns no MVA, defina aqui separando por virgulas. Você pode por exemplo querer bloquear chamadas 190 no MVA.

1.2 Mobile Voice Access
Em Media Resource >> Mobile Voice Access, defina um número que o sistema utilizará para rotear as chamadas do MVA. Pode ou não ser o mesmo número que o pilot (4444).
Quando você tentar fazer uma chamada usando o Mobile Voice Access, o que o roteador vai fazer é enviar para o Call Manager a chamada usando o MVA DN como DNIS e o número que você quer ligar como RDNIS, assim:
   cisco-ani=1199998888
   cisco-anitype=0
   cisco-aniplan=1
   cisco-anipi=0
   cisco-anisi=1
   dest=5010
   cisco-desttype=0
   cisco-destplan=1
   cisco-rdie=74
   cisco-rdn=1002
   cisco-rdntype=0
   cisco-rdnplan=1
   cisco-rdnpi=0
   cisco-rdnsi=0
   cisco-redirectreason=10   fwd_final_type =0
   final_redirectNumber =
   hunt_group_timeout =0
Nesse debug, o meu MVA DN é o 5010. E através do MVA, estava tentando chegar no ramal 1002.
O MVA DN é único no sistema... se você tiver a feature rodando em 5 gateways diferentes, o MVA DID (piloto) pode ser diferente para cada um, mas o MVA DN tem que ser o mesmo. E o gateway tem que ter acesso ao MVA DN.
Para o exemplo, vou deixar o MVA DN diferente do MVA DID. O MVA DN vai ser 5010. Só para vermos como fica a configuração.

1.3 Configuração no Gateway
Agora é necessário criar uma aplicação no gateway. O MVA na verdade é um script VXML que o gateway executa. Para facilitar, pegue a configuração no Help do próprio CUCM, buscando pela string VXML. Para a prova, mais importante do que saber tudo decor, é saber onde buscar as informações que você precisa. A configuração abaixo foi extraída do próprio Help, com algumas modificações para bater com o que temos no nosso ambiente.

application
 service mva http://<IP-Publisher>:8080/ccmivr/pages/IVRMainpage.vxml

dial-peer voice 4444 pots
 service mva                    ! -- Chama a aplicação
 incoming called-number 4444    ! -- MVA DID
 no digit-strip

dial-peer voice 100 voip
 destination-pattern 5010       ! -- MVA DN
 session-target ipv4:<IP-Publisher>
 voice-class codec 1
 voice-class h323 1
 preference 1
 dtmf-relay h245-alphanumeric
 no vad

dial-peer voice 101 voip
 destination-pattern 5010       ! -- MVA DN
 session-target ipv4:<IP-Subscriber>
 voice-class codec 1
 voice-class h323 1
 dtmf-relay h245-alphanumeric
 no vad

Repare que se o nosso MVA DN estivesse no range DDR, provavelmente eu já teria uma dial-peer criada. Por exemplo, se o meu MVA DN fosse 4444 também, eu já teria uma dial-peer com destination-pattern 4...$ apontando para os CUCMs, e nesse caso não precisaria criar essas duas novas.

1.4 Remote Destination Profile 
A Calling Search Space remote destination profile vai definir a permissão de discagem desse usuário via MVA (ou, caso você esteja usando o método Line-Based approach, será a CSS da Line que definirá a permissão). Por isso, se você tentar fazer uma chamada via MVA e ouvir "your call cannot be completed as dialed...", verifique as suas CSSs.


2. Gateway MGCP
Se o seu gateway for MGCP, precisaremos fazer um Call Hairpinning. Isso é, a chamada vai entrar via MGCP para o CUCM, e ele vai mandar de volta para o gateway via H.323. A configuração vai ser parecida, mas precisaremos de umas coisas a mais.

2.1 Service Parameters
Mesma coisa fizemos lá em cima... 

2.2 Gateway H.323
Adicione o gateway H.323 no CUCM, e atribua a ele uma nova Calling Search Space que tenha acesso a uma Partition chamada PT_MVA (ou algo do tipo). O importante é que só ele tenha acesso a essa Partition... o gateway MGCP não pode ter. 

2.3 Route Pattern
Crie uma Route Pattern para o número 4444 apontando para o gateway H.323. Essa rota tem que ser visível pelo gateway MGCP. A idéia é que as chamadas que entrem para o número 4444 sejam encaminhadas de volta para o roteador, via H.323. 

2.4 Mobile Voice Access 
Da mesma forma que fizemos lá em cima, vamos criar um MVA DN 5010, na partition PT_MVA, que apenas o Gateway H.323 vai ter acesso. 

2.5 Configuração no Gateway
Também vamos pegar a config do Help, procurando pela string VXML, mas agora entrando no capítulo "Configuring an H.323 Gateway for System Remote Access by using hairpinning". Para facilitar, vou criar as duas dial-peers (de entrada e saída) em uma só. Posso fazer isso agora porque ambas são do tipo voip, diferente do caso anterior, onde a 4444 era pots e as outras duas eram voip.

application
 service mva http://x.x.x.x:8080/ccmivr/pages/IVRMainpage.vxml

dial-peer voice 5010 voip
 service mva                       ! -- Chama a aplicação
 destination-pattern 5010          ! -- MVA DN (saída para o CUCM)
 session target ipv4:<IP Publisher>
 incoming called-number 4444       ! -- MVA DID (entrada do CUCM   
                                     para a aplicação)
 dtmf-relay h245-alphanumeric
 codec g711ulaw
 no vad 

Nesse caso, como faremos a chamada vai entrar por uma dial-peer voip H.323 do CUCM, e sair para o CUCM através de outra dial-peer voip H.323, é necessário habilitar o CUBE:

voice service voip


 allow-connection h323 to h323


2. Troncos R2-Digital 
Se por acaso você está lendo isso pensando em implantar em alguma localidade no Brasil, note que isso não funciona muito bem com R2-Digital. Se o tronco for R2, você tem que fazer Call Hairpinning! E aí, aquele esquema de ele já reconhecer o número de origem e pedir o PIN diretamente não vai funcionar... O que eu faço nesses casos é configurar o remote destination como sendo o ramal do usuário. Sim, você vai perder a funcionalidade do Mobile Connect, mas caso o cliente queira apenas o MVA, essa é uma boa saída. Aí como remote destination o cara digita o ramal, e depois digita o PIN. Ou troque o seu link para ISDN, que é muito mais rápido, muito mais fácil de configurar e fazer troubleshooting, e até onde eu sei, é o mesmo preço. Vamos acabar com essa merda de R2 no Brasil! ahahuahuah

Mobile Connect

Para quebrar um pouco essa sequencia de posts sobre Messaging, vou falar hoje sobre o Mobile Connect, ou Single Number Reach. O que essa feature faz é o seguinte:
Digamos que eu tenha um IP Phone com ramal 5001 e um celular de número (11) 9999-8888. Mas eu sou uma pessoa que vive fora do escritório, e além disso o meu celular é pessoal, e não quero ficar divulgando para os clientes. O único número que os clientes possuem é o meu ramal. Mas eu quero que quando alguém ligar nele, a chamada toque ao mesmo tempo no meu celular, de forma que eu possa atendê-la em qualquer um dos dois dispositivos. Além disso, ninguém na empresa sabe o número do meu celular, e eu nem quero que saibam para que não fiquem me ligando direto. Então eu quero que quando eu ligar para algum ramal da empresa, apareça no telefone como Caller ID o meu ramal com o meu nome, e não o número do meu celular.
É para isso que serve o Mobile Connect.

Para configurar é bem fácil:

1. End User
Primeiramente é preciso criar um End User e habilitar para ele a opção Enable Mobility. Cada usuário habilitado com essa feature consumirá 4 DLUs (licenças), a não ser que você associe o usuário a um telefone através do campo Primary User Device. Nesse caso, cada usuário consumirá 2 DLUs.
Outro parâmetro a ser configurado aqui é o Maximum Wait Time for Desk Pickup. Quando você estiver com uma chamada ativa do seu celular para um ramal interno (ou de um ramal interno para o seu celular), e você desligar a chamada no celular, o seu deskphone vai mostrar a ligação em espera por x milissegundos, e te dará a possibilidade de recuperar a chamada. Dessa forma, você pode transferir a chamada do celular para o deskphone. Esse tempo de x milissegundos que a chamada ficará em espera no IP Phone é configurado através desse parâmetro.

2. Remote Destination Profile
Em Device >> Device Settings >> Remote Destination Profile, teremos que criar um novo profile para esse usuário. O importante aqui é associarmos o User ID e atribuirmos a Calling Search Space e a Rerouting Calling Search Space.
A Calling Search Space vai definir a permissão de discagem do seu profile, e será utilizada quando formos falar de Mobile Voice Access (provavelmente no próximo post). Porém, ela pode também ser utilizada para chegar nos ramais quando você ligar a partir do celular. Por padrão, quando você ligar do seu celular para um ramal da empresa, a Calling Search Space utilizada será a do Gateway. Mas se você mudar o Service Parameter Inbound Calling Search Space for Remote Destination para "Remote Destination Profile + Line Calling Search Space", essa CSS em conjunto com a CSS da Line definirão a visibilidade do profile. Assim, você pode por exemplo dar a essa CSS a permissão de chegar apenas a uma Translation Pattern XXXX, e não diretamente aos ramais. E nessa Translation, podemos ter uma regra de transformation no número de origem, por exemplo, "Use Calling Party's External Phone Number Mask". Fazendo isso, podemos manipular a forma que o ANI será apresentado aos telefones quando você ligar a partir do seu celular.
Bom, e quando alguém ligar no seu ramal e o sistema enviar a chamada para o seu celular, é a Rerouting Calling Search Space que vai definir a saída para ele. Ou seja, essa CSS tem que ter acesso a uma Route Pattern para o seu celular. Caso você esteja usando Local Route Groups, é melhor criar uma Route Pattern específica para os celulares, apontando para o Gateway local, e criar uma Calling Search Space específica. Senão a chamada vai sair pelo Voice Gateway do telefone que originou a chamada.

Depois que criar o Remote Destination Profile, adicione um DN com o mesmo número e partition (ou seja, um shared line) com o seu ramal de mesa. No caso do nosso exemplo, 5001.

3. Remote Destination
Na própria tela de configuração do Remote Destination Profile, vá em Add a New Remote Destination para criar um... Remote Destination. Em Destination Number vamos colocar o número do celular da forma que ele vem da PSTN, por exemplo 1199998888 (depois falarei mais sobre isso). Answer Too Soon Timer é o tempo em ms que tem que passar antes de o celular atender, porque por exemplo, vamos supor que a chamada vai para o seu celular, mas ele está fora de área e cai na caixa postal. Nesse caso, ele nem vai tocar... a mensagem da caixa postal ja atende imediatamente. Aí o sistema não faz a transferência porque o celular atende antes do tempo estipulado nesse parâmetro.  E Answer Too Late Timer é o contrário, ele define em ms quanto tempo o seu celular vai ficar tocando até que o sistema derrube a conexão. Se esse tempo for muito grande, pode ocorrer de o celular desviar para a caixa postal dele, e não é isso que queremos. Depois que esse tempo é expirado, o celular parará de tocar, e o seu deskphone continuará tocando até o tempo de No Answer dele, e dessa forma a chamada é desviada para o seu Voice Mail corporativo, e não para o do seu celular.
Em Ring Schedule é possível definir os dias e horários que o seu celular vai estar ativo para receber as chamadas. Você pode não querer receber chamadas durante o final de semana, por exemplo.
E no quadro When receiving a call during the above ring schedule, podemos definir algumas políticas baseadas em Access Lists (Call Routing >> Class of Control >> Access Lists). Com isso conseguimos definir números que desviam para o celular, e números que não desviam. Por exemplo, se eu quiser que nenhum número de Campinas (DDD 19) toque no meu celular, eu crio uma nova Access List do tipo Blocked, e coloco como Filter Mask "Directory Number" e DN Mask "19!". Depois eu aplico essa Access List dentro do Remote Destination, no campo "Do not ring this destination if caller is in".
Dentro de Remote Destination também, é importante marcar os campos Mobile Phone e Enable Mobile Connect. E marque também a opção Line Association.

4. Application Dial Rules
Agora quando ligarem para o seu ramal 5001, o sistema tentará encaminhar a chamada para o número 1199998888. Mas eventualmente esse número pode não ser "discável" pelo CUCM. Precisamos formatar ele, para que dê match em uma Route Pattern. Fazemos isso em Call Routing >> Dial Rules >> Application Dial Rules. Para o exemplo vamos criar uma com os parâmetros:
Number begins with: 11
Number of Digits: 10
Total Digits to be Removed: 2
Prefix With Pattern: 0
O resultado disso será a string 099998888, que dará match na nossa Route Pattern.

4. Service Parameters
Já está quase pronto. Só precisamos ajustar dois Service Parameters (ou não, dependendo do caso), que são o Matching Caller ID with Remote Destination e o Number of Digits for Caller ID Partial Match. Se o primeiro estiver como Complete Match, o segundo é indiferente.
O que esses parâmetros fazem é definir a quantidade de dígios do Remote Destination que será utilizada para dar match com o número do seu celular. Por exemplo, digamos que a PSTN esteja enviando para nós como ANI o número 1199998888. Como o nosso Remote Destination já está como 1199998888, podemos deixar como Complete Match. Mas se configurássemos o Remote Destination como +551199998888, teriamos que deixar como Partial Match, e dar match em 10 dígitos. Assim, os 10 digitos do ANI dariam match com os 10 últimos do Remote Destination.
Mas aqui está a confusão, pelos testes que eu fiz, esses parâmetros não alteram a quantidades de dígitos do ANI que eu vou ver... se a operadora me mandou 10 dígitos, eu vou ter que dar o match desses 10. Então como a PSTN mandou 1199998888, eu nunca poderia ter um remote destination menor, tipo 99998888. Nunca daria match, por mais que eu mude os meus parâmetros no Service Parameters. A documentação da Cisco é muito confusa sobre esses parâmetros, então eu utilizo essa regra: Sempre considere o ANI completo para o match... se não der, mude o ANI através de uma translation-profile no gateway. Pensando dessa forma, não tive mais problemas.

5. Softkey Template
Por fim, vamos criar uma nova Softkey Template incluindo a tecla Mobility em Idle e Connected. Em idle a tecla servirá para você manualmente ligar ou desligar o Mobile Connect. E em Connected servirá para você transferir uma chamada ativa para o seu celular, sem interromper a chamada.

E isso é tudo o que temos para ver em Mobile Connect. No próximo post falarei sobre Mobile Voice Access, ou DISA.

quarta-feira, 6 de junho de 2012

Unity Connection - Integração com o CME (SIP)

Seguindo a série de postagens sobre a integração dos sistemas de Voice Mail, agora vou falar sobre uma não muito comum no dia a dia: Call Manager Express com Unity Connection via SIP.

Primeiramente, vamos configurar a Unity Connection de uma forma bem parecida com a que fazemos para integrá-la ao CUCM via SIP:
1. Criar um novo Phone System chamado, por exemplo, CUCME
2. Adicionar um Port Group a esse Phone System, escolhendo como Port Group Template a opção SIP. Deixe a autenticação desabilitada, e em Contact Line Name, coloque o número do Piloto, por exemplo, 3600. Em IP Address, coloque o IP do CME
3. Em Edit >> Servers, preencher as informações do CME (IP e portas)
4. Adicionar as Portas, especificando a quantidade baseando no que você tem de licença
5. Crie um novo User Template utilizando esse Phone System. E crie os usuários baseando neste template.

Agora todo o resto do trabalho é no CME. Então primeiro vamos criar a dial-peer para o Voice Mail:

dial-peer voice 3600 voip
 destination-pattern 3600
 session protocol sipv2
 session target ipv4:<IP da Unity Connection>
 dtmf-relay rtp-nte
 codec g711ulaw

E para o MWI funcionar:

sip-ua
 mwi-server ipv4:<IP da Unity Connection> unsolicited
telephony-services
 voicemail 3600  ! -- Define o Pilot do Voice Mail
 mwi relay

Agora um detalhe importante. Para que o Call Forward e Call Transfer funcionem, precisamos desabilitar do SIP Trunk as mensagens 302 "Moved Temporary" e REFER, que são habilitadas por default. Portanto, os seguintes comandos são necessários:

voice service voip
 no supplementary-service sip moved-temporary
 no supplementary-service sip refer

E caso você tenha registrado no CME telefones SIP utilizando a Unity Connection, tem mais uma coisa pra fazer para que o MWI funcione:

voice register global
 voicemail 3600 ! -- Define o Pilot do Voice Mail
 mwi

voice register dn 1
 mwi

No caso de SIP Phones também, é preciso definir o dtmf como rtp-nte. Se usar o sip-notify (como é com a Unity Express), não funciona!

E é isso aí, bem facinho! :)

terça-feira, 5 de junho de 2012

Unity Express - Integração com o CUCM

No post anterior eu falei sobre as integrações do CUCM com a Unity Connection (SCCP e SIP). Hoje eu vou abordar a integração entre a Unity Express (CUE) e o CUCM, que utiliza o protocolo JTAPI.

Primeiramente, precisamos configurar o módulo da CUE. Recomendo fazer isso no começo da prova, porque vai precisar dar vários reboots. E cada reboot na CUE demooooora... Então já no começo da prova, se você ver que tem CUE na parte de messaging, já seta o IP e inicializa o módulo:
interface Service-Engine 0/0
 ip unnumbered interface vlanXXX
 ! -- interface da vlan de voz ou da subinterface da vlan de voz
 service-module ip address 192.168.10.2 255.255.255.0 
 ! -- IP do módulo
 service-module ip default-gateway 192.168.10.1  
 ! -- Default Gateway do módulo
 no shut

ip route 192.168.10.2 255.255.255.255 Service-Engine0/0
! -- É preciso criar uma rota estática para o módulo com o IP configurado acima e máscara fechada

Feito isso, entre na console do módulo (no modo enable):
service-module Service-Engine0/0 session
Obs: Para sair da console do módulo e voltar para o roteador, "Ctrl + Shift + 6" e depois "x". Se tiver sessão presa e você não estiver conseguindo se logar no módulo, service-module Service-Engine0/0 session clear

Logo que entrar, vai ver que ele estará inicializando... pode sentar e esperar (ou melhor, ir fazendo outras coisas do Lab). Quando ele terminar de subir, vai entrar num wizard, onde você vai definir o hostname, domínio, NTP, DNS, Time Zone, e usuário/senha de administrador.
Depois disso, dê o comando show software licenses e veja se na licença instalada, o Application mode é CCM. Se estiver como CME, você vai ter que instalar uma nova licença, que provavelmente estará disponível em um FTP:
software install clean ftp://x.x.x.x/cue-vm-license_12mbx_ccm_7.0.1.pkg username XXX password XXX
Outra coisa boa de se fazer antes de começar a mexer na CUE é:
offline
restore factory defaults
Isso vai apagar toda configuração que por acaso exista na CUE (por exemplo, resquicios do lab de um outro candidato). A CUE é muito chata, qualquer coisa é motivo para ela não funcionar... então esse procedimento é altamente recomendável! Vai te tomar um tempo, porque ela vai ter que reiniciar e tal, por isso é bom já ir fazendo no começo do lab... enquanto ela reinicia, você vai fazendo outras coisas.

Agora, antes de continuarmos na CUE, vamos configurar as coisas necessárias no CUCM. Basicamente precisaremos criar um CTI Route Point, CTI Ports e um Application User.
1. Criar 2 CTI Ports (ou a quantidade que o enunciado pedir). Cada CTI Port vai ter que ter um ramal associado.
2. Criar 1 CTI Route Point, que também terá um ramal associado. Esse ramal será o seu Voice Mail Pilot.
3. Criar um Voice Mail Pilot (Voice Mail >> Voice Mail Pilot) apontando para o número que você configurou no CTI RP
4. Criar um Voice Mail Profile apontando esse Voice Mail Pilot
5. Criar um application user no grupo Standard CTI Enabled, e associar as CTI Ports e CTI Route Points.
6. Criar End Users com Device ou Profile associados e Primary Extension preenchido. Serão os usuários que importaremos para a CUE mais pra frente
7. Alterar o Voice Mail Profile das lines e configurar o forward no answer e forward busy dos ramais para o voice mail.

Pronto, tudo certo no CUCM! Agora vamos voltar para a CUE. Acesse o IP dela a partir de um browser. O primeiro acesso você vai cair num outro Wizard, agora para configurar a integração. No wizard, você passará pelos passos:
1. Informações do CUCM (IP; usuário e senha do ccmadmin; usuário e senha do JTAPI, que é o application user que você criou agora a pouco)
2. Import Users. Escreva o login dos usuários que você criou anteriormente, e importe eles, já criando as respectivas caixas postais.
3. Salve a configuração e reinicie o módulo (denovo!)

Já está tudo pronto, exceto por um detalhe... a Unity Express só fala G.711. E se um telefone tentar falar com ela com G.729? Precisaremos de um transcoder para isso. No roteador onde está a CUE, configure um transcoder, e adicione ao MRGL dos CTI Ports e CTI Route Point.

Mais um detalhe... e se por exemplo a CUE estiver no site BR2, e a prova pedir para que ela continue funcionando quando o site entra em SRST (inclusive o MWI). Aí precisaremos de configurar mais umas coisas no roteador.

dial-peer voice 3600 voip ! -- Dial peer para o Voice Mail
 destination-pattern 3600
 session protocol sipv2
 session target ipv4:192.168.10.2 ! -- IP da CUE
 dtmf-relay sip-notify
 codec g711ulaw

call-manager-fallback ! -- Configuração do SRST
 max-dn X
 max-ephone X
 ip source-address 192.168.10.1
 voicemail 3600
 call-forward busy 3600
 call-forward noan 3600 timeout 12
 mwi relay

sip-ua
 mwi-server ipv4:192.168.10.2 unsolicited

E na CUE, garanta que o MWI está configurado como Unsolicited Notify, que é a forma como o CUCM trabalha. O SIP Notify é só com o CME. Por isso que temos que configurar o mwi-server como unsolicited no sip-ua.