Agent virtuel Scripts d’action

  • Rversion finale: Xanadu
  • Mis à jour 1 août 2024
  • 11 minutes de lecture
  • Vous devez écrire un ensemble de scripts d’action et de flux secondaire obligatoires Studio de workflow pour transmettre les données utilisateur à VACS, appliquer les transformations et renvoyer la réponse à votre point de terminaison d’interface de messagerie instantanée.

    Scripts fournisseurs et entrants/sortants

    Un fournisseur, tel que Twilio, fournit la fonctionnalité de messagerie instantanée. Les scripts d’action utilisateur effectuent des actions de fournisseur, ainsi qu’une configuration conversationnelle de l’intégration de la messagerie instantanée personnalisée pour les actions de transformateur entrantes et sortantes pour votre chatbot ou vos conversations personnalisées. Des exemples de chaque script sont fournis. Ils incluent une description de la fonction de chaque script, ainsi que l’entrée et la sortie d’action. Vous voyez également des exemples du script JSON.

    Vous utilisez Studio de workflow ces scripts pour transformer les messages serveur et client. Les scripts du fournisseur, de l’expéditeur et du transformateur entrant/sortant sont requis. Vous pouvez utiliser les scripts supplémentaires pour ajouter d’autres fonctionnalités à votre messagerie instantanée.

    Tableau 1. Scripts
    Nom de script Objectif Requis (O/N)
    Attribut de fournisseur Contient un jeton d’authentification de fournisseur, un identificateur utilisateur, une entrée utilisateur et des variables de contexte. Y
    Action de l'expéditeur

    Regroupe la demande et envoie une réponse de manière asynchrone via Studio de workflow notre concentrateur d’intégration.

    Y
    Processeur de réponses Effectue des actions de plateforme, telles que la mise à jour de l’état d’un message, en fonction d’une réponse reçue pour un message sortant. N
    Action contextuelle Prend en charge les actions contextuelles. N
    Action du compte de lien Fournit un rappel indiquant si la liaison de compte a réussi ou non. N
    Transformateur sortant Transforme le contrôle pris en charge d’un serveur de messagerie instantanée en rendu spécifique à l’interface de messagerie instantanée. Y
    Transformateur entrant Facultatif. Vous pouvez utiliser les contrôles enrichis par défaut s’ils s’appliquent à votre fournisseur de messagerie instantanée. Vous n’avez pas besoin de fournir une transformation entrante distincte pour chaque contrôle d’entrée. Si un comportement par défaut ne fonctionne pas, vous pouvez remplacer la valeur par défaut par votre propre transformation entrante pour un contrôle de serveur d’Agent virtuel spécifique. Y

    Script d’action des attributs du fournisseur

    Le script d’action attributs du fournisseur extrait les données du message entrant. Le script connaît le protocole d’intégration conversationnelle de messagerie instantanée personnalisée et affiche le contenu du message entrant, l’ID d’utilisateur de l’expéditeur ainsi qu’un jeton d’authentification facultatif.
    Remarque :
    Si votre script d’action d’attributs de fournisseur comporte une action contextuelle, votre script doit comporter à la fois request_context.contextual_action et request_context.typed_value afin que l’entrée de l’utilisateur (qui correspond à une action contextuelle) soit incluse dans la transcription. Si vous ne définissez pas la valeur request_context.typed_value, le contenu de ce message n’apparaît pas dans la transcription.
    Tableau 2. Entrée/sortie du script d’action des attributs du fournisseur
    Entrée Sortie
    • En-têtes (JSON) : en-têtes de demande
    • Charge utile (JSON) : corps de la demande
    • Jeton (chaîne) : jeton d’authentification.
    • provider_user_id (chaîne) : nom de l’expéditeur, par exemple, un nom d’utilisateur dans un message Slack.
    • request_context (JSON) : contenu réel reçu.
      • typed_value : contenu saisi, comme une réponse à une question.
      • attachment_value.url : URL de la pièce jointe.
      • attachment_value.content_type : type de contenu de la pièce jointe.
      • attachment_value.name : nom de fichier de la pièce jointe.
      • Action contextuelle : action à effectuer, telle que END_CONVERSATION, START_CONVERSATION, AGENT. Ce script examine le message entrant. S’il existe un mot clé reconnu, l’une des actions peut être définie, par exemple outputs.request_context.contextual_action = « END_CONVERSATION » ;. Le cadre de travail reconnaît ce mot clé et invoque le script d’action contextuelle.
      • context_vars : variables contextuelles à transmettre dans une conversation, telles que « outputs.request_context.context_vars = {language : « en"} ;'.
    Figure 1. Exemple : Studio de workflow entrée de script d’action des attributs du fournisseur, y compris les en-têtes et la charge utile
    Une entrée d’action Studio de workflow avec des en-têtes et une charge utile définis pour utiliser JSON.
    Figure 2. Exemple : Studio de workflow attributs du fournisseur Sortie du script d’action, y compris le jeton, le request_context et provider_user_id
    Une sortie d’action dans Studio de workflow spécifie les valeurs de jeton, de request_context et de provider_user_id.

    Exemple : script d’action des attributs du fournisseur.

    (function execute(inputs, outputs) {
        var headers = (inputs.headers);
        var payload = (inputs.payload);
    
        // check if an authentication token was included. this is optional.
        var smsUtil = new VASMSTwilioUtil();
        outputs.token = JSON.stringify(smsUtil.getToken(headers, payload));
    
        var data = payload.data;
        var request_context = {}; 
        // inspect the actual message. it could be an MMS (attachment) or raw text
        if (data['MediaUrl0']) {
            var attachment_value = {};
            attachment_value.url = data['MediaUrl0'];
            attachment_value.content_type = data['MediaContentType0'];
            attachment_value.name = smsUtil.getFileName(attachment_value.url , attachment_value.content_type);
            request_context.attachment_value = attachment_value;
        } else {
           request_context.typed_value = data['Body'];
        }
    
        // set the mandatory outputs
        outputs.request_context = request_context;
        outputs.provider_user_id = data.From;
    })(inputs, outputs);

    Script d’action de l’expéditeur (désactivé au Québec, voir flux secondaire de l’expéditeur)

    Le script d’action de l’expéditeur sait comment envoyer un message au fournisseur. Le script doit invoquer un flux secondaire ou Studio de workflowHub d'intégration de façon asynchrone. Il Agent virtuel est libre de continuer à traiter les messages plutôt que d’essayer d’envoyer des demandes externes.

    Tableau 3. Entrée du script d’action de l’expéditeur
    Entrée Sortie
    • Résultats (JSON) : tableau de messages à envoyer.
    • Charge utile (JSON) : dernière charge utile reçue d’un demandeur.
    • app_inbound_id (chaîne) : l’identificateur de l’expéditeur, tel que le numéro de téléphone « De » dans un ticket SMS.
    • channel_user_id (chaîne) : l’identificateur du destinataire, tel que le numéro de téléphone « À » dans un ticket SMS.
    Aucun

    Exemple : Script d’action de l’expéditeur.

    (function execute(inputs, outputs) {
        var results = inputs.results;
        // transform the inputs to something this custom subflow knows about
        var sendInputs = {
            app_inbound_id : inputs["app_inbound_id"],
            channel_user_id: inputs["channel_user_id"],
            messages: JSON.stringify(results)
        };
    
        // invoke an asynchronous subflow which will send the external request. so this sender script will immediately return,
        // freeing up the chat server thread to do further message processing while putting the external request work on the
        // Workflow Studio/Integration Hub
        sn_fd.FlowAPI.startSubflowQuick('sn_va_sms_twilio.va_sms_twilio_adapter_send_sms', sendInputs);
    })(inputs, outputs);

    Script de flux secondaire de l’expéditeur

    Le script de flux secondaire de l’expéditeur sait comment envoyer un message au fournisseur. Le script doit invoquer un flux secondaire ou Studio de workflowHub d'intégration de façon asynchrone. Il Agent virtuel est libre de continuer à traiter les messages plutôt que d’essayer d’envoyer des demandes externes. Lors de la création d’un flux secondaire, il n’y a pas d’action d’appel, une action dans le flux secondaire est créée.

    }else{
      outputs.sendmessage = true;
      messages = inputs.results.results;
      outputs.from = from;
      outputs.to = to;
      outputs.messages = getMessages(messages);
    }

    Script d’action contextuelle

    Le script d’action contextuelle effectue des actions de mots clés spéciales, telles que taper sur agent alors qu’il est à l’intérieur d’une Agent virtuel rubrique, pour être immédiatement transmis à un agent actif.

    Tableau 4. Entrée du script d’action contextuelle
    Entrée Sortie
    • conversation_id (chaîne) : l’ID de conversation.
    • request_context (JSON) : demande transmise à partir du script d’attribut du fournisseur qui contient l’action à effectuer, tel que (END_CONVERSATION, START_CONVERSATION, AGENT).
    Aucun

    Exemple : script d’action contextuelle.

    (function execute(inputs, outputs) {
      var contextual_action = inputs.request_context.contextual_action;
      if (contextual_action === "END_CONVERSATION") {
        sn_cs.VASystemObject.endConversation(inputs.conversation_id);
      } else if (contextual_action === "AGENT") {
        sn_cs.VASystemObject.switchToLiveAgent(inputs.conversation_id);
      } else if (contextual_action === "START_CONVERSATION") {
        sn_cs.VASystemObject.startConversation(inputs.conversation_id);
      }
    })(inputs, outputs);

    Script d’action du compte de lien

    Le script d’action du compte de liaison contient les identificateurs de l’utilisateur qui effectue la liaison. Le script contient également le compte auquel il est lié.

    Tableau 5. Entrée de script d’action de compte de lien
    Entrée Sortie
    • provider_user_id (chaîne) : l’identificateur de l’utilisateur qui établit la liaison, comme un numéro de téléphone dans un ticket SMS.
    • état (chaîne) : réussite/échec.
    • user_id (chaîne) : user_sys_id ServiceNow pour le compte qui était lié.
    Aucun

    Exemple : script d’action Lier le compte.

    (function execute(inputs, outputs) {
      
      var richControl = (inputs.rich_control);
      var value = richControl.value;
      outputs.result = richControl.header + ': ' + value.action;
      
    })(inputs, outputs);

    Script d’action du processeur de réponses

    Le script d’action du processeur de réponse effectue des actions spéciales basées sur la réponse à une demande d’envoi de message. Le framework effectue déjà un suivi de base de l’état des messages.

    Tableau 6. Entrée de script d’action de compte de processeur de réponse
    Entrée Sortie
    • message_id (chaîne) : l’identificateur de sys_cs_message’enregistrement associé à cette réponse.
    • en-têtes (JSON) : en-têtes reçus.
    • body (chaîne) : corps qui est reçu.
    • code d’état (entier) : code d’état HTTP reçu.
    Aucun

    Exemple : script d’action du processeur de réponses.

    (function execute(inputs, outputs) {
        gs.debug("Response from provider: message_id = " + inputs.message_id + ", status_code = " +
          inputs.status_code + ", headers = " + JSON.stringify(inputs.headers) + ", body = " + inputs.body);
    })(inputs, outputs);

    Scripts du transformateur sortant

    Les scripts de transformateur sortant convertissent les messages sortants Agent virtuel en un protocole lié à l’intégration conversationnelle de la messagerie instantanée personnalisée.

    Entrée.

    • rich_control (JSON) : Agent virtuel composant de contrôle riche du serveur qui doit être transformé.
    • Charge utile (JSON) : dernière réponse reçue d’un demandeur.

    Sortie.

    résultat (chaîne) : message du composant approprié au fournisseur à envoyer.

    Tableau 7. Exemples : Scripts de transformateur sortant
    Nom du transformateur sortant Exemple de script
    Agent virtuel : transformateur sortant du texte par défaut de l’adaptateur SMS Twilio
    (function execute(inputs, outputs) {
      var rich_control = inputs.rich_control;
      outputs.result = rich_control['label'];
    })(inputs, outputs);
    Agent virtuel : transformateur sortant du lien par défaut de l’adaptateur SMS Twilio
    (function execute(inputs, outputs) {
      var richControl = (inputs.rich_control);
      var value = richControl.value;
      outputs.result = richControl.header + ': ' + value.action;
    })(inputs, outputs);
    Agent virtuel : transformateur sortant du sélecteur par défaut de l’adaptateur SMS Twilio
    (function execute(inputs, outputs) {
      var rich_control = inputs.rich_control;
      var options = rich_control['options'];
      if (options && options.length > 0) {
          var optionsLength = options.length;
          var picker = rich_control['label'] || "";
          for (var x = 0; x < optionsLength; x++) {
              picker += "\n" + (x+1) +  ": " + options[x].label;
          }
      }
      outputs.text_message = picker;
    })(inputs, outputs);
    Agent virtuel : transformateur sortant multi-lien par défaut de l’adaptateur SMS Twilio
    (function execute(inputs, outputs) {
      var rich_control = inputs.rich_control;
      var linkResult = rich_control['header'];
      var totalValues = rich_control['values'].length;
      for (var i = 0; i < totalValues; i++) {
        linkResult = linkResult + '\n';
        var linkValue = rich_control['values'][i];
        linkResult = linkResult + '\n' + linkValue['description'] + ': ' + linkValue['action'];
      }
      outputs.result  = linkResult;
    })(inputs, outputs);
    Agent virtuel : transformateur sortant de la carte par défaut de l’adaptateur SMS Twilio
    (function execute(inputs, outputs) {
      var richControl = (inputs.rich_control);
      var data = JSON.parse(richControl.data);    
      var tableTitle = data.title;
      var fields = data.fields;
      var subtitle = data.subtitle;
      var url = data.url;    
      var message = subtitle ? getCardLine(tableTitle, subtitle) : tableTitle + "\n";
      for (var i= 0; i<fields.length; i++) {
         message += getCardLine(fields[i].fieldLabel, fields[i].fieldValue);
      }
      message += url;
      outputs.result = message;
    
      function getCardLine(key, value) {
          if (value == '' || value == null || key == '' || key == null)
              return;
          return key + ": " + value + "\n";
      }
    })(inputs, outputs);

    Scripts du transformateur entrant

    Les scripts de transformateur entrants convertissent les messages entrants d’intégration conversationnelle personnalisée de la messagerie instantanée en un protocole reconnu Agent virtuel . Il détermine la valeur requise à injecter dans le contrôle enrichi qui est présenté à l’utilisateur.

    Entrée.

    • request_context (JSON) : la demande transmise à partir du script d’attribut de fournisseur.
    • rich_control (JSON) : dernier contrôle enrichi envoyé au demandeur qui contient la « question » d’origine.

    Sortie.

    résultat (JSON) : résultat attendu par le Agent virtuel serveur. Si le demandeur répond à un sélecteur de rubrique, il s’agit du sys_id de la rubrique. Si le demandeur répond à un texte d’entrée, il s’agit de la réponse texte.
    • Valeur : sys_id ou valeur de texte.
    • search_text : texte utilisé si le demandeur a sélectionné quelque chose d’inattendu. Par exemple, un utilisateur a tapé quelque chose pour lequel le NLU peut aider, par exemple « Aucune de ces options ne correspond à ce que je veux » en réponse à un composant de sélecteur de rubrique.
    Tableau 8. Exemples : Scripts du transformateur entrant
    Nom du transformateur entrant Exemple de script
    Agent virtuel : transformateur entrant du texte par défaut de l’adaptateur SMS Twilio

    Objectif : trouver la réponse textuelle à la question InputText posée

    (function execute(inputs, outputs) {
      var requestContext = inputs.request_context;
      var richControl = inputs.rich_control;
      var typedValue = requestContext['typed_value'];
      var attachmentValue = requestContext['attachment_value'];
      var smsUtil = new VASMSTwilioUtil();
      var result = {};
      if(richControl['itemType'] == 'image' || richControl['itemType'] == 'file')	{
        if (attachmentValue && attachmentValue.content_type.includes('image')) {
          result.url = attachmentValue.url;
          result.content_type = attachmentValue.content_type;
          result.name = attachmentValue.name;
          result.headers = attachmentValue.headers;
        } else if (typedValue) {
          result.url = typedValue;
          var contentType = smsUtil.getContentType(typedValue);
          if (typeof contentType === 'undefined')
            gs.error('Please enter a valid image link. Inbound image link: {0}', typedValue);
          else
            result.content_type = contentType;
        } else {
          gs.error('Please upload an image or enter a valid image link.');
        }
      }
      result['value'] = typedValue;
      result['search_text'] = '';
      outputs.result = result;
    })(inputs, outputs);
    Agent virtuel : transformateur entrant du sélecteur par défaut de l’adaptateur SMS Twilio

    Objectif : rechercher le sys_id de l’option que l’utilisateur a sélectionné pour cette question de sélecteur. Ce script utilise le même algorithme que le transformateur sortant. Si aucune option n’est sélectionnée et que l’utilisateur a tapé quelque chose à la place, le « search_text » est défini et introduit dans le NLU s’il est activé sur cette instance.

    (function execute(inputs, outputs) {
      var request_context = inputs.request_context;
      var rich_control = inputs.rich_control;
      var selectedValue = request_context["typed_value"];
      var result = {};
      result["value"] = "";
      result["search_text"] = "";
      if (rich_control['options']) {
        var options = rich_control['options'];
        var optionsLength = options.length;
        selectedValue === Number(selectedValue)
        if (selectedValue > 0 && selectedValue <= optionsLength) {
            var selectedOption = options[selectedValue - 1];
            result["value"] = selectedOption.value;
        } else {
            result["search_text"] = request_context["typed_value"];
        }
      }
      outputs.result = result;
    })(inputs, outputs);