CTIOperationResponse: Bereichsbezogen, Global
Die CTIOperationResponse Die Skripteinbindung bietet Methoden zum Festlegen und Abrufen von Daten für das aktuelle CTIOperationResponse-Objekt.
Sie verwenden CTIOperationResponse-Objekte, um Informationen zwischen einem Vorgangs-Handler und einem Nachrichtenumwandler innerhalb von zu übergeben ServiceNow Sprachfunktionen Framework.
Normalerweise ist ein Vorgangs-Handler dafür verantwortlich, Werte für das CTIOperationResponse-Objekt festzulegen, während er die zugehörige Anforderung verarbeitet. Ein Nachrichtentransformator ist dann dafür verantwortlich, die Werte aus dem CTIOperationRequest-Objekt abzurufen und die CTI-spezifische Nutzlast zu erstellen, die an den Anbieter des Computer Telephony Integrator (CTI) zurückgesendet wird.
- Amazon Web Services (AWS) Lambda-Proxy (AWS Lambda-Funktion aufrufen)
- AWS Lex-Bot (Kundeneingabe abrufen)
Das folgende Vorgangs-Handler-Skript zeigt, wie verschiedene verwendet werden CTIOperationResponse Methoden zum Festlegen von Werten für das CTIOperationResponse-Objekt.
(function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response) {
try {
var state = request.getParameter('$state');
if(!state) {
state = 'new';
}
var phone = request.getParameter('contact.phone');
var username = request.getParameter('contact.username');
var someDataPresent = phone || username;
if(!someDataPresent) {
throw 'phone or username must be supplied';
}
if('new' === state) {
var userGr = null;
if(phone || username) {
userGr = new GlideRecordSecure('sys_user');
var qc = null;
if(phone) {
qc = userGr.addQuery('phone', phone);
qc.addOrCondition('mobile_phone', phone);
qc.addOrCondition("home_phone", phone);
}
if(username) {
if(qc) {
qc.addOrCondition('user_name', username);
} else {
qc = userGr.addQuery('user_name', username);
}
}
// If there was criteria then run the query
if(qc) {
userGr.query();
} else {
userGr = null;
}
}
var foundUser = userGr && userGr.next();
var phonelogGr = new GlideRecord('sn_openframe_phone_log');
phonelogGr.initialize();
phonelogGr.setValue('call_id', request.getParameter('contact.id'));
phonelogGr.setValue('phone_number', phone);
if(foundUser) {
phonelogGr.setValue('contact', userGr.getUniqueValue());
}
phonelogGr.insert();
var interactionGr = new GlideRecordSecure('interaction');
interactionGr.initialize();
interactionGr.setValue('type', 'phone');
interactionGr.setValue('short_description', 'User Contact via Phone: ' + phone);
interactionGr.setValue('channel_metadata_table', 'sn_openframe_phone_log');
interactionGr.setValue('channel_metadata_document',phonelogGr.getUniqueValue());
if(foundUser) {
interactionGr.setValue('opened_for', userGr.getUniqueValue());
response.setSessionAttribute('snc_user_first_name', userGr.getValue('first_name'));
response.setSessionAttribute('snc_user_last_name', userGr.getValue('last_name'));
response.setSessionAttribute('snc_user_sys_id', userGr.getUniqueValue());
} else {
response.setSessionAttribute('snc_user_sys_id', "USER_NOT_FOUND");
}
interactionGr.setValue('state', 'new');
var interactionId = interactionGr.insert();
response.setStatusCode(200);
response.setMessage('success');
response.setSessionAttribute('interactionTable', 'interaction');
response.setSessionAttribute('interactionId', interactionId);
}
} catch(e) {
ctx.setError(e);
}
})(request, response);Weitere Informationen zum Erstellen von Vorgangs-Handlern finden Sie unter Konfigurieren Sie einen Kontakt-Flow für eine automatisierte Anruferinteraktion .
Das folgende Nachrichtenumwandler-Skript ruft die im CTIOperationResponse-Objekt festgelegten Werte ab und speichert sie in der CTI-spezifischen Nutzlast, die dann an den CTI-Provider zurückgesendet wird.
(function (/*CTIOperationResponse*/operationResponse, /*HTTPResponse*/ httpResponse) {
// AWS Connect Lambda expects name value pairs only
var out = {};
for(var k in operationResponse.getSessionAttributes()) {
out[k] = operationResponse.getSessionAttributes()[k];
}
out.statusCode = operationResponse.getStatusCode();
out.message = operationResponse.getMessage();
httpResponse.setBody(out);
})(operationResponse, httpResponse);Diese Skripteinbindung wird in ausgeführt sn_cti_Core Namespace. Bevor Sie auf zugreifen können CTIOperationRequest Skripteinbindung, ServiceNow Sprachfunktionen Das Plugin „Core“ (sn_cti_Core) muss installiert sein. Informationen zu dieser Installation finden Sie unter Installieren Sie ServiceNow Voice-Anwendungen .
Für zusätzliche Informationen zu ServiceNow Sprachfunktionen, Siehe ServiceNow-Sprachfunktionen .
CTIOperationResponse: CTIOperationResponse (Zeichenfolgenursprung)
Instanziiert ein CTIOperationResponse-Objekt.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
var response = new sn_cti_core.CTIOperationResponse();
response.setMinorVersion(3);
CTIOperationResponse – getAuthToken()
Gibt das Authentifizierungstoken zurück, das für das CTIOperationResponse-Objekt festgelegt wurde.
Dieses Token wird von verwendet ServiceNow Sprachfunktionen Framework zur Authentifizierung des aktuellen ServiceNow Sprachfunktionen Anwender, bevor der angeforderte Vorgangs-Handler ausgeführt wird, falls der Handler auth_requiredKennzeichnung ist auf „wahr“ festgelegt. Die auth_requiredKennzeichnung ist ein Feld in der Tabelle „Vorgangs-Handler“ [sn_cti_Operation_Handler]. Die Lebensdauer eines Authentifizierungstokens sollte für die Lebensdauer der Anrufsitzung betragen, wird jedoch vom CTI-Anbieter festgelegt.
Sie können die für Ihre Implementierung erforderliche Authentifizierungs-/Autorisierungsbehandlung definieren, indem Sie einen eigenen Authentifizierungsvorgang-Handler erstellen. Unabhängig davon, wie das Authentifizierungstoken generiert wird, muss der Nachrichtenübersetzer das Token in der CTI-Nutzlast zurückgeben. Darüber hinaus muss der CTI-Anbieter dieses Authentifizierungstoken lokal speichern und in jeder Vorgangsanforderung übergeben, die eine Authentifizierung erfordert.
Wenn der von der Instanz bereitgestellte Authentifizierungsvorgang-Handler verwendet wird, initiiert der Handler die Erstellung des Authentifizierungstokens basierend auf einer vierstelligen, vom Anwender eingegebenen PIN. Dann wird das Authentifizierungstoken im Objekt sessionAttributes des CTIOperationResponse-Objekts festgelegt. Der zugehörige Nachrichtenumwandler übersetzt das sessionAttributes-Objekt in die CTI-spezifische Nutzlast und sendet es dann an den CTI-Anbieter.
- Amazon Web Services (AWS) Lambda-Proxy (AWS Lambda-Funktion aufrufen)
- AWS Lex-Bot (Kundeneingabe abrufen)
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Das zuvor für das CTIOperationRequest-Objekt festgelegte Authentifizierungstoken. Wenn nicht festgelegt, wird Null zurückgegeben. |
var response = new sn_cti_core.CTIOperationResponse();
var token = response.getAuthToken();
CTIOperationResponse – getError()
Gibt das Fehlerobjekt zurück, das dem aktuellen CTIOperationResponse-Objekt zugeordnet ist.
Sie können diese Informationen verwenden, um die Nutzlast zu formulieren, die an den CTI-Anbieter (Computer Telephony Integration) zurückgegeben wird.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Objekt | Informationen zum Vorgangsfehler. Das Format dieses Objekts wird vom CTI-Anbieter bestimmt. Wenn kein Fehler vorhanden ist, wird Null zurückgegeben. |
(function( /*CTIProviderResponseExecutionContext*/ ctx, /*CTIOperationRequest*/ operationRequest, /*CTIOperationResponse*/ operationResponse, /*HTTPResponse*/ httpResponse) {
var sessionAttributes = {},
intentResponse;
var statusCode = -1;
var message = 'Unprocessed';
if (operationResponse) {
statusCode = operationResponse.getStatusCode();
sessionAttributes = operationResponse.getSessionAttributes();
message = operationResponse.getMessage();
var error = operationResponse.getError();
if (error) {
sessionAttributes.error = error;
}
}
if (sn_cti_core.CTIRequestDispatcher.Constants.HTTP.Status.AUTH_REQUIRED.code === statusCode) {
//first call for a secure action without authentication token
sessionAttributes.statusCode = 401;
sessionAttributes.message = message;
intentResponse = {
sessionAttributes: sessionAttributes,
dialogAction: {
type: 'Close',
fulfillmentState: 'Fulfilled',
message: {
contentType: 'PlainText',
content: 'This operation requires authentication. Say authenticate for authentication.'
}
}
};
} else if ('DialogCodeHook' === operationRequest.getParameter('$$invocationSource')) {
//pass back authToken and interactionId
sessionAttributes.authToken = operationRequest.getAuthToken();
sessionAttributes.interactionId = operationRequest.getInteractionSysId();
var originalSlots = operationRequest.getParameter('$$slots');
var responseParameters = operationResponse ? operationResponse.getParameters() : {};
responseParameters = responseParameters ? responseParameters : {};
// See if we processing happened and we got a dialogAction
var responseDialogAction = responseParameters['dialogAction'];
// Default dialog action
var dialogAction = {
type: 'Delegate',
slots: originalSlots
};
// If the response doesn't contain an override replay the inputs
if (responseDialogAction) {
// We bypassed dialoghook so delegate and pass through inputs
dialogAction = responseDialogAction;
}
intentResponse = {
sessionAttributes: sessionAttributes,
dialogAction: dialogAction
};
} else {
// Override required session attributes
sessionAttributes.statusCode = statusCode;
sessionAttributes.message = message;
// Build response template
intentResponse = {
sessionAttributes: sessionAttributes,
dialogAction: {
type: 'Close',
fulfillmentState: 'Fulfilled',
message: {
contentType: 'PlainText',
content: message
}
}
};
}
httpResponse.setBody(intentResponse);
})(ctx, operationRequest, operationResponse, httpResponse);
CTIOperationResponse – getInteractionSysId()
Gibt die sys_ID des Interaktionsdatensatzes zurück, der der Anrufsitzung zugeordnet ist, die für das CTIOperationResponse-Objekt festgelegt wurde.
Die CTIOperationResponse – setInteractionSysId(Zeichenfolgen-ID) Die Methode muss vor dem Aufrufen dieser Methode aufgerufen worden sein.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | SYS_ID des Interaktionsdatensatzes für das CTIOperationResponse-Objekt. Wenn die sys_ID des Interaktionsdatensatzes nicht festgelegt ist, gibt die Methode null zurück. Tabelle: Interaktion [Interaktion] |
var request = new sn_cti_core.CTIOperationResponse();
var interactionId = request.getInteractionSysId();
CTIOperationResponse – getMajorVersion()
Gibt die Hauptversion des Computertelefonie-Integrators (CTI) für das aktuelle CTIOperationResponse-Objekt zurück.
Verwenden Sie diese Methode, wenn die CTI-Anbieter mit verbunden sind ServiceNow Instanz führt mehrere Versionen ihrer Software aus, da verschiedene Softwareversionen unterschiedliche Nutzlasten erfordern können. Wenn sich die Nutzlast zwischen den Softwareversionen nur geringfügig unterscheidet, kann es sinnvoll sein, nur einen einzelnen Nachrichtenumwandler zu haben. Sie können dann die Nutzlastunterschiede verarbeiten, indem Sie einfach die Version der Software überprüfen, die die Anforderung in Ihrem Nachrichtenumwandler stellt. Wenn sich die erforderliche Nutzlast zwischen Versionen erheblich unterscheidet, kann es effektiver sein, mehrere Nachrichtentransformatoren zu verwenden.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Anzahl | Hauptversionsnummer der CTI-Software. Wenn die Hauptversion nie festgelegt wurde, wird zurückgegeben 1 . |
var request = new sn_cti_core.CTIOperationResponse();
var majorVersion = response.getMajorVersion();
CTIOperationResponse – getMessage()
Gibt die Nachrichtenzeichenfolge zurück, die für das aktuelle CTIOperationResponse-Objekt festgelegt ist.
Normalerweise ist dies eine Nachricht, die an den Anwender zurückgesandt wird, sobald ein Vorgang abgeschlossen ist. Sie können diesen Wert mit festlegen CTIOperationResponse – setMessage(Zeichenfolgennachricht) Methode.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Nachrichtentext. Wenn keine Nachricht vorhanden ist, wird Null zurückgegeben. |
(function (/*CTIOperationResponse*/operationResponse, /*HTTPResponse*/ httpResponse) {
// AWS Connect Lambda expects name value pairs only
var out = {};
for(var k in operationResponse.getSessionAttributes()) {
out[k] = operationResponse.getSessionAttributes()[k];
}
out.statusCode = operationResponse.getStatusCode();
out.message = operationResponse.getMessage();
httpResponse.setBody(out);
})(operationResponse, httpResponse);
CTIOperationResponse – getMinorVersion()
Gibt die Nebenversion der Software „Computer Telephony Integrator“ (CTI) für das aktuelle CTIOperationResponse-Objekt zurück.
Verwenden Sie diese Methode, wenn die CTI-Anbieter mit verbunden sind ServiceNow Instanz führt mehrere Versionen ihrer Software aus, da verschiedene Softwareversionen unterschiedliche Nutzlasten erfordern können. Wenn sich die Nutzlast zwischen den Softwareversionen nur geringfügig unterscheidet, kann es sinnvoll sein, nur einen einzelnen Nachrichtenumwandler zu haben. Sie können dann die Nutzlastunterschiede verarbeiten, indem Sie einfach die Version der Software überprüfen, die die Anforderung in Ihrem Nachrichtenumwandler stellt. Wenn sich die erforderliche Nutzlast zwischen Versionen erheblich unterscheidet, kann es effektiver sein, mehrere Nachrichtentransformatoren zu verwenden.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Anzahl | Nebenversionsnummer der Nutzlast, die dieser Interaktion zugeordnet ist. Wenn die Nebenversion nie festgelegt wurde, wird zurückgegeben 0 . |
var request = new sn_cti_core.CTIOperationResponse();
var minorVersion = request.getMinorVersion();
CTIOperationResponse – getParameter(Zeichenfolgenschlüssel)
Gibt den Wert eines angegebenen Schlüssels zurück, der zuvor für das aktuelle CTIOperationResponse-Objekt festgelegt wurde.
Mit den GET/Set-Parametermethoden können praktisch alle Zeichenfolgen- oder Zahlenwerte zwischen einem Vorgangs-Handler und einem Nachrichtenumwandler übergeben werden. Das Parameterobjekt kann null oder mehr Schlüssel/Wert-Paare von Daten enthalten, die direkt mit der aktuellen Vorgangsantwort korrelieren. Der Vorgangs-Handler bestimmt, welche Schlüssel-Wert-Paare erforderlich sind, da er diese Werte erzeugt. Verwenden Sie CTIOperationResponse – setParameter(Zeichenfolgenschlüssel, Objektwert) Methode zum Festlegen von Parametern für das aktuelle CTIOperationResponse-Objekt.
| Name | Typ | Beschreibung |
|---|---|---|
| key | Zeichenfolge | Der Name des zurückzugebenden Schlüsselwerts. |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Der Wert des übergebenen Schlüssels. Wenn kein solcher Schlüssel vorhanden ist, gibt Null zurück. |
var request = new sn_cti_core.CTIOperationResponse();
var parm = request.getParameter('contact.phone');
CTIOperationResponse – getParameters()
Gibt die Schlüssel-Wert-Paare für alle Parameter zurück, die zuvor für das aktuelle CTIOperationResponse-Objekt festgelegt wurden.
Mit den GET/Set-Parametermethoden können praktisch alle Zeichenfolgen- oder Zahlenwerte zwischen einem Vorgangs-Handler und einem Nachrichtenumwandler übergeben werden. Das Parameterobjekt kann null oder mehr Schlüssel/Wert-Paare von Daten enthalten, die direkt mit der aktuellen Vorgangsantwort korrelieren. Der Vorgangs-Handler bestimmt, welche Schlüssel-Wert-Paare erforderlich sind, da er diese Werte erzeugt. Verwenden Sie CTIOperationResponse – setParameter(Zeichenfolgenschlüssel, Objektwert) Methode zum Festlegen von Parametern für das aktuelle CTIOperationResponse-Objekt.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Objekt | Eine Zuordnung von Schlüssel-Wert-Paaren, die zuvor für das CTIOperationResponse-Objekt festgelegt wurden. Diese Schlüssel-Wert-Paare sind Freiform und werden durch die Anforderungen des Vorgangs-Handlers definiert. Die zurückgegebenen Werte sind entweder Zeichenfolgen oder Zahlen. |
(function( /*CTIProviderResponseExecutionContext*/ ctx, /*CTIOperationRequest*/ operationRequest, /*CTIOperationResponse*/ operationResponse, /*HTTPResponse*/ httpResponse) {
var sessionAttributes = {},
intentResponse;
var statusCode = -1;
var message = 'Unprocessed';
if (operationResponse) {
statusCode = operationResponse.getStatusCode();
sessionAttributes = operationResponse.getSessionAttributes();
message = operationResponse.getMessage();
var error = operationResponse.getError();
if (error) {
sessionAttributes.error = error;
}
}
if (sn_cti_core.CTIRequestDispatcher.Constants.HTTP.Status.AUTH_REQUIRED.code === statusCode) {
//first call for a secure action without authentication token
sessionAttributes.statusCode = 401;
sessionAttributes.message = message;
intentResponse = {
sessionAttributes: sessionAttributes,
dialogAction: {
type: 'Close',
fulfillmentState: 'Fulfilled',
message: {
contentType: 'PlainText',
content: 'This operation requires authentication. Say authenticate for authentication.'
}
}
};
} else if ('DialogCodeHook' === operationRequest.getParameter('$$invocationSource')) {
//pass back authToken and interactionId
sessionAttributes.authToken = operationRequest.getAuthToken();
sessionAttributes.interactionId = operationRequest.getInteractionSysId();
var originalSlots = operationRequest.getParameter('$$slots');
var responseParameters = operationResponse ? operationResponse.getParameters() : {};
responseParameters = responseParameters ? responseParameters : {};
// See if processing happened and we got a dialogAction
var responseDialogAction = responseParameters['dialogAction'];
// Default dialog action
var dialogAction = {
type: 'Delegate',
slots: originalSlots
};
// If the response doesn't contain an override replay the inputs
if (responseDialogAction) {
// We bypassed dialoghook so delegate and pass through inputs
dialogAction = responseDialogAction;
}
intentResponse = {
sessionAttributes: sessionAttributes,
dialogAction: dialogAction
};
} else {
// Override required session attributes
sessionAttributes.statusCode = statusCode;
sessionAttributes.message = message;
// Build response template
intentResponse = {
sessionAttributes: sessionAttributes,
dialogAction: {
type: 'Close',
fulfillmentState: 'Fulfilled',
message: {
contentType: 'PlainText',
content: message
}
}
};
}
httpResponse.setBody(intentResponse);
})(ctx, operationRequest, operationResponse, httpResponse);
CTIOperationResponse – getSessionAttribute(Zeichenfolgenschlüssel)
Gibt den Wert für einen angegebenen Sitzungsattribut-Schlüssel zurück, der im aktuellen CTIOperationResponse-Objekt festgelegt ist.
Mit den Methoden zum Abrufen/Festlegen des Sitzungsattributs können praktisch alle Zeichenfolgen- oder Zahlenwerte zwischen einem Vorgangs-Handler und einem Nachrichtenumwandler übergeben werden. Auf Sitzungsattribute kann auch innerhalb eines Kontakt-Flows zugegriffen werden. Das sessionAttribute-Objekt kann null oder mehr Schlüssel-Wert-Paare von Daten enthalten, z. B. die Telefonnummer des Kontakts, die für die Dauer einer vom Computer-Telefonie-Integrationsanbieter definierten Sitzung gültig sind. Der Vorgangs-Handler bestimmt, welche Sitzungsattribut-Schlüssel-Wert-Paare benötigt werden, da er diese Werte während der Verarbeitung verwendet. Normalerweise legt der Vorgangs-Handler diese Attribute für das CTIOperationResponse-Objekt fest, indem er aufruft CTIOperationResponse – setSessionAttribute (Zeichenfolgenschlüssel, Objektwert) Methode und der Nachrichtenumwandler verbraucht die Attribute mit dieser Methode.
| Name | Typ | Beschreibung |
|---|---|---|
| key | Zeichenfolge | Der Name des zurückzugebenden Schlüsselwerts. |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Wert des übergebenen Schlüssels. Wenn kein solcher Schlüssel vorhanden ist, gibt Null zurück. |
var response = new sn_cti_core.CTIOperationResponse();
var phoneAttribute = response.getSessionAttribute('contact.phone');
CTIOperationResponse – getSessionAttributes()
Gibt die Schlüssel-Wert-Paare für alle Sitzungsattribute zurück, die zuvor für das aktuelle CTIOperationResponse-Objekt festgelegt wurden.
Mit den Methoden zum Abrufen/Festlegen des Sitzungsattributs können praktisch alle Zeichenfolgen- oder Zahlenwerte zwischen einem Vorgangs-Handler und einem Nachrichtenumwandler übergeben werden. Auf Sitzungsattribute kann auch innerhalb eines Kontakt-Flows zugegriffen werden. Das sessionAttribute-Objekt kann null oder mehr Schlüssel-Wert-Paare von Daten enthalten, z. B. die Telefonnummer des Kontakts, die für die Dauer einer vom Computer-Telefonie-Integrationsanbieter definierten Sitzung gültig sind. Der Vorgangs-Handler bestimmt, welche Sitzungsattribut-Schlüssel-Wert-Paare benötigt werden, da er diese Werte während der Verarbeitung verwendet. Normalerweise legt der Vorgangs-Handler diese Attribute für das CTIOperationResponse-Objekt fest, indem er aufruft CTIOperationResponse – setSessionAttribute (Zeichenfolgenschlüssel, Objektwert) Methode und der Nachrichtenumwandler verbraucht die Attribute mit dieser Methode.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Objekt | Eine Zuordnung von Schlüssel-Wert-Paaren, die zuvor für das CTIOperationResponse-Objekt festgelegt wurden. Diese Schlüssel-Wert-Paare sind Freiform und werden durch die Anforderungen des Vorgangs-Handlers definiert. Die zurückgegebenen Werte sind entweder Zeichenfolgen oder Zahlen. |
(function (/*CTIOperationResponse*/operationResponse, /*HTTPResponse*/ httpResponse) {
// AWS Connect Lambda expects name value pairs only
var out = {};
for(var k in operationResponse.getSessionAttributes()) {
out[k] = operationResponse.getSessionAttributes()[k];
}
out.statusCode = operationResponse.getStatusCode();
out.message = operationResponse.getMessage();
httpResponse.setBody(out);
})(operationResponse, httpResponse);
CTIOperationResponse – getStatusCode()
Gibt den Statuscode zurück, der für das aktuelle CTIOperationResponse-Objekt festgelegt ist.
Diese Statuscodes müssen standardmäßigen HTTP-Statuscodes entsprechen, z. B. 200 für Erfolg, 401 für erforderliche Autorisierung. Normalerweise werden die resultierenden Statuscodes vom Vorgangs-Handler bestimmt und im CTIOperationResponse-Objekt mit festgelegt CTIOperationResponse – setStatusCode(String statusCode) Methode. Der Nachrichtenumwandler verwendet diese Methode, um den Statuscode in die Nutzlast einzubeziehen, die an den Anbieter des Computertelefonie-Integrators zurückgegeben wird.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Anzahl | Statuscode des aktuellen Vorgangs. Wenn kein Statuscode festgelegt wurde, wird -1 zurückgegeben. |
(function (/*CTIOperationResponse*/operationResponse, /*HTTPResponse*/ httpResponse) {
// AWS Connect Lambda expects name value pairs only
var out = {};
for(var k in operationResponse.getSessionAttributes()) {
out[k] = operationResponse.getSessionAttributes()[k];
}
out.statusCode = operationResponse.getStatusCode();
out.message = operationResponse.getMessage();
httpResponse.setBody(out);
})(operationResponse, httpResponse);
CTIOperationResponse – setAuthToken (Zeichenfolgentoken)
Legt ein Authentifizierungstoken für das aktuelle CTIOperationResponse-Objekt fest.
Dieses Token wird von verwendet ServiceNow Sprachfunktionen Framework zur Authentifizierung des aktuellen ServiceNow Sprachfunktionen Anwender, bevor der angeforderte Vorgangs-Handler ausgeführt wird, falls der Handler auth_requiredKennzeichnung ist auf „wahr“ festgelegt. Die auth_requiredKennzeichnung ist ein Feld in der Tabelle „Vorgangs-Handler“ [sn_cti_Operation_Handler]. Die Lebensdauer eines Authentifizierungstokens sollte für die Lebensdauer der Anrufsitzung betragen, wird jedoch vom CTI-Anbieter festgelegt.
Sie können die für Ihre Implementierung erforderliche Authentifizierungs-/Autorisierungsbehandlung definieren, indem Sie einen eigenen Authentifizierungsvorgang-Handler erstellen. Unabhängig davon, wie das Authentifizierungstoken generiert wird, muss der Nachrichtenübersetzer das Token in der CTI-Nutzlast zurückgeben. Darüber hinaus muss der CTI-Anbieter dieses Authentifizierungstoken lokal speichern und in jeder Vorgangsanforderung übergeben, die eine Authentifizierung erfordert.
Wenn der von der Instanz bereitgestellte Authentifizierungsvorgang-Handler verwendet wird, initiiert der Handler die Erstellung des Authentifizierungstokens basierend auf einer vierstelligen, vom Anwender eingegebenen PIN. Dann wird das Authentifizierungstoken im Objekt sessionAttributes des CTIOperationResponse-Objekts festgelegt. Der zugehörige Nachrichtenumwandler übersetzt das sessionAttributes-Objekt in die CTI-spezifische Nutzlast und sendet es dann an den CTI-Anbieter.
- Amazon Web Services (AWS) Lambda-Proxy (AWS Lambda-Funktion aufrufen)
- AWS Lex-Bot (Kundeneingabe abrufen)
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Das Authentifizierungstoken, das zum Authentifizieren von Vorgängen mit verwendet werden soll auth_requiredKennzeichnungssatz. |
var response = new sn_cti_core.CTIOperationResponse();
var authenticate = <Your authentication code here>; // Authenticate the user
if (authenticated) {
var claims = {
"interactionId":interactionGr.sys_id.toString()
};
var jwt = new sn_cti_core.AuthHelpers().generateJWT(claims);
response.setAuthToken(jwt);
}
CTIOperationResponse – setError(Objektfehler)
Legt das Fehlerobjekt im aktuellen CTIOperationResponse-Objekt fest.
Sie können das Fehlerobjekt in der Komponente verwenden, um die Nutzlast zu formulieren, die an den CTI-Anbieter (Computer Telephony Integrator) gesendet werden soll.
| Name | Typ | Beschreibung |
|---|---|---|
| error | Objekt | Informationen zum Fehler, der bei der Verarbeitung des angeforderten Vorgangs erkannt wurde. Das Format dieses Objekts wird vom CTI-Anbieter bestimmt. |
| Typ | Beschreibung |
|---|---|
| void |
var response = new sn_cti_core.CTIOperationResponse();
response.setError(new Error("You did not supply a field"));
CTIOperationResponse – setInteractionSysId(Zeichenfolgen-ID)
Legt die sys_ID des Interaktionsdatensatzes fest, der der Vorgangsanforderung für das aktuelle CTIOperationResponse-Objekt zugeordnet ist.
| Name | Typ | Beschreibung |
|---|---|---|
| sys_id | Zeichenfolge | Die sys_ID, die für die aktuelle Interaktion festgelegt werden soll. |
| Typ | Beschreibung |
|---|---|
| void |
var response = new sn_cti_core.CTIOperationResponse();
response.setInteractionSysId('98529cc55380001048e5ddeeff7b120b');
CTIOperationResponse – setMajorVersion(Number MAJORVERSION)
Legt die Hauptversion der CTI-Anbietersoftware (Computer Telephony Integrator) fest, die die Anforderung für das zugehörige CTIOperationResponse-Objekt stellt.
Verwenden Sie diese Methode, wenn die CTI-Anbieter mit verbunden sind ServiceNow Instanz führt mehrere Versionen ihrer Software aus, da verschiedene Softwareversionen unterschiedliche Nutzlasten erfordern können. Wenn sich die Nutzlast zwischen den Softwareversionen nur geringfügig unterscheidet, kann es sinnvoll sein, nur einen einzelnen Nachrichtenumwandler zu haben. Sie können dann die Nutzlastunterschiede verarbeiten, indem Sie einfach die Version der Software überprüfen, die die Anforderung in Ihrem Nachrichtenumwandler stellt. Wenn sich die erforderliche Nutzlast zwischen Versionen erheblich unterscheidet, kann es effektiver sein, mehrere Nachrichtentransformatoren zu verwenden.
| Name | Typ | Beschreibung |
|---|---|---|
| majorVersion | Anzahl | Hauptversion der CTI-Anbietersoftware, die die Vorgangsanforderung stellt. Wenn dieser Wert zuvor nicht festgelegt wurde, wird zurückgegeben 1 . |
| Typ | Beschreibung |
|---|---|
| void |
var request = new sn_cti_core.CTIOperationResponse();
request.setMajorVersion(2);
CTIOperationResponse – setMessage(Zeichenfolgennachricht)
Legt eine Textnachricht für das aktuelle CTIOperationResponse-Objekt fest.
Normalerweise ist dies eine Nachricht, die an den Anwender zurückgesandt wird, sobald ein Vorgang abgeschlossen ist, und die vom zugehörigen Vorgangs-Handler festgelegt wird. Der Nachrichtenumwandler verwendet dann CTIOperationResponse – getMessage() Methode, um die Nachricht abzurufen und an den Integrationsanbieter für die Computertelefonie zurückzugeben.
| Name | Typ | Beschreibung |
|---|---|---|
| Nachricht | Zeichenfolge | Nachrichtentext |
| Typ | Beschreibung |
|---|---|
| void |
(function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, /*Context*/ ctx) {
var notes = '', lang = request.getLanguage();
try {
var interactionGr = request.getInteractionRecord();
var now_GR = new GlideRecord('sys_user');
if(interactionGr && now_GR.get(interactionGr.opened_for.toString())) {
if(now_GR.locked_out == true) {
notes += gs.getMessageLang("User record found locked. Unlocking the account.\n", lang);
now_GR.locked_out=false;
now_GR.update();
response.setStatusCode(200);
response.setMessage(gs.getMessageLang("Your account has been unlocked.", lang));
} else {
notes += gs.getMessageLang("User record not locked.\n", lang);
response.setStatusCode(200);
response.setMessage(gs.getMessageLang("Your account doesn't seem to be locked.", lang));
}
} else {
notes += gs.getMessageLang("User record not found. Transfer to agent\n", lang);
response.setStatusCode(302);
response.setMessage(gs.getMessageLang("I am unable to find your record. Let me transfer to someone who can help.", lang));
}
if(interactionGr) {
interactionGr.work_notes = notes;
interactionGr.update();
}
} catch(e) {
ctx.setError(e);
}
})(request, response, ctx);
CTIOperationResponse – setMinorVersion(Number minorversion)
Legt die Nebenversion der CTI-Anbietersoftware (Computer Telephony Integrator) fest, die die Anforderung für das zugehörige CTIOperationResponse-Objekt stellt.
Verwenden Sie diese Methode, wenn die CTI-Anbieter mit verbunden sind ServiceNow Instanz führt mehrere Versionen ihrer Software aus, da verschiedene Softwareversionen unterschiedliche Nutzlasten erfordern können. Wenn sich die Nutzlast zwischen den Softwareversionen nur geringfügig unterscheidet, kann es sinnvoll sein, nur einen einzelnen Nachrichtenumwandler zu haben. Sie können dann die Nutzlastunterschiede verarbeiten, indem Sie einfach die Version der Software überprüfen, die die Anforderung in Ihrem Nachrichtenumwandler stellt. Wenn sich die erforderliche Nutzlast zwischen Versionen erheblich unterscheidet, kann es effektiver sein, mehrere Nachrichtentransformatoren zu verwenden.
| Name | Typ | Beschreibung |
|---|---|---|
| minorVersion | Anzahl | Nebenversion der CTI-Anbietersoftware, die die Vorgangsanforderung stellt. Wenn dieser Wert zuvor nicht festgelegt wurde, wird zurückgegeben 0 . |
| Typ | Beschreibung |
|---|---|
| void |
var response = new sn_cti_core.CTIOperationResponse();
response.setMinorVersion(3);
CTIOperationResponse – setParameter(Zeichenfolgenschlüssel, Objektwert)
Legt das angegebene Schlüssel-Wert-Paar für das zugehörige CTIOperationResponse-Objekt fest.
Mit den GET/Set-Parametermethoden können praktisch alle Zeichenfolgen- oder Zahlenwerte zwischen einem Vorgangs-Handler und einem Nachrichtenumwandler übergeben werden. Das Parameterobjekt kann null oder mehr Schlüssel/Wert-Paare von Daten enthalten, die direkt mit der aktuellen Vorgangsanforderung korrelieren. Der Vorgangs-Handler bestimmt, welche Schlüssel-Wert-Paare erforderlich sind, da er diese Werte verbraucht. Normalerweise legt der Vorgangs-Handler diese Parameter für das CTIOperationResponse-Objekt fest, indem diese Methode aufgerufen wird, und der Nachrichtenumwandler verbraucht sie mithilfe von CTIOperationResponse – getParmeter(Zeichenfolgenschlüssel) Oder CTIOperationResponse – getSParameters() Methode.
JSON.Parse(JSON.stringify(object)) Vorgang. Objekte, die diese Kriterien nicht erfüllen, werden möglicherweise nicht ordnungsgemäß über die gesamte Verarbeitungskette des Vorgangs weitergegeben.var x = {
"string": 'abc',
"int": 123,
"float": 1.234,
"number": new Number(3),
"boolean": true,
"date": new Date(2006, 0, 2, 15, 4, 5),
"object": {
"string": 'abc',
"int": 123,
"float": 1.234,
"number": new Number(3),
"boolean": true,
"date": new Date(2006, 0, 2, 15, 4, 5)
},
"function": function(abc) {
}
}
var stringify = JSON.stringify(x);
gs.info(stringify);
var hydrate = JSON.parse(stringify);
var stringify2 = JSON.stringify(hydrate);
gs.info(stringify2);
{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z","object":{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z"}}
{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z","object":{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z"}}
| Name | Typ | Beschreibung |
|---|---|---|
| key | Zeichenfolge | Name des Schlüssels, unter dem der zugeordnete Wert gespeichert werden soll. |
| Wert | Objekt | Wert, der für den Schlüssel gespeichert werden soll. Gültige Datentypen:
|
| Typ | Beschreibung |
|---|---|
| void |
var response = new sn_cti_core.CTIOperationResponse();
response.setParameter('contact.phone', '+15552222345');
response.setParameter('contact.okToCall', true);
response.setParameter('contact.address', {
street: '1234 Main St'
city: 'API City',
zip: 91335
});
CTIOperationResponse – setSessionAttribute (Zeichenfolgenschlüssel, Objektwert)
Legt das angegebene Sitzungsattribut-Schlüssel-Wert-Paar für das zugehörige CTIOperationResponse-Objekt fest.
Mit den Methoden zum Abrufen/Festlegen des Sitzungsattributs können praktisch alle Zeichenfolgen- oder Zahlenwerte zwischen einem Vorgangs-Handler und einem Nachrichtenumwandler übergeben werden. Das sessionAttribute-Objekt kann null oder mehr Schlüssel-Wert-Paare von Daten enthalten, die für die Dauer einer vom Computer-Telefonie-Integrationsanbieter definierten Sitzung gültig sind. Auf Sitzungsattribute kann auch innerhalb eines Kontakt-Flows zugegriffen werden. Der Vorgangs-Handler bestimmt, welche Sitzungsattribut-Schlüssel-Wert-Paare benötigt werden, da er diese Werte verbraucht. Normalerweise legt der Vorgangs-Handler diese Attribute für das CTIOperationResponse-Objekt fest, indem diese Methode aufgerufen wird, und der Nachrichtenumwandler ruft die Attribute mit ab CTIOperationResponse – getSessionAttribute(Zeichenfolgenschlüssel) Oder CTIOperationResponse – getSessionAttribute() Methode.
JSON.Parse(JSON.stringify(object)) Vorgang. Objekte, die diese Kriterien nicht erfüllen, werden möglicherweise nicht ordnungsgemäß über die gesamte Verarbeitungskette des Vorgangs weitergegeben.var x = {
"string": 'abc',
"int": 123,
"float": 1.234,
"number": new Number(3),
"boolean": true,
"date": new Date(2006, 0, 2, 15, 4, 5),
"object": {
"string": 'abc',
"int": 123,
"float": 1.234,
"number": new Number(3),
"boolean": true,
"date": new Date(2006, 0, 2, 15, 4, 5)
},
"function": function(abc) {
}
}
var stringify = JSON.stringify(x);
gs.info(stringify);
var hydrate = JSON.parse(stringify);
var stringify2 = JSON.stringify(hydrate);
gs.info(stringify2);
{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z","object":{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z"}}
{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z","object":{"string":"abc","int":123,"float":1.234,"number":3,"boolean":true,"date":"2006-01-02T23:04:05.000Z"}}
| Name | Typ | Beschreibung |
|---|---|---|
| key | Zeichenfolge | Name des Sitzungsattribut-Schlüssels, unter dem der zugeordnete Wert festgelegt werden soll. |
| Wert | Objekt | Festzulegender Wert. Gültige Datentypen:
|
| Typ | Beschreibung |
|---|---|
| void |
var response = new sn_cti_core.CTIOperationResponse();
response.setSessionAttribute('contact.phone', '+15552222345');
response.setSessionAttribute('contact.okToCall', true);
response.setSessionAttribute('contact.address', {
street: '1234 Main St'
city: 'API City',
zip: 91335
});
CTIOperationResponse – setStatusCode(Number statusCode)
Legt den Statuscode der aktuellen Vorgangsanforderung für das CTIOperationResponse-Objekt fest.
Sie können beliebige Ganzzahlwerte verwenden, um den Status zu definieren. Es wird jedoch empfohlen, die HTTP-Statuscodes zu emulieren, z. B. 200 = OK/Erfolg, 400 = ungültige Anforderung, 401 = nicht autorisiert.
| Name | Typ | Beschreibung |
|---|---|---|
| statusCode | Anzahl | Ganzzahl, die den Status des angeforderten Vorgangs eindeutig identifiziert. |
| Typ | Beschreibung |
|---|---|
| void |
(function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, /*Context*/ ctx) {
var notes = '', lang = request.getLanguage();
try {
var interactionGr = request.getInteractionRecord();
var now_GR = new GlideRecord('sys_user');
if(interactionGr && now_GR.get(interactionGr.opened_for.toString())) {
if(now_GR.locked_out == true) {
notes += gs.getMessageLang("User record found locked. Unlocking the account.\n", lang);
now_GR.locked_out=false;
now_GR.update();
response.setStatusCode(200);
response.setMessage(gs.getMessageLang("Your account has been unlocked.", lang));
} else {
notes += gs.getMessageLang("User record not locked.\n", lang);
response.setStatusCode(200);
response.setMessage(gs.getMessageLang("Your account doesn't seem to be locked.", lang));
}
} else {
notes += gs.getMessageLang("User record not found. Transfer to agent\n", lang);
response.setStatusCode(302);
response.setMessage(gs.getMessageLang("I am unable to find your record. Let me transfer to someone who can help.", lang));
}
if(interactionGr) {
interactionGr.work_notes = notes;
interactionGr.update();
}
} catch(e) {
ctx.setError(e);
}
})(request, response, ctx);