Teams 开发:自定义机器人与消息扩展实践

Microsoft Teams 是一个强大的协作平台,支持开发者通过自定义机器人和消息扩展来增强功能。自定义机器人可以自动化任务、响应命令,而消息扩展允许用户从消息中触发操作(如搜索、添加按钮)。下面,我将以结构清晰的方式,逐步指导您如何实现这些功能。内容基于官方文档和最佳实践,确保真实可靠。我们将使用 Python 和 Bot Framework SDK 作为示例工具,但原理适用于其他语言。

步骤 1: 准备开发环境

在开始前,确保您已设置好以下基础:

  • 安装必要工具:下载并安装 Python(推荐 3.8+)、pip 包管理器。
  • 注册 Teams 应用:访问 Microsoft Azure Portal,创建一个新应用并获取 App IDApp Password。记下这些值,后续代码中会用到。
  • 安装 SDK:在终端运行命令安装 Bot Framework SDK:
    pip install botbuilder-core botbuilder-schema
    

步骤 2: 创建自定义机器人

自定义机器人核心是处理用户消息。以下是一个简单示例,机器人响应文本消息:

  1. 创建 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 方法

  1. 运行机器人:使用 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_IDYOUR_APP_PASSWORD 为 Azure 中获取的值。
    • 机器人通过 /api/messages 端点接收消息,处理逻辑在 MyBot 类中。
    • 测试时,使用 ngrok 暴露本地端口:ngrok http 3978,并将 ngrok URL 配置到 Azure Bot Service。
步骤 3: 实现消息扩展

消息扩展允许用户从消息中执行操作,例如添加搜索按钮。以下是一个搜索扩展的示例:

  1. 配置 manifest.json:在 Teams 应用 manifest 文件中添加消息扩展配置(需上传到 Azure):
{
  "composeExtensions": [
    {
      "type": "query",
      "id": "searchCmd",
      "title": "搜索示例",
      "parameters": [
        {
          "name": "query",
          "title": "关键词",
          "description": "输入搜索内容"
        }
      ]
    }
  ]
}

  1. 扩展机器人代码:在 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 示例库。遇到具体问题时,欢迎提供更多细节,我会进一步优化方案!
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐