次の方法で共有


クイック スタート: ボットをチャット アプリに追加する

Azure Bot Service で使用できる Azure Communication Services チャット メッセージング チャネルを使って、チャット アプリケーションで対話型 AI エクスペリエンスを構築する方法について説明します。 このクイックスタートでは、BotFramework SDK を使用してボットを作成します。 次に、Communication Services Chat SDK を使用して作成したチャット アプリケーションにボットを統合します。

このクイックスタートでは、次の方法について説明します。

前提条件

ボットを作成して Azure にデプロイする

Azure Bot Service のチャネルとして Azure Communication Services のチャットを使うために、まずボットをデプロイします。 ボットをデプロイするには、次の手順を実行します。

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 アプリを作成するには、次を行います。

  1. ポータルで [リソースの作成] を選択します。 検索ボックスに「Web アプリ」と入力します。 [Web アプリ] タイルを選択します。

    Azure portal での Web アプリ リソースの作成を示すスクリーンショット。

  2. [Web アプリの作成] で、アプリをデプロイするリージョンなど、アプリの詳細を選択または入力します。

    Web アプリのデプロイを作成するために設定する詳細を示すスクリーンショット。

  3. [確認と作成] を選択してデプロイを検証し、デプロイの詳細を確認します。 そのうえで [Create](作成) を選択します。

  4. Web アプリ リソースが作成されたら、リソースの詳細に表示されているホスト名 URL をコピーします。 URL は Web アプリに作成するエンドポイントの一部になります。

    Web アプリエンドポイントの URL をコピーする方法を示すスクリーンショット。

ボットのメッセージング エンドポイントを作成する

通常、Azure Bot Service では、ボット アプリケーションの Web アプリ コントローラーによってエンドポイントが /api/messages 形式で公開されることを想定しています。 エンドポイントは、ボットに送信されるすべてのメッセージを処理します。

次に、ボット リソースで、Web アプリ メッセージング エンドポイントを作成します。

  1. Azure portal で Azure Bot リソースに移動します。 [リソース] メニューで [構成] を選択します。

  2. [構成][メッセージング エンドポイント] に、前のセクションでコピーした Web アプリのホスト名 URL を貼り付けます。 URL に /api/messages を追加します。

  3. [保存] を選択します。

Web アプリのホスト名を使用してボット メッセージング エンドポイントを作成する方法を示すスクリーンショット。

Web アプリのデプロイ

ボットを作成する最後の手順は、Web アプリをデプロイすることです。 このクイックスタートでは、Echo Bot サンプルを使います。 エコー ボットの機能は、ユーザー入力のエコーに限定されます。 Azure の Web アプリにデプロイする方法を次に示します。

  1. Git を使用して、この GitHub リポジトリを複製します。

    git clone https://github.com/Microsoft/BotBuilder-Samples.git
    cd BotBuilder-Samples
    
  2. Visual Studio で、エコー ボット プロジェクトを開きます。

  3. Visual Studio プロジェクトで、Appsettings.json ファイルを開きます。 前にコピーした Microsoft アプリ ID とアプリ パスワードを貼り付けます。

       {
         "MicrosoftAppType": "",
         "MicrosoftAppId": "<App-registration-ID>",
         "MicrosoftAppPassword": "<App-password>",
           "MicrosoftAppTenantId": ""
       }
    

    次に、C# ボットの場合は Visual Studio または VS Code を使ってボットをデプロイします。

    また、コマンド プロンプト ウィンドウを使用して Azure ボットをデプロイすることもできます。

  4. Visual Studio のソリューション エクスプローラーで、[EchoBot] プロジェクトを右クリックし、[発行] を選択します。

    Visual Studio からの Web アプリの発行示すスクリーンショット。

  5. [新規] を選択して、新しい発行プロファイルを作成します。 [ターゲット][Azure] を選択します。

    新しい発行プロファイルでターゲットとして Azure を選択する方法を示すスクリーンショット。

    特定のターゲットとして [Azure App Service] を選択します。

    特定のターゲットとして Azure App Service を選択する方法を示すスクリーンショット。

  6. デプロイ構成で、Azure アカウントにサインインした後に表示される結果にある Web アプリを選択します。 [完了] を選んでプロファイルを完了し、[発行] を選んでデプロイを開始します。

    Web アプリ名を使用したデプロイ構成の設定を示すスクリーンショット。

Communication Services リソースを取得する

ボットが作成されてデプロイされたので、Communication Services チャネルの設定に使用する Communication Services リソースを作成します。

  1. Communication Services リソースを作成する手順を実施します。

  2. Communication Services ユーザーを作成し、ユーザー アクセス トークンを発行します。 スコープは必ずチャットに設定してください。 "トークン文字列とユーザー ID 文字列をコピーします"。

Communication Services のチャット チャネルを有効にする

Communication Services リソースがある場合は、ボット リソースに Communication Services チャネルを設定できます。 このプロセスでは、ボットのユーザー ID が生成されます。

  1. Azure portal で Azure Bot リソースに移動します。 リソース メニューで [チャネル] を選択します。 使用可能なチャネルの一覧で、[Azure Communications Services - チャット] を選択します。

    Communication Services チャット チャネルを開く方法を示すスクリーンショット。

  2. [接続] を選択すると、サブスクリプションで使用可能な Communication Services リソースの一覧が表示されます。

    Communication Service リソースをこのボットに接続する方法を示すスクリーンショット。

  3. [新しい接続] ウィンドウで、Communication Services チャット リソースを選択し、[適用] を選択します。

    選んだ Communication Service リソースを保存して、新しい Communication Services ユーザー ID を作成する方法を示すスクリーンショット。

  4. リソース詳細が検証されると、ボット ID が [Bot Azure Communication Services Id] 列に表示されます。 Communication Services Chat AddParticipant API を使用して、ボット ID を使用してチャット スレッド内のボットを表すことができます。 ボットを参加者としてチャットに追加すると、ボットはチャット関連のアクティビティの受信を開始し、チャット スレッドで応答できます。

    ボットに割り当てられた新しい Azure Communication Services ユーザー ID を示すスクリーンショット。

チャット アプリを作成し、参加者としてボットを追加する

ボットの Communication Services ID が取得できたので、ボットを参加者とするチャット スレッドを作成できます。

「チャットをアプリに追加する」クイックスタートに従う

チャットをアプリに追加する」クイックスタートの手順に従って、チャット アプリを作成します。

  1. <Resource_Endpoint> は、「Communication Services リソースを取得する」ステップの Communication Services エンドポイントに置き換えます。
  2. <Access_Token> は、「Communication Services リソースを取得する」ステップのユーザー アクセス トークンに置き換えます。
  3. <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 Services SenderDisplayName に変換されます)。
  • ChannelData (Communication Services Chat 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.IdRecipient.Name (Communication Services チャット ユーザー ID と表示名)
  • From.IdFrom.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 が正しく使われていることを確認します。