@symerian/symi 3.0.21 → 3.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (688) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  3. package/package.json +1 -1
  4. package/docs/.i18n/README.md +0 -31
  5. package/docs/.i18n/glossary.ja-JP.json +0 -14
  6. package/docs/.i18n/glossary.zh-CN.json +0 -210
  7. package/docs/.i18n/ja-JP.tm.jsonl +0 -0
  8. package/docs/.i18n/zh-CN.tm.jsonl +0 -1303
  9. package/docs/CNAME +0 -1
  10. package/docs/assets/install-script.svg +0 -1
  11. package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
  12. package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
  13. package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
  14. package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
  15. package/docs/assets/macos-onboarding/05-permissions.png +0 -0
  16. package/docs/assets/pixel-symi.svg +0 -60
  17. package/docs/assets/showcase/agents-ui.jpg +0 -0
  18. package/docs/assets/showcase/bambu-cli.png +0 -0
  19. package/docs/assets/showcase/codexmonitor.png +0 -0
  20. package/docs/assets/showcase/gohome-grafana.png +0 -0
  21. package/docs/assets/showcase/ios-testflight.jpg +0 -0
  22. package/docs/assets/showcase/oura-health.png +0 -0
  23. package/docs/assets/showcase/padel-cli.svg +0 -11
  24. package/docs/assets/showcase/padel-screenshot.jpg +0 -0
  25. package/docs/assets/showcase/papla-tts.jpg +0 -0
  26. package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
  27. package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
  28. package/docs/assets/showcase/roborock-status.svg +0 -13
  29. package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
  30. package/docs/assets/showcase/snag.png +0 -0
  31. package/docs/assets/showcase/tesco-shop.jpg +0 -0
  32. package/docs/assets/showcase/wienerlinien.png +0 -0
  33. package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
  34. package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
  35. package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
  36. package/docs/assets/sponsors/blacksmith.svg +0 -14
  37. package/docs/assets/sponsors/openai.svg +0 -3
  38. package/docs/assets/symi-logo-text-dark.png +0 -0
  39. package/docs/assets/symi-logo-text.png +0 -0
  40. package/docs/automation/auth-monitoring.md +0 -44
  41. package/docs/automation/cron-jobs.md +0 -540
  42. package/docs/automation/cron-vs-heartbeat.md +0 -286
  43. package/docs/automation/gmail-pubsub.md +0 -256
  44. package/docs/automation/hooks.md +0 -998
  45. package/docs/automation/poll.md +0 -61
  46. package/docs/automation/troubleshooting.md +0 -122
  47. package/docs/automation/webhook.md +0 -213
  48. package/docs/brave-search.md +0 -41
  49. package/docs/capabilities.md +0 -151
  50. package/docs/channels/bluebubbles.md +0 -346
  51. package/docs/channels/broadcast-groups.md +0 -441
  52. package/docs/channels/channel-routing.md +0 -112
  53. package/docs/channels/feishu.md +0 -586
  54. package/docs/channels/googlechat.md +0 -253
  55. package/docs/channels/grammy.md +0 -31
  56. package/docs/channels/group-messages.md +0 -82
  57. package/docs/channels/groups.md +0 -364
  58. package/docs/channels/imessage.md +0 -366
  59. package/docs/channels/index.md +0 -46
  60. package/docs/channels/irc.md +0 -234
  61. package/docs/channels/line.md +0 -186
  62. package/docs/channels/location.md +0 -56
  63. package/docs/channels/matrix.md +0 -300
  64. package/docs/channels/mattermost.md +0 -158
  65. package/docs/channels/msteams.md +0 -769
  66. package/docs/channels/nextcloud-talk.md +0 -138
  67. package/docs/channels/nostr.md +0 -233
  68. package/docs/channels/pairing.md +0 -100
  69. package/docs/channels/signal.md +0 -322
  70. package/docs/channels/slack.md +0 -510
  71. package/docs/channels/telegram.md +0 -748
  72. package/docs/channels/tlon.md +0 -148
  73. package/docs/channels/troubleshooting.md +0 -110
  74. package/docs/channels/twitch.md +0 -379
  75. package/docs/channels/whatsapp.md +0 -444
  76. package/docs/channels/zalo.md +0 -192
  77. package/docs/channels/zalouser.md +0 -140
  78. package/docs/ci.md +0 -50
  79. package/docs/cli/acp.md +0 -182
  80. package/docs/cli/agent.md +0 -24
  81. package/docs/cli/agents.md +0 -75
  82. package/docs/cli/approvals.md +0 -50
  83. package/docs/cli/browser.md +0 -107
  84. package/docs/cli/channels.md +0 -73
  85. package/docs/cli/config.md +0 -50
  86. package/docs/cli/configure.md +0 -32
  87. package/docs/cli/cron.md +0 -44
  88. package/docs/cli/dashboard.md +0 -16
  89. package/docs/cli/devices.md +0 -73
  90. package/docs/cli/directory.md +0 -62
  91. package/docs/cli/dns.md +0 -23
  92. package/docs/cli/docs.md +0 -15
  93. package/docs/cli/doctor.md +0 -41
  94. package/docs/cli/gateway.md +0 -202
  95. package/docs/cli/health.md +0 -21
  96. package/docs/cli/hooks.md +0 -313
  97. package/docs/cli/index.md +0 -1029
  98. package/docs/cli/logs.md +0 -28
  99. package/docs/cli/memory.md +0 -45
  100. package/docs/cli/message.md +0 -214
  101. package/docs/cli/models.md +0 -79
  102. package/docs/cli/node.md +0 -112
  103. package/docs/cli/nodes.md +0 -73
  104. package/docs/cli/onboard.md +0 -76
  105. package/docs/cli/pairing.md +0 -21
  106. package/docs/cli/plugins.md +0 -92
  107. package/docs/cli/reset.md +0 -17
  108. package/docs/cli/sandbox.md +0 -152
  109. package/docs/cli/security.md +0 -64
  110. package/docs/cli/sessions.md +0 -16
  111. package/docs/cli/setup.md +0 -29
  112. package/docs/cli/skills.md +0 -26
  113. package/docs/cli/status.md +0 -25
  114. package/docs/cli/system.md +0 -60
  115. package/docs/cli/tui.md +0 -23
  116. package/docs/cli/uninstall.md +0 -17
  117. package/docs/cli/update.md +0 -98
  118. package/docs/cli/voicecall.md +0 -34
  119. package/docs/cli/webhooks.md +0 -25
  120. package/docs/concepts/agent-loop.md +0 -148
  121. package/docs/concepts/agent-workspace.md +0 -234
  122. package/docs/concepts/agent.md +0 -123
  123. package/docs/concepts/architecture.md +0 -135
  124. package/docs/concepts/compaction.md +0 -61
  125. package/docs/concepts/context.md +0 -161
  126. package/docs/concepts/features.md +0 -51
  127. package/docs/concepts/markdown-formatting.md +0 -128
  128. package/docs/concepts/memory.md +0 -729
  129. package/docs/concepts/messages.md +0 -153
  130. package/docs/concepts/model-failover.md +0 -149
  131. package/docs/concepts/model-providers.md +0 -424
  132. package/docs/concepts/models.md +0 -208
  133. package/docs/concepts/multi-agent.md +0 -521
  134. package/docs/concepts/oauth.md +0 -145
  135. package/docs/concepts/presence.md +0 -102
  136. package/docs/concepts/queue.md +0 -86
  137. package/docs/concepts/retry.md +0 -64
  138. package/docs/concepts/session-pruning.md +0 -123
  139. package/docs/concepts/session-tool.md +0 -213
  140. package/docs/concepts/session.md +0 -199
  141. package/docs/concepts/sessions.md +0 -10
  142. package/docs/concepts/streaming.md +0 -129
  143. package/docs/concepts/system-prompt.md +0 -128
  144. package/docs/concepts/timezone.md +0 -90
  145. package/docs/concepts/typebox.md +0 -289
  146. package/docs/concepts/typing-indicators.md +0 -68
  147. package/docs/concepts/usage-tracking.md +0 -35
  148. package/docs/date-time.md +0 -127
  149. package/docs/debug/node-issue.md +0 -85
  150. package/docs/diagnostics/flags.md +0 -91
  151. package/docs/docs.json +0 -1849
  152. package/docs/experiments/onboarding-config-protocol.md +0 -40
  153. package/docs/experiments/plans/browser-evaluate-cdp-refactor.md +0 -229
  154. package/docs/experiments/plans/cron-add-hardening.md +0 -62
  155. package/docs/experiments/plans/group-policy-hardening.md +0 -40
  156. package/docs/experiments/plans/openresponses-gateway.md +0 -123
  157. package/docs/experiments/plans/pty-process-supervision.md +0 -192
  158. package/docs/experiments/plans/session-binding-channel-agnostic.md +0 -202
  159. package/docs/experiments/plans/thread-bound-subagents.md +0 -281
  160. package/docs/experiments/proposals/model-config.md +0 -36
  161. package/docs/experiments/research/memory.md +0 -228
  162. package/docs/gateway/authentication.md +0 -162
  163. package/docs/gateway/background-process.md +0 -96
  164. package/docs/gateway/bonjour.md +0 -177
  165. package/docs/gateway/bridge-protocol.md +0 -91
  166. package/docs/gateway/cli-backends.md +0 -225
  167. package/docs/gateway/configuration-examples.md +0 -610
  168. package/docs/gateway/configuration-reference.md +0 -2465
  169. package/docs/gateway/configuration.md +0 -488
  170. package/docs/gateway/discovery.md +0 -123
  171. package/docs/gateway/doctor.md +0 -282
  172. package/docs/gateway/gateway-lock.md +0 -34
  173. package/docs/gateway/health.md +0 -35
  174. package/docs/gateway/heartbeat.md +0 -374
  175. package/docs/gateway/index.md +0 -254
  176. package/docs/gateway/local-models.md +0 -150
  177. package/docs/gateway/logging.md +0 -113
  178. package/docs/gateway/multiple-gateways.md +0 -112
  179. package/docs/gateway/network-model.md +0 -20
  180. package/docs/gateway/openai-http-api.md +0 -119
  181. package/docs/gateway/openresponses-http-api.md +0 -333
  182. package/docs/gateway/pairing.md +0 -99
  183. package/docs/gateway/protocol.md +0 -221
  184. package/docs/gateway/remote-gateway-readme.md +0 -158
  185. package/docs/gateway/remote.md +0 -131
  186. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -128
  187. package/docs/gateway/sandboxing.md +0 -203
  188. package/docs/gateway/security/index.md +0 -931
  189. package/docs/gateway/tailscale.md +0 -132
  190. package/docs/gateway/tools-invoke-http-api.md +0 -110
  191. package/docs/gateway/troubleshooting.md +0 -317
  192. package/docs/gateway/trusted-proxy-auth.md +0 -270
  193. package/docs/glass-ui-rendering-invariants.md +0 -451
  194. package/docs/help/debugging.md +0 -162
  195. package/docs/help/environment.md +0 -107
  196. package/docs/help/faq.md +0 -2846
  197. package/docs/help/index.md +0 -21
  198. package/docs/help/scripts.md +0 -28
  199. package/docs/help/testing.md +0 -385
  200. package/docs/help/troubleshooting.md +0 -264
  201. package/docs/images/configure-model-picker-unsearchable.png +0 -0
  202. package/docs/images/feishu-step2-create-app.png +0 -0
  203. package/docs/images/feishu-step3-credentials.png +0 -0
  204. package/docs/images/feishu-step4-permissions.png +0 -0
  205. package/docs/images/feishu-step5-bot-capability.png +0 -0
  206. package/docs/images/feishu-step6-event-subscription.png +0 -0
  207. package/docs/images/groups-flow.svg +0 -52
  208. package/docs/images/mobile-ui-screenshot.png +0 -0
  209. package/docs/index.md +0 -186
  210. package/docs/install/ansible.md +0 -207
  211. package/docs/install/bun.md +0 -59
  212. package/docs/install/development-channels.md +0 -75
  213. package/docs/install/docker.md +0 -583
  214. package/docs/install/exe-dev.md +0 -126
  215. package/docs/install/fly.md +0 -472
  216. package/docs/install/gcp.md +0 -499
  217. package/docs/install/hetzner.md +0 -347
  218. package/docs/install/index.md +0 -218
  219. package/docs/install/installer.md +0 -405
  220. package/docs/install/macos-vm.md +0 -281
  221. package/docs/install/migrating.md +0 -192
  222. package/docs/install/nix.md +0 -98
  223. package/docs/install/node.md +0 -138
  224. package/docs/install/northflank.mdx +0 -49
  225. package/docs/install/podman.md +0 -108
  226. package/docs/install/railway.mdx +0 -95
  227. package/docs/install/render.mdx +0 -158
  228. package/docs/install/uninstall.md +0 -128
  229. package/docs/install/updating.md +0 -231
  230. package/docs/ja-JP/AGENTS.md +0 -37
  231. package/docs/ja-JP/index.md +0 -183
  232. package/docs/ja-JP/start/getting-started.md +0 -125
  233. package/docs/ja-JP/start/wizard.md +0 -77
  234. package/docs/logging.md +0 -350
  235. package/docs/nav-tabs-underline.js +0 -100
  236. package/docs/network.md +0 -54
  237. package/docs/nodes/audio.md +0 -133
  238. package/docs/nodes/camera.md +0 -156
  239. package/docs/nodes/images.md +0 -72
  240. package/docs/nodes/index.md +0 -342
  241. package/docs/nodes/location-command.md +0 -113
  242. package/docs/nodes/media-understanding.md +0 -379
  243. package/docs/nodes/talk.md +0 -90
  244. package/docs/nodes/troubleshooting.md +0 -112
  245. package/docs/nodes/voicewake.md +0 -65
  246. package/docs/perplexity.md +0 -80
  247. package/docs/phase-6.5-pre-flight-audit.md +0 -268
  248. package/docs/pi-dev.md +0 -70
  249. package/docs/pi.md +0 -610
  250. package/docs/platforms/android.md +0 -151
  251. package/docs/platforms/digitalocean.md +0 -265
  252. package/docs/platforms/index.md +0 -53
  253. package/docs/platforms/ios.md +0 -108
  254. package/docs/platforms/linux.md +0 -94
  255. package/docs/platforms/mac/bundled-gateway.md +0 -73
  256. package/docs/platforms/mac/canvas.md +0 -125
  257. package/docs/platforms/mac/child-process.md +0 -69
  258. package/docs/platforms/mac/dev-setup.md +0 -104
  259. package/docs/platforms/mac/health.md +0 -34
  260. package/docs/platforms/mac/icon.md +0 -31
  261. package/docs/platforms/mac/logging.md +0 -57
  262. package/docs/platforms/mac/menu-bar.md +0 -81
  263. package/docs/platforms/mac/peekaboo.md +0 -65
  264. package/docs/platforms/mac/permissions.md +0 -50
  265. package/docs/platforms/mac/release.md +0 -85
  266. package/docs/platforms/mac/remote.md +0 -84
  267. package/docs/platforms/mac/signing.md +0 -47
  268. package/docs/platforms/mac/skills.md +0 -33
  269. package/docs/platforms/mac/voice-overlay.md +0 -60
  270. package/docs/platforms/mac/voicewake.md +0 -66
  271. package/docs/platforms/mac/webchat.md +0 -43
  272. package/docs/platforms/mac/xpc.md +0 -61
  273. package/docs/platforms/macos.md +0 -204
  274. package/docs/platforms/oracle.md +0 -303
  275. package/docs/platforms/raspberry-pi.md +0 -358
  276. package/docs/platforms/windows.md +0 -159
  277. package/docs/plugins/agent-tools.md +0 -99
  278. package/docs/plugins/community.md +0 -44
  279. package/docs/plugins/manifest.md +0 -71
  280. package/docs/plugins/voice-call.md +0 -322
  281. package/docs/plugins/zalouser.md +0 -81
  282. package/docs/prose.md +0 -134
  283. package/docs/providers/anthropic.md +0 -174
  284. package/docs/providers/bedrock.md +0 -176
  285. package/docs/providers/claude-max-api-proxy.md +0 -148
  286. package/docs/providers/cloudflare-ai-gateway.md +0 -71
  287. package/docs/providers/deepgram.md +0 -93
  288. package/docs/providers/github-copilot.md +0 -72
  289. package/docs/providers/glm.md +0 -33
  290. package/docs/providers/huggingface.md +0 -209
  291. package/docs/providers/index.md +0 -67
  292. package/docs/providers/litellm.md +0 -153
  293. package/docs/providers/minimax.md +0 -208
  294. package/docs/providers/models.md +0 -52
  295. package/docs/providers/moonshot.md +0 -142
  296. package/docs/providers/nvidia.md +0 -55
  297. package/docs/providers/ollama.md +0 -250
  298. package/docs/providers/openai.md +0 -62
  299. package/docs/providers/opencode.md +0 -36
  300. package/docs/providers/openrouter.md +0 -37
  301. package/docs/providers/qianfan.md +0 -38
  302. package/docs/providers/qwen.md +0 -53
  303. package/docs/providers/synthetic.md +0 -99
  304. package/docs/providers/together.md +0 -65
  305. package/docs/providers/venice.md +0 -267
  306. package/docs/providers/vercel-ai-gateway.md +0 -50
  307. package/docs/providers/vllm.md +0 -92
  308. package/docs/providers/xiaomi.md +0 -64
  309. package/docs/providers/zai.md +0 -38
  310. package/docs/refactor/exec-host.md +0 -316
  311. package/docs/refactor/outbound-session-mirroring.md +0 -83
  312. package/docs/refactor/plugin-sdk.md +0 -214
  313. package/docs/refactor/strict-config.md +0 -93
  314. package/docs/refactor/syminet.md +0 -417
  315. package/docs/reference/AGENTS.default.md +0 -123
  316. package/docs/reference/RELEASING.md +0 -120
  317. package/docs/reference/api-usage-costs.md +0 -138
  318. package/docs/reference/credits.md +0 -28
  319. package/docs/reference/device-models.md +0 -47
  320. package/docs/reference/rpc.md +0 -43
  321. package/docs/reference/session-management-compaction.md +0 -284
  322. package/docs/reference/test.md +0 -51
  323. package/docs/reference/token-use.md +0 -136
  324. package/docs/reference/transcript-hygiene.md +0 -151
  325. package/docs/reference/wizard.md +0 -265
  326. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -89
  327. package/docs/security/README.md +0 -16
  328. package/docs/security/THREAT-MODEL-ATLAS.md +0 -600
  329. package/docs/security/formal-verification.md +0 -164
  330. package/docs/start/bootstrapping.md +0 -41
  331. package/docs/start/docs-directory.md +0 -63
  332. package/docs/start/getting-started.md +0 -135
  333. package/docs/start/hubs.md +0 -196
  334. package/docs/start/lore.md +0 -216
  335. package/docs/start/onboarding-overview.md +0 -51
  336. package/docs/start/onboarding.md +0 -81
  337. package/docs/start/quickstart.md +0 -22
  338. package/docs/start/setup.md +0 -160
  339. package/docs/start/showcase.md +0 -414
  340. package/docs/start/symi.md +0 -211
  341. package/docs/start/wizard-cli-automation.md +0 -158
  342. package/docs/start/wizard-cli-reference.md +0 -255
  343. package/docs/start/wizard.md +0 -109
  344. package/docs/style.css +0 -37
  345. package/docs/tools/agent-send.md +0 -52
  346. package/docs/tools/apply-patch.md +0 -51
  347. package/docs/tools/browser-linux-troubleshooting.md +0 -139
  348. package/docs/tools/browser-login.md +0 -67
  349. package/docs/tools/browser.md +0 -587
  350. package/docs/tools/chrome-extension.md +0 -183
  351. package/docs/tools/creating-skills.md +0 -54
  352. package/docs/tools/elevated.md +0 -55
  353. package/docs/tools/exec-approvals.md +0 -261
  354. package/docs/tools/exec.md +0 -184
  355. package/docs/tools/firecrawl.md +0 -61
  356. package/docs/tools/index.md +0 -540
  357. package/docs/tools/llm-task.md +0 -115
  358. package/docs/tools/loop-detection.md +0 -98
  359. package/docs/tools/multi-agent-sandbox-tools.md +0 -396
  360. package/docs/tools/pipeline.md +0 -340
  361. package/docs/tools/plugin.md +0 -687
  362. package/docs/tools/reactions.md +0 -21
  363. package/docs/tools/skills-config.md +0 -76
  364. package/docs/tools/skills.md +0 -300
  365. package/docs/tools/slash-commands.md +0 -202
  366. package/docs/tools/subagents.md +0 -232
  367. package/docs/tools/symihub.md +0 -256
  368. package/docs/tools/thinking.md +0 -75
  369. package/docs/tools/web.md +0 -265
  370. package/docs/tts.md +0 -398
  371. package/docs/vps.md +0 -43
  372. package/docs/web/control-ui.md +0 -247
  373. package/docs/web/dashboard.md +0 -46
  374. package/docs/web/index.md +0 -118
  375. package/docs/web/tui.md +0 -162
  376. package/docs/web/webchat.md +0 -53
  377. package/docs/whatsapp-symi-ai-zh.jpg +0 -0
  378. package/docs/whatsapp-symi.jpg +0 -0
  379. package/docs/zh-CN/AGENTS.md +0 -59
  380. package/docs/zh-CN/automation/auth-monitoring.md +0 -47
  381. package/docs/zh-CN/automation/cron-jobs.md +0 -422
  382. package/docs/zh-CN/automation/cron-vs-heartbeat.md +0 -286
  383. package/docs/zh-CN/automation/gmail-pubsub.md +0 -249
  384. package/docs/zh-CN/automation/hooks.md +0 -881
  385. package/docs/zh-CN/automation/poll.md +0 -68
  386. package/docs/zh-CN/automation/troubleshooting.md +0 -8
  387. package/docs/zh-CN/automation/webhook.md +0 -161
  388. package/docs/zh-CN/brave-search.md +0 -48
  389. package/docs/zh-CN/channels/bluebubbles.md +0 -271
  390. package/docs/zh-CN/channels/broadcast-groups.md +0 -448
  391. package/docs/zh-CN/channels/channel-routing.md +0 -112
  392. package/docs/zh-CN/channels/feishu.md +0 -629
  393. package/docs/zh-CN/channels/googlechat.md +0 -257
  394. package/docs/zh-CN/channels/grammy.md +0 -38
  395. package/docs/zh-CN/channels/group-messages.md +0 -89
  396. package/docs/zh-CN/channels/groups.md +0 -369
  397. package/docs/zh-CN/channels/imessage.md +0 -300
  398. package/docs/zh-CN/channels/index.md +0 -52
  399. package/docs/zh-CN/channels/line.md +0 -180
  400. package/docs/zh-CN/channels/location.md +0 -63
  401. package/docs/zh-CN/channels/matrix.md +0 -221
  402. package/docs/zh-CN/channels/mattermost.md +0 -144
  403. package/docs/zh-CN/channels/msteams.md +0 -773
  404. package/docs/zh-CN/channels/nextcloud-talk.md +0 -142
  405. package/docs/zh-CN/channels/nostr.md +0 -240
  406. package/docs/zh-CN/channels/pairing.md +0 -86
  407. package/docs/zh-CN/channels/signal.md +0 -207
  408. package/docs/zh-CN/channels/slack.md +0 -529
  409. package/docs/zh-CN/channels/telegram.md +0 -748
  410. package/docs/zh-CN/channels/tlon.md +0 -136
  411. package/docs/zh-CN/channels/troubleshooting.md +0 -34
  412. package/docs/zh-CN/channels/twitch.md +0 -385
  413. package/docs/zh-CN/channels/whatsapp.md +0 -411
  414. package/docs/zh-CN/channels/zalo.md +0 -196
  415. package/docs/zh-CN/channels/zalouser.md +0 -147
  416. package/docs/zh-CN/cli/acp.md +0 -173
  417. package/docs/zh-CN/cli/agent.md +0 -30
  418. package/docs/zh-CN/cli/agents.md +0 -82
  419. package/docs/zh-CN/cli/approvals.md +0 -57
  420. package/docs/zh-CN/cli/browser.md +0 -114
  421. package/docs/zh-CN/cli/channels.md +0 -80
  422. package/docs/zh-CN/cli/config.md +0 -57
  423. package/docs/zh-CN/cli/configure.md +0 -37
  424. package/docs/zh-CN/cli/cron.md +0 -43
  425. package/docs/zh-CN/cli/dashboard.md +0 -23
  426. package/docs/zh-CN/cli/devices.md +0 -74
  427. package/docs/zh-CN/cli/directory.md +0 -69
  428. package/docs/zh-CN/cli/dns.md +0 -30
  429. package/docs/zh-CN/cli/docs.md +0 -22
  430. package/docs/zh-CN/cli/doctor.md +0 -48
  431. package/docs/zh-CN/cli/gateway.md +0 -206
  432. package/docs/zh-CN/cli/health.md +0 -28
  433. package/docs/zh-CN/cli/hooks.md +0 -298
  434. package/docs/zh-CN/cli/index.md +0 -1025
  435. package/docs/zh-CN/cli/logs.md +0 -31
  436. package/docs/zh-CN/cli/memory.md +0 -52
  437. package/docs/zh-CN/cli/message.md +0 -205
  438. package/docs/zh-CN/cli/models.md +0 -85
  439. package/docs/zh-CN/cli/node.md +0 -115
  440. package/docs/zh-CN/cli/nodes.md +0 -80
  441. package/docs/zh-CN/cli/onboard.md +0 -36
  442. package/docs/zh-CN/cli/pairing.md +0 -28
  443. package/docs/zh-CN/cli/plugins.md +0 -66
  444. package/docs/zh-CN/cli/reset.md +0 -24
  445. package/docs/zh-CN/cli/sandbox.md +0 -158
  446. package/docs/zh-CN/cli/security.md +0 -33
  447. package/docs/zh-CN/cli/sessions.md +0 -23
  448. package/docs/zh-CN/cli/setup.md +0 -36
  449. package/docs/zh-CN/cli/skills.md +0 -33
  450. package/docs/zh-CN/cli/status.md +0 -32
  451. package/docs/zh-CN/cli/system.md +0 -63
  452. package/docs/zh-CN/cli/tui.md +0 -30
  453. package/docs/zh-CN/cli/uninstall.md +0 -24
  454. package/docs/zh-CN/cli/update.md +0 -101
  455. package/docs/zh-CN/cli/voicecall.md +0 -41
  456. package/docs/zh-CN/cli/webhooks.md +0 -32
  457. package/docs/zh-CN/concepts/agent-loop.md +0 -146
  458. package/docs/zh-CN/concepts/agent-workspace.md +0 -219
  459. package/docs/zh-CN/concepts/agent.md +0 -115
  460. package/docs/zh-CN/concepts/architecture.md +0 -122
  461. package/docs/zh-CN/concepts/compaction.md +0 -67
  462. package/docs/zh-CN/concepts/context.md +0 -168
  463. package/docs/zh-CN/concepts/features.md +0 -57
  464. package/docs/zh-CN/concepts/markdown-formatting.md +0 -115
  465. package/docs/zh-CN/concepts/memory.md +0 -412
  466. package/docs/zh-CN/concepts/messages.md +0 -140
  467. package/docs/zh-CN/concepts/model-failover.md +0 -145
  468. package/docs/zh-CN/concepts/model-providers.md +0 -320
  469. package/docs/zh-CN/concepts/models.md +0 -196
  470. package/docs/zh-CN/concepts/multi-agent.md +0 -371
  471. package/docs/zh-CN/concepts/oauth.md +0 -151
  472. package/docs/zh-CN/concepts/presence.md +0 -99
  473. package/docs/zh-CN/concepts/queue.md +0 -91
  474. package/docs/zh-CN/concepts/retry.md +0 -71
  475. package/docs/zh-CN/concepts/session-pruning.md +0 -129
  476. package/docs/zh-CN/concepts/session-tool.md +0 -198
  477. package/docs/zh-CN/concepts/session.md +0 -158
  478. package/docs/zh-CN/concepts/sessions.md +0 -17
  479. package/docs/zh-CN/concepts/streaming.md +0 -131
  480. package/docs/zh-CN/concepts/system-prompt.md +0 -99
  481. package/docs/zh-CN/concepts/timezone.md +0 -94
  482. package/docs/zh-CN/concepts/typebox.md +0 -284
  483. package/docs/zh-CN/concepts/typing-indicators.md +0 -74
  484. package/docs/zh-CN/concepts/usage-tracking.md +0 -42
  485. package/docs/zh-CN/date-time.md +0 -128
  486. package/docs/zh-CN/debug/node-issue.md +0 -90
  487. package/docs/zh-CN/diagnostics/flags.md +0 -98
  488. package/docs/zh-CN/experiments/onboarding-config-protocol.md +0 -47
  489. package/docs/zh-CN/experiments/plans/cron-add-hardening.md +0 -69
  490. package/docs/zh-CN/experiments/plans/group-policy-hardening.md +0 -45
  491. package/docs/zh-CN/experiments/plans/openresponses-gateway.md +0 -121
  492. package/docs/zh-CN/experiments/proposals/model-config.md +0 -42
  493. package/docs/zh-CN/experiments/research/memory.md +0 -235
  494. package/docs/zh-CN/gateway/authentication.md +0 -142
  495. package/docs/zh-CN/gateway/background-process.md +0 -100
  496. package/docs/zh-CN/gateway/bonjour.md +0 -174
  497. package/docs/zh-CN/gateway/bridge-protocol.md +0 -86
  498. package/docs/zh-CN/gateway/cli-backends.md +0 -213
  499. package/docs/zh-CN/gateway/configuration-examples.md +0 -580
  500. package/docs/zh-CN/gateway/configuration.md +0 -3284
  501. package/docs/zh-CN/gateway/discovery.md +0 -123
  502. package/docs/zh-CN/gateway/doctor.md +0 -238
  503. package/docs/zh-CN/gateway/gateway-lock.md +0 -41
  504. package/docs/zh-CN/gateway/health.md +0 -42
  505. package/docs/zh-CN/gateway/heartbeat.md +0 -272
  506. package/docs/zh-CN/gateway/index.md +0 -335
  507. package/docs/zh-CN/gateway/local-models.md +0 -157
  508. package/docs/zh-CN/gateway/logging.md +0 -114
  509. package/docs/zh-CN/gateway/multiple-gateways.md +0 -119
  510. package/docs/zh-CN/gateway/network-model.md +0 -23
  511. package/docs/zh-CN/gateway/openai-http-api.md +0 -125
  512. package/docs/zh-CN/gateway/openresponses-http-api.md +0 -317
  513. package/docs/zh-CN/gateway/pairing.md +0 -99
  514. package/docs/zh-CN/gateway/protocol.md +0 -220
  515. package/docs/zh-CN/gateway/remote-gateway-readme.md +0 -164
  516. package/docs/zh-CN/gateway/remote.md +0 -133
  517. package/docs/zh-CN/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -135
  518. package/docs/zh-CN/gateway/sandboxing.md +0 -188
  519. package/docs/zh-CN/gateway/security/index.md +0 -772
  520. package/docs/zh-CN/gateway/tailscale.md +0 -124
  521. package/docs/zh-CN/gateway/tools-invoke-http-api.md +0 -92
  522. package/docs/zh-CN/gateway/troubleshooting.md +0 -758
  523. package/docs/zh-CN/help/debugging.md +0 -160
  524. package/docs/zh-CN/help/environment.md +0 -88
  525. package/docs/zh-CN/help/faq.md +0 -2613
  526. package/docs/zh-CN/help/index.md +0 -28
  527. package/docs/zh-CN/help/scripts.md +0 -35
  528. package/docs/zh-CN/help/testing.md +0 -375
  529. package/docs/zh-CN/help/troubleshooting.md +0 -104
  530. package/docs/zh-CN/index.md +0 -183
  531. package/docs/zh-CN/install/ansible.md +0 -214
  532. package/docs/zh-CN/install/bun.md +0 -65
  533. package/docs/zh-CN/install/development-channels.md +0 -81
  534. package/docs/zh-CN/install/docker.md +0 -525
  535. package/docs/zh-CN/install/exe-dev.md +0 -127
  536. package/docs/zh-CN/install/fly.md +0 -476
  537. package/docs/zh-CN/install/gcp.md +0 -509
  538. package/docs/zh-CN/install/hetzner.md +0 -336
  539. package/docs/zh-CN/install/index.md +0 -193
  540. package/docs/zh-CN/install/installer.md +0 -128
  541. package/docs/zh-CN/install/macos-vm.md +0 -288
  542. package/docs/zh-CN/install/migrating.md +0 -199
  543. package/docs/zh-CN/install/nix.md +0 -99
  544. package/docs/zh-CN/install/node.md +0 -8
  545. package/docs/zh-CN/install/northflank.mdx +0 -56
  546. package/docs/zh-CN/install/railway.mdx +0 -102
  547. package/docs/zh-CN/install/render.mdx +0 -168
  548. package/docs/zh-CN/install/uninstall.md +0 -135
  549. package/docs/zh-CN/install/updating.md +0 -233
  550. package/docs/zh-CN/logging.md +0 -329
  551. package/docs/zh-CN/network.md +0 -59
  552. package/docs/zh-CN/nodes/audio.md +0 -120
  553. package/docs/zh-CN/nodes/camera.md +0 -162
  554. package/docs/zh-CN/nodes/images.md +0 -79
  555. package/docs/zh-CN/nodes/index.md +0 -348
  556. package/docs/zh-CN/nodes/location-command.md +0 -120
  557. package/docs/zh-CN/nodes/media-understanding.md +0 -380
  558. package/docs/zh-CN/nodes/talk.md +0 -97
  559. package/docs/zh-CN/nodes/troubleshooting.md +0 -8
  560. package/docs/zh-CN/nodes/voicewake.md +0 -72
  561. package/docs/zh-CN/perplexity.md +0 -84
  562. package/docs/zh-CN/pi-dev.md +0 -77
  563. package/docs/zh-CN/pi.md +0 -617
  564. package/docs/zh-CN/platforms/android.md +0 -155
  565. package/docs/zh-CN/platforms/digitalocean.md +0 -268
  566. package/docs/zh-CN/platforms/index.md +0 -60
  567. package/docs/zh-CN/platforms/ios.md +0 -114
  568. package/docs/zh-CN/platforms/linux.md +0 -101
  569. package/docs/zh-CN/platforms/mac/bundled-gateway.md +0 -75
  570. package/docs/zh-CN/platforms/mac/canvas.md +0 -128
  571. package/docs/zh-CN/platforms/mac/child-process.md +0 -73
  572. package/docs/zh-CN/platforms/mac/dev-setup.md +0 -109
  573. package/docs/zh-CN/platforms/mac/health.md +0 -41
  574. package/docs/zh-CN/platforms/mac/icon.md +0 -38
  575. package/docs/zh-CN/platforms/mac/logging.md +0 -64
  576. package/docs/zh-CN/platforms/mac/menu-bar.md +0 -88
  577. package/docs/zh-CN/platforms/mac/peekaboo.md +0 -62
  578. package/docs/zh-CN/platforms/mac/permissions.md +0 -46
  579. package/docs/zh-CN/platforms/mac/release.md +0 -92
  580. package/docs/zh-CN/platforms/mac/remote.md +0 -90
  581. package/docs/zh-CN/platforms/mac/signing.md +0 -54
  582. package/docs/zh-CN/platforms/mac/skills.md +0 -40
  583. package/docs/zh-CN/platforms/mac/voice-overlay.md +0 -67
  584. package/docs/zh-CN/platforms/mac/voicewake.md +0 -73
  585. package/docs/zh-CN/platforms/mac/webchat.md +0 -43
  586. package/docs/zh-CN/platforms/mac/xpc.md +0 -68
  587. package/docs/zh-CN/platforms/macos.md +0 -193
  588. package/docs/zh-CN/platforms/oracle.md +0 -310
  589. package/docs/zh-CN/platforms/raspberry-pi.md +0 -365
  590. package/docs/zh-CN/platforms/windows.md +0 -156
  591. package/docs/zh-CN/plugins/agent-tools.md +0 -99
  592. package/docs/zh-CN/plugins/manifest.md +0 -68
  593. package/docs/zh-CN/plugins/voice-call.md +0 -250
  594. package/docs/zh-CN/plugins/zalouser.md +0 -88
  595. package/docs/zh-CN/prose.md +0 -141
  596. package/docs/zh-CN/providers/anthropic.md +0 -159
  597. package/docs/zh-CN/providers/bedrock.md +0 -170
  598. package/docs/zh-CN/providers/claude-max-api-proxy.md +0 -155
  599. package/docs/zh-CN/providers/deepgram.md +0 -97
  600. package/docs/zh-CN/providers/github-copilot.md +0 -67
  601. package/docs/zh-CN/providers/glm.md +0 -39
  602. package/docs/zh-CN/providers/index.md +0 -66
  603. package/docs/zh-CN/providers/minimax.md +0 -206
  604. package/docs/zh-CN/providers/models.md +0 -55
  605. package/docs/zh-CN/providers/moonshot.md +0 -145
  606. package/docs/zh-CN/providers/ollama.md +0 -230
  607. package/docs/zh-CN/providers/openai.md +0 -68
  608. package/docs/zh-CN/providers/opencode.md +0 -41
  609. package/docs/zh-CN/providers/openrouter.md +0 -43
  610. package/docs/zh-CN/providers/qianfan.md +0 -8
  611. package/docs/zh-CN/providers/qwen.md +0 -55
  612. package/docs/zh-CN/providers/synthetic.md +0 -102
  613. package/docs/zh-CN/providers/venice.md +0 -274
  614. package/docs/zh-CN/providers/vercel-ai-gateway.md +0 -57
  615. package/docs/zh-CN/providers/xiaomi.md +0 -68
  616. package/docs/zh-CN/providers/zai.md +0 -41
  617. package/docs/zh-CN/refactor/exec-host.md +0 -323
  618. package/docs/zh-CN/refactor/outbound-session-mirroring.md +0 -90
  619. package/docs/zh-CN/refactor/plugin-sdk.md +0 -221
  620. package/docs/zh-CN/refactor/strict-config.md +0 -100
  621. package/docs/zh-CN/refactor/syminet.md +0 -424
  622. package/docs/zh-CN/reference/AGENTS.default.md +0 -130
  623. package/docs/zh-CN/reference/RELEASING.md +0 -122
  624. package/docs/zh-CN/reference/api-usage-costs.md +0 -136
  625. package/docs/zh-CN/reference/credits.md +0 -34
  626. package/docs/zh-CN/reference/device-models.md +0 -54
  627. package/docs/zh-CN/reference/rpc.md +0 -48
  628. package/docs/zh-CN/reference/session-management-compaction.md +0 -286
  629. package/docs/zh-CN/reference/templates/AGENTS.dev.md +0 -89
  630. package/docs/zh-CN/reference/templates/AGENTS.md +0 -234
  631. package/docs/zh-CN/reference/templates/BOOT.md +0 -17
  632. package/docs/zh-CN/reference/templates/BOOTSTRAP.md +0 -68
  633. package/docs/zh-CN/reference/templates/IDENTITY.dev.md +0 -54
  634. package/docs/zh-CN/reference/templates/IDENTITY.md +0 -36
  635. package/docs/zh-CN/reference/templates/SYMICORE.dev.md +0 -83
  636. package/docs/zh-CN/reference/templates/SYMICORE.md +0 -49
  637. package/docs/zh-CN/reference/templates/SYMIPULSE.md +0 -69
  638. package/docs/zh-CN/reference/templates/TOOLS.dev.md +0 -31
  639. package/docs/zh-CN/reference/templates/TOOLS.md +0 -53
  640. package/docs/zh-CN/reference/templates/USER.dev.md +0 -25
  641. package/docs/zh-CN/reference/templates/USER.md +0 -30
  642. package/docs/zh-CN/reference/test.md +0 -57
  643. package/docs/zh-CN/reference/token-use.md +0 -119
  644. package/docs/zh-CN/reference/transcript-hygiene.md +0 -109
  645. package/docs/zh-CN/reference/wizard.md +0 -9
  646. package/docs/zh-CN/security/formal-verification.md +0 -171
  647. package/docs/zh-CN/start/bootstrapping.md +0 -9
  648. package/docs/zh-CN/start/docs-directory.md +0 -69
  649. package/docs/zh-CN/start/getting-started.md +0 -201
  650. package/docs/zh-CN/start/hubs.md +0 -199
  651. package/docs/zh-CN/start/lore.md +0 -223
  652. package/docs/zh-CN/start/onboarding.md +0 -105
  653. package/docs/zh-CN/start/quickstart.md +0 -88
  654. package/docs/zh-CN/start/setup.md +0 -151
  655. package/docs/zh-CN/start/showcase.md +0 -421
  656. package/docs/zh-CN/start/symi.md +0 -244
  657. package/docs/zh-CN/start/wizard.md +0 -326
  658. package/docs/zh-CN/tools/agent-send.md +0 -58
  659. package/docs/zh-CN/tools/apply-patch.md +0 -57
  660. package/docs/zh-CN/tools/browser-linux-troubleshooting.md +0 -144
  661. package/docs/zh-CN/tools/browser-login.md +0 -75
  662. package/docs/zh-CN/tools/browser.md +0 -553
  663. package/docs/zh-CN/tools/chrome-extension.md +0 -183
  664. package/docs/zh-CN/tools/creating-skills.md +0 -61
  665. package/docs/zh-CN/tools/elevated.md +0 -62
  666. package/docs/zh-CN/tools/exec-approvals.md +0 -233
  667. package/docs/zh-CN/tools/exec.md +0 -169
  668. package/docs/zh-CN/tools/firecrawl.md +0 -68
  669. package/docs/zh-CN/tools/index.md +0 -508
  670. package/docs/zh-CN/tools/llm-task.md +0 -117
  671. package/docs/zh-CN/tools/multi-agent-sandbox-tools.md +0 -400
  672. package/docs/zh-CN/tools/pipeline.md +0 -349
  673. package/docs/zh-CN/tools/plugin.md +0 -639
  674. package/docs/zh-CN/tools/reactions.md +0 -28
  675. package/docs/zh-CN/tools/skills-config.md +0 -78
  676. package/docs/zh-CN/tools/skills.md +0 -279
  677. package/docs/zh-CN/tools/slash-commands.md +0 -196
  678. package/docs/zh-CN/tools/subagents.md +0 -167
  679. package/docs/zh-CN/tools/symihub.md +0 -209
  680. package/docs/zh-CN/tools/thinking.md +0 -80
  681. package/docs/zh-CN/tools/web.md +0 -257
  682. package/docs/zh-CN/tts.md +0 -373
  683. package/docs/zh-CN/vps.md +0 -47
  684. package/docs/zh-CN/web/control-ui.md +0 -190
  685. package/docs/zh-CN/web/dashboard.md +0 -53
  686. package/docs/zh-CN/web/index.md +0 -118
  687. package/docs/zh-CN/web/tui.md +0 -166
  688. package/docs/zh-CN/web/webchat.md +0 -56
@@ -1,773 +0,0 @@
1
- ---
2
- read_when:
3
- - 开发 MS Teams 渠道功能
4
- summary: Microsoft Teams 机器人支持状态、功能和配置
5
- title: Microsoft Teams
6
- x-i18n:
7
- generated_at: "2026-02-03T07:46:52Z"
8
- model: claude-opus-4-5
9
- provider: pi
10
- source_hash: 2046cb8fa3dd349f4b25a40c013a87188af8f75c1886a782698bff2bb9f70971
11
- source_path: channels/msteams.md
12
- workflow: 15
13
- ---
14
-
15
- # Microsoft Teams(插件)
16
-
17
- > "进入此地者,放弃一切希望。"
18
-
19
- 更新时间:2026-01-21
20
-
21
- 状态:支持文本 + 私信附件;频道/群组文件发送需要 `sharePointSiteId` + Graph 权限(参见[在群聊中发送文件](#sending-files-in-group-chats))。投票通过 Adaptive Cards 发送。
22
-
23
- ## 需要插件
24
-
25
- Microsoft Teams 作为插件提供,不包含在核心安装中。
26
-
27
- **破坏性变更(2026.1.15):** MS Teams 已从核心移出。如果你使用它,必须安装插件。
28
-
29
- 原因说明:保持核心安装更轻量,并让 MS Teams 依赖项可以独立更新。
30
-
31
- 通过 CLI 安装(npm 注册表):
32
-
33
- ```bash
34
- symi plugins install @symi/msteams
35
- ```
36
-
37
- 本地检出(从 git 仓库运行时):
38
-
39
- ```bash
40
- symi plugins install ./extensions/msteams
41
- ```
42
-
43
- 如果你在配置/新手引导过程中选择 Teams 并检测到 git 检出,
44
- Symi 将自动提供本地安装路径。
45
-
46
- 详情:[插件](/tools/plugin)
47
-
48
- ## 快速设置(初学者)
49
-
50
- 1. 安装 Microsoft Teams 插件。
51
- 2. 创建一个 **Azure Bot**(App ID + 客户端密钥 + 租户 ID)。
52
- 3. 使用这些凭证配置 Symi。
53
- 4. 通过公共 URL 或隧道暴露 `/api/messages`(默认端口 3978)。
54
- 5. 安装 Teams 应用包并启动 Gateway 网关。
55
-
56
- 最小配置:
57
-
58
- ```json5
59
- {
60
- channels: {
61
- msteams: {
62
- enabled: true,
63
- appId: "<APP_ID>",
64
- appPassword: "<APP_PASSWORD>",
65
- tenantId: "<TENANT_ID>",
66
- webhook: { port: 3978, path: "/api/messages" },
67
- },
68
- },
69
- }
70
- ```
71
-
72
- 注意:群聊默认被阻止(`channels.msteams.groupPolicy: "allowlist"`)。要允许群组回复,请设置 `channels.msteams.groupAllowFrom`(或使用 `groupPolicy: "open"` 允许任何成员,需要提及才能触发)。
73
-
74
- ## 目标
75
-
76
- - 通过 Teams 私信、群聊或频道与 Symi 交流。
77
- - 保持路由确定性:回复始终返回到消息到达的渠道。
78
- - 默认使用安全的渠道行为(除非另有配置,否则需要提及)。
79
-
80
- ## 配置写入
81
-
82
- 默认情况下,Microsoft Teams 允许通过 `/config set|unset` 触发的配置更新写入(需要 `commands.config: true`)。
83
-
84
- 禁用方式:
85
-
86
- ```json5
87
- {
88
- channels: { msteams: { configWrites: false } },
89
- }
90
- ```
91
-
92
- ## 访问控制(私信 + 群组)
93
-
94
- **私信访问**
95
-
96
- - 默认:`channels.msteams.dmPolicy = "pairing"`。未知发送者在获得批准之前将被忽略。
97
- - `channels.msteams.allowFrom` 接受 AAD 对象 ID、UPN 或显示名称。当凭证允许时,向导会通过 Microsoft Graph 将名称解析为 ID。
98
-
99
- **群组访问**
100
-
101
- - 默认:`channels.msteams.groupPolicy = "allowlist"`(除非添加 `groupAllowFrom`,否则被阻止)。使用 `channels.defaults.groupPolicy` 在未设置时覆盖默认值。
102
- - `channels.msteams.groupAllowFrom` 控制哪些发送者可以在群聊/频道中触发(回退到 `channels.msteams.allowFrom`)。
103
- - 设置 `groupPolicy: "open"` 允许任何成员(默认仍需提及才能触发)。
104
- - 要**不允许任何频道**,设置 `channels.msteams.groupPolicy: "disabled"`。
105
-
106
- 示例:
107
-
108
- ```json5
109
- {
110
- channels: {
111
- msteams: {
112
- groupPolicy: "allowlist",
113
- groupAllowFrom: ["user@org.com"],
114
- },
115
- },
116
- }
117
- ```
118
-
119
- **团队 + 频道允许列表**
120
-
121
- - 通过在 `channels.msteams.teams` 下列出团队和频道来限定群组/频道回复的范围。
122
- - 键可以是团队 ID 或名称;频道键可以是会话 ID 或名称。
123
- - 当 `groupPolicy="allowlist"` 且存在团队允许列表时,仅接受列出的团队/频道(需要提及才能触发)。
124
- - 配置向导接受 `Team/Channel` 条目并为你存储。
125
- - 启动时,Symi 将团队/频道和用户允许列表名称解析为 ID(当 Graph 权限允许时)
126
- 并记录映射;未解析的条目保持原样。
127
-
128
- 示例:
129
-
130
- ```json5
131
- {
132
- channels: {
133
- msteams: {
134
- groupPolicy: "allowlist",
135
- teams: {
136
- "My Team": {
137
- channels: {
138
- General: { requireMention: true },
139
- },
140
- },
141
- },
142
- },
143
- },
144
- }
145
- ```
146
-
147
- ## 工作原理
148
-
149
- 1. 安装 Microsoft Teams 插件。
150
- 2. 创建一个 **Azure Bot**(App ID + 密钥 + 租户 ID)。
151
- 3. 构建一个引用机器人并包含以下 RSC 权限的 **Teams 应用包**。
152
- 4. 将 Teams 应用上传/安装到团队中(或用于私信的个人范围)。
153
- 5. 在 `~/.symi/symi.json`(或环境变量)中配置 `msteams` 并启动 Gateway 网关。
154
- 6. Gateway 网关默认在 `/api/messages` 上监听 Bot Framework webhook 流量。
155
-
156
- ## Azure Bot 设置(前提条件)
157
-
158
- 在配置 Symi 之前,你需要创建一个 Azure Bot 资源。
159
-
160
- ### 步骤 1:创建 Azure Bot
161
-
162
- 1. 前往[创建 Azure Bot](https://portal.azure.com/#create/Microsoft.AzureBot)
163
- 2. 填写**基本信息**选项卡:
164
-
165
- | 字段 | 值 |
166
- | ------------------ | ----------------------------------------------- |
167
- | **Bot handle** | 你的机器人名称,例如 `symi-msteams`(必须唯一) |
168
- | **Subscription** | 选择你的 Azure 订阅 |
169
- | **Resource group** | 新建或使用现有 |
170
- | **Pricing tier** | **Free** 用于开发/测试 |
171
- | **Type of App** | **Single Tenant**(推荐 - 见下方说明) |
172
- | **Creation type** | **Create new Microsoft App ID** |
173
-
174
- > **弃用通知:** 2025-07-31 之后已弃用创建新的多租户机器人。新机器人请使用 **Single Tenant**。
175
-
176
- 3. 点击 **Review + create** → **Create**(等待约 1-2 分钟)
177
-
178
- ### 步骤 2:获取凭证
179
-
180
- 1. 前往你的 Azure Bot 资源 → **Configuration**
181
- 2. 复制 **Microsoft App ID** → 这是你的 `appId`
182
- 3. 点击 **Manage Password** → 前往应用注册
183
- 4. 在 **Certificates & secrets** → **New client secret** → 复制 **Value** → 这是你的 `appPassword`
184
- 5. 前往 **Overview** → 复制 **Directory (tenant) ID** → 这是你的 `tenantId`
185
-
186
- ### 步骤 3:配置消息端点
187
-
188
- 1. 在 Azure Bot → **Configuration**
189
- 2. 将 **Messaging endpoint** 设置为你的 webhook URL:
190
- - 生产环境:`https://your-domain.com/api/messages`
191
- - 本地开发:使用隧道(见下方[本地开发](#local-development-tunneling))
192
-
193
- ### 步骤 4:启用 Teams 渠道
194
-
195
- 1. 在 Azure Bot → **Channels**
196
- 2. 点击 **Microsoft Teams** → Configure → Save
197
- 3. 接受服务条款
198
-
199
- ## 本地开发(隧道)
200
-
201
- Teams 无法访问 `localhost`。本地开发请使用隧道:
202
-
203
- **选项 A:ngrok**
204
-
205
- ```bash
206
- ngrok http 3978
207
- # 复制 https URL,例如 https://abc123.ngrok.io
208
- # 将消息端点设置为:https://abc123.ngrok.io/api/messages
209
- ```
210
-
211
- **选项 B:Tailscale Funnel**
212
-
213
- ```bash
214
- tailscale funnel 3978
215
- # 使用你的 Tailscale funnel URL 作为消息端点
216
- ```
217
-
218
- ## Teams 开发者门户(替代方案)
219
-
220
- 除了手动创建清单 ZIP,你可以使用 [Teams 开发者门户](https://dev.teams.microsoft.com/apps):
221
-
222
- 1. 点击 **+ New app**
223
- 2. 填写基本信息(名称、描述、开发者信息)
224
- 3. 前往 **App features** → **Bot**
225
- 4. 选择 **Enter a bot ID manually** 并粘贴你的 Azure Bot App ID
226
- 5. 勾选范围:**Personal**、**Team**、**Group Chat**
227
- 6. 点击 **Distribute** → **Download app package**
228
- 7. 在 Teams 中:**Apps** → **Manage your apps** → **Upload a custom app** → 选择 ZIP
229
-
230
- 这通常比手动编辑 JSON 清单更容易。
231
-
232
- ## 测试机器人
233
-
234
- **选项 A:Azure Web Chat(先验证 webhook)**
235
-
236
- 1. 在 Azure 门户 → 你的 Azure Bot 资源 → **Test in Web Chat**
237
- 2. 发送一条消息 - 你应该看到响应
238
- 3. 这确认你的 webhook 端点在 Teams 设置之前正常工作
239
-
240
- **选项 B:Teams(应用安装后)**
241
-
242
- 1. 安装 Teams 应用(侧载或组织目录)
243
- 2. 在 Teams 中找到机器人并发送私信
244
- 3. 检查 Gateway 网关日志中的传入活动
245
-
246
- ## 设置(最小纯文本)
247
-
248
- 1. **安装 Microsoft Teams 插件**
249
- - 从 npm:`symi plugins install @symi/msteams`
250
- - 从本地检出:`symi plugins install ./extensions/msteams`
251
-
252
- 2. **机器人注册**
253
- - 创建一个 Azure Bot(见上文)并记录:
254
- - App ID
255
- - 客户端密钥(App password)
256
- - 租户 ID(单租户)
257
-
258
- 3. **Teams 应用清单**
259
- - 包含一个 `bot` 条目,其中 `botId = <App ID>`。
260
- - 范围:`personal`、`team`、`groupChat`。
261
- - `supportsFiles: true`(个人范围文件处理所需)。
262
- - 添加 RSC 权限(见下文)。
263
- - 创建图标:`outline.png`(32x32)和 `color.png`(192x192)。
264
- - 将三个文件一起打包:`manifest.json`、`outline.png`、`color.png`。
265
-
266
- 4. **配置 Symi**
267
-
268
- ```json
269
- {
270
- "msteams": {
271
- "enabled": true,
272
- "appId": "<APP_ID>",
273
- "appPassword": "<APP_PASSWORD>",
274
- "tenantId": "<TENANT_ID>",
275
- "webhook": { "port": 3978, "path": "/api/messages" }
276
- }
277
- }
278
- ```
279
-
280
- 你也可以使用环境变量代替配置键:
281
- - `MSTEAMS_APP_ID`
282
- - `MSTEAMS_APP_PASSWORD`
283
- - `MSTEAMS_TENANT_ID`
284
-
285
- 5. **机器人端点**
286
- - 将 Azure Bot Messaging Endpoint 设置为:
287
- - `https://<host>:3978/api/messages`(或你选择的路径/端口)。
288
-
289
- 6. **运行 Gateway 网关**
290
- - 当插件已安装且 `msteams` 配置存在并有凭证时,Teams 渠道会自动启动。
291
-
292
- ## 历史上下文
293
-
294
- - `channels.msteams.historyLimit` 控制将多少条最近的频道/群组消息包含到提示中。
295
- - 回退到 `messages.groupChat.historyLimit`。设置 `0` 禁用(默认 50)。
296
- - 私信历史可以通过 `channels.msteams.dmHistoryLimit`(用户轮次)限制。每用户覆盖:`channels.msteams.dms["<user_id>"].historyLimit`。
297
-
298
- ## 当前 Teams RSC 权限(清单)
299
-
300
- 这些是我们 Teams 应用清单中**现有的 resourceSpecific 权限**。它们仅适用于安装了应用的团队/聊天内部。
301
-
302
- **对于频道(团队范围):**
303
-
304
- - `ChannelMessage.Read.Group`(Application)- 无需 @提及即可接收所有频道消息
305
- - `ChannelMessage.Send.Group`(Application)
306
- - `Member.Read.Group`(Application)
307
- - `Owner.Read.Group`(Application)
308
- - `ChannelSettings.Read.Group`(Application)
309
- - `TeamMember.Read.Group`(Application)
310
- - `TeamSettings.Read.Group`(Application)
311
-
312
- **对于群聊:**
313
-
314
- - `ChatMessage.Read.Chat`(Application)- 无需 @提及即可接收所有群聊消息
315
-
316
- ## Teams 清单示例(已脱敏)
317
-
318
- 包含必需字段的最小有效示例。请替换 ID 和 URL。
319
-
320
- ```json
321
- {
322
- "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.23/MicrosoftTeams.schema.json",
323
- "manifestVersion": "1.23",
324
- "version": "1.0.0",
325
- "id": "00000000-0000-0000-0000-000000000000",
326
- "name": { "short": "Symi" },
327
- "developer": {
328
- "name": "Your Org",
329
- "websiteUrl": "https://example.com",
330
- "privacyUrl": "https://example.com/privacy",
331
- "termsOfUseUrl": "https://example.com/terms"
332
- },
333
- "description": { "short": "Symi in Teams", "full": "Symi in Teams" },
334
- "icons": { "outline": "outline.png", "color": "color.png" },
335
- "accentColor": "#5B6DEF",
336
- "bots": [
337
- {
338
- "botId": "11111111-1111-1111-1111-111111111111",
339
- "scopes": ["personal", "team", "groupChat"],
340
- "isNotificationOnly": false,
341
- "supportsCalling": false,
342
- "supportsVideo": false,
343
- "supportsFiles": true
344
- }
345
- ],
346
- "webApplicationInfo": {
347
- "id": "11111111-1111-1111-1111-111111111111"
348
- },
349
- "authorization": {
350
- "permissions": {
351
- "resourceSpecific": [
352
- { "name": "ChannelMessage.Read.Group", "type": "Application" },
353
- { "name": "ChannelMessage.Send.Group", "type": "Application" },
354
- { "name": "Member.Read.Group", "type": "Application" },
355
- { "name": "Owner.Read.Group", "type": "Application" },
356
- { "name": "ChannelSettings.Read.Group", "type": "Application" },
357
- { "name": "TeamMember.Read.Group", "type": "Application" },
358
- { "name": "TeamSettings.Read.Group", "type": "Application" },
359
- { "name": "ChatMessage.Read.Chat", "type": "Application" }
360
- ]
361
- }
362
- }
363
- }
364
- ```
365
-
366
- ### 清单注意事项(必填字段)
367
-
368
- - `bots[].botId` **必须**与 Azure Bot App ID 匹配。
369
- - `webApplicationInfo.id` **必须**与 Azure Bot App ID 匹配。
370
- - `bots[].scopes` 必须包含你计划使用的界面(`personal`、`team`、`groupChat`)。
371
- - `bots[].supportsFiles: true` 是个人范围文件处理所需的。
372
- - `authorization.permissions.resourceSpecific` 如果你需要频道流量,必须包含频道读取/发送权限。
373
-
374
- ### 更新现有应用
375
-
376
- 要更新已安装的 Teams 应用(例如,添加 RSC 权限):
377
-
378
- 1. 使用新设置更新你的 `manifest.json`
379
- 2. **增加 `version` 字段**(例如,`1.0.0` → `1.1.0`)
380
- 3. **重新打包**清单和图标(`manifest.json`、`outline.png`、`color.png`)
381
- 4. 上传新的 zip:
382
- - **选项 A(Teams 管理中心):** Teams 管理中心 → Teams apps → Manage apps → 找到你的应用 → Upload new version
383
- - **选项 B(侧载):** 在 Teams 中 → Apps → Manage your apps → Upload a custom app
384
- 5. **对于团队频道:** 在每个团队中重新安装应用以使新权限生效
385
- 6. **完全退出并重新启动 Teams**(不仅仅是关闭窗口)以清除缓存的应用元数据
386
-
387
- ## 功能:仅 RSC 与 Graph
388
-
389
- ### 仅使用 **Teams RSC**(应用已安装,无 Graph API 权限)
390
-
391
- 可用:
392
-
393
- - 读取频道消息**文本**内容。
394
- - 发送频道消息**文本**内容。
395
- - 接收**个人(私信)**文件附件。
396
-
397
- 不可用:
398
-
399
- - 频道/群组**图片或文件内容**(负载仅包含 HTML 存根)。
400
- - 下载存储在 SharePoint/OneDrive 中的附件。
401
- - 读取消息历史(超出实时 webhook 事件)。
402
-
403
- ### 使用 **Teams RSC + Microsoft Graph Application 权限**
404
-
405
- 增加:
406
-
407
- - 下载托管内容(粘贴到消息中的图片)。
408
- - 下载存储在 SharePoint/OneDrive 中的文件附件。
409
- - 通过 Graph 读取频道/聊天消息历史。
410
-
411
- ### RSC 与 Graph API 对比
412
-
413
- | 功能 | RSC 权限 | Graph API |
414
- | -------------- | ------------------ | ------------------------- |
415
- | **实时消息** | 是(通过 webhook) | 否(仅轮询) |
416
- | **历史消息** | 否 | 是(可查询历史) |
417
- | **设置复杂度** | 仅应用清单 | 需要管理员同意 + 令牌流程 |
418
- | **离线工作** | 否(必须运行) | 是(随时查询) |
419
-
420
- **结论:** RSC 用于实时监听;Graph API 用于历史访问。要在离线时补上错过的消息,你需要带有 `ChannelMessage.Read.All` 的 Graph API(需要管理员同意)。
421
-
422
- ## 启用 Graph 的媒体 + 历史(频道所需)
423
-
424
- 如果你需要**频道**中的图片/文件或想要获取**消息历史**,你必须启用 Microsoft Graph 权限并授予管理员同意。
425
-
426
- 1. 在 Entra ID(Azure AD)**App Registration** 中,添加 Microsoft Graph **Application 权限**:
427
- - `ChannelMessage.Read.All`(频道附件 + 历史)
428
- - `Chat.Read.All` 或 `ChatMessage.Read.All`(群聊)
429
- 2. 为租户**授予管理员同意**。
430
- 3. 提升 Teams 应用**清单版本**,重新上传,并**在 Teams 中重新安装应用**。
431
- 4. **完全退出并重新启动 Teams** 以清除缓存的应用元数据。
432
-
433
- ## 已知限制
434
-
435
- ### Webhook 超时
436
-
437
- Teams 通过 HTTP webhook 传递消息。如果处理时间过长(例如,LLM 响应缓慢),你可能会看到:
438
-
439
- - Gateway 网关超时
440
- - Teams 重试消息(导致重复)
441
- - 丢失的回复
442
-
443
- Symi 通过快速返回并主动发送回复来处理这个问题,但非常慢的响应仍可能导致问题。
444
-
445
- ### 格式化
446
-
447
- - 基本格式化有效:**粗体**、_斜体_、`代码`、链接
448
- - 复杂的 markdown(表格、嵌套列表)可能无法正确渲染
449
- - 支持 Adaptive Cards 用于投票和任意卡片发送(见下文)
450
-
451
- ## 配置
452
-
453
- 关键设置(共享渠道模式见 `/gateway/configuration`):
454
-
455
- - `channels.msteams.enabled`:启用/禁用渠道。
456
- - `channels.msteams.appId`、`channels.msteams.appPassword`、`channels.msteams.tenantId`:机器人凭证。
457
- - `channels.msteams.webhook.port`(默认 `3978`)
458
- - `channels.msteams.webhook.path`(默认 `/api/messages`)
459
- - `channels.msteams.dmPolicy`:`pairing | allowlist | open | disabled`(默认:pairing)
460
- - `channels.msteams.allowFrom`:私信允许列表(AAD 对象 ID、UPN 或显示名称)。当 Graph 访问可用时,向导在设置期间将名称解析为 ID。
461
- - `channels.msteams.textChunkLimit`:出站文本分块大小。
462
- - `channels.msteams.chunkMode`:`length`(默认)或 `newline` 在长度分块之前按空行(段落边界)分割。
463
- - `channels.msteams.mediaAllowHosts`:入站附件主机允许列表(默认为 Microsoft/Teams 域名)。
464
- - `channels.msteams.mediaAuthAllowHosts`:在媒体重试时附加 Authorization 头的允许列表(默认为 Graph + Bot Framework 主机)。
465
- - `channels.msteams.requireMention`:在频道/群组中需要 @提及(默认 true)。
466
- - `channels.msteams.replyStyle`:`thread | top-level`(见[回复样式](#reply-style-threads-vs-posts))。
467
- - `channels.msteams.teams.<teamId>.replyStyle`:每团队覆盖。
468
- - `channels.msteams.teams.<teamId>.requireMention`:每团队覆盖。
469
- - `channels.msteams.teams.<teamId>.tools`:当缺少频道覆盖时使用的默认每团队工具策略覆盖(`allow`/`deny`/`alsoAllow`)。
470
- - `channels.msteams.teams.<teamId>.toolsBySender`:默认每团队每发送者工具策略覆盖(支持 `"*"` 通配符)。
471
- - `channels.msteams.teams.<teamId>.channels.<conversationId>.replyStyle`:每频道覆盖。
472
- - `channels.msteams.teams.<teamId>.channels.<conversationId>.requireMention`:每频道覆盖。
473
- - `channels.msteams.teams.<teamId>.channels.<conversationId>.tools`:每频道工具策略覆盖(`allow`/`deny`/`alsoAllow`)。
474
- - `channels.msteams.teams.<teamId>.channels.<conversationId>.toolsBySender`:每频道每发送者工具策略覆盖(支持 `"*"` 通配符)。
475
- - `channels.msteams.sharePointSiteId`:用于群聊/频道文件上传的 SharePoint 站点 ID(见[在群聊中发送文件](#sending-files-in-group-chats))。
476
-
477
- ## 路由和会话
478
-
479
- - 会话键遵循标准智能体格式(见 [/concepts/session](/concepts/session)):
480
- - 私信共享主会话(`agent:<agentId>:<mainKey>`)。
481
- - 频道/群组消息使用会话 ID:
482
- - `agent:<agentId>:msteams:channel:<conversationId>`
483
- - `agent:<agentId>:msteams:group:<conversationId>`
484
-
485
- ## 回复样式:话题 vs 帖子
486
-
487
- Teams 最近在相同的底层数据模型上引入了两种频道 UI 样式:
488
-
489
- | 样式 | 描述 | 推荐的 `replyStyle` |
490
- | ----------------------- | ------------------------------ | ------------------- |
491
- | **Posts**(经典) | 消息显示为卡片,下方有话题回复 | `thread`(默认) |
492
- | **Threads**(类 Slack) | 消息线性流动,更像 Slack | `top-level` |
493
-
494
- **问题:** Teams API 不暴露频道使用的 UI 样式。如果你使用错误的 `replyStyle`:
495
-
496
- - 在 Threads 样式频道中使用 `thread` → 回复嵌套显示很别扭
497
- - 在 Posts 样式频道中使用 `top-level` → 回复显示为单独的顶级帖子而不是在话题中
498
-
499
- **解决方案:** 根据频道的设置方式为每个频道配置 `replyStyle`:
500
-
501
- ```json
502
- {
503
- "msteams": {
504
- "replyStyle": "thread",
505
- "teams": {
506
- "19:abc...@thread.tacv2": {
507
- "channels": {
508
- "19:xyz...@thread.tacv2": {
509
- "replyStyle": "top-level"
510
- }
511
- }
512
- }
513
- }
514
- }
515
- }
516
- ```
517
-
518
- ## 附件和图片
519
-
520
- **当前限制:**
521
-
522
- - **私信:** 图片和文件附件通过 Teams bot file API 工作。
523
- - **频道/群组:** 附件存储在 M365 存储(SharePoint/OneDrive)中。webhook 负载仅包含 HTML 存根,而非实际文件字节。**需要 Graph API 权限**才能下载频道附件。
524
-
525
- 没有 Graph 权限,带图片的频道消息将作为纯文本接收(机器人无法访问图片内容)。
526
- 默认情况下,Symi 仅从 Microsoft/Teams 主机名下载媒体。使用 `channels.msteams.mediaAllowHosts` 覆盖(使用 `["*"]` 允许任何主机)。
527
- Authorization 头仅附加到 `channels.msteams.mediaAuthAllowHosts` 中的主机(默认为 Graph + Bot Framework 主机)。保持此列表严格(避免多租户后缀)。
528
-
529
- ## 在群聊中发送文件
530
-
531
- 机器人可以使用 FileConsentCard 流程在私信中发送文件(内置)。但是,**在群聊/频道中发送文件**需要额外设置:
532
-
533
- | 上下文 | 文件发送方式 | 所需设置 |
534
- | ---------------------- | --------------------------------------- | ------------------------------------ |
535
- | **私信** | FileConsentCard → 用户接受 → 机器人上传 | 开箱即用 |
536
- | **群聊/频道** | 上传到 SharePoint → 共享链接 | 需要 `sharePointSiteId` + Graph 权限 |
537
- | **图片(任何上下文)** | Base64 编码内联 | 开箱即用 |
538
-
539
- ### 为什么群聊需要 SharePoint
540
-
541
- 机器人没有个人 OneDrive 驱动器(`/me/drive` Graph API 端点对应用程序身份不起作用)。要在群聊/频道中发送文件,机器人上传到 **SharePoint 站点**并创建共享链接。
542
-
543
- ### 设置
544
-
545
- 1. **在 Entra ID(Azure AD)→ App Registration 中添加 Graph API 权限**:
546
- - `Sites.ReadWrite.All`(Application)- 上传文件到 SharePoint
547
- - `Chat.Read.All`(Application)- 可选,启用每用户共享链接
548
-
549
- 2. 为租户**授予管理员同意**。
550
-
551
- 3. **获取你的 SharePoint 站点 ID:**
552
-
553
- ```bash
554
- # 通过 Graph Explorer 或带有效令牌的 curl:
555
- curl -H "Authorization: Bearer $TOKEN" \
556
- "https://graph.microsoft.com/v1.0/sites/{hostname}:/{site-path}"
557
-
558
- # 示例:对于 "contoso.sharepoint.com/sites/BotFiles" 的站点
559
- curl -H "Authorization: Bearer $TOKEN" \
560
- "https://graph.microsoft.com/v1.0/sites/contoso.sharepoint.com:/sites/BotFiles"
561
-
562
- # 响应包含:"id": "contoso.sharepoint.com,guid1,guid2"
563
- ```
564
-
565
- 4. **配置 Symi:**
566
- ```json5
567
- {
568
- channels: {
569
- msteams: {
570
- // ... 其他配置 ...
571
- sharePointSiteId: "contoso.sharepoint.com,guid1,guid2",
572
- },
573
- },
574
- }
575
- ```
576
-
577
- ### 共享行为
578
-
579
- | 权限 | 共享行为 |
580
- | --------------------------------------- | ------------------------------------------ |
581
- | 仅 `Sites.ReadWrite.All` | 组织范围共享链接(组织中任何人都可以访问) |
582
- | `Sites.ReadWrite.All` + `Chat.Read.All` | 每用户共享链接(仅聊天成员可以访问) |
583
-
584
- 每用户共享更安全,因为只有聊天参与者才能访问文件。如果缺少 `Chat.Read.All` 权限,机器人回退到组织范围共享。
585
-
586
- ### 回退行为
587
-
588
- | 场景 | 结果 |
589
- | --------------------------------------- | ------------------------------------------------ |
590
- | 群聊 + 文件 + 已配置 `sharePointSiteId` | 上传到 SharePoint,发送共享链接 |
591
- | 群聊 + 文件 + 无 `sharePointSiteId` | 尝试 OneDrive 上传(可能失败),仅发送文本 |
592
- | 个人聊天 + 文件 | FileConsentCard 流程(无需 SharePoint 即可工作) |
593
- | 任何上下文 + 图片 | Base64 编码内联(无需 SharePoint 即可工作) |
594
-
595
- ### 文件存储位置
596
-
597
- 上传的文件存储在配置的 SharePoint 站点默认文档库中的 `/SymiShared/` 文件夹中。
598
-
599
- ## 投票(Adaptive Cards)
600
-
601
- Symi 将 Teams 投票作为 Adaptive Cards 发送(没有原生 Teams 投票 API)。
602
-
603
- - CLI:`symi message poll --channel msteams --target conversation:<id> ...`
604
- - 投票由 Gateway 网关记录在 `~/.symi/msteams-polls.json` 中。
605
- - Gateway 网关必须保持在线才能记录投票。
606
- - 投票尚不自动发布结果摘要(如需要请检查存储文件)。
607
-
608
- ## Adaptive Cards(任意)
609
-
610
- 使用 `message` 工具或 CLI 向 Teams 用户或会话发送任意 Adaptive Card JSON。
611
-
612
- `card` 参数接受 Adaptive Card JSON 对象。当提供 `card` 时,消息文本是可选的。
613
-
614
- **智能体工具:**
615
-
616
- ```json
617
- {
618
- "action": "send",
619
- "channel": "msteams",
620
- "target": "user:<id>",
621
- "card": {
622
- "type": "AdaptiveCard",
623
- "version": "1.5",
624
- "body": [{ "type": "TextBlock", "text": "Hello!" }]
625
- }
626
- }
627
- ```
628
-
629
- **CLI:**
630
-
631
- ```bash
632
- symi message send --channel msteams \
633
- --target "conversation:19:abc...@thread.tacv2" \
634
- --card '{"type":"AdaptiveCard","version":"1.5","body":[{"type":"TextBlock","text":"Hello!"}]}'
635
- ```
636
-
637
- 参见 [Adaptive Cards 文档](https://adaptivecards.io/)了解卡片模式和示例。目标格式详情见下方[目标格式](#target-formats)。
638
-
639
- ## 目标格式
640
-
641
- MSTeams 目标使用前缀来区分用户和会话:
642
-
643
- | 目标类型 | 格式 | 示例 |
644
- | ----------------- | -------------------------------- | ------------------------------------------------- |
645
- | 用户(按 ID) | `user:<aad-object-id>` | `user:40a1a0ed-4ff2-4164-a219-55518990c197` |
646
- | 用户(按名称) | `user:<display-name>` | `user:John Smith`(需要 Graph API) |
647
- | 群组/频道 | `conversation:<conversation-id>` | `conversation:19:abc123...@thread.tacv2` |
648
- | 群组/频道(原始) | `<conversation-id>` | `19:abc123...@thread.tacv2`(如果包含 `@thread`) |
649
-
650
- **CLI 示例:**
651
-
652
- ```bash
653
- # 按 ID 发送给用户
654
- symi message send --channel msteams --target "user:40a1a0ed-..." --message "Hello"
655
-
656
- # 按显示名称发送给用户(触发 Graph API 查找)
657
- symi message send --channel msteams --target "user:John Smith" --message "Hello"
658
-
659
- # 发送到群聊或频道
660
- symi message send --channel msteams --target "conversation:19:abc...@thread.tacv2" --message "Hello"
661
-
662
- # 向会话发送 Adaptive Card
663
- symi message send --channel msteams --target "conversation:19:abc...@thread.tacv2" \
664
- --card '{"type":"AdaptiveCard","version":"1.5","body":[{"type":"TextBlock","text":"Hello"}]}'
665
- ```
666
-
667
- **智能体工具示例:**
668
-
669
- ```json
670
- {
671
- "action": "send",
672
- "channel": "msteams",
673
- "target": "user:John Smith",
674
- "message": "Hello!"
675
- }
676
- ```
677
-
678
- ```json
679
- {
680
- "action": "send",
681
- "channel": "msteams",
682
- "target": "conversation:19:abc...@thread.tacv2",
683
- "card": {
684
- "type": "AdaptiveCard",
685
- "version": "1.5",
686
- "body": [{ "type": "TextBlock", "text": "Hello" }]
687
- }
688
- }
689
- ```
690
-
691
- 注意:没有 `user:` 前缀时,名称默认解析为群组/团队。按显示名称定位人员时始终使用 `user:`。
692
-
693
- ## 主动消息
694
-
695
- - 主动消息仅在用户交互**之后**才可能,因为我们在那时存储会话引用。
696
- - 有关 `dmPolicy` 和允许列表控制,请参见 `/gateway/configuration`。
697
-
698
- ## 团队和频道 ID(常见陷阱)
699
-
700
- Teams URL 中的 `groupId` 查询参数**不是**用于配置的团队 ID。请从 URL 路径中提取 ID:
701
-
702
- **团队 URL:**
703
-
704
- ```
705
- https://teams.microsoft.com/l/team/19%3ABk4j...%40thread.tacv2/conversations?groupId=...
706
- └────────────────────────────┘
707
- 团队 ID(URL 解码此部分)
708
- ```
709
-
710
- **频道 URL:**
711
-
712
- ```
713
- https://teams.microsoft.com/l/channel/19%3A15bc...%40thread.tacv2/ChannelName?groupId=...
714
- └─────────────────────────┘
715
- 频道 ID(URL 解码此部分)
716
- ```
717
-
718
- **用于配置:**
719
-
720
- - 团队 ID = `/team/` 后的路径段(URL 解码,例如 `19:Bk4j...@thread.tacv2`)
721
- - 频道 ID = `/channel/` 后的路径段(URL 解码)
722
- - **忽略** `groupId` 查询参数
723
-
724
- ## 私有频道
725
-
726
- 机器人在私有频道中的支持有限:
727
-
728
- | 功能 | 标准频道 | 私有频道 |
729
- | ------------------- | -------- | ---------------- |
730
- | 机器人安装 | 是 | 有限 |
731
- | 实时消息(webhook) | 是 | 可能不工作 |
732
- | RSC 权限 | 是 | 行为可能不同 |
733
- | @提及 | 是 | 如果机器人可访问 |
734
- | Graph API 历史 | 是 | 是(有权限) |
735
-
736
- **如果私有频道不工作的变通方法:**
737
-
738
- 1. 使用标准频道进行机器人交互
739
- 2. 使用私信 - 用户始终可以直接给机器人发消息
740
- 3. 使用 Graph API 进行历史访问(需要 `ChannelMessage.Read.All`)
741
-
742
- ## 故障排除
743
-
744
- ### 常见问题
745
-
746
- - **频道中图片不显示:** 缺少 Graph 权限或管理员同意。重新安装 Teams 应用并完全退出/重新打开 Teams。
747
- - **频道中无响应:** 默认需要提及;设置 `channels.msteams.requireMention=false` 或按团队/频道配置。
748
- - **版本不匹配(Teams 仍显示旧清单):** 移除 + 重新添加应用并完全退出 Teams 以刷新。
749
- - **来自 webhook 的 401 Unauthorized:** 在没有 Azure JWT 的情况下手动测试时属于预期情况 - 意味着端点可达但认证失败。使用 Azure Web Chat 正确测试。
750
-
751
- ### 清单上传错误
752
-
753
- - **"Icon file cannot be empty":** 清单引用的图标文件为 0 字节。创建有效的 PNG 图标(`outline.png` 为 32x32,`color.png` 为 192x192)。
754
- - **"webApplicationInfo.Id already in use":** 应用仍安装在另一个团队/聊天中。先找到并卸载它,或等待 5-10 分钟让其传播。
755
- - **上传时"Something went wrong":** 改为通过 https://admin.teams.microsoft.com 上传,打开浏览器 DevTools(F12)→ Network 选项卡,检查响应正文中的实际错误。
756
- - **侧载失败:** 尝试"Upload an app to your org's app catalog"而不是"Upload a custom app" - 这通常可以绕过侧载限制。
757
-
758
- ### RSC 权限不工作
759
-
760
- 1. 验证 `webApplicationInfo.id` 与你的机器人 App ID 完全匹配
761
- 2. 重新上传应用并在团队/聊天中重新安装
762
- 3. 检查你的组织管理员是否阻止了 RSC 权限
763
- 4. 确认你使用的是正确的范围:团队使用 `ChannelMessage.Read.Group`,群聊使用 `ChatMessage.Read.Chat`
764
-
765
- ## 参考资料
766
-
767
- - [创建 Azure Bot](https://learn.microsoft.com/en-us/azure/bot-service/bot-service-quickstart-registration) - Azure Bot 设置指南
768
- - [Teams 开发者门户](https://dev.teams.microsoft.com/apps) - 创建/管理 Teams 应用
769
- - [Teams 应用清单模式](https://learn.microsoft.com/en-us/microsoftteams/platform/resources/schema/manifest-schema)
770
- - [使用 RSC 接收频道消息](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/channel-messages-with-rsc)
771
- - [RSC 权限参考](https://learn.microsoft.com/en-us/microsoftteams/platform/graph-api/rsc/resource-specific-consent)
772
- - [Teams 机器人文件处理](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/bots-filesv4)(频道/群组需要 Graph)
773
- - [主动消息](https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/conversations/send-proactive-messages)