钉钉发送消息失败是什么原因,为什么钉钉上的消息总是发送失败

首页 > 上门服务 > 作者:YD1662023-12-02 13:38:23

图片发送:

需要开发机器人应用,在此不详细介绍,可以参考飞书官方地址:

https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/image/create

https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-enable-bot-ability

公司内部开发已开发完成,这里主要介绍下测试结果数据和图片汇总,以及调用发送

# 获取所有的图片列表 def get_screen(self): screen_list = [] return screen_list # 获取测试失败的模块列表 def get_module_list(self): error_module_list = [] return error_module_list # 图片消息发送 def send_img_msg(self, screen_path): screen_list = self.get_screen() error_module_list = self.get_module_list() image_list = [] data = { 'title': "UI检测结果", 'mutiple_text': [ "如下页面展示异常:", ], 'image_list': [] } image_list = data['image_list'] mutiple_text = data['mutiple_text'] # 失败模块加入发送data中 for module_name in error_module_list: mutiple_text.append(module_name) # 图片文件的base64编解码,webhook调用发送 for screen in screen_list: file_path = os.path.join(screen_path, screen) try: with open(file_path, 'rb') as fp: image_base64 = base64.b64encode(fp.read()) image_binary_str = image_base64.decode() image_list.append(image_binary_str) except Exception as e: print("there is an error when open screen file: ", e) res = requests.post(url=self.webhook, json=data) if __name__ == '__main__': web_hook = "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxx" screen_file_path = "/home/jenkins/workspace/UITest/screens" alarm.send_img_msg(screen_file_path)

在实际应用中该脚本文件要集成的jenkins中,在持续集成步骤,每次触发构建后自动发送通知,在脚本中可加一个条件,如果有失败结果再发送群通知。

二、钉钉群消息发送

同飞书类似,需要添加自定义机器人,获取webhook及加签key

步骤:

  1. 进入群聊,打开群设置,智能群助手,并点击添加机器人。选择自定义

钉钉发送消息失败是什么原因,为什么钉钉上的消息总是发送失败(5)

2. 点击添加,设置机器人头像、名字,勾选“加签”,复制保存密钥,然后点击完成。

3. 会自动生成webhook,webhook复制保存,点击完成,机器人添加群完毕。

4. 调用webhook发送消息

本例同样采用了加签方式进行消息发送,把timestamp "\n" 密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。

text消息发送:

class Alarm: def __init__(self, webhook, key): self.url = webhook self.secret = key self.headers = {"Content-Type": "application/json"} def get_sign(self, timestamp, secret): secret_enc = secret.encode('utf-8') string_to_sign = '{}\n{}'.format(timestamp, secret) string_to_sign_enc = string_to_sign.encode('utf-8') hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() sign = urllib.parse.quote_plus(base64.b64encode(hmac_code)) return timestamp, sign def send_text_msg(self, msg, at_mobiles=None, is_atall=False): data = { "msgtype": "text", "text": { "content": msg }, "at": { "atMobiles": at_mobiles, "isAtAll": is_atall } } timestamp, sign = self.get_sign(str(round(time.time() * 1000)), self.secret) url = f'{self.url}×tamp={timestamp}&sign={sign}' r = requests.post(url, json=data, headers=self.headers) ret = r.json() if ret.get("errcode") != 0: logger.info("钉钉消息发送失败!返回报文是:{}", ret) return False logger.info("钉钉消息发送成功") return True if __name__ == '__main__': web_hook = "https://oapi.dingtalk.com/robot/send?access_token=test" key = "SEC29d9b638568e66aa236f8d7ea628f4c16bba9db010a87cd37902672test" alarm = Alarm(web_hook, key) at_mobiles = ["13800138000"] alarm.send_text_msg("自动化测试结果有异常,请及时关注", at_mobiles, False)

测试结果:

钉钉发送消息失败是什么原因,为什么钉钉上的消息总是发送失败(6)

link消息发送

data = { "msgtype": "link", "link": { "text": "发版前回归测试通知,请各相关负责人认真确认相关测试bug,及时处理,保证产品如期上线", "title": "回归测试缺陷通知", "picUrl": "https://img95.699pic.com/xsj/04/mn/g9.jpg!/fw/700/watermark/url/L3hzai93YXRlcl9kZXRhaWwyLnBuZw/align/southeast", "messageUrl": "https://www.dingtalk.com/" } }

通知效果:

钉钉发送消息失败是什么原因,为什么钉钉上的消息总是发送失败(7)

其它消息类型,支持markdown,actionCard等类型,可参考钉钉官方介绍文档。

钉钉也支持gitlab, github, jira等机器人进行简单webhook配置,即可实现群通知,十分方便。

以上为最基本的使用方法,实际应用中要结合具体业务和场景实现使用,目前测试工作中主要应用方面,一个是每日通过脚本读取数据库中bug相关数据统计并发送群通知(项目名称,bug总计,今日新增,今日修复,今日关闭等数据),第二个是自动化测试和线上定时检测的异常和告警通知,及时反馈给相关人员,及时处理。


感谢阅读,欢迎关注微信公众号(ATester),所有文章会在公众号首发。

上一页12末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.