CTIOperationRequest : champ d’application, global

  • Rversion finale: Zurich
  • Mis à jour 31 juil. 2025
  • 37 minutes de lecture
  • L’include de script CTIOperationRequest fournit des méthodes pour définir et obtenir des données sur l’objet CTIOperationRequest actuel.

    Vous utilisez des objets CTIOperationRequest pour transmettre des informations entre un transformateur de message et un gestionnaire d’opération dans le cadre de ServiceNow Fonctions vocales travail.

    En règle générale, un transformateur de message est chargé d’analyser une charge utile CTI entrante spécifique et de définir les données de charge utile sur un objet CTIOperationRequest associé. Un gestionnaire d’opération est ensuite chargé d’obtenir les informations de l’objet CTIOperationRequest et d’utiliser les données pour traiter l’opération demandée.

    Le ServiceNow système de base fournit des gestionnaires d’opérations et des transformateurs de message fonctionnels qui permettent la connexion à Amazon Connect. Lors de la création de flux de contacts dans Amazon Connect, il existe deux points d’intégration entre les services Amazon et une ServiceNow instance :
    • Proxy Lambda Amazon Web Services (AWS) (invoquer la fonction AWS Lambda)
    • Bot AWS Lex (obtenir l’entrée du client)
    Vous pouvez trouver les gestionnaires d’opérations et les transformateurs de message disponibles pour ces points d’intégration dans les tables Gestionnaires d’opérations [sn_cti_operation_handler] et Transformateur de message de fournisseur [sn_cti_provider_msg_transormer].

    Une charge utile est transmise à une ServiceNow instance à partir d’une source externe, par exemple à partir d’un fournisseur d’intégration téléphonie-informatique (CTI) qui effectue une demande d’opération. Lorsqu’une demande est reçue, un transformateur de message analyse la charge utile et utilise les méthodes de définition CTIOperationRequest pour définir des valeurs de charge utile, telles que le nom du gestionnaire d’opération, sur une opération et un objet CTIOperationRequest spécifique au contact.

    Par exemple, le script de transformateur de message suivant analyse la charge utile JSON transmise et définit les valeurs requises par le gestionnaire d’opération associé sur l’objet CTIOperationRequest.

    {	
      try {
        var jsonPayload = httpRequest.body.data;
        if (jsonPayload) {
    	var event = jsonPayload.event;
    	if (event) {
    	  var details = event.Details;
    	  if (details) {					
    	    operationRequest.setOperationName(details.Parameters['sn_operation']);
    	    var contactData = details.ContactData;
    	    if(contactData) {
    		// Call id should be surfaced in openframe call log so it can be tied to transcription later
    		operationRequest.setParameter('contact.call_id', contactData.ContactId);
    		for(var ck in contactData.CustomerEndpoint) {
    		  operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
    	       }
    	       operationRequest.setParameter('contact.id', contactData.ContactId);
    	       operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
    	    }
    	    var parameters = details.Parameters;
    	    if (parameters) {
    		for (var pk in parameters) {
    		  switch(pk) {
    		    case 'interactionId':
    			operationRequest.setInteractionSysId(parameters[pk]);
    			break;
    		    case 'authToken':
    			operationRequest.setAuthToken(parameters[pk]);
    			break;
    		    case 'language':
    			operationRequest.setLanguage(parameters[pk]);
    			break;
    								
    		    default:
    			operationRequest.setParameter(pk, parameters[pk]);
    		 }						
                }
              }					
            }
          }
        }
      } catch(e) {
    		ctx.setError(e);
      }
    })(httpRequest, operationRequest, ctx);

    Une fois que le transformateur de message a terminé l’analyse de la charge utile transmise, l’infrastructure ServiceNow Fonctions vocales instancie le gestionnaire d’opération spécifié. Le gestionnaire d’opération utilise les méthodes d’obtention de l’include de script CTIOperationResponse pour obtenir les informations dont il a besoin à partir de l’objet CTIOperationRequest associé pour traiter l’opération demandée.

    Par exemple, le script de gestionnaire d’opérations suivant stocke les valeurs définies sur l’objet CTIOperationRequest dans l’enregistrement d’interaction associé à l’appel.

    (function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, ctx) {
      // Returns the sys_id of the interaction record.
      var interactionSysId = request.getInteractionSysId();
      var number = request.getParameter('number');
      var addComment = request.getParameter('add_comment');
      addComment = addComment ? addComment.toLowerCase() : addComment;
      addComment = 'yes' === addComment || 'true' === addComment || '1' === addComment;
      var workNotes = request.getParameter('work_notes');
      var message = gs.getMessage('Thankyou');
      var interactionGr = request.getInteractionRecord();
      var openedFor = interactionGr ? interactionGr.getValue('opened_for') : null;
      if (openedFor && number && addComment && workNotes) {
        var now_GR = new GlideRecordSecure('incident');
        now_GR.addQuery('caller_id', openedFor);
        now_GR.addQuery('number', number);
        now_GR.query();
        if (now_GR.next()) {
          now_GR.work_notes += workNotes;
          now_GR.update();
          message = now_GR.getMessage('Your comment was added');
        }
      }
      response.setStatusCode(200);
      response.setMessage(message);
    })(request, response, ctx);

    Pour plus d’informations sur la création de gestionnaires d’opérations, consultez Configurer un flux de contact pour une interaction automatisée de l’appelant.

    Cet include de script s’exécute dans l’espace de noms sn_cti_core . Avant de pouvoir accéder à l’include de script CTIOperationRequest , le module d’extension ServiceNow Fonctions vocales (sn_cti_core) doit être activé. Pour plus d’informations sur l’activation ServiceNow Fonctions vocales, voir Installer les applications vocales ServiceNow.

    Pour en savoir plus sur , ServiceNow Fonctions vocales consultez Fonctions vocales ServiceNow.

    CTIOperationRequest : CTIOperationRequest(origine de la chaîne)

    Instancie un objet CTIOperationRequest.

    Tableau 1. Paramètres
    Nom Type Description
    origine Chaîne Facultatif. Origine de la demande. Généralement le nom du fournisseur d’intégrateur de téléphonie informatique.

    Valeur par défaut : nul

    var request = new sn_cti_core.CTIOperationRequest('AWS Connect');
    request.setSessionAttribute('contact.phone', '+15552222345');
    request.setSessionAttribute('contact.okToCall', true);
    request.setSessionAttribute('contact.address', {
        street: '1234 Main St'
        city: 'API City',
        zip: 91335
    });

    CTIOperationRequest : getAuthToken()

    Renvoie le jeton d’authentification défini sur l’objet CTIOperationRequest associé.

    Ce jeton est utilisé par l’infrastructure ServiceNow Fonctions vocales pour authentifier l’utilisateur actuel ServiceNow Fonctions vocales avant d’exécuter le gestionnaire d’opération demandé si le marqueur du auth_required gestionnaire est défini sur vrai. Le auth_required marqueur est un champ de la table Gestionnaire d’opération [sn_cti_operation_handler]. La durée de vie d’un jeton d’authentification doit couvrir la durée de vie de la session d’appel, mais elle est déterminée par le fournisseur CTI.

    Vous pouvez définir toute opération d’authentification/d’autorisation requise par votre implémentation en créant votre propre gestionnaire d’opération d’authentification. Quelle que soit la façon dont le jeton d’authentification est généré, le traducteur de message doit renvoyer le jeton dans la charge utile CTI. En outre, le fournisseur CTI doit stocker ce jeton d’authentification localement et le transmettre dans chaque demande d’opération qui nécessite une authentification.

    Si vous utilisez l’instance fournie Authentifier le gestionnaire d’opération, le gestionnaire lance la création du jeton d’authentification sur la base d’un code PIN saisi par l’utilisateur à quatre chiffres. Il définit ensuite le jeton d’authentification dans l’objet sessionAttributes de l’objet CTIOperationResponse. Le transformateur de message associé traduit l’objet sessionAttributes en charge utile spécifique au CTI, puis l’envoie au fournisseur CTI.

    Remarque :
    Si le jeton d’authentification n’est pas transmis, toutes les demandes d’exécution de gestionnaires d’opérations avec le auth_required marqueur défini échoueront. Si vous n’utilisez pas l’authentification, vous n’avez pas besoin de conserver les jetons d’authentification.
    Le ServiceNow système de base fournit des gestionnaires d’opérations et des transformateurs de message fonctionnels qui permettent la connexion à Amazon Connect. Lors de la création de flux de contacts dans Amazon Connect, il existe deux points d’intégration entre les services Amazon et une ServiceNow instance :
    • Proxy Lambda Amazon Web Services (AWS) (invoquer la fonction AWS Lambda)
    • Bot AWS Lex (obtenir l’entrée du client)
    Vous pouvez trouver les gestionnaires d’opérations et les transformateurs de message disponibles pour ces points d’intégration dans les tables Gestionnaires d’opérations [sn_cti_operation_handler] et Transformateur de message de fournisseur [sn_cti_provider_msg_transormer].
    Tableau 2. Paramètres
    Nom Type Description
    Aucun
    Tableau 3. Renvoie
    Type Description
    Chaîne Le jeton d’authentification associé à l’utilisateur actuel ServiceNow Fonctions vocales .
    (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);

    CTIOperationRequest : getInteractionRecord()

    Retourne le GlideRecord d’interaction associé à la demande d’opération.

    Une interaction représente une demande d’assistance d’un client effectuée par le biais d’une messagerie instantanée, d’un appel téléphonique ou en personne. Les interactions peuvent être acheminées vers des files d’attente pour être affectées ou affectées directement à des agents. Les enregistrements d’interaction sont stockés dans la table Interaction [interaction] et peuvent contenir n’importe quel type de données qui décrit les interactions du compte de service avec un client pour une session spécifique.

    Les enregistrements d’interaction sont associés à un objet CTIOperationRequest via la méthode CTIOperationRequest : setInteractionSysId(String Id). Cette méthode est généralement appelée par le transformateur de message et doit être appelée avant d’appeler la méthode getInteractionRecord().

    Tableau 4. Paramètres
    Nom Type Description
    Aucun
    Tableau 5. Renvoie
    Type Description
    GlideRecord Objet d’interaction GlideRecord associé à l’objet CTIOperationRequest actuel. Si la sys_id d’enregistrement d’interaction n’a pas été définie sur l’objet CTIOperationRequest, renvoie null.
    (function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, /*Context*/ ctx) {	
      var notes = '', lang = request.getLanguage();
      try { 
        // Returns the interaction record (GlideRecord) set on the passed in CTIOperationRequest object		
        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);

    CTIOperationRequest : getInteractionSysId()

    Renvoie le sys_id de l’enregistrement d’interaction associé à l’objet CTIOperationRequest actuel.

    La méthode CTIOperationRequest : setInteractionSysId(String Id) doit avoir été appelée avant d’appeler cette méthode.

    Tableau 6. Paramètres
    Nom Type Description
    Aucun
    Tableau 7. Renvoie
    Type Description
    Chaîne Le sys_id de l’enregistrement d’interaction défini sur l’objet CTIOperationRequest actuel.

    Si la sys_id n’a pas été définie sur l’objet CTIOperationRequest associé, la méthode renvoie null.

    (function( /*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, ctx) {
      // Returns the sys_id of the interaction record associated with the CTIOperationRequest object.
      var interactionSysId = request.getInteractionSysId();
      var number = request.getParameter('number');
      var addComment = request.getParameter('add_comment');
      addComment = addComment ? addComment.toLowerCase() : addComment;
      addComment = 'yes' === addComment || 'true' === addComment || '1' === addComment;
      var workNotes = request.getParameter('work_notes');
      var message = gs.getMessage('Thankyou');
      var interactionGr = request.getInteractionRecord();
      var openedFor = interactionGr ? interactionGr.getValue('opened_for') : null;
      if (openedFor && number && addComment && workNotes) {
        var now_GR = new GlideRecordSecure('incident');
        now_GR.addQuery('caller_id', openedFor);
        now_GR.addQuery('number', number);
        now_GR.query();
        if (now_GR.next()) {
        now_GR.work_notes += workNotes;
        now_GR.update();
          message = gs.getMessage('Your comment was added');
        }
      }
      response.setStatusCode(200);
      response.setMessage(message);
    })(request, response, ctx);

    CTIOperationRequest : getLanguage()

    Renvoie le code de langue ISO 639.1 qui a été défini sur l’objet CTIOperationRequest actuel.

    L’utilisation de la langue préférée du client vous permet d’utiliser les options d’internationalisation et de localisation fournies par la plateforme pour personnaliser les messages et autres communications avec l’appelant associé.

    En règle générale, un gestionnaire d’opération appelle la méthode getLanguage() et le transformateur de message définit la langue sur l’objet CTIOperationRequest en appelant la méthode CTIOperationRequest - setLanguage(String languageCode).

    Tableau 8. Paramètres
    Nom Type Description
    Aucun
    Tableau 9. Renvoie
    Type Description
    Chaîne Code de langue ISO 639.1 défini sur l’objet CTIOperationRequest actuel. Si le code de langue n’est pas défini, renvoie en.

    L’exemple suivant montre un gestionnaire d’opération appelant getLanguage() pour obtenir la langue préférée de l’appelant.

    (function(/*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response) {
      // Obtain the contact's preferred language
      var notes = "", announcement, lang = request.getLanguage();
      try {
    		
        var interactionGr = request.getInteractionRecord();
    		
        announcement = gs.getMessageLang("We are currently experiencing issues with VPN. If you are calling about VPN issues, you may hang up the call.", lang);
        // Use the contact's language to customize the response messages and notes	
        if(announcement) {	
          notes = gs.getMessageLang("Listened to announcement: {0}", lang, [announcement]);
          response.setStatusCode(200);
        } else {
          announcement = gs.getMessageLang("There are currently no known outage announcements", lang);
          //use the status case as the flag to check for announcements in contact flow
          response.setStatusCode(404);
        }			
        response.setMessage(announcement);	
    			
        if(interactionGr && notes) {			
          interactionGr.work_notes = notes;		
          interactionGr.update();
        }
    		
      } catch(e) {
        ctx.setError(e);
      }
    
    })(request, response);

    CTIOperationRequest : getMajorVersion()

    Renvoie la version majeure du logiciel d’intégrateur de téléphonie-informatique (CTI) défini sur l’objet CTIOperationRequest actuel.

    Utilisez cette méthode si les fournisseurs CTI connectés à votre ServiceNow instance exécutent plusieurs versions de leur logiciel, car différentes versions logicielles peuvent nécessiter un comportement de traitement différent. Si le comportement de traitement n’est que légèrement différent entre les versions logicielles, il peut être judicieux de n’avoir qu’un seul gestionnaire d’opération. Vous pouvez ensuite gérer les différences de traitement en vérifiant simplement la version du logiciel à l’origine de la demande et traiter la demande/les données dans votre gestionnaire d’opération. Si le traitement requis est significativement différent d’une version à l’autre, il peut être plus efficace d’utiliser plusieurs gestionnaires d’opérations.

    En règle générale, le transformateur de message définit la version du logiciel sur l’objet CTIOperationRequest en appelant la méthode CTIOperationRequest - setMajorVersion(Number majorVersion) et un gestionnaire d’opération utilise ensuite la valeur définie à l’aide de cette méthode. Vous pouvez également obtenir/définir la valeur de version mineure du logiciel d’un fournisseur à l’aide des méthodes CTIOperationRequest - getMinorVersion() et CTIOperationRequest - setMinorVersion(Number minorVersion).

    Tableau 10. Paramètres
    Nom Type Description
    Aucun
    Tableau 11. Renvoie
    Type Description
    Numéro Numéro de version majeure du logiciel CTI.

    Si la version majeure n’a jamais été définie, renvoie 1.

    var request = new sn_cti_core.CTIOperationRequest('origin');
    var majorVersion = request.getMajorVersion();

    CTIOperationRequest : getMinorVersion()

    Renvoie la version mineure du logiciel d’intégration téléphonie-informatique (CTI) associé à un objet CTIOperationRequest.

    Utilisez cette méthode si les fournisseurs CTI connectés à votre ServiceNow instance exécutent plusieurs versions de leur logiciel, car différentes versions logicielles peuvent nécessiter un comportement de traitement différent. Si le comportement de traitement n’est que légèrement différent entre les versions logicielles, il peut être judicieux de n’avoir qu’un seul gestionnaire d’opération. Vous pouvez ensuite gérer les différences de traitement en vérifiant simplement la version du logiciel à l’origine de la demande et traiter la demande/les données dans votre gestionnaire d’opération. Si le traitement requis est significativement différent d’une version à l’autre, il peut être plus efficace d’utiliser plusieurs gestionnaires d’opérations.

    En règle générale, le transformateur de message définit la version du logiciel sur l’objet CTIOperationRequest en appelant la méthode CTIOperationRequest - setMinorVersion(Number minorVersion) CTIOperationRequest : setMinorVersion(Number minorVersion) et un gestionnaire d’opération utilise ensuite la valeur définie à l’aide de cette méthode. Vous pouvez également obtenir/définir la valeur de version majeure du logiciel d’un fournisseur à l’aide des méthodes CTIOperationRequest - getMajorVersion() CTIOperationRequest : getMajorVersion() et CTIOperationRequest - setMajorVersion(Number majorVersion). CTIOperationRequest : setMajorVersion(Number majorVersion)

    Tableau 12. Paramètres
    Nom Type Description
    Aucun
    Tableau 13. Renvoie
    Type Description
    Numéro Numéro de version mineure du logiciel CTI.

    Si la version mineure n’a jamais été définie, renvoie la valeur 0.

    var request = new sn_cti_core.CTIOperationRequest('origin');
    var minorVersion = request.getMinorVersion();

    CTIOperationRequest : getOperationName()

    Renvoie le nom de l’opération que le fournisseur de couplage téléphonie-informatique (CTI) demande d’exécution.

    Le nom de l’opération détermine le gestionnaire d’opération utilisé pour traiter une demande. En règle générale, le transformateur de message définit le nom de l’opération sur l’objet CTIOperationRequest à l’aide de la méthode CTIOperationRequest - setOperationName(String name).

    Remarque :
    La méthode getOperationName() n’instancie pas le gestionnaire d’opération associé. C’est ce que fait le ServiceNow Fonctions vocales cadre. Cette méthode renvoie simplement le nom du gestionnaire d’opération associé.
    Remarque :
    Pour les implémentations de bot Lex Amazon Connect, les noms d’intention sont ajoutés avec un suffixe de cinq lettres, car différentes intentions Amazon ne peuvent pas avoir le même nom d’intention. Dans le cadre de ServiceNow Fonctions vocales travail, le nom de l’intention est égal au nom du gestionnaire d’opération. Un gestionnaire d’opération peut être spécifique à une intention, avec un nom de gestionnaire d’opération qui inclut ce suffixe (myOperation_SUFFX), ou il peut être générique et utilisé par plusieurs fournisseurs CTI ou différents cas d’utilisation, tels que l’utilisation du même gestionnaire pour traiter une demande RH et une demande d’assistance (myOperation).
    Tableau 14. Paramètres
    Nom Type Description
    Aucun
    Tableau 15. Renvoie
    Type Description
    Chaîne Nom de l’opération que le fournisseur CTI demande à exécuter. Si le nom de l’opération n’est pas défini, renvoie null.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var name = request.getOperationName();
    

    CTIOperationRequest : getOperationSubStepName()

    Renvoie le nom du gestionnaire d’opération de sous-étape défini sur l’objet CTIOperationRequest actuel.

    Utilisez des sous-étapes pour effectuer des actions telles que l’initialisation et la validation avant de traiter une opération. Contrairement aux gestionnaires d’opération qui sont censés être génériques et utilisés par tous les fournisseurs CTI, les sous-étapes sont spécifiques au fournisseur CTI et utilisent une terminologie et des conventions de dénomination spécifiques au fournisseur CTI.

    Le ServiceNow Fonctions vocales cadre de travail effectue les étapes suivantes pour localiser le gestionnaire d’opération requis et tous les gestionnaires d’opération de sous-étape associés.
    Remarque :
    Pour les implémentations de bot Lex Amazon Connect, les noms d’intention sont ajoutés avec un suffixe de cinq lettres, car différentes intentions Amazon ne peuvent pas avoir le même nom d’intention. Dans le cadre de ServiceNow Fonctions vocales travail, le nom de l’intention est égal au nom du gestionnaire d’opération. Un gestionnaire d’opération peut être spécifique à une intention, avec un nom de gestionnaire d’opération qui inclut ce suffixe (myOperation_SUFFX), ou il peut être générique et utilisé par plusieurs fournisseurs CTI ou différents cas d’utilisation, tels que l’utilisation du même gestionnaire pour traiter une demande RH et une demande d’assistance (myOperation).
    1. Tente de localiser le gestionnaire d’opération associé à la demande.
      • Recherche d’abord un gestionnaire d’opération appelé myOperation_SUFFX.
      • En cas d’échec, recherche le gestionnaire d’opération myOperation. S’il n’est pas trouvé, des erreurs apparaissent.
    2. Si le gestionnaire est trouvé, vérifie le auth_required marqueur sur le gestionnaire d’opération. Si activé, il vérifie qu’un jeton d’authentification valide (obtenu via la méthode getAuthToken( )) est présent sur la demande. S’il est présent et valide, continuez le traitement, sinon générez une erreur.
    3. Recherche le gestionnaire d’opération pour le sous-étape transmis. Pour cet exemple, supposons subStepName=SubStep.
      • Recherche d’abord un gestionnaire d’opération nommé myOperation_SUFFX. Sous-étape. S’il est trouvé, exécute le gestionnaire.
      • S’il est introuvable, recherche le gestionnaire myOperation.SubStep. S’il est trouvé, exécute le gestionnaire.
      • S’il est introuvable, vérifie si un subStepNotFoundBehavior a été défini sur l’objet de la demande.
      • S’il est défini, exécute le comportement, sinon, il y a des erreurs.
    4. Exécute le gestionnaire d’opération primaire (myOpersation_SUFFX ou myOperation.)

    En règle générale, le transformateur de message définit le nom de la sous-étape sur l’objet CTIOperationRequest à l’aide de la méthode CTIOperationRequest - setOperationSubStepName(String name). Vous pouvez remplacer ce comportement si vous créez votre propre transformateur en appelant la méthode CTIOperationRequest - setSubStepNotFoundBehaviour(Object behavior).

    Tableau 16. Paramètres
    Nom Type Description
    Aucun
    Tableau 17. Renvoie
    Type Description
    Chaîne Nom du gestionnaire d’opération de sous-étape défini sur l’objet CTIOperationRequest. S’il n’existe pas, renvoie null.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var name = request.getOperationSubStepName();

    CTIOperationRequest : getParameter(clé de chaîne)

    Renvoie la valeur d’une clé spécifiée précédemment définie sur l’objet CTIOperationRequest actuel.

    L’utilisation des méthodes de paramètre get/set permet le passage de pratiquement n’importe quelle valeur de chaîne ou de numéro entre un transformateur de message et un gestionnaire d’opération. L’objet de paramètre peut contenir zéro ou plusieurs paires clé/valeur de données directement corrélées à la demande d’opération en cours. Le gestionnaire de l’opération détermine quelles paires clé/valeur sont requises lorsqu’il consomme ces valeurs. En règle générale, le transformateur de message définit ces paramètres sur l’objet CTIOperationRequest en appelant la méthode CTIOperationRequest - setParameter(String key, Object value) et le gestionnaire d’opération les utilise à l’aide de cette méthode.

    Tableau 18. Paramètres
    Nom Type Description
    key Chaîne Le nom de la valeur de clé à renvoyer.
    Tableau 19. Renvoie
    Type Description
    Chaîne ou numéro Valeur de la clé spécifiée. En l’absence d’une telle clé, elle renvoie null.
    (function( /*CTIOperationRequest*/ request, /*CTIOperationResponse*/ response, ctx) {
      var interactionSysId = request.getInteractionSysId();
      // Returns the number and add_comment parameters from the CTIOperationRequest object
      var number = request.getParameter('number');
      var addComment = request.getParameter('add_comment');
      addComment = addComment ? addComment.toLowerCase() : addComment;
      addComment = 'yes' === addComment || 'true' === addComment || '1' === addComment;
      var workNotes = request.getParameter('work_notes');
      var message = gs.getMessage('Thankyou');
      var interactionGr = request.getInteractionRecord();
      var openedFor = interactionGr ? interactionGr.getValue('opened_for') : null;
      if (openedFor && number && addComment && workNotes) {
        var now_GR = new GlideRecordSecure('incident');
        now_GR.addQuery('caller_id', openedFor);
        now_GR.addQuery('number', number);
        now_GR.query();
        if (now_GR.next()) {
        now_GR.work_notes += workNotes;
        now_GR.update();
          message = gs.getMessage('Your comment was added');
        }
      }
      response.setStatusCode(200);
      response.setMessage(message);
    })(request, response, ctx);

    CTIOperationRequest : getParameters()

    Renvoie les paires clé-valeur de tous les paramètres précédemment définis sur l’objet CTIOperationRequest actuel.

    L’utilisation des méthodes de paramètre get/set permet le passage de pratiquement n’importe quelle valeur de chaîne ou de numéro entre un transformateur de message et un gestionnaire d’opération. L’objet de paramètre peut contenir zéro ou plusieurs paires clé/valeur de données directement corrélées à la demande d’opération en cours. Le gestionnaire de l’opération détermine quelles paires clé/valeur sont requises lorsqu’il consomme ces valeurs. En règle générale, le transformateur de message définit ces paramètres sur l’objet CTIOperationRequest en appelant la méthode CTIOperationRequest - setParameter(String key, Object value) et le gestionnaire d’opération les utilise à l’aide de cette méthode.

    Tableau 20. Paramètres
    Nom Type Description
    Aucun
    Tableau 21. Renvoie
    Type Description
    Objet Carte des paires clé-valeur précédemment définies sur l’objet CTIOperationRequest. Ces paires clé-valeur sont de forme libre et définies par les besoins du gestionnaire de l’opération. Les valeurs renvoyées sont soit des chaînes, soit des nombres.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var parms = request.getParameters();
    for(var key in parms) {
        gs.info(key + '=' + parms[key]);
    }

    CTIOperationRequest : getSessionAttribute (clé de chaîne)

    Renvoie la valeur d’une clé d’attribut de session spécifiée définie sur l’objet CTIOperationRequest actuel.

    L’utilisation des méthodes d’attribut de session get/set permet le passage de pratiquement n’importe quelle valeur de chaîne ou de numéro entre un transformateur de message et un gestionnaire d’opération. L’objet sessionAttribute peut contenir zéro ou plusieurs paires clé/valeur de données valides pour la durée d’une session définie par le fournisseur de couplage téléphonie-informatique, comme le numéro de téléphone du contact. Les attributs de session sont également accessibles dans un flux de contact. Le gestionnaire des opérations détermine les paires clé/valeur d’attribut de session nécessaires lorsqu’il consomme ces valeurs. En règle générale, le transformateur de message définit ces attributs sur l’objet CTIOperationRequest en appelant la méthode CTIOperationRequest - setSessionAttribute (clé de chaîne, valeur d’objet). Les attributs de session sont différents des paramètres en ce sens qu’ils persistent pendant toute la durée de vie de la session (comme l’appel entier) et doivent être renvoyés par le fournisseur CTI à chaque demande d’opération au cours de cette session d’appel.

    Tableau 22. Paramètres
    Nom Type Description
    key Chaîne Le nom de la valeur de clé à renvoyer.
    Tableau 23. Renvoie
    Type Description
    Chaîne ou numéro Valeur de la clé spécifiée. En l’absence d’une telle clé, elle renvoie null.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var phoneAttribute = request.getSessionAttribute('contact.phone');

    CTIOperationRequest : getSessionAttributes()

    Renvoie une carte de paires clé-valeur de tous les attributs de session définis sur l’objet CTIOperationRequest actuel.

    L’utilisation des méthodes d’attribut de session get/set permet le passage de pratiquement n’importe quelle valeur de chaîne ou de numéro entre un transformateur de message et un gestionnaire d’opération. L’objet sessionAttribute peut contenir zéro ou plusieurs paires clé/valeur de données valides pour la durée d’une session définie par le fournisseur de couplage téléphonie-informatique, comme le numéro de téléphone du contact. Les attributs de session sont également accessibles dans un flux de contact. Le gestionnaire des opérations détermine les paires clé/valeur d’attribut de session nécessaires lorsqu’il consomme ces valeurs. En règle générale, le transformateur de message définit ces attributs sur l’objet CTIOperationRequest en appelant la méthode CTIOperationRequest - setSessionAttribute (clé de chaîne, valeur d’objet). Les attributs de session sont différents des paramètres en ce sens qu’ils persistent pendant toute la durée de vie de la session (comme l’appel entier) et doivent être renvoyés par le fournisseur CTI à chaque demande d’opération au cours de cette session d’appel.

    Tableau 24. Paramètres
    Nom Type Description
    Aucun
    Tableau 25. Renvoie
    Type Description
    Objet Carte des paires clé-valeur d’attribut de session qui ont été définies sur l’objet CTIOperationResponse associé. Cette carte est de forme libre et définie par les besoins du gestionnaire de l’opération.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var parms = request.getSessionAttributes();
    for(var key in parms) {
        gs.info(key + '=' + parms[key]);
    }

    CTIOperationRequest : getSubStepNotFoundBehaviour

    Renvoie le comportement de gestion pour un sous-test lorsque le gestionnaire d’opération d’une sous-étape est introuvable.

    Utilisez des sous-étapes pour effectuer des actions telles que l’initialisation et la validation avant de traiter une opération. Contrairement aux gestionnaires d’opération qui sont censés être génériques et utilisés par tous les fournisseurs CTI, les sous-étapes sont spécifiques au fournisseur CTI et utilisent une terminologie et des conventions de dénomination spécifiques au fournisseur CTI.

    Si le gestionnaire d’opération de sous-étape demandé est introuvable par l’infrastructure ServiceNow Fonctions vocales , il tente d’utiliser le « comportement d’étape introuvable ». Ce comportement est généralement défini par le transformateur de message lorsqu’une opération est initialement demandée.

    Tableau 26. Paramètres
    Nom Type Description
    Aucun
    Tableau 27. Renvoie
    Type Description
    OperationNotFoundBehaviours Comportement/gestion à effectuer lorsqu’un gestionnaire d’opération est introuvable pour la combinaison opération/sous-étape (<operation_name>. Sous-étape>). Si non défini, renvoie la valeur null.
    Valeurs possibles :
    • OperationNotFoundBehaviours.ThrowError : générer une erreur.
    • OperationNotFoundBehaviours.PassThrough : n’effectuez aucun traitement supplémentaire sur la demande, il suffit de la renvoyer.
    • OperationNotFoundBehaviours.RouteToOperation : utilisez le gestionnaire <operation_name>d’opération parent.
    var request = new sn_cti_core.CTIOperationRequest('origin');
    var behavior = request.getSubStepNotFoundBehaviour();

    CTIOperationRequest : setAuthToken(ID de chaîne)

    Définit un jeton d’authentification sur l’objet CTIOperationRequest actuel.

    Ce jeton est utilisé par l’infrastructure ServiceNow Fonctions vocales pour authentifier l’utilisateur actuel ServiceNow Fonctions vocales avant d’exécuter le gestionnaire d’opération demandé si le marqueur du auth_required gestionnaire est défini sur vrai. Le auth_required marqueur est un champ de la table Gestionnaire d’opération [sn_cti_operation_handler]. La durée de vie d’un jeton d’authentification doit couvrir la durée de vie de la session d’appel, mais elle est déterminée par le fournisseur CTI.

    Vous pouvez définir toute opération d’authentification/d’autorisation requise par votre implémentation en créant votre propre gestionnaire d’opération d’authentification. Quelle que soit la façon dont le jeton d’authentification est généré, le traducteur de message doit renvoyer le jeton dans la charge utile CTI. En outre, le fournisseur CTI doit stocker ce jeton d’authentification localement et le transmettre dans chaque demande d’opération qui nécessite une authentification.

    Si vous utilisez l’instance fournie Authentifier le gestionnaire d’opération, le gestionnaire lance la création du jeton d’authentification sur la base d’un code PIN saisi par l’utilisateur à quatre chiffres. Il définit ensuite le jeton d’authentification dans l’objet sessionAttributes de l’objet CTIOperationResponse. Le transformateur de message associé traduit l’objet sessionAttributes en charge utile spécifique au CTI, puis l’envoie au fournisseur CTI.

    Remarque :
    Si le jeton d’authentification n’est pas transmis, toutes les demandes d’exécution de gestionnaires d’opérations avec le auth_required marqueur défini échoueront. Si vous n’utilisez pas l’authentification, vous n’avez pas besoin de conserver les jetons d’authentification.
    Le ServiceNow système de base fournit des gestionnaires d’opérations et des transformateurs de message fonctionnels qui permettent la connexion à Amazon Connect. Lors de la création de flux de contacts dans Amazon Connect, il existe deux points d’intégration entre les services Amazon et une ServiceNow instance :
    • Proxy Lambda Amazon Web Services (AWS) (invoquer la fonction AWS Lambda)
    • Bot AWS Lex (obtenir l’entrée du client)
    Vous pouvez trouver les gestionnaires d’opérations et les transformateurs de message disponibles pour ces points d’intégration dans les tables Gestionnaires d’opérations [sn_cti_operation_handler] et Transformateur de message de fournisseur [sn_cti_provider_msg_transormer].
    Tableau 28. Paramètres
    Nom Type Description
    id Chaîne Le jeton d’authentification de l’utilisateur associé ServiceNow Fonctions vocales .
    Tableau 29. Renvoie
    Type Description
    nul

    Exemple de script de transformateur de message qui enregistre le jeton d’authentification transmis.

    {	
      try {
        var jsonPayload = httpRequest.body.data;
        if (jsonPayload) {
    	var event = jsonPayload.event;
    	if (event) {
    	  var details = event.Details;
    	  if (details) {					
    	    operationRequest.setOperationName(details.Parameters['sn_operation']);
    	    var contactData = details.ContactData;
    	    if(contactData) {
    		// Call id should be surfaced in openframe call log so it can be tied to transcription later
    		operationRequest.setParameter('contact.call_id', contactData.ContactId);
    		for(var ck in contactData.CustomerEndpoint) {
    		  operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
    	       }
    	       operationRequest.setParameter('contact.id', contactData.ContactId);
    	       operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
    	    }
    	    var parameters = details.Parameters;
    	    if (parameters) {
    		for (var pk in parameters) {
    		  switch(pk) {
    		    case 'interactionId':
    			operationRequest.setInteractionSysId(parameters[pk]);
    			break;
    		    case 'authToken':
    			operationRequest.setAuthToken(parameters[pk]);
    			break;
    		    case 'language':
    			operationRequest.setLanguage(parameters[pk]);
    			break;
    		    case 'statusCode':
    		    case 'message':
    			break;
    								
    		    default:
    			operationRequest.setParameter(pk, parameters[pk]);
    		 }						
                }
              }					
            }
          }
        }
      } catch(e) {
    		ctx.setError(e);
      }
    })(httpRequest, operationRequest, ctx);

    CTIOperationRequest : setInteractionSysId(Id de chaîne)

    Définit le sys_id de l’enregistrement d’interaction associé à la demande d’opération sur l’objet CTIOperationRequest actuel.

    Si vous souhaitez conserver les informations d’interaction de contact dans un enregistrement d’interaction spécifique au contact, le sys_id d’enregistrement d’interaction doit être conservé pendant toute ServiceNow Fonctions vocales la session d’appel.

    En règle générale, un gestionnaire d’opération crée un enregistrement d’interaction lorsqu’un nouvel appel de contact est lancé. Il définit ensuite l’sys_id de l’enregistrement d’interaction et le nom de table sur l’objet CTIOperationResponse associé en tant qu’attributs de session à l’aide de la méthode CTIOperationRequest - setSessionAttribute(String key, Object value). Le transformateur de méthode associé traduit ensuite ces informations dans la charge utile du fournisseur d’intégration téléphonie-informatique (CTI) et la renvoie au fournisseur CTI.

    Le fournisseur de CTI doit stocker localement l’enregistrement d’interaction sys_id pour la session de contact. Chaque fois que le fournisseur de CTI interagit avec le pour cette session de ServiceNow Fonctions vocales contact, il doit renvoyer l’enregistrement d’interaction correspondant sys_id dans sa charge utile. Le transformateur de message de réception analyse ensuite la charge utile et utilise la méthode CTIOperationRequest - setInteractionSysId() pour définir l’enregistrement d’interaction sys_id sur l’objet CTIOperationtRequest associé.

    La méthode CTIOperationRequest : getInteractionRecord() utilise cette sys_id pour obtenir l’enregistrement d’interaction correct pour la session de contact.

    Tableau 30. Paramètres
    Nom Type Description
    sys_id Chaîne Sys_id de l’enregistrement d’interaction à associer à la demande.

    Table : Interaction [interaction]

    Tableau 31. Renvoie
    Type Description
    nul

    Exemple de script de transformateur de message qui extrait les sys_id d’enregistrement d’interaction de la charge utile entrante (transmise en tant que paramètre) et le définit sur l’objet CTIOperationRequest associé.

    {	
      try {
        var jsonPayload = httpRequest.body.data;
        if (jsonPayload) {
    	var event = jsonPayload.event;
    	if (event) {
    	  var details = event.Details;
    	  if (details) {					
    	    operationRequest.setOperationName(details.Parameters['sn_operation']);
    	    var contactData = details.ContactData;
    	    if(contactData) {
    		// Call id should be surfaced in openframe call log so it can be tied to transcription later
    		operationRequest.setParameter('contact.call_id', contactData.ContactId);
    		for(var ck in contactData.CustomerEndpoint) {
    		  operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
    	       }
    	       operationRequest.setParameter('contact.id', contactData.ContactId);
    	       operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
    	    }
    	    var parameters = details.Parameters;
    	    if (parameters) {
    		for (var pk in parameters) {
    		  switch(pk) {
                     // Associate the existing customer interaction record with the request
    		    case 'interactionId':
    			operationRequest.setInteractionSysId(parameters[pk]);
    			break;
    		    case 'authToken':
    			operationRequest.setAuthToken(parameters[pk]);
    			break;
    		    case 'language':
    			operationRequest.setLanguage(parameters[pk]);
    			break;
    		    case 'statusCode':
    		    case 'message':
    			break;
    								
    		    default:
    			operationRequest.setParameter(pk, parameters[pk]);
    		 }						
                }
              }					
            }
          }
        }
      } catch(e) {
    		ctx.setError(e);
      }
    })(httpRequest, operationRequest, ctx);

    CTIOperationRequest : setLanguage(String languageCode)

    Définit le code de langue ISO 639.1 à utiliser lors du traitement de l’opération associée sur un objet CTIOperationRequest.

    L’utilisation de la langue préférée du client vous permet d’utiliser les options d’internationalisation et de localisation fournies par la plateforme pour personnaliser les messages et autres communications avec l’appelant associé. En règle générale, le transformateur de message définit la langue sur l’objet CTIOperationRequest.

    Tableau 32. Paramètres
    Nom Type Description
    languageCode Chaîne Code de langue ISO 639.1 à utiliser lors du traitement de l’opération associée.
    Tableau 33. Renvoie
    Type Description
    nul
    {	
      try {
        var jsonPayload = httpRequest.body.data;
        if (jsonPayload) {
    	var event = jsonPayload.event;
    	if (event) {
    	  var details = event.Details;
    	  if (details) {					
    	    operationRequest.setOperationName(details.Parameters['sn_operation']);
    	    var contactData = details.ContactData;
    	    if(contactData) {
    		// Call id should be surfaced in openframe call log so it can be tied to transcription later
    		operationRequest.setParameter('contact.call_id', contactData.ContactId);
    		for(var ck in contactData.CustomerEndpoint) {
    		  operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
    	       }
    	       operationRequest.setParameter('contact.id', contactData.ContactId);
    	       operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
    	    }
    	    var parameters = details.Parameters;
    	    if (parameters) {
    		for (var pk in parameters) {
    		  switch(pk) {
    		    case 'interactionId':
    			operationRequest.setInteractionSysId(parameters[pk]);
    			break;
    		    case 'authToken':
    			operationRequest.setAuthToken(parameters[pk]);
    			break;
    		    case 'language':
    			operationRequest.setLanguage(parameters[pk]);
    			break;
    		    case 'statusCode':
    		    case 'message':
    			break;
    								
    		    default:
    			operationRequest.setParameter(pk, parameters[pk]);
    		 }						
                }
              }					
            }
          }
        }
      } catch(e) {
    		ctx.setError(e);
      }
    })(httpRequest, operationRequest, ctx);

    CTIOperationRequest : setMajorVersion(Number majorVersion)

    Définit la version majeure du logiciel du fournisseur d’intégrateur téléphonie-informatique (CTI) effectuant la demande sur l’objet CTIOperationRequest associé.

    Utilisez cette méthode si les fournisseurs CTI connectés à votre ServiceNow instance exécutent plusieurs versions de leur logiciel, car différentes versions logicielles peuvent nécessiter un comportement de traitement différent. Si le comportement de traitement n’est que légèrement différent entre les versions logicielles, il peut être judicieux de n’avoir qu’un seul gestionnaire d’opération. Vous pouvez ensuite gérer les différences de traitement en vérifiant simplement la version du logiciel à l’origine de la demande et traiter la demande/les données dans votre gestionnaire d’opération. Si le traitement requis est significativement différent d’une version à l’autre, il peut être plus efficace d’utiliser plusieurs gestionnaires d’opérations.

    En règle générale, le transformateur de message définit la version du logiciel sur l’objet CTIOperationRequest en appelant cette méthode et un gestionnaire d’opération consomme ensuite la valeur définie à l’aide de la méthode CTIOperationRequest - getMajorVersion(). Vous pouvez également obtenir/définir la valeur de version mineure du logiciel d’un fournisseur à l’aide des méthodes CTIOperationRequest - getMinorVersion() et CTIOperationRequest - setMinorVersion(Number minorVersion).

    Tableau 34. Paramètres
    Nom Type Description
    majorVersion Numéro Version majeure du logiciel du fournisseur CTI effectuant la demande d’opération.

    Si cette valeur n’a pas été définie précédemment, renvoie 1.

    Tableau 35. Renvoie
    Type Description
    nul
    var request = new sn_cti_core.CTIOperationRequest('origin');
    request.setMajorVersion(2);

    CTIOperationRequest : setMinorVersion(Number minorVersion)

    Définit la version mineure du logiciel du fournisseur d’intégrateur téléphonie-informatique (CTI) effectuant la demande sur l’objet CTIOperationRequest associé.

    Utilisez cette méthode si les fournisseurs CTI connectés à votre ServiceNow instance exécutent plusieurs versions de leur logiciel, car différentes versions logicielles peuvent nécessiter un comportement de traitement différent. Si le comportement de traitement n’est que légèrement différent entre les versions logicielles, il peut être judicieux de n’avoir qu’un seul gestionnaire d’opération. Vous pouvez ensuite gérer les différences de traitement en vérifiant simplement la version du logiciel à l’origine de la demande et traiter la demande/les données dans votre gestionnaire d’opération. Si le traitement requis est significativement différent d’une version à l’autre, il peut être plus efficace d’utiliser plusieurs gestionnaires d’opérations.

    En règle générale, le transformateur de message définit la version du logiciel sur l’objet CTIOperationRequest en appelant cette méthode et un gestionnaire d’opération consomme ensuite la valeur définie à l’aide de la méthode CTIOperationRequest - getMinorVersion(). Vous pouvez également obtenir/définir la valeur de version majeure du logiciel d’un fournisseur à l’aide des méthodes CTIOperationRequest - getMajorVersion() et CTIOperationRequest - setMajorVersion(Number majorVersion).

    Tableau 36. Paramètres
    Nom Type Description
    minorVersion Numéro Version mineure du logiciel du fournisseur CTI effectuant la demande d’opération.

    Si cette valeur n’a pas été définie précédemment, renvoie 0.

    Tableau 37. Renvoie
    Type Description
    nul
    var request = new sn_cti_core.CTIOperationRequest('origin');
    ...
    request.setMinorVersion(3);

    CTIOperationRequest : setOperationName(nom de chaîne)

    Définit le nom de l’opération que le fournisseur d’intégration téléphonie-informatique (CTI) tente d’exécuter sur l’objet CTIOperationRequest actuel.

    Le nom de l’opération détermine le gestionnaire d’opération utilisé pour traiter la demande. Appelez cette méthode à partir du transformateur de message associé.

    Remarque :
    Pour les implémentations de bot Lex Amazon Connect, les noms d’intention sont ajoutés avec un suffixe de cinq lettres, car différentes intentions Amazon ne peuvent pas avoir le même nom d’intention. Dans le cadre de ServiceNow Fonctions vocales travail, le nom de l’intention est égal au nom du gestionnaire d’opération. Un gestionnaire d’opération peut être spécifique à une intention, avec un nom de gestionnaire d’opération qui inclut ce suffixe (myOperation_SUFFX), ou il peut être générique et utilisé par plusieurs fournisseurs CTI ou différents cas d’utilisation, tels que l’utilisation du même gestionnaire pour traiter une demande RH et une demande d’assistance (myOperation).
    Tableau 38. Paramètres
    Nom Type Description
    nom Chaîne Nom de l’opération que le fournisseur CTI tente actuellement d’exécuter.

    Ce nom doit être identique au nom du gestionnaire d’opération à utiliser pour traiter la demande. Si ce n’est pas le cas, une erreur est générée. Vous pouvez localiser les gestionnaires d’opérations disponibles dans la table Gestionnaire d’opération [sn_cti_operation_handler].

    Tableau 39. Renvoie
    Type Description
    nul
    {	
      try {
        var jsonPayload = httpRequest.body.data;
        if (jsonPayload) {
    	var event = jsonPayload.event;
    	if (event) {
    	  var details = event.Details;
    	  if (details) {	
               // Set the operation handler to use to process the request				
    	    operationRequest.setOperationName(details.Parameters['sn_operation']);
    	    var contactData = details.ContactData;
    	    if(contactData) {
    		// Call id should be surfaced in openframe call log so it can be tied to transcription later
    		operationRequest.setParameter('contact.call_id', contactData.ContactId);
    		for(var ck in contactData.CustomerEndpoint) {
    		  operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
    	       }
    	       operationRequest.setParameter('contact.id', contactData.ContactId);
    	       operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
    	    }
    	    var parameters = details.Parameters;
    	    if (parameters) {
    		for (var pk in parameters) {
    		  switch(pk) {
    		    case 'interactionId':
    			operationRequest.setInteractionSysId(parameters[pk]);
    			break;
    		    case 'authToken':
    			operationRequest.setAuthToken(parameters[pk]);
    			break;
    		    case 'language':
    			operationRequest.setLanguage(parameters[pk]);
    			break;
    		    case 'statusCode':
    		    case 'message':
    			break;
    								
    		    default:
    			operationRequest.setParameter(pk, parameters[pk]);
    		 }						
                }
              }					
            }
          }
        }
      } catch(e) {
    		ctx.setError(e);
      }
    })(httpRequest, operationRequest, ctx);

    CTIOperationRequest : setOperationSubStepName(nom de chaîne)

    Définit le nom de la sous-étape de l’opération sur l’objet CTIOperationRequest actuel.

    Utilisez des sous-étapes pour effectuer des actions telles que l’initialisation et la validation avant de traiter une opération. Contrairement aux gestionnaires d’opération qui sont censés être génériques et utilisés par tous les fournisseurs CTI, les sous-étapes sont spécifiques au fournisseur CTI et utilisent une terminologie et des conventions de dénomination spécifiques au fournisseur CTI.

    Le ServiceNow Fonctions vocales cadre de travail effectue les étapes suivantes pour localiser le gestionnaire d’opération requis et tous les gestionnaires d’opération de sous-étape associés.
    Remarque :
    Pour les implémentations de bot Lex Amazon Connect, les noms d’intention sont ajoutés avec un suffixe de cinq lettres, car différentes intentions Amazon ne peuvent pas avoir le même nom d’intention. Dans le cadre de ServiceNow Fonctions vocales travail, le nom de l’intention est égal au nom du gestionnaire d’opération. Un gestionnaire d’opération peut être spécifique à une intention, avec un nom de gestionnaire d’opération qui inclut ce suffixe (myOperation_SUFFX), ou il peut être générique et utilisé par plusieurs fournisseurs CTI ou différents cas d’utilisation, tels que l’utilisation du même gestionnaire pour traiter une demande RH et une demande d’assistance (myOperation).
    1. Tente de localiser le gestionnaire d’opération associé à la demande.
      • Recherche d’abord un gestionnaire d’opération appelé myOperation_SUFFX.
      • En cas d’échec, recherche le gestionnaire d’opération myOperation. S’il n’est pas trouvé, des erreurs apparaissent.
    2. Si le gestionnaire est trouvé, vérifie le auth_required marqueur sur le gestionnaire d’opération. Si activé, il vérifie qu’un jeton d’authentification valide (obtenu via la méthode getAuthToken( )) est présent sur la demande. S’il est présent et valide, continuez le traitement, sinon générez une erreur.
    3. Recherche le gestionnaire d’opération pour le sous-étape transmis. Pour cet exemple, supposons subStepName=SubStep.
      • Recherche d’abord un gestionnaire d’opération nommé myOperation_SUFFX. Sous-étape. S’il est trouvé, exécute le gestionnaire.
      • S’il est introuvable, recherche le gestionnaire myOperation.SubStep. S’il est trouvé, exécute le gestionnaire.
      • S’il est introuvable, vérifie si un subStepNotFoundBehavior a été défini sur l’objet de la demande.
      • S’il est défini, exécute le comportement, sinon, il y a des erreurs.
    4. Exécute le gestionnaire d’opération primaire (myOpersation_SUFFX ou myOperation.)

    Vous pouvez définir le comportement par défaut d’une sous-étape en appelant la méthode CTIOperationRequest - setSubStepNotFoundBehaviour(Object behaviour).

    Tableau 40. Paramètres
    Nom Type Description
    nom Chaîne Nom de la sous-étape que le fournisseur CTI essaie d’exécuter.
    Tableau 41. Renvoie
    Type Description
    nul
    (function( /*HTTPRequest*/ httpRequest, /*CTIOperationRequest*/ operationRequest, /*Context*/ ctx) {
      try {
        var jsonPayload = httpRequest.body.data;
        if (jsonPayload) {
          var event = jsonPayload.event;
          if (event) {
            var intent = event.currentIntent;
    	 var inputTranscript = event.inputTranscript;
    	 if(inputTranscript) {
    	   operationRequest.setParameter('$utterance', inputTranscript);
    	 }
            if (intent) {
              operationRequest.setOperationName(intent.name);
    	   // Add this because intent name gets changed through the pipeline
    	   operationRequest.setParameter('$original_intent', intent.name);
              var sessionAttributes = event.sessionAttributes;
              if (sessionAttributes) {
                for (var sk in sessionAttributes) {
                  switch (sk) {
                    case 'interactionId':
                      operationRequest.setInteractionSysId(sessionAttributes[sk]);
                      break;
                    case 'authToken':
                      operationRequest.setAuthToken(sessionAttributes[sk]);
                      break;
    		  case 'language':
    		    operationRequest.setLanguage(sessionAttributes[sk]);
    		    break;
                    case 'statusCode':
                    case 'message':
                      break;
                    default:
                      operationRequest.setSessionAttribute(sk, sessionAttributes[sk]);
                  }
                }
              }
              var slots = intent.slots;
    	   // Always copy in slots they are the parameters for the operation
              if (slots) {
                for (var pk in slots) {
                  operationRequest.setParameter(pk, slots[pk]);
                }
              }
              var invocationSource = event.invocationSource;
    	   operationRequest.setParameter('$$invocationSource', invocationSource);
              // Specific handling for dialog hooks with a way to override for Amazon specific provider
              if (invocationSource === 'DialogCodeHook') {
    	     // Set substep to trigger forwarding to another handler IF it s present
    	     operationRequest.setOperationSubStepName(invocationSource);
    	     // Allow pass through behavior
    	     var behaviourToUse = sn_cti_core.CTIOperationRequest.OperationNotFoundBehaviours.PassThrough;
    	     operationRequest.setSubStepNotFoundBehaviour(behaviourToUse);
    	     // Reserved - copy slots in so we can just use delegate as default if the call isn't handled
    	     operationRequest.setParameter('$$slots', slots);
              }
            }
          }
        }
      } catch (e) {
          ctx.setError(e);
      }
      return operationRequest;
    })(httpRequest, operationRequest, ctx);

    CTIOperationRequest : setParameter(clé de chaîne, valeur d’objet)

    Définit la paire clé-valeur spécifiée sur l’objet de paramètre de l’objet CTIOperationRequest actuel.

    L’utilisation des méthodes de paramètre get/set permet le passage de pratiquement n’importe quelle valeur de chaîne ou de numéro entre un transformateur de message et un gestionnaire d’opération. L’objet de paramètre peut contenir zéro ou plusieurs paires clé/valeur de données directement corrélées à la demande d’opération en cours. Le gestionnaire de l’opération détermine quelles paires clé/valeur sont requises lorsqu’il consomme ces valeurs. En règle générale, le transformateur de message définit ces paramètres sur l’objet CTIOperationRequest en appelant cette méthode et le gestionnaire d’opération les utilise à l’aide de la méthode CTIOperationRequest - getParameter(clé de chaîne) ou CTIOperationRequest - getParameters().

    Remarque :
    Vous ne devez stocker que les objets qui peuvent survivre à une opération JSON.parse(JSON.stringify(object)). Les objets ne répondant pas à ces critères peuvent ne pas se propager correctement tout au long de la chaîne de traitement de l’opération.
    Par exemple :
    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);
    
    Produit:
    {"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"}}
    
    Tableau 42. Paramètres
    Nom Type Description
    key Chaîne Nom de la clé sous laquelle stocker la valeur associée.
    valide Objet Valeur à stocker.
    Types de données valides :
    • chaîne
    • int
    • flottant
    • Numéro
    • booléen
    • date
    • objet
    Tableau 43. Renvoie
    Type Description
    nul
    {	
      try {
        var jsonPayload = httpRequest.body.data;
        if (jsonPayload) {
    	var event = jsonPayload.event;
    	if (event) {
    	  var details = event.Details;
    	  if (details) {					
    	    operationRequest.setOperationName(details.Parameters['sn_operation']);
    	    var contactData = details.ContactData;
    	    if(contactData) {
    		// Call id should be surfaced in openframe call log so it can be tied to transcription later
    		operationRequest.setParameter('contact.call_id', contactData.ContactId);
    		for(var ck in contactData.CustomerEndpoint) {
    		  operationRequest.setParameter('contact.' + ck, contactData.CustomerEndpoint[ck]);
    	       }
    	       operationRequest.setParameter('contact.id', contactData.ContactId);
    	       operationRequest.setParameter('contact.phone', contactData.CustomerEndpoint.Address);
    	    }
    	    var parameters = details.Parameters;
    	    if (parameters) {
    		for (var pk in parameters) {
    		  switch(pk) {
    		    case 'interactionId':
    			operationRequest.setInteractionSysId(parameters[pk]);
    			break;
    		    case 'authToken':
    			operationRequest.setAuthToken(parameters[pk]);
    			break;
    		    case 'language':
    			operationRequest.setLanguage(parameters[pk]);
    			break;
    		    case 'statusCode':
    		    case 'message':
    			break;
    								
    		    default:
    			operationRequest.setParameter(pk, parameters[pk]);
    		 }						
                }
              }					
            }
          }
        }
      } catch(e) {
    		ctx.setError(e);
      }
    })(httpRequest, operationRequest, ctx);

    CTIOperationRequest : setSessionAttribute(String key, Object value)

    Définit la paire clé-valeur d’attribut de session spécifiée sur l’objet CTIOperationRequest actuel.

    L’utilisation des méthodes d’attribut de session get/set permet le passage de pratiquement n’importe quelle valeur de chaîne ou de numéro entre un transformateur de message et un gestionnaire d’opération. L’objet sessionAttribute peut contenir zéro ou plusieurs paires clé/valeur de données valides pendant la durée d’une session définie par le fournisseur d’intégration téléphonie-informatique. Les attributs de session sont également accessibles dans un flux de contact. Le gestionnaire des opérations détermine les paires clé/valeur d’attribut de session nécessaires lorsqu’il consomme ces valeurs. En règle générale, le transformateur de message définit ces attributs sur l’objet CTIOperationRequest en appelant cette méthode et le gestionnaire d’opération obtient les attributs à l’aide de la méthode CTIOperationRequest - getSessionAttribute(String key) ou CTIOperationRequest - getSessionAttribute().

    Remarque :
    Vous ne devez stocker que les objets qui peuvent survivre à une opération JSON.parse(JSON.stringify(object)). Les objets ne répondant pas à ces critères peuvent ne pas se propager correctement tout au long de la chaîne de traitement de l’opération.
    Par exemple :
    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);
    
    Produit:
    {"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"}}
    
    Tableau 44. Paramètres
    Nom Type Description
    key Chaîne Nom de la clé sous laquelle stocker la valeur associée.
    valide Objet Valeur à stocker.
    Types de données valides :
    • chaîne
    • int
    • flottant
    • Numéro
    • booléen
    • date
    • objet
    Tableau 45. Renvoie
    Type Description
    nul
    var request = new sn_cti_core.CTIOperationRequest('origin');
    request.setSessionAttribute('contact.phone', '+15552222345');
    request.setSessionAttribute('contact.okToCall', true);
    request.setSessionAttribute('contact.address', {
        street: '1234 Main St'
        city: 'API City',
        zip: 91335
    });

    CTIOperationRequest : setSubStepNotFoundBehaviour(Comportement de l’objet)

    Définit le comportement à exécuter si le gestionnaire d’opération du sous-step actuel est introuvable.

    Cette méthode doit être appelée par le transformateur de message d’entrée.

    Tableau 46. Paramètres
    Nom Type Description
    comportement OperationNotFoundBehaviours Comportement à utiliser si un comportement de gestion n’est pas spécifié pour la sous-étape. Il doit s’agir d’un comportement défini sur l’objet CTIOperationRequest.OperationNotFoundBehaviours.
    Valeurs possibles :
    • ThrowError : Générer une erreur.
    • PassThrough : n’effectuez aucun traitement supplémentaire sur la demande, il suffit de la renvoyer.
    • RouteToOperation : utilisez le gestionnaire <operation_name>d’opération parent.
    Tableau 47. Renvoie
    Type Description
    nul
    (function( /*HTTPRequest*/ httpRequest, /*CTIOperationRequest*/ operationRequest, /*Context*/ ctx) {
      try {
        var jsonPayload = httpRequest.body.data;
        if (jsonPayload) {
          var event = jsonPayload.event;
          if (event) {
            var intent = event.currentIntent;
    	 var inputTranscript = event.inputTranscript;
    	 if(inputTranscript) {
    	   operationRequest.setParameter('$utterance', inputTranscript);
    	 }
            if (intent) {
              operationRequest.setOperationName(intent.name);
    	   // Add this because intent name gets changed through the pipeline
    	   operationRequest.setParameter('$original_intent', intent.name);
              var sessionAttributes = event.sessionAttributes;
              if (sessionAttributes) {
                for (var sk in sessionAttributes) {
                  switch (sk) {
                    case 'interactionId':
                      operationRequest.setInteractionSysId(sessionAttributes[sk]);
                      break;
                    case 'authToken':
                      operationRequest.setAuthToken(sessionAttributes[sk]);
                      break;
    		  case 'language':
    		    operationRequest.setLanguage(sessionAttributes[sk]);
    		    break;
                    case 'statusCode':
                    case 'message':
                      break;
                    default:
                      operationRequest.setSessionAttribute(sk, sessionAttributes[sk]);
                  }
                }
              }
              var slots = intent.slots;
    	   // Always copy in slots they are the parameters for the operation
              if (slots) {
                for (var pk in slots) {
                  operationRequest.setParameter(pk, slots[pk]);
                }
              }
              var invocationSource = event.invocationSource;
    	   operationRequest.setParameter('$$invocationSource', invocationSource);
              // Specific handling for dialog hooks with a way to overide for Amazon specific provider
              if (invocationSource === 'DialogCodeHook') {
    	     // Set substep to trigger forwarding to another handler IF it s present
    	     operationRequest.setOperationSubStepName(invocationSource);
    	     // Allow pass through behavior
    	     var behaviourToUse = sn_cti_core.CTIOperationRequest.OperationNotFoundBehaviours.PassThrough;
    	     operationRequest.setSubStepNotFoundBehaviour(behaviourToUse);
    	     // Reserved - copy slots in so we can just use delegate as default if the call isn't handled
    	     operationRequest.setParameter('$$slots', slots);
              }
            }
          }
        }
      } catch (e) {
          ctx.setError(e);
      }
      return operationRequest;
    })(httpRequest, operationRequest, ctx);