CTIOperationResponse – Scoped, Global
Die API CTIOperationResponse stellt Methoden zum Festlegen und Abrufen von Daten im aktuellen CTIOperationResponse-Objekt bereit.
Sie verwenden CTIOperationResponse-Objekte, um Informationen zwischen einem Vorgangs-Handler und einem Nachrichtentransformer innerhalb des Frameworks ServiceNow Sprachfunktionen zu übergeben.
Normalerweise ist ein Vorgangs-Handler für das Festlegen von Werten im CTIOperationResponse-Objekt verantwortlich, während die zugehörige Anforderung verarbeitet wird. Ein Nachrichtentransformator ist dann dafür verantwortlich, die Werte aus dem CTIOperationRequest-Objekt abzurufen und die CTI-spezifische Nutzlast zu erstellen, die an den CTI-Anbieter (Computer Telephony Integrator) 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 CTIOperationResponse- Methoden zum Festlegen von Werten für das CTIOperationResponse-Objekt verwendet werden.
(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 Kontakt-Flow für eine automatisierte Anruferinteraktion konfigurieren.
Das folgende Skript für Nachrichtentransformatoren 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 API wird im Namespace sn_cti_core ausgeführt. Bevor Sie auf die CTIOperationRequest- API zugreifen können, muss das Plugin ServiceNow Sprachfunktionen Core (sn_cti_core) installiert sein. Weitere Informationen zu dieser Installation finden Sie unter ServiceNow Voice-Anwendungen installieren.
Weitere Informationen zu ServiceNow Sprachfunktionenfinden Sie unter ServiceNow Voice.
CTIOperationResponse – CTIOperationResponse(String Origin)
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 vom ServiceNow Sprachfunktionen -Framework verwendet, um den aktuellen ServiceNow Sprachfunktionen -Benutzer zu authentifizieren, bevor der angeforderte Vorgangs-Handler ausgeführt wird, wenn die Kennzeichnung auth_required des Handler auf „true“ gesetzt ist. Die Kennzeichnung auth_required ist ein Feld in der Tabelle „Operation Handler“ [sn_cti_operation_handler]. Die Lebensdauer eines Authentifizierungstokens sollte für die Lebensdauer der Anrufsitzung gelten, wird jedoch vom CTI-Provider bestimmt.
Sie können die für Ihre Implementierung erforderliche Authentifizierungs-/Autorisierungsbehandlung definieren, indem Sie einen eigenen Handler für Authentifizierungsvorgänge 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-Provider dieses Authentifizierungstoken lokal speichern und in jeder Vorgangsanforderung übergeben, die eine Authentifizierung erfordert.
Wenn Sie den von der Instanz bereitgestellten Handler für den Authentifizieren-Vorgang verwenden, initiiert der Handler die Erstellung des Authentifizierungstokens basierend auf einer vierstelligen vom Benutzer eingegebenen PIN. Anschließend wird das Authentifizierungstoken im Objekt „sessionAttributes“ des Objekts „CTIOperationResponse“ festgelegt. Der zugeordnete Nachrichtentransformer übersetzt das Objekt „sessionAttributes“ in die CTI-spezifische Nutzlast und sendet sie dann an den CTI-Provider.
- 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-Provider 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 Methode CTIOperationResponse – setInteractionSysId(String Id) muss vor dem Aufruf dieser Methode aufgerufen worden sein.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Die sys_id des Interaktionsdatensatzes, der für das CTIOperationResponse-Objekt festgelegt ist. Interaktionsdatensätze befinden sich in der Interaktionstabelle [interaction]. Wenn die sys_id des Interaktionsdatensatzes nicht festgelegt ist, gibt die Methode NULL zurück. |
var request = new sn_cti_core.CTIOperationResponse();
var interactionId = request.getInteractionSysId();
CTIOperationResponse – getMajorVersion()
Gibt die Hauptversion der CTI-Software (Computer Telephony Integrator) zurück, die für das aktuelle CTIOperationResponse-Objekt festgelegt ist.
Verwenden Sie diese Methode, wenn die mit Ihrer Instanz ServiceNow verbundenen CTI-Provider mehrere Versionen ihrer Software ausführen, da unterschiedliche Softwareversionen möglicherweise unterschiedliche Nutzlasten erfordern. Wenn sich die Nutzlast zwischen den Softwareversionen nur geringfügig unterscheidet, kann es sinnvoll sein, nur einen einzigen Nachrichtentransformator zu verwenden. Sie können dann die Nutzlastunterschiede behandeln, indem Sie einfach die Version der Software überprüfen, die die Anforderung in Ihrem Nachrichtentransformator sendet. Wenn sich die erforderliche Nutzlast zwischen den Versionen erheblich unterscheidet, kann es effektiver sein, mehrere Nachrichtenumwandler zu verwenden.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Nummer | Hauptversionsnummer der CTI-Software. Wenn die Hauptversion nie festgelegt wurde, wird 1zurückgegeben. |
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 nach Abschluss eines Vorgangs an den Benutzer zurückgegeben wird. Sie können diesen Wert mit der Methode CTIOperationResponse – setMessage(String message) festlegen.
| 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 CTI-Software (Computer Telephony Integrator) zurück, die für das aktuelle CTIOperationResponse-Objekt festgelegt ist.
Verwenden Sie diese Methode, wenn die mit Ihrer Instanz ServiceNow verbundenen CTI-Provider mehrere Versionen ihrer Software ausführen, da unterschiedliche Softwareversionen möglicherweise unterschiedliche Nutzlasten erfordern. Wenn sich die Nutzlast zwischen den Softwareversionen nur geringfügig unterscheidet, kann es sinnvoll sein, nur einen einzigen Nachrichtentransformator zu verwenden. Sie können dann die Nutzlastunterschiede behandeln, indem Sie einfach die Version der Software überprüfen, die die Anforderung in Ihrem Nachrichtentransformator sendet. Wenn sich die erforderliche Nutzlast zwischen den Versionen erheblich unterscheidet, kann es effektiver sein, mehrere Nachrichtenumwandler zu verwenden.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Nummer | Nebenversionsnummer der Nutzlast, die dieser Interaktion zugeordnet ist. Wenn die Nebenversion nie festgelegt wurde, wird 0zurückgegeben. |
var request = new sn_cti_core.CTIOperationResponse();
var minorVersion = request.getMinorVersion();
CTIOperationResponse – getParameter(String key)
Gibt den Wert eines angegebenen Schlüssels zurück, der zuvor für das aktuelle CTIOperationResponse-Objekt festgelegt wurde.
Die Verwendung der Methoden zum Abrufen/Festlegen von Parametern ermöglicht die Übergabe praktisch beliebiger Zeichenfolgen- oder Zahlenwerte zwischen einem Vorgangs-Handler und einem Nachrichtentransformer. 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 die Methode CTIOperationResponse – setParameter(String key, Object value), um Parameter für das aktuelle CTIOperationResponse-Objekt festzulegen.
| 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, wird NULL zurückgegeben. |
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.
Die Verwendung der Methoden zum Abrufen/Festlegen von Parametern ermöglicht die Übergabe praktisch beliebiger Zeichenfolgen- oder Zahlenwerte zwischen einem Vorgangs-Handler und einem Nachrichtentransformer. 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 die Methode CTIOperationResponse – setParameter(String key, Object value), um Parameter für das aktuelle CTIOperationResponse-Objekt festzulegen.
| 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 haben eine 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(String key)
Gibt den Wert für einen angegebenen Sitzungsattributschlüssel zurück, der für das aktuelle CTIOperationResponse-Objekt festgelegt ist.
Die Verwendung der Methoden zum Abrufen/Festlegen von Sitzungsattributen ermöglicht die Übergabe praktisch beliebiger Zeichenfolgen- oder Zahlenwerte zwischen einem Vorgangs-Handler und einem Nachrichtentransformer. Auf Sitzungsattribute kann auch innerhalb eines Kontakt-Flows zugegriffen werden. Das Objekt „sessionAttribute“ kann null oder mehr Schlüssel-Wert-Paare von Daten enthalten, z. B. die Telefonnummer des Kontakts, die für die Dauer einer vom Anbieter der Computer-Telefonie-Integration definierten Sitzung gültig sind. Der Vorgangs-Handler bestimmt, welche Schlüssel-Wert-Paare für Sitzungsattribute erforderlich sind, da er diese Werte während der Verarbeitung verwendet. Normalerweise legt der Vorgangs-Handler diese Attribute für das CTIOperationResponse-Objekt fest, indem er die Methode CTIOperationResponse - setSessionAttribute(String key, Object value) aufruft, und der Nachrichtentransformer 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, wird NULL zurückgegeben. |
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.
Die Verwendung der Methoden zum Abrufen/Festlegen von Sitzungsattributen ermöglicht die Übergabe praktisch beliebiger Zeichenfolgen- oder Zahlenwerte zwischen einem Vorgangs-Handler und einem Nachrichtentransformer. Auf Sitzungsattribute kann auch innerhalb eines Kontakt-Flows zugegriffen werden. Das Objekt „sessionAttribute“ kann null oder mehr Schlüssel-Wert-Paare von Daten enthalten, z. B. die Telefonnummer des Kontakts, die für die Dauer einer vom Anbieter der Computer-Telefonie-Integration definierten Sitzung gültig sind. Der Vorgangs-Handler bestimmt, welche Schlüssel-Wert-Paare für Sitzungsattribute erforderlich sind, da er diese Werte während der Verarbeitung verwendet. Normalerweise legt der Vorgangs-Handler diese Attribute für das CTIOperationResponse-Objekt fest, indem er die Methode CTIOperationResponse - setSessionAttribute(String key, Object value) aufruft, und der Nachrichtentransformer 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 haben eine 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 sollten Standard-HTTP-Statuscodes entsprechen, z. B. 200 für Erfolg, 401 für Autorisierung erforderlich. Normalerweise werden die resultierenden Statuscodes vom Vorgangs-Handler bestimmt und für das CTIOperationResponse-Objekt mithilfe der Methode CTIOperationResponse – setStatusCode(String statusCode) festgelegt. Der Nachrichtentransformer verwendet dann diese Methode, um den Statuscode in die Nutzlast aufzunehmen, die an den Anbieter der Computer-Telefonie-Integration zurückgegeben wird.
| Name | Typ | Beschreibung |
|---|---|---|
| Keine |
| Typ | Beschreibung |
|---|---|
| Nummer | 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(String token)
Legt ein Authentifizierungstoken für das aktuelle CTIOperationResponse-Objekt fest.
Dieses Token wird vom ServiceNow Sprachfunktionen -Framework verwendet, um den aktuellen ServiceNow Sprachfunktionen -Benutzer zu authentifizieren, bevor der angeforderte Vorgangs-Handler ausgeführt wird, wenn die Kennzeichnung auth_required des Handler auf „true“ gesetzt ist. Die Kennzeichnung auth_required ist ein Feld in der Tabelle „Operation Handler“ [sn_cti_operation_handler]. Die Lebensdauer eines Authentifizierungstokens sollte für die Lebensdauer der Anrufsitzung gelten, wird jedoch vom CTI-Provider bestimmt.
Sie können die für Ihre Implementierung erforderliche Authentifizierungs-/Autorisierungsbehandlung definieren, indem Sie einen eigenen Handler für Authentifizierungsvorgänge 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-Provider dieses Authentifizierungstoken lokal speichern und in jeder Vorgangsanforderung übergeben, die eine Authentifizierung erfordert.
Wenn Sie den von der Instanz bereitgestellten Handler für den Authentifizieren-Vorgang verwenden, initiiert der Handler die Erstellung des Authentifizierungstokens basierend auf einer vierstelligen vom Benutzer eingegebenen PIN. Anschließend wird das Authentifizierungstoken im Objekt „sessionAttributes“ des Objekts „CTIOperationResponse“ festgelegt. Der zugeordnete Nachrichtentransformer übersetzt das Objekt „sessionAttributes“ in die CTI-spezifische Nutzlast und sendet sie dann an den CTI-Provider.
- 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 verwendet werden soll, für die das Flag auth_required festgelegt ist. |
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(Object error)
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-Provider bestimmt. |
| Typ | Beschreibung |
|---|---|
| void |
var response = new sn_cti_core.CTIOperationResponse();
response.setError(new Error("You did not supply a field"));
CTIOperationResponse – setInteractionSysId(String 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 Anbietersoftware des Computer Telephony Integrator (CTI) fest, die die Anforderung für das zugeordnete CTIOperationResponse-Objekt sendet.
Verwenden Sie diese Methode, wenn die mit Ihrer Instanz ServiceNow verbundenen CTI-Provider mehrere Versionen ihrer Software ausführen, da unterschiedliche Softwareversionen möglicherweise unterschiedliche Nutzlasten erfordern. Wenn sich die Nutzlast zwischen den Softwareversionen nur geringfügig unterscheidet, kann es sinnvoll sein, nur einen einzigen Nachrichtentransformator zu verwenden. Sie können dann die Nutzlastunterschiede behandeln, indem Sie einfach die Version der Software überprüfen, die die Anforderung in Ihrem Nachrichtentransformator sendet. Wenn sich die erforderliche Nutzlast zwischen den Versionen erheblich unterscheidet, kann es effektiver sein, mehrere Nachrichtenumwandler zu verwenden.
| Name | Typ | Beschreibung |
|---|---|---|
| majorVersion | Nummer | Hauptversion der CTI-Provider-Software, die die Vorgangsanforderung sendet. Wenn dieser Wert zuvor nicht festgelegt wurde, wird 1zurückgegeben. |
| Typ | Beschreibung |
|---|---|
| void |
var request = new sn_cti_core.CTIOperationResponse();
request.setMajorVersion(2);
CTIOperationResponse – setMessage(String message)
Legt eine Textnachricht für das aktuelle CTIOperationResponse-Objekt fest.
Normalerweise ist dies eine Nachricht, die nach Abschluss eines Vorgangs an den Benutzer zurückgesendet und vom zugeordneten Vorgangs-Handler festgelegt wird. Der Nachrichtenumwandler verwendet dann die Methode CTIOperationResponse – getMessage(), um die Nachricht abzurufen und an den Anbieter der Computer-Telefonie-Integration 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 Anbietersoftware des Computer Telephony Integrator (CTI) fest, die die Anforderung für das zugeordnete CTIOperationResponse-Objekt sendet.
Verwenden Sie diese Methode, wenn die mit Ihrer Instanz ServiceNow verbundenen CTI-Provider mehrere Versionen ihrer Software ausführen, da unterschiedliche Softwareversionen möglicherweise unterschiedliche Nutzlasten erfordern. Wenn sich die Nutzlast zwischen den Softwareversionen nur geringfügig unterscheidet, kann es sinnvoll sein, nur einen einzigen Nachrichtentransformator zu verwenden. Sie können dann die Nutzlastunterschiede behandeln, indem Sie einfach die Version der Software überprüfen, die die Anforderung in Ihrem Nachrichtentransformator sendet. Wenn sich die erforderliche Nutzlast zwischen den Versionen erheblich unterscheidet, kann es effektiver sein, mehrere Nachrichtenumwandler zu verwenden.
| Name | Typ | Beschreibung |
|---|---|---|
| minorVersion | Nummer | Nebenversion der CTI-Provider-Software, die die Vorgangsanforderung sendet. Wenn dieser Wert zuvor nicht festgelegt wurde, wird 0zurückgegeben. |
| Typ | Beschreibung |
|---|---|
| void |
var response = new sn_cti_core.CTIOperationResponse();
response.setMinorVersion(3);
CTIOperationResponse – setParameter(String key, Object value)
Legt das angegebene Schlüssel-Wert-Paar für das zugeordnete CTIOperationResponse-Objekt fest.
Die Verwendung der Methoden zum Abrufen/Festlegen von Parametern ermöglicht die Übergabe praktisch beliebiger Zeichenfolgen- oder Zahlenwerte zwischen einem Vorgangs-Handler und einem Nachrichtentransformer. 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 er diese Methode aufruft, und der Nachrichtentransformer verarbeitet sie mit der Methode CTIOperationResponse – getParmeter(String key) oder CTIOperationResponse – getSParameters().
JSON.parse(JSON.stringify(object))- Vorgang überstehen können. Objekte, die diese Kriterien nicht erfüllen, werden möglicherweise nicht ordnungsgemäß über die gesamte Vorgangsverarbeitungskette verteilt.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(String key, Object value)
Legt das angegebene Schlüssel-Wert-Paar für Sitzungsattribute für das zugeordnete CTIOperationResponse-Objekt fest.
Die Verwendung der Methoden zum Abrufen/Festlegen von Sitzungsattributen ermöglicht die Übergabe praktisch beliebiger Zeichenfolgen- oder Zahlenwerte zwischen einem Vorgangs-Handler und einem Nachrichtentransformator. Das Objekt „sessionAttribute“ kann null oder mehr Schlüssel-Wert-Paare von Daten enthalten, die für die Dauer einer vom Anbieter der Computer-Telefonie-Integration definierten Sitzung gültig sind. Auf Sitzungsattribute kann auch innerhalb eines Kontakt-Flows zugegriffen werden. Der Vorgangs-Handler bestimmt, welche Schlüssel-Wert-Paare für Sitzungsattribute erforderlich sind, da er diese Werte verbraucht. Normalerweise legt der Vorgangs-Handler diese Attribute für das CTIOperationResponse-Objekt fest, indem er diese Methode aufruft, und der Nachrichten-Umwandler ruft die Attribute mit der Methode CTIOperationResponse – getSessionAttribute(String key) oder CTIOperationResponse – getSessionAttribute() ab.
JSON.parse(JSON.stringify(object))- Vorgang überstehen können. Objekte, die diese Kriterien nicht erfüllen, werden möglicherweise nicht ordnungsgemäß über die gesamte Vorgangsverarbeitungskette verteilt.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 Sitzungsattributschlü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 ganzzahlige Werte 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 | Nummer | 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);