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

时间:2021-01-13 11:26:38

标签: python-3.x botframework microsoft-teams microsoft-graph-teams

我似乎不知道如何使用 Python Bot(botframework)主动向 MS 团队频道发送消息。

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

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

阅读文档

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

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

对于第 1 步,如果我的机器人没有添加到频道中的事件,我如何/何时获取频道 ID?

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

结论

有人知道如何使用 Python 应用程序/机器人向 MS Teams 频道发送消息吗? 它应该不需要用户交互。应用程序/机器人被添加到团队频道,并且它应该立即在此频道内发布一条消息

2 个答案:

答案 0 :(得分:1)

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

确保:

  1. 点击团队名称旁边的...溢出菜单
  2. 选择管理团队
  3. 选择“应用”标签
  4. 点击垃圾桶图标从该团队中删除应用
  5. 然后再次尝试安装该应用

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

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 继承。

答案 1 :(得分:0)

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