
Azure Functionsによるサーバーレスコンタクトセンター
所要時間:5 分
小さな新興企業から大企業に至るまで、顧客に素晴らしいカスタマーサービスを提供したいと思わない企業が存在しないとしたら、私は驚きだ。そのサービスの一環として、セルフサービスのオプションを提供したり、適切なエージェントや部署に電話を誘導したりできる、ダイナミックで手頃な価格のコンタクトセンターを提供することができる。 VonageのVoice APIとそのNCCOは、インバウンドおよびアウトバウンドコールのフローを制御し、電話会議を作成し、通話を録音して保存し、録音済みメッセージを再生し、40の異なる言語で音声合成メッセージを送信することができる高品質の音声アプリケーションを構築する簡単な方法です。
最近では、ほとんどのソフトウェアが全面的または部分的にクラウドでホスティングされており、クラウド・ホスティングのコストは、規制がなければ時間の経過とともに急速に増大することは周知の事実である。長年Azureを使用してきた私は、Azureが提供するさまざまなサービスについて学ぶのが大好きだ。ここしばらくのお気に入りは、マイクロソフトのサーバーレス・サービスであるAzure Functionsだ。Azure Functionsは、クラウドプロバイダーに期待されるセキュリティ、信頼性、スケーラビリティのすべてを、非常にリーズナブルなコストで提供してくれる。実際、Consumptionプランを利用すれば、最初の100万回の実行は無料だ。
この2つの技術を武器に、さまざまな要件に合わせて拡張したりカスタマイズしたりできる、低コストのサーバーレス・コンタクトセンターを作るには何が必要かを考えてみた。
前提条件
Visual Studio 2022プレビューまたはVisual Studio Code
Azure Functions コアツール(このデモではV4を使用しています)
について Azureアカウント(これは無料で設定でき、Azure Functionsは最初の1Mコールは無料です)
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.
プラン
コンタクトセンターでは、いくつかのものをセットアップする必要があります。まず、Vonageのアプリケーションと電話番号、電話番号はアプリケーションにリンクされ、アプリケーションからAzure Functionを呼び出します。FunctionはNexmo Call Control Objects (NCCO)をJSONとして返し、これが着信コールのフローを記述します。
私たちの番号に電話がかかってきたとき、音声合成を使ってメッセージを再生し、発信者にいくつかの選択肢を与えます。基本的な機能のプロトタイプを作るだけだが、非常に多くの さまざまなアクション可能性は無限大だ!
アジュール・リソース
Vonage アプリケーションをセットアップする前に、ファンクションのホスト名を知っておく必要があります。これらを取得するには、まず Azure Function App を作成する必要があります。 Azure CLIを使うのが一番簡単だと思いますが Azureポータルを使ってもうまくいく。手入力でも、PowerShellスクリプトに変換することもできる。
ファンクションアプリを作成したら、ホスト名を取得する必要があります。以下のAzure CLIコマンドでホスト名を取得できます。"webapp-name "を先ほど作成したファンクションの名前に変更してください。
az functionapp config hostname list --resource-group ContactCentreResourceGroup --webapp-name contactcentre123 -o tsv --query [].nameVonageアプリケーションを作成するときのために、ホスト名をメモしておいてください。
Vonageアプリケーション
無料のVonageアカウントにご登録いただくと、APIキーとAPIシークレットを以下から取得できます。 Vonage ダッシュボードVonage CLI を設定する
Azure Function のホスト名が手に入ったので、Vonage Application を作成します。Webhooksの作成を求められたらyesを選択し、以下のように入力します。`contactcentre123.azurewebsites.net`を自分のホスト名に置き換えることを忘れないでください。
これで、購入する番号を検索し、アプリケーションにリンクさせることができます。あなたがお住まいの国の携帯電話番号を検索します。ヘルプページには どの製品がどの国でサポートされているかそして、私たちは ISO 3166-1アルファ2コードを使用しています。私はイギリスに住んでいるので、Numbersを検索するときは "GB "を使用しています。
気に入った番号が見つかったら、それを購入し、先ほど作成したVonageアプリケーションにリンクさせることができる。
vonage numbers:buy 447418368151 GB
vonage apps:link 3ff94f7c-fb86-4afd-b338-fe39707b5ef5 --number=447418367999 プロジェクトの作成
さて、コーディングを始めよう!まず始めに、dotnetランタイムを使用して新しいAzure Functionsプロジェクトを作成します。
func init ContactCentre —dotnet --worker-runtime dotnetこれにより、ContactCentreフォルダにFunction Appプロジェクトが作成されます。次に、まずVonage Nugetパッケージへの参照を追加し、HTTPトリガーを持つ3つの関数を作成します。1つは応答エンドポイント、2つ目はイベントエンドポイントで、最後の関数は発信者が提供したオプションに基づいてアクションを実行するために使用されます。ContactCentreプロジェクトフォルダに移動し、以下のコマンドを実行します。
回答機能
誰かがコンタクトセンターに電話をかけると、アンサーファンクションが常に最初にヒットするエンドポイントになります。私たちのプロセスの最初のステップを記述したNCCOオブジェクトを返します。私たちは トークアクションを作成します。このアクションでは、発信者を歓迎し、UK英語とボイススタイル2(私はこれが一番良いと思います)を使用して、何ができるかを説明します。 スタイルと言語から選ぶことができます。次のアクションは MultiInputActionで、通話相手から数字や音声の入力を収集し、この入力を私たちが提供するEventUrl(この場合はMenu Function)に渡します。
以下はアンサー関数のコードです。
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);
}
} メニュー機能
NCCOのEventUrlプロパティでMenu FunctionのURLを指定しました。入力アクションは、呼び出し元の入力に関連するデータをJSONとしてこのURLにPOSTします。 ウェブフックリファレンスを参照してください。この演習では、発信者が押した数字に興味があるだけです。以下のMenu Functionは、`selectedOption`として数字を取得し、それに基づいてアクションを実行します。
以下はメニュー機能のコードである。
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);
}
}
機能アプリの公開
すべてを動作させるには、最後にAzure上にコードを置く必要がある。これを行う最も手っ取り早い方法は、Visual StudioのPublishコマンドを使うことだ。プロジェクトをVisual Studioにロードしたら、あとはプロジェクト名を右クリックして、ドロップダウンメニューから「Publish」を選択するだけです。すると以下の画面が表示されます。ターゲットをAzureに選択します。

先ほど作成したファンクションアプリは、デフォルトでAzureファンクションアプリ(Windows)になります。

コンタクトセンター機能アプリの場所を確認し、完了を選択します。

これで公開プロファイルが設定され、公開をクリックするだけでアプリをAzureにアップロードできるようになります。これが成功したら、最後にアプリケーションの電話番号に電話をかけ、指示に従ってください!
コンタクトセンター
これはまだ完全に機能するコンタクトセンターではないが、その基礎はできた。より機能的にするために追加できることがいくつか思い浮かぶ。
電話をかけてきた人が注文情報のために1を押すと、その電話番号を使って最新の注文と顧客情報を取得し、注文の更新を行う前に身元を確認するために何らかのデータを求めることができます。また、電話を通常の電話番号に接続する代わりに、SIP回線、WebSocketエンドポイント、Vonage Business Cloud内線に接続することもできます。NCCOリファレンス NCCOリファレンスを参照してください。
また 支払いアクションを追加することもできます。
ここで取り上げた基本を踏まえれば、クラウド上でリーズナブルにホスティングされ、カスタマイズされた完全な機能を持つコンタクトセンターを持つことが、大企業から中小企業まで、どの企業にとっても手の届く範囲にあることがよくわかるだろう。
参考文献
このチュートリアルのコードはすべて GitHub
詳細情報 VonageのNCCOおよび Voice APIについて
試す Azure Functionsまだの方は無料でお試しください
