ボットと SDK

次のいずれかのツールまたは機能を使用して、Microsoft Teams で動作するボットを作成できます。

Microsoft Bot Framework を使用したボット

Teams ボットは以下から構成されます。

  • お客様がホストし、公開している Web サービス。
  • Web サービスの Bot Framework 登録。
  • Teams クライアントを Web サービスに接続する、Teams アプリ パッケージ。

ヒント

開発者ポータルを使用して Web サービスを Bot Framework に登録し、アプリの構成を指定します。 詳細については、「Microsoft Teams の開発者ポータルを使用してアプリを管理する」を参照してください。

Bot Framework は、C#、Java、Python、JavaScript を使用してボットを作成するために使用される豊富な SDK です。 Bot Framework に基づくボットが既にある場合は、Teams で動作するようにボットを簡単に変更できます。 用意されている SDK を活用するため、C# か Node.js を使用してください。 これらのパッケージは、基本的な Bot Builder SDK のクラスとメソッドを次のように拡張します。

  • コネクタ カードなどの特殊なカードの種類をMicrosoft 365 グループに使用します。
  • アクティビティに関する Teams 固有のチャネル データを設定する。
  • メッセージ拡張要求を処理する。

任意の Web プログラミング テクノロジで Teams アプリを開発し、 Bot Framework REST API を 直接呼び出すことができます。 すべてのケースでトークン処理を実行する必要があります。

Power Virtual Agents を使用したボット

Power Virtual Agent は、Microsoft Power platform および Bot Framework で構築された チャット ボット サービスです。 Power Virtual Agent の開発プロセスでは、ガイド付きのコーディングされていないグラフィカル インターフェイス アプローチを使用して、チーム メンバーが高度な仮想エージェントを簡単に作成して管理できるようにします。 Power Virtual Agents ポータルでチャットボットを作成した後、簡単に Teams と統合 できます。 作業を開始する方法の詳細については、「Power Virtual Agents のドキュメント」を参照してください。

注:

Microsoft Power Platform を使用して、Microsoft Teams ストアに発行するアプリを作成することはできません。 Microsoft Power Platform アプリは、組織のアプリ ストアにのみ発行できます。

Webhook とコネクタを使用したボット

Webhook とコネクタは、ボットを Web サービスに接続します。 Webhook とコネクタを使用すると、ワークフローやその他のシンプルなコマンドの作成など、基本的なやり取りを行うためのボットを作成することができます。 これらは、作成したチームでのみ使用でき、会社のワークフローに固有の単純なプロセスを対象としています。 詳細については、「Webhook とコネクタとは」を参照してください。

ボットの利点

Microsoft Teams のボットは、1 対 1 の会話、グループ チャット、チーム内のチャネルで扱うことができます。 各スコープに、会話ボット向けの機能と条件があります。

チャネル グループ チャット 1 対 1 のチャット
大規模なリーチ 減少したメンバー 従来の方法
簡潔な個々のやり取り @mention ボットへ Q&A ボット
@mention ボットへ チャネルと同様 ジョークを言ったり、メモを取ったりするボット

チャネル

チャネルには、最大 2000 人までの複数のユーザー間のスレッド化された会話が含まれます。 これにより、ボットが大規模になる可能性がでてきますが、それぞれの対話を簡潔にする必要があります。 従来のマルチターン操作は機能しません。 代わりに、対話型のカードまたはダイアログ (TeamsJS v1.x ではタスク モジュールと呼ばれます) を使用するか、会話を 1 対 1 の会話に移動して多くの情報を収集する必要があります。 ボットは、 の @mentionedメッセージにのみアクセスできます。 Microsoft Graph および組織レベルのアクセス許可を使用して会話から追加のメッセージを取得できます。

ボットは、次の場合にチャネルで適切に機能します。

  • ユーザーが追加情報を取得するための対話型カードを提供する通知。
  • 投票やアンケート調査などのフィードバック シナリオ。
  • 単一の要求または応答サイクルは対話を解決し、結果は複数のメンバーで会話をする場合に役立ちます。
  • 素晴らしい猫の画像を取得したり、勝者をランダムに選んだりできる、交流または娯楽を目的としたボット。

グループ チャット

グループ チャットは、3 人以上のユーザー同士で行われる非スレッドの会話です。 チャネルよりもメンバーは少なく、一時的な会話が多いのが特徴です。 チャネルと同様に、ボットは直接アクセスできるメッセージ @mentioned にのみアクセスできます。

チャネルでボットの方がうまく機能する場合は、グループ チャットでもうまく機能します。

1 対 1 のチャット

1 対 1 のチャットは、会話ボットがユーザーとやり取りする従来の方法です。 1 対 1 の会話ボットの例を次に示します。

  • Q&A ボット
  • 他のシステムでワークフローを開始するボット。
  • ジョークを伝えるボット。
  • メモを取るボット。 1 対 1 のチャットボットを作成する前に、会話ベースのインターフェイスが機能を提示する最善の方法であるかどうかを検討してください。

ボットの欠点

ボットとユーザーの間のダイアログが広範になると、タスクの完了に要する時間が長くなり、複雑になります。 過剰なコマンド (特に広範なコマンド) をサポートするボットは、成功しないか、ユーザーによって肯定的に表示されます。

チャットではマルチターンのやり取りが交わされる

広範なダイアログでは、開発者が状態を維持する必要があります。 この状態を終了するには、ユーザーがタイムアウトするか、[ キャンセル] を選択する必要があります。 また、このプロセスは面倒です。 たとえば、次の会話シナリオを参照してください。

ユーザー: Megan との会議をスケジュールして。

BOT: 200 件の結果が見つかりました。姓と名を含めます。

ユーザー: Megan Bowen との会議をスケジュールして。

ボット: かしこまりました。Megan Bowen との会議を何時にご希望ですか?

ユーザー: 午後 1 時に。

ボット: 何日のですか?

サポートするコマンドの数が多すぎる

現在のボット メニューにはコマンドが 6 つしか表示されないため、それ以外のコマンドは滅多に使用されなくなります。 幅広いアシストを提供するボットより、特定の分野を深く掘り下げるボットの方がうまくいきます。

維持するサポート情報が大規模である

ボットの欠点の 1 つは、ランクなしの応答を使用して大規模な取得サポート情報を維持するのが難しいことです。 ボットは、長いリストから答えを調べ出すようなものではなく、短く簡潔なやり取りに最適です。

制限事項と既知の問題

開発者ポータルでボットを作成できない場合は、次のことを確認してください。

  • ユーザーに対してアプリ登録が有効になっている: アプリの登録が組織全体で無効になっている場合、(管理者アクセス権を持つユーザー以外の) ユーザー Microsoft Entra新しいアプリを登録できません。 ユーザーがアプリを登録できるようにするには、管理者は、Microsoft Entra管理センター[ユーザーがアプリケーションを登録できます] を [はい] に切り替える必要があります。

  • 新しいアプリを登録するためのアクセス許可を特定のユーザーに付与します

コード スニペット

次のコードは、チャネル チーム スコープのボット アクティビティの例を示しています。


protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    var mention = new Mention
    {
        Mentioned = turnContext.Activity.From,
        // EncodeName: Converts the name to a valid XML name.
        Text = $"<at>{XmlConvert.EncodeName(turnContext.Activity.From.Name)}</at>",
    };
    
    // MessageFactory.Text(): Specifies the type of text data in a message attachment.
    var replyActivity = MessageFactory.Text($"Hello {mention.Text}.");
    replyActivity.Entities = new List<Entity> { mention };

    // Sends a message activity to the sender of the incoming activity.
    await turnContext.SendActivityAsync(replyActivity, cancellationToken);
}

次のコードは、1 対 1 のチャットのボット アクティビティの例を示しています。


// Handle message activity
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    // Remove recipient mention text from Text property.
    // Use with caution because this function is altering the text on the Activity.
    turnContext.Activity.RemoveRecipientMention();
    var text = turnContext.Activity.Text.Trim().ToLower();

    // Sends a message activity to the sender of the incoming activity.
    await turnContext.SendActivityAsync(MessageFactory.Text($"Your message is {text}."), cancellationToken);
}

コード サンプル

サンプルの名前 説明 .NETCore Node.js Python マニフェスト
Teams 会話ボット このサンプル アプリでは、ボット フレームワーク v4 で使用できるさまざまなボット会話イベントを使用する方法を示します。 表示 表示 表示 表示
ボット サンプル ボット フレームワーク v4 サンプルのセット 表示 表示 表示

次の手順

関連項目