【问题标题】:Send automated messages to Microsoft Teams using Python使用 Python 向 Microsoft Teams 发送自动消息
【发布时间】:2022-05-12 17:32:17
【问题描述】:

我想运行一个 Python 脚本,最后通过 MS Teams 将结果以文本格式发送给几个员工

是否有任何已经构建的库可以让我通过 Python 代码在 Microsoft Teams 中发送消息?

【问题讨论】:

    标签: python microsoft-teams


    【解决方案1】:

    1.在 MS Teams 中创建 webhook

    将传入 Webhook 添加到 Teams 频道:

    1. 导航到要添加 webhook 的频道,然后从顶部导航栏中选择 (•••)更多选项
    2. 从下拉菜单中选择连接器,然后搜索Incoming Webhook
    3. 选择配置按钮,提供名称,并可选择为您的 webhook 上传图像头像。
    4. 对话窗口将显示一个唯一的 URL,该 URL 将映射到通道。确保复制并保存 URL - 您需要将其提供给外部服务。
    5. 选择完成按钮。该 webhook 将在团队频道中提供。

    2。安装 pymsteam

    pip install pymsteams
    

    3.创建你的python脚本

    import pymsteams
    myTeamsMessage = pymsteams.connectorcard("<Microsoft Webhook URL>")
    myTeamsMessage.text("this is my text")
    myTeamsMessage.send()
    

    更多信息在这里:

    Add a webook to MS Teams

    Python pymsteams library

    【讨论】:

    • 谢谢。我意识到我忽略了整个 webhook 交易,因为我在要添加到 Teams 的连接器列表中找不到 webhook 连接器。我想我得问问管理员了。谢谢你:)
    • 在创建新的 webhook 时,一件重要的事情是:您需要选择您团队的 Settings =&gt; Member permissions =&gt; Allow members to create, update, and remove connectors。如果选择它,任何团队成员都可以添加、修改或删除连接器。
    • 我拥有创建和编辑频道的权限,但我仍然无法在 更多选项 菜单中找到 webhook 连接器,并且根据 @Ankush,我' 已经询问并且管理员已确认我应该能够创建/更新/删除连接器。我已经尝试创建一个新频道,但仍然没有获得该选项。我怀疑我遗漏了一些明显的东西,或者 Microsoft 是否更改了 API 并隐藏了该连接器?
    • @GerryC,我刚刚使用 Windows Teams v1.3(64 位)进行了尝试。工作正常。更多选项(...) -> 连接器 -> 搜索“Webhook”。
    • @Ankush -- 虽然我更希望能够使用 RESTful 技术,但我将退回到通过电子邮件将文件内容(它们是带有天气信息的文本文件)发送到频道.在我可以找到/识别 Webhook 并使用它之前,电子邮件将不得不这样做。感谢您的想法和帮助!
    【解决方案2】:

    发送 Msteams 通知,无需附加包。

    一种无需使用任何外部模块即可向团队发送消息的简单方法。这基本上是在 pymsteams 模块的底层。当您使用 AWS Lambda 时,它会更有用,因为您不必在 Lambda 中添加层或提供 pymsteams 模块作为部署包。

    import urllib3
    import json
    
    
    class TeamsWebhookException(Exception):
        """custom exception for failed webhook call"""
        pass
    
    
    class ConnectorCard:
        def __init__(self, hookurl, http_timeout=60):
            self.http = urllib3.PoolManager()
            self.payload = {}
            self.hookurl = hookurl
            self.http_timeout = http_timeout
    
        def text(self, mtext):
            self.payload["text"] = mtext
            return self
    
        def send(self):
            headers = {"Content-Type":"application/json"}
            r = self.http.request(
                    'POST',
                    f'{self.hookurl}',
                    body=json.dumps(self.payload).encode('utf-8'),
                    headers=headers, timeout=self.http_timeout)
            if r.status == 200: 
                return True
            else:
                raise TeamsWebhookException(r.reason)
    
    
    if __name__ == "__main__":
        myTeamsMessage = ConnectorCard(MSTEAMS_WEBHOOK)
        myTeamsMessage.text("this is my test message to the teams channel.")
        myTeamsMessage.send()
    

    参考:pymsteams

    【讨论】:

    • 这是一个可靠的解决方案,但它确实使用了外部包 (urllib3)
    • 可以,但您不必在 Lambda 中为该模块添加层。您只需将此 python 代码复制粘贴到 lambda 中即可...
    • OP 没有说部署到 Lambda 上?
    【解决方案3】:

    这是一个受@nirojshrestha019's solution启发的简单的第三方无包解决方案:

    1.在 MS Teams 中创建 webhook

    将传入 Webhook 添加到 Teams 频道:

    1. 导航到要添加 webhook 的频道,然后从顶部导航栏中选择 (•••) 连接器
    2. 搜索 Incoming Webhook,并添加它。
    3. 点击配置并为您的 webhook 提供一个名称。
    4. 复制出现的网址并点击“确定”。

    2。编写脚本!

    import json
    import sys
    from urllib import request as req
    
    
    class TeamsWebhookException(Exception):
        pass
    
    
    WEBHOOK_URL = "https://myco.webhook.office.com/webhookb2/abc-def-ghi/IncomingWebhook/blahblah42/jkl-mno"
    
    
    def post_message(message: str) -> None:
        request = req.Request(url=WEBHOOK_URL, method="POST")
        request.add_header(key="Content-Type", val="application/json")
        data = json.dumps({"text": message}).encode()
        with req.urlopen(url=request, data=data) as response:
            if response.status != 200:
                raise TeamsWebhookException(response.reason)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 2019-04-22
      • 2020-10-15
      • 1970-01-01
      • 2020-11-14
      相关资源
      最近更新 更多