API приложений для собраний
Расширяемость собраний предоставляет API-интерфейсы для улучшения взаимодействия с собраниями. С помощью перечисленных API можно выполнить следующее:
- Создавать приложения или интегрировать существующие приложения в жизненные циклы собраний.
- Использовать API для информирования вашего приложения о собрании.
- Выбрать необходимые API для улучшения работы с собраниями.
Примечание.
Используйте клиентскую библиотеку Microsoft Teams JavaScript (TeamsJS) (версия 1.10 и более поздние версии) для единого входа для работы на боковой панели собрания.
В следующей таблице представлен список API, доступных в библиотеке JavaScript в Microsoft Teams и пакетах SDK Microsoft Bot Framework:
Метод | Описание | Источник |
---|---|---|
Получить пользовательский контекст | Получите контекстную информацию для отображения соответствующего содержимого на вкладке Microsoft Teams. | Библиотека TeamsJS |
Получение участника | Получить информацию об участнике по идентификатору собрания и идентификатору участника. | Пакет SDK для Microsoft Bot Framework |
Отправить уведомление о собрании | Предоставляет сигналы собрания с помощью существующего API уведомлений о беседах для чата пользователя-бота и позволяет уведомлять пользователя о действиях, отображающих уведомление о собрании. | Пакет SDK для Microsoft Bot Framework |
Получить сведения о собрании | Получите статические метаданные собрания. | Пакет SDK для Microsoft Bot Framework |
Отправляйте субтитры в реальном времени | Отправка субтитров к текущему собранию в режиме реального времени. | Библиотека TeamsJS |
Делитесь содержимым приложения на сцене | Поделитесь определенными частями приложения на сцене собрания с боковой панели приложения в собрании. | Библиотека TeamsJS |
Получать события собраний Teams в режиме реального времени | Узнавать о событиях собраний в режиме реального времени, таких как фактическое время начала и окончания. | Пакет SDK для Microsoft Bot Framework |
Получение состояния входящего звука | Позволяет приложению получить параметр состояния входящего звука для пользователя собрания. | Библиотека TeamsJS |
Переключение входящего звука | Позволяет приложению переключать параметр состояния входящего звука для пользователя собрания с включения звука или наоборот. | Библиотека TeamsJS |
Получить API пользовательского контекста
Как определить и получить контекстную информацию для содержимого вкладки, можно узнать в разделеПолучение контекста вкладки Teams. meetingId
используется вкладкой, работающей в контексте собрания, и добавляется для полезных данных ответа.
Получить API участника
API GetParticipant
должен иметь регистрацию бота и идентификатор для создания токенов авторизации Подробнее в разделе Регистрация и идентификатор бота..
Примечание.
- Тип пользователя не включен в API getParticipantRole .
- Не кэшируйте роли участников, так как организатор собрания может изменить роли в любое время.
- Сейчас API
GetParticipant
поддерживается только для списков рассылки или реестров до 350 участников.
Параметры запроса
Совет
Получите идентификаторы участников и арендаторов на вкладке проверки подлинности единого входа.
API Meeting
должен иметь meetingId
, participantId
и tenantId
в качестве параметров URL-адреса. Параметры доступны как часть клиентской библиотеки JavaScript (TeamsJS) Microsoft Teams и действия бота.
В следующей таблице приведены параметры запроса:
Значение | Тип | Обязательный | Описание |
---|---|---|---|
meetingId | String | Да | Идентификатор собрания доступен через Bot Invoke и библиотеку TeamsJS. |
participantId | String | Да | Идентификатор участника — это идентификатор пользователя. Он доступен в библиотеках Tab SSO, Bot Invoke и TeamsJS. Рекомендуется получить идентификатор участника из Tab SSO. |
tenantId | Строка | Да | Идентификатор клиента требуется для пользователей клиентов. Он доступен в библиотеках Tab SSO, Bot Invoke и TeamsJS. Рекомендуется получить идентификатор клиента из Tab SSO. |
Пример
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 | Идентификатор пользователя. |
user.aadObjectId | Идентификатор объекта Azure Active Directory пользователя. |
user.name | Имя пользователя. |
user.givenName | Имя пользователя. |
user.surname | Фамилия пользователя. |
user.email | Идентификатор почты пользователя. |
user.userPrincipalName | Имя участника-пользователя. |
user.tenantId | Идентификатор клиента Azure Active Directory. |
user.userRole | Роль пользователя. Например, "admin" или "user". |
meeting.role | Роль участника в собрании. Например, "Организатор", "Выступающий" или "Участник". |
meeting.inMeeting | Значение, указывающее, находится ли участник в собрании. |
conversation.id | Идентификатор чата собрания. |
conversation.isGroup | Логическое значение, указывающее, имеет ли беседа более двух участников. |
Коды ответа
В следующей таблице приведены коды ответов:
Код ответа | Описание |
---|---|
403 | Полученные сведения об участниках не передаются приложению. Если приложение не установлено в собрании, оно вызывает ошибочный отклик 403. Если администратор клиента отключает или блокирует приложение во время динамической миграции сайта, это вызывает ошибочный отклик 403. |
200 | Сведения об участнике успешно извлечены. |
401 | Приложение отвечает недопустимым токеном |
404 | Срок действия собрания истек или участники недоступны. |
Отправить уведомление о собрании
Все пользователи на собрании получают уведомления, отправленные с помощью полезных данных уведомлений на собрании. Полезные данные уведомлений на собрании запускают уведомление на собрании и позволяют вам предоставлять сигналы собрания, которые доставляются с использованием существующего API-интерфейса уведомления о разговоре для чата пользователя с ботом. Вы можете отправить уведомление на собрании на основе действий пользователя. Эти полезные данные доступны через службы ботов.
Вы также можете отправить целевое уведомление на собрании конкретному участнику собрания. Дополнительные сведения см. в разделе Уведомление о целевом собрании.
Примечание.
- Когда вызывается уведомление о собрании, содержимое представляется в виде сообщения чата.
- Вы должны вызвать функцию submitTask() для автоматического закрытия после того, как пользователь выполнит действие в веб-представлении. Это требование для отправки приложения. Подробнее в статье Модуль задач Teams SDK.
- Если вы хотите, чтобы ваше приложение поддерживало анонимных пользователей, полезная нагрузка начального запроса на вызов должна полагаться на
from.id
метаданные запросаfrom
в объекте, а не наfrom.aadObjectId
метаданные запроса.from.id
— это идентификатор пользователя, аfrom.aadObjectId
— идентификатор Microsoft Azure Active Directory (Azure AD) пользователя. Подробнее в разделеиспользование модулей задач на вкладках и создание и отправка модуля задач..
Параметр запроса
В следующей таблице содержится параметр запроса:
Значение | Тип | Обязательный | Описание |
---|---|---|---|
conversationId | Строка | Да | Идентификатор беседы доступен как часть вызова бота. |
Примеры
Bot ID
объявляется в манифесте, и бот получает результирующий объект.
Примечание.
- Параметр
completionBotId
externalResourceUrl
является необязательным в запрашиваемом примере полезных данных - Параметры ширины и высоты
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 | Идентификатор родительского или корневого сообщения потока. |
APP_ID | Идентификатор приложения, объявленный в манифесте. |
completionBotId | Идентификатор приложения бота. |
Коды ответа
В следующей таблице содержатся коды ответов:
Код ответа | Описание |
---|---|
201 | Действие с сигналом успешно отправлено. |
401 | Приложение отвечает недопустимым токеном |
403 | Приложению не удалось отправить сигнал. Код отклика 403 может возникать по разным причинам, например, когда администратор клиента отключает и аварийно завершает работу приложения во время динамической миграции сайта. В этом случае полезные данные содержат подробное сообщение об ошибке. |
404 | Чат собрания не существует. |
API уведомлений о целевом собрании
targetedMeetingNotification
API позволяет приложениям отправлять целевые уведомления о собрании определенным участникам собрания. Приложения отправляют целевые уведомления на собрании на основе действий пользователя. API доступен через API бота.
Предварительное условие
Необходимо настроить манифест приложения с разрешениями RSC в свойстве webApplicationInfo
, чтобы отправлять целевые уведомления о собрании определенным участникам собрания. Используйте следующие примеры для настройки манифеста:
Для манифеста приложения версии 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-адресом.
- Форматы идентификатора пользователя aadObjectid и UPN не поддерживаются.
Получите поддерживаемый формат идентификатора пользователя для целевого уведомления о собрании:
Пример
Ниже приведен пример полезных данных запроса для целевого уведомления о собрании.
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 |
Идентификатор собрания доступен через вызов бота и библиотеку TeamsJS. |
type |
targetedMeetingNotification |
recipients |
Список идентификаторов пользователей. Получение идентификаторов пользователей для участников собрания с помощью GET API участника. Получите весь список списка чатов с помощью API получения участников. Пустой или пустой список получателей вернет 400. |
surface |
Тип поверхности. Поддерживаемый тип поверхности — meetingStage . |
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 доступен через службы ботов. Сейчас как частные запланированные или повторяющиеся собрания, так и запланированные или повторяющиеся собрания канала поддерживают API с различными разрешениями RSC соответственно.
API Meeting Details
должен иметь регистрацию бота и идентификатор бота. Для получения TurnContext
требуется bot SDK. Чтобы использовать API сведений о собрании, вы должны получить различные разрешения RSC в зависимости от области собрания, например закрытого собрания или собрания канала.
Предварительное условие
Чтобы использовать API сведений о собрании, вы должны получить различные разрешения RSC в зависимости от области собрания, например закрытого собрания или собрания канала.
Для манифеста приложения версии 1.12 и более поздних
Используйте следующий пример, чтобы настроить манифест и authorization
свойства манифеста webApplicationInfo
приложения для любого закрытого собрания:
"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
в манифест для разрешения RSC. - Для один-на-один вызов
organizer
является инициатором чата, а для групповых вызововorganizer
— инициатором звонка. Для собраний в общедоступных каналахorganizer
— это пользователь, создавший запись канала.
Параметр запроса
В следующей таблице перечислены параметры запроса:
Значение | Тип | Обязательный | Описание |
---|---|---|---|
meetingId | String | Да | Идентификатор собрания доступен через Bot Invoke и библиотеку 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. |
details.msGraphResourceId | MsGraphResourceId, используемый специально для вызовов MS API Graph. |
details.scheduledStartTime | Запланированное время начала собрания в формате UTC. |
details.scheduledEndTime | Запланированное время окончания собрания в формате UTC. |
details.joinUrl | URL-адрес, используемый для присоединения к собранию. |
details.title | Название собрания. |
details.type | Тип собрания (OneToOneCall, GroupCall, Scheduled, Повторяющийся, MeetNow, ChannelScheduled и ChannelRecurring). |
conversation.isGroup | Логическое значение, указывающее, имеет ли беседа более двух участников. |
conversation.conversationType | Тип беседы. |
conversation.id | Идентификатор чата собрания. |
organizer.id | Идентификатор пользователя организатора. |
organizer.aadObjectId | Идентификатор объекта Azure Active Directory организатора. |
organizer.tenantId | Идентификатор клиента Azure Active Directory организатора. |
В случае типа повторяющегося собрания
startDate: указывает дату начала применения шаблона. Значение startDate должно соответствовать значению даты свойства start ресурса события. Первое событие собрания может не произойти в эту дату, если оно не соответствует шаблону.
endDate: указывает дату прекращения применения шаблона. Последнее вхождение собрания может не произойти в эту дату, если оно не соответствует шаблону.
API отправки субтитров в режиме реального времени
API отправки субтитров в режиме реального времени предоставляет конечную точку POST для субтитров перевода в режиме реального времени (CART) Teams, закрытых субтитров с человеческим типом. Текстовое содержимое, отправляемое в эту конечную точку, отображается конечным пользователям в собрании Teams, если для них включены субтитры.
URL-адрес CART
ВЫ можете получить URL-адрес CART для конечной точки POST на странице Параметры собрания в собрании Teams. Подробнее в разделе Субтитры CART на собрании Microsoft Teams. Вам не нужно изменять URL-адрес CART, чтобы использовать субтитры CART.
Параметр запроса
URL-адрес CART включает следующие параметры запроса:
Значение | Тип | Обязательный | Описание |
---|---|---|---|
meetingId | String | Да | Идентификатор собрания доступен через Bot Invoke и библиотеку 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 |
токен | 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
Метод
Ресурс | Метод | Описание |
---|---|---|
/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 | Недостаточно полномочий. Неверный или просроченный токен. Если вы получаете эту ошибку, создайте новый URL-адрес CART в Teams. |
404 | Собрание не найдено или не началось. Если вы получили эту ошибку, убедитесь, что вы начали собрание и выберите начальные субтитры. После включения субтитров на собрании вы можете начать публиковать субтитры на собрании. |
500 | Внутренняя ошибка сервера. Для получения дополнительной информации обратитесь в службу поддержки или оставьте отзыв. |
Получите API событий собраний Teams в реальном времени
Примечание.
События собраний Teams в режиме реального времени поддерживаются только для запланированных собраний.
Пользователь может получать информацию о собраниях в режиме реального времени. Как только приложение связывается с собранием, фактическое время начала и окончания собрания передается боту. Фактическое время начала и окончания собрания отличается от запланированного времени начала и окончания. API сведений о собрании предоставляет запланированное время начала и окончания. Событие предоставляет фактическое время начала и окончания.
Вы должны быть знакомы с объектомTurnContext
, доступным через Bot SDK. Объект Activity
в TurnContext
содержит полезные данные с фактическим временем начала и окончания. Для проведения собраний в реальном времени требуется зарегистрированный идентификатор бота на платформе Teams. Бот может автоматически получать событие начала или окончания собрания, добавляя ChannelMeeting.ReadBasic.Group
в манифест.
Предварительное условие
Манифест вашего приложения должен иметь свойство webApplicationInfo
для получения событий начала и окончания собрания. Используйте следующие примеры для настройки манифеста:
Для манифеста приложения версии 1.12 и более поздних
"webApplicationInfo": {
"id": "<bot id>",
"resource": "https://RscPermission",
},
"authorization": {
"permissions": {
"resourceSpecific": [
{
"name": "OnlineMeeting.ReadBasic.Chat",
"type": "Application"
}
]
}
}
Для манифеста приложения версии 1.11 и более ранних версий
"webApplicationInfo": {
"id": "<bot id>",
"resource": "https://RscPermission",
"applicationPermissions": [
"OnlineMeeting.ReadBasic.Chat"
]
}
Пример получения MeetingStartEndEventvalue
Бот получает событие через обработчик OnEventActivityAsync
. Чтобы десериализовать полезные данные JSON вводится объект модели для получения метаданных для собрания. Метаданные собрания в свойстве value
в полезных данных события. Создается объект модели MeetingStartEndEventvalue
, переменные элементы которого соответствуют ключам в свойстве value
в полезных данных события.
Примечание.
- Получить идентификатор собрания от
turnContext.ChannelData
. - Не используйте идентификатор беседы в качестве идентификатора собрания.
- Не используйте идентификатор собрания из полезных данных событий
turncontext.activity.value
.
В следующем коде показано, как захватить метаданные собрания MeetingType
, Title
, Id
, JoinUrl
, StartTime
и EndTime
из события начала и окончания собрания:
Событие начала собрания
// 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": "2021-04-29T16:10:41.1252256Z",
"id": "123",
"channelId": "msteams",
"serviceUrl": "https://microsoft.com",
"from": {
"id": "userID",
"aadObjectId": "aadOnjectId"
},
"conversation": {
"isGroup": true,
"tenantId": "tenantId",
"id": "thread id"
},
"recipient": {
"id": "user Id",
"name": "user name"
},
"entities": [
{
"locale": "en-US",
"country": "US",
"type": "clientInfo"
}
],
"channelData": {
"tenant": {
"id": "channel id"
},
"source": null,
"meeting": {
"id": "meeting id"
}
},
"value": {
"MeetingType": "Scheduled",
"Title": "Meeting Start/End Event",
"Id": "meeting id",
"JoinUrl": "url"
"StartTime": "2021-04-29T16:17:17.4388966Z"
},
"locale": "en-US"
}
Пример полезных данных события окончания собрания
В следующем коде приводится пример полезных данных события окончания собрания:
{
"name": "application/vnd.microsoft.meetingEnd",
"type": "event",
"timestamp": "2021-04-29T16:17:17.4388966Z",
"id": "123",
"channelId": "msteams",
"serviceUrl": "https://microsoft.com",
"from": {
"id": "user id",
"aadObjectId": "aadObjectId"
},
"conversation": {
"isGroup": true,
"tenantId": "tenantId",
"id": "thread id"
},
"recipient": {
"id": "user id",
"name": "user name"
},
"entities": [
{
"locale": "en-US",
"country": "US",
"type": "clientInfo"
}
],
"channelData": {
"tenant": {
"id": "channel id"
},
"source": null,
"meeting": {
"id": "meeting Id"
}
},
"value": {
"MeetingType": "Scheduled",
"Title": "Meeting Start/End Event in Canary",
"Id": "19:meeting_NTM3ZDJjOTUtZGRhOS00MzYxLTk5NDAtMzY4M2IzZWFjZGE1@thread.v2",
"JoinUrl": "url",
"EndTime": "2021-04-29T16:17:17.4388966Z"
},
"locale": "en-US"
}
Имя свойства | Описание |
---|---|
name | Имя пользователя. |
type | Тип действия. |
timestamp | Локальная дата и время сообщения, выраженные в формате ISO-8601. |
id | Идентификатор действия. |
channelId | Канал, с которым связано это действие. |
serviceUrl | URL-адрес службы, куда должны отправляться ответы на это действие. |
from.id | Идентификатор пользователя, отправившего запрос. |
from.aadObjectId | Идентификатор объекта Azure Active Directory пользователя, отправившего запрос. |
conversation.isGroup | Логическое значение, указывающее, имеет ли беседа более двух участников. |
conversation.tenantId | Идентификатор клиента Azure Active Directory беседы или собрания. |
conversation.id | Идентификатор чата собрания. |
recipient.id | Идентификатор пользователя, получающего запрос. |
recipient.name | Имя пользователя, получающего запрос. |
entities.locale | сущность, содержащая метаданные о языковом стандарте. |
entities.country | сущность, содержащая метаданные о стране. |
entities.type | сущность, которая содержит метаданные о клиенте. |
channelData.tenant.id | Идентификатор клиента Azure Active Directory. |
channelData.source | Имя источника, из которого запускается или вызывается событие. |
channelData.meeting.id | Идентификатор по умолчанию, связанный с собранием. |
Значение. MeetingType | Тип собрания. |
Значение. Название | Тема собрания. |
Значение. Id | Идентификатор по умолчанию, связанный с собранием. |
Значение. JoinUrl | URL-адрес присоединения собрания. |
Значение. Starttime | Время начала собрания в формате UTC. |
Значение. EndTime | Время окончания собрания в формате UTC. |
locale | Языковой стандарт сообщения, заданный клиентом. |
Получение состояния входящего звука
getIncomingClientAudioState
API позволяет приложению получить параметр состояния входящего звука для пользователя собрания. API доступен через библиотеку TeamsJS.
Примечание.
getIncomingClientAudioState
API для мобильных устройств доступен в общедоступной предварительной версии для разработчиков.- Согласие на использование конкретного ресурса доступно для манифеста версии 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 . Ошибка может содержать тип 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 . Ошибка может содержать тип SdkError ошибки или null при успешном выполнении переключателя. Результат может содержать значение true или false при успешном выполнении переключателя или значение NULL при сбое переключателя. Входящий звук отключается, если результат имеет значение true, и отключается, если результат имеет значение false. |
Код ответа
В следующей таблице приведены коды ответов:
Код ответа | Описание |
---|---|
500 | Внутренняя ошибка. |
501 | API не поддерживается в текущем контексте. |
1000 | Приложение не имеет необходимых разрешений для предоставления общего доступа к этапу. |
Пример кода
Название примера | Описание | .NET | Node.js | Манифест |
---|---|---|---|---|
Расширяемость собраний | Пример расширяемости собраний Teams для передачи маркеров. | Просмотр | Просмотр | Просмотр |
Уведомление на собрании | Демонстрирует реализацию уведомлений на собрании с помощью бота. | Просмотр | Просмотр | Просмотр |
Боковая панель собрания | Пример расширяемости собраний Teams для взаимодействия с боковой панелью в собрании. | Просмотр | Просмотр | |
Вкладка "Сведения" в собрании | В этом примере приложения показана функция расширения собраний Teams, с помощью которой пользователь может создать опрос, а участники могут отвечать на опрос на собрании. | Просмотр | Просмотр | Просмотр |
Пример событий собрания | В этом примере показаны события собраний Teams в режиме реального времени с помощью бота. | Просмотр | Просмотр | Просмотр |
Образец собрания для набора сотрудников | В этом примере приложения показан интерфейс собрания для сценария набора с помощью приложений на собраниях. | Просмотр | Просмотр | Просмотр |