https://d226lax1qjow5r.cloudfront.net/blog/blogposts/serverless-contact-centre-with-azure-functions/serverless-contact-center.png

Centre de contact sans serveur avec Azure Functions

Publié le February 11, 2022

Temps de lecture : 12 minutes

Je serais surpris qu'il n'y ait aucune entreprise, de la plus petite startup à la plus grande méga-société, qui ne souhaite pas offrir à ses clients un excellent service à la clientèle. Une partie de ce service pourrait consister à offrir un centre de contact dynamique et abordable, capable de proposer des options en libre-service ou de diriger les appels vers l'agent ou le service approprié. L'API Voice de Vonage de Vonage et ses NCCO sont un moyen facile de créer des applications vocales de haute qualité qui peuvent contrôler le flux des appels entrants et sortants, créer des conférences téléphoniques, enregistrer et stocker des appels, lire des messages préenregistrés et envoyer des messages en synthèse vocale dans 40 langues différentes.

De nos jours, la plupart des logiciels sont, d'une manière ou d'une autre, hébergés entièrement ou partiellement dans le nuage et ce n'est un secret pour personne qu'en l'absence de réglementation, les coûts d'hébergement dans le nuage peuvent augmenter rapidement au fil du temps. Ayant travaillé avec Azure pendant de nombreuses années, j'aime découvrir les différents services qu'il propose. Mon préféré depuis un certain temps est Azure Functions, l'offre sans serveur de Microsoft. Ils offrent toute la sécurité, la fiabilité et l'évolutivité que l'on est en droit d'attendre d'un fournisseur de cloud à un coût très raisonnable. En fait, lorsque vous utilisez le plan de consommation, les 1 000 000 premières exécutions sont gratuites.

Armé de ces deux éléments technologiques, j'ai pensé que ce serait une bonne idée de voir ce qu'il faudrait faire pour créer un centre de contact sans serveur à faible coût qui pourrait être étendu ou personnalisé pour répondre à de nombreuses exigences différentes.

Conditions préalables

  • Visual Studio 2022 Preview ou Visual Studio Code

  • CLI Vonage

  • Fonctions Azure Outils de base (La V4 est utilisée dans cette démo)

  • Un compte Un Account Azure (Il peut être configuré gratuitement et les fonctions Azure sont gratuites pour les premiers 1M d'appels)

  • CLI Azure

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.

Le plan

Pour notre centre de contact, nous devons mettre en place plusieurs choses. Tout d'abord, une application et un numéro Vonage, le numéro sera lié à l'Application et c'est l'Application qui appellera notre Fonction Azure. La fonction renverra alors les Nexmo Call Control Objects (NCCO) sous forme de JSON, qui décriront le flux de l'appel entrant.

Lors de la réception d'un appel à notre numéro, nous utiliserons la synthèse vocale pour diffuser un message et donner à l'appelant quelques options. Je ne vais créer qu'un prototype de base, mais il y a tellement d'actions différentes à réaliser. actions différentes que nous pouvons utiliser avec NCCO, les possibilités sont infinies !

Ressources Azure

Avant de pouvoir configurer l'Application Vonage, nous aurons besoin de connaître le nom d'hôte de nos fonctions afin de pouvoir saisir les URL de réponse et d'événement lors de sa création. Pour ce faire, nous devons d'abord créer une Azure Function App. Je trouve que la façon la plus simple de le faire est d'utiliser la Azure CLImais la création d'une Function App via le portail Azure fonctionne tout aussi bien. Je viens de créer un simple script bash qui fait tout cela pour moi en une seule fois, il pourrait être tapé manuellement ou converti en script PowerShell.

#!/bin/bash # You must be logged into your Azure Account az login # Function app and storage account names must be unique. storageName=contactcentrestorage$RANDOM functionAppName=contactcentre$RANDOM region=westeurope # Create a resource group. az group create --name ContactCentreResourceGroup --location $region # Create an Azure storage account in the resource group. az storage account create \ --name $storageName \ --location $region \ --resource-group ContactCentreResourceGroup \ --sku Standard_LRS # Create a serverless function app in the resource group. az functionapp create \ --name $functionAppName \ --storage-account $storageName \ --consumption-plan-location $region \ --resource-group ContactCentreResourceGroup \ --functions-version 4

Une fois que votre application de fonction a été créée, nous devons récupérer le nom d'hôte. Nous pouvons récupérer le nom d'hôte avec la commande Azure CLI ci-dessous, en remplaçant "webapp-name" par le nom de la fonction que nous venons de créer.

az functionapp config hostname list --resource-group ContactCentreResourceGroup --webapp-name contactcentre123 -o tsv --query [].name

Notez le nom d'hôte pour la création de l'Applications Vonage.

Applications Vonage

Une fois que vous vous êtes inscrit pour un compte Vonage gratuit, vous pourrez récupérer votre clé API et votre secret API à partir du tableau de bord de Vonage pour configurer le CLI de Vonage

vonage config:set -h --apiKey= --apiSecret=

Avec votre nom d'hôte Azure Function à portée de main, nous pouvons maintenant créer l'Applications Vonage. Sélectionnez oui lorsqu'on vous demande de créer des Webhooks et entrez ensuite comme je l'ai fait ci-dessous, n'oubliez pas de remplacer `contactcentre123.azurewebsites.net` par votre propre nom d'hôte.

vonage apps:create ✔ Application Name … contact centre ✔ Select App Capabilities › Voice ✔ Create voice webhooks? … yes ✔ Answer Webhook - URL … https://contactcentre123.azurewebsites.net/api/answer ✔ Answer Webhook - Method › POST ✔ Event Webhook - URL ... https://contactcentre123.azurewebsites.net/api/event ✔ Event Webhook - Method » POST

Nous pouvons maintenant rechercher un numéro à acheter et à lier à notre Applications. Nous rechercherons un numéro de téléphone mobile dans le pays où vous résidez. Nos pages d'aide contiennent des listes quels produits sont pris en charge dans quels pays et nous utilisons les codes codes ISO 3166-1 alpha-2 pour notre pays dans notre recherche. Je suis basé au Royaume-Uni et j'utilise donc "GB" lorsque je recherche des Numbers.

vonage numbers:search GB --features=VOICE --type=mobile-lvn Country Number Type Cost Features ─────── ──────────── ────────── ──── ───────── GB 447418368151 mobile-lvn 1.25 VOICE,SMS GB 447418368155 mobile-lvn 1.25 VOICE,SMS GB 447418368156 mobile-lvn 1.25 VOICE,SMS GB 447418368157 mobile-lvn 1.25 VOICE,SMS GB 447418368158 mobile-lvn 1.25 VOICE,SMS

Lorsque nous trouvons un numéro qui nous convient, nous pouvons l'acheter et le lier à l'Application Vonage que nous avons créée précédemment.

vonage numbers:buy 447418368151 GB
vonage apps:link 3ff94f7c-fb86-4afd-b338-fe39707b5ef5 --number=447418367999

Création du projet

Bon, commençons à coder ! Pour commencer, nous allons créer un nouveau projet Azure Functions en utilisant le runtime dotnet.

func init ContactCentre —dotnet --worker-runtime dotnet

Cela créera un projet Function App dans le dossier ContactCentre. Ensuite, nous devons d'abord ajouter une référence au paquetage Nuget de Vonage, puis nous allons créer trois fonctions qui ont toutes des déclencheurs HTTP ; l'une est le point de terminaison de la réponse, la deuxième est le point de terminaison de l'événement et la dernière est utilisée pour effectuer une action basée sur l'option fournie par l'appelant. Accédez au dossier du projet ContactCentre et exécutez les commandes ci-dessous.

dotnet add package vonage func new --name Answer --template "HTTP trigger" --authlevel "anonymous" func new --name Event --template "HTTP trigger" --authlevel "anonymous" func new --name Menu --template "HTTP trigger" --authlevel "anonymous"

Réponse Fonction

Lorsque quelqu'un téléphone à notre centre de contact, la fonction de réponse est toujours le premier point d'aboutissement qui sera atteint. Nous allons renvoyer un objet NCCO décrivant les premières étapes de notre processus. Nous allons créer un objet action de conversation qui accueille notre appelant et décrit ce qu'il peut faire en utilisant l'anglais britannique et le style de voix 2 (je trouve que c'est le plus agréable) mais il y a beaucoup de styles et de langues de styles et de langues. L'action suivante est la MultiInputAction qui recueille les données numériques ou vocales de la personne que vous appelez et les transmet à l'EventUrl que nous fournissons, dans ce cas, la fonction Menu.

Vous trouverez ci-dessous le code de la fonction Answer.

using Vonage.Voice.Nccos;


public static class Answer
{
    [FunctionName("Answer")]
    public static IActionResult Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, ILogger log)
    {
        log.LogInformation("Phone call answered");

        var ncco = new Ncco(new NccoAction[] {
            new TalkAction
            {
                Text = "Welcome to the Contact Centre. Press 1 for order information. Press 2 to speak to an operator.",
                Language = "en-GB",
                Style = 2
            },
            new MultiInputAction
            {
                Dtmf = new DtmfSettings{MaxDigits = 1},
                EventUrl = new []{ "https://contactcentre123.azurewebsites.net/api/menu" }
            }
        });

        return new OkObjectResult(ncco);
    }
}

Nous avons spécifié l'URL de la fonction de menu dans la propriété EventUrl de NCCO. L'action d'entrée POST les données relatives à l'entrée de l'appelant en tant que JSON à cette URL - voir la référence webhook pour une description complète des propriétés. Pour cet exercice, nous nous intéressons uniquement aux chiffres sur lesquels l'appelant a appuyé. La fonction de menu ci-dessous récupère les chiffres comme `selectedOption` et nous prenons ensuite des mesures en fonction de cela.

Voici le code de la fonction Menu

using Vonage.Voice.Nccos;
using Vonage.Voice.Nccos.Endpoints;


public static class Menu
{
    [FunctionName("Menu")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        log.LogInformation("Menu event triggered");

        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);

        var ncco = new Ncco();

        var selectedOption = data.dtmf.digits;
        switch (selectedOption.ToString())
        {
            case "1":
                // LOOK UP CUSTOMER SPECIFIC DATA
                ncco.Actions.Add(
                    new TalkAction
                    {
                        Text = "Your order is on it's way.",
                        Language = "en-GB",
                        Style = 2
                    });
                break;
            case "2":
                // CONNECT TO TELEPHONE AGENT
                ncco.Actions.Add(
                    new TalkAction
                    {
                        Text = "Please wait while we connect you to the next available operator.",
                        Language = "en-GB",
                        Style = 2
                    });

                ncco.Actions.Add(
                    new ConnectAction
                    {
                        Endpoint = new Endpoint[]
                        {
                            new PhoneEndpoint
                            {
                                Number = "44123456789"
                            }
                        }
                    });
                break;
        }

        return new OkObjectResult(ncco);
    }
}

Publier l'application fonctionnelle

Pour que tout fonctionne, la dernière chose à faire est de placer notre code sur Azure. Je trouve que la façon la plus rapide de le faire est d'utiliser la commande Publier dans Visual Studio. Après avoir chargé le projet dans Visual Studio, il suffit de faire un clic droit sur le nom du projet et de sélectionner "Publier" dans le menu déroulant. L'écran ci-dessous s'affiche. Sélectionnez la cible comme Azure.

Publishing to Azure

L'application de fonction que nous avons créée précédemment a utilisé les valeurs par défaut pour qu'elle soit une Azure Function App (Windows).

Choose Function Type

Localiser l'application de fonction du centre de contact et sélectionner terminer.

Select Contact Centre Function App

Vous aurez maintenant un profil de publication configuré et pourrez télécharger l'application sur Azure en cliquant simplement sur publier. Une fois que cela a réussi, la dernière chose à faire est d'appeler le numéro de téléphone de votre application et de suivre les instructions !

Nous avons maintenant un centre de contact ?

Bien qu'il ne s'agisse pas encore d'un centre de contact entièrement fonctionnel, nous en avons maintenant la base. Il y a quelques éléments qui nous viennent à l'esprit et que nous pourrions ajouter pour le rendre plus fonctionnel.

Lorsqu'un appelant appuie sur le 1 pour obtenir des informations sur sa commande, nous pourrions utiliser le numéro de téléphone d'où il appelle pour récupérer ses dernières commandes et informations sur le client et lui demander une sorte de données pour confirmer son identité avant de lui donner une mise à jour de sa commande. Ou au lieu de simplement connecter l'appel à un numéro de téléphone ordinaire, nous pourrions le transmettre à une ligne SIP, à un point de terminaison WebSocket ou à une extension Vonage Business Cloud. Jetez un coup d'œil à la Référence NCCO pour plus d'informations à ce sujet.

Nous disposons également d'une Action de paiement qui permet à l'appelant de payer une facture en suspens ou de commander des produits supplémentaires pendant l'appel.

En partant des bases que j'ai abordées ici, il est très facile de voir comment le fait de disposer d'un centre de contact entièrement fonctionnel et personnalisé, hébergé à un prix raisonnable dans l'informatique dématérialisée, est à la portée de toutes les entreprises, grandes et petites.

Références

Partager:

https://a.storyblok.com/f/270183/400x339/e206caec3f/matt-hunt.png
Matt HuntAncien membre de l'équipe Vonage