Integre o Webex Contact Center com o ServiceNow (versão 1 — Legacy)
Pré-requisitos
O tamanho mínimo suportado para a interface do softphone é de 500 px. Qualquer valor menor que 500 px pode resultar em problemas de exibição ou funcionalidade.
Antes de integrar o Webex Contact Center com o console ServiceNow CRM, certifique-se de ter o seguinte:
-
Acesso ao Webex Contact Center.
-
Acesso do administrador ao Control Hub em https://admin.webex.com e ao Webex Contact Center. Management Portal Os URLs do Management Portal são específicos para sua região.
-
Um agente com acesso ao Desktop. O URL do Desktop é específico para sua região.
-
Acesso do agente ao seguinte domínio que é adicionado à Lista de Políticas de Segurança de Conteúdo Permitidas:
-
*.service-now.com
Para obter mais informações sobre como definir a lista permitida, consulte o artigo Configurações de segurança do Webex Contact Center.
-
-
Uma conta do portal do desenvolvedor ServiceNow. Para criar uma conta, acesse o portal do desenvolvedor do ServiceNow em https://developer.servicenow.com/dev.do e clique em Inscrever-se e começar a criar.
-
Acesse os seguintes arquivos em https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow:
-
Conjunto de atualizações do ServiceNow (XML)
-
Layout de desktop do Contact Center ServiceNow (JSON)
-
- As edições do ServiceNow suportadas pelo Webex Contact Center são Vancouver, Utah, Tóquio, Washington e Xanadu. Para obter mais informações, consulte Integração do Webex Contact Center com o ServiceNow.
Siga um dos dois métodos abaixo:
- Para instâncias de desenvolvedor, recomendamos seguir as etapas do guia de instâncias do desenvolvedor.
- Se você possui uma instância licenciada pela empresa, siga as diretrizes para instâncias licenciadas pela empresa.
Não recomendamos misturar o aplicativo licenciado corporativo com instâncias de sandbox para desenvolvedores.
Canais digitais como chat e e-mail não são compatíveis com conectores de CRM. Isso se aplica a todas as integrações de CRM usando esses conectores. Planeje adequadamente seus fluxos de trabalho de implantação e engajamento do cliente.
As seções a seguir descrevem as etapas para instalar o conector ServiceNow para instâncias de desenvolvedores.
| 1 |
Faça login na sua conta do portal do desenvolvedor do ServiceNow e abra o console administrativo. |
| 2 |
Na área Minha instância do menu Conta, clique em Começar a criar.
|
| 3 |
Na sua instância de desenvolvedor, no campo Navegador de filtros no canto superior esquerdo da janela, navegue até Plugins.
|
| 4 |
Procure o plugin Openframe que tem o título Openframe. Talvez seja necessário percorrer a lista.
|
| 5 |
Clique em Instalar para instalar o plug-in Openframe. |
| 6 |
Na caixa de diálogo Ativar plug-in, clique em Ativar.
|
| 7 |
Quando a ativação do plug-in for concluída, clique em Fechar e recarregar o formulário na caixa de diálogo Ativação do plug-in.
|
| 8 |
Para verificar a ativação do plug-in, no campo Navegador de filtros no canto superior esquerdo da janela, navegue até OpenFrame. |
| 9 |
Clique em Configurações e certifique-se de que o plug-in OpenFrame apareça na lista de configurações do OpenFrame.
|
| 1 |
Nome do arquivo: Webexcc-ServiceNow-Update-setv (X) .xml
|
| 2 |
Na sua instância do ServiceNow, no campo Navegador de filtros no canto superior esquerdo da janela, navegue até Conjuntos de atualizações do .
|
| 3 |
Clique no link Importar conjunto de atualizações do XML.
|
| 4 |
Clique em Escolher arquivo, selecione o arquivo XML do Conjunto de Atualizações do Sistema e clique em Carregar.
O conjunto de atualizações aparece na lista Conjuntos de atualizações recuperados e está no estado Carregado.
|
| 5 |
Na lista Conjuntos de Atualizações Recuperados, clique no Nome do Arquivo do Conjunto de Atualizações (link) para abrir o Conjunto de Atualizações.
|
| 6 |
No canto superior direito da janela, clique em Visualizar conjunto de atualizações para verificar se há problemas no conjunto de atualizações.
|
| 7 |
Clique em Fechar na caixa de diálogo Atualizar visualização do conjunto quando a visualização for concluída.
|
| 8 |
Clique em Confirmar conjunto de atualizações.
|
| 9 |
Clique em Fechar na caixa de diálogo Confirmação do Conjunto de Atualizações quando a confirmação do Conjunto de Atualizações for concluída.
|
| 1 |
No campo Navegador de filtros no canto superior esquerdo da janela, digite
|
| 2 |
Na página Propriedades do sistema, classifique as propriedades por data de atualização. Certifique-se de que você possa ver as seguintes propriedades do Webex Contact Center:
|
| 3 |
Clique agentdesktop_urlpara abrir a agentdesktop_url página de propriedades do sistema. |
| 4 |
No campo Valor, insira a URL para o Webex Contact Center Desktop de acordo com a região de operação.
|
| 5 |
Clique em Atualizar para salvar as alterações. |
| 6 |
(Opcional) Para alterar o nome da tabela de atividades, edite as propriedades webexccactivitytable conforme necessário. Na página Propriedades do sistema, clique em webexccactivitytable. Altere o campo Valor conforme necessário.
|
| 7 |
(Opcional) Adicione grupos de usuários das seguintes formas:
|
| 1 |
No campo , navegue até OpenFrame > Configurações.
|
| 2 |
Clique em Novo.
|
| 3 |
Insira as seguintes propriedades para o URL:
|
| 4 |
À direita do campo URL, clique no botão Bloquear e adicione
|
| 5 |
(Opcional) Selecione os grupos de usuários/agentes para atribuir a configuração.
|
| 6 |
Clique em Enviar. O URL aparece como um link.
|
| 7 |
Antes de tentar usar o telefone OpenFrame, certifique-se de carregar o arquivo JSON personalizado do ServiceNow Desktop Layout para o Webex Contact Center. Management Portal Para obter mais informações, consulte Configurar o layout do ServiceNow Desktop no Webex Contact Center. |
| 1 |
|
| 2 |
Atualize as propriedades no arquivo Desktop Layout, se necessário. |
| 3 |
Vá para o Webex Contact Center. Management Portal |
| 4 |
Na barra de Management Portal navegação, escolha .
|
| 5 |
Clique em Novo layout e insira os detalhes do layout da área de trabalho. |
| 6 |
Faça upload do arquivo JSON do ServiceNow Desktop Layout. |
| 7 |
Clique em Salvar para salvar a configuração. Agora você pode iniciar o Webex Contact Center Desktop no console ServiceNow. |
| 8 |
No campo Navegador de filtros, navegue até .
|
As seções a seguir descrevem as etapas para instalar o conector ServiceNow para instâncias corporativas licenciadas.
| 1 |
Faça login na sua conta do portal do desenvolvedor do ServiceNow e abra o console administrativo. |
| 2 |
Na área Minha instância do menu Conta, clique em Começar a criar.
|
| 3 |
Na sua instância de desenvolvedor, no campo Navegador de filtros no canto superior esquerdo da janela, navegue até Plugins.
|
| 4 |
Procure o plugin Openframe que tem o título Openframe. Talvez seja necessário percorrer a lista.
|
| 5 |
Clique em Instalar para instalar o plug-in Openframe. |
| 6 |
Na caixa de diálogo Ativar plug-in, clique em Ativar.
|
| 7 |
Quando a ativação do plug-in for concluída, clique em Fechar e recarregar o formulário na caixa de diálogo Ativação do plug-in.
|
| 8 |
Para verificar a ativação do plug-in, no campo Navegador de filtros no canto superior esquerdo da janela, navegue até OpenFrame. |
| 9 |
Clique em Configurações e certifique-se de que o plug-in OpenFrame apareça na lista de configurações do OpenFrame.
|
Instâncias com licenças corporativas podem instalar o aplicativo Webex Contact Center diretamente da ServiceNow Store.
|
|
| 1 |
No campo Navegador de filtros no canto superior esquerdo da janela, insira
|
| 2 |
Na página Propriedades do sistema, classifique as propriedades por data de atualização. Certifique-se de que você possa ver as seguintes propriedades do Webex Contact Center:
|
| 3 |
Clique agentdesktop_urlpara abrir a agentdesktop_url página de propriedades do sistema. |
| 4 |
No campo Valor, insira a URL para o Webex Contact Center Desktop de acordo com a região de operação.
|
| 5 |
Clique em Atualizar para salvar as alterações. |
| 6 |
(Opcional) Para alterar o nome da tabela de atividades, edite as propriedades x_caci_webexcc.webexccactivitytable conforme necessário.
|
| 7 |
(Opcional) Adicione grupos de usuários das seguintes formas:
|
| 1 |
No campo , navegue até OpenFrame > Configurações.
|
| 2 |
Clique em Novo.
|
| 3 |
Insira as seguintes propriedades para o URL:
|
| 4 |
À direita do campo URL, clique no botão Bloquear e adicione
|
| 5 |
(Opcional) Selecione os grupos de usuários/agentes para atribuir a configuração.
|
| 6 |
Clique em Enviar. O URL aparece como um link.
|
| 7 |
No campo Navegador de filtros, navegue até .
|
| 8 |
(Opcional) Na lista de grupos de usuários, mova os grupos de usuários que podem acessar o Webex Contact Center Desktop de Disponível para Selecionado. |
| 9 |
Antes de tentar usar o telefone OpenFrame, certifique-se de carregar o arquivo JSON personalizado do ServiceNow Desktop Layout para o Webex Contact Center. Management Portal Para obter mais informações, consulte Configurar o layout do ServiceNow Desktop no Webex Contact Center. |
| 1 |
|
| 2 |
Atualize as propriedades no arquivo Desktop Layout, se necessário. |
| 3 |
Vá para o Webex Contact Center. Management Portal |
| 4 |
Na barra de Management Portal navegação, escolha .
|
| 5 |
Clique em Novo layout e insira os detalhes do layout da área de trabalho. |
| 6 |
Faça upload do arquivo JSON do ServiceNow Desktop Layout. |
| 7 |
Clique em Salvar para salvar a configuração. Agora você pode iniciar o Webex Contact Center Desktop no console ServiceNow. |
| 8 |
No campo Navegador de filtros, navegue até .
|
| 1 |
No campo Navegador de filtros, navegue até Incidentes > Abrir incidente. |
| 2 |
Clique com o botão direito do mouse no campo do chamador e clique em Configurar dicionário.
|
| 3 |
Adicione atributos
Agora você pode começar a usar o Webex Contact Center Desktop no console ServiceNow. |
| 4 |
No campo Navegador de filtros, navegue até .
|
- Suportamos Agent Desktop o login usando somente os conectores WebRTC for Salesforce (SFDC) e Microsoft Dynamics (MS Dynamics).
- Atualmente, esse recurso é aplicável somente aos agentes.
Agent Desktopno console do ServiceNow
Antes de fazer chamadas externas, certifique-se de fazer o seguinte:
-
Crie o ponto de entrada externo e configure uma estratégia de ponto de entrada externo.
-
Habilite a ANI externa para o perfil do agente.
-
Defina a ANI de discagem externa para um mapeamento de número de discagem para ponto de entrada.
Para obter mais informações, consulte o capítulo Provisionamento do Guia de Cisco Webex Contact CenterConfiguração e Administração.
No campo Navegador de filtros, navegue até .
Para obter informações sobre como usar o Desktop, consulte a guia Agente na ajuda do Webex Contact Center.
Visão geral
Este artigo aborda várias maneiras de personalizar suas regras de negócios para o conector ServiceNow CRM. Ele detalha como você pode personalizar os casos de uso com base nas regras de negócios específicas do ServiceNow.
O cliente deve autogerenciar esses casos de uso no ServiceNow. A configuração é específica do ServiceNow e não do software ou experiência do Webex Contact Center.
Essa é uma documentação de referência para auxiliar na modificação das regras de negócios. Os desenvolvedores do ServiceNow criarão e gerenciarão as regras de negócios e fornecerão suporte.
A Cisco fornece apenas exemplos de documentação.
As seções a seguir fornecem detalhes sobre como configurar, ativar e gerenciar o widget de ações para instâncias corporativas e de desenvolvedores.
Confirme o widget Conjunto de atualizações para ações
Para as instâncias corporativas licenciadas, instale o aplicativo Webex Contact Center mais recente da loja ServiceNow.
Para configurar o widget Actions para as instâncias do desenvolvedor, baixe o arquivo XML mais recente do System Update Set disponível no repositório github neste local: https://github.com/CiscoDevNet/webex-contact-center-crm-integrations/tree/main/ServiceNow/ActionsWidget. O nome do arquivo é webexcc-servicenow-update-setv7-1-ActionsWidget.xml. Para confirmar o conjunto de atualizações para o widget Ações, consulte as etapas 2 a 9 em Confirmar o conjunto de atualizações.
Ativar widget de ações
Use a propriedade isWidgetDisplayEnabled para ativar o widget Actions. Você não deve modificar o valor dessa propriedade na seção sem cabeçalho do layout de desktop personalizado. A propriedade é sempre definida como falsa na seção sem cabeçalho do layout de desktop personalizado. Você deve atualizar o valor da propriedade somente na seção do painel do layout de desktop personalizado.
Depois de ativar o widget Ações no layout personalizado da área de trabalho, você pode realizar as seguintes ações:
- Gerenciar registros de atividades — Clique em Visualizar/Editar registro de atividade para ver a lista de registros de atividades associados ao chamador.
- Associar objetos do CRM — clique em Associar aos registros de atividades para adicionar objetos do CRM, como tipo de chamada (entrada ou saída), objeto de chamada, notas de chamada e assim por diante, ao registro da atividade.
- Gerenciar incidentes — clique em Criar incidente. Um novo incidente é criado com os detalhes do chamador pré-preenchidos. Você pode fazer as atualizações necessárias para o incidente. Você pode optar por modificar o tipo de registro de incidente para caso, módulo de RH e assim por diante, com base em seus requisitos. Para alterar o tipo de registro, modifique o valor da propriedade typeOfRecord na configuração do widget Actions. Por exemplo:
{ "comp": "md-tab-panel", "attributes": { "slot": "panel", "class": "widget-pane" }, "children": [ { "comp": "agentx-custom-desktop", "script": "https://cx-crmconnector.ciscoccservice.com/servicenow/v5/dist/index.js", "properties": { "isWidgetDisplayEnabled": true, "typeOfRecord" : "Create Incident" }, "wrapper": { "title": "SNOW Actions !", "maximizeAreaName": "app-maximize-area" } } ] } - Adicionar notas de chamada ao vivo — Você pode capturar informações adicionais sobre a chamada na área de texto e encerrar a chamada. Você pode ver essas notas adicionadas como notas de chamada no registro de atividades.
Alteração de código no ServiceNow
O script inclui mudanças-
Vá para o navegador de filtros e pesquise as
inclusões de script
.Selecione o script incluído na interface do usuário do sistema.
-
Filtre o nome e pesquise por
PropUtils
. -
Altere o método
userGetSysID
no Script.Atual:
UserGetSysId : function () { var opened_for; var user = new GlideRecord("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if (user.next()) opened_for=user.sys_id; var grInt = new GlideRecord('interaction'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for= opened_for; var sysid=grInt.insert(); return sysid; },Novo exemplo de código para o incidente:
UserGetSysId : function () { var opened_for; //Incident related changes var sysidlist = {}; var user = new GlideRecordSecure("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if(user.next()) { opened_for=user.sys_id;//return user.sys_id; var inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id', opened_for); inc.addQuery('state','IN','1,2'); inc.orderByDesc('sys_created_on'); inc.query(); if (inc.next()) { sysidlist.incsysid=inc.getUniqueValue(); }else{ inc.initialize(); inc.caller_id=opened_for; inc.contact_type='phone'; inc.short_description='Call Received From '+ this.getParameter('value'); sysidlist.incsysid=inc.insert(); } } var grInt = new GlideRecordSecure('interaction'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for= opened_for; var sysid=grInt.insert(); sysidlist.sysid=sysid; return JSON.stringify(sysidlist); },
-
Vá para o navegador de filtros e pesquise por
UI page.Selecione páginas da interface do usuário na interface do usuário do sistema.
-
Filtre o Nome e pesquise por
agentdesktop
. -
Altere a função
screenpop
no script Client.Função atual:
// screen pop function screenpop(callerani,callSessionInfo) { if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('field', 'phone'); gaout.addParam('value', callerani); gaout.getXMLWait(); var sysid = gaout.getAnswer(); openFrameAPI.openServiceNowForm({ entity: 'interaction', query: 'sys_id='+sysid });Exemplo de código para o incidente:
// screen pop function screenpop(callerani,callSessionInfo) { if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('field', 'phone'); gaout.addParam('value', callerani); gaout.getXMLWait(); // For Incident-related change var sysObj = JSON.parse(gaout.getAnswer()); if(sysObj.incsysid){ openFrameAPI.openServiceNowForm({ entity: 'incident', query: 'sys_id='+sysObj.incsysid, 'interaction_sys_id': sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ entity: 'incident', query: 'sys_id=-1', 'interaction_sys_id': sysObj.sysid //'a2ba0ba62fd121106446cc96f699b6b8' }); } }
Se as informações do chamador existirem no CRM e já houver um novo incidente aberto com esse contato, o aplicativo abrirá o incidente em andamento
Se as informações do chamador não existirem no CRM, o aplicativo abrirá um novo incidente
Se as informações do chamador existirem no CRM, o aplicativo abrirá um novo incidente com detalhes pré-preenchidos
Visão geral
Esse caso de uso detalha o processo para adicionar uma coluna extra à tabela ServiceNow webexcc_imp_activity e criar sn_openframe_phone_log após a instalação do conector de CRM Webex CC for ServiceNow.
Por padrão, a tabela contém determinados campos e valores do sistema prontos para uso.
Você pode criar mais variáveis específicas do negócio (variáveis CAD) dentro do designer de fluxo WebExcc e adicionar as variáveis CAD dentro do registro de atividades pós-chamada do ServiceNow, bem como persistir isso nos dados da tabela de atividades pós-chamada.
Essa é apenas uma documentação de referência e mostra como fazer isso para uma amostra de variável CAD chamada Nome do cliente, que armazena o nome do cliente dentro do IVR e o publica no ServiceNow.
Espera-se que os desenvolvedores do Partner+Customer ServiceNow configurem e gerenciem essa configuração, pois é uma personalização do conector existente.
A Cisco fornece apenas as técnicas de como personalizar e estender o conector.
Até este artigo, a equipe da Cisco validou o suporte para a adição da variável CAD ao registro de atividades e à tabela de atividades usando a técnica descrita abaixo:
Adicionar coluna à atividade WebExcc IMP
-
Edite a tabela na versão para desenvolvedores do ServiceNow.

-
Vá até o navegador de filtros e pesquise por studio.

Selecione
Webex Contact Center

ou



-
Selecione a tabela de
atividades do WebExcc IMP

-
Adicione uma nova coluna, por exemplo,
CustomerName


Adicionar coluna ao registro do telefone
-
Edite a tabela de registro do telefone.


-
Adicione uma nova coluna, por exemplo,
CustomerName
.

Mapa de transformação de atividades do WebExcc

Adicione uma nova coluna, por exemplo, mapeamento de campo CustomerName
.


Personalizar colunas da lista

Como o Service Now recomenda, altere a ação Choice de criar para ignorar.


Configurar lista de registros telefônicos

Vá para Script Include
Adicione somente uma linha webexcc. u_customername=ActInfo.customerName
para PropUtils.



Veja a linha: webexcc. u_customername=actInfo.customerName; com um comentário de apoio.
var propUtils = Class.create();
propUtils.prototype = Object.extendsObject(global.AbstractAjaxProcessor,{
getWebexccProp : function () {
var webexccprop = {};
webexccprop.instanceurl= 'https://'+gs.getProperty('instance_name')+'.service-now.com/';
webexccprop.url=gs.getProperty('x_caci_webexcc.agentdesktop_url');
// webexccprop.popupurl=gs.getProperty('x_caci_webexcc.screenpop_url');
return JSON.stringify(webexccprop);
},
UserGetSysId : function () {
var opened_for;
var user = new GlideRecord("sys_user");
user.addQuery(this.getParameter('field'),this.getParameter('value'));
user.query();
if (user.next())
opened_for=user.sys_id;//return user.sys_id;
// else
// return null;
var grInt = new GlideRecord('interaction');
grInt.initialize();
grInt.assigned_to= gs.getUserID();
grInt.type= 'phone';
grInt.opened_for= opened_for;
var sysid=grInt.insert();
return sysid;
},
setWebexcctable : function () {
var sys_id=0;
var actInfo = JSON.parse(this.getParameter('actInfo'));
var webexcc = new GlideRecordSecure(gs.getProperty('x_caci_webexcc.webexccactivitytable'));
webexcc.addQuery("callobject", actInfo.CallObject);
webexcc.query();
if(!webexcc.next()) {
webexcc.ani = actInfo.ani;
webexcc.dnis =actInfo.dnis;
webexcc.queuename =actInfo.queuename;
webexcc.wrapuptime =actInfo.wrapuptime;
webexcc.callduration =actInfo.CallDurationInSeconds;
webexcc.ringingtime =actInfo.ringingtime;
webexcc.activitydate =actInfo.ActivityDate;
webexcc.callobject =actInfo.CallObject;
webexcc.calltype =actInfo.CallType;
webexcc.calldisposition=actInfo.CallDisposition;
// This line is Added - to capture it in the Activity Log
webexcc.u_customername=actInfo.CustomerName;
sys_id=webexcc.insert();
//Activities on Incident record;
var actInfoString =this.getParameter('actInfo');
var suser = new GlideRecordSecure("sys_user");
suser.addQuery("phone", this.getParameter('ani'));
suser.query();
if(suser.next()) {
var inc = new GlideRecordSecure('incident');
inc.addQuery('caller_id', suser.sys_id);
inc.orderByDesc('sys_created_on');
inc.query();
if (inc.next()) {
var jsonPretty = JSON.stringify(JSON.parse(actInfoString),null,2);
inc.comments =jsonPretty;
inc.update();
}
}
}
return sys_id;
},
type: 'propUtils'
});
Crie uma variável CAD no Flow Designer

Adicione a variável CAD ao layout da área de trabalho
Exemplo
"CadName1:SnowField1,CadName2:SnowField2"
CadName1 is CustomerName
SnowField1 is also used as CustomerName which is part of sample scirpt showen above "actInfo.CustomerName".

Capturas de tela de demonstração
Visualize a variável CAD recém-adicionada na tabela de atividades do WebExcc.



Criar variável CAD para o Flow Designer
Urgência do incidente
Impacto do incidente

Atualização do script Service Now
As atualizações do script incluem
-
Vá para o navegador de filtros e pesquise por
script includesSelecione a opção Script Includes em System UI.

-
Filtre o nome com
propUtils.
-
Altere o método
userGetSysID
no campo Script.
Script atual:
UserGetSysId : function () { var opened_for; var user = new GlideRecord("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if (user.next()) opened_for=user.sys_id; var grInt = new GlideRecord('interaction'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for= opened_for; var sysid=grInt.insert(); return sysid; },Novo exemplo de código para o incidente:
UserGetSysId : function () { var opened_for; var sysidlist = {}; var user = new GlideRecordSecure("sys_user"); user.addQuery(this.getParameter('field'),this.getParameter('value')); user.query(); if(user.next()) { opened_for=user.sys_id;//return user.sys_id; var inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id', opened_for); inc.addQuery('state','IN','1,2'); inc.orderByDesc('sys_created_on'); inc.query(); if (inc.next()) { sysidlist.incsysid=inc.getUniqueValue(); }else{ inc.initialize(); inc.caller_id=opened_for; inc.contact_type='phone'; inc.urgency=this.getParameter('IncUrgency'); inc.impact=this.getParameter('Impact'); inc.short_description='Call Received From '+ this.getParameter('value'); sysidlist.incsysid=inc.insert(); } } var grInt = new GlideRecordSecure('interaction'); grInt.initialize(); grInt.assigned_to= gs.getUserID(); grInt.type= 'phone'; grInt.opened_for= opened_for; var sysid=grInt.insert(); sysidlist.sysid=sysid; return JSON.stringify(sysidlist);//sysid; },
-
Vá até o navegador de filtros e pesquise por
UI pages.Selecione a opção UI Pages em System UI.

-
Filtre as páginas da interface do usuário com o nome e pesquise por
agentdesktop.
-
Altere a função
screenpop
no campo do script.
Função atual:
// screen pop function screenpop(callerani,callSessionInfo) { if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('field', 'phone'); gaout.addParam('value', callerani); gaout.getXMLWait(); var sysid = gaout.getAnswer(); openFrameAPI.openServiceNowForm({ entity: 'interaction', query: 'sys_id='+sysid }); }Exemplo de código para o incidente:
// screen pop function screenpop(callerani,callSessionInfo) { var Impact=3; if(callSessionInfo.callAssociatedData.Impact != null && callSessionInfo.callAssociatedData.Impact != undefined) { Impact=callSessionInfo.callAssociatedData.Impact.value; } var IncUrgency=3; if(callSessionInfo.callAssociatedData.Urgency != null && callSessionInfo.callAssociatedData.Urgency != undefined) { IncUrgency=callSessionInfo.callAssociatedData.Urgency.value; } if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('field', 'phone'); gaout.addParam('value', callerani); gaout.addParam('IncUrgency', IncUrgency); gaout.addParam('Impact', Impact); gaout.getXMLWait(); // var sysid = gaout.getAnswer(); var sysObj = JSON.parse(gaout.getAnswer()); if(sysObj.incsysid){ openFrameAPI.openServiceNowForm({ entity: 'incident', query: 'sys_id='+sysObj.incsysid, 'interaction_sys_id': sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ entity: 'incident', query: 'sys_id=-1', 'interaction_sys_id': sysObj.sysid }); } window.localStorage.setItem("screenpopinteraction",JSON.stringify(sysObj)); }
Se as informações do chamador existirem no CRM e não houver nenhum incidente novo ou em andamento, o aplicativo abrirá um novo incidente.


Altere o código no ServiceNow
Adicionar novas colunas à tabela de atividades do WebExcc IMP
Abra a tabela de atividades do WebExcc IMP





Clique em Atualizar.


Adicionar novas colunas à tabela de registro telefônico
Abra a tabela de registros telefônicos





Mapa de transformação de atividades do WebExcc
Abra o mapa de transformação
no navegador de filtros


Clique em WebExcc Activity TransformMap




Clique em Atualizar.

As alterações no script incluem
-
Vá para o navegador de filtros e pesquise por “script includes”.
Selecione o script incluído na interface do usuário do sistema.

-
Filtre o nome com
PropUtils
.
-
Altere o método
setWebExccTable
.
Novo código de amostra para Incident:
setWebexcctable : function () { var sys_id=0; var actInfo = JSON.parse(this.getParameter('actInfo')); var webexcc = new GlideRecordSecure(gs.getProperty('webexccactivitytable')); webexcc.addQuery("u_callobject", actInfo.CallObject); webexcc.query(); if(!webexcc.next()) { //Activities on Incident record; //var actInfoString =this.getParameter('actInfo'); var incsysid=actInfo.incident_sys_id; var interactionsysid=actInfo.interaction_sys_id; var incnum=""; var intenum=""; delete actInfo['interaction_sys_id']; delete actInfo['incident_sys_id']; if( interactionsysid!= null && interactionsysid != undefined){ var inte = new GlideRecordSecure('interaction'); //inte.get('sys_id', interactionsysid ); inte.addQuery('sys_id', interactionsysid ); inte.query(); if (inte.next()) { intenum=inte.number; // inte.setValue('state','Closed Complete'); inte.work_notes='Update State to closed.'; inte.update(); } } if( incsysid!= null && incsysid != undefined){ var inci = new GlideRecordSecure('incident'); inci.addQuery('sys_id', incsysid ); inci.query(); if (inci.next()) { incnum=inci.number; var jsonPretty = JSON.stringify(actInfo,null,2); //JSON.stringify(JSON.parse(actInfoString),null,2); inci.comments =jsonPretty; inci.update(); } }else{ var suser = new GlideRecordSecure("sys_user"); suser.addQuery("phone", this.getParameter('ani')); suser.query(); if(suser.next()) { var inc = new GlideRecordSecure('incident'); inc.addQuery('caller_id', suser.sys_id); inc.addQuery('state','IN','1,2'); inc.orderByDesc('sys_created_on'); inc.query(); if (inc.next()) { var jsonPretty = JSON.stringify(actInfo,null,2); inc.comments =jsonPretty; inc.update(); } } } webexcc.u_ani = actInfo.ani; webexcc.u_dnis =actInfo.dnis; webexcc.u_queuename =actInfo.queuename; webexcc.u_wrapuptime =actInfo.wrapuptime; webexcc.u_callduration =actInfo.CallDurationInSeconds; webexcc.u_ringingtime =actInfo.ringingtime; webexcc.u_activitydate =actInfo.ActivityDate; webexcc.u_callobject =actInfo.CallObject; webexcc.u_calltype =actInfo.CallType; webexcc.u_calldisposition=actInfo.CallDisposition; webexcc.u_incidentnumber=incnum; webexcc.u_interactionsnumber=intenum; sys_id=webexcc.insert(); } return sys_id; },
Alterações de método nas páginas da interface do usuário
-
Vá para o navegador de filtros e pesquise páginas de
interface do usuário
Selecione a opção UI Pages em System UI.

-
Filtre as páginas da interface do usuário com o nome e pesquise por
agentdesktop.
-
Altere a função
NowActivities e screenpop
no script.
Função atual:
function nowActivities(actInfo, ani) { var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'setWebexcctable'); gaout.addParam('actInfo', JSON.stringify(actInfo)); gaout.addParam('ani', stripPrefixes(ani)); gaout.getXML(SetCCsysId); }Exemplo de código para o incidente:
function nowActivities(actInfo, ani) { var sysObjstr = window.localStorage.getItem("screenpopinteraction"); if(sysObjstr != null && sysObjstr != undefined) { var sysObjjson=JSON.parse(sysObjstr); actInfo.interaction_sys_id=sysObjjson.sysid; actInfo.incident_sys_id=sysObjjson.incsysid; } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'setWebexcctable'); gaout.addParam('actInfo', JSON.stringify(actInfo)); gaout.addParam('ani', stripPrefixes(ani)); gaout.getXML(SetCCsysId); } function screenpop(callerani,callSessionInfo) { if(callerani===callSessionInfo.phoneNumber){ callerani=stripPrefixes(callerani); } var gaout = new GlideAjax('propUtils'); gaout.addParam('sysparm_name', 'UserGetSysId'); gaout.addParam('field', 'phone'); gaout.addParam('value', callerani); gaout.getXMLWait(); // var sysid = gaout.getAnswer(); var sysObj = JSON.parse(gaout.getAnswer()); if(sysObj.incsysid){ openFrameAPI.openServiceNowForm({ entity: 'incident', query: 'sys_id='+sysObj.incsysid, 'interaction_sys_id': sysObj.sysid }); }else{ openFrameAPI.openServiceNowForm({ entity: 'incident', query: 'sys_id=-1', 'interaction_sys_id': sysObj.sysid }); } window.localStorage.setItem("screenpopinteraction",JSON.stringify(sysObj)); }
Resultados após a atualização

As personalizações a seguir se aplicam às versões 1.0.5 e anteriores. Para as personalizações das versões mais recentes 1.0.7 e superiores, siga as etapas acima.
Personalização nº 1 — Adicione regras de negócios personalizadas para casos de uso de fluxo de chamadas
Crie um novo registro de incidentes para cada chamadaPara cada nova chamada para o conector WebExcc CRM no ServiceNow, crie um novo registro de incidente.
Pesquise regras de negócios no navegador de filtros

Clique em Novo.

Exemplo de código para referência:
function customcti() { var url = null; var name = sysparm_caller_name; eid = sysparm_caller_id; var phone = sysparm_caller_phone; var taskID = sysparm_task_id; var fQuery = sysparm_query; if (fQuery == null) fQuery = ''; var view = sysparm_view; if (view == null || view == '') view = "itil"; var userID = null; if (eid != null && eid != '') { userID = UserGetSysId("employee_number",eid); } if (userID == null && name != null && name != '') { userID = UserGetSysId("name", name); } if (userID == null && phone != null && phone != '') { userID = UserGetSysId("phone", phone); } if (userID != null) { if (fQuery.length > 0) fQuery += "^"; fQuery += "caller_id=" + userID; } if (url == null) { url = "incident.do?sys_id=-1"; if (fQuery != null) url += "&sysparm_query=" + fQuery; } answer = url; return url; } function UserGetSysId(field, value) { var user = new GlideRecord("sys_user"); user.addQuery(field, value); user.query(); if (user.next()) return user.sys_id; else return null; }Exemplo de configuração da regra de negócios

Habilitar cliente que pode ser chamado

O processamento de incidentes por integração telefônica por computador (CTI) está marcado como verdadeiro.


O sysparm_cti_rule=name em que 'name' é o nome de uma função deve ser invocado para processamento de CTI em vez de usar o script padrão.
Defina a função em uma sys_scriptentrada marcada como cliente chamável.
Se você precisar inserir, atualizar ou excluir qualquer GlideRecord na função, chame uma função separada que não seja do cliente para realizar as atualizações.
Para tornar um script chamável pelo cliente, você deve marcar a caixa de seleção chamável pelo cliente no formulário que é exibido quando a entrada é exibida. sys_script
A caixa de seleção que pode ser chamada pelo cliente não aparece por padrão. Para visualizar, você deve modificar os campos que aparecem no formulário usando o ícone de engrenagem e o mecanismo de balde de lama.
Personalização nº 2 - Adicionar variável CAD na tabela de atividades do Webex Contact Center
Visão geralEste artigo detalha o processo para adicionar uma coluna adicional à tabela ServiceNow, criada após a instalação do conector de CRM Webex CC for ServiceNow. webexcc_activity
Por padrão, a tabela contém campos e valores do sistema prontos para uso.
Você pode potencialmente criar mais variáveis específicas do negócio (variáveis CAD) dentro do designer de fluxo WebExcc e adicionar essas variáveis CAD ao registro de atividades pós-chamada do ServiceNow e persistir isso nos dados da tabela de atividades pós-chamada.
-
Essa é apenas a documentação de referência e mostra como fazer isso para uma amostra de variável CAD chamada Nome do cliente, que armazena o nome do cliente dentro do IVR e o publica no ServiceNow.
-
Os desenvolvedores do Partner+Customer ServiceNow configurarão e gerenciarão essa configuração, pois é uma personalização do conector existente.
-
A Cisco fornecerá apenas as técnicas de como personalizar e estender o conector.
-
Até este artigo, a equipe da Cisco validou o suporte para a adição da variável CAD ao registro de atividades e à tabela de atividades usando a técnica descrita abaixo.
Edite a tabela na versão para desenvolvedores do ServiceNow.

Vá para o .



Selecione a tabela de atividades do WebExcc.

Por exemplo, CustomerName.


Selecione Layout de lista para a atividade WebExcc.

Essa etapa não é necessária se você estiver usando o XML do Conjunto de Atualizações - É necessário adicionar apenas uma linha "webexcc. u_customername=ActInfo.customerName "para PropUtils.



Exemplo de script
Veja a linha com: webexcc. u_customername=actInfo.customerName; com um comentário de apoio.
var propUtils2 = Class.create();
propUtils2.prototype = Object.extendsObject(global.AbstractAjaxProcessor,{
getWebexccProp : function () {
var webexccprop = {};
webexccprop.instanceurl= 'https://'+gs.getProperty('instance_name')+'.service-now.com/';
webexccprop.url=gs.getProperty('x_caci_webexcc.agentdesktop_url');
webexccprop.popupurl=gs.getProperty('x_caci_webexcc.screenpop_url');
return JSON.stringify(webexccprop);
},
setWebexcctable : function () {
var sys_id=0;
var actInfo = JSON.parse(this.getParameter('actInfo'));
var webexcc = new GlideRecordSecure(gs.getProperty('x_caci_webexcc.webexccactivitytable'));
webexcc.addQuery("callobject", actInfo.CallObject);
webexcc.query();
if(!webexcc.next()) {
webexcc.ani = actInfo.ani;
webexcc.dnis =actInfo.dnis;
webexcc.queuename =actInfo.queuename;
webexcc.wrapuptime =actInfo.wrapuptime;
webexcc.callduration =actInfo.CallDurationInSeconds;
webexcc.ringingtime =actInfo.ringingtime;
webexcc.activitydate =actInfo.ActivityDate;
webexcc.callobject =actInfo.CallObject;
webexcc.calltype =actInfo.CallType;
webexcc.calldisposition=actInfo.CallDisposition;
// This line is Added - to capture it in the Activity Log
webexcc.u_customername=actInfo.CustomerName;
sys_id=webexcc.insert();
// Activities on Incident record;
var actInfoString =this.getParameter('actInfo');
var suser = new GlideRecordSecure("sys_user");
suser.addQuery("phone", this.getParameter('ani'));
suser.query();
if(suser.next()) {
var inc = new GlideRecordSecure('incident');
inc.addQuery('caller_id', suser.sys_id);
inc.orderByDesc('sys_created_on');
inc.query();
if (inc.next()) {
var jsonPretty = JSON.stringify(JSON.parse(acting string),null,2);
inc.comments =jsonPretty;
inc.update();
}
}
}
return sys_id;
},
type: 'propUtils2'
});
Edite a página da interface do usuário com um novo nome de script
Crie uma variável CAD no Flow Designer
Adicione a variável CAD ao layout da área de trabalho
Capturas de tela de demonstração
Visualize a variável CAD recém-adicionada na tabela de atividades do WebExcc.

O conector CRM opera com base na versão do widget especificada no JSON do layout da área de trabalho. É extremamente importante garantir que a versão do widget no layout da área de trabalho seja mantida atualizada.
Espera-se que os administradores garantam que todos os layouts de desktop desse conector de CRM usem essa versão do widget. If the layout is not updated to use the latest version, functionality will no longer be supported and may cease to work correctly.
- Última atualização do ServiceNow — .1.0_v5.0.3.jsonServiceNow_Desktop_0. Em março de 2024, a versão do pacote é 1.0.9
- Última atualização de XML — Webexcc-ServiceNow-Update-setV7-1-ActionsWidget.xml, junho de 2024











































