
Centre de contact sans serveur avec Azure Functions
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
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)
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.
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 [].nameNotez 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
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.
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.
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 dotnetCela 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.
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);
}
} Menu Fonction
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.

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).

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

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
Le code de ce tutoriel est disponible sur GitHub
Plus d'informations sur NCCO de Vonage de Vonage Voice API de Vonage
Essayer Azure Functions gratuitement si ce n'est pas déjà fait
