Fazer chamadas API a partir de uma ação SNIPPET

Você pode fazer chamadas de API REST ou SOAP a partir de uma ação SNIPPET. Este é um dos métodos suportados para fazer chamadas API em scripts Studio. Se estiver se conectando a um serviço web SOAP ou se suas chamadas API incluírem XML, este é o método que você deve usar. No entanto, o método preferencial para se fazer chamadas API RESTful ou chamadas que incluam JSON é o uso da ação REST API.

Além de ver códigos de status HTTP em respostas, é possível que você veja um código -1. Este é um código interno que indica a ocorrência de um erro com a resposta.

Conexão aos serviços da web RESTful com a ação SNIPPET

É possível usar scripts do Studio para conexão com APIs RESTful usando o proxy REST em uma ação Snippet. Você pode acessar este serviço com a função GetRestProxy(). O proxy REST permite que seus scripts interajam com servidores web remotos. Ele fornece algumas propriedades e funções que você pode usar para isso. As propriedades e funções são descritas mais à frente nesta seção. O CXoneplataforma permite que as APIs REST retornem até 32 KB de dados. Esta limitação é imposta no nível do plataforma e é rigorosamente aplicada.

O proxy REST exige o uso de objetos de dados dinâmicos. O tipo de dados dinâmicos permite que seus scripts trabalhem com respostas formatadas em XML e JSON. Objetos de dados dinâmicos podem receber dados nestes formatos e permitir sua leitura. Você também pode criar objetos dinamicamente que podem ser convertidos em XML ou JSON. Essas habilidades são necessárias ao se usar APIs RESTful.

Para usar o proxy REST, adicione uma ação Snippet ao seu script e abra a janela Snippet editor . Chame a função GetRESTProxy() usando a seguinte sintaxe:

ASSIGN proxy = GetRESTProxy() 
 proxy.<property | function>([parameters]) 

Para <property | function>, escolha a partir das propriedades e funções descritas nas seguintes seções.

Propriedades

Propriedade Detalhes
StatusCode

Contém o código de status HTTP após uma chamada para MakeRestRequest(). Esta propriedade não pode ser modificada. Se a função falhar, ela não armazenará mais o código de status.

StatusDescription Contém a descrição do status HTTP após uma chamada para MakeRestRequest(). Esta propriedade não pode ser modificada.
ContentType

Permite que você sobreponha o cabeçalho do tipo de conteúdo padrão. O padrão é application/x-www-form-urlencoded.

Dependendo da chamada que está fazendo, pode ser preciso alterar o cabeçalho. Por exemplo, se estiver enviando JSON, você deve alterar isso para application/json. É necessário alterar esta propriedade.

ProxyTimeoutSeconds Permite que você altere o tempo limite da solicitação. O padrão é 10 segundos. É necessário alterar esta propriedade.

Funções

A tabela a seguir fornece informações sobre as funções disponíveis para uso ao se conectar a APIs RESTful. Há outras funções de proxy REST que permitem que você codifique e misture strings.

Função Detalhes
MakeRestRequest(p1, p2, p3, p4)

Executa uma solicitação HTTP para o URL designado, onde:

  • P1: URL da solicitação; String
  • P2: carga útil para a chamada API; String
  • P3: cabeçalho de aceitação e selecionador de analisador de resposta; Numérico ou string:
    • 0:  application/json
    • 1: text/xml
    • 2: application/json (ignora o corpo da resposta)
    • 3: text/xml (ignora o corpo da resposta)
      • "JSON" - application/json
      • "XML - text/xml
  • P4: verbo REST API; String
AddHeader Adiciona um cabeçalho personalizado à solicitação HTTP.
ClearHeaders Limpa todos os cabeçalhos personalizados adicionados com AddHeader.

Exemplos

ASSIGN proxy = GetRESTProxy()
ASSIGN proxy.ContentType = "application/json"
ASSIGN url = "https://catfact.ninja/fact"
ASSIGN verb = "GET"
ASSIGN result = proxy.MakeRestRequest(url,payload,'JSON',verb)

 

ASSIGN restProxy=GetRESTProxy()

restProxy.AddHeader("x-api-key", "qwer") //Assigning incorrect header for demonstration purposes
restProxy.ClearHeaders()
restProxy.AddHeader("x-api-key", "asdf")
ASSIGN restProxy.ProxyTimeoutSeconds = "2"
ASSIGN restProxy.ContentType = "application/json"

ASSIGN uri = "http://postman-echo.com/post"

DYNAMIC beowulfCharacteristics
ASSIGN beowulfCharacteristics.name = "Beowulf"
ASSIGN beowulfCharacteristics.occupation= "Hero" 
ASSIGN beowulfCharacteristics.foe = "Grendel"
ASSIGN payloadJSON = "{beowulfCharacteristics.asJSON()}

Conexão aos serviços da web SOAP com a ação SNIPPET

Você pode usar serviços da web baseados em SOAP com scripts do Studio. Para isso, é preciso importar um WSDL ou Proxy DLL para o Studio. O DLL importado precisa ser autorizado pela NICE CXone. Após a autorização do DLL, ele é salvo na raiz do armazenamento de arquivo do seu CXonesistema.

Usar serviços web SOAP exige assistência da NICE CXone. Entre em contato com o seu Representante de Contas do CXone para maiores informações.

Quando quiser usar um serviço web baseado em SOAP em um script do Studio, é preciso criar um snippet. Adicione uma ação Snippet ao seu script. Na janela do editor Snippet, adicione uma instrução USES que nomeia o arquivo de proxy DLL que você gerou e armazenou no armazenamento de arquivo da sua unidade de negócios.

O snippet a seguir é um exemplo de uso de um serviço da web baseado em SOAP com um script do Studio:

USES "sf.dll"
cStart="{now}"
sforce=new SforceService()
session=new SessionHeader()
loginResult=sforce.login("demo@nice.com",password6")
sforce.sessionheadervalue=session
session.sessionid=loginResult.sessionid
sforce.url=loginresult.serverUrl

t=new Task()
t.ActivityDate=#"8/20/2050"
t.Description="Call placed by {first }{Last}."
t.Subject="Call @{cStart}"
t.Status="Completed"
t.CallType="Outbound"
t.OwnerId=SF_Agent_ID
t.ReminderDateTime="{cStart}"

SWITCH Type
{
   CASE "CON" { t.WhoId=SF_Obj_ID }
   CASE "LEA" { t.WhoId=SF_Obj_ID }
   CASE "ACC" { t.WhatId=SF_Obj_ID }
   CASE "OPP" { t.WhatId=SF_Obj_ID }
   CASE "CAS" { t.WhatId=SF_Obj_ID }
}
SaveResult=sforce.create(t)
	

Fazer uma chamada SOAP com um envoltório REST

Esta opção permite que você use metodologias API REST para fazer chamar serviços web baseados em SOAP. Cada serviço web responde de maneira diferente dependendo de como foi construído. Pode ser necessário modificar o código de exemplo para trabalhar com o serviço que está chamando.

O XML que você usa não pode incluir aspas duplas quando é usado em uma ação SNIPPET. Você pode usar uma das seguintes alternativas:

  • Substitua cada aspa dupla por {char(34)}, o que insere um caractere de aspas duplas diretamente à string. Esta opção é ilustrada mais à frente nesta seção, no primeiro exemplo da etapa dois.
  • Substitua cada aspa dupla por uma aspa simples ( ' ). Isto é aceito em XML e em ações SNIPPET. Esta opção é ilustrada mais à frente nesta seção, no segundo exemplo da etapa dois.

Você precisa substituir apenas aspas duplas que aparecem no XML. Atribuições de variável no código snippet ainda devem ser colocadas entre aspas duplas.

  1. Faça um proxy REST, atribua o cabeçalho ContentType já que o serviço web ao qual está se conectando exige isso e o URL público do serviço web:

    ASSIGN RestProxy = GetRESTProxy() 
    ASSIGN RestProxy.ContentType = "text/xml; charset=utf-8"
    ASSIGN URL = "https://localhost:9031/ssodir/services/

    SSODirectoryService" //Assign the public Webservice UR
  2. Crie o seu envelope SOAP, que é XML formatado para codificar todos os parâmetros exigidos. Você pode fazer isso de duas maneiras:

    • Separe cada linha. Esta opção facilita a leitura.

    • Concatene tudo em uma única linha.

    Exemplos de ambas as opções estão incluídas nesta etapa.

    Este exemplo mostra o envelope separado em duas linhas. Além disso, este exemplo mostra aspas duplas substituídas por {char(34)}.

    //Sample Payload:
    ASSIGN Payload = ""
    ASSIGN Payload = "{Payload}<?xml version={char(34)}1.0{char(34)} encoding={char(34)}UTF-8{char(34)}?>
    ASSIGN Payload = "{Payload}<soapenv:Envelope"
    ASSIGN Payload = "{Payload}	xmlns:soapenv={char(34)}http://schemas.xmlsoap.org/soap/envelope/{char(34)}"
    ASSIGN Payload = "{Payload}	xmlns:xsd={char(34)}http://www.w3.org/2001/XMLSchema{char(34)}"
    ASSIGN Payload = "{Payload}	xmlns:xsi={char(34)}http://www.w3.org/2001/XMLSchema-instance{char(34)}>"
    ASSIGN Payload = "{Payload}<soapenv:Body>"
    ASSIGN Payload = "{Payload}<ns1:getIDPList"
    ASSIGN Payload = "{Payload}        soapenv:encodingStyle="
    ASSIGN Payload = "{Payload}	           {char(34)}http://schemas.xmlsoap.org/soap/encoding/{char(34)} ""
    ASSIGN Payload = "{Payload}xmlns:ns1="
    ASSIGN Payload = "{Payload}            {char(34)}https://localhost:9031/ssodir/services/"
    ASSIGN Payload = "{Payload}                 SSODirectoryService{char(34)}/>"
    ASSIGN Payload = "{Payload}</soapenv:Body>"
    ASSIGN Payload = "{Payload}</soapenv:Envelope>"

    O exemplo a seguir mostra o código de envelope concatenado em uma linha. Neste exemplo, as aspas duplas foram substituídas por aspas simples.

    //Sample Payload:
    ASSIGN Payload = "<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><soapenv:Body><ns1:getIDPList soapenv:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:ns1='https://localhost:9031/ssodir/services/SSODirectoryService'/> </soapenv:Body></soapenv:Envelope>"
    
  3. Execute a solicitação REST. O exemplo a seguir está sendo executado como um POST.

    Result = RestProxy.MakeRestRequest(URL,Payload,1,"POST")