Teams 开发:自定义机器人与消息扩展实践
·
Teams 开发:自定义机器人与消息扩展实践
Microsoft Teams 是一个强大的协作平台,支持开发者通过自定义机器人和消息扩展来增强功能。自定义机器人可以自动化任务、响应命令,而消息扩展允许用户从消息中触发操作(如搜索、添加按钮)。下面,我将以结构清晰的方式,逐步指导您如何实现这些功能。内容基于官方文档和最佳实践,确保真实可靠。我们将使用 Python 和 Bot Framework SDK 作为示例工具,但原理适用于其他语言。
步骤 1: 准备开发环境
在开始前,确保您已设置好以下基础:
- 安装必要工具:下载并安装 Python(推荐 3.8+)、pip 包管理器。
- 注册 Teams 应用:访问 Microsoft Azure Portal,创建一个新应用并获取 App ID 和 App Password。记下这些值,后续代码中会用到。
- 安装 SDK:在终端运行命令安装 Bot Framework SDK:
pip install botbuilder-core botbuilder-schema
步骤 2: 创建自定义机器人
自定义机器人核心是处理用户消息。以下是一个简单示例,机器人响应文本消息:
- 创建 Python 文件(如
bot.py),并添加以下代码:
from botbuilder.core import ActivityHandler, TurnContext
from botbuilder.schema import ActivityTypes, Activity
class MyBot(ActivityHandler):
async def on_message_activity(self, turn_context: TurnContext):
# 当用户发送消息时,机器人回复
user_message = turn_context.activity.text
reply = f"你好!你说了: '{user_message}'。我是自定义机器人,随时为你服务。"
await turn_context.send_activity(reply)
# 如果需要处理其他事件,扩展 on_event 方法
- 运行机器人:使用 Flask 框架托管(安装
pip install flask)。创建app.py:
from flask import Flask, request, Response
from botbuilder.core import BotFrameworkAdapter, BotFrameworkAdapterSettings
from bot import MyBot
app = Flask(__name__)
adapter_settings = BotFrameworkAdapterSettings("YOUR_APP_ID", "YOUR_APP_PASSWORD")
adapter = BotFrameworkAdapter(adapter_settings)
bot = MyBot()
@app.route("/api/messages", methods=["POST"])
def messages():
if "application/json" in request.headers["Content-Type"]:
body = request.json
activity = Activity().deserialize(body)
async def handle_turn(turn_context):
await bot.on_turn_activity(turn_context)
task = adapter.process_activity(activity, "", handle_turn)
return Response(status=200)
else:
return Response(status=415)
if __name__ == "__main__":
app.run(port=3978)
- 关键点:
- 替换
YOUR_APP_ID和YOUR_APP_PASSWORD为 Azure 中获取的值。 - 机器人通过
/api/messages端点接收消息,处理逻辑在MyBot类中。 - 测试时,使用 ngrok 暴露本地端口:
ngrok http 3978,并将 ngrok URL 配置到 Azure Bot Service。
- 替换
步骤 3: 实现消息扩展
消息扩展允许用户从消息中执行操作,例如添加搜索按钮。以下是一个搜索扩展的示例:
- 配置 manifest.json:在 Teams 应用 manifest 文件中添加消息扩展配置(需上传到 Azure):
{
"composeExtensions": [
{
"type": "query",
"id": "searchCmd",
"title": "搜索示例",
"parameters": [
{
"name": "query",
"title": "关键词",
"description": "输入搜索内容"
}
]
}
]
}
- 扩展机器人代码:在
bot.py中添加处理消息扩展的逻辑:
from botbuilder.schema import InvokeResponse, MessagingExtensionResponse
class MyBot(ActivityHandler):
# ... 之前的 on_message_activity 代码 ...
async def on_teams_messaging_extension_query(self, turn_context: TurnContext, query):
# 处理搜索查询
search_term = query.parameters[0].value["query"]
results = [{"title": f"结果: {search_term}", "value": "data"}]
response = MessagingExtensionResponse(
compose_extension=MessagingExtensionResult(
type="result",
attachment_layout="list",
attachments=[{"preview": {"content": {"text": result["title"]}}, "title": result["title"]} for result in results]
)
)
return InvokeResponse(status=200, body=response)
- 关键点:
- 消息扩展通过
on_teams_messaging_extension_query方法处理用户查询。 - 示例中返回一个简单列表,实际应用可集成数据库或 API(如调用 $search_api$)。
- 部署后,在 Teams 中发送消息时,点击“...”菜单即可触发扩展。
- 消息扩展通过
步骤 4: 测试和部署最佳实践
- 本地测试:运行
python app.py,使用 Teams 客户端测试机器人响应和扩展功能。 - 部署到 Azure:将代码部署到 Azure Web App,配置 HTTPS 终结点。
- 安全注意事项:
- 使用 OAuth 2.0 认证用户。
- 加密敏感数据(如 $app_password$)。
- 遵循 Teams 开发策略,避免滥用。
- 性能优化:限制机器人响应时间(例如 $timeout < 5s$),使用缓存机制。
总结
通过以上步骤,您可以高效实现 Teams 自定义机器人和消息扩展。关键实践包括:
- 利用 Bot Framework SDK 简化开发。
- 消息扩展增强用户交互性。
- 测试覆盖所有场景(如错误处理)。
推荐资源:Microsoft Teams 官方文档 和 GitHub 示例库。遇到具体问题时,欢迎提供更多细节,我会进一步优化方案!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)