Microsoft Teams
“Полиште всі надії, ті, хто входить сюди.”Оновлено: 2026-01-21 Статус: підтримуються текст і вкладення в DM; надсилання файлів у каналах/групах потребує
sharePointSiteId + дозволів Graph (див. Надсилання файлів у групових чатах). Polls надсилаються через Adaptive Cards. Дії з повідомленнями надають явний upload-file для надсилань, де файл є основним.
Вбудований плагін
Microsoft Teams постачається як вбудований плагін у поточних випусках OpenClaw, тому в типовій пакетній збірці окреме встановлення не потрібне. Якщо ви використовуєте старішу збірку або власне встановлення без вбудованого Teams, установіть його вручну:Швидке налаштування (для початківців)
- Переконайтеся, що плагін Microsoft Teams доступний.
- У поточних пакетних випусках OpenClaw він уже вбудований.
- У старіших/власних установленнях його можна додати вручну за допомогою команд вище.
- Створіть Azure Bot (App ID + client secret + tenant ID).
- Налаштуйте OpenClaw із цими обліковими даними.
- Відкрийте
/api/messages(порт 3978 типово) через публічний URL або тунель. - Установіть пакет застосунку Teams і запустіть gateway.
channels.msteams.groupPolicy: "allowlist"). Щоб дозволити відповіді в групах, задайте channels.msteams.groupAllowFrom (або використайте groupPolicy: "open", щоб дозволити будь-якому учаснику, із перевіркою згадки).
Цілі
- Спілкуватися з OpenClaw через DM, групові чати або канали Teams.
- Зберігати детерміновану маршрутизацію: відповіді завжди повертаються в той канал, з якого вони надійшли.
- Типово використовувати безпечну поведінку каналів (потрібні згадки, якщо не налаштовано інакше).
Записи конфігурації
Типово Microsoft Teams має дозвіл на запис оновлень конфігурації, ініційованих через/config set|unset (потрібно commands.config: true).
Щоб вимкнути:
Керування доступом (DM + групи)
Доступ DM- Типово:
channels.msteams.dmPolicy = "pairing". Невідомі відправники ігноруються до схвалення. - У
channels.msteams.allowFromслід використовувати стабільні AAD object ID. - UPN/відображувані імена можуть змінюватися; пряме зіставлення типово вимкнене й вмикається лише через
channels.msteams.dangerouslyAllowNameMatching: true. - Майстер може розв’язувати імена в ID через Microsoft Graph, якщо облікові дані це дозволяють.
- Типово:
channels.msteams.groupPolicy = "allowlist"(заблоковано, доки ви не додастеgroupAllowFrom). Використовуйтеchannels.defaults.groupPolicy, щоб перевизначити типове значення, якщо його не задано. channels.msteams.groupAllowFromвизначає, які відправники можуть активувати в групових чатах/каналах (з резервним переходом доchannels.msteams.allowFrom).- Установіть
groupPolicy: "open", щоб дозволити будь-якого учасника (згадка все одно типово обов’язкова). - Щоб заборонити всі канали, установіть
channels.msteams.groupPolicy: "disabled".
- Обмежуйте відповіді в групах/каналах, перелічуючи команди й канали в
channels.msteams.teams. - Ключі мають використовувати стабільні team ID і conversation ID каналу.
- Коли
groupPolicy="allowlist"і задано список дозволених teams, приймаються лише перелічені команди/канали (із перевіркою згадки). - Майстер конфігурації приймає записи
Team/Channelі зберігає їх для вас. - Під час запуску OpenClaw розв’язує назви team/channel і списку дозволених користувачів в ID (коли це дозволяють права Graph)
і записує відповідність у журнали; нерозв’язані назви team/channel зберігаються як введені, але типово ігноруються для маршрутизації, якщо не ввімкнено
channels.msteams.dangerouslyAllowNameMatching: true.
Як це працює
- Переконайтеся, що плагін Microsoft Teams доступний.
- У поточних пакетних випусках OpenClaw він уже вбудований.
- У старіших/власних установленнях його можна додати вручну за допомогою команд вище.
- Створіть Azure Bot (App ID + secret + tenant ID).
- Створіть пакет застосунку Teams, який посилається на бота та містить наведені нижче дозволи RSC.
- Завантажте/установіть застосунок Teams у команду (або в особисту область для DM).
- Налаштуйте
msteamsу~/.openclaw/openclaw.json(або через змінні середовища) і запустіть gateway. - Gateway типово слухає трафік вебхуків Bot Framework на
/api/messages.
Налаштування Azure Bot (передумови)
Перш ніж налаштовувати OpenClaw, вам потрібно створити ресурс Azure Bot.Крок 1: Створіть Azure Bot
- Перейдіть на Create Azure Bot
-
Заповніть вкладку Basics:
Поле Значення Bot handle Назва вашого бота, наприклад openclaw-msteams(має бути унікальною)Subscription Виберіть свою підписку Azure Resource group Створіть нову або використайте наявну Pricing tier Free для розробки/тестування Type of App Single Tenant (рекомендовано — див. примітку нижче) Creation type Create new Microsoft App ID
Повідомлення про застарівання: створення нових multi-tenant bot було застаріло після 2025-07-31. Для нових ботів використовуйте Single Tenant.
- Натисніть Review + create → Create (зачекайте ~1-2 хвилини)
Крок 2: Отримайте облікові дані
- Перейдіть до свого ресурсу Azure Bot → Configuration
- Скопіюйте Microsoft App ID → це ваш
appId - Натисніть Manage Password → перейдіть до App Registration
- У розділі Certificates & secrets → New client secret → скопіюйте Value → це ваш
appPassword - Перейдіть до Overview → скопіюйте Directory (tenant) ID → це ваш
tenantId
Крок 3: Налаштуйте кінцеву точку обміну повідомленнями
- У Azure Bot → Configuration
- Установіть Messaging endpoint на URL свого вебхука:
- Продуктивне середовище:
https://your-domain.com/api/messages - Локальна розробка: використовуйте тунель (див. Локальна розробка нижче)
- Продуктивне середовище:
Крок 4: Увімкніть канал Teams
- У Azure Bot → Channels
- Натисніть Microsoft Teams → Configure → Save
- Прийміть Terms of Service
Локальна розробка (тунелювання)
Teams не може звертатися доlocalhost. Для локальної розробки використовуйте тунель:
Варіант A: ngrok
Teams Developer Portal (альтернатива)
Замість ручного створення ZIP із маніфестом ви можете використати Teams Developer Portal:- Натисніть + New app
- Заповніть основну інформацію (назва, опис, інформація про розробника)
- Перейдіть до App features → Bot
- Виберіть Enter a bot ID manually і вставте App ID свого Azure Bot
- Позначте області: Personal, Team, Group Chat
- Натисніть Distribute → Download app package
- У Teams: Apps → Manage your apps → Upload a custom app → виберіть ZIP
Тестування бота
Варіант A: Azure Web Chat (спочатку перевірте вебхук)- У Azure Portal → ваш ресурс Azure Bot → Test in Web Chat
- Надішліть повідомлення — ви маєте побачити відповідь
- Це підтверджує, що ваша кінцева точка вебхука працює до налаштування Teams
- Установіть застосунок Teams (sideload або каталог організації)
- Знайдіть бота в Teams і надішліть DM
- Перевірте журнали gateway на вхідну активність
Налаштування (мінімальне, лише текст)
-
Переконайтеся, що плагін Microsoft Teams доступний
- У поточних пакетних випусках OpenClaw він уже вбудований.
- У старіших/власних установленнях його можна додати вручну:
- З npm:
openclaw plugins install @openclaw/msteams - З локального checkout:
openclaw plugins install ./path/to/local/msteams-plugin
- З npm:
-
Реєстрація бота
- Створіть Azure Bot (див. вище) і занотуйте:
- App ID
- Client secret (App password)
- Tenant ID (single-tenant)
- Створіть Azure Bot (див. вище) і занотуйте:
-
Маніфест застосунку Teams
- Додайте запис
botзbotId = <App ID>. - Області:
personal,team,groupChat. supportsFiles: true(потрібно для обробки файлів в особистій області).- Додайте дозволи RSC (нижче).
- Створіть значки:
outline.png(32x32) іcolor.png(192x192). - Заархівуйте всі три файли разом:
manifest.json,outline.png,color.png.
- Додайте запис
-
Налаштуйте OpenClaw
Ви також можете використовувати змінні середовища замість ключів конфігурації:
MSTEAMS_APP_IDMSTEAMS_APP_PASSWORDMSTEAMS_TENANT_ID
-
Кінцева точка бота
- Установіть Azure Bot Messaging Endpoint на:
https://<host>:3978/api/messages(або вибраний вами шлях/порт).
- Установіть Azure Bot Messaging Endpoint на:
-
Запустіть gateway
- Канал Teams запускається автоматично, коли доступний вбудований або встановлений вручну плагін і конфігурація
msteamsіснує разом з обліковими даними.
- Канал Teams запускається автоматично, коли доступний вбудований або встановлений вручну плагін і конфігурація
Дія інформації про учасника
OpenClaw надає для Microsoft Teams діюmember-info, що працює через Graph, щоб агенти та автоматизації могли безпосередньо розв’язувати дані про учасників каналу (відображуване ім’я, email, роль) через Microsoft Graph.
Вимоги:
- Дозвіл RSC
Member.Read.Group(уже є в рекомендованому маніфесті) - Для міжкомандних пошуків: дозвіл Graph Application
User.Read.Allз admin consent
channels.msteams.actions.memberInfo (типово: увімкнено, коли доступні облікові дані Graph).
Контекст історії
channels.msteams.historyLimitвизначає, скільки останніх повідомлень каналу/групи загортається в prompt.- Має резервний перехід до
messages.groupChat.historyLimit. Установіть0, щоб вимкнути (типово 50). - Отримана історія ланцюжка фільтрується списками дозволених відправників (
allowFrom/groupAllowFrom), тому початкове наповнення контексту ланцюжка містить лише повідомлення від дозволених відправників. - Контекст цитованих вкладень (
ReplyTo*, похідний від HTML-відповідей Teams) наразі передається як отримано. - Іншими словами, списки дозволених визначають, хто може активувати агента; сьогодні фільтруються лише окремі додаткові шляхи контексту.
- Історію DM можна обмежити через
channels.msteams.dmHistoryLimit(ходи користувача). Перевизначення для окремих користувачів:channels.msteams.dms["<user_id>"].historyLimit.
Поточні дозволи Teams RSC (маніфест)
Це чинні resourceSpecific permissions у нашому маніфесті застосунку Teams. Вони діють лише в межах команди/чату, де встановлено застосунок. Для каналів (область команди):ChannelMessage.Read.Group(Application) - отримання всіх повідомлень каналу без @mentionChannelMessage.Send.Group(Application)Member.Read.Group(Application)Owner.Read.Group(Application)ChannelSettings.Read.Group(Application)TeamMember.Read.Group(Application)TeamSettings.Read.Group(Application)
ChatMessage.Read.Chat(Application) - отримання всіх повідомлень групового чату без @mention
Приклад маніфесту Teams (з редагуванням)
Мінімальний коректний приклад з обов’язковими полями. Замініть ID та URL.Застереження щодо маніфесту (обов’язкові поля)
bots[].botIdмає точно збігатися з App ID Azure Bot.webApplicationInfo.idмає точно збігатися з App ID Azure Bot.bots[].scopesмають включати поверхні, які ви плануєте використовувати (personal,team,groupChat).bots[].supportsFiles: trueпотрібне для обробки файлів в особистій області.authorization.permissions.resourceSpecificмає включати читання/надсилання каналів, якщо ви хочете трафік каналу.
Оновлення наявного застосунку
Щоб оновити вже встановлений застосунок Teams (наприклад, щоб додати дозволи RSC):- Оновіть свій
manifest.jsonновими налаштуваннями - Збільште поле
version(наприклад,1.0.0→1.1.0) - Повторно заархівуйте маніфест зі значками (
manifest.json,outline.png,color.png) - Завантажте новий zip:
- Варіант A (Teams Admin Center): Teams Admin Center → Teams apps → Manage apps → знайдіть свій застосунок → Upload new version
- Варіант B (Sideload): У Teams → Apps → Manage your apps → Upload a custom app
- Для командних каналів: перевстановіть застосунок у кожній команді, щоб нові дозволи набули чинності
- Повністю вийдіть і знову запустіть Teams (а не просто закрийте вікно), щоб очистити кешовані метадані застосунку
Можливості: лише RSC проти Graph
З лише Teams RSC (застосунок установлено, без дозволів Graph API)
Працює:- Читання текстового вмісту повідомлень каналу.
- Надсилання текстового вмісту повідомлень каналу.
- Отримання особистих (DM) файлових вкладень.
- Зображення чи вміст файлів у каналах/групах (payload містить лише HTML-заглушку).
- Завантаження вкладень, що зберігаються в SharePoint/OneDrive.
- Читання історії повідомлень (поза поточною подією вебхука).
З Teams RSC + дозволами Microsoft Graph Application
Додається:- Завантаження розміщеного вмісту (зображення, вставлені в повідомлення).
- Завантаження файлових вкладень, що зберігаються в SharePoint/OneDrive.
- Читання історії повідомлень каналів/чатів через Graph.
RSC проти Graph API
| Можливість | Дозволи RSC | Graph API |
|---|---|---|
| Повідомлення в реальному часі | Так (через вебхук) | Ні (лише опитування) |
| Історичні повідомлення | Ні | Так (можна запитувати історію) |
| Складність налаштування | Лише маніфест застосунку | Потрібні admin consent + потік токенів |
| Працює офлайн | Ні (має бути запущено) | Так (можна запитувати будь-коли) |
ChannelMessage.Read.All (потрібен admin consent).
Медіа + історія з Graph (потрібно для каналів)
Якщо вам потрібні зображення/файли в каналах або ви хочете отримувати історію повідомлень, потрібно ввімкнути дозволи Microsoft Graph і надати admin consent.- У Entra ID (Azure AD) App Registration додайте дозволи Microsoft Graph Application permissions:
ChannelMessage.Read.All(вкладення каналів + історія)Chat.Read.AllабоChatMessage.Read.All(групові чати)
- Надайте admin consent для tenant.
- Збільште версію маніфесту застосунку Teams, повторно завантажте його та перевстановіть застосунок у Teams.
- Повністю вийдіть і знову запустіть Teams, щоб очистити кешовані метадані застосунку.
User.Read.All (Application) і надайте admin consent.
Відомі обмеження
Тайм-аути вебхуків
Teams доставляє повідомлення через HTTP-вебхук. Якщо обробка займає надто багато часу (наприклад, повільні відповіді LLM), ви можете побачити:- тайм-аути gateway
- повторну спробу надсилання повідомлення з боку Teams (що спричиняє дублікати)
- втрачені відповіді
Форматування
Markdown у Teams обмеженіший, ніж у Slack або Discord:- Базове форматування працює: жирний, курсив,
code, посилання - Складний Markdown (таблиці, вкладені списки) може відображатися некоректно
- Adaptive Cards підтримуються для Polls і довільного надсилання карток (див. нижче)
Конфігурація
Основні параметри (спільні шаблони каналів див. у/gateway/configuration):
channels.msteams.enabled: увімкнути/вимкнути канал.channels.msteams.appId,channels.msteams.appPassword,channels.msteams.tenantId: облікові дані бота.channels.msteams.webhook.port(типово3978)channels.msteams.webhook.path(типово/api/messages)channels.msteams.dmPolicy:pairing | allowlist | open | disabled(типово: pairing)channels.msteams.allowFrom: список дозволених для DM (рекомендовано AAD object ID). Майстер під час налаштування розв’язує імена в ID, коли доступний Graph.channels.msteams.dangerouslyAllowNameMatching: аварійний перемикач, який знову вмикає зіставлення за змінними UPN/відображуваними іменами та пряму маршрутизацію за назвами team/channel.channels.msteams.textChunkLimit: розмір вихідного текстового блока.channels.msteams.chunkMode:length(типово) абоnewlineдля розбиття за порожніми рядками (межі абзаців) перед розбиттям за довжиною.channels.msteams.mediaAllowHosts: список дозволених хостів для вхідних вкладень (типово домени Microsoft/Teams).channels.msteams.mediaAuthAllowHosts: список дозволених хостів для додавання заголовків Authorization під час повторних спроб медіа (типово хости Graph + Bot Framework).channels.msteams.requireMention: вимагати @mention у каналах/групах (типово true).channels.msteams.replyStyle:thread | top-level(див. Стиль відповіді).channels.msteams.teams.<teamId>.replyStyle: перевизначення для окремої команди.channels.msteams.teams.<teamId>.requireMention: перевизначення для окремої команди.channels.msteams.teams.<teamId>.tools: типові перевизначення політики інструментів для окремої команди (allow/deny/alsoAllow), що використовуються, коли перевизначення каналу відсутнє.channels.msteams.teams.<teamId>.toolsBySender: типові перевизначення політики інструментів для окремої команди й окремого відправника (підтримується шаблон"*").channels.msteams.teams.<teamId>.channels.<conversationId>.replyStyle: перевизначення для окремого каналу.channels.msteams.teams.<teamId>.channels.<conversationId>.requireMention: перевизначення для окремого каналу.channels.msteams.teams.<teamId>.channels.<conversationId>.tools: перевизначення політики інструментів для окремого каналу (allow/deny/alsoAllow).channels.msteams.teams.<teamId>.channels.<conversationId>.toolsBySender: перевизначення політики інструментів для окремого каналу й окремого відправника (підтримується шаблон"*").- Ключі
toolsBySenderмають використовувати явні префікси:id:,e164:,username:,name:(застарілі ключі без префікса все ще зіставляються лише зid:). channels.msteams.actions.memberInfo: увімкнути або вимкнути дію member info через Graph (типово: увімкнено, коли доступні облікові дані Graph).channels.msteams.sharePointSiteId: ID сайту SharePoint для вивантаження файлів у групових чатах/каналах (див. Надсилання файлів у групових чатах).
Маршрутизація та сесії
- Ключі сесій дотримуються стандартного формату агента (див. /concepts/session):
- Прямі повідомлення використовують основну сесію (
agent:<agentId>:<mainKey>). - Повідомлення каналів/груп використовують ID розмови:
agent:<agentId>:msteams:channel:<conversationId>agent:<agentId>:msteams:group:<conversationId>
- Прямі повідомлення використовують основну сесію (
Стиль відповіді: ланцюжки проти дописів
Нещодавно Teams запровадив два стилі інтерфейсу каналів поверх однієї базової моделі даних:| Стиль | Опис | Рекомендований replyStyle |
|---|---|---|
| Posts (класичний) | Повідомлення відображаються як картки, а відповіді йдуть ланцюжком під ними | thread (типово) |
| Threads (як у Slack) | Повідомлення йдуть лінійно, більше схоже на Slack | top-level |
replyStyle:
threadу каналі стилю Threads → відповіді виглядають незграбно вкладенимиtop-levelу каналі стилю Posts → відповіді відображаються як окремі дописи верхнього рівня, а не в ланцюжку
replyStyle для кожного каналу залежно від того, як налаштований канал:
Вкладення та зображення
Поточні обмеження:- DM: зображення та файлові вкладення працюють через файлові API ботів Teams.
- Канали/групи: вкладення живуть у сховищі M365 (SharePoint/OneDrive). Payload вебхука містить лише HTML-заглушку, а не реальні байти файлу. Для завантаження вкладень каналів потрібні дозволи Graph API.
- Для явних надсилань, де файл є основним, використовуйте
action=upload-fileзmedia/filePath/path; необов’язковеmessageстає супровідним текстом/коментарем, аfilenameперевизначає назву вивантаженого файлу.
channels.msteams.mediaAllowHosts (використайте ["*"], щоб дозволити будь-який хост).
Заголовки Authorization додаються лише для хостів у channels.msteams.mediaAuthAllowHosts (типово хости Graph + Bot Framework). Тримайте цей список суворим (уникайте багатокористувацьких суфіксів).
Надсилання файлів у групових чатах
Боти можуть надсилати файли в DM через потік FileConsentCard (вбудовано). Однак надсилання файлів у групових чатах/каналах потребує додаткового налаштування:| Контекст | Як надсилаються файли | Потрібне налаштування |
|---|---|---|
| DM | FileConsentCard → користувач підтверджує → бот вивантажує | Працює одразу |
| Групові чати/канали | Вивантаження в SharePoint → посилання для доступу | Потрібні sharePointSiteId + дозволи Graph |
| Зображення (будь-який контекст) | Вбудоване кодування Base64 | Працює одразу |
Чому для групових чатів потрібен SharePoint
Боти не мають особистого диска OneDrive (кінцева точка Graph API/me/drive не працює для application identities). Щоб надсилати файли в групових чатах/каналах, бот вивантажує їх на сайт SharePoint і створює посилання для доступу.
Налаштування
-
Додайте дозволи Graph API у Entra ID (Azure AD) → App Registration:
Sites.ReadWrite.All(Application) - вивантаження файлів у SharePointChat.Read.All(Application) - необов’язково, вмикає посилання для доступу на рівні користувача
- Надайте admin consent для tenant.
-
Отримайте ID свого сайту SharePoint:
-
Налаштуйте OpenClaw:
Поведінка спільного доступу
| Дозвіл | Поведінка спільного доступу |
|---|---|
Sites.ReadWrite.All лише | Посилання спільного доступу на всю організацію (доступне будь-кому в org) |
Sites.ReadWrite.All + Chat.Read.All | Посилання спільного доступу на рівні користувача (доступне лише учасникам чату) |
Chat.Read.All відсутній, бот повертається до спільного доступу на всю організацію.
Поведінка резервного переходу
| Сценарій | Результат |
|---|---|
Груповий чат + файл + налаштовано sharePointSiteId | Вивантаження в SharePoint, надсилання посилання для доступу |
Груповий чат + файл + без sharePointSiteId | Спроба вивантаження в OneDrive (може не вдатися), надсилається лише текст |
| Особистий чат + файл | Потік FileConsentCard (працює без SharePoint) |
| Будь-який контекст + зображення | Вбудоване кодування Base64 (працює без SharePoint) |
Де зберігаються файли
Вивантажені файли зберігаються в папці/OpenClawShared/ у типовій бібліотеці документів налаштованого сайту SharePoint.
Polls (Adaptive Cards)
OpenClaw надсилає Polls у Teams як Adaptive Cards (власного API для опитувань у Teams немає).- CLI:
openclaw message poll --channel msteams --target conversation:<id> ... - Голоси записуються gateway у
~/.openclaw/msteams-polls.json. - Щоб записувати голоси, gateway має залишатися онлайн.
- Polls поки що не публікують підсумки результатів автоматично (за потреби переглядайте файл сховища).
Adaptive Cards (довільні)
Надсилайте будь-який JSON Adaptive Card користувачам або розмовам Teams за допомогою інструментаmessage або CLI.
Параметр card приймає JSON-об’єкт Adaptive Card. Коли задано card, текст повідомлення є необов’язковим.
Інструмент агента:
Формати цілей
Цілі MSTeams використовують префікси, щоб розрізняти користувачів і розмови:| Тип цілі | Формат | Приклад |
|---|---|---|
| Користувач (за ID) | user:<aad-object-id> | user:40a1a0ed-4ff2-4164-a219-55518990c197 |
| Користувач (за ім’ям) | user:<display-name> | user:John Smith (потрібен Graph API) |
| Група/канал | conversation:<conversation-id> | conversation:19:abc123...@thread.tacv2 |
| Група/канал (сирий) | <conversation-id> | 19:abc123...@thread.tacv2 (якщо містить @thread) |
user: імена типово трактуються як розв’язання групи/команди. Завжди використовуйте user:, коли націлюєтеся на людей за відображуваним ім’ям.
Проактивні повідомлення
- Проактивні повідомлення можливі лише після того, як користувач уже взаємодіяв, оскільки саме тоді ми зберігаємо посилання на розмову.
- Параметри
dmPolicyі перевірку списку дозволених див. у/gateway/configuration.
ID команд і каналів (типова пастка)
Параметр запитуgroupId в URL Teams НЕ є team ID, який використовується для конфігурації. Витягуйте ID зі шляху URL:
URL команди:
- Team ID = сегмент шляху після
/team/(URL-декодований, наприклад19:Bk4j...@thread.tacv2) - Channel ID = сегмент шляху після
/channel/(URL-декодований) - Параметр запиту
groupIdігноруйте
Приватні канали
Боти мають обмежену підтримку в приватних каналах:| Можливість | Стандартні канали | Приватні канали |
|---|---|---|
| Установлення бота | Так | Обмежено |
| Повідомлення в реальному часі (вебхук) | Так | Може не працювати |
| Дозволи RSC | Так | Можуть поводитися інакше |
| @mentions | Так | Якщо бот доступний |
| Історія через Graph API | Так | Так (із дозволами) |
- Використовуйте стандартні канали для взаємодії з ботом
- Використовуйте DM — користувачі завжди можуть писати боту напряму
- Використовуйте Graph API для історичного доступу (потрібен
ChannelMessage.Read.All)
Усунення проблем
Типові проблеми
- Зображення не показуються в каналах: бракує дозволів Graph або admin consent. Перевстановіть застосунок Teams і повністю закрийте/відкрийте Teams.
- Немає відповідей у каналі: типово потрібні згадки; установіть
channels.msteams.requireMention=falseабо налаштуйте для окремої команди/каналу. - Невідповідність версій (Teams усе ще показує старий маніфест): видаліть і знову додайте застосунок та повністю перезапустіть Teams для оновлення.
- 401 Unauthorized від вебхука: це очікувано під час ручного тестування без Azure JWT — означає, що кінцева точка доступна, але автентифікація не пройшла. Для коректного тестування використовуйте Azure Web Chat.
Помилки завантаження маніфесту
- “Icon file cannot be empty”: маніфест посилається на файли значків розміром 0 байт. Створіть коректні значки PNG (
outline.png32x32,color.png192x192). - “webApplicationInfo.Id already in use”: застосунок усе ще встановлений в іншій команді/чаті. Спочатку знайдіть і видаліть його або зачекайте 5-10 хвилин на поширення змін.
- “Something went wrong” під час завантаження: натомість завантажуйте через https://admin.teams.microsoft.com, відкрийте DevTools браузера (F12) → вкладка Network і перевірте тіло відповіді, щоб побачити фактичну помилку.
- Не вдається sideload: спробуйте “Upload an app to your org’s app catalog” замість “Upload a custom app” — це часто обходить обмеження sideload.
Дозволи RSC не працюють
- Переконайтеся, що
webApplicationInfo.idточно збігається з App ID вашого бота - Повторно завантажте застосунок і перевстановіть його в команді/чаті
- Перевірте, чи адміністратор вашої org не заблокував дозволи RSC
- Підтвердьте, що ви використовуєте правильну область:
ChannelMessage.Read.Groupдля команд,ChatMessage.Read.Chatдля групових чатів
Посилання
- Create Azure Bot - посібник із налаштування Azure Bot
- Teams Developer Portal - створення/керування застосунками Teams
- Схема маніфесту застосунку Teams
- Отримання повідомлень каналу через RSC
- Довідник дозволів RSC
- Обробка файлів ботом Teams (для каналу/групи потрібен Graph)
- Проактивні повідомлення
Пов’язане
- Огляд каналів — усі підтримувані канали
- Парування — автентифікація DM і потік парування
- Групи — поведінка групового чату й перевірка згадки
- Маршрутизація каналів — маршрутизація сесій для повідомлень
- Безпека — модель доступу та зміцнення безпеки