從 SNIPPET 動作中進行 API 調用

您可以透過 SNIPPET 動作進行 REST 或 SOAP API 調用。這是在Studio指令碼中進行 API 調用的受支援的方法之一。如果您要連接到 SOAP Web 服務或您的 API 調用包含 XML,則您必須使用此方法。但是,進行 RESTful API 調用或進行包含 JSON 的調用的首選方法是使用 REST API 動作

除了在回應中看到 HTTP 狀態代碼之外,您還可能會看到-1 代碼。這是一個內部代碼,用於指示回應發生錯誤。

使用 SNIPPET 動作連接至 RESTful Web 服務

您可以使用 Studio 指令碼透過 Snippet 動作中的 REST 代理連接 RESTful API。您可以使用GetRestProxy()功能存取該服務。REST 客服專員允許您的指令碼與遠端網路服務器互動。它提供了一些屬性和函數,您可以使用這些屬性和函數進行互動。本節稍後將介紹這些屬性和功能。CXone平台允許 REST API 傳回最多 32 KB 的資料。此限制是在平台層級施加,並且嚴格執行。

REST 客服專員需要使用動態資料物件。動態資料類型允許您的指令碼處理 XML 和 JSON 格式的回應。動態資料物件可以接收這些格式的資料並允許讀取。您還可以動態建立可轉換為 XML 或 JSON 的物件。使用 RESTful API 時,這些能力是必要的。

要使用 REST 客服專員,請在指令碼中新增Snippet動作並打開Snippet editor 視窗。使用以下語法調用GetRESTProxy()函數:

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

對於<property | function>,請從以下各節所述的屬性和函數中進行選擇。

屬性

屬性 詳細資料
StatusCode

儲存調用 MakeRestRequest() 後的 HTTP 狀態代碼。此屬性不可修改。如果函數失敗,則不再保留狀態代碼。

StatusDescription 儲存調用 MakeRestRequest() 後的 HTTP 狀態描述。此屬性不可修改。
ContentType

允許您覆寫預設的內容類型標頭。預設為 application/x-www-form-urlencoded

根據您正在進行的調用,您可能需要更改標頭。例如,如果您要傳送 JSON,則應將其變更為 application/json。您必須修改此屬性。

ProxyTimeoutSeconds 允許您更改請求逾時。預設為 10 秒。您必須修改此屬性。

函數

下表提供了連接 RESTful API 時可用的函數資訊。還有其他 REST 客服專員函數允許您對字串進行編碼和雜湊

函數 詳細資料
MakeRestRequest(p1, p2, p3, p4)

向指定 URL 執行 HTTP 請求,其中:

  • P1:請求的 URL;字串
  • P2:API 調用的有效負載;字串
  • P3:接受標頭和回應剖析器選擇器;數字或字串:
    • 0:應用程式/json
    • 1:文字/xml
    • 2:應用程式/json(忽略回應正文)
    • 3:文字/xml(忽略回應正文)
      • 「JSON」 -應用程式/json
      • 「XML」 - 文字/xml
  • P4:REST API 動詞;字串
AddHeader 向 HTTP 請求新增自訂標頭。
ClearHeaders 清除使用 AddHeader 新增的任何自訂標題。

範例

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()}

使用 SNIPPET 動作連接至 SOAP Web 服務

您可以透過 Studio 指令碼使用基於 SOAP 的 Web 服務。這需要將 WSDL 或代理 DLL 匯入Studio。匯入的 DLL 必須由 NICE CXone 授權。授權 DLL 後,它會儲存在 CXone系統 的檔案儲存根目錄中。

使用 SOAP Web 服務需要 NICE CXone 的幫助。詳細資訊,請聯絡您的 CXone 客戶代表

要在 Studio 指令碼中使用基於 SOAP 的 Web 服務時,必須建立一個 Snippet。在指令碼中新增一個 Snippet 動作。在Snippet編輯器視窗中,新增一條 USES 語句,此語句用於命名代理 DLL 檔案,此檔案是您產生並儲存在業務單元的檔案儲存中。

以下 Snippet 是透過 Studio 指令碼使用基於 SOAP 的 Web 服務:

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)
	

使用 REST 包裝器進行 SOAP 調用

此選項可讓您使用 REST API 方法來調用基於 SOAP 的 Web 服務。每個 Web 服務的回應方式都不同,具體取決於其建構方式。您可能需要修改範例程式碼才能與您正在調用的服務搭配使用。

SNIPPET 動作中使用時,您使用的 XML 不能包含雙引號。您可以使用以下任一替代方案:

  • 將每個雙引號替換為{char(34)},這會將雙引號字元直接插入字串中。此選項將在本節後面的第二步的第一個範例中進行說明。
  • 將每個雙引號替換為單引號 (')。這在 XML 和 SNIPPET 動作中是可以接受的。此選項將在本節後面的第二步中的第二個範例中進行說明。

您只需替換 XML 中顯示的雙引號即可。snippet 程式碼中的變數賦值仍必須用雙引號引起來。

  1. 建立 REST 代理,指派ContentType標頭(您要連接的 web 服務需要此標頭)以及公共網路服務 URL:

    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. 建立 SOAP 信封,該信封採用 XML 格式,用於對所有必需的參數進行編碼。您可以透過兩種方式操作:

    • 分開每一行。此選項更容易閱讀。

    • 將所有內容連接在一行中。

    此步驟中包含兩個選項的範例。

    此範例顯示將信封分成幾行。此外,此範例顯示雙引號替換為 {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>"

    以下範例顯示了連接在一行中的信封程式碼。在此範例中,雙引號已替換為單引號。

    //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. 執行 REST 請求。以下範例作為 POST 執行。

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