Mostrando postagens com marcador UCCX. Mostrar todas as postagens
Mostrando postagens com marcador UCCX. Mostrar todas as postagens

quarta-feira, 29 de janeiro de 2014

UCCX Scripting: Mandando um e-mail quando o cliente desiste de esperar na fila

Olá pessoal!

Hoje vou fazer mais um post sobre UCCX Scripting, que teve origem em uma demanda real de um cliente. Basicamente o que esse cliente queria era que quando alguém estivesse na sua fila do CCX e, cansado de esperar, desligasse a chamada, um e-mail fosse enviado para o supervisor do atendimento informando o número do cliente, para que a ligação pudesse ser retornada depois.

Hmmm, tricky, heim? Pensei eu com os meus botões... "como vou fazer o script continuar o fluxo quando o cliente encerra a chamada?"

Foi aí que, procurando referências na Internet, cheguei a um exception chamado ContactInactiveException. Esse Exception consegue capturar o fluxo justamente quando o cliente do outro lado da linha encerra a ligação. E com ele, desenvolvi esse script:

/* Variáveis */
String ani
String csqID = "Fila"
Prompt pEspera = P[espera.wav]
Contact Email

ani = Get Call Contact Info (Calling Number)
Select Resource (csqID)
  Queued
    On Exception (ContactInactiveException) Goto ABANDONED
    <LABEL: QUEUE>
    Play Prompt (pEspera)
    Goto QUEUE

<LABEL: ABANDONED>
Email = Create eMail("Chamada perdida de "+ani)
Send eMail(bnonogaki@ngk.com)

E o script no editor ficou assim:



Com isso, quando o cliente desligava a chamada durante a fila, um e-mail era enviado para bnonogaki@ngk.com com o conteúdo "Chamada perdida de <ANI>"

É claro que para isso funcionar, você precisa de ter o licenciamento Premium do CCX (que tem suporte a e-mail), configurar o SMTP no servidor, e permitir o SMTP Relay do CCX no Exchange.

Um scriptzinho simples, e bastante útil... você pode pegar o ANI e alimentar uma campanha de outbound dialer, por exemplo. Aliás, outbound dialer seria um belo tópico para um post futuro! :)

sexta-feira, 17 de janeiro de 2014

UCCX Scripting: Buscando usuarios no Corporate Directory

Esse é o primeiro post da série de CCX Scripting. Algumas coisas bacanas que podemos fazer com o CCX além de pegar uma chamada e encaminhar para uma fila. Esse post surgiu de uma necessidade real em um cliente, e achei a solução bastante interessante. Fica a dica para quem também estiver precisando.

Basicamente o cliente queria que quando uma chamada entrasse no Call Center, o sistema identificasse o nome da pessoa pelo ramal, e exibisse na tela do agente. O jeito que encontrei para fazer isso é buscar o ramal no Corporate Directory do CUCM, encontrando o nome do usuário. Obvio que a premissa para isso é que os End Users do CUCM estejam propriamente configurados com o ramal certo. Geralmente em implantações com o LDAP integrado, isso já vem certinho.

Segue a lógica de programação abaixo:

/* Variáveis */
Document xmlCorpDirectory
String dirURLCorpDir
String callingNumber
String callingName

Set dirURLCorpDir = "http://X.X.X.X:8080/ccmcip/xmldirectorylist.jsp?n="
callingNumber = Get Call Contact Info (Calling Number)

if ((callingNumber != null && callingNumber.trim() != "")) Then
   xmlCorpDirectory = Create XML Document(URL[dirURLCorpDir + callingNumber])
   callingName = Get XML Document Data (xmlCorpDirectory, "//Name")
   if ((callingName != null && callingName.trim() != "") Then
      /* Continue */
   else
      Set callingName = "Nao identificado"
else
   Set callingName = "Nao identificado"

E como ficou no CCX Editor:

sábado, 7 de setembro de 2013

IPPA (IP Phone Agent)

O IPPA (IP Phone Agent) é uma aplicação que roda no IP Phone, e é uma ferramenta bastante útil na prova, principalmente se as suas questões de CCX precisarem de agentes e filas. Isso porque provavelmente não vai ter um CAD (Cisco Agent Desktop) lá para você colocar um agente em Ready/Not Ready para atender a fila.

Esse serviço funciona como o CAD: o agente pode fazer o Login/Logout, mudar seu status para Ready/Not Ready, ver estatísticas da fila, etc. Tudo através da tela do telefone. É super importante que você saiba como configurar, e principalmente, onde pegar as referências para essa configuração. Afinal, como veremos adiante, você precisa configurar um Phone Service com uma URL, e não faz sentido você decorá-la.

1. Configuração do End User

Depois de você ter o CUCM e o CCX integrados, a primeira coisa que devemos fazer é configurar um usuário como Agente do Contact Center. Para isso, basta entrarmos na configuração do End User, e preencher o campo IPCC Extension:


Aqui cabe uma observação: Como os labs trabalham com Snapshots de VMWare, pode acontecer de o seu CCX estar integrado, mas o campo IPCC Extension não existir. Isso ocorria comigo às vezes nos labs da IP Expert. Se isso acontecer, vale a pena saber como resolver.
Entre na página de documentações da Cisco, que você terá acesso no lab, e navegue em:


Products >> Voice and Unified Communications >> Customer Collaboration >> Cisco Unified Contact Center Products >> Cisco Unified Contact Center Express >> Configuration Examples and TechNotes

Busque por "Extension", e ache o link ICD Extension Option Does Not Appear on the Cisco CallManager Global Directory User Page. Dentro do documento, faça uma busca por "run sql", e você encontrará o seguinte comando para ser executado na CLI do Publisher:



run sql update processconfig set paramvalue="T" where paramname like 'IAQInstalledFlag'


2. Configurando o IPPA

Para configurar o IPPA, entre na página de documentações da Cisco, que você terá acesso no lab, e navegue em:

Products >> Voice and Unified Communications >> Customer Collaboration >> Cisco Unified Contact Center Products >> Cisco Unified Contact Center Express >> Configuration Examples and TechNotes

Busque por "Login", e ache o link Configure a "One Button Login" for IP Phone Agents. Esse link tem o procedimento para configurar o IPPA Normal, e o IPPA com One Button Login, que falarei mais pra frente. Para configurar o IPPA normal, basta criar um novo Phone Service no CUCM: Device >> Device Settings >> Phone Services, da seguinte forma:


A Service URL você pode encontrar no documento acima, no capítulo Procedure. Essa URL é:

http://xxx.xxx.xxx.xxx:yyyy/ipphone/jsp/sciphonexml/IPAgentInitial.jsp



Onde xxx.xxx.xxx.xxx é o IP do CCX e yyyy é a porta, que no caso do IPCC Express, é a 6293.

Depois de associar o serviço no telefone, você poderá vê-lo dentre os serviços do aparelho. Ao ingressar a aplicação, ela pedirá o login, ramal e senha. Assim como também é pedido no CAD:



3. Configurando o One-Button Login


Para evitar de o usuário ter que digitar essas informações (que convenhamos, é bem trabalhosa usando o teclado do telefone), podemos configurar o One-Button Login, onde o usuário, ao ingressar o serviço, já é logado diretamente na aplicação, sem ter que inputar esses dados. O procedimento para isso está no mesmo documento. Procure por "AgentLogin", e ache a URL abaixo:

http://xxx.xxx.xxx.xx:yyyy/ipphone/jsp/sciphonexml/IPAgentLogin.jsp

O IP e porta seguem as mesmas regras acima. IP do CCX e porta 6293.

Crie o serviço exatamente como o procedimento do IPPA normal, mas usando essa outra URL.

E agora precisaremos criar três parâmetros nessa aplicação, que serão: Ext, Pwd e ID. Clique em New Parameter, e configure os parâmetros conforme abaixo (da mesma forma para as 3):


O serviço ficará assim:



Agora basta fazermos o Subscribe do serviço no telefone. Mas veja que teremos alguns campos para preencher:


Agora quando o usuário entrar nesse serviço, ele já fará o login automaticamente, sem a necessidade de entrar o ramal, usuário e senha.

segunda-feira, 2 de setembro de 2013

Gravando áudio para os seus prompts

Uma das coisas que a prova pode te pedir em uma questão de CCX é a personalização de um fluxo de atendimento. E consequentemente, você terá que gravar algum áudio (sim, com a sua lindíssima voz falando em inglês). Existem algumas formas de você fazer isso, como por exemplo, criando um Call Handler na Unity, e editando o greeting através de um telefone (através daquela interface Java horrível, que só da pau). Mas a mais fácil e rápida para mim é pelo próprio UCCX. Vamos ver como!

Primeiramente, abra o CCX Script Editor. Crie apenas uma variável do tipo Document chamada rec:
 

E depois disso, crie o seu script assim:


Isso mesmo. Simples assim!
Lembre-se que os steps Accept e Terminate estão dentro do menu Contact, e via de regra, todo script seu deve começar com um Accept e terminar com um Terminate. E o Recording está dentro de Media.

Ao configurar o Recording, você deve basicamente escolher qual será a variável de destino da gravação e colocar em Result Document:


E recomendo mudar o Duration para 30 segundos, na aba Filter, no caso de você ter que gravar um prompt muito grande:


Feito isso, crie uma nova Application referenciando o seu script e configure um Trigger qualquer para ela (obviamente, que não dê conflito com o seu Dial Plan):


Agora basta pegar o seu telefone e ligar para o Trigger. Você ouvirá um beep, e depois disso o áudio já estará sendo gravado. Ao terminar, entre na pasta C:\Program Files\wfavvid\temp do IPCC, e o arquivo WAV estará lá. Ele vai salvar 2 arquivos... o que tiver tamanho maior é o que deve ser usado:


Renomeie o arquivo e ele já estará pronto para ser "uppado" nos prompts para ser usado em outra aplicação. Dessa forma, você não vai gastar nem 3 minutos para gravar um áudio personalizado.

Dicas da vida real

Na vida real evitamos usar esse tipo de mecanismo, pois ao gravar um áudio para um Call Center, a pessoa pode depois processar a empresa exigindo direitos de uso sobre a voz e tal. Ouvi dizer... não sei se é verdade. Em todo caso, recomenda-se a utilização de empresas ou softwares especializados para isso. Se quiser fazer um teste, recomendo o demo do Loquendo, que é free e bastante bom! Se você souber de algum outro, poste nos comentários!

E para edição de áudio, tem um ótimo programa (free) chamado GoldWave. Uma das coisas boas que ele faz é converter qualquer arquivo de áudio para o padrão utilizado pelos produtos da Cisco (CUCM MoH, CCX, Unity Connection). É só abrir o áudio com esse programa, e salvar como Wave, uLaw, 8000 Hz, 64 kbps, mono:




domingo, 28 de julho de 2013

UCCX - Integração com o CUCM

Reparei que nunca fiz nenhum post sobre UCCX no Blog. Falha minha, pois é um tópico que tem muito a ser explorado! Posso cometer um engano ao dizer isso, mas na prova geralmente a integração já vem pronta. Isso não quer dizer que você não precisa saber fazer!!! Pelo contrário, como sabemos, você deve desconfiar de tudo que já vem pronto para você. Então, nesse primeiro post sobre UCCX abordarei sobre a integração com o CUCM, para então poder entrar em outros pontos como configurações de fila e scripts em posts futuros.

Quando terminamos de instalar o CCX pela primeira vez (lembrando que estamos falando aqui da versão 7.0, embora na 8.x não mude tanta coisa, apesar de virar um sistema baseado em Linux), a primeira coisa a fazer é ingressar na sua página de configuração WEB (http://x.x.x.x/appadmin). O usuário inicial é Administrator, e senha ciscocisco. Feito isso, seguiremos os passos abaixo:

1. Escolha o seu tipo de deployment. No caso da prova, utilizaremos o Single Node. Em casos de deployment com High Availability, utilizaríamos First Node e Add to Cluster.


2. Coloque as informações do seu CUCM:



3. Importe a licença:



4. Depois de validar as licenças e ativar os serviços, você deverá colocar as informações de integração entre o CUCM e o CCX. Essa integração utiliza 3 usuários:

Usuário AXL: Pode ser o mesmo que você usa para se logar no CUCM, ou crie um novo Application User no CUCM com permissão de AXL.



Usuário JTAPI: Usuário para se comunicar via CTI com o CUCM. Não é necessário criar manualmente o usuário no CUCM. Crie aqui no CCX, que automaticamente vai aparecer lá nos seus Application Users do Call Manager.


Usuário RmCm: Usuário para fazer o controle dos telefones. Não é necessário criar manualmente o usuário no CUCM. Crie aqui no CCX, que automaticamente vai aparecer lá nos seus Application Users do Call Manager. Lembre-se que quando for configurar um telefone para um agente, esse telefone deve estar associado ao usuário RmCm no CUCM, e essa associação deve ser feita manualmente.


Nessa tela também você deverá configurar o NTP Server, que pode ser o próprio CUCM.

Note que após esse passo, os novos usuários estarão listados no CUCM. Não precisa fazer nenhuma config nesses caras por enquanto, exceto a associação dos telefones no RmCm, como disse anteriormente!


5. Seguindo com o CCX, escolha a quantidade de sessões simultâneas de Historical Reports, Gravações e Outbound Dialer o sistema vai suportar (geralmente nada disso cai na prova), e o Codec (que geralmente é G711). Note que o CCX só suporta 1 Codec! Ou seja, se alguém tentar ligar para o CCX usando G729, vamos precisar de um Transcoder aqui.


6. Escolha a linguagem default do sistema:


7. E por fim o End User do CUCM que será usado para acessar a tela de administração do CCX. Tem que ser End User, infelizmente, e não Application User. Ou seja, se você tiver um CUCM integrado com o AD, esse usuário tem que estar no AD. E se por algum motivo ele for apagado, você perde acesso ao CCX.


8. Pronto, a integração foi feita e você pode fechar o Browser. A partir desse momento, utilize o usuário criado no passo 7 para acessar o sistema.


Ok, como eu disse, provavelmente na prova você não vai precisar fazer nada disso. Já vem tudo pronto! Mas é bom sempre ficar atento aos pontos críticos dessa integração, como os Applications Users e suas senhas (se algo não estiver funcionando, pode ser algum problema nesses usuários, por exemplo), o codec e tal.

Agora vamos criar as CTI Ports e CTI Route Points, que servirão para o CUCM conseguir se comunicar com o CCX. Isso também geralmente vem pronto, mas pode ser que você tenha que fazer algum troubleshooting nessa integração, ou mesmo apagar tudo e criar de novo... Portanto, é importante estar bem familiarizado com isso.

Primeiramente, vamos lembrar que qualquer uma dessas configurações devem ser feitas SEMPRE no CCX. Se tiver que mudar, apagar ou criar algo, é sempre pelo CCX. Este por sua vez fará a atualização das coisas no CUCM... Nunca mude as entidades diretamente no CUCM, ou você pode começar a ter problemas de sincronia.

Vamos lá... a primeira coisa que precisamos criar é um Call Control Group no CCX. Ao criá-lo, novas CTI Ports serão criadas automaticamente no Call Manager. Para isso, entre no CCX com o login definido no passo 7, e navegue até Subsystems >> Cisco Unified CM Telephony >> Call Control Group, e crie um novo. Dentre outras informações, aqui precisamos definir um ID para o grupo no CCX, a quantidade de portas (repare que lá em cima ele fala quantas licenças você tem), o ramal da primeira porta (as demais seguirão sequencialmente a partir desse número), e um prefixo, que vai servir para formar o nome do device no CUCM. Podemos definir outras coisas também como Device Pool (importante para configurar o Codec que será usado nas chamadas para o CCX), MRGL (importante no caso de precisarmos de Transcoder nas chamadas), Partition e Calling Search Space. Essas informações ele vai puxar tudo do CUCM através daquele usuário AXL que configuramos lá em cima.


Veja no CUCM as nossas 12 portas criadas. Se precisarmos alterar algo, como Device Pool, MRGL, faça tudo através do CCX:


Agora precisamos de criar um Trigger no CCX, que vai ser um CTI Route Point no CUCM. Esse Trigger será o ramal para onde os usuário vão ligar para chegar em uma Aplicação do CCX. Então antes de criar o Trigger, criaremos um Application, em Applications >> Application Management >> Add New. Como o foco do post não é a criação de Scripts, vamos utilizar um Script default que já vem no sistema:


Criamos uma aplicação chamada App01 que chama o Script icd.aef. Agora precisamos criar o Trigger, informando qual será o Ramal que estará associado a essa aplicação. Para isso, clicaremos em Add new trigger.

Aqui configuraremos, dentre outras coisas, o número do ramal, a língua, um nome (que será o nome do CTI Route Point), um Call Control Group (que usaremos aquele que criamos acima), Device Pool, Partition, Calling Search Space, etc.


Veja que ao criar esse Trigger, um novo CTI Route Point é criado no CUCM:


E veja também que esse CTI Route Point e os CTI Ports estão associados ao Application User jtapi_1. Tudo foi feito automaticamente:


Com isso, se um usuário ligar no 2000, o CUCM vai invocar uma das CTI Ports para chegar no CCX. Chegando no CCX, a aplicação App01 será invocada, utilizando o script icd.aef.

Essa é a integração básica entre CCX e CUCM. Se algo não estiver funcionando, a primeira coisa que podemos fazer é checar a sincronia e forçar a correção, indo em Subsystems >> Cisco Unified CM Telephony >> Data Resync.

Veja o que acontece por exemplo se eu remover os CTI Ports e CTI Route Points do usuário jtapi_1.


Ao rodar o Data Check, o CCX percebe que a associação não está feita. E ao rodar o Sync, a associação é feita novamente, corrigindo o problema:


Esse foi o meu primeiro post de CCX, bem básico. A partir de agora eu começarei a postar mais coisas, principalmente relacionadas a Scripts.