Ressources pour les intégrations personnalisées d'assistance à l’agent

Le contenu de cette page concerne un produit ou une fonctionnalité en version contrôlée (CR). Si vous ne faites pas partie du groupe CR et souhaitez plus d'informations, contactez votreReprésentant de compte CXone.

Les ressources de cette page fournissent les informations nécessaires à la planification et l'implémentation d'une intégration personnalisée d'assistance à l’agent avec CXone.

Applications d'agent prises en charge

MAX est actuellement la seule application agent destinée à être utilisée avec les intégrations personnalisées d'Agent Assist.

Flux audio

Les paquets audio sont codés au format audio brut G.711 μlaw, 8 bits, 8 000 kHz. Il s'agit du format standard pour la partie audio de la téléphonie de CXone.

Lorsque vous configurez l'intégration personnalisée d'Agent Assist dans Centre d'assistance aux agents, vous pouvez choisir les données audio à envoyer à l'application Agent Assist. Vous pouvez envoyer les données audio depuis le contact, l'agent ou les deux.

Au début de chaque flux, CXone envoie un message initial à l'application Custom Agent Assist Endpoint. Le message initial inclut le paramètre streamPerspective, qui indique si le flux audio appartient à l'agent ou au contact :

  • "streamPerspective": "RX" : les données audio transmises par le téléphone de l'agent : l'agent parle.
  • "streamPerspective": "TX" : les données audio que l'agent entend : le contact parle, ou plusieurs personnes parlent s'il s'agit d'un appel de conférence.
  • "streamPerspective": "MIX" : contient à la fois les flux audio de l'agent et du contact.

Une connexion websocket individuelle ne contient les données audio que d'une seule perspective. En général, il s'agit de TX ou RX, qui assure la séparation stéréo. Un mélange des deux dans un flux mono unique est possible. En cas d'interaction en mode conférence, les données audio qui sont reçues dépendent de la perspective du flux configuré. Si la perspective est TX, les données audio de tous les participants, à l'exception de l'agent, sont reçues.

Si la connexion est rompue, ou en cas d'autres problèmes, tels que la perte de paquets, le terminal personnalisé d'assistance à l'agent tente de rétablir la connexion sur le websocket. Une nouvelle négociation d'authentification est prévue, identique à celle qui a été reçue initialement.

Si un contact est mis en attente, la connexion du websocket est fermée. Lorsque l'interaction reprend, une nouvelle connexion de websocket est lancée. La procédure de négociation doit être identique à celle d'origine.

Autorisation

Vous pouvez utiliser l'autorisation dans les intégrations personnalisées d'Agent Assist. Votre intégration peut nécessiter l'authentification pour les requêtes au niveau du tunnel de proxy et de l'application Agent Assist.

Autorisation du tunnel de proxy

Si vous souhaitez que le tunnel de proxy demande une autorisation pour les requêtes qui le traversent, vous devez le spécifier au niveau de la conception. Vous pouvez utiliser le type d'autorisation que vous souhaitez, tel que les en-têtes ou l'autorisation dynamique basée sur les jetons. Vous devez créer votre propre tunnel de proxy pour utiliser la méthode d'autorisation 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 requêtes qu'il envoie.
  • Pour l'autorisation basée sur les jetons, le script doit demander un jeton, le stocker en mémoire cache et en gérer les délais d'expiration. Lorsque le jeton expire, le script doit en demander un nouveau, 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 définir un serveur d'autorisation, si vous n'en disposez pas encore. Le serveur d'autorisation fournit des jetons lorsque le script les demande.

Autorisation pour l'application Agent Assist

Si votre fournisseur Agent Assist nécessite une autorisation pour chaque requête, vous pouvez le configurer depuis l'application Custom Agent Assist Endpoint dans Centre d'assistance aux agents.

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 Agent Assist personnalisés. Reportez-vous à la documentation de votre fournisseur Agent Assist pour toutes les configurations applicables.
  • Ajouter les en-têtes requis dans l'application Custom Agent Assist Endpoint dans Centre d'assistance aux agents. Si vous utilisez l'application Agent Assist avec des interactions texte et voix, vous devez séparer les en-têtes pour chaque type d'interaction. Reportez-vous à la documentation de votre fournisseur Agent Assist pour plus d'informations sur la génération des en-têtes.

Vous n'avez pas besoin de configurer quoi que ce soit dans votre script. L'application Custom Agent Assist Endpoint gère le transfert de l'en-tête à l'application Agent Assist.

Exigences de configuration de la plate-forme CXone

Il n'y a pas de modifications de configuration requise dans la plateforme CXone pour configurer une intégration Agent Assist personnalisée. Vous pouvez modifier les scripts existants pour inclure la nouvelle application Agent Assist. Cependant, il peut être nécessaire de configurer l'application pour s'adapter de façon plus précise au mode de fonctionnement de votre organisation. Vous devrez peut-être :

Diagrammes séquentiels

Les diagrammes séquentiels indiquent comment les différentes parties d'une intégration d'agent personnalisé interagissent et l'ordre appliqué pour ces séquences. Ils établissent une chronologie d'une interaction, commençant dans le coin supérieur gauche, puis se développant vers le bas de la page.

Les diagrammes séquentiels constituent un élément important de la planification de votre intégration personnalisée. Vous pouvez les utiliser pour mapper le flux de requêtes et de réponses entre CXone, Centre d'assistance aux agents, le tunnel de proxy et votre application Agent Assist. Ils peuvent permettre de mieux comprendre le flux que votre script Studio doit suivre.

Un exemple de diagramme séquentiel pour l'intégration personnalisée d'Agent Assist.

Critères et directives pour le script Studio

Utilisez les exemples suivants comme base pour créer les scripts d'intégration de vos applications d'assistance aux agents dans CXone. Les interactions entrantes et sortantes nécessitent des scripts différents. L'image suivante illustre les actions essentielles pour un script entrant :

Un exemple de script portant sur l'action onAnswer connectée à l'action Rest API, qui est elle-même connectée à l'action Agent Assist.

Cette image indique les actions essentielles pour un script sortant :

Dans les deux scripts, la charge utile Paramètres du script Snippet est facultative. Vous ne devez l'inclure que si vous devez transférer des paramètres à l'application d'assistance aux agents.

Pour terminer le script, vous devez :

  • Connecter les autres branches de chaque action .
  • Ajouter d'autres actions, configurations et options de logique de script, afin que le script fonctionne comme prévu dans votre environnement.
  • Vérifiez que l’action Snippet Script Param Payload facultative contient le JSON de charge utile personnalisée à envoyer au fournisseur d’assistance aux agents.

  • Vérifier que la propriété scriptParams de l’action Agent Assist est définie sur {customPayloadJSON}. Cela est uniquement requis si vous incluez l’action Snippet facultative avec une charge utile personnalisée.
  • Affecter l'application de configuration Points de terminaison Agent Assist personnalisés à l'action Agent Assist.
    • Ajoutez des snippets d'initialisation au script en utilisant des actions Snippet. Cela permet de personnaliser votre application Agent Assist.
    • Reconfigurez les connecteurs d'action pour assurer un bon flux de contact et corriger les erreurs, le cas échéant.
    • Complétez le script s’il y a lieu et testez-le.

Si vous avez besoin d'aide pour la création de scripts dans Studio, contactez votre Représentant de compte CXone, consultez la section Guide de création de scripts de l'aide en ligne ou visitez le site de la Communauté NICE CXone.

Extrait de code de la charge utile des paramètres du script

Ce snippet définit les données transmises à l’application d’assistance d’agent par l’actionaction Agent Assist. Ajoutez ce code à une actionaction Snippet 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ée à envoyer, mais que le snippet Paramètres de script est requis, vous pouvez inclure les déclarations de variables dans le snippet sans attribuer de valeurs. Par exemple :

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

Pour utiliser ce snippet :

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

Scripts nouveaux et existants

Vous pouvez créer des scripts pour votre intégration Agent Assist personnalisée. Vous pouvez également modifier les scripts existants. Ne modifiez pas directement les scripts en cours de production. Sinon vous risquez de créer des erreurs qui vont interrompre le routage des contacts.

Si vous souhaitez utiliser un script existant, enregistrez une copie de ce script et modifiez-la. Une fois votre intégration personnalisée entièrement testée et prête à être implémentée, vous pouvez remettre le script modifié en production. Pour mettre le script en production, procédez de l'une des façons suivantes :

Développement de webhooks pour le tunnel de proxy et spécifications

Le tunnel de proxy est un logiciel intermédiaire, placé entre CXone et le terminal de votre application Agent Assist. Toutes les requêtes et les réponses y transitent. Il doit transférer les requêtes de CXone à un format que l'application Agent Assist comprend. De même, il doit convertir les réponses de l'application Agent Assist à un format que CXone comprend. Pour réaliser ces conversions, vous devez mapper les terminaux entre CXone et l'application Agent Assist.

Le tunnel proxy n'est pas requis. Toutefois, il est recommandé de l'inclure dans votre intégration. Le tunnel proxy présente les avantages suivants :

  • Il renforce la sécurité, car il n'y a qu'un seul point d'entrée à gérer pour votre centre de données.
  • Il assure la tolérance des pannes et l'équilibrage des charges.
  • Il convertit les protocoles entre CXone et le fournisseur du système d'assistance à l'agent.

Si vous n'incluez pas de tunnel de proxy dans votre intégration, le script envoie la demande de websocket initiale aux URL de webhook. Vous devez configurer votre script pour envoyer et recevoir des requêtes à un format lisible par l'application d'assistance à l’agent.

Les sections suivantes sont :

Choses à savoir pour le développement du tunnel de proxy

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

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

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

  • Tous les terminaux du tunnel de proxy doivent pouvoir communiquer dans les deux sens avec le réseau NICE CXone.

  • Seules les données binaires transitent à travers le webhook.

  • Pour les interactions vocales, les seules données envoyées depuis l'appel sont des octets audio. Aucun contrôle d'appel ou autres métadonnées ne sont inclus.

  • Les intégrations personnalisées d'Agent Assist prennent en charge au moins 2 000 requêtes concurrentes.

  • Il n'y a pas de date/heure limite de connexion ou d'expiration pour les flux d'interactions. Les intégrations personnalisées d'Agent Assist permettent aux appels de rester ouverts aussi longtemps qu'ils sont actifs. Lorsque l'appel se termine, la connexion s'interrompt.

  • Si un appel est mis en attente, la connexion reste ouverte, mais il n'y a pas d'envoi de données.

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

Connexion au webhook audio : demande initiale

Les interactions vocales doivent utiliser des requêtes websocket (WSS ou WS). La requête de websocket initiale de CXone applique 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 requête sont décrits dans la section Schémas de cette page :

Connexion au hook audio : réponse de négociation

Si authenticationToken est fourni, validez le jeton ou l'en-tête, puis envoyez la réponse de négociation. La réponse doit appliquer le format de 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"
}
		

Exemple de code de connexion par websocket :

	
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 ce qui suit :

Connexion au hook texte

Pour recevoir les données texte de chat, connectez-vous au webhook texte Seules les requêtes HTTP/HTTPS sont acceptées.

Toutes les requêtes incluent les objets suivants. L'en-tête d'autorisation est envoyé uniquement si vous en ajoutez un dans l'application Points de terminaison Agent Assist personnalisés dans Centre d'assistance aux agents. Les en-têtes d'autorisation ne sont pas requis.


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 Centre d'assistance aux agents. 
	/// 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 Endpoint dans Centre d'assistance aux agents. Cela devient utile si votre fournisseur Agent Assist demande à envoyer certains paramètres avec chaque requête. Ils ne sont pas requis. Les paramètres que vous ajoutez, le cas échéant, sont envoyés dans l'objet agentAssistAppConfig appartenant lui-même à l'objet WebHooksMessagesRequest. Par exemple :


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

Terminaux CXone pour les intégrations personnalisées d'Agent Assist

Les terminaux d'API fournis ici sont des références interactives que vous pouvez utiliser avec votre intégration personnalisée d'assistance à l’agent pour obtenir des exemples de requête de CXone. Vous trouverez des informations supplémentaires, notamment les schémas d'origine, dans la documentation Swagger de l'API.

Terminaux pour les applications vocales Agent Assist

GET ​/agent_assist_audio_websocket_hooks​/example-websocket-server : ce terminal donne un exemple d'URL de requête de serveur websocket. Cet exemple est conforme aux spécifications du hook websocket audio CXone.

GET ​/agent_assist_audio_websocket_hooks​/initializemessage-example : ce terminal donne un exemple de message d'initialisation de websocket.

POST /agent_assist_audio_websocket_hooks/custom-assist-endpoint/initialize-audio-message-example : ce terminal donne un exemple de requête initiale et de réponse. Voir le schéma WebSocketHookInitializeMessage et le schéma CXoneWebSocketMessage pour plus de détails.

Terminal pour applications d'assistance de l'agent de type chat

POST ​/agent_assist_text_webhooks​/utterance : ce terminal vous donne un exemple de réception d'énoncésFermé Ce qu'un contact dit ou tape. en temps réel et d'assistance asynchrone de l'agent. Les énoncés peuvent être de type contact seul, agent seul, ou les deux.

Schémas

Les sections suivantes fournissent des informations sur les schémas utilisés avec Custom Agent Assist Endpoints. Vérifiez systématiquement 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 Entier L’identifiant unique de l’interaction.
busNo Entier L’ID de l’unité commercialeFermé Regroupement organisationnel de haut niveau utilisé pour gérer le support technique, la facturation et les paramètres globaux de votre CXone environnement CXone hébergeant le script.
requestId Entier

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

Cela peut être utile pour le dépannage ou la résolution de problèmes. Si requestID est une valeur unique, il peut servir à localiser une demande/réponse dans les fichiers journaux.

actionType

Chaîne

Le type d’action qui effectue la demande au point de terminaison personnalisé.
actionId

Entier

Le numéro d’identification de l’action Studio au sein du script. Les identifiants d’actions se fondent sur l’ordre dans lequel les actions ont été ajoutées au script.
scriptName

Chaîne

Le chemin et le nom du script effectuant la demande.

AgentAssistUtterance_V1

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

Paramètre

Type

Détails

contactId entier ($int64) L'ID du contact dans l'instance actuelle du script.
busNo entier ($int32) L'ID de l'unité d'exploitationFermé Regroupement organisationnel de haut niveau utilisé pour gérer le support technique, la facturation et les paramètres globaux de votre CXone environnement CXone hébergeant le script.
tenantId

chaîne de caractères

Ce paramètre est facultatif.
participantId

chaîne de caractères

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

chaîne de caractères

Le texte du message.
messageMetaData  

Contient des paramètres ayant des données utiles sur le message dans messageBody. Si le message est de type chat, ce paramètre peut également contenir des images, des liens ou autres contenus envoyés dans le cadre du message.

agentAssistAppConfig  

Contient des informations de configuration provenant de Centre d'assistance aux agents. Pour les applications Agent Assist avec de gros blobs de configuration, cet objet peut n'inclure que l'identificateur de configuration.

{
	"agentAssistAppConfig":
        {

"param1": "value1",

"param2": "value2"

        }

}

CXoneWebSocketCommandType

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

  • CONNECT .
  • CONNECTED lorsque le message initial ou la validation d'autorisation aboutit.
  • MESSAGE à utiliser lors de l'envoi d'un message.
  • ERREUR à utiliser lorsque le message initial ou la demande d'autorisation n'est pas valide.

CXoneWebSocketMessage

Contient le message envoyé à CXone depuis l'application Agent Assist.

Paramètre

Type

Détails

command chaîne de caractères Contient la valeur de CXOneWebSocketCommandType.
messageType

chaîne de caractères

Contient le type de message.
message

chaîne de caractères

Contient le texte du message.
parameters  

Un objet qui contient des paramètres supplémentaires requis par l'application Agent Assist. Configurez les paramètres à inclure dans l'application Custom Agent Assist Endpoint dans Centre d'assistance aux agents.

{ additional parameters
}

StreamPerspective

Contient un tableau de chaînes avec trois valeurs possibles. Ce paramètre reflète la configuration des participants dans l'application Custom Agent Assist Endpoints dans Centre d'assistance aux agents. Il définit si le flux audio contient des données audio du contact uniquement (0 (TX)), de l'agent seul (1 (RX) ) ou d'une combinaison des deux (2 (MX)).

SystemTelemetryData

Contient des données relatives à l’usager de l’API qui n’est pas associé avec l’action de script Studio. Les données que contient cet objet peuvent être utiles pour déboguer, facturer, créer des rapports, etc.

Paramètre

Type

Détails

consumerProcessHost Chaîne Le nom de l’hôte de l’application appelant l’API.
consumerProcessName Chaîne Le nom du processus ou de l’application effectuant l’appel à l’API. Par exemple, EsnMediaServer.exe.
consumerProcessVersion Chaîne Information de version relative à l’application appelant l’API.
inContactClusterAlias Chaîne S’il y a lieu, et s’il est disponible, indiquez l’alias du cluster NICE CXone où le script s’exécute. Par exemple, C7 ou M33.
inContactScriptEngineHost Chaîne S’il y a lieu, et s’il est disponible, indiquez le nom d’hôte du moteur de script NICE CXone. Par exemple, lax-c4cor01 ou aoa-c32cor01.
consumerMetaData Objet

Contient des données extensibles et arbitraires concernant l’usager de l’API.

{
	< * >:
}

WebSocketHookInitializeMessage

Il s'agit de la structure de messages pour la première charge utile depuis un client websocket se connectant, tel que le serveur de médias NICE CXone.

Paramètre

Type

Détails

authenticationToken chaîne de caractères

Contient l'en-tête d'authentification configuré dans l'application Points de terminaison Agent Assist personnalisés dans Centre d'assistance aux agents.

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

Paramètres de contact dynamique qui peuvent être transférés depuis les scripts Studio ou d'autres sources.

{ parameters
}
appConfig  

Paramètres pré-configurés de l'application Agent Assist.

{ parameters
}