ボットのコンテキストをMicrosoft Teamsする

重要

この記事は、v3 Bot Framework SDK に基づいて作成されています。 SDK の現在のドキュメント バージョン 4.6 以降を探している場合は、「会話型ボット 」セクションを参照 してください。

ボットは、チームまたはチャットに関する追加のコンテキスト (ユーザー プロファイルなど) にアクセスできます。 この情報は、ボットの機能を強化し、よりパーソナライズされたエクスペリエンスを提供するために使用できます。

注意

  • Microsoft Teams固有のボット API は、ボット ビルダー SDK の拡張機能を通じて最適にアクセスできます。
  • Microsoft.bot.Connector.C# .NET または .NET の場合は、Microsoft.Bot.Connector.Teams NuGetしてください。
  • 開発Node.js、ボット フレームワーク SDK v4.6 Teams機能のボット ビルダーが組み込まれています。

チーム名簿を取得する

ボットは、チーム メンバーとその基本的なプロファイルの一覧を照会できます。 基本的なプロファイルには、Teams ID、名前Microsoft Azure Active Directoryオブジェクト ID などのAzure AD (Azure AD) 情報が含まれます。 この情報を使用して、ユーザー ID を関連付けできます。 たとえば、ユーザーがチーム メンバーであるユーザー (Microsoft Azure Active Directory) 資格情報Azure ADにログインした場合を確認します。

REST API の例

値をエンドポイントとして使用してserviceUrl/conversations/{teamId}/members/GET 要求を直接発行します。

ボット teamId が受け取る channeldata アクティビティ ペイロードのオブジェクトは、次のシナリオで確認できます。

注意

  • API を呼び出す場合は、必ずチーム ID を使用してください。
  • serviceUrl は安定している傾向がありますが、変更される可能性があります。 新しいメッセージが届いた場合、ボットは保存されている値を確認する必要 serviceUrl があります。
GET /v3/conversations/19:ja0cu120i1jod12j@skype.net/members

Response body
[{
    "id": "29:1GcS4EyB_oSI8A88XmWBN7NJFyMqe3QGnJdgLfFGkJnVelzRGos0bPbpsfJjcbAD22bmKc4GMbrY2g4JDrrA8vM06X1-cHHle4zOE6U4ttcc",
    "objectId": "9d3e08f9-a7ae-43aa-a4d3-de3f319a8a9c",
    "givenName": "Larry",
    "surname": "Brown",
    "email": "Larry.Brown@fabrikam.com",
    "userPrincipalName": "labrown@fabrikam.com"
}, {
    "id": "29:1bSnHZ7Js2STWrgk6ScEErLk1Lp2zQuD5H2qQ960rtvstKp8tKLl-3r8b6DoW0QxZimuTxk_kupZ1DBMpvIQQUAZL-PNj0EORDvRZXy8kvWk",
    "objectId": "76b0b09f-d410-48fd-993e-84da521a597b",
    "givenName": "John",
    "surname": "Patterson",
    "email": "johnp@fabrikam.com",
    "userPrincipalName": "johnp@fabrikam.com"
}, {
    "id": "29:1URzNQM1x1PNMr1D7L5_lFe6qF6gEfAbkdG8_BUxOW2mTKryQqEZtBTqDt10-MghkzjYDuUj4KG6nvg5lFAyjOLiGJ4jzhb99WrnI7XKriCs",
    "objectId": "6b7b3b2a-2c4b-4175-8582-41c9e685c1b5",
    "givenName": "Rick",
    "surname": "Stevens",
    "email": "Rick.Stevens@fabrikam.com",
    "userPrincipalName": "rstevens@fabrikam.com"
}]

.NET の例

ユーザー GetConversationMembersAsync ID の Team.Id 一覧を取得するために using を呼び出します。

// Fetch the members in the current conversation
var connector = new ConnectorClient(new Uri(context.Activity.ServiceUrl));
var teamId = context.Activity.GetChannelData<TeamsChannelData>().Team.Id;
var members = await connector.Conversations.GetConversationMembersAsync(teamId);

// Concatenate information about all members into a string
var sb = new StringBuilder();
foreach (var member in members.AsTeamsChannelAccounts())
{
    sb.AppendFormat(
        "GivenName = {0}, TeamsMemberId = {1}",
        member.Name, member.Id);

    sb.AppendLine();
}

// Post the member info back into the conversation
await context.PostAsync($"People in this conversation: {sb.ToString()}");

Node.jsまたは TypeScript の例


[...]
import * as builder from "botbuilder";
[...]

var teamId = session.message.sourceEvent.team.id;
connector.fetchMembers(
  (<builder.IChatConnectorAddress>session.message.address).serviceUrl,
  teamId,
  (err, result) => {
    if (err) {
      session.endDialog('There is some error');
    }
    else {
      session.endDialog('%s', JSON.stringify(result));
    }
  }
);

個人チャットまたはグループ チャットでユーザー プロファイルまたは名簿を取得する

任意の個人チャットの API 呼び出しを行って、ボットとチャットしているユーザーのプロファイル情報を取得できます。

API 呼び出し、SDK メソッド、および応答オブジェクトは、チーム名簿のフェッチと同じです。 唯一の違いは、.conversationId teamId

チーム内のチャネルの一覧を取得する

ボットは、チーム内のチャネルの一覧を照会できます。

注意

  • ローカライズを許可するために、既定の一般チャネル null の名前が返されます。
  • General チャネルのチャネル ID は、常にチーム ID と一致します。

REST API の例

値をエンドポイントとして使用してserviceUrl/teams/{teamId}/conversations/GET 要求を直接発行します。

唯一のソース teamId は、チーム コンテキストからのメッセージです。 メッセージは、ユーザーからのメッセージか、ボットがチームに追加するときに受信するメッセージのいずれかです。 詳細については、「チームに 追加されたボットまたはユーザー」を参照してください

注意

serviceUrl は安定している傾向がありますが、変更される可能性があります。 新しいメッセージが届いた場合、ボットは保存されている値を確認する必要 serviceUrl があります。

GET /v3/teams/19%3A033451497ea84fcc83d17ed7fb08a1b6%40thread.skype/conversations

Response body
{
    "conversations": [{
        "id": "19:033451497ea84fcc83d17ed7fb08a1b6@thread.skype",
        "name": null
    }, {
        "id": "19:cc25e4aae50746ecbb11473bba24c70a@thread.skype",
        "name": "Materials"
    }, {
        "id": "19:b7b84cba410c406ba671dbbf5e0a3519@thread.skype",
        "name": "Design"
    }, {
        "id": "19:fc5db2aed489454e8f8c06829ed6c986@thread.skype",
        "name": "Marketing"
    }]
}

.NET の例

次の例では、FetchChannelListボット ビルダー SDK for .NET Teams拡張機能からの呼び出しを使用します

ConversationList channels = client.GetTeamsConnectorClient().Teams.FetchChannelList(activity.GetChannelData<TeamsChannelData>().Team.Id);

Node.js例

次の例では、fetchChannelListボット ビルダー SDK Teams拡張機能からの呼び出しを使用Node.js。

var teamId = session.message.sourceEvent.team.id;
connector.fetchChannelList(
  (session.message.address).serviceUrl,
  teamId,
  (err, result) => {
    if (err) {
      session.endDialog('There is an error');
    }
    else {
      session.endDialog('%s', JSON.stringify(result));
    }
  }
);

ボット コンテキストで clientInfo を取得する

ボットのアクティビティ内で clientInfo をフェッチできます。 clientInfo には、次のプロパティが含まれます。

  • Locale
  • プラットフォーム
  • タイムゾーン

JSON の例

[
    {
        "type": "clientInfo",
        "locale": "en-US",
        "country": "US",
        "platform": "Windows",
        "timezone": "Asia/Calcutta"
    }
]

C#例

var connector = new ConnectorClient(new Uri(context.Activity.ServiceUrl));

{
    var clientinfo = context.Activity.Entities[0];
    await context.PostAsync($"ClientInfo: clientinfo ");
}

関連項目

ボット フレームワークのサンプル