Implementierung von Genesys-Tools und Zugriff auf Variablen

In diesem Thema wird erläutert, wie man „ Python “-Tools für den Genesys Bot Connector (und den Audio-Connector) implementiert und wie man auf die Ausgabe des Tools in der Genesys Cloud-Plattform zugreift.

Voraussetzung

Genesys Bot Connector (oder Audio-Connector) einrichten

  • OAuth -Anmeldedaten einrichten und eine Verbindung zu watsonx Orchestrate herstellen
  • Richten Sie den eingehenden Nachrichtenfluss ein und rufen Sie dort den Bot-Konnektor auf

Sie müssen wissen, wie man Agenten und Tools für „ watsonx Orchestrate “ einrichtet

Kurzer Überblick über Sitzungsvariablen – Eingaben

Eingabevariablen aus Genesys werden an den Kontext des Agenten übergeben. In der Konfiguration des Genesys Bot Connectors können Sie Sitzungsvariablen definieren – Eingaben, die von Genesys an „ watsonx Orchestrate “ übergeben werden sollen.

Diese Variablen werden in das context.channel.genesys_bot_connector.parameters Objekt eingebettet, wie im folgenden Beispiel gezeigt.

Beispiel:

context: {
    channel: {
        customer_id: 12345example,
        channel_type: genesys_bot_connector,
        genesys_bot_connector: {
            bot_session_id: 12345example,
            conversation_id: 12345example,
            parameters: { user_name: John Doe, phone: +1234567890 }
        }
    }

      

Python Implementierung des Tools

Tool-Struktur: Die Tools von „ Python “ werden mithilfe des @tool „Decorator“-Musters aus ibm_watsonx_orchestrate.agent_builder.toolsimplementiert. Jedes Tool gibt Metadaten zurück, die vom Genesys Bot Connector verarbeitet werden können. Die Werkzeuge sollten ausdrücklich den Namen transfer_to_human oder enthalten end_session. Sie können ein beliebiges Präfix hinzufügen, wenn Sie möchten; die Regex-Logik im Backend verarbeitet es (z. B. conc_transfer_to_human ist in Ordnung). Beispiel -Tools – Übertragung auf das „Human“-Tool

from ibm_watsonx_orchestrate.agent_builder.tools import tool
from pydantic import BaseModel
from typing import Dict, Optional

class GenesysBotConnector(BaseModel):
    output_variables: Dict[str, str]

class ChannelOptions(BaseModel):
    genesys_bot_connector: Optional[GenesysBotConnector]
    genesys_audio_connector: Optional[GenesysBotConnector]

class TransferMetadata(BaseModel):
    channel_options: ChannelOptions


@tool(display_name="transfer_to_human")
def transfer_to_human(reason: str, summary: str, channel_type: str = "genesys_bot_connector") -> TransferMetadata:
    """
    Use to connect to a human representative, it provides metadata to use for transferring out the chat or call. The reason should be why the transfer as initiated. The summary is for a human agent to understand the nature of the transfer and include the conversational context. 

    :param reason: A reason as to why the transfer was initiated
    :param summary: A summary for a human agent to understand the nature of the transfer, include conversational context.
    :param channel_type: The current channel type that the agent is in which can be accessed in the context variable.

    :returns: An object to be passed to Genesys Cloud for further routing of the chat or call.
    """
    if channel_type == "genesys_bot_connector":
        channel_options = {
            "genesys_bot_connector": {
                "output_variables": {
                    "summary": summary,
                    "reason": reason,
                    "customVariable": "myCustomParameter"
                }
            },
            "genesys_audio_connector": None
        }

    elif channel_type == "genesys_audio_connector":
        channel_options = {
            "genesys_bot_connector": None,
            "genesys_audio_connector": {
                "output_variables": {
                    "summary": summary,
                    "reason": reason,
                    "customVariable": "myCustomParameter"
                }
            }
        }
    else:
        channel_options = {
            "genesys_bot_connector": None,
            "genesys_audio_connector": None
        }

    transfer_metadata = {
        "channel_options": channel_options
    }

    return TransferMetadata.model_validate(transfer_metadata, strict=False)
Tool zum Beenden der Sitzung
from ibm_watsonx_orchestrate.agent_builder.tools import tool
from pydantic import BaseModel
from typing import Dict, Optional

class GenesysBotConnector(BaseModel):
    output_variables: Dict[str, str]

class ChannelOptions(BaseModel):
    genesys_bot_connector: Optional[GenesysBotConnector]
    genesys_audio_connector: Optional[GenesysBotConnector]

class EndSessionMetadata(BaseModel):
    channel_options: ChannelOptions

@tool(display_name="end_session")
def end_session(reason: str, summary: str, channel_type: str = "genesys_bot_connector") -> EndSessionMetadata:
    """
    Use to end the chat or call, it provides metadata to use for transferring out the chat or call. The reason should be why the chat was ended. The summary is just a couple of sentences describing why the chat was disconnected or ended.
    :param reason: A reason as to why the call was disconnected.
    :param summary: A summary of the conversation.
    :param channel_type: The current channel type that the agent is in which can be accessed in the context variable.

    :returns: An object to be passed to Genesys Cloud for further routing of the chat or call.
    """
    if channel_type == "genesys_bot_connector":
        channel_options = {
            "genesys_bot_connector": {
                "output_variables": {
                    "summary": summary,
                    "reason": reason,
                    "customVariable": "myCustomParameter"
                }
            },
            "genesys_audio_connector": None
        }

    elif channel_type == "genesys_audio_connector":
        channel_options = {
            "genesys_bot_connector": None,
            "genesys_audio_connector": {
                "output_variables": {
                    "summary": summary,
                    "reason": reason,
                    "customVariable": "myCustomParameter"
                }
            }
        }
    else:
        channel_options = {
            "genesys_bot_connector": None,
            "genesys_audio_connector": None
        }

    end_session_metadata = {
        "channel_options": channel_options
    }

    return EndSessionMetadata.model_validate(end_session_metadata, strict=False)
Wir können die oben genannten Tools importieren, indem wir sie jeweils in einer Datei speichern und folgenden Befehl ausführen:
orchestrate tools import -k python -f /path_to/transfer_to_human.py
orchestrate tools import -k python -f /path_to/end_session.py
 

Zugriff auf Tool-Ausgaben in der Genesys-Kanalintegration

Das output_variables Objekt aus dem Tool „ Python “ kann beliebige Schlüssel-Wert-Paare enthalten, die als Sitzungsvariablen an Genesys Cloud übergeben werden müssen – Ausgaben:
"output_variables": {
    "summary": summary,
    "reason": reason,
    "customVariable": "myCustomParameter",
    # Add any additional variables as needed
}
Auf übergebene Variablen in Genesys Cloud zugreifen

Die Befehle (transfer_to_human, end_session usw.) wird über folgende .IntentAdresse erreichbar sein: Je nachdem, von wo aus Sie darauf zugreifen, könnte dies oder Flow.Intent State.Intent usw. sein.

Anhand von Fällen wie dem oben genannten können Sie dann entscheiden, wie Sie mit den einzelnen Intents verfahren möchten.

Auf das in der Tool-Ausgabe übergebene Schlüssel-Wert-Paar kann auf ähnliche Weise zugegriffen werden (z. B. State.summary (Zusammenfassung)

Zugriff auf Tool-Ausgaben bei der Integration des Genesys Audio-Konnektors

Unter Berücksichtigung des Eingabeparameters könnte user_name: "Jon Snow" die Richtlinie für den Agenten wie folgt aussehen (angenommen, es gibt ein einfaches Tool namens get_hello_message).

Wesentlicher Unterschied zum Bot-ConnectorIm Gegensatz zum Genesys Bot Connector, der verwendet, intent um festzustellen, welches Tool aufgerufen wurde, Genesys Audio Connector verwendet disconnectionReason und disconnectionInfo stattdessen.

Der Schlüsselname muss lauten, disconnectionReason und der zuzuweisende Wert kann vom Benutzer frei gewählt werden. Der verwendete Screenshot zum Task.Disconnection Beispiel. Mögliche Werte:
  • "transfer_to_human" - Wenn das Tool „transfer_to_human“ aufgerufen wird
  • "end_session" - Wenn das Tool „end_session“ aufgerufen wird
  • "failed" - Wenn ein Fehler auftritt
  • "caller_hangup" - Als der Anrufer auflegte
Du kannst dies im switch-Block (case) verwenden, wie in der Abbildung gezeigt.

Aufruf von disconnectionInfo

Für optionalen zusätzlichen Kontext (besonders nützlich bei Fehlerfällen):
  • aus disconnectionInfo dem Schlüssel lesen (die Einrichtung erfolgt wie bei disconnectionReason)
Auf benutzerdefinierte Variablen zugreifen
Auf Variablen, die in der Tool-Ausgabe übergeben werden, kann auf dieselbe Weise zugegriffen werden wie im Bot Connector:
  • State.summary für die Zusammenfassungsvariable
  • State.reason für die Variable „reason“
  • State.customVariable für alle von Ihnen definierten benutzerdefinierten Variablen