会議アプリ API
会議機能拡張は、会議エクスペリエンスを強化するための API を提供します。 掲載されている API のヘルプを使用すると、次のことを実行できます。
- 会議のライフサイクル内でアプリをビルドしたり、既存のアプリを統合したりする。
- API を使用して、アプリに会議を認識させる。
- 会議のエクスペリエンスを向上させるために必要な API を選択する。
注:
シングル サインオン (SSO) を会議側パネルで機能させるには、 Microsoft Teams JavaScript クライアント ライブラリ (TeamsJS ) (バージョン: 1.10 以降) を使用します。
次の表に、Microsoft Teams JavaScript ライブラリと Microsoft Bot Framework SDK で使用できる API の一覧を示します。
メソッド | 説明 | ソース |
---|---|---|
ユーザー コンテキストを取得する | コンテキスト情報を取得して、関連するコンテンツをMicrosoft Teams タブに表示します。 | TeamsJS ライブラリ |
参加者を取得する | 会議 ID と参加者 ID によって参加者情報を取得します。 | Microsoft Bot Framework SDK |
会議中の通知を送信する | ユーザー ボット チャット用の既存の会話通知 API を使用して会議シグナルを提供し、ボットが会議内通知を示すユーザー アクションを通知できるようにします。 | Microsoft Bot Framework SDK |
会議の詳細を取得する | 会議の静的メタデータを取得します。 | Microsoft Bot Framework SDK |
リアルタイム キャプションを送信する | 進行中の会議にリアルタイム キャプションを送信します。 | TeamsJS ライブラリ |
アプリ コンテンツをステージに共有する | 会議でアプリのサイド パネルからアプリの特定の部分を会議ステージに対して共有します。 | TeamsJS ライブラリ |
リアルタイムの Teams 会議イベントを受信する | 会議の開始と終了、参加者の参加と退出など、リアルタイムの会議イベントを受信します。 | Microsoft Bot Framework SDK |
受信オーディオの状態を取得する | アプリが会議ユーザーの受信オーディオ状態設定を取得できるようにします。 | TeamsJS ライブラリ |
受信オーディオを切り替える | アプリで会議ユーザーの受信オーディオ状態設定をミュートからミュート解除、またはその逆に切り替えることができます。 | TeamsJS ライブラリ |
ユーザー コンテキストを取得する API
重要
- 既定では、 新しい Teams クライアントは Teams 会議のアプリのライト テーマをサポートします。 getContext API の
app.theme
プロパティがdefault
値を返すと、Teams クライアントは淡色テーマになります。 - 以前のバージョンの Teams クライアントでは、Teams 会議のアプリのダーク テーマとコントラスト テーマのみがサポートされています
タブ コンテンツのコンテキスト情報を識別して取得するには、Teams タブのコンテキストを取得する方法に関するページを参照してください。meetingId
は、会議コンテキストで実行されているタブによって使用され、応答ペイロードに追加されます。
例
会議の種類、ユーザーの種類、通話の種類に基づいてユーザー コンテキスト API を取得するための TeamsJS v2 応答を次に示します。
会議の種類
テナント内ユーザーのチャネル会議の JSON ペイロード応答を次に示します。
{ "app": { "locale": "en-us", "sessionId": "ff47ec00-e6a7-4dc1-a6ae-f44110f50c94", "theme": "default", "iconPositionVertical": 0, "osLocaleInfo": { "platform": "windows", "regionalFormat": "en-in", "shortDate": "dd-MM-yyyy", "longDate": "dd MMMM yyyy", "shortTime": "HH:mm", "longTime": "HH:mm:ss" }, "parentMessageId": "1678109354022", "userClickTime": 1678109521159, "userFileOpenPreference": "inline", "host": { "name": "Teams", "clientType": "desktop", "sessionId": "c3c3c0a0-f7a1-b070-6b89-c8cd1f380042", "ringId": "ring1" }, "appLaunchId": "7346ae66-5cac-47f9-8a0d-1228dac474cb" }, "page": { "id": "Test", "frameContext": "sidePanel", "subPageId": "", "isFullScreen": false, "isMultiWindow": true, "sourceOrigin": "" }, "user": { "id": "57efa5f3-273c-47e2-a871-4879e5d849cf", "displayName": "", "isCallingAllowed": undefined, "isPSTNCallingAllowed": undefined, "licenseType": "Unknown", "loginHint": "user@microsoft.com", "userPrincipalName": "user@microsoft.com", "tenant": { "id": "72f988bf-86f1-41af-91ab-2d7cd011db47", "teamsSku": "enterprise" } }, "channel": { "id": "19:49683807ffce4318ad6d6d7a24dbde45@thread.tacv2", "displayName": undefined, "relativeUrl": undefined, "membershipType": undefined, "defaultOneNoteSectionId": undefined, "ownerGroupId": undefined, "ownerTenantId": undefined }, "chat": { "id": "19:49683807ffce4318ad6d6d7a24dbde45@thread.tacv2" }, "meeting": { "id": "MCMxOTo0OTY4MzgwN2ZmY2U0MzE4YWQ2ZDZkN2EyNGRiZGU0NUB0aHJlYWQudGFjdjIjMTY3ODEwOTM1NDAyMg==" }, "sharepoint": undefined, "team": { "internalId": "19:b34aeec3f8e54240a5c283e86bfc4878@thread.tacv2", "displayName": undefined, "type": undefined, "groupId": undefined, "templateId": undefined, "isArchived": undefined, "userRole": 1 }, "sharePointSite": { "teamSiteUrl": "", "teamSiteDomain": "microsoft.sharepoint.com", "teamSitePath": "", "teamSiteId": "", "mySitePath": undefined, "mySiteDomain": undefined } }
ユーザーの種類
ゲスト ユーザーのスケジュールされたプライベート会議での JSON ペイロード応答を次に示します。
{ "app": { "locale": "en-us", "sessionId": "268beeb4-a52d-4ba8-b1c8-8b9f0b9b3492", "theme": "default", "iconPositionVertical": 23, "osLocaleInfo": { "platform": "windows", "regionalFormat": "en-in", "longDate": "dd MMMM yyyy", "shortDate": "dd-MM-yyyy", "longTime": "HH:mm:ss", "shortTime": "HH:mm" }, "parentMessageId": "", "userClickTime": 1678023265131, "userFileOpenPreference": "inline", "host": { "name": "Teams", "clientType": "desktop", "sessionId": "967c980b-1e41-a2cd-eac0-a4bff8f73ce7", "ringId": "ring1" }, "appLaunchId": "c35c4496-f28c-4107-8e6c-2dba09fb881a" }, "page": { "id": "Test", "frameContext": "content", "subPageId": "", "isFullScreen": false, "isMultiWindow": false, "sourceOrigin": NULL }, "user": { "id": "57efa5f3-273c-47e2-a871-4879e5d849cf", "displayName": undefined, "isCallingAllowed": undefined, "isPSTNCallingAllowed": undefined, "licenseType": "Unknown", "loginHint": "user@microsoft.com", "userPrincipalName": "user@microsoft.com", "tenant": { "id": "72f988bf-86f1-41af-91ab-2d7cd011db47", "teamsSku": "enterprise" } }, "channel": undefined, "chat": { "id": "19:meeting_YmU5NWM3NGEtZjMyMi00ZDg4LTk4OGUtMjUzMGJkZjRhMDhm@thread.v2" }, "meeting": { "id": "MCMxOTptZWV0aW5nX1ltVTVOV00zTkdFdFpqTXlNaTAwWkRnNExUazRPR1V0TWpVek1HSmtaalJoTURobUB0aHJlYWQudjIjMA==" }, "sharepoint": undefined, "team": undefined, "sharePointSite": { "teamSiteUrl": "", "teamSiteDomain": "microsoft.sharepoint.com", "teamSitePath": "", "teamSiteId": undefined, "mySitePath": "/personal/user_microsoft_com", "mySiteDomain": "microsoft-my.sharepoint.com" } }
通話の種類
テナント内ユーザーの 1 対 1 の呼び出しに対する JSON ペイロード応答を次に示します。
{ "app": { "locale": "en-us", "sessionId": "1b3dc47e-f6ae-4fe2-8ed6-844a505f3186", "theme": "dark", "iconPositionVertical": null, "osLocaleInfo": { "platform": "windows", "regionalFormat": "en-in", "shortDate": "dd-MM-yyyy", "longDate": "dd MMMM yyyy", "shortTime": "HH:mm", "longTime": "HH:mm:ss" }, "parentMessageId": "", "userClickTime": 1678088052473, "userFileOpenPreference": undefined, "host": { "name": "Teams", "clientType": "desktop", "sessionId": "", "ringId": "general" }, "appLaunchId": undefined }, "page": { "id": "Test", "frameContext": "sidePanel", "subPageId": "", "isFullScreen": undefined, "isMultiWindow": true, "sourceOrigin": "" }, "user": { "id": "e652dd92-dd63-4fcc-b5b2-2005681e8e9f", "displayName": undefined, "isCallingAllowed": undefined, "isPSTNCallingAllowed": undefined, "licenseType": "Unknown", "loginHint": "user@microsoft.com", "userPrincipalName": "user@microsoft.com", "tenant": { "id": "aa923623-ae61-49ee-b401-81f414b6ad5a", "teamsSku": "unknown" } }, "channel": undefined, "chat": { "id": "19:a74d8489-4455-4670-9581-7b38a8017c58_e652dd92-dd63-4fcc-b5b2-2005681e8e9f@unq.gbl.spaces" }, "meeting": { "id": "MCMxOTphNzRkODQ4OS00NDU1LTQ2NzAtOTU4MS03YjM4YTgwMTdjNThfZTY1MmRkOTItZGQ2My00ZmNjLWI1YjItMjAwNTY4MWU4ZTlmQHVucS5nYmwuc3BhY2VzIzA=" }, "sharepoint": undefined, "team": undefined, "sharePointSite": { "teamSiteUrl": undefined, "teamSiteDomain": "microsoft.sharepoint.com", "teamSitePath": undefined, "teamSiteId": undefined, "mySitePath": undefined, "mySiteDomain": undefined } }
参加者を取得する API
GetParticipant
API には、認証トークンを生成するために、ボットの登録と ID が必要です。 詳細については、ボットの登録と ID に関するページを参照してください。
注:
- ユーザーの種類は getParticipantRole API には含まれません。
- 会議の開催者はいつでもロールを変更できるため、参加者のロールをキャッシュしないでください。
-
GetParticipant
API は、参加者が 350 人未満の配布リストまたは名簿でのみサポートされます。
クエリ パラメーター
ヒント
参加者 ID とテナント ID は、タブの SSO 認証から取得します。
Meeting
API には、URL パラメーターとして meetingId
、participantId
、tenantId
が必要です。 パラメーターは、Microsoft Teams JavaScript クライアント ライブラリ (TeamsJS) ライブラリとボット アクティビティの一部として使用できます。
次の表に、クエリ パラメーターを示します。
値 | 型 | 必須 | 説明 |
---|---|---|---|
meetingId | String | はい | 会議識別子は、ボット呼び出しと TeamsJS ライブラリを通じて使用できます。 |
participantId | String | はい | 参加者 ID はユーザー ID です。 タブ SSO、ボット呼び出し、TeamsJS ライブラリで使用できます。 タブ SSO から参加者 ID を取得することをお勧めします。 |
tenantId | String | はい | テナント ユーザーにはテナント ID が必要です。 タブ SSO、ボット呼び出し、TeamsJS ライブラリで使用できます。 タブ SSO からテナント ID を取得することをお勧めします。 |
例
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
// Gets the details for the given meeting participant.
// This only works in Teams meeting scoped conversations.
TeamsMeetingParticipant participant = await TeamsInfo.GetMeetingParticipantAsync(turnContext, "yourMeetingId", "yourParticipantId", "yourParticipantTenantId").ConfigureAwait(false);
TeamsChannelAccount member = participant.User;
MeetingParticipantInfo meetingInfo = participant.Meeting;
ConversationAccount conversation = participant.Conversation;
// Sends a message activity to the sender of the incoming activity.
await turnContext.SendActivityAsync(MessageFactory.Text($"The participant role is: {meetingInfo.Role}"), cancellationToken);
}
プロパティ名 | 説明 |
---|---|
user.id | ユーザーの ID。 |
user.aadObjectId | ユーザーの Microsoft Entra オブジェクト ID。 |
user.name | ユーザーの名前 |
user.givenName | ユーザーの名。 |
user.surname | ユーザーの姓。 |
user.email | ユーザーのメール ID。 |
user.userPrincipalName | ユーザーの UPN。 |
user.tenantId | Microsoft Entra テナント ID。 |
user.userRole | ユーザーのロール。 たとえば、'admin' や 'user' などです。 |
meeting.role | 会議での参加者の役割。 たとえば、"開催者" や "発表者" や "出席者" などです。 |
meeting.inMeeting | 参加者が会議に参加しているかどうかを示す値。 |
conversation.id | 会議チャット ID。 |
conversation.isGroup | 会話に 2 人以上の参加者があるかどうかを示すブール値。 |
応答コード
次の表に、応答コードを示します。
応答コード | 説明 |
---|---|
403 | 参加者情報の取得がアプリと共有されていません。 アプリが会議にインストールされていない場合は、エラー応答 403 がトリガーされます。 ライブ サイト移行中にテナント管理者がアプリを無効化またはブロックすると、エラー応答 403 がトリガーされます。 |
200 | 参加者の情報が正常に取得されました。 |
401 | アプリは無効なトークンで応答しました。 |
404 | 会議の有効期限が切れているか、参加者が使用できません。 |
会議中の通知を送信する
会議のすべてのユーザーは、会議中の通知のペイロードを通して送信された通知を受け取ります。 会議中の通知のペイロードは、会議中の通知をトリガーし、ユーザー ボット チャット用の既存の会話通知 API を使用して配信される会議シグナルを提供することができます。 ユーザーの操作に基づいて、会議中の通知を送信できます。 ペイロードは Bot Service を通して入手できます。
また、会議の特定の参加者に、対象の会議内通知を送信することもできます。 詳細については、「 対象の会議内通知」を参照してください。
注:
- 会議中の通知が呼び出されると、コンテンツはチャット メッセージとして提示されます。
- ユーザーが Web ビューでアクションを実行した後に自動的に閉じるには、submitTask() 関数を呼び出す必要があります。 これは、アプリの申請の要件です。 詳細については、Teams SDK のタスク モジュールをご覧ください。
- アプリで匿名ユーザーをサポートする場合は、最初の呼び出し要求ペイロードが、
from.aadObjectId
要求メタデータではなく、from
オブジェクトのfrom.id
要求メタデータに依存している必要があります。from.id
はユーザー ID、from.aadObjectId
はユーザーの Microsoft Entra ID です。 詳細については、「タブでタスク モジュールを使用する」と「タスク モジュールの作成と送信」をご覧ください。
クエリ パラメーター
次の表に、クエリ パラメーターを示します。
値 | 型 | 必須 | 説明 |
---|---|---|---|
conversationId | String | はい | 会話識別子は Bot Invoke の一部として入手できます。 |
例
Bot ID
はマニフェストで宣言され、ボットは結果オブジェクトを受け取ります。
注:
- 要求されたペイロードの例では、
externalResourceUrl
のcompletionBotId
パラメーターは省略可能です。 -
externalResourceUrl
の幅と高さのパラメーターは、ピクセル単位にする必要があります。 詳細については、デザイン ガイドラインのページをご覧ください。 - URL は、会議中の通知に
<iframe>
として読み込まれるページです。 ドメインは、アプリのマニフェストでアプリのvalidDomains
配列に含まれている必要があります。
// Specifies the type of text data in a message attachment.
Activity activity = MessageFactory.Text("This is a meeting signal test");
// Configures the current activity to generate a notification within Teams.
activity.TeamsNotifyUser(true, "https://teams.microsoft.com/l/bubble/APP_ID?url=<url>&height=<height>&width=<width>&title=<title>&completionBotId=BOT_APP_ID");
// Sends a message activity to the sender of the incoming activity.
await turnContext.SendActivityAsync(activity).ConfigureAwait(false);
プロパティ名 | 説明 |
---|---|
type | 動作状況の種類。 |
text | メッセージのテキスト コンテンツ。 |
summary | メッセージの概要テキスト。 |
channelData.notification.alertInMeeting | 会議中に通知をユーザーに表示するかどうかを示すブール値。 |
channelData.notification.externalResourceUrl | 通知の外部リソース URL の値。 |
replyToId | スレッドの親メッセージまたはルート メッセージの ID。 |
APP_ID | マニフェストで宣言されたアプリ ID。 |
completionBotId | ボット アプリ ID。 |
応答コード
次の表に、応答コードを示します。
応答コード | 説明 |
---|---|
201 | シグナルを含むアクティビティが正常に送信されました。 |
401 | アプリは無効なトークンで応答しました。 |
403 | アプリがシグナルを送信できません。 403 応答コードは、ライブ サイト移行中にテナント管理者がアプリを無効にしてブロックするなど、さまざまな理由で発生する可能性があります。 この場合、ペイロードには詳細なエラー メッセージが含まれています。 |
404 | 会議チャットが存在しません。 |
対象となる会議の通知とアプリ アイコンのバッジ API
targetedMeetingNotification
API を使用すると、アプリは対象の会議内通知を送信でき、会議の特定の参加者にアプリ アイコンのバッジが表示されます。 アプリは、ユーザーのアクションに基づいて、対象の会議内通知とアプリ アイコンのバッジを送信します。 API はボット API を介して使用できます。
前提条件
対象の会議内通知を送信し、会議の特定の参加者にアプリ アイコンのバッジを表示するには、webApplicationInfo
プロパティの下の RSC アクセス許可を使用してアプリ マニフェストを構成する必要があります。 マニフェストを構成するには、次の例を使用します。
アプリ マニフェスト バージョン 1.12 以降の場合
"webApplicationInfo": {
"id": "<<MICROSOFT-APP-ID>>",
"resource": "https://RscBasedStoreApp" },
"authorization": {
"permissions": {
"resourceSpecific": [
{
"name": "OnlineMeetingNotification.Send.Chat",
"type": "Application"
}
]
}
}
アプリ マニフェスト バージョン 1.11 以前の場合
"webApplicationInfo": {
"id": "<<MICROSOFT-APP-ID>>",
"resource": "https://RscBasedStoreApp",
"applicationPermissions": [
"OnlineMeetingNotification.Send.Chat"
]
}
注:
- API ペイロードでは、URL を含むダイアログのみが許可されます。
- ユーザー ID 形式 aadObjectid と UPN はサポートされていません。
対象の会議内通知とアプリ アイコンのバッジに対してサポートされているユーザー ID 形式を取得します。
例
次に、対象の会議内通知とアプリ アイコンのバッジに対する要求ペイロードの例を示します。
POST /v1/meetings/{meetingId}/notification
{
"type": "targetedMeetingNotification",
"value": {
"recipients": [
"29:1I12M_iy2wTa97T6LbjTh4rJCWrtw2PZ3lxpD3yFv8j2YPnweY2lpCPPAn3RI0PP7rghfHauUz48I1t7ANhj4CA"
],
"surfaces": [
{
"surface": "meetingStage",
"contentType": "task",
"content": {
"value": {
"height": "300",
"width": "400",
"title": "Targeted meeting Notification",
"url": "https://somevalidurl.com"
}
}
}
]
},
"channelData": { // optional if a developer doesn't want to support user attributes.
"onBehalfOf": [
{
"itemid": 0,
"mentionType": "person",
"mri": "29:1mDOCfGM9825lMHlwP8NjIVMJeQAbN-ojYBT5VzQfPpnst1IFQeYB1QXC8Zupn2RhgfLIW27HmynQk-4bdx_YhA",
"displayName": "yunny chung" }
]
}
}
プロパティ名 | 説明 |
---|---|
meetingId |
会議 ID は、ボット呼び出しと TeamsJS ライブラリを通じて使用できます。 |
type |
targetedMeetingNotification |
recipients |
ユーザー ID の一覧。 Get participant API を使用して、会議参加者のユーザー ID を取得します。 メンバーの取得 API を使用して、チャット名簿の一覧全体 を取得します。 空または null の受信者リストは 400 を返します。 |
surface |
サーフェスの種類。 サポートされるサーフェスタイプは、 meetingStage と meetingTabIcon です。 |
surfaces |
通知をレンダリングできるサーフェスの一覧。 |
contentType |
対象の会議内通知がレンダリングするコンテンツの種類。 サポートされている値は task 。 |
content |
TaskModuleContinueResponse |
content.value.height |
省略可能。通知の高さを要求しました。 |
content.value.width |
省略可能。通知の幅を要求しました。 |
content.value.title |
省略可能。通知のタイトル。 |
content.value.url |
省略可能。通知でレンダリングされる URL。 URL がアプリ マニフェストの validDomains の一部であることを確認します。 空の文字列または URL が指定されていない場合、会議通知には何も表示されません。 |
ChannelData.OnBehalfOf |
省略可能。これは 、ユーザー属性をサポートするためです。 |
onBehalfOf.itemid |
アイテムの識別について説明します。 値は 0 にする必要があります。 |
onBehalfOf.mentionType |
person キーワード。 人のメンションについて説明します。 |
onBehalfOf.mri |
送信者として表示されるユーザー MRI。 |
onBehalfOf.displayName |
省略可能。 person の名前。 名前解決が使用できない場合にフォールバックとして使用されます。 |
注:
無効な入力を指定すると、API は状態コード 400 を返します。
応答コード
次の表に、応答コードを示します。
応答コード | 説明 |
---|---|
202 | 通知が正常に送信されました。 |
207 | 通知は少数の参加者にのみ送信されます。 |
400 | 会議通知要求ペイロードの検証に失敗しました。 |
401 | ボット トークンが無効です。 |
403 | ボットは通知を送信できません。 |
404 | 会議チャットが見つからないか、名簿に参加者が見つかりませんでした。 |
会議の詳細を取得する API
会議の詳細 API を使用すると、アプリで会議の静的なメタデータを取得できます。 このメタデータは、動的には変更されないデータ ポイントを提供します。 この API は、Bot Service を通して利用できます。 プライベートスケジュールされた会議と定期的な会議、チャネルのスケジュールされた会議または定期的な会議の両方で、それぞれ異なる RSC アクセス許可を持つ API がサポートされます。
会議の詳細 API には、ボットの登録とボット ID が必要です。 Bot SDK で TurnContext
を取得する必要があります。 会議の詳細 API を使用するには、プライベート会議やチャネル会議など、会議のスコープに基づいて異なる RSC アクセス許可を取得する必要があります。
注:
会議の詳細 API は、スケジュールされたプライベート会議、スケジュールされたチャネル会議、インスタント会議 (今すぐ会議)、1 対 1 通話、Teams デスクトップクライアントとモバイル クライアントでのグループ通話でサポートされています。
前提条件
会議の詳細 API を使用するには、プライベート会議やチャネル会議など、会議のスコープに基づいて異なる RSC アクセス許可を取得する必要があります。
アプリ マニフェスト バージョン 1.12 以降の場合
次の例を使用して、プライベート会議のアプリ マニフェストの webApplicationInfo
と authorization
プロパティを構成します。
"webApplicationInfo": {
"id": "<bot id>",
"resource": "https://RscPermission",
},
"authorization": {
"permissions": {
"resourceSpecific": [
{
"name": "OnlineMeeting.ReadBasic.Chat",
"type": "Application"
}
]
}
}
次の例では、チャネル会議についてアプリ マニフェストの webApplicationInfo
および authorization
プロパティを構成します。
"webApplicationInfo": {
"id": "<bot id>",
"resource": "https://RscPermission",
},
"authorization": {
"permissions": {
"resourceSpecific": [
{
"name": "ChannelMeeting.ReadBasic.Group",
"type": "Application"
}
]
}
}
アプリ マニフェスト バージョン 1.11 以前の場合
次の例では、プライベート会議についてアプリ マニフェストの webApplicationInfo
プロパティを構成します。
"webApplicationInfo": {
"id": "<bot id>",
"resource": "https://RscPermission",
"applicationPermissions": [
"OnlineMeeting.ReadBasic.Chat"
]
}
次の例では、チャネル会議についてアプリ マニフェストの webApplicationInfo
プロパティを構成します。
"webApplicationInfo": {
"id": "<bot id>",
"resource": "https://RscPermission",
"applicationPermissions": [
"ChannelMeeting.ReadBasic.Group"
]
}
注:
-
ChannelMeeting.ReadBasic.Group
アクセス許可がマニフェストに追加された場合、ボットは、ボットが追加されているすべてのチームで作成されたチャネル会議から会議の開始イベントまたは終了イベントを自動的に受信します。 - 1 対 1 の呼び出しの場合、
organizer
はチャットの発信側であり、グループ呼び出しの場合は呼び出しの発信側organizer
。 パブリック チャネル会議の場合、organizer
はチャネル投稿を作成したユーザーです。
クエリ パラメーター
次の表に、クエリ パラメーターを示します。
値 | 型 | 必須 | 説明 |
---|---|---|---|
meetingId | String | はい | 会議識別子は、ボット呼び出しと TeamsJS ライブラリを通じて使用できます。 |
例
// Gets the information for the given meeting id.
MeetingInfo result = await TeamsInfo.GetMeetingInfoAsync(turnContext);
// Sends a message activity to the sender of the incoming activity.
await turnContext.SendActivityAsync(JsonConvert.SerializeObject(result));
プロパティ名 | 説明 |
---|---|
details.id | BASE64 文字列としてエンコードされた会議の ID。 |
details.msGraphResourceId | MS Graph API 呼び出しに特に使用される MsGraphResourceId。 |
details.scheduledStartTime | 会議のスケジュールされた開始時刻 (UTC)。 |
details.scheduledEndTime | 会議のスケジュールされた終了時刻 (UTC)。 |
details.joinUrl | 会議に参加するために使用する URL。 |
details.title | 会議のタイトル。 |
details.type | 会議の種類 (OneToOneCall、GroupCall、Scheduled、Recurring、MeetNow、ChannelScheduled、ChannelRecurring)。 |
conversation.isGroup | 会話に 2 人以上の参加者があるかどうかを示すブール値。 |
conversation.conversationType | 会話の種類。 |
conversation.id | 会議チャット ID。 |
organizer.id | 開催者のユーザー ID。 |
organizer.aadObjectId | 開催者の Microsoft Entra オブジェクト ID。 |
organizer.tenantId | 開催者の Microsoft Entra テナント ID。 |
定期的な会議の種類の場合:
startDate: パターンの適用を開始する日付を指定します。 startDate の値は、イベント リソースの start プロパティの日付値に対応している必要があります。 この日付に会議が最初に発生した場合、パターンに合わない場合は発生しない可能性があります。
endDate: パターンの適用を停止する日付を指定します。 この日付に会議がパターンに合わない場合、会議の最後の発生が発生しない可能性があります。
リアルタイム キャプション API を送信する
リアルタイム キャプションの送信 API は、Teams コミュニケーション アクセス リアルタイム翻訳 (CART) キャプション (人間型のクローズド キャプション) の POST エンドポイントを公開します。 このエンドポイントに送信されるテキスト コンテンツは、キャプションが有効になっていると、Teams 会議のエンド ユーザーに表示されます。
CART URL
POST エンドポイントの CART URL は、Teams 会議の [会議オプション ] ページから取得できます。 詳細については、「Microsoft Teams 会議での CART キャプション」をご覧ください。 CART キャプションを使用するために CART URL を変更する必要はありません。
クエリ パラメーター
CART URL には、次のクエリ パラメーターが含まれています。
値 | 型 | 必須 | 説明 |
---|---|---|---|
meetingId | String | はい | 会議識別子は、ボット呼び出しと TeamsJS ライブラリを通じて使用できます。 例: meetingid=%7b%22tId%22%3a%2272f234bf-86f1-41af-91ab-2d7cd0321b47%22%2c%22oId%22%3a%22e071f268-4241-47f8-8cf3-fc6b84437f23%22%2c%22thId%22%3a%2219%3ameeting_NzJiMjNkMGQtYzk3NS00ZDI1LWJjN2QtMDgyODVhZmI3NzJj%40thread.v2%22%2c%22mId%22%3a%220%22%7d |
token | String | はい | 認可トークン。 例: token=04751eac |
例
https://api.captions.office.microsoft.com/cartcaption?meetingid=%7b%22tId%22%3a%2272f234bf-86f1-41af-91ab-2d7cd0321b47%22%2c%22oId%22%3a%22e071f268-4241-47f8-8cf3-fc6b84437f23%22%2c%22thId%22%3a%2219%3ameeting_NzJiMjNkMGQtYzk3NS00ZDI1LWJjN2QtMDgyODVhZmI3NzJj%40thread.v2%22%2c%22mId%22%3a%220%22%7d&token=gjs44ra
メソッド
Resource | メソッド | 説明 |
---|---|---|
/cartcaption | POST | 開始された会議のキャプションを処理します |
注:
すべての要求のコンテンツ タイプが UTF-8 エンコードのプレーンテキストであることを確認してください。 要求の本文には、キャプションのみが含まれます。
例
POST /cartcaption?meetingid=04751eac-30e6-47d9-9c3f-0b4ebe8e30d9&token=04751eac&lang=en-us HTTP/1.1
Host: api.captions.office.microsoft.com
Content-Type: text/plain
Content-Length: 22
Hello I’m Cortana, welcome to my meeting.
注:
各 POST 要求では、キャプションの新しい行が生成されます。 エンド ユーザーがコンテンツを読む十分な時間を確保するために、各 POST 要求の本文を 80 から 120 文字に制限してください。
エラー コード
次の表に、エラー コードを示します。
エラー コード | 説明 |
---|---|
400 | 要求が正しくありません。 応答本文に、詳細な情報があります。 たとえば、必要なパラメーターの一部が提示されていません。 |
401 | 権限がありません。 トークンが正しくないか、有効期限が切れています。 このエラーが発生した場合は、Teams で新しい CART URL を生成してください。 |
404 | 会議が見つからないか、開始されていません。 このエラーが発生した場合は、会議を開始してキャプションの開始を選択したことを確認してください。 会議でキャプションを有効にした後、会議へのキャプションの POST を開始できます。 |
500 | 内部サーバー エラー。 詳細については、サポートにお問い合わせいただくか、フィードバックをお寄せください。 |
リアルタイムの Teams 会議イベントを受信する
会議の開始や終了、参加者の参加や退出など、リアルタイムの会議イベントを受け取ることができます。
会議の開始イベントと終了イベントを受信する
注:
会議の開始イベントと終了イベントは、スケジュールされた会議とチャネル会議でサポートされます。
ユーザーはリアルタイムの会議イベントを受信できます。 アプリが会議に関連付けられるとすぐに、実際の会議の開始時刻と終了時刻がボットと共有されます。 会議の実際の開始時刻と終了時刻は、スケジュールされた開始時刻と終了時刻とは異なります。 会議の詳細 API は、スケジュールされた開始時刻と終了時刻を提供します。 イベントは、実際の開始時刻と終了時刻を提供します。
マニフェストに ChannelMeeting.ReadBasic.Group
と OnlineMeeting.ReadBasic.Chat
のアクセス許可が追加されると、ボットはスケジュールされた会議の種類とチャネルの会議の種類の会議の開始イベントまたは終了イベントの受信を自動的に開始します。
前提条件
アプリ マニフェストには、会議の開始イベントと終了イベントを受信するための webApplicationInfo
プロパティが必要です。 マニフェストを構成するには、次の例を使用します。
アプリ マニフェスト バージョン 1.12 以降の場合
"webApplicationInfo": {
"id": "<bot id>",
"resource": "https://RscPermission",
},
"authorization": {
"permissions": {
"resourceSpecific": [
{
"name": "OnlineMeeting.ReadBasic.Chat",
"type": "Application"
}
{
"name": "ChannelMeeting.ReadBasic.Group",
"type": "Application"
}
]
}
}
アプリ マニフェスト バージョン 1.11 以前の場合
"webApplicationInfo": {
"id": "<bot id>",
"resource": "https://RscPermission",
"applicationPermissions": [
"OnlineMeeting.ReadBasic.Chat",
"ChannelMeeting.ReadBasic.Group"
]
}
会議の開始イベントまたは終了イベントを取得する例
ボットは、 OnTeamsMeetingStartAsync
ハンドラーと OnTeamsMeetingEndAsync
ハンドラーを介して会議の開始イベントと会議終了イベントを受け取ります。 会議イベントに関連する情報は、 MeetingStartEventDetails
オブジェクトの一部であり、 meetingType
、 title
、 id
、 joinUrl
、 startTime
、 EndTime
などのメタデータ フィールドが含まれます。
注:
- 会議 ID は
turnContext.ChannelData
から取得します。 - 会話 ID は会議 ID として使用しないでください。
- 会議イベント ペイロード
turncontext.activity.value
からの会議 ID は使用しないでください。
次の例では、会議の開始イベントと終了イベントをキャプチャする方法を示します。
会議の開始イベント
// Invoked when a Teams Meeting Start event activity is received from the connector.
protected override async Task OnTeamsMeetingStartAsync(MeetingStartEventDetails meeting, ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken)
{
// Sends a message activity to the sender of the incoming activity.
await turnContext.SendActivityAsync(JsonConvert.SerializeObject(meeting));
}
会議の終了イベント
// Invoked when a Teams Meeting End event activity is received from the connector.
protected override async Task OnTeamsMeetingEndAsync(MeetingEndEventDetails meeting, ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken)
{
// Sends a message activity to the sender of the incoming activity.
await turnContext.SendActivityAsync(JsonConvert.SerializeObject(meeting));
}
会議の開始イベントのペイロードの例
次のコードは、会議の開始イベントのペイロードの例を示しています。
{
"name": " application/vnd.microsoft.meetingStart",
"type": "event",
"timestamp": "2023-02-23T19:34:07.478Z",
"localTimestamp": "2023-02-23T11:34:07.478-8",
"channelId": "msteams",
"serviceUrl": "https://smba.trafficmanager.net/teams/",
"from": {
"id": "user_id"
},
"conversation": {
"isGroup": true,
"conversationType": "groupchat",
"id": "conversation_id"
},
"recipient": {
"id": "28:65f50003-e15d-434a-9e14-0fcfeb3d7817"
},
"value": {
"id": "meeting_id",
"joinUrl": "join_url",
"title": "Example meeting",
"meetingType": "Scheduled",
"startTime": "2023-02-23T19:34:07.478Z"
},
"channelData": {
"tenant": {
"id": "tenant_id"
}
}
}
会議の終了イベントのペイロードの例
次のコードは、会議の終了イベントのペイロードの例を示しています。
{
"name": " application/vnd.microsoft.meetingEnd",
"type": "event",
"timestamp": "2023-02-23T19:34:07.478Z",
"localTimestamp": "2023-02-23T11:34:07.478-8",
"channelId": "msteams",
"serviceUrl": "https://smba.trafficmanager.net/teams/",
"from": {
"id": "user_id"
},
"conversation": {
"isGroup": true,
"conversationType": "groupchat",
"id": "conversation_id"
},
"recipient": {
"id": "28:65f50003-e15d-434a-9e14-0fcfeb3d7817"
},
"value": {
"id": "meeting_id",
"joinUrl": "join_url",
"title": "Example meeting",
"meetingType": "Scheduled",
"EndTime": "2023-02-23T20:30:07.478Z"
},
"channelData": {
"tenant": {
"id": "tenant_id"
}
}
}
プロパティ名 | 説明 |
---|---|
name | ユーザーの名前 |
type | アクティビティの種類。 |
timestamp | ISO-8601 形式で表されるメッセージのローカル日付と時刻。 |
id | アクティビティの ID。 |
channelId | このアクティビティが関連付けられているチャネル。 |
serviceUrl | このアクティビティへの応答を送信する必要があるサービス URL。 |
from.id | 要求を送信したユーザーの ID。 |
from.aadObjectId | 要求を送信したユーザーの Microsoft Entra オブジェクト ID。 |
conversation.isGroup | 会話に 2 人以上の参加者があるかどうかを示すブール値。 |
conversation.tenantId | 会話または会議の Microsoft Entra テナント ID。 |
conversation.id | 会議チャット ID。 |
recipient.id | 要求を受け取るユーザーの ID。 |
recipient.name | 要求を受け取るユーザーの名前。 |
entities.locale | ロケールに関するメタデータを含むエンティティ。 |
entities.country | 国に関するメタデータを含むエンティティ。 |
entities.type | クライアントに関するメタデータを含むエンティティ。 |
channelData.tenant.id | Microsoft Entra テナント ID。 |
channelData.source | イベントが発生または呼び出されるソース名。 |
channelData.meeting.id | 会議に関連付けられている既定の ID。 |
価値。MeetingType | 会議の種類。 |
価値。タイトル | 会議の件名。 |
価値。身分証明書 | 会議に関連付けられている既定の ID。 |
価値。JoinUrl | 会議の参加 URL。 |
価値。StartTime | UTC での会議の開始時刻。 |
価値。EndTime | 会議の終了時刻 (UTC)。 |
locale | クライアントによって設定されたメッセージのロケール。 |
会議参加者イベントを受信する
ボットは、参加者の参加イベントや退席イベントなどのリアルタイム会議イベントを受信できます。 ボットは、開発者ポータルでこれらのイベントをサブスクライブした場合にのみ、参加者イベントを受信できます。
注:
- 参加者イベントは、スケジュールされた会議でのみサポートされます。
- ボットが参加者イベントを受信するには、参加者が会議に参加または退出する前に、ボットを会議に追加してください。
参加者イベントをサブスクライブするには、次の手順に従います。
開発者ポータルでボット アプリを開くか、既存のアプリをインポートします。
[ 会議イベント サブスクリプション ] セクションで、次のイベントを選択します。
- 参加者参加
- 参加者の休暇
[保存] を選びます。
OnlineMeetingParticipant.Read.Chat
RSC アクセス許可がアプリ マニフェストで構成されていることを確認します。アプリに RSC アクセス許可がない場合は、開発者ポータルでアプリの [構成>Permissions ] セクションを使用して追加します。 詳細については、「RSC のアクセス許可」を参照してください。
次の例では、参加者の参加イベントと脱退イベントをキャプチャする方法を示します。
//Invoked on participant join a meeting
protected override async Task OnTeamsMeetingParticipantsJoinAsync(MeetingParticipantsEventDetails meeting, ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken)
{
await turnContext.SendActivityAsync("Member has joined the meeting.");
return;
}
参加者の参加と退出のイベント ペイロードの例を次に示します。
参加者参加イベント ペイロードの例を次に示します。
{
"type": "event",
"name": "application/vnd.microsoft.meetingParticipantJoin",
"timestamp": "2023-02-23T19:34:07.478Z",
"channelId": "msteams",
"serviceUrl": "https://smba.trafficmanager.net/amer/",
"from": {
"id": "29:id_xyz"
},
"conversation": {
"isGroup": true,
"conversationType": "groupchat",
"id": "19:meeting_threadId@thread.v2"
},
"recipient": {
"id": "28:botid"
},
"value": {
"members": [
{
"user": {
"tenantId": "tenantid",
"objectId": "user_object_Id",
"id": "29:userId ",
"name": "Test User",
"aadObjectId": " user_object_Id "
},
"meeting": {
"inMeeting": true,
"role": "Organizer" //Attendee, Organizer, Presenter
},
}],
},
"channelData": {
"tenant": {
"id": "tenantId"
},
"meeting": {
"id": "encoded_meetingId"
}
}
}
受信オーディオの状態を取得する
getIncomingClientAudioState
API を使用すると、アプリは会議ユーザーの受信オーディオ状態設定を取得できます。 API は TeamsJS ライブラリを介して使用できます。
注:
- モバイル用の
getIncomingClientAudioState
API は、 パブリック開発者プレビューで利用できます。 -
toggleIncomingClientAudio
API は、新しい Teams クライアントで使用できます。 - マニフェスト バージョン 1.12 以降のバージョンではリソース固有の同意を使用できるため、この API はマニフェスト バージョン 1.11 以前のバージョンでは機能しません。
マニフェスト
"authorization": {
"permissions": {
"resourceSpecific": [
{
"name": "OnlineMeetingParticipant.ToggleIncomingAudio.Chat",
"type": "Delegated"
}
]
}
}
例
callback = (errcode, result) => {
if (errcode) {
// Handle error code
}
else {
// Handle success code
}
}
// The getIncomingClientAudioState API shows the current audio state.
microsoftTeams.meeting.getIncomingClientAudioState(this.callback)
クエリ パラメーター
次の表に、クエリ パラメーターを示します。
値 | 型 | 必須 | 説明 |
---|---|---|---|
callback | String | はい | コールバックには、 error と result の 2 つのパラメーターが含まれています。
エラーには、SdkError エラーの種類が含まれているか、オーディオのフェッチが成功したときにnull できます。
結果には、オーディオフェッチが成功した場合は true または false 値、オーディオフェッチが失敗した場合は null を含めることができます。 結果が true の場合は受信オーディオがミュートされ、結果が false の場合はミュート解除されます。 |
応答コード
次の表に、応答コードを示します。
応答コード | 説明 |
---|---|
500 | 内部エラー。 |
501 | API は、現在のコンテキストではサポートされていません。 |
1000 | アプリには、共有のステージングを許可するための適切なアクセス許可がありません。 |
受信オーディオを切り替える
toggleIncomingClientAudio
API を使用すると、会議ユーザーの受信オーディオ状態設定をミュートからミュート解除、またはその逆に切り替えることができます。 API は TeamsJS ライブラリを介して使用できます。
注:
- モバイル用の
toggleIncomingClientAudio
API は、 パブリック開発者プレビューで利用できます。 - マニフェスト バージョン 1.12 以降のバージョンではリソース固有の同意を使用できるため、この API はマニフェスト バージョン 1.11 以前のバージョンでは機能しません。
マニフェスト
"authorization": {
"permissions": {
"resourceSpecific": [
{
"name": "OnlineMeetingParticipant.ToggleIncomingAudio.Chat",
"type": "Delegated"
}
]
}
}
例
callback = (error, result) => {
if (error) {
// Handle error code
}
else {
// Handle success code
}
}
// The toggleIncomingClientAudio API allows an app to toggle the incoming audio state.
microsoftTeams.meeting.toggleIncomingClientAudio(this.callback)
クエリ パラメーター
次の表に、クエリ パラメーターを示します。
値 | 型 | 必須 | 説明 |
---|---|---|---|
callback | String | はい | コールバックには、 error と result の 2 つのパラメーターが含まれています。
エラーには、SdkError エラーの種類が含まれるか、トグルが成功したときにnull できます。
結果には、トグルが成功した場合は true または false 値、トグルが失敗した場合は null を含めることができます。 結果が true の場合は受信オーディオがミュートされ、結果が false の場合はミュート解除されます。 |
応答コード
次の表に、応答コードを示します。
応答コード | 説明 |
---|---|
500 | 内部エラー。 |
501 | API は、現在のコンテキストではサポートされていません。 |
1000 | アプリには、共有のステージングを許可するための適切なアクセス許可がありません。 |
コード サンプル
サンプルの名前 | 説明 | .NET | Node.js | マニフェスト |
---|---|---|---|---|
会議の拡張性 | トークンを渡すための Teams 会議機能拡張サンプル。 | 表示 | 表示 | 表示 |
会議中の通知 | ボットを使用して会議内通知を実装する方法を示します。 | 表示 | 表示 | 表示 |
会議のサイド パネル | 会議内のサイド パネルと対話するための Teams 会議機能拡張サンプル。 | 表示 | 表示 | |
会議の [詳細] タブ | このサンプル アプリは、ユーザーが投票を作成でき、メンバーが会議で投票に回答できる Teams 会議機能を示しています。 | 表示 | 表示 | 表示 |
会議イベントのサンプル | このサンプルでは、ボットを使用したリアルタイムの Teams 会議イベントを示します。 | 表示 | 表示 | 表示 |
採用会議のサンプル | このサンプル アプリは、Apps In Meetings を使用した採用シナリオの会議エクスペリエンスを示しています。 | 表示 | 表示 | 表示 |
関連項目
Platform Docs