クイック スタート: ボットをチャット アプリに追加する
Azure Bot Service で使用できる Azure Communication Services チャット メッセージング チャネルを使って、チャット アプリケーションで対話型 AI エクスペリエンスを構築する方法について説明します。 このクイックスタートでは、BotFramework SDK を使用してボットを作成します。 次に、Communication Services Chat SDK を使用して作成したチャット アプリケーションにボットを統合します。
このクイックスタートでは、次の方法について説明します。
- ボットを作成して Azure にデプロイする
- Communication Services リソースを取得する
- ボットに対して Communication Services のチャット チャネルを有効にする
- チャット アプリを作成し、参加者としてボットを追加する
- ボットの他の機能を確認する
前提条件
- Azure アカウントとアクティブなサブスクリプション。 無料でアカウントを作成します。
- Visual Studio 2019 以降。
- .NET Core の最新バージョン。 (https://dotnet.microsoft.com/download/dotnet/)。
- ボット フレームワーク SDK
ボットを作成して Azure にデプロイする
Azure Bot Service のチャネルとして Azure Communication Services のチャットを使うために、まずボットをデプロイします。 ボットをデプロイするには、次の手順を実行します。
- Azure Bot Service リソースを作成する
- ボットのアプリ ID とパスワードを取得する
- ボット アプリを保持する Web アプリを作成する
- ボットのメッセージング エンドポイントを作成する
Azure で Azure Bot Service のリソースを作成する
まず、Azure portal を使用して Azure Bot Service リソースを作成します。 Communication Services のチャット チャネルでは、シングルテナント ボット、マネージド ID ボット、マルチテナント ボットがサポートされます。
- このクイック スタートの目的では、
multitenant
ボットを使います。 single-tenant
またはmanaged identity
ボットの設定については、ボットの ID 情報に関する記事をご覧ください。managed identity
ボットの場合、ボット サービス ID の更新が必要になる場合があります。
ボットのアプリ ID とアプリ パスワードを取得する
次に、デプロイ時にボットに割り当てられる Microsoft アプリ ID とパスワードを取得します。 これらの値は、後の構成に使用します。
ボット アプリを作成して Web アプリに発行する
ボットは、次のいずれかの方法で作成できます。
- Bot Builder のサンプルをご自分のシナリオに合わせて修正し、Web アプリを作成してから、それにボット サンプルをデプロイします。
- Bot Builder SDK を使って、ボットを作成し、Web アプリに発行します。
このクイックスタートでは、Bot Builder サンプルの Echo Bot サンプルを使います。
ボット アプリを保持する Web アプリを作成する
Web アプリを作成するには、Azure CLI を使って Azure App Service リソースを作成するか、Azure portal でアプリを作成します。
Azure portal を使用してボット Web アプリを作成するには、次を行います。
ポータルで [リソースの作成] を選択します。 検索ボックスに「Web アプリ」と入力します。 [Web アプリ] タイルを選択します。
[Web アプリの作成] で、アプリをデプロイするリージョンなど、アプリの詳細を選択または入力します。
[確認と作成] を選択してデプロイを検証し、デプロイの詳細を確認します。 そのうえで [Create](作成) を選択します。
Web アプリ リソースが作成されたら、リソースの詳細に表示されているホスト名 URL をコピーします。 URL は Web アプリに作成するエンドポイントの一部になります。
ボットのメッセージング エンドポイントを作成する
通常、Azure Bot Service では、ボット アプリケーションの Web アプリ コントローラーによってエンドポイントが /api/messages
形式で公開されることを想定しています。 エンドポイントは、ボットに送信されるすべてのメッセージを処理します。
次に、ボット リソースで、Web アプリ メッセージング エンドポイントを作成します。
Azure portal で Azure Bot リソースに移動します。 [リソース] メニューで [構成] を選択します。
[構成] の [メッセージング エンドポイント] に、前のセクションでコピーした Web アプリのホスト名 URL を貼り付けます。 URL に
/api/messages
を追加します。[保存] を選択します。
Web アプリのデプロイ
ボットを作成する最後の手順は、Web アプリをデプロイすることです。 このクイックスタートでは、Echo Bot サンプルを使います。 エコー ボットの機能は、ユーザー入力のエコーに限定されます。 Azure の Web アプリにデプロイする方法を次に示します。
Git を使用して、この GitHub リポジトリを複製します。
git clone https://github.com/Microsoft/BotBuilder-Samples.git cd BotBuilder-Samples
Visual Studio で、エコー ボット プロジェクトを開きます。
Visual Studio プロジェクトで、Appsettings.json ファイルを開きます。 前にコピーした Microsoft アプリ ID とアプリ パスワードを貼り付けます。
{ "MicrosoftAppType": "", "MicrosoftAppId": "<App-registration-ID>", "MicrosoftAppPassword": "<App-password>", "MicrosoftAppTenantId": "" }
次に、C# ボットの場合は Visual Studio または VS Code を使ってボットをデプロイします。
また、コマンド プロンプト ウィンドウを使用して Azure ボットをデプロイすることもできます。
Visual Studio のソリューション エクスプローラーで、[EchoBot] プロジェクトを右クリックし、[発行] を選択します。
[新規] を選択して、新しい発行プロファイルを作成します。 [ターゲット] に [Azure] を選択します。
特定のターゲットとして [Azure App Service] を選択します。
デプロイ構成で、Azure アカウントにサインインした後に表示される結果にある Web アプリを選択します。 [完了] を選んでプロファイルを完了し、[発行] を選んでデプロイを開始します。
Communication Services リソースを取得する
ボットが作成されてデプロイされたので、Communication Services チャネルの設定に使用する Communication Services リソースを作成します。
Communication Services リソースを作成する手順を実施します。
Communication Services ユーザーを作成し、ユーザー アクセス トークンを発行します。 スコープは必ずチャットに設定してください。 "トークン文字列とユーザー ID 文字列をコピーします"。
Communication Services のチャット チャネルを有効にする
Communication Services リソースがある場合は、ボット リソースに Communication Services チャネルを設定できます。 このプロセスでは、ボットのユーザー ID が生成されます。
Azure portal で Azure Bot リソースに移動します。 リソース メニューで [チャネル] を選択します。 使用可能なチャネルの一覧で、[Azure Communications Services - チャット] を選択します。
[接続] を選択すると、サブスクリプションで使用可能な Communication Services リソースの一覧が表示されます。
[新しい接続] ウィンドウで、Communication Services チャット リソースを選択し、[適用] を選択します。
リソース詳細が検証されると、ボット ID が [Bot Azure Communication Services Id] 列に表示されます。 Communication Services Chat AddParticipant API を使用して、ボット ID を使用してチャット スレッド内のボットを表すことができます。 ボットを参加者としてチャットに追加すると、ボットはチャット関連のアクティビティの受信を開始し、チャット スレッドで応答できます。
チャット アプリを作成し、参加者としてボットを追加する
ボットの Communication Services ID が取得できたので、ボットを参加者とするチャット スレッドを作成できます。
「チャットをアプリに追加する」クイックスタートに従う
「チャットをアプリに追加する」クイックスタートの手順に従って、チャット アプリを作成します。
- <Resource_Endpoint> は、「Communication Services リソースを取得する」ステップの Communication Services エンドポイントに置き換えます。
- <Access_Token> は、「Communication Services リソースを取得する」ステップのユーザー アクセス トークンに置き換えます。
- <Access_ID> は、「Communication Services のチャット チャネルを有効にする」ステップのボットの ACS_ID に置き換えます。
C# チャット アプリケーションをローカル環境で実行する
チャット アプリケーションをローカル環境で実行するには、dotnet run
コマンドを使います。
dotnet run
"Hello World" というボットからのメッセージをコンソールで受け取るはずです。
出力例:
1730405535010:Hello World
ボットで実行できるその他の機能
ボットは、Communications Services チャット チャネルのユーザーからプレーンテキスト メッセージ以外のものも受信できます。 ボットがユーザーから受け取ることができるアクティビティには、次のようなものがあります。
- 会話の更新
- メッセージの更新
- メッセージの削除
- 入力インジケーター
- イベント アクティビティ
- アダプティブ カードを含むさまざまな添付ファイル
- ボットのチャネル データ
次のセクションでは、これらの機能を示すサンプルをいくつか示します。
新しいユーザーがスレッドに追加されたときにウェルカム メッセージを送信する
現在の Echo Bot ロジックは、ユーザーからの入力を受け取り、それをエコーバックします。 参加者が付け加えた Communication Services イベントに応答するなどのロジックを追加する場合は、次のコードをコピーして EchoBot.cs に貼り付けます。
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Schema;
namespace Microsoft.BotBuilderSamples.Bots
{
public class EchoBot : ActivityHandler
{
public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken)
{
if (turnContext.Activity.Type == ActivityTypes.Message)
{
var replyText = $"Echo: {turnContext.Activity.Text}";
await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
}
else if (ActivityTypes.ConversationUpdate.Equals(turnContext.Activity.Type))
{
if (turnContext.Activity.MembersAdded != null)
{
foreach (var member in turnContext.Activity.MembersAdded)
{
if (member.Id != turnContext.Activity.Recipient.Id)
{
await turnContext.SendActivityAsync(MessageFactory.Text("Hello and welcome to chat with EchoBot!"), cancellationToken);
}
}
}
}
}
}
}
アダプティブ カードを送信する
Note
アダプティブ カードは、すべてのチャット参加者が Azure Communication Services ユーザーである Azure Communication Services のユース ケース内でのみサポートされ、Teams 相互運用のユース ケースではサポートされません。
アダプティブ カードをチャット スレッドに送信して、エンゲージメントと効率を高めることができます。 アダプティブ カードは、さまざまな方法でユーザーと通信するのにも役立ちます。 ボット アクティビティの添付ファイルとしてカードを追加することで、ボットからアダプティブ カードを送信できます。
アダプティブ カードを送信する方法の例を次に示します。
var reply = Activity.CreateMessageActivity();
var adaptiveCard = new Attachment()
{
ContentType = "application/vnd.microsoft.card.adaptive",
Content = {/* the adaptive card */}
};
reply.Attachments.Add(adaptiveCard);
await turnContext.SendActivityAsync(reply, cancellationToken);
アダプティブ カードのサンプル ペイロードを取得するには、「サンプルとテンプレート」を参照してください。
チャット ユーザーの場合、Communication Services チャット チャネルは、メッセージに添付ファイルがあることを示すフィールドをメッセージ メタデータに追加します。 メタデータでは、microsoft.azure.communication.chat.bot.contenttype
プロパティは azurebotservice.adaptivecard
に設定されます。
アダプティブ カードが添付されたチャット メッセージの例を次に示します。
{
"content": "{\"attachments\":[{\"contentType\":\"application/vnd.microsoft.card.adaptive\",\"content\":{/* the adaptive card */}}]}",
"senderDisplayName": "BotDisplayName",
"metadata": {
"microsoft.azure.communication.chat.bot.contenttype": "azurebotservice.adaptivecard"
},
"messageType": "Text"
}
ユーザーからボットへのメッセージの送信
テキスト メッセージを別のユーザーに送信するのと同じ方法で、ユーザーからボットに基本的なテキスト メッセージを送信できます。
ただし、ユーザーからボットに添付ファイルを含むメッセージを送信する場合、Communication Services チャットのメタデータにこのフラグを追加します。
"microsoft.azure.communication.chat.bot.contenttype": "azurebotservice.adaptivecard"
ユーザーからボットにイベント アクティビティを送信するには、Communication Services チャット メタデータに次のフラグを追加します。
"microsoft.azure.communication.chat.bot.contenttype": "azurebotservice.event"
次のセクションでは、ユーザーからボットへのチャット メッセージのサンプル形式を示します。
単純なテキスト メッセージ
{
"content":"Simple text message",
"senderDisplayName":"Acs-Dev-Bot",
"metadata":{
"text":"random text",
"key1":"value1",
"key2":"{\r\n \"subkey1\": \"subValue1\"\r\n
"},
"messageType": "Text"
}
添付ファイルを含むメッセージ
{
"content": "{
\"text\":\"sample text\",
\"attachments\": [{
\"contentType\":\"application/vnd.microsoft.card.adaptive\",
\"content\": { \"*adaptive card payload*\" }
}]
}",
"senderDisplayName": "Acs-Dev-Bot",
"metadata": {
"microsoft.azure.communication.chat.bot.contenttype": "azurebotservice.adaptivecard",
"text": "random text",
"key1": "value1",
"key2": "{\r\n \"subkey1\": \"subValue1\"\r\n}"
},
"messageType": "Text"
}
イベント アクティビティを含むメッセージ
イベント ペイロードには、Name
を除くすべての JSON フィールドがメッセージ コンテンツに含まれます。 Name
フィールドには、イベントの名前が含まれています。
次の例では、ペイロード "{field1":"value1", "field2": { "nestedField":"nestedValue" }}
を含むイベント名 endOfConversation
がボットに送信されます。
{
"content":"{
\"name\":\"endOfConversation\",
\"field1\":\"value1\",
\"field2\": {
\"nestedField\":\"nestedValue\"
}
}",
"senderDisplayName":"Acs-Dev-Bot",
"metadata":{
"microsoft.azure.communication.chat.bot.contenttype": "azurebotservice.event",
"text":"random text",
"key1":"value1",
"key2":"{\r\n \"subkey1\": \"subValue1\"\r\n}"
},
"messageType": "Text"
}
メタデータ フィールド microsoft.azure.communication.chat.bot.contenttype
は、ユーザーからボットに送信されるメッセージでのみ必要です。
サポートされているボット アクティビティ フィールド
次のセクションでは、ボットからユーザーへのフローとユーザーからボットへのフローでサポートされているボット アクティビティ フィールドについて説明します。
ボットからユーザーへのフロー
ボットからユーザーへのフローでは、次のボット アクティビティ フィールドがサポートされています。
Activities
- Message
- Typing (入力)
メッセージ アクティビティ フィールド
Text
Attachments
AttachmentLayout
SuggestedActions
From.Name
(Communication ServicesSenderDisplayName
に変換されます)。ChannelData
(Communication ServicesChat Metadata
に変換されます。ChannelData
のマッピング値がオブジェクトの場合、JSON 形式でシリアル化され、文字列として送信されます)。
ユーザーからボットへのフロー
これらのボット アクティビティ フィールドは、ユーザーからボットへのフローでサポートされています。
アクティビティとフィールド
Message
Id
(Communication Services チャット メッセージ ID)TimeStamp
Text
Attachments
会話の更新
MembersAdded
MembersRemoved
TopicName
メッセージの更新
Id
(更新された Communication Services チャット メッセージ ID)Text
Attachments
メッセージの削除
Id
(削除された Communication Services チャット メッセージ ID)
イベント
Name
Value
Typing (入力)
その他の共通フィールド
Recipient.Id
とRecipient.Name
(Communication Services チャット ユーザー ID と表示名)From.Id
とFrom.Name
(Communication Services チャット ユーザー ID と表示名)Conversation.Id
(Communication Services チャット スレッド ID)ChannelId
(空の場合、Communication Services チャット)ChannelData
(Communication Services チャット メッセージ メタデータ)
ボットのハンドオフ パターン
ボットが質問を理解していない場合や、質問に回答できない場合があります。 顧客はチャットで人間のエージェントへの接続を求める場合があります。 これらのシナリオでは、チャット スレッドをボットから人間のエージェントに渡す必要があります。 ボットから人間へ会話を移行するようにアプリケーションを設計できます。
ボット間通信の処理
一部の場合、2 つのボットを同じチャット スレッドに追加して異なるサービスを提供するようなユース ケースがあります。 このシナリオでは、ボットが別のボットのメッセージに自動応答を送信しないようにする必要がある場合があります。 適切に処理されないと、ボット同士の自動的な相互作用により、メッセージが無限ループに陥る可能性があります。
アクティビティの From.Id
プロパティで、メッセージ送信者の Communication Services ユーザー ID を確認できます。 別のボットに属しているかどうかを確認します。 次に、ボット間の通信フローを防ぐために必要なアクションを実行します。 この種のシナリオで通話量が多くなる場合、Communication Services チャット チャネルは要求を調整し、ボットはメッセージを送受信できません。
スロットル制限の詳細について参照してください。
トラブルシューティング
以下のセクションでは、一般的なシナリオのトラブルシューティング方法について説明します。
チャット チャネルを追加できない
Microsoft Bot Framework 開発者ポータルで、[構成]>[ボット メッセージング] に移動して、エンドポイントが正しく設定されていることを確認します。
ボットがメッセージに返信するときに、"許可されていません" の例外が発生する
ボットの Microsoft アプリ ID とパスワードが、Web アプリにアップロードしたボット構成ファイルに正しく保存されていることを確認します。
ボットを参加者として追加できない
チャット スレッドにボットを追加する要求が送信されたときに、ボットの Communication Services ID が正しく使われていることを確認します。