Intégrations de scripts

Vous pouvez créer vos propres actions de robot dans Constructeur de robots. Cela vous permet de personnaliser la façon dont votre robot réagit dans les conversations. Les actions de robot sont utilisées dans les dialoguesFermé Histoires et règles de robots logiciels dans Constructeur de robots. pour définir les réponses du robot pendant les conversations.

Les actions personnalisées sont créées sous forme d’intégrations de scripts dans Constructeur de robots. Les intégrations de scripts prennent en charge JavaScript. Chaque intégration de script peut avoir plus d’une action. Lorsque cette option est activée, vos actions personnalisées sont disponibles dans la liste des actions de robot lorsque vous ajoutez une réponse de robot à une histoireFermé Utilisé pour former le robot logiciel au traitement des interactions en fonction de l’intention et du contexte, à une règleFermé Utilisé pour définir la réponse du robot logiciel aux messages qui ne changent pas avec le contexte. ou à un repliFermé Ces sites sont consacrés au développement et au soutien de CXone, et non à son fonctionnement. Le blocage de ces derniers peut entraver l’accès aux liens d’aide et de téléchargement de la plateforme..

La liste suivante présente des exemples d’utilisation des actions de robot personnalisées :

  • Rédigez du code pour concevoir des actions de robot afin de répondre aux besoins uniques de votre organisation.
  • Appelez votre propre API externe en tant qu’action de robot.
  • Ajoutez des scripts aux compétences de bot et publiez-les dans Boutique de compétences.

Étant donné que les scripts Constructeur de robots fonctionnent sur le serveur, il y a quelques limitations à prendre en compte lors de la création de vos scripts.

Éditeur de script

Une intégration de script peut avoir plus d’une action. Chaque action a son propre script. Vous pouvez accéder à l’éditeur de script à partir des propriétés de chaque action.

Dans l’éditeur, vous pouvez saisir du code à gauche, puis cliquer sur le triangle d’exécution Une flèche triangulaire pointant vers la droite. pour afficher les résultats dans le volet Console.

Variables de script

Vous pouvez créer des variables à utiliser dans les scripts Constructeur de robots. Les variables peuvent stocker une valeur qui sera utilisée ailleurs dans le script. Elles ne peuvent être utilisées que dans l’intégration de scripts où vous les créez, mais vous pouvez les utiliser dans tous les scripts de cette intégration.

Les valeurs des variables ne peuvent pas être modifiées dans le script. Elles ne peuvent être modifiées que sur la page d’intégration des scripts ou lorsqu’une action faisant référence à la variable est utilisée dans une réponse du robot dans une histoireFermé Utilisé pour former le robot logiciel au traitement des interactions en fonction de l’intention et du contexte, dans une règleFermé Utilisé pour définir la réponse du robot logiciel aux messages qui ne changent pas avec le contexte. ou dans un repliFermé Ces sites sont consacrés au développement et au soutien de CXone, et non à son fonctionnement. Le blocage de ces derniers peut entraver l’accès aux liens d’aide et de téléchargement de la plateforme..

Pour utiliser une variable dans une action :

  • Le script de l’action doit faire référence à la variable.
  • Il doit être rendu modifiable dans cette action, si vous voulez pouvoir modifier la valeur.

Les scripts Constructeur de robots prennent en charge quatre types de variables :

  • Texte : Les variables de texte contiennent des valeurs de chaînes simples. Une variable texte modifiable devient un champ dans l’interface utilisateur de l’action personnalisée du robot, dans lequel vous pouvez saisir du texte pour attribuer une valeur à la variable.
  • Nombre : Les variables numériques contiennent des valeurs numériques. Une variable de nombre modifiable devient un champ dans l’interface utilisateur de l’action personnalisée du robot, dans lequel vous pouvez saisir un nombre pour attribuer une valeur à la variable.
  • Sélection : Utilisez les variables de sélection lorsque vous souhaitez définir plusieurs valeurs possibles pour la variable. Une variable de sélection devient une liste déroulante dans l’interface utilisateur de l’action personnalisée du robot. Les options de la liste déroulante sont définies dans le champ Valeurs de la définition de la variable dans l’onglet Scripts.
  • Secret : Utilisez des variables de secret pour contenir des données privées, telles que des jetons ou des identifiants d’API. Après avoir saisi la valeur, Constructeur de robots masque tous les caractères sauf les cinq premiers par des astérisques ( * ). La valeur est en lecture seule et ne peut pas être écrasée ou modifiée par le script ou par l’action de robot. Si vous devez la modifier, vous devez mettre à jour la valeur sur la page Variable du script. Les variables de secret ne peuvent pas être modifiées.

Vous pouvez définir une valeur par défaut pour les variables de type texte, nombre et sélection. Lorsque la variable est modifiable, la valeur par défaut peut être écrasée en sélectionnant ou en saisissant une valeur différente lorsque vous ajoutez l’action à une réponse de robot. Lorsque la variable n’est pas modifiable, mais qu’elle est référencée dans le script d’une action, la valeur par défaut est utilisée, si elle en a une. Si aucune valeur par défaut n’est attribuée, la variable n’a pas de valeur dans le script.

Les variables que vous créez sont ajoutées à l’objet Variables dans l’intégration de script.

Objets et fonctions standard

En plus des fonctionnalités JavaScript standard, Constructeur de robots dispose du cadre suivant, spécifique aux bots :

  • L’objet Bot offre un autre moyen de concevoir la façon dont votre bot répond dans les conversations.
  • L’objet Stockage vous permet de conserver les informations contextuelles pour une exécution de script.
  • L’objet Variables contient toutes les variables que vous ajoutez à l’intégration de script.
  • La fonction de récupération (fetch) est une implémentation de la norme fetch JavaScript.
  • La console permet le débogage.

Étant donné que les scripts Constructeur de robots fonctionnent sur le serveur, il y a quelques limitations à prendre en compte lors de la création de vos scripts.

Objet Bot

L’objet Bot contient des méthodes qui déclenchent les actions de bot. Lors de l’écriture d’un script, l’éditeur Web vous propose toutes les méthodes disponibles, avec leurs arguments et leurs types. Les méthodes suivantes sont disponibles lors de l’utilisation de l’objet Bot :

De nombreuses méthodes de l’objet Bot peuvent être personnalisées à l’aide d’un paramètre options. Les Options peuvent être fallbackText (repli) ou typing (saisie intelligente). Les valeurs possibles pour typing sont 1, 2 ou 3.

Options = {
	"fallbackText": "this is the fallback text",
	"typing": 2,
}

sendMessage

Saisissez un message en texte clair que le bot doit envoyer. Utilisez le format .sendMessage(text: string, options: Options): void. Le paramètre options n’est pas nécessaire.

Bot.sendMessage('This is message written by bot')

sendButtons

Configurez et envoyez jusqu’à trois boutons. Tous les paramètres de bouton peuvent être organisés en définissant des attributs. Utilisez l’exemple ci-dessous pour comparer les paramètres de bouton dans la boîte de dialogue avec les attributs du script. Utilisez le format .sendButtons(text: string, buttons: ButtonPayload[], options: Options): void. Le paramètre options n’est pas nécessaire.

Bot.sendButtons('This is message written by bot', [
{
	title: 'Button 1',
	intent: {
		name: 'mood'
	}
}
])

Vous pouvez également déclencher entityValue, un texte ou une URL par le biais de votre script.

La combinaison de ces attributs peut entraîner une erreur ou un comportement inattendu.

// triggers intent
{
	title: 'Title',
	intent: 'mood'
}

// triggers intent with entity value
{
	title: 'Title',
	intent: {
		name: 'mood',
		entity: 'myEntity',
		value: 'entity value'
	}
}

// url
{
	title: 'Title',
	url: 'https://www.nice.com'
}

// text
{
	title: 'Title',
	text: 'This is a text'
}

sendQuickReplies

Configurez et envoyez jusqu’à trois réponses rapides. Tous les paramètres de réponse rapide peuvent être organisés en définissant des attributs. Les options pour les réponses rapides sont les mêmes que les options pour les boutons. Utilisez le format .sendQuickReplies(text: string, quickReplies: QuickReplyPayload[], options: Options): void. Le paramètre options n’est pas nécessaire.

Bot.sendQuickReplies('This is message written by bot', [
{
	title: 'Quick reply 1',
	intent: {
		name: 'mood'
	}
}
])

Vous pouvez également déclencher entityValue, un texte ou une URL par le biais de votre script.

La combinaison de ces attributs peut entraîner une erreur ou un comportement inattendu.

// triggers intent
{
	title: 'Title',
	intent: 'mood'
}

// triggers intent with entity value
{
	title: 'Title',
	intent: {
		name: 'mood',
		entity: 'myEntity',
		value: 'entity value'
	}
}

// url
{
	title: 'Title',
	url: 'https://www.nice.com'
}

// text
{
	title: 'Title',
	text: 'This is a text'
}

sendCards

Configurez et envoyez jusqu’à 10 cartes. Utilisez le format .sendCards(cards: CardPayload[], options: Options): void. Le paramètre options n’est pas nécessaire.

Bot.sendCards([{
	title: 'Card title',
	description: 'Card description',
	image: 'https://picsum.photos/200/300',
	mimetype: 'image/jpeg',
	button: {
		title: 'Button title',
		url: 'https://www.nice.com/'
	}
}])

sendMultimedia

Le multimédia n’est pas validé par Constructeur de robots, mais peut l’être dans d’autres intégrations. Le contenu de l’URL doit être disponible pendant toute la durée d’utilisation du script. Il doit également être accessible au public, car il sera téléchargé à plusieurs reprises lors de l’exécution du script. Les restrictions relatives au type et à la taille des médias sont les mêmes que lorsque vous utilisez une action bot multimédia. Utilisez le format .sendMultimedia(url: string, mimetype: string, options: Options): void. Le paramètre options n’est pas nécessaire.

Bot.sendMultimedia('https://picsum.photos/200/300', 'image/jpeg')

sendRichLink

Configurez et envoyez un lien enrichi. Utilisez le format .sendRichLink(richlink: RichLinkPayload): void.

Bot.sendRichLink({
	title: 'Title',
	url: 'https://www.nice.com',
	image: 'https://picsum.photos/200/300',
	mimetype: 'image/jpeg'
})

sendListPicker

Configurez et envoyez jusqu’à 12 options de sélecteur de liste. Toutes les options de sélecteur de liste peuvent être organisées en définissant des attributs. Les options de sélecteur de liste sont les mêmes que celles des boutons. Utilisez le format .sendListPicker(message: string, description: string, actions: ListPickerPayload[], options: Options): void. Le paramètre options n’est pas nécessaire.

Bot.sendListPicker('Message', 'Description', [{
	title: 'Title',
	description: 'Description',
	image: {
		url: 'https://picsum.photos/200/300',
		mimetype: 'image/jpeg'
	}
	intent: {
		name: 'mood'
	}
}])

handover

Configurez l’emplacement du transfertFermé Tout message de contact qui devrait déclencher le transfert vers un agent en chair et en os en utilisant queueId. Il peut être laissé à null pour utiliser le réacheminement automatique, ou il peut s’agir de l’ID d’une file d’attente existante. Utilisez le format .handover(queueId: ?string): void.

Pour localiser un queueId :

  1. Dans CXone, cliquez sur le sélecteur d’application et sélectionnezACD.

  2. Accédez à Digital Experience > Files d’attente de routage.

  3. Localisez la file d’attente pour laquelle vous avez besoin de l’ID et cliquez sur Modifier.

  4. Sur la page de modification de la file d’attente, consultez l’URL dans votre navigateur. Le numéro qui suit /edit/ est le queueId. Il doit ressembler à cinq séries de chiffres et de lettres séparées par des tirets. Par exemple, 67bf5865-4556-40db-ba44-6c0cc3f88ffa.

Bot.handover(null)
// or
Bot.handover('queueId')

addTags

Configurez les balises à appliquer. Toutes les balises utilisées dans le script doivent déjà exister dans Constructeur de robots. Si une balise est appelée dans le script, mais qu’elle n’existe pas, l’action sera ignorée. Utilisez le format .addTags(tags: string[]): void.

Bot.addTags(['Tag 1', 'Tag 2'])

waitForResponse

Dans certains cas, vous devez attendre la réponse du client et poursuivre l’exécution de votre script. La communication avec le client étant asynchrone, l’attente de la réponse l’est également. La méthode Bot.waitForResponse nécessite un paramètre : le nom de la fonction qui sera exécutée après la réception d’une réponse. Utilisez le format .waitForResponse(functionName: string): void.

Cette fonction a un comportement différé. Cela signifie que le résultat ne prend pas effet immédiatement lorsqu’il est exécuté. Au lieu de cela, l’exécution d’un script en cours doit se d’abord terminer. Si vous souhaitez que le script se termine par une fonction de comportement différé, vous devez arrêter explicitement l’exécution du script à l’aide d’une instruction de retour ou de conditions.

function main() {
	console.log('Testing wait for response')
	Bot.waitForResponse('response') //The script continues to run and the next line executes while listening for a customer response
	console.log('This is still going to be executed')
}

function response() {
	console.log('Customer responded', Bot.slots['last customer message'].value)
}

fillSlot

Configurez l’emplacementFermé Entité extraite du message du contact et enregistrée pour une utilisation dans les réponses du robot logiciel. Similaire à une variable. à appliquer. Tous les emplacements utilisés dans le script doivent déjà exister dans Constructeur de robots. Si un emplacement est appelé dans le script, mais qu’il n’existe pas, l’action sera ignorée.

Si vous souhaitez simplement stocker la valeur pour l’exécution du script, utilisez une variable locale ou l’objet Store. Utilisez le format .fillSlot(name: string, value: any[]): void.

Pour accéder à la valeur réelle de l’emplacement, vous devez accéder à l’attribut .value.

function main() {
	Bot.fillSlot('slotName', 'slotValue');
	console.log(Bot.slots.slotName.value);
}

slots

Dans la notation par points, l’éditeur peut demander les emplacementsFermé Entité extraite du message du contact et enregistrée pour une utilisation dans les réponses du robot logiciel. Similaire à une variable.disponibles, mais cela n’est possible que si les noms des emplacements ne contiennent pas d’espaces ou de caractères spéciaux. Dans les cas où les noms des emplacements comprennent des espaces ou des caractères spéciaux, la notation entre crochets doit être utilisée à la place.

console.log(Bot.slots)

// example
let contactId = Bot.slots['contact.id'].value
let lastCustomerMessage = Bot.slots['last customer message'].value

sendAsCustomer

Cette fonction vous permet d’ajouter ce que le contactFermé La personne qui interagit avec un agent, un SRVI ou un robot dans votre centre d’appels. pourrait dire dans vos histoiresFermé Utilisé pour former le robot logiciel au traitement des interactions en fonction de l’intention et du contexte et règlesFermé Utilisé pour définir la réponse du robot logiciel aux messages qui ne changent pas avec le contexte.. Utilisez le format .sendAsCustomer(text: string): void.

Cette fonction a un comportement différé. Cela signifie que le résultat ne prend pas effet immédiatement lorsqu’il est exécuté. Au lieu de cela, l’exécution d’un script en cours doit se d’abord terminer. Si vous souhaitez que le script se termine par une fonction de comportement différé, vous devez arrêter explicitement l’exécution du script à l’aide d’une instruction de retour ou de conditions.

Bot.sendAsCustomer('Hello bot')

Objet Stockage

Store est un objet créé pour stocker des données pendant l’exécution du script. Par rapport à une variable locale, il présente l’avantage de pouvoir être utilisé dans plusieurs fonctions .waitForResponse.

set, get

Store.set(name: string, value: any[]): void

Store.get(name: string): any[]

function main() {
	Store.set('token', 'my-secret-token')
	Bot.waitForResponse('response')
}

async function response() {
	console.log(Store.get('token')) // my-secret-token is logged
}

Objet Variables

L’objet Variables contient les variables que vous créez dans l’intégration de script. Chaque variable est une propriété de Variables. Chaque variable possède un ensemble de sous-propriétés qui contiennent des informations à son sujet. L’exemple suivant montre une variable de sélection appelée colorChoice :

"colorChoice": {
  "defaultValue": "red",
  "options": [
	"red",
	"green",
	"blue"
	],
  "type": "select",
  "value": "red",
  "name": "colorChoice"
}		

Dans l’exemple, la liste des valeurs attribuées à la variable est contenue dans la propriété options.

Les propriétés defaultValue et value ont initialement la même valeur. Si vous ne spécifiez pas de valeur par défaut pour une variable de sélection, la valeur par défaut est null. Les valeurs des variables ne peuvent pas être modifiées dans le script, mais elles peuvent être rendues modifiables, puis modifiées lorsque l’action est utilisée dans une histoire ou une règle.

Référence à des variables dans un script

Faites référence à la valeur d’une variable en utilisant la notation par points : Variables.varName.value

Référence à la liste des options d’une variable de sélection : Variables.varName.options

Afficher les variables existantes dans une intégration de script

Vous pouvez voir une liste des variables existantes et de leurs propriétés dans le script en ajoutant la ligne suivante à votre code, puis en exécutant le script. La liste apparaît dans la console. Le code est le suivant : console.log(Variables). De même, vous pouvez afficher le contenu d’une seule variable en ajoutant console.log(Variables.varName.value) ou console.log(Variables.varName.options) à votre script.

Fonctions fetch

fetch(url: string, ?options), où les options sont :

  • method - ’GET’, ’POST’, ’PUT’, ’DELETE’
  • headers
  • form_params
  • json
  • body

Utilisez la fonction fetch pour communiquer avec les API. Il peut s’agir de n’importe quelle API CXone ou de la vôtre.

const URL = 'https://nice.com'

async function main() {
	// 1. using async/await
	try {
		const response1 = await fetch(URL, { 'method': 'GET' })

		console.log(
			'response 1',
			response1.ok,
			response1.status,
			response1.statusText,
			response1.url,
			response1.headers
		)
		console.log('response 1', await response1.text())
	} catch (exception) {
		console.log('Error occured', exception)
	}

	// 2. using Promises
	fetch(URL, { 'method': 'GET' })
		.then(response => {
			console.log(
				'response 2',
				response.ok,
				response.status,
				response.statusText,
				response.url,
				response.headers
			)
	
			return response.text()
		})
		.then(response => {
			console.log('response 2', response)
		})
		.catch(exception => {
			console.log('Error occured', exception)
		})
	
	// 3. using fetchSync
	try {
		const response3 = fetchSync(URL, { 'method': 'GET' })
		console.log('response 3', response3)
	} catch (exception) {
		console.log('Error occured', exception)
	}
}

fetchSync

La fonction fetch est une implémentation standard de la fonction de récupération (fetch) JavaScript, qui renvoie une promesse et implémente également les fonctions .json() ou .text() sur la réponse.

Il existe également une variante synchrone (fetchSync), qui renvoie directement la réponse, et non la promesse. Si vous souhaitez rester cohérent avec le monde asynchrone de JavaScript, utilisez une fonction fetch standard.

Fonction console

La fonction console est utilisée pour tester votre script. Vous pouvez enregistrer n’importe quelle donnée. Le résultat de l’enregistrement est également stocké dans l’historique de la conversation, mais n’est pas envoyé au contactFermé La personne qui interagit avec un agent, un SRVI ou un robot dans votre centre d’appels..

log

Utilisez le format console.log(…output: any[]): void.

console.log('my log', 123, {pi: 3.14})

warn

Utilisez le format console.warn(…output: any[]): void.

console.warn('my warn', 123, {pi: 3.14})

info

Utilisez le format console.info(…output: any[]): void.

console.info('my info output', 123, {pi: 3.14})

debug

Utilisez le format console.debug(…output: any[]): void.

console.debug('my debug output', 123, {pi: 3.14})

error

Utilisez le format console.error(…output: any[]): void.

console.error('my error output', 123, {pi: 3.14})

Gestion des erreurs

onError

Vous pouvez gérer les erreurs dues à des exceptions inattendues en définissant votre fonction onError.

let onError = (e) => console.log('my handler', e.message)
		
function main() {
	Bot.nonExistentMethod()
}

Limitations des scripts pour Générateur de robots CXone

Les scripts personnalisés écrits en Constructeur de robots fonctionnent sur le serveur. Les paragraphes suivants décrivent les restrictions actuelles qui garantissent des performances optimales pour les scripts et le serveur :

  • Structure : Tout le code doit être contenu dans la fonction main. Le code situé en dehors d’une fonction ne sera pas exécuté.
  • Limite maximale d’événements : Chaque script est limité à un maximum de 200 événements par exécution de script. Les événements comprennent chaque fonction et toutes les actions déclenchées par chaque fonction.
  • Limite de mémoire : Chaque exécution de script dispose d’un maximum de 10 Mo de mémoire.
  • Limite de temps d’exécution : L’exécution de chaque script est limitée à 10 secondes.
  • Limite d’invocation des fonctions de bot : Les fonctions de bot suivantes peuvent être invoquées au maximum 20 fois chacune par exécution de script :
    • sendMessage
    • sendButtons
    • sendQuickReplies
    • sendCards
    • sendMultimedia
    • sendRichLink
    • sendListPicker
    • handover
    • addTags
    • waitforResponse
  • Limite d’invocation pour fillSlot : La fonction fillSlot peut être invoquée au maximum 100 fois par exécution de script.
  • Limite d’invocation de la fonction console  : Les fonctions console suivantes peuvent être invoquées au maximum 100 fois chacune par exécution de script :
    • log
    • info
    • warn
    • debug
    • error
  • Limite d’invocation pour fetchSync : La méthode fetchSync peut être invoquée jusqu’à 20 fois par exécution de script.