会議アプリ 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": "v-prkamble@microsoft.com",
            "userPrincipalName": "v-prkamble@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": "v-prkamble@microsoft.com",
             "userPrincipalName": "v-prkamble@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/v-prkamble_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": "admin@M365x94626565.onmicrosoft.com",
            "userPrincipalName": "admin@M365x94626565.onmicrosoft.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": "m365x94626565.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 パラメーターとして meetingIdparticipantIdtenantId が必要です。 パラメーターは、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 ユーザーのオブジェクト ID をMicrosoft Entraします。
user.name ユーザーの名前
user.givenName ユーザーの名。
user.surname ユーザーの姓。
user.email ユーザーのメール ID。
user.userPrincipalName ユーザーの UPN。
user.tenantId テナント ID をMicrosoft Entraします。
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 はマニフェストで宣言され、ボットは結果オブジェクトを受け取ります。

注:

  • 要求されたペイロードの例では、externalResourceUrlcompletionBotId パラメーターは省略可能です。
  • 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 を介して使用できます。

前提条件

対象の会議内通知を送信し、会議の特定の参加者にアプリ アイコンのバッジを表示するには、プロパティの下webApplicationInfoRSC アクセス許可を持つアプリ マニフェストを構成する必要があります。 マニフェストを構成するには、次の例を使用します。


アプリ マニフェスト バージョン 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 形式 aadObjectidUPN はサポートされていません。

対象の会議内通知とアプリ アイコンのバッジに対してサポートされているユーザー 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 サーフェスの種類。 サポートされているサーフェスの種類は meetingStagemeetingTabIconです。
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キーワード (keyword)。 人のメンションについて説明します。
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 以降の場合

次の例を使用して、プライベート会議のアプリ マニフェスト webApplicationInfoauthorization プロパティを構成します。

"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 MSGraphResourceId。MS Graph API呼び出しに特に使用されます。
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.GroupOnlineMeeting.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"
    ]
}

会議の開始イベントまたは終了イベントを取得する例

ボットは、 および OnTeamsMeetingEndAsync ハンドラーを介して会議の開始イベントと会議終了イベントをOnTeamsMeetingStartAsync受け取ります。 会議イベントに関連する情報は、オブジェクトのMeetingStartEventDetails一部であり、メタデータ フィールド (、 joinUrlEndTimemeetingTypetitleidstartTimeなど) が含まれます。

注:

  • 会議 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 会話または会議のテナント ID をMicrosoft Entraします。
conversation.id 会議チャット ID。
recipient.id 要求を受け取るユーザーの ID。
recipient.name 要求を受け取るユーザーの名前。
entities.locale ロケールに関するメタデータを含むエンティティ。
entities.country 国に関するメタデータを含むエンティティ。
entities.type クライアントに関するメタデータを含むエンティティ。
channelData.tenant.id テナント ID をMicrosoft Entraします。
channelData.source イベントが発生または呼び出されるソース名。
channelData.meeting.id 会議に関連付けられている既定の ID。
値。MeetingType 会議の種類。
値。タイトル 会議の件名。
値。Id 会議に関連付けられている既定の ID。
値。JoinUrl 会議の参加 URL。
値。Starttime UTC での会議の開始時刻。
値。Endtime 会議の終了時刻 (UTC)。
locale クライアントによって設定されたメッセージのロケール。

会議参加者イベントを受信する

ボットは、参加者の参加イベントや退席イベントなどのリアルタイム会議イベントを受信できます。 ボットは、開発者ポータルでこれらのイベントをサブスクライブした場合にのみ、参加者イベントを受信できます。

注:

  • 参加者イベントは、スケジュールされた会議でのみサポートされます。
  • ボットが参加者イベントを受信するには、参加者が会議に参加または退出する前に、ボットを会議に追加してください。

参加者イベントをサブスクライブするには、次の手順に従います。

  1. 開発者ポータルでボット アプリを開くか、既存のアプリをインポートします。

  2. [ 会議イベント サブスクリプション ] セクションで、次のイベントを選択します。

    • 参加者参加
    • 参加者の休暇
  3. [保存] を選びます。

    参加者イベントの開発者ポータルの表示方法を示すスクリーンショット。

  4. RSC アクセス許可がアプリ マニフェストで構成されていることを OnlineMeetingParticipant.Read.Chat 確認します。

    アプリに RSC アクセス許可がない場合は、開発者ポータルのアプリの[アクセス許可構成]> セクションから追加します。 詳細については、「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 ライブラリを介して使用できます。

注:

  • モバイル用 API はgetIncomingClientAudioState、パブリック開発者プレビューで利用できます。
  • 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 はい コールバックには、2 つのパラメーター error と が result含まれています。 エラーには、 エラー の種類 SdkError または null オーディオフェッチが成功した場合に含めることができます。 結果には、オーディオフェッチが成功した場合は true または false 値、オーディオフェッチが失敗した場合は null を含めることができます。 結果が true の場合は受信オーディオがミュートされ、結果が false の場合はミュート解除されます。

応答コード

次の表に、応答コードを示します。

応答コード 説明
500 内部エラー。
501 API は、現在のコンテキストではサポートされていません。
1000 アプリには、共有のステージングを許可するための適切なアクセス許可がありません。

受信オーディオを切り替える

toggleIncomingClientAudio API を使用すると、会議ユーザーの受信オーディオ状態設定をミュートからミュート解除、またはその逆に切り替えることができます。 API は TeamsJS ライブラリを介して使用できます。

注:

  • モバイル用 API はtoggleIncomingClientAudio、パブリック開発者プレビューで利用できます。
  • マニフェスト バージョン 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 はい コールバックには、2 つのパラメーター error と が result含まれています。 エラーには、 エラー の種類 SdkError または null トグルが成功した場合に含めることができます。 結果には、トグルが成功した場合は true または false 値、トグルが失敗した場合は null を含めることができます。 結果が true の場合は受信オーディオがミュートされ、結果が false の場合はミュート解除されます。

応答コード

次の表に、応答コードを示します。

応答コード 説明
500 内部エラー。
501 API は、現在のコンテキストではサポートされていません。
1000 アプリには、共有のステージングを許可するための適切なアクセス許可がありません。

コード サンプル

サンプルの名前 説明 .NET Node.js マニフェスト
会議の拡張性 トークンを渡すための Teams 会議機能拡張サンプル。 表示 表示 表示
会議中の通知 ボットを使用して会議内通知を実装する方法を示します。 表示 表示 表示
会議のサイド パネル 会議内のサイド パネルと対話するための Teams 会議機能拡張サンプル。 表示 表示
会議の [詳細] タブ このサンプル アプリは、ユーザーが投票を作成でき、メンバーが会議で投票に回答できる Teams 会議機能を示しています。 表示 表示 表示
会議イベントのサンプル このサンプルでは、ボットを使用したリアルタイムの Teams 会議イベントを示します。 表示 表示 表示
採用会議のサンプル このサンプル アプリは、Apps In Meetings を使用した採用シナリオの会議エクスペリエンスを示しています。 表示 表示 表示

関連項目