• archery 1.80推送工单到飞书webhook失败解决方案


    今天收到开发反馈,archery工单不在飞群书内通知了,

    从archery服务器cul 飞书群机器人webhook地址可以正常推送消息,估计是飞书接口发生了变化,

    因为之前archery推送消息到飞书webhook也不行,最后去行webhook地址中的v2关键字才成功。

    进入到archery 所在docker中查看日志,报错在【/opt/archery/common/utils/sendmsg.py】 第212行代码

    [root@3a5c33b1a688 logs]# tail -f archery.log
      File "/opt/archery/sql/notify.py", line 64, in __send
        msg_sender.send_feishu_webhook(feishu_webhook, msg_title, msg_content)
      File "/opt/archery/common/utils/sendmsg.py", line 212, in send_feishu_webhook
        if r_json['ok']:
    KeyError: 'ok'

    查看【send_feishu_webhook】发送消息的方法,这个并不符合飞书规范,

    飞书帮助文档:

    https://open.feishu.cn/document/ukTMukTMukTM/uUjNz4SN2MjL1YzM

    报错根本原因是缺少msg_type,这个是必填项。

    def send_feishu_webhook(url, title, content):
        data = {
            xxxxxx 
        }
        r = requests.post(url=url, json=data)
        r_json = r.json()
        #if r_json['ok']:
        if r_json.get('StatusCode') == 0:
            logger.debug(f'飞书Webhook推送成功
    通知对象:{url}
    消息内容:{content}')
        else:
            logger.error(f"飞书Webhook推送失败错误码
    请求url:{url}
    请求data:{data}
    请求响应:{r_json}")

    最后将

    data = {

        xxxxx

          } 

    替换为,可以正常推送消息。

        data = {
        "msg_type": "post",
        "content": {
            "post": {
                "zh_cn": {
                    "title": title,
                    "content": [
                        [
                            {
                                "tag": "text",
                                "text": content
                            }
                        ]
                    ]
                }
            }
        }
    }

    我们目前正在由企业微信向飞书过渡阶段,webhook地址既配置了飞书,又配置了企业微信,

    但archery推送消息是顺序推的,先推飞书,再推企业微信,如果推飞书失败,就退了代码不再继续推企业微信了。

    最后看了github,才发现官方在1.8.1中修复这个问题了

    https://github.com/hhyo/Archery/blob/master/common/utils/sendmsg.py

    继续优化这段代码,如果工单审核通过后

        def send_feishu_webhook(url, title, content):
            if "审核通过" in title or "异常" in title:
                data={"msg_type": "post",
        "content": {
            "post": {
                "zh_cn": {
                    "title": title,
                    "content": [
                        [
                            {
                                "tag": "text",
                                "text": content
                            },
                            {
                                "tag": "at",
                                "user_id": "dba1"
                            },
                            {
                                "tag": "at",
                                "user_id": "dba2"
                            }
                        ]
                    ]
                }
            }
        }
    }
            else:
                data = {
        "msg_type": "post",
        "content": {
            "post": {
                "zh_cn": {
                    "title": title,
                    "content": [
                        [
                            {
                                "tag": "text",
                                "text": content
                            }
                        ]
                    ]
                }
            }
        }
    }
    
            r = requests.post(url=url, json=data)
            r_json = r.json()
            #if r_json['ok']:
            if r_json.get('StatusCode') == 0:
                logger.debug(f'飞书Webhook推送成功
    通知对象:{url}
    消息内容:{content}')
            else:
                logger.error(f"飞书Webhook推送失败错误码
    请求url:{url}
    请求data:{data}
    请求响应:{r_json}")
  • 相关阅读:
    elasticsearch配置小记(转)
    valgrind详解
    elasticsearch2.x优化小结(单节点)
    使 nodejs 代码 在后端运行(forever)
    使 nodejs 代码 在后端运行(nohup)
    Flutter移动电商实战 --(16)切换后页面状态的保持AutomaticKeepAliveClientMixin
    Flutter移动电商实战 --(14)首页_拨打电话操作
    Flutter移动电商实战 --(15)商品推荐区域制作
    Flutter移动电商实战 --(11)首页_屏幕适配方案和制作
    [UI] 精美UI界面欣赏[9]
  • 原文地址:https://www.cnblogs.com/nanxiang/p/14927249.html
Copyright © 2020-2023  润新知