Ressources pour les intégrations personnalisées d’aide aux agents

Les ressources de cette page fournissent les informations nécessaires à la planification et à la mise en œuvre d’une intégration personnalisée d’aide aux agents avec CXone.

Applications d’agent prises en charge

Vous pouvez utiliser MAX et les applications Agent sont prises en charge par pour une utilisation avec des intégrations personnalisées d’aide aux agents.

Transmission audio

Les paquets audio sont encodés au format brut G711 μlaw 8 bits 8 000 kHz. Il s’agit du même format que celui de tous les fichiers audio de téléphonie CXone.

Lorsque vous configurez votre intégration personnalisée d’aide aux agents dans Agent Assist Hub, vous pouvez choisir les données audio que vous souhaitez envoyer à l’application d’aide aux agents. Vous pouvez envoyer l’audio du contact, de l’agent ou des deux.

Au début de chaque flux, CXone envoie un message initial à l’application Terminal d’aide aux agents personnalisé. Le message initial comprend le paramètre streamPerspective, qui indique si le flux audio est celui de l’agent ou du contact :

  • "streamPerspective": "RX" : Le son transmis par le téléphone de l’agent; l’agent parle.
  • "streamPerspective": "TX" : Le son que l’agent entend; le contact qui parle, ou plusieurs personnes si l’interaction est en mode conférence.
  • "streamPerspective": "MIX" : Contient les flux audio de l’agent et du contact.

Une connexion WebSocket individuelle ne contient de l’audio que d’une seule perspective. Il s’agit généralement de TX ou RX, ce qui permet d’obtenir une séparation stéréo. Un mélange des deux dans un seul flux mono est possible. Si une interaction a lieu en mode conférence, le son reçu dépend de la perspective de flux configurée. Si la perspective est TX, l’audio de tous les participants, à l’exception de l’agent, est reçu.

Si la connexion est interrompue ou présente d’autres problèmes, tels que des paquets perdus, le terminal d’aide aux agents personnalisé tente de rétablir la connexion avec le WebSocket. Il attend un nouvel l’établissement de liaison pour l’authentification identique au premier qu’il a reçu.

Si un contact est mis en attente, la connexion WebSocket est fermée. Lorsque l’interaction reprend, une nouvelle connexion WebSocket est établie. Il attend un établissement de liaison identique à celui d’origine.

Autorisation

Vous pouvez utiliser l’autorisation dans les intégrations personnalisées d’aide aux agents. Votre intégration peut nécessiter une authentification pour les demandes au niveau du tunnel mandataire et de l’application d’aide aux agents.

Autorisation pour le tunnel mandataire

Si vous souhaitez que le tunnel mandataire exige une autorisation pour les demandes qui le traversent, vous devez inclure cette exigence dans votre conception. Vous pouvez utiliser n’importe quel type d’autorisation, comme des en-têtes ou une autorisation dynamique basée sur des jetons. Vous devez construire votre tunnel mandataire pour utiliser la méthode d’autorisation que vous avez choisie.

Vous devez également configurer votre script Studio pour gérer l’autorisation :

  • Pour l’autorisation basée sur l’en-tête, le script doit inclure l’en-tête dans les demandes qu’il envoie.
  • Pour l’autorisation basée sur un jeton, le script doit demander un jeton, le stocker dans la mémoire cache et gérer l’expiration du jeton. Lorsque le jeton expire, le script doit demander un nouveau jeton, si nécessaire. Utilisez l’action REST API Studio pour communiquer avec le serveur d’authentification.

Si vous utilisez l’autorisation dynamique, vous devez également configurer un serveur d’autorisation, si vous n’en avez pas déjà un. Le serveur d’autorisation fournit des jetons lorsque le script les demande.

Autorisation pour l’application d’aide aux agents

Si votre fournisseur d’aide aux agents exige une autorisation pour toutes les demandes, vous pouvez la configurer dans l’application Terminal d’aide aux agents personnalisé dans Agent Assist Hub.

Pour utiliser l’autorisation avec votre intégration personnalisée, vous devez :

  • Générer l’en-tête d’autorisation à utiliser dans vos scripts d’intégration d’aide aux agents personnalisés. Reportez-vous à la documentation de votre fournisseur d’aide aux agents pour connaître toutes les configurations applicables.
  • Ajoutez les en-têtes nécessaires à l’application Terminal d’aide aux agents personnalisé dans Agent Assist Hub. Si vous utilisez l’application d’aide aux agents avec des interactions textuelles et vocales, vous avez besoin d’en-têtes distincts pour chaque type d’interaction. Reportez-vous à la documentation de votre fournisseur d’aide aux agents pour savoir comment générer des en-têtes.

Vous n’avez pas besoin de configurer quoi que ce soit dans votre script. L’application Terminal d’aide aux agents personnalisé se charge de transmettre l’en-tête à l’application d’aide aux agents.

Exigences de configuration de la plateforme CXone

Il n’est pas nécessaire de modifier la configuration de la plateforme CXone pour mettre en place une intégration d’aide aux agents personnalisée. Vous pouvez modifier les scripts existants pour y inclure la nouvelle application d’aide aux agents. Cependant, une certaine configuration peut être nécessaire en fonction de la manière dont votre organisation utilise la nouvelle application. Vous devrez peut-être :

Diagrammes de séquence

Les diagrammes de séquence montrent comment les différentes parties de l’intégration personnalisée d’aide aux agents interagissent et l’ordre dans lequel ces interactions ont lieu. Ils présentent la chronologie d’une interaction, en commençant dans le coin supérieur gauche, puis en se déplaçant d’avant en arrière sur la page.

Les diagrammes de séquence sont une partie importante de la planification de votre intégration personnalisée. Vous pouvez les utiliser pour établir le flux des demandes et des réponses entre CXone, Agent Assist Hub, le tunnel mandataire et votre application d’aide aux agents. Ils peuvent également être utiles pour déterminer le flux que doit suivre votre script Studio.

Exemple de diagramme de séquence pour une intégration personnalisée d’aide aux agents.

Exigences et directives en matière de script Studio

Utilisez les exemples suivants comme base pour créer les scripts permettant d’intégrer votre application d’aide aux agents dans CXone. Les interactions entrantes et sortantes nécessitent des scripts distincts. L’image suivante montre les actions essentielles pour un script entrant :

Un exemple de script montrant l’action onAnswer connectée à l’action Rest API, elle-même connectée à l’action Aide de l’agent.

Cette image montre les actions essentielles pour un script sortant :

Dans les deux scripts, le paramètre Charge utile des paramètres de script Snippet est facultatif. Vous ne devez l’inclure que si vous devez transmettre des paramètres à l’application d’aide aux agents.

Pour terminer la configuration de votre script :

  • Assigner l’application de configuration Custom Agent Assist Endpoints à l’action Agent Assist.
  • Assurez-vous que l’action optionnelle Charge utile des paramètres de script Snippet contient la charge utile JSON personnalisée à envoyer au fournisseur d’aide aux agents.

  • Vous assurer que la propriété scriptParams de l’action Agent Assist est définie sur {customPayloadJSON}. Ceci n’est nécessaire que si vous incluez l’action optionnelle Snippet avec une charge utile personnalisée.
    • Ajoutez des extraits de code d’initialisation au script en utilisant les actions Snippet. Vous pouvez le faire pour personnaliser votre application d’aide de l’agent.
    • Reconfigurez les connecteurs d’action pour assurer un flux de contact correct et corriger les erreurs potentielles.
    • Terminez tout script supplémentaire et testez le script.

Si vous avez besoin d'aide avec les scripts dans Studio, contactez votre Représentant de compte, consultez la section Guide de référence technique dans l'aide en ligne Studio ou visitez le site de la NICE communauté pour CXone.

Extrait de code Charge utile des paramètres de scripts

Cet extrait de code définit les données transmises à l’application d’aide aux agents par l’action Agent Assist action. Ajoutez ce code à une action Snippet action dans votre script :

DYNAMIC customParam
customParam.param1 = "{value1}"
customParam.param2 = "{value2}"
customParam.param3 = "{value3}"
customParam.param4 = "{value4}"

ASSIGN customParamjson = "{customParam.asJSON()}" 

S’il n’y a pas de paramètres de charge utile personnalisés à envoyer, mais que l’extrait de code Paramètres de script est nécessaire, vous pouvez inclure les déclarations de variables dans l’extrait de code sans assigner de valeurs. Par exemple :

DYNAMIC customParam
ASSIGN customParamjson = "{customParam.asJSON()}" 

Pour utiliser cet extrait de code :

  1. Modifiez les noms et les valeurs des paramètres en fonction des besoins de votre organisation et de l’application d’aide aux agents que vous utilisez.
  2. Placez l’actionSnippet dans le script avant l’action Agent Assist.
  3. Configurez la propriété scriptParams dans l’action Agent Assist action avec le nom de la variable qui contient le JSON. Dans l’exemple fourni, il s’agirait de customParamjson.

Nouveaux scripts ou scripts existants

Vous pouvez créer de nouveaux scripts à utiliser avec votre intégration personnalisée d’aide aux agents. Vous pouvez également modifier des scripts existants. Ne modifiez pas directement les scripts en cours de production. Cela peut entraîner des erreurs qui interrompent le routage des contacts.

Si vous souhaitez utiliser un script existant, enregistrez une copie du script et modifiez-la. Lorsque votre intégration personnalisée est entièrement testée et prête à être mise en œuvre, vous pouvez remettre le script modifié en production. La mise en production d’un scénario peut se faire de l’une des manières suivantes :

Développement et spécifications du webhook du tunnel mandataire

Le tunnel mandataire est l’intermédiaire entre CXone et le terminal de votre application d’aide aux agents. Toutes les demandes et les réponses passent par lui. Il doit traduire les demandes provenant de CXone dans un format que l’application d’aide aux agents comprend. De même, il doit traduire les réponses de l’application d’aide aux agents dans un format que CXone comprend. Pour réaliser ces traductions, vous devez mapper les terminaux entre CXone et l’application d’aide aux agents.

Le tunnel mandataire n’est pas nécessaire. Il est toutefois recommandé de l’inclure dans votre intégration. Le tunnel mandataire offre les avantages suivants :

  • Il offre une sécurité accrue, car il n’y a qu’un seul point d’entrée à gérer dans votre centre de données.
  • Il assure le basculement et l’équilibrage de la charge.
  • Il traduit les protocoles entre CXone et le système du fournisseur d’aide aux agents.

Si vous n’incluez pas de tunnel mandataire dans votre intégration, le script envoie la demande WebSocket initiale aux URL webhook. Vous devez configurer votre script pour qu’il envoie et reçoive des demandes dans le format attendu par l’application d’aide aux agents.

Les sections suivantes fournissent les éléments suivants :

Faits marquants sur le développement d’un tunnel mandataire

Les informations suivantes peuvent vous aider à planifier et à développer le terminal du tunnel mandataire :

  • Le terminal de relais de texte doit utiliser HTTPS. Il ne fonctionnera pas avec HTTP.

  • Le terminal du relais audio doit être un socket Web. Il peut être sécurisé (WSS) ou non (WS).

  • Tous les terminaux de tunnel mandataire doivent être en mesure d’envoyer et de recevoir des communications du réseau CXone.

  • Seules des données binaires transitent par le webhook.

  • Pour les interactions vocales, les seules données envoyées par l’appel sont des octets audio. Aucune commande d’appel ou autre métadonnée n’est incluse.

  • Les intégrations personnalisées d’aide aux agents prennent en charge au moins 2 000 demandes simultanées.

  • Il n’y a pas de délai d’expiration ou de durée maximale de connexion pour la diffusion en continu d’une interaction. Les intégrations personnalisées d’aide aux agents permettent aux appels de rester ouverts tant que l’appel est actif. Lorsque l’appel prend fin, la connexion se ferme.

  • Lorsqu’un appel est mis en attente, la connexion reste ouverte, mais aucune donnée n’est envoyée.

  • Les ID de contact sont uniques pour chaque unité commercialeClosed Regroupement organisationnel de haut niveau utilisé pour gérer le support technique, la facturation et les paramètres globaux pour votre environnement CXone. CXone dispose d’une API que vous pouvez utiliser pour obtenir des données en temps réel concernant contactID. Pour consulter la documentation sur l’API, vous devez avoir accès au portail de développement CXone. Demandez à votre Représentant de compte des informations concernant l’accès.

Connexion au webhook audio : demande initiale

Les interactions vocales doivent utiliser des demandes de socket Web (WSS ou WS). La demande de socket Web initiale de CXone suit le format suivant :

 
"authenticationToken": "[header provided in Custom Agent Assist app]",
"executionInfo": {    
      "contactId": 0, 
      "busNo": 0, 
      "requestId": 0,  
      "actionType": "string",  
      "actionId": 0,  
      "scriptName": "string"
},
      "systemTelemetryData": {    
            "consumerProcessHost": "string",  
            "consumerProcessName": "string",  
            "consumerProcessVersion": "string",  
            "inContactClusterAlias": "string",  
            "inContactScriptEngineHost": "string",  
            "consumerMetaData": {  
                  "additionalProp1": "string",
                  "additionalProp2": "string",   
                  "additionalProp3": "string"  
            }
      },
"streamPerspective": "TX/RX/MIX",
"streamsConfiguration": "string",
"appParams": "string",
"appConfig": "string"
			
		

Les paramètres de cette demande sont décrits dans la section Schémas de cette page :

Connexion au webhook audio : réponse à l’établissement de liaison

Si authenticationToken est fourni, validez le jeton ou l’en-tête, puis envoyez une réponse à l’établissement de liaison. La réponse doit respecter le format de la classe CXoneWebSocketMessage :


public class CXOneWebSocketMessage 
{ 
/// Type of command - see CXOneWebSocketCommandType below
public CXOneWebSocketCommandType command { get; set; } 

/// Type of message returned 
public string messageType { get; set; } 

/// Text message 
public string message { get; set; } 

/// Additional parameters 
public object parameters { get; set; } 
)

public enum CXOneWebSocketCommandType
{ 
CONNECT, 
/// When the initial message/auth validation is a success 
CONNECTED, 
/// Message command 
MESSAGE,  
/// Error command, for example when the initial message/auth is invalid 
ERROR
}
		

Par exemple :


{
    "command": "CONNECTED",
    "messageType": "COMMAND",
    "message": "BEGIN AUDIO STREAM"
}
		

Un exemple de code pour se connecter avec socket Web :

	
WebSocketReceiveResult result = await webSocket.ReceiveAsync(buffer, CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Text)
{ 
    _logger.LogInformation(string.Concat ("MessageType : ", result.MessageType.ToString()));
    if (buffer == null || buffer?.Length == 0)
    {
       return;
    }
    var message = Encoding.UTF8.GetString(buffer, 0, buffer?.Length ?? 0);
    _logger.LogInformation(string.Concat("On Connected", message));
 
    // Validates initial message
    var initialMessage = JsonConvert.DeserializeObject<WebSocketHookInitializeMessage>(message);
    webSocketHookInitilizeMessage = initialMessage;
    param = JsonConvert.SerializeObject(webSocketHookInitializeMessage.appConfig);
 
    // Send response back to  after successful validation
    CXOneWebSocketMessage connectedMessage = new CXOneWebSocketMessage
    {
       command = CXOneWebSocketCommandType.CONNECTED,
       messageType = "COMMAND", 
       message = "BEGIN AUDIO STREAM"
   }; 

    var jsonResponse = Newtonsoft.Json.JsonConvert.SerializeObject(connectedMessage);
    await webSocket?.SendAsync(buffer: new ArraySegment<byte>(array: Encoding.UTF8.GetBytes(jsonResponse),
             offset: 0,
             count: jsonResponse.Length),
             messageType: WebSocketMessageType.Text,
             endOfMessage: true,
             cancellationToken: CancellationToken.None);
}

else if (result.MessageType == WebSocketMessageType.Binary)
{
// You can read the binary voice data
}		
				
		

La section Schémas de cette page décrit les éléments suivants :

Connexion au webhook de texte

Pour recevoir des données de clavardage textuel, vous devez vous connecter au webhook de texte. Seules les demandes HTTP/HTTPS sont acceptées.

Chaque demande comprend les objets suivants. L’en-tête d’autorisation n’est envoyé que si vous en ajoutez un dans l’application Custom Agent Assist Endpoints dans Agent Assist Hub. Les en-têtes d’autorisation ne sont pas nécessaires.


public class WebHooksMessagesRequest
{
	/// If you provide this information in the configuration, it's included.
	public string authorizationHeader { get; set; }
	public int contactId { get; set; }
	public int busNo { get; set; }
	
	
	/// This will be one of the following: patron, agent, or system
	public string participantId { get; set; }
	
	/// Text of the user input (from participantId)
	public string messageBody { get; set; }
	
	/// Other useful data about the message or that are part of the message, such as images or links.
	public object messageData { get; set; }
	
	/// Configuration blob from Agent Assist Hub. 
	/// It may only include the configuration identifier for apps that have large amounts of configuration data.
	public object agentAssistAppConfig { get; set; }
}
 	

Les paramètres de ce code sont décrits dans la section Schémas de cette page.

Paramètres de configuration

Vous pouvez inclure des paramètres supplémentaires lorsque vous configurez l’application Custom Agent Assist Endpoints dans Agent Assist Hub. Cette fonction est utile si votre fournisseur d’aide aux agents exige que certains paramètres soient envoyés avec chaque demande. Ils ne sont pas nécessaires. Tous les paramètres que vous ajoutez sont envoyés dans l’objet agentAssistAppConfig dans l’objet WebHooksMessagesRequest. Par exemple :


"agentAssistAppConfig":{ 
   "param1": "value1", 
   "param2": "value2",
} 
		

TerminauxCXone pour les intégrations personnalisées d’aide aux agents

Les terminaux de l’API fournis ici sont des références interactives que vous pouvez utiliser avec votre intégration personnalisée d’aide aux agents pour obtenir des exemples de demandes de CXone. Des informations supplémentaires, y compris les schémas originaux, sont disponibles dans la documentation Swagger de l’API.

Terminaux pour les applications d’aide aux agents basées sur la voix

GET /agent_assist_audio_websocket_hooks/example-websocket-server : Ce terminal vous donne un exemple d’URL de demande de serveur WebSocket. Cet exemple est conforme à la spécification webhook audio de WebSocket CXone.

GET /agent_assist_audio_websocket_hooks/initializemessage-example : Ce terminal vous donne un exemple de message d’initialisation de WebSocket.

POST /agent_assist_audio_websocket_hooks/custom-assist-endpoint/initialize-audio-message-example : Ce terminal vous donne un exemple de la demande et de la réponse initiales. Voir le schéma WebSocketHookInitializeMessage et le schéma CXoneWebSocketMessage pour plus de détails.

Terminal pour les applications d’aide aux agents basées sur le clavardage

POST /agent_assist_text_webhooks/utterance : Ce terminal vous donne un exemple de réception en temps réel d’énoncésClosed Ce qu’un contact dit ou tape. textuels et de fourniture d’une assistance asynchrone à l’agent. Les énoncés peuvent concerner uniquement le contact, uniquement l’agent ou les deux.

Schémas :

Les sections suivantes fournissent des informations sur les schémas utilisés avec les terminaux d’aide aux agents personnalisés. Vérifiez toujours les schémas dans la dernière version du document Swagger avant d’utiliser ces informations dans vos scripts.

ActionExecutionInfo

Contient des informations sur l’action et le script en cours d’exécution.

Paramètre

Type

Détails

contactId Nombre entier L’identifiant unique de l’interaction.
busNo Nombre entier L’ID de l’CXoneunité commerciale où se trouve le script.
requestId Nombre entier

Un numéro itératif qui identifie chaque demande dans une interaction particulière. Si vous incluez le site requestId dans les demandes, il peut être inclus dans les réponses.

Cela peut s’avérer utile pour le dépannage ou la résolution d’autres problèmes. Si requestID est une valeur unique, elle peut être utilisée pour localiser une requête/réponse unique dans les fichiers journaux.

actionType

Chaîne

Le type d’action qui effectue la requête auprès du terminal personnalisé.
actionId

Nombre entier

L’ID de l’action Studio dans le script. Les ID des actions sont basés sur l’ordre dans lequel les actions ont été ajoutées au script.
scriptName

Chaîne

Le chemin d’accès et le nom du script à l’origine de la requête.

AgentAssistUtterance_V1

Contient le corps du message et des informations sur le message.

Paramètre

Type

Détails

contactId integer ($int64) L’ID du contact dans l’instance actuelle du script.
busNo integer ($int32) L’ID de l’unité commercialeClosed Regroupement organisationnel de haut niveau utilisé pour gérer le support technique, la facturation et les paramètres globaux pour votre environnement CXone CXone où se trouve le script.
tenantId

string

Ce paramètre n’est pas nécessaire.
participantId

string

Indique si le message inclut le contact (Client), l’agent (Agent) ou les deux (Système).
messageBody

string

Le texte du message.
messageMetaData  

Contient des paramètres qui contiennent des données utiles sur le message dans messageBody. S’il s’agit d’un message de clavardage, ce paramètre peut également contenir des images, des liens ou d’autres contenus envoyés dans le cadre du message.

agentAssistAppConfig  

Contient des informations de configuration provenant de Agent Assist Hub. Pour les applications d’aide aux agents comportant de grandes quantités de données de configuration, cet objet peut ne comprendre que l’identifiant de la configuration.

{
	"agentAssistAppConfig":
        {

"param1": "value1",

"param2": "value2"

        }

}

CXoneWebSocketCommandType

Définit le type de commande envoyé. Les valeurs possibles sont :

  • CONNECTER.
  • CONNECTÉ lorsque le message initial ou la validation de l’autorisation est réussie.
  • MESSAGE à utiliser lors de l’envoi d’un message.
  • ERREUR à utiliser lorsque le message initial ou la validation de l’autorisation n’est pas valide.

CXoneWebSocketMessage

Contient le message envoyé à CXone par l’application d’aide aux agents.

Paramètre

Type

Détails

command string Contient la valeur de CXOneWebSocketCommandType.
messageType

string

Contient le type de message.
message

string

Contient le texte du message.
parameters  

Un objet qui contient tous les paramètres supplémentaires requis par l’application d’aide aux agents. Configurez les paramètres que vous devez inclure dans l’application Terminal d’aide aux agents personnalisé dans Agent Assist Hub.

{ additional parameters
}

StreamPerspective

Contient un tableau de chaînes avec trois valeurs possibles. Ce paramètre reflète la configuration des Participants effectuée dans l’application Terminal d’aide aux agents personnalisé dans Agent Assist Hub. Il définit si le flux audio contient des données audio provenant uniquement du contact (0 (TX)), uniquement de l’agent (1 (RX) ) ou une combinaison (2 (MX)).

SystemTelemetryData

Contient des données sur le consommateur d’API qui ne sont pas associées à l’action de script Studio. Les données contenues dans cet objet peuvent être utiles pour le débogage, la facturation, les rapports, etc.

Paramètre

Type

Détails

consumerProcessHost Chaîne Le nom d’hôte de l’application qui appelle l’API.
consumerProcessName Chaîne Le nom du processus ou de l’application qui effectue l’appel à l’API. Par exemple, EsnMediaServer.exe.
consumerProcessVersion Chaîne Informations sur la version de l’application qui appelle l’API.
inContactClusterAlias Chaîne Si applicable et disponible, fournir l’alias du cluster CXone où le script est exécuté. Par exemple, C7 ou M33.
inContactScriptEngineHost Chaîne Le cas échéant et si disponible, indiquez le nom d’hôte du moteur de script CXone. Par exemple, lax-c4cor01 ou aoa-c32cor01.
consumerMetaData Objet

Contient des données arbitraires et extensibles sur le consommateur d’API.

{
	< * >:
}

WebSocketHookInitializeMessage

Il s’agit de la structure de message pour la première charge utile provenant d’un client websocket connecté, tel que le serveur multimédia CXone.

Paramètre

Type

Détails

authenticationToken string

Contient l’en-tête d’authentification configuré dans l’application Custom Agent Assist Endpoints dans Agent Assist Hub.

executionInfo   Contient l’objet ActionExecutionInfo.
systemTelemetryData   Contient l’objet SystemTelemetryData.
streamPerspective   Contient la valeur de StreamPerspective.
streamsConfiguration   Pas utilisé actuellement.
appParams  

Paramètres de contact dynamiques qui peuvent être transmis à partir de scripts Studio ou d’autres sources.

{ parameters
}
appConfig  

Paramètres de configuration prédéfinis de l’application d’aide aux agents.

{ parameters
}