【python_钉钉群发图片】

打印 上一主题 下一主题

主题 1043|帖子 1043|积分 3129

需求:

  1. **在钉钉群发图片,需要以图片的形式展示,如图所示:**
复制代码

但是目前影刀内里没有符合条件的指令

解决方法:

1、在钉钉开发者后台新建一个自建应用,发版,然后获取内里的appkey和appsecret,根据这两个参数调用API生成access_token,以提供给上传文件的接口试用。获取企业内部应用的access_token
2、调用上传暂时素材的API,将本舆图片上传,生成media_id。上传媒体文件
3、在内部群随便新建一个自定义的机器人。调用自定义机器人发送钉钉群通知的API,在请求路径内里需要有时间和署名,署名根据自定义机器人中的加签编码生成。请求体内里填markdown的形式,然后将图片的media_id写进去。自定义机器人发送群消息
  1. # 使用提醒:
  2. # 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
  3. # 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
  4. # 3. 当此模块作为流程独立运行时执行main函数
  5. # 4. 可视化流程中可以通过"调用模块"的指令使用此模块
  6. import xbot
  7. from xbot import print, sleep
  8. from .import package
  9. from .package import variables as glv
  10. def main(args):
  11.     pass
  12. import requests
  13. import json
  14. import base64
  15. import time
  16. import hmac
  17. import hashlib
  18. def get_temporary_material_access_token(appkey, appsecret):
  19.     get_access_token_url = "https://oapi.dingtalk.com/gettoken"
  20.     params = {
  21.         'appkey': appkey,
  22.         'appsecret': appsecret
  23.     }
  24.     response = requests.get(get_access_token_url, params=params)
  25.     if response.status_code == 200:
  26.         data = response.json()
  27.         if 'access_token' in data:
  28.             return data['access_token']
  29.         else:
  30.             print("获取临时素材access_token失败,响应数据格式错误")
  31.             return None
  32.     else:
  33.         print(f"获取临时素材access_token失败,状态码:{response.status_code}")
  34.         return None
  35. def generate_sign(secret, timestamp):
  36.     """生成加签"""
  37.     string_to_sign = f'{timestamp}\n{secret}'
  38.     hmac_code = hmac.new(secret.encode("utf-8"), string_to_sign.encode("utf-8"), digestmod=hashlib.sha256).digest()
  39.     sign = base64.b64encode(hmac_code).decode("utf-8")
  40.     return sign
  41. def send_image_to_dingtalk(appkey,appsecret,webhook_url,secret,image_path):
  42.     # 获取上传临时素材所需的access_token
  43.     upload_access_token = get_temporary_material_access_token(appkey, appsecret)
  44.     if upload_access_token is None:
  45.         print("获取access_token失败,无法继续执行")
  46.         return
  47.     timestamp = str(round(time.time() * 1000))
  48.     sign = generate_sign(secret, timestamp)
  49.     try:
  50.         # 使用获取到的upload_access_token替换为实际的上传临时素材链接
  51.         upload_media_url = f'https://oapi.dingtalk.com/media/upload?access_token={upload_access_token}&type=image'
  52.         with open(image_path, 'rb') as f:
  53.             files = {'media': ('image.jpg', f.read())}
  54.             upload_response = requests.post(upload_media_url, files=files)
  55.         
  56.         if upload_response.status_code == 200:
  57.             media_response = json.loads(upload_response.text)
  58.             if 'media_id' in media_response:
  59.                 media_id = media_response['media_id']
  60.                 post_url = '{}&timestamp={}&sign={}'.format(webhook_url, timestamp, sign)
  61.                 # 构造加签请求头
  62.                 headers = {
  63.                     'Content-Type': 'application/json'
  64.                 }
  65.                 payload = {
  66.                     "msgtype": "markdown",
  67.                     "markdown": {
  68.                         "title": "图片",
  69.                         "text": f"![图片]({media_id})"
  70.                     },
  71.                 }
  72.                 send_response = requests.post(post_url, headers=headers, data=json.dumps(payload))
  73.                 if send_response.status_code == 200:
  74.                     print("图片已成功发送至钉钉群聊")
  75.                 else:
  76.                     print(f"发送失败,错误信息:{send_response.text}")
  77.             else:
  78.                 print("上传图片失败,响应数据格式错误")
  79.         else:
  80.             print(f"上传图片失败,状态码:{upload_response.status_code}")
  81.     except FileNotFoundError:
  82.         print(f"无法找到指定的图片文件:{image_path}")
  83.     except Exception as e:
  84.         print(f"发送过程中出现错误:{str(e)}")
复制代码


参考文章:
1、钉钉群聊机器人发送本舆图片解决方案–不用图床版(附源码)
2、怎么调用钉钉机器人发本舆图片到钉钉群中

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表