今回のアーキテクチャーは以下の通りです。
簡単な流れは以下の通りです。
- ユーザーが Azure Communication Service に登録された電話番号に架電する。
- Azure Communication Servicce の Incoming Call をトリガーとしてサーバーサイドアプリケーションの API に Webhook を実行する。
- Webhook 要求にサーバーサイドアプリケーションが応答する。
- ユーザー発話内容に基づいて Azure Cognitive Service が Speech-to-Text、Azure OpenAI Service からの応答内容に基づいて Text-to-Speech を実行する。
- ユーザー発話内容に基づいて Azure OpenAI Service が回答内容を生成する。
以下を構成、実装する事で動作確認用環境の構成が可能です。
-
手順ページに則り、Azure AI multi-service account リソースを作成します。
-
Azure ポータルより作成した Azure AI multi-service account リソースの [ENDPOINT]値をコピーします。
- 手順ページに則り、Azure Communication Service 向け Event Grid System topic リソースを作成します。
-
手順ページに則り、Azure Communication Service リソースを作成します。
-
手順ページに則り、接続文字列をコピーします。
-
手順ページに則り、電話番号を取得します。
-
手順ページに則り、Azure AI Service へのアクセス許可を Azure Communication Service マネージド ID に与えます。
-
手順ページに則り、DevTunnel CLI をインストールします。
-
以下コマンドを実行し、DevTunnel をホストします。
devtunnel create --allow-anonymous devtunnel port create -p 5165 devtunnel host
出力された[Connect via browser:]に続く URL 値をコピーします。
-
事前に作成した Event Grid System topic リソースのイベントサブスクリプションを以下のような設定値で作成します。
-
Event Grid System topic リソースの追加イベントサブスクリプションを以下のような設定値で作成します。
- .NET 7.0 のインストールページから、.NET 7.0 SDK をインストールしてください。
- 手順ページに則り、Azure CLI をインストールしてください。
- Azure Functions Core Tools の GitHub ページ の Installing より、Azure Functions Core Tools をインストールしてください。
Microsoft Search API を使用するために、Azure Active Directory アプリケーションを登録します。
- 手順ページに則って、ユーザー認証用アプリケーションを登録してください。
- 登録したアプリケーションページより、左のナビゲーションバーから「API のアクセス許可」を選択し、以下のアクセス許可を追加してください。必要なアクセス許可は、Microsoft Search API ページ の「エンティティ型にも戸津板検索の範囲設定」よりご確認いただけます。
- 登録したアプリケーションページより、左のナビゲーションバーから「証明書とシークレット」を選択し、新しいクライアント シークレットの作成を行ってください。この際に作成されたシークレットの値は後ほど使用するので、控えておいてください。(クライアント シークレットの値は一度しか表示されないので注意してください。)
以下のコマンドでサンプル コードをローカルにクローンしてください。
git clone https://github.com/marumaru1019/POC-MS-Search-Function
- サンプル コードをクローンしたディレクトリまで移動してください。
cd /path/to/POC-MS-Search-Function
- Azure にログインしてください。
az login
- 任意のリージョンにリソース グループを作成して下さい。リソースグループ名は任意のものを指定してください。
az group create --name <リソースグループ名> --location <リージョン>
- 3 で作成したリソースグループとリージョン内に、Blob ストレージを作成して下さい。ストレージアカウント名は任意のものを指定してください。
az storage account create --name <ストレージアカウント名> --resource-group <リソースグループ名> --location <リージョン> --sku Standard_LRS --allow-blob-public-access false
- Azure に関数アプリを作成してください。関数アプリ名は任意のものを指定してください。
az functionapp create --resource-group <リソースグループ名> --consumption-plan-location <リージョン> --runtime dotnet-isolated --functions-version 4 --name <関数アプリ名> --storage-account <ストレージアカウント名>
- 作成した関数アプリに、ClientId、TenantId、ClientSecret を環境変数として設定してください。クライアント ID、テナント ID、クライアント シークレットは、ユーザー認証用のアプリケーションの登録で作成したものを使用してください。
az functionapp config appsettings set --name <関数アプリ名> --resource-group <リソースグループ名> --settings ClientId=<クライアント ID> TenantId=<テナント ID> ClientSecret=<クライアント シークレット>
- Azure に関数をデプロイしてください。
func azure functionapp publish <関数アプリ名>
[appsettings.json]ファイルを以下の通り環境値に置き換えます。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"DevTunnelUri": "コピーした Azure DevTunnel URL",
"CognitiveServiceEndpoint": "Azure AI multi-service account の Endpoint",
"AcsConnectionString": "Azure Communication Service の接続文字列",
"AzureOpenAIServiceKey": "AOAI KEY",
"AzureOpenAIServiceEndpoint": "AOAI ENDPOINT",
"AzureOpenAIDeploymentModelName": "AOAI モデル名",
"FunctionsEndpoint": "Function URL",
"WeatherApiKey": "OpenWeatherMapのAPIキー"
}
-
取得した電話番号に対して架電を行います。
-
任意の質問を問いかけ、日本語で応答があれば動作確認完了です。