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

Serverloses Kontaktzentrum mit Azure-Funktionen

Zuletzt aktualisiert am February 11, 2022

Lesedauer: 11 Minuten

Es würde mich überraschen, wenn es kein Unternehmen gäbe - vom kleinsten Startup bis zum größten Megakonzern -, das seinen Kunden keinen hervorragenden Kundenservice bieten möchte. Ein Teil dieses Services könnte darin bestehen, ein dynamisches und erschwingliches Kontaktzentrum anzubieten, das Selbstbedienungsoptionen bietet oder Anrufe an den richtigen Agenten oder die richtige Abteilung weiterleitet. Die Voice API von Vonage und die NCCOs von Vonage bieten eine einfache Möglichkeit, hochwertige Voice-Applikationen zu erstellen, die den Fluss ein- und ausgehender Anrufe steuern, Telefonkonferenzen einrichten, Anrufe aufzeichnen und speichern, aufgezeichnete Nachrichten abspielen und Text-to-Speech-Nachrichten in 40 verschiedenen Sprachen versenden können.

Heutzutage wird die meiste Software auf die eine oder andere Weise ganz oder teilweise in der Cloud gehostet, und es ist kein Geheimnis, dass die Kosten für Cloud-Hosting ohne Regulierung mit der Zeit schnell ansteigen können. Da ich seit vielen Jahren mit Azure arbeite, lerne ich gerne die verschiedenen Dienste kennen, die es zu bieten hat. Mein Favorit ist seit einiger Zeit Azure Functions, Microsofts serverloses Angebot. Sie bieten all die Sicherheit, Zuverlässigkeit und Skalierbarkeit, die man von einem Cloud-Anbieter erwarten kann, und das zu einem sehr günstigen Preis. Wenn Sie den Consumption-Plan nutzen, sind die ersten 1.000.000 Ausführungen sogar kostenlos.

Ausgestattet mit diesen beiden Technologien dachte ich, dass es eine gute Idee wäre, herauszufinden, was nötig wäre, um ein kostengünstiges serverloses Kontaktzentrum zu schaffen, das erweitert oder an viele verschiedene Anforderungen angepasst werden kann.

Voraussetzungen

  • Visual Studio 2022 Vorschau oder Visual Studio Code

  • Vonage CLI

  • Azure-Funktionen Kern-Tools (V4 wird in dieser Demo verwendet)

  • Ein Azure Account (Dieser kann kostenlos eingerichtet werden und Azure-Funktionen sind für die ersten 1 Mio. Aufrufe kostenlos)

  • Azure CLI

Vonage API-Konto

Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.

In diesem Lernprogramm wird auch eine virtuelle Telefonnummer verwendet. Um eine zu erwerben, gehen Sie zu Rufnummern > Rufnummern kaufen und suchen Sie nach einer Nummer, die Ihren Anforderungen entspricht.

Der Plan

Für unser Kontaktzentrum müssen wir ein paar Dinge einrichten. Zunächst eine Vonage-Anwendung und eine Nummer. Die Nummer wird mit der Anwendung verknüpft und die Anwendung ruft unsere Azure-Funktion auf. Die Funktion wird dann Nexmo Call Control Objects (NCCO) als JSON zurückgeben, die den Ablauf des eingehenden Anrufs beschreiben.

Wenn ein Anruf auf unserer Nummer eingeht, werden wir Text-to-Speech verwenden, um eine Nachricht abzuspielen und dem Anrufer eine Reihe von Optionen anzubieten. Ich werde nur einen einfachen funktionierenden Prototyp erstellen, aber es gibt so viele verschiedene Aktionen die wir mit NCCO verwenden können, die Möglichkeiten sind endlos!

Azure-Ressourcen

Bevor wir die Vonage-Anwendung einrichten können, müssen wir den Hostnamen für unsere Funktionen kennen, damit wir die Antwort- und Ereignis-URLs während ihrer Erstellung eingeben können. Um diese zu erhalten, müssen wir zunächst eine Azure Function App erstellen. Ich finde, dass dies am einfachsten mit der Azure CLIzu erstellen, aber die Erstellung einer Function App über das Azure-Portal funktioniert genauso gut. Ich habe gerade ein einfaches Bash-Skript erstellt, das all dies für mich in einem Rutsch erledigt. Dieses könnte manuell eingegeben oder in ein PowerShell-Skript umgewandelt werden.

#!/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

Sobald Ihre Funktions-App erstellt wurde, müssen wir den Hostnamen abrufen. Wir können den Hostnamen mit dem folgenden Azure CLI-Befehl abrufen, indem wir den "webapp-name" durch den Namen der gerade erstellten Funktion ersetzen.

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

Notieren Sie sich den Hostnamen, wenn wir die Vonage-Anwendung erstellen.

Vonage-Anwendung

Sobald Sie sich für einen kostenlosen Vonage Account registriert haben, können Sie Ihren API-Schlüssel und Ihr API-Geheimnis über das Vonage Dashboard zur Konfiguration der Vonage CLI

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

Mit dem Hostnamen Ihrer Azure-Funktion können wir nun die Vonage-Anwendung erstellen. Wählen Sie "Ja", wenn Sie gefragt werden, ob Sie Webhooks erstellen möchten, und geben Sie dann wie unten beschrieben ein, wobei Sie "contactcentre123.azurewebsites.net" durch Ihren eigenen Hostnamen ersetzen müssen.

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

Jetzt können wir nach einer Nummer suchen, die wir kaufen und mit unserer Anwendung verknüpfen können. Wir suchen nach einer Mobilfunknummer in dem Land, in dem Sie wohnen. Auf unseren Hilfeseiten finden Sie Listen mit welche Produkte in welchen Ländern unterstützt werden und wir verwenden die ISO 3166-1 Alpha-2-Codes für unser Land in unserer Suche. Da ich im Vereinigten Königreich wohne, verwende ich "GB", wenn ich nach Numbers suche.

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

Wenn wir eine Nummer gefunden haben, die uns gefällt, können wir sie kaufen und mit der Vonage-Anwendung verknüpfen, die wir zuvor erstellt haben.

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

Das Projekt erstellen

Gut, fangen wir an zu kodieren! Zu Beginn erstellen wir ein neues Azure Functions-Projekt mit der Dotnet-Laufzeitumgebung.

func init ContactCentre —dotnet --worker-runtime dotnet

Dadurch wird ein Function App-Projekt im Ordner ContactCentre erstellt. Als Nächstes müssen wir zunächst einen Verweis auf das Nuget-Paket von Vonage hinzufügen und dann drei Funktionen erstellen, die alle HTTP-Trigger haben; eine ist der Antwort-Endpunkt, die zweite ist der Ereignis-Endpunkt und die letzte wird verwendet, um eine Aktion basierend auf der vom Anrufer angegebenen Option durchzuführen. Wechseln Sie in den ContactCentre-Projektordner und führen Sie die folgenden Befehle aus.

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"

Antwort Funktion

Wenn jemand in unserem Kontaktzentrum anruft, ist die Antwortfunktion immer der erste Endpunkt, der aufgerufen wird. Wir werden ein NCCO-Objekt zurückgeben, das die ersten Schritte in unserem Prozess beschreibt. Wir erstellen eine Gesprächs-Aktion die den Anrufer begrüßt und beschreibt, was er tun kann. Dabei verwenden wir UK-Englisch und den Voice-Stil 2 (den ich am angenehmsten finde), aber es gibt eine Vielzahl von Stile und Sprachen zur Auswahl. Die nächste Aktion ist die MultiInputAction die Ziffern oder Spracheingaben des Anrufers sammelt und diese Eingaben an die von uns bereitgestellte EventUrl weiterleitet, in diesem Fall die Menüfunktion.

Nachfolgend finden Sie den Code für die Antwortfunktion.

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);
    }
}

Menü Funktion

Wir haben die URL der Menüfunktion in NCCOs EventUrl-Eigenschaft angegeben. Die Eingabeaktion POST Daten, die sich auf die Eingabe des Aufrufers beziehen, als JSON an diese URL - siehe die Webhook-Referenz für eine vollständige Beschreibung der Eigenschaften. Für diese Übung sind wir nur an den Ziffern interessiert, die der Anrufer gedrückt hat. Die unten stehende Menüfunktion ruft die Ziffern als `selectedOption` ab und führt dann eine darauf basierende Aktion aus.

Nachfolgend finden Sie den Code für die Menüfunktion

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);
    }
}

Veröffentlichen Sie die Funktions-App

Um alles zum Laufen zu bringen, müssen wir als Letztes unseren Code auf Azure veröffentlichen. Ich finde, dass dies am schnellsten mit dem Befehl "Veröffentlichen" in Visual Studio möglich ist. Nachdem wir das Projekt in Visual Studio geladen haben, müssen wir nur noch mit der rechten Maustaste auf den Projektnamen klicken und "Publish" aus dem Dropdown-Menü auswählen. Daraufhin wird der unten stehende Bildschirm angezeigt. Wählen Sie das Ziel als Azure.

Publishing to Azure

Die Funktions-App, die wir zuvor erstellt haben, verwendet die Standardeinstellungen, damit sie eine Azure Function App (Windows) ist.

Choose Function Type

Positionieren Sie die Contact Center Function App und wählen Sie Fertigstellen.

Select Contact Centre Function App

Sie haben nun ein Veröffentlichungsprofil eingerichtet und können die Anwendung auf Azure hochladen, indem Sie einfach auf veröffentlichen klicken. Wenn dies gelungen ist, müssen Sie nur noch die Telefonnummer Ihrer Anwendung anrufen und den Anweisungen folgen!

Haben wir jetzt ein Kontaktzentrum?

Es handelt sich zwar noch nicht um ein voll funktionsfähiges Kontaktzentrum, aber wir haben jetzt die Grundlage dafür. Es fallen uns einige Dinge ein, die wir hinzufügen könnten, um die Funktionalität zu verbessern.

Wenn ein Anrufer die 1 drückt, um Bestellinformationen zu erhalten, könnten wir die Telefonnummer, von der aus er anruft, verwenden, um seine letzten Bestell- und Kundeninformationen abzurufen und eine Art von Daten zur Bestätigung seiner Identität abzufragen, bevor wir ihm ein Bestell-Update geben. Anstatt den Anruf an eine normale Telefonnummer weiterzuleiten, können wir ihn auch an eine SIP-Leitung, einen WebSocket-Endpunkt oder eine Vonage Business Cloud-Erweiterung weiterleiten. Werfen Sie einen Blick auf die NCCO-Referenz für weitere Informationen zu diesen Themen.

Wir haben auch eine Bezahl-Aktion in der Entwicklervorschau, die es dem Anrufer ermöglicht, eine ausstehende Rechnung zu bezahlen oder vielleicht zusätzliche Produkte direkt während des Anrufs zu bestellen.

Ausgehend von den Grundlagen, die ich hier behandelt habe, ist es sehr einfach zu erkennen, dass ein voll funktionsfähiges, individuelles Kontaktzentrum, das zu einem vernünftigen Preis in der Cloud gehostet wird, für jedes große und kleine Unternehmen erreichbar ist.

Referenzen

Teilen Sie:

https://a.storyblok.com/f/270183/400x339/e206caec3f/matt-hunt.png
Matt HuntEhemaliges Vonage-Team-Mitglied