myContactCenterManuel

Formules

Le langage de formules des wallboards — valeurs, opérateurs, requêtes sur les listes, conditions, référence à la ligne et fuseaux horaires — et la signification des messages d'erreur.

Chaque valeur d’un wallboard provient d’une formule. Une formule est une expression unique portant sur les données en direct du centre de contacts, par exemple

Conversations.Count(State = "Waiting")

— le nombre de conversations en attente. Les données disponibles sont décrites sous Données pour les formules ; des formules prêtes à l’emploi figurent sous Exemples. Les indicateurs de performance utilisent le même langage, avec des données un peu différentes, voir ci-dessous.

Ce qu’une formule doit fournir

Emplacement Résultat
Étiquette, afficheur numérique, colonne de tableau une valeur quelconque
Jauge, indicateur d’état un nombre
Formule de ligne d’un tableau ou d’un diagramme oui/non
Série d’un diagramme un nombre ou une durée

Règles de base

  • Une formule est une seule expression — sans instructions, variables ni commentaires.
  • La casse ne joue aucun rôle pour les noms : conversations.count() équivaut à Conversations.Count(). En revanche, elle compte lors de la comparaison de textes : SkillName = "support" ne trouve pas la compétence « Support ».
  • Les espaces et les sauts de ligne entre les éléments sont libres.
  • Vous ajoutez les champs et les méthodes avec un point : Conversations.First().Agent.Name, Name.StartsWith("A").
  • Les requêtes sur les listes ont besoin de parenthèses, même sans contenu : Agents.Count().
  • Les guillemets sont les guillemets droits " — les guillemets typographiques comme « » ou “ ” provoquent une erreur de syntaxe.

Valeurs

Écriture Signification Exemple
nombre entier nombre 42
nombre décimal avec un point nombre décimal 2.5
texte entre guillemets doubles ; un " dans le texte est doublé texte "Support"
true, false oui, non IsLogin = true
null vide Agent = null
Now l’heure actuelle du serveur, en UTC Now - StartTime
TimeSpan(heures, minutes, secondes), TimeSpan.FromMinutes(5), TimeSpan.Zero durée QueuedTimeSpan > TimeSpan(0,2,0)
DateTime(année, mois, jour), DateTime.MinValue instant ChangeTime = DateTime.MinValue
le nom anglais d’un état ou d’un type entre guillemets état, type State = "Waiting"

Vous comparez les états et les types au moyen de leur nom anglais, voir États et types ; ici, la casse est indifférente, et un nom inconnu est une erreur.

Vous convertissez avec les noms de types .NET, par exemple Int32(x) ou Double(Agents.Count()), et avec Convert.ToInt32(…) ou Convert.ToString(…) ; le langage ne connaît pas les noms courts comme int ou double. Pour calculer, toutes les fonctions de Math sont disponibles — Math.Round(x), Math.Round(x, 1), Math.Max(a, b), Math.Abs(x) —, ainsi que les méthodes des valeurs elles-mêmes : Name.ToUpper(), Subject.Length, QueuedTimeSpan.TotalSeconds, StartTime.ToLocalTime().

Opérateurs

Classés par priorité, le plus prioritaire en premier :

Opérateurs Signification
. [ ] champ, méthode, index
-x, not x ou !x signe ; négation d’un oui/non
*, /, % ou mod multiplication et division. Les nombres entiers se divisent en entier : 7 / 2 donne 3, 7 / 2.0 donne 3,5.
+, -, & addition et soustraction, y compris avec des durées et des instants : Now - StartTime donne une durée. & concatène des textes.
= ou ==, <> ou !=, <, >, <=, >= comparaison
and ou && et
or ou || ou
condition ? valeur1 : valeur2 condition, voir ci-dessous

Les parenthèses ( ) modifient l’ordre.

Si & concatène un état, une durée ou un instant avec du texte, la valeur apparaît non traduite : les états en anglais, les durées avec des fractions de seconde, les instants en UTC. Mettez donc en forme vous-même, par exemple "Attente la plus longue : " & Conversations.Max(QueuedTimeSpan).ToString("mm\:ss").

Requêtes sur les listes

Chaque liste — conversations, agents, compétences… — connaît ces requêtes :

Requête fournit pour une liste vide Exemple
Count() le nombre 0 Agents.Count()
Count(condition) le nombre d’entrées pour lesquelles la condition est vraie 0 Conversations.Count(State = "Waiting")
Where(condition) les entrées pour lesquelles la condition est vraie vide InboundCalls.Where(SkillName = "Support").Count()
First(), First(condition) la première entrée (correspondante) vide Agents.First(IsLogin).Name
Min(champ), Max(champ) la plus petite ou la plus grande valeur 0 ou 00:00:00 Conversations.Max(QueuedTimeSpan)
Sum(champ) la somme 0 ou 00:00:00 ACDs.Sum(WaitingCalls)
Average(champ) la moyenne 0 ou 00:00:00 Conversations.Average(QueuedTimeSpan)
  • Entre les parenthèses s’appliquent les champs de chaque entrée : dans Agents.Count(IsLogin), IsLogin est le champ de chaque agent. Vous désignez l’entrée elle-même par it.
  • Les requêtes peuvent être enchaînées : Conversations.Where(ConversationType = "InboundCall").Max(QueuedTimeSpan).
  • Si la condition ne peut pas être évaluée pour une entrée — par exemple Skill.Name pour une conversation sans compétence —, l’entrée est considérée comme non correspondante.
  • Vous vérifiez s’il existe au moins une entrée avec Conversations.Count(State = "Waiting") > 0.

Conditions

iif(condition, valeur1, valeur2) et condition ? valeur1 : valeur2 fournissent valeur1 si la condition est vraie, sinon valeur2. Les deux valeurs doivent être du même type :

iif(Wrapup, WrapupTimeSpan, TimeSpan.Zero)
Agents.Count(IsLogin) = 0 ? "personne" : "occupé"

Row et it

Dans les colonnes de tableau, les formules de ligne et les séries de diagramme, la ligne en cours est disponible sous Row. Vous pouvez aussi nommer ses champs sans Row : dans un tableau d’agents, Name et Row.Name sont identiques.

À l’intérieur d’une requête sur une liste, it désigne l’entrée de la liste ; la ligne reste accessible via Row. Dans un tableau de compétences, chaque ligne compte ainsi ses propres conversations en attente :

Conversations.Count(Skill.Id = Row.Id and State = "Waiting")

Si un champ de la ligne porte le même nom qu’une liste — les agents ont par exemple les champs Skills et Languages —, le nom seul désigne la liste. Vous atteignez le champ avec Row.Skills ou, dans une requête, avec it.Skills.

Heure et fuseaux horaires

  • Now et tous les instants fournis par le serveur — StartTime, LoginTime, RaiseTime — sont en UTC.
  • Les durées comme Now - StartTime ou QueuedTimeSpan n’en dépendent pas.
  • Une étiquette dont la formule fournit un instant l’affiche dans l’heure locale de l’ordinateur. Dans les tableaux et dans les textes que vous composez vous-même, convertissez : StartTime.ToLocalTime(), Now.ToLocalTime().ToString("HH:mm").

Messages d’erreur

Pendant la saisie, le concepteur vérifie chaque formule ; si elle contient une erreur, le champ change de couleur et le message s’affiche en dessous, souvent avec la position « (à l’indice n) ». Les plus fréquents :

Message Cause
Identifiant inconnu '…' Le nom est mal orthographié, ou la liste n’existe pas.
La propriété ou le champ "…" n'existe pas dans le type "… Le champ n’existe pas pour cette entrée, voir Données pour les formules.
Opérateur '…' incompatible avec les types d'opérandes '…' et '…' Les valeurs ne vont pas ensemble, par exemple un nombre et une durée.
Expression de type '…' attendue Le résultat n’a pas le bon type — une jauge ne reçoit pas de nombre, une formule de ligne pas de oui/non.
Invocation ambiguë de la méthode '…' dans le type '…' Les indications correspondent à plusieurs variantes d’une fonction.
Erreur de syntaxe par exemple un | isolé ou des guillemets typographiques
Chaîne littérale non terminée Il manque un ".
Le caractère littéral doit contenir exactement un caractère Un texte figure entre guillemets simples au lieu de guillemets doubles.
Expression attendue La formule est vide, ou il manque quelque chose après un opérateur.

Une étiquette dont la formule est erronée affiche la formule elle-même sur le wallboard.

Si une erreur ne survient qu’au moment du calcul — par exemple First().Name sur une liste vide —, l’élément affiche une valeur vide : 0, un texte vide, 00:00:00 ou « Non ».

Différences avec les indicateurs de performance

Wallboard Indicateur de performance
calculé dans le programme Wallboard, chaque seconde sur le serveur
Filtres les filtres de l’élément d’affichage aucun
Agents tous les agents configurés qui correspondent au filtre — Agents.Count(IsLogin) compte les agents connectés uniquement les agents connectés
ACDs avec des chiffres clés comme Open et WaitingCalls uniquement les paramètres des règles de distribution
Alarms les alarmes actives vide
Configuration, TimeStamps, ConversationStates, ConversationTypes, Bins disponibles non disponibles

    ↑ ↓ sélectionner · Entrée ouvrir · Échap fermer