如何主动向团队频道发送消息

How to proactively send a message to a teams channel

我似乎无法弄清楚如何使用 Python 机器人 (botframework) 主动向 MS 团队频道发送消息。

  1. 一位用户安装了我的第三方 MS 团队机器人,并将其添加到他们的团队频道之一。
  2. 我的机器人需要从不相关的后端系统发送临时消息作为事件的一部分。

botframework不会让你随意发消息的渠道,它需要一个对话参考。您可以通过多种方式获取对话参考,例如有人向机器人发送消息,或者获取频道列表并从中构建 conversationId

正在阅读文档

The documentation会让你相信实际上可以随意发送消息,使用以下步骤:

  1. 获取用户 ID 或 team/channel ID(如果需要)。
  2. 创建对话或对话线程(如果需要)。
  3. 获取对话 ID。
  4. 发送消息。

对于第 1 步,how/when如果没有我的机器人被添加到频道的事件,我是否可以获得频道 ID?

对于第 2 步,如果我不知道有哪些团队频道,如何创建对话?

结论

有人知道如何使用 Python app/bot 向 MS Teams 频道发送消息吗? 它不应该需要用户交互。 app/bot 被添加到 Teams 频道,并且 它应该立即 post 此频道内的消息

我正在为 GitHub 上的 pnp Teams 示例回购制作示例,希望在接下来的几天内提交。我还没有开始编写文档,但代码功能齐全,有 C# 和 Node.js 版本的后端,它发送一个非常简单的主动消息示例(显示最基本的东西你需要)-希望它可以使用,即使它不在Python中-见https://github.com/HiltonGiesenow/teams-dev-samples/tree/add-proactive-messaging-sample/samples/bot-proactive-messaging/src

原来问题是我的 on_teams_members_added() 没有被调用,因为我一直在 Teams 中删除应用程序而不是卸载。

确保:

  1. 单击团队名称旁边的 ... 溢出菜单
  2. 选择管理团队
  3. Select“应用程序”选项卡
  4. 单击垃圾桶图标可从该团队中删除该应用程序
  5. 然后尝试重新安装应用程序

使用此代码,您可以在机器人进入频道时发送频道消息:

async def on_teams_members_added(  # pylint: disable=unused-argument
    self,
    teams_members_added: [TeamsChannelAccount],
    team_info: TeamInfo,
    turn_context: TurnContext,
):
    for member in teams_members_added:
        if member.id == turn_context.activity.recipient.id and team_info is not None:
            # bot entered a Teams channel
            await turn_context.send_activity("Hello channel! I have just been added.")

您的处理程序需要继承自 TeamsActivityHandler