Virtual Agent Aktionsskripts

  • Freigeben Version: Xanadu
  • Aktualisiert 1. August 2024
  • 9 Minuten Lesedauer
  • Sie müssen eine Reihe von obligatorischen Workflow-Studio -Aktionen und Subflow-Skripts schreiben, um die Benutzerdaten an VACS zu übergeben, Transformationen anzuwenden und die Antwort an den Endpunkt der Chatoberfläche zurückzusenden.

    Provider und eingehende/ausgehende Skripts

    Ein -Anbieter wie Twilio stellt die Chat-Fähigkeit bereit. Anwenderaktionsskripts führen Anbieteraktionen sowie die Konfiguration der anwenderdefinierten Chatintegration für Konversationen für eingehende und ausgehende Umwandleraktionen für Ihren Chatbot oder anwenderdefinierte Konversationen aus. Für jedes Skript werden Beispiele bereitgestellt. Sie enthalten eine Beschreibung der Funktion jedes Skripts sowie die Aktionseingabe und -ausgabe. Außerdem sehen Sie Beispiele für das Skript JSON.

    Sie verwenden Workflow-Studio, um diese Skripts zur Transformation von Server- und Client-Nachrichten zu erstellen. Die Skripts für den Anbieter, den Absender und den Umwandler für eingehenden/ausgehenden Datenverkehr sind erforderlich. Sie können die zusätzlichen Skripts verwenden, um Ihrem Chat weitere Funktionen hinzuzufügen.

    Tabelle : 1. Skripts
    Skriptname Zweck Erforderlich (J/N)
    Anbieterattribut Enthält ein Anbieterauthentifizierungstoken, einen Anwenderbezeichner, Anwendereingaben und Kontextvariablen. Y
    Absenderaktion

    Bündelt die Anforderung und sendet asynchron eine Antwort über Workflow-Studio oder Integration Hub.

    Y
    Antwortprozessor Führt Plattformaktionen aus, z. B. das Aktualisieren des Nachrichtenstatus, basierend auf der Antwort, die für eine ausgehende Nachricht empfangen wurde.​ N
    Kontextbezogene Aktion Unterstützt kontextbezogene Aktionen. N
    Accountaktion verknüpfen Stellt einen Rückruf bereit, ob die Account-Verknüpfung erfolgreich war oder nicht​. N
    Ausgehender Umwandler Transformiert das unterstützte Steuerelement eines Chat-Servers in ein für die Chatschnittstelle spezifisches Rendering. Y
    Eingehender Umwandler Optional. Sie können die standardmäßigen Rich Controls verwenden, wenn sie für Ihren Chat-Anbieter gelten. Sie müssen nicht für jedes Eingabesteuerelement eine separate eingehende Transformation angeben. Wenn ein Standardverhalten nicht funktioniert, können Sie den Standard mit Ihrer eigenen eingehenden Transformation für ein bestimmtes Virtual Agent-Serversteuerelement überschreiben. Y

    Aktionsskript für Anbieterattribute

    Das Aktionsskript für Provider-Attribute extrahiert Daten aus der eingehenden Nachricht. Das Skript kennt das Protokoll für die anwenderdefinierte Chatintegration für Konversationen und gibt den Inhalt der eingehenden Nachricht, die Anwender-ID des Absenders und ein optionales Authentifizierungstoken aus.
    Hinweis:
    Wenn das Aktionsskript für Provider-Attribute eine kontextbezogene Aktion enthält, muss Ihr Skript sowohl „request_context.contextual_action“ als auch „request_context.typed_value“ enthalten, damit die Benutzereingabe (die mit einer kontextbezogenen Aktion abgeglichen wird) in das Transkript aufgenommen wird. Wenn Sie request_context.typed_value nicht festlegen, wird der Nachrichteninhalt nicht im Transkript angezeigt.
    Tabelle : 2. Eingabe/Ausgabe des Aktionsskripts für Anbieterattribute
    Eingabe Ausgabe
    • Header (JSON): Anforderungsheader
    • Nutzlast (JSON): Anforderungstextkörper​
    • Token (Zeichenfolge): Authentifizierungstoken.
    • provider_user_id (Zeichenfolge) – Name des Absenders, z. B. ein Anwendername in einer Slack-Nachricht.
    • request_context (JSON): Tatsächlich empfangener Inhalt.
      • typed_value: Typisierter Inhalt, z. B. eine Antwort auf eine Frage.
      • „attachment_value.url“: URL des Anhangs
      • „attachment_value.content_type“: Inhaltstyp des Anhangs.
      • „attachment_value.name“ – Dateiname des Anhangs.
      • Kontextaktion: Auszuführende Aktion, z. B. END_CONVERSATION, START_CONVERSATION, Agent. Dieses Skript untersucht die eingehende Nachricht. Wenn ein erkanntes Stichwort vorhanden ist, kann eine der Aktionen festgelegt werden, z. B. „outputs.request_context.contextual_action = "END_CONVERSATION"; Das -Framework erkennt dieses Stichwort und ruft das Kontextaktionsskript auf.
      • context_vars: Kontextbezogene Variablen, die an eine Konversation übergeben werden sollen, z. B. „outputs.request_context.context_vars = {language: "en"};`.
    Abbildung : 1. Beispiel: Workflow-Studio Aktionsskripteingabe für Anbieterattribute, einschließlich Header und Nutzlast
    Eine Aktionseingabe in Workflow-Studio, bei der Header und Nutzlast auf die Verwendung von JSON festgelegt sind.
    Abbildung : 2. Beispiel: Workflow-Studio -Provider-Attribute-Aktionsskriptausgabe, einschließlich token, request_context und provider_user_id
    Eine Aktionsausgabe in Workflow-Studio gibt die Werte „token“, „request_context“ und „provider_user_id“ an.

    Beispiel: Aktionsskript für Anbieterattribute.

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

    Absenderaktionsskript (Außer Betrieb genommen in Quebec, siehe Absender-Subflow)

    Das Absenderaktionsskript weiß, wie eine Nachricht an den Anbieter gesendet wird. Das Skript sollte asynchron einen Workflow-Studio - oder IntegrationHub -Subflow aufrufen. Virtual Agent wird freigegeben, um die Verarbeitung von Nachrichten fortzusetzen, anstatt zu versuchen, externe Anforderungen zu senden.

    Tabelle : 3. Skripteingabe der Absenderaktion
    Eingabe Ausgabe
    • Ergebnisse (JSON): Array der zu sendenden Nachrichten.
    • Nutzlast (JSON): Letzte Nutzlast, die von einer anfordernden Person empfangen wurde.
    • app_inbound_id (Zeichenfolge) – Bezeichner des Absenders, z. B. die Telefonnummer „Von“ in einem SMS-Fall.
    • channel_user_id (Zeichenfolge) – Bezeichner des Empfängers, z. B. die „An“-Telefonnummer in einem SMS-Fall.
    Keine

    Beispiel: Absenderaktionsskript.

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

    Subflow-Skript des Senders

    Das Subflow-Skript des Absenders weiß, wie eine Nachricht an den Anbieter gesendet wird. Das Skript sollte asynchron einen Workflow-Studio - oder IntegrationHub -Subflow aufrufen. Virtual Agent wird freigegeben, um die Verarbeitung von Nachrichten fortzusetzen, anstatt zu versuchen, externe Anforderungen zu senden. Wenn Sie einen Subflow erstellen, rufen Sie keine Aktion innerhalb des Subflows auf.

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

    Kontextbezogenes Aktionsskript

    Das Skript für kontextbezogene Aktionen führt spezielle Stichwortaktionen aus, z. B. die Eingabe eines Agent, während es sich in einem Thema Virtual Agent befindet, um sofort an einen Servicemitarbeiter übergeben zu werden.

    Tabelle : 4. Kontextbezogene Aktion – Eingabe für Skript
    Eingabe Ausgabe
    • Konversation_id (Zeichenfolge) – Die Konversations-ID.
    • request_context (JSON): Anforderung, die vom Anbieterattributskript übergeben wird, das die auszuführende Aktion enthält, z. B. (END_CONVERSATION, START_CONVERSATION, AGENT).
    Keine

    Beispiel: Kontextaktionsskript.

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

    Skript für Aktion „Account verknüpfen“.

    Das Skript für die Aktion „Account verknüpfen“ enthält Bezeichner für den Anwender, der die Verknüpfung herstellt. Das Skript enthält auch den Account, mit dem es verknüpft ist.

    Tabelle : 5. Eingabe für Aktionsskript „Account verknüpfen“.
    Eingabe Ausgabe
    • provider_user_id (Zeichenfolge): Bezeichner des Anwenders, der die Verknüpfung herstellt, z. B. eine Telefonnummer in einem SMS-Fall.
    • status (Zeichenfolge): Erfolg/Fehler.
    • user_id (Zeichenfolge): ServiceNow user_sys_id für den Account, mit dem verknüpft wurde.
    Keine

    Beispiel: Aktionsskript zum Verknüpfen von Accounts.

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

    Aktionsskript für Antwortprozessor

    Das Aktionsskript des Antwortprozessors führt Spezialaktionen aus, die auf der Antwort auf eine Anforderung zum Senden einer Nachricht basieren. Das -Framework führt bereits eine grundlegende Nachverfolgung des Nachrichtenstatus durch.

    Tabelle : 6. Skripteingabe für Account-Aktion des Antwortprozessors
    Eingabe Ausgabe
    • message_id (Zeichenfolge): Bezeichner des sys_cs_message-Datensatzes, der dieser Antwort zugeordnet ist.
    • Header (JSON): Header, die empfangen werden.
    • body (Zeichenfolge): Empfangener Textkörper.
    • Statuscode (Ganzzahl) – Der empfangene HTTP-Statuscode.
    Keine

    Beispiel: Aktionsskript für Antwortprozessor.

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

    Ausgehende Umwandlerskripts

    Die ausgehenden Umwandlerskripts konvertieren ausgehende Virtual Agent Nachrichten in ein Protokoll, das sich auf die anwenderdefinierte Chatintegration für Konversationen bezieht.

    Eingabe.

    • Rich_control (JSON): Virtual Agent Server-Rich-Control-Komponente, die transformiert werden muss.
    • Nutzlast (JSON): Letzte Antwort, die von einer anfordernden Person empfangen wurde.

    Ausgabe

    result (Zeichenfolge): Für den Anbieter geeignete zu sendende Komponentennachricht.

    Tabelle : 7. Beispiele: Ausgehende Umwandlerskripts
    Name des ausgehenden Umwandlers Skriptbeispiel
    Adapter „ Virtual Agent – SMS Twilio“ – Ausgehender Umwandler für Standardtext []
    (function execute(inputs, outputs) {
      var rich_control = inputs.rich_control;
      outputs.result = rich_control['label'];
    })(inputs, outputs);
    Adapter „ Virtual Agent – SMS Twilio“ – Ausgehender Umwandler für Standardlink []
    (function execute(inputs, outputs) {
      var richControl = (inputs.rich_control);
      var value = richControl.value;
      outputs.result = richControl.header + ': ' + value.action;
    })(inputs, outputs);
    Adapter „Virtual Agent – SMS Twilio “ Standardauswahl Ausgehender Umwandler
    (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);
    Adapter „Virtual Agent – SMS Twilio “ Standard Ausgehender Umwandler für MultiLink
    (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);
    Adapter „Virtual Agent – SMS Twilio “ – Standardkarte – Ausgehender Umwandler
    (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);

    Eingehende Umwandlerskripts

    Die eingehenden Umwandlerskripts konvertieren anwenderdefinierte eingehende Konversationsnachrichten für die Chatintegration in ein Protokoll, das von Virtual Agent erkannt wird. Bestimmt den erforderlichen Wert, der in das Rich Control eingefügt werden soll, das dem Benutzer angezeigt wird.

    Eingabe.

    • request_context (JSON): Die vom Anbieterattributskript übergebene Anforderung.
    • Rich_control (JSON): Das letzte an die anfordernde Person gesendete Rich Control, das die ursprüngliche „Frage“ enthält.

    Ausgabe

    result (JSON): Das vom Server Virtual Agent erwartete Ergebnis. Wenn die anfordernde Person auf eine Themenauswahl antwortet, ist dies die sys_id des Themas. Wenn die anfordernde Person auf einen Eingabetext antwortet, ist dies die Textantwort.
    • Wert: sys_id oder Textwert.
    • search_text: Text, der verwendet wird, wenn die anfordernde Person etwas Unerwartetes ausgewählt hat. Angenommen, ein Benutzer hat als Antwort auf eine Themenauswahlkomponente etwas eingegeben, bei dem die NLU helfen könnte, z. B. „Keine dieser Optionen stimmt mit dem überein, was ich möchte“.
    Tabelle : 8. Beispiele: Eingehende Umwandlerskripts
    Name des eingehenden Umwandlers Skriptbeispiel
    Adapter „Virtual Agent – SMS Twilio “ [], Standard – Eingehender Textumwandler

    Zweck: Suchen Sie die Textantwort auf die gestellte InputText-Frage

    (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);
    Adapter „Virtual Agent – SMS Twilio “ Standard Eingehender Umwandler für Auswahl

    Zweck: Ermitteln Sie die sys_id der Option, die der Anwender für diese Auswahlfrage ausgewählt hat. Dieses Skript verwendet den gleichen Algorithmus des ausgehenden Umwandlers. Wenn keine Optionen ausgewählt sind und der Anwender stattdessen etwas eingegeben hat, wird „search_text“ festgelegt und in NLU eingespeist, sofern die Option in dieser Instanz aktiviert ist.

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