Teamsのグループチャットにbot経由で通知をする


初めに

2021/02月現在、Power Automateではチャットグループ宛にメッセージを送信するアクションがありません。
どうしても、チャットグループに自動送信型の通知を行う必要がある場合に、この方法を使えばbotにしゃべらせるという形でメッセージを送信することができました。

環境

  • Microsoft Teamsアカウント
  • c#

手順

App Studioで通知用アプリを作成

  1. 左下のアプリボタンからTeamsにApp Studioをインストールします。
  2. Manifest Editor(上のタブ)を選択して、左側の Create New App ボタンを押します。
  3. *のついた必須入力項目を入力します(App IDは Generate ボタンを押すと生成されます)。

  4. 左側の 2.Capabilitiesbots を押してbotのセットアップ画面を表示させたらSet up ボタンを押します。

  5. Set up a bot画面が表示されるので、名前を入力、必要なScopeにチェック(3つチェックしてOK)して、 Create Bot ボタンを押すとBotの作成が完了した画面が表示されますので、 botのID を控えて下さい(この値は後からでもコピペできます)。ここで作成したbotはMicrosoft Bot Frameworkで確認できます。

  6. Generate New Password ボタンを押して botのパスワード を生成し、ここでコピペしてどこかに保存して下さい。生成した時にしかパスワードはコピーできません。

  7. 左側の 3.FinishLanguage を押してSelect a languageで言語を選択します。

  8. 左側の 3.FinishTest and Distribute を押して Download ボタンを押します(ダウンロードされたzipファイルは後で使います)。

  9. 左側の 3.FinishTest and Distribute を押して Install ボタンを押します。アプリのインストール画面が表示されたら、 追加 ボタンを押します。

  10. Teamsでアプリの画面が開いたら完了です。

グループチャットを作成する。

ここでメッセージ送信に必要なConversationIDの取得とアプリのインストールを行います。

  1. Teamsで3人以上のグループチャットを作成します。
  2. 適当なメッセージを送信し、グループチャットに名前をつけます。
  3. 左側のチャット一覧ペインで該当するグループチャット名横の[…]→ アプリを管理 を押します。
  4. カスタムアプリをアップロード を押し、 App Studioで通知用アプリを作成 で作成したzipファイルを選択します。

  5. アプリのインストール画面が表示されたら、 追加 ボタンを押します。

  6. Graph API経由/me/chatsでConversationID(会話ID)を取得します(2.でつけた名前がtopic値になっているもののidが ConversationID です)。

コンソールアプリケーションでメッセージを送信する。

取得したbotのID・botのパスワード・ConversationIDを下記のソースに代入して実行するとグループチャットへのメッセージの送信が可能です。

Program.cs
using System;
using System.Collections.Generic;
using Microsoft.Bot.Connector;
using Microsoft.Bot.Connector.Authentication;
using Microsoft.Bot.Schema;

namespace ProactiveMessagerSample
{
    class Program
    {
        static void Main(string[] args)
        {

            var appId = "<botのID>";//App Studio画面で取得したbotのID
            var appPassword = "<botのパスワード>";//App Studio画面で保存したbotのパスワード

            var serviceUrl = "https://smba.trafficmanager.net/jp/";
            var conversationId = "<ConversationID>";//API経由で取得したConversationID

            MicrosoftAppCredentials.TrustServiceUrl(serviceUrl);
            var connector = new ConnectorClient(new Uri(serviceUrl), appId, appPassword);

            IMessageActivity message = Activity.CreateMessageActivity();
            message.Conversation = new ConversationAccount(id: conversationId);
            message.Locale = "ja-jp";
            message.Text = $@"Chatbotからの通知テストです。";
            connector.Conversations.SendToConversation((Activity)message);
        }
    }
}