求助:Teams频道微软C# Bot自托管部署分步指引
自托管Teams C# Bot分步部署指引(新手向)
一、前置准备
- 安装.NET SDK 6.0及以上版本(Bot Framework对该版本支持最稳定)
- 安装Visual Studio(或VS Code搭配C#开发插件)
- 注册Azure账号(免费版足够完成初期部署测试)
- 自有服务器需具备公网IP,并开放HTTPS端口(默认443)
- 可选但推荐:拥有独立域名(生产环境HTTPS证书依赖域名)
二、创建Azure核心资源
1. 新建Azure Bot资源
- 登录Azure门户,搜索「Azure Bot」并进入创建页面
- 资源组:选择现有组或新建专属组
- Bot名称:自定义全局唯一名称
- 订阅:关联你的Azure订阅
- 定价层:选择「F0」免费层(测试阶段使用,生产可按需升级)
- Bot类型:选择「多租户」(支持跨组织Teams使用)
- 应用注册:选择「新建」,系统会自动生成Azure AD应用(后续需用到该应用的ID和密码)
- 创建完成后,在「配置」页面记录Microsoft App ID,并点击「管理密码」生成并保存Microsoft App Password(务必妥善保管,泄露会导致Bot被非法调用)
2. 启用Teams通道
- 进入Azure Bot资源的「通道」页面,点击「Microsoft Teams」
- 勾选「团队」「个人」等需要启用的交互类型,同意条款后完成启用
- 启用后保存页面提供的「添加到Teams」链接,后续用于将Bot接入Teams团队
三、创建C# Teams Bot项目
- 打开Visual Studio,创建新项目,搜索「Bot Framework v4 Echo Bot (C#)」(基础模板),或直接选择「Teams Bot」模板(更贴合Teams场景)
- 若使用基础Echo Bot模板,需添加Teams适配代码:
在Startup.cs中引入Teams中间件:using Microsoft.Bot.Builder.Teams; public void ConfigureServices(IServiceCollection services) { // 注册Teams中间件 services.AddSingleton<TeamsMiddleware>(); services.AddBot<EchoBot>(options => { options.Middleware.Add(services.GetService<TeamsMiddleware>()); options.CredentialProvider = new SimpleCredentialProvider(Configuration["MicrosoftAppId"], Configuration["MicrosoftAppPassword"]); }); } - 确保Bot代码能处理Teams专属活动(如频道消息、团队成员变更通知等)
四、本地调试(依赖ngrok)
- 启动Bot项目,默认监听地址为
http://localhost:3978/api/messages - 下载并运行ngrok,执行命令:
ngrok http 3978,获取生成的HTTPS域名(如https://xxxx-xx-xx-xx-xx.ngrok.io) - 返回Azure Bot的「配置」页面,将「消息终结点」修改为
https://xxxx-xx-xx-xx-xx.ngrok.io/api/messages并保存 - 测试:通过之前保存的「添加到Teams」链接将Bot加入Teams,发送消息验证Bot是否能正常回复
五、生产环境部署到自有服务器
1. 打包Bot项目
- 在Visual Studio中右键项目→「发布」,选择「文件夹」作为目标,生成部署包
- 或使用命令行打包:
dotnet publish -c Release -o ./publish
2. 服务器配置
- 将打包后的文件上传至服务器指定目录(如Linux的
/opt/teamsbot或Windows的C:\teamsbot) - 配置HTTPS:
- 若有域名,申请SSL证书(如Let's Encrypt免费证书)
- 配置反向代理(以Nginx为例):
server { listen 443 ssl; server_name your-domain.com; ssl_certificate /path/to/your-cert.pem; ssl_certificate_key /path/to/your-privkey.pem; location /api/messages { proxy_pass http://localhost:3978/api/messages; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
- 设置Bot为后台服务:
- Linux:创建systemd服务文件实现开机自启
[Unit] Description=Teams Bot Service After=network.target [Service] WorkingDirectory=/opt/teamsbot ExecStart=/usr/bin/dotnet /opt/teamsbot/YourBot.dll Restart=always User=www-data [Install] WantedBy=multi-user.target - Windows:使用
sc create命令或服务管理工具创建Windows服务
- Linux:创建systemd服务文件实现开机自启
3. 更新Azure Bot终结点
- 返回Azure Bot「配置」页面,将「消息终结点」修改为服务器HTTPS地址:
https://your-domain.com/api/messages,保存配置
六、权限配置(核心环节)
1. Azure AD应用权限
- 进入Azure AD的「应用注册」,找到Bot对应的应用
- 转到「API权限」页面,添加以下应用权限(按需选择):
ChannelMessage.Send:允许Bot发送频道消息Team.ReadBasic.All:允许Bot读取团队基础信息User.Read.All:允许Bot读取用户基本信息
- 点击「授予管理员同意」(需Azure AD管理员权限),确保权限生效
2. Teams团队权限
- 将Bot添加到Teams团队时,需要团队管理员同意Bot的权限请求
- 若需全局部署,需Azure AD管理员在Teams管理中心配置Bot的权限政策
七、生产环境验证
- 在Teams团队中发送消息,确认Bot能正常接收并回复
- 查看服务器上的Bot日志,排查网络连接、权限不足等潜在问题
内容的提问来源于stack exchange,提问作者Astin Gengo
相关产品推荐
相关产品推荐

