Fermer

octobre 29, 2018

Créer un tableau de bord d'agent de base avec des métriques de file d'attente


Dans un précédent article de blog nous avons décrit les étapes nécessaires pour héberger un site Web statique dans AWS, plus précisément comment déployer une console d'agent personnalisé pouvant charger des attributs de contact. Aujourd'hui, nous allons voir comment nous pouvons utiliser l'API Connect pour améliorer cette console d'agent personnalisé avec les données en direct du centre d'appels. Dans ce cas d'utilisation, nous allons offrir aux agents un instantané rapide du nombre d'appels en attente et du nombre d'autres agents disponibles pour vous aider dans ces appels. Cependant, les mêmes étapes que celles décrites ci-dessous peuvent être utilisées pour créer un panneau mural autonome ne proposant pas de contrôle d'appel.

Notre preuve de concept enregistrera le nombre d'appels en file d'attente, le temps d'attente le plus long et les détails de l'agent pour toutes les files d'attente. Dans notre environnement, affichez les données sur la console de l'agent toutes les 5 secondes. Pour ce faire, nous utiliserons la nouvelle opération GetCurrentMetricData récemment publiée, que Peter Miller a expliquée plus en détail dans cet article de blog . La console finale ressemblera à cette capture d'écran.

Nous allons déployer et configurer les ressources suivantes:

  1. Une fonction Lambda permettant d'interroger l'API pour obtenir des métriques
  2. Une API Passerelle permettant un accès externe à la fonction Lambda
  3. Console d’agent améliorée demandant périodiquement des données à notre passerelle d’API

Veuillez noter que, même si notre exemple peut fonctionner pour un petit centre d’appel, il signifie que la console de chaque agent Connecter l'API. En production, il est recommandé de déployer une fonction Lambda qui met à jour périodiquement une table DynamoDB et éventuellement même agrège les données en fonction du profil de routage, afin que chaque agent puisse afficher uniquement les données pertinentes pour leurs files d'attente. Veuillez également noter que nous ne couvrirons pas les meilleures pratiques en matière de sécurité. En production, votre passerelle API doit être sécurisée pour empêcher tout accès indésirable aux statistiques de votre centre d'appels.

Configuration de Lambda

Pour créer une nouvelle fonction dans votre console AWS et nommez-le de manière appropriée. Nous allons utiliser des fonctions asynchrones pour extraire des données, sélectionnez donc Node.js 8.10 comme heure d'exécution et sélectionnez un rôle approprié ou créez-en un si nécessaire.

The Lambda La fonction que nous allons créer sera invoquée par la passerelle d’API. Elle devrait au moins disposer des autorisations «connect: GetCurrentMetricData» pour l’instance de Connect que vous souhaitez utiliser. Pour plus de détails sur la configuration du rôle de cette fonction Lambda, consultez l’exemple au bas de cette page .
Dans mon environnement, j’utilisais la politique très permissive suivante pour accorder à Lambda l’accès à tous mes Connecter les instances.

 {
       "Version": "2012-10-17",
       "Déclaration": [
         {
           "Sid": "VisualEditor0",
           "Effect": "Allow",
           "Action": [
             "connect:GetCurrentMetricData",
             "logs:CreateLogStream",
             "logs:CreateLogGroup",
             "logs:PutLogEvents"
           ],
           "Ressource": "*"
         }
       ]
     }

Une fois tous les paramètres de base configurés, créez la fonction et ajoutez deux variables d’environnement qui contiendront votre ID de connexion Connect et votre ID de file d’attente. Voici comment cela se présentait dans mon environnement.

L'instanceID n'acceptera qu'un seul ID, qui peut être trouvé à la fin de votre ARN d'instance Amazon Connect, tandis que le queueID acceptez autant de files d'attente que vous souhaitez faire passer, à condition qu'elles soient séparées par une virgule. Vous pouvez trouver l'ID de la file d'attente en consultant l'URL de chaque file d'attente dans Amazon Connect. Notez que notre code agrégera toutes les files d'attente et offrira un total. Si vous souhaitez renvoyer les données groupées par file d'attente, utilisez le paramètre Groupings lorsque vous appelez l'API Connect.

Vous pouvez laisser tous les autres paramètres par défaut et commencer à travailler.

Remarque: à partir du 24 octobre, le package du kit SDK AWS disponible par défaut dans Lambda ne contient pas encore la méthode getCurrentMetricData. Jusqu'à ce que cela soit résolu, vous rencontrerez probablement une erreur «TypeError: connect.getCurrentMetricData n'est pas une fonction» si vous utilisez le standard «require (‘ aws-sdk ’)». Pour contourner cette limitation temporaire, vous pouvez créer votre propre package AWS SDK en utilisant ces instructions .

Après avoir récupéré le package AWS SDK, vous pouvez simplement utiliser le code ci-dessous dans un fichier index.js et télécharger un fichier. Fichier zip de l'ensemble du déploiement sur Lambda. Pour plus de détails sur la façon de télécharger un package de déploiement, consultez la documentation officielle.

 const AWS = require ('./ aws-sdk');
AWS.config.update ({région: 'us-east-1'});
    

fonction getCurrentData () {
   const params = {
          CurrentMetrics: [
            {
              Name: 'AGENTS_AVAILABLE',
              Unit: 'COUNT'
            },
            {
              Name: 'AGENTS_ONLINE',
              Unit: 'COUNT'
            },
              {
              Name: 'CONTACTS_IN_QUEUE',
              Unit: 'COUNT'
            },
              {
              Name: 'OLDEST_CONTACT_AGE',
              Unit: 'SECONDS'
            }
          ],
          Filtres: {
            Chaînes: [
              'VOICE'
            ],
            Files d'attente: process.env ['queueID'] .split (','),
          },
          InstanceId: process.env ['instanceID']
        };
    const connect = new AWS.Connect ();
    
    retourne une nouvelle promesse (fonction (résoudre, rejeter) {
    connect.getCurrentMetricData (paramètres, fonction (err, données) {
        if (err) retourne rejeter (err);
      résoudre (données);
    });
  });
    
}

exports.handler = async (événement, contexte, rappel) => {
    laissez responseBody = {};
        essayer{
            console.log ('Exécution de la fonction getCurrentMetric');
            
            let dataTransit = getCurrentData ();
            laisser data = attendre dataTransit;
            console.log (data.MetricResults [0]);
            data.MetricResults [0] .Collections.forEach (fonction (élément) {
                  const clé = element.Metric.Name;
                  const valeur = element.Value;
                  responseBody [key] = valeur;
                    });
              console.log ('Génération de la réponse à envoyer')
              console.log (responseBody);
              
              laissez responseCode = 200;
              laisser réponse = {
                  statusCode: code de réponse,
                  en-têtes: {"Accès-Contrôle-Autoriser-Origine": "*"},
                  body: JSON.stringify (responseBody)
              };
            rappel (null, réponse);
        }
          catch (error) {
            console.log (erreur);
            laissez responseCode = 500;
            laisser réponse = {
                  statusCode: code de réponse,
                  en-têtes: {"Accès-Contrôle-Autoriser-Origine": "*"},
                  body: JSON.stringify (erreur)
              };
            rappel (null, réponse);
          }
}

Quelques points à noter à propos de cette fonction: Nous ne demandons que 4 valeurs à l'API Connect: agents disponibles, agents en ligne, contacts en file d'attente et âge du contact le plus ancien. Les données renvoyées seront un total pour toutes les files d'attente, non groupées et la réponse est configurée pour que la passerelle API puisse les analyser et que notre site Web puisse charger les données. Si nous n’ajoutons pas le contrôle d’accès-Autoriser-l’origine à notre en-tête, nous rencontrerons un problème CORS (demande d’origine croisée bloquée: la règle de même origine interdit la lecture de la ressource distante à…). Remarque: pour le moment, l'en-tête est configuré pour accepter les demandes de tous les sites Web. Vous devez le modifier pour limiter l'accès à votre domaine uniquement.

Une fois la fonction téléchargée, nous sommes prêts à configurer la passerelle API.

API Gateway

Accédez à la section API Gateway de votre console AWS et créez une nouvelle API. Attribuez-lui un nom approprié, tel que connectMetricsAPI, puis cliquez sur Enregistrer, puis ajoutez une nouvelle méthode GET.

Sous type d'intégration, sélectionnez Fonction Lambda et cochez la case Intégration du proxy Lambda. Cette option facilitera la configuration de l'intégration entre Lambda et API Gateway et nous permettra d'extraire la réponse de l'API sans trop de modifications de configuration. Pour une explication complète des différences entre l'utilisation d'une intégration Lambda normale et d'un proxy Lambda, veuillez consulter cet article .

Entrez le nom de votre correspondant précédent. créé Lambda et cliquez sur Enregistrer. La passerelle API ajoutera la stratégie nécessaire à votre fonction afin qu'elle puisse être invoquée.

Une fois enregistré, sélectionnez Activer CORS sous Actions et conservez tous les paramètres par défaut, à l'exception du contrôle d'accès, contrôle d'accès autorisé. Dans cette zone, ajoutez le domaine de votre console d'agent.

Enfin, déployez l'API à une nouvelle étape à partir du menu Actions. Vous pouvez nommer la scène tout ce qui a du sens pour votre environnement (par exemple, «UAT» ou «production» pour la version finale). Cela générera une URL d'invocation que vous pourrez utiliser pour tester la réponse de votre fonction Lambda. Vous devriez voir quelque chose comme le JSON ci-dessous.

À ce stade, nos services AWS sont configurés et nous pouvons examiner le nouveau code de la console de l'agent.

Custom Console d'agent

La console d'agent que nous déploierons utilisera l'API Streams pour servir le CCP aux agents pour les contrôles d'appel, mais extraira également les attributs et les métriques de contact. Nous allons réutiliser une grande partie du code de cet article de blog, mais j'ai ajouté un nouveau conteneur pour les métriques et apporté quelques modifications au script. Vous pouvez télécharger la version finale de la page à partir de ce dépôt github .

Si vous téléchargez le code et souhaitez le tester, veillez à mettre à jour ccpUrl et l'indicateur métrique dans le fichier script.js.

La principale différence par rapport à la console d'agent précédente est la fonction getCurrentMetrics qui effectue simplement un GET XMLHttpRequest sur notre passerelle API, analyse les données et appelle une fonction pour mettre à jour notre tableau HTML avec de nouveaux numéros.

J'ai également ajouté un petit fonction permettant de convertir les millisecondes en minutes et en secondes, car OLDEST_CONTACT_AGE ne renvoie pas de temporisateur correctement formaté.

Lors du test de cette console d'agent, gardez à l'esprit que la fonction getCurrentMetrics est définie pour s'exécuter toutes les 5 secondes, en fonction de l'emplacement où elle se trouve. Dans le cycle de traitement et lorsqu'un nouvel appel est entré dans le système, il se peut que les données soient retardées de 10 secondes maximum. Cela est particulièrement visible lorsqu'il n'y a qu'un seul appel en file d'attente, de sorte que l'âge du contact le plus ancien augmente avec l'attente d'un agent.

Lors du test, si vous n'avez qu'un appel en file d'attente, vous verrez également les métriques des contacts dans dans la file d'attente ou le contact le plus ancien va à 0 lorsque l'appel est offert à un agent. L’appel n’est quasiment plus en file d’attente jusqu’à ce que l’agent le refuse ou le manque, puis les métriques reviendront une fois de plus en attente.

Enfin, si vous voyez des nombres impairs pour les métriques, indiquez Assurez-vous de ne pas définir de chemin de capacité pour vos files d'attente ou une autre logique permettant d'acheminer les appelants dans des files d'attente pour lesquelles votre fonction Lambda ne renvoie pas de données. En utilisant GetCurrentMetricData sur l’API Connect, vous devez obtenir des chiffres qui correspondent assez bien aux résultats des rapports en temps réel disponibles. En cas de doute, vérifiez les rapports et comparez les chiffres avec les données de votre console d'agent.

Enfin, pour déployer réellement la console d'agent personnalisé, suivez les étapes décrites dans cet article de blog, créez un compartiment S3 et une distribution CloudFront. Une fois la page Web téléchargée dans S3 et la distribution CloudFront créée, vous devez être prêt à tester la nouvelle console de l'agent.

Pour obtenir de l'aide sur la personnalisation de votre console ou l'assistance pour la conception de votre flux d'appels, veuillez envoyer un courrier électronique à Craig Reishus . 19659038]! Function (f, b, e, v, n, t, s) {si (f.fbq) renvoie; n = f.fbq = fonction () {n.callMethod?
n.callMethod.apply (n, arguments): n.queue.push (arguments)}; if (! f._fbq) f._fbq = n;
n.push = n; n.loaded =! 0; n.version = '2.0'; n.queue = []; t = b.createElement (e); t.async =! 0;
t.src = v; s = b.getElementsByTagName (e) [0]; s.parentNode.insertBefore (t, s)} (fenêtre,
document, 'script', '// connect.facebook.net/en_US/fbevents.js');

fbq ('init', '911436665572720');
fbq ('track', "PageView");




Source link