调用钉钉接口发送消息

调用钉钉接口发送消息

通过创建钉钉开放平台创建H5小程序,通过该小程序可以实现向企业内的钉钉用户发送消息(消息是以工作通知的形式发送)

1、目前仅支持发送文本消息,相同内容的文本只能成功发送一次,但是接口返回发送成功

2、需要给小程序开放各种权限

python 复制代码
import json

import objectpath
import requests

# 在钉钉开放平台上创建应用后获取
AGENT_ID = None
APP_KEY = ""
APP_SECRET = ""

dd_domain = "https://oapi.dingtalk.com"

class DingtalkHelper():

    def __init__(self):
        self.access_token = self.get_token()

    def get_token(self):
        """
        获取token
        :return:
        """
        url = f"{dd_domain}/gettoken"
        data = {
            "appkey": APP_KEY,
            "appsecret": APP_SECRET,
        }
        res_json = requests.get(url=url, params=data).json()
        return objectpath.Tree(res_json).execute("$.access_token")

    def get_depList(self):
        """
         获取部门列表
        :return:
        """
        url = f"{dd_domain}/department/list"
        data = {
            "access_token": self.access_token,
        }
        res_json = requests.get(url=url, params=data).json()
        departmentIds_list = list(objectpath.Tree(res_json).execute("$..*[@.name is not null].id"))

        return departmentIds_list

    def get_memberList(self, depId: str):
        """
         获取部门用户userid列表
        :param depId:
        :return:
        """
        url = f"{dd_domain}/user/getDeptMember"
        data = {
            "access_token": self.access_token,
            "deptId": depId,
        }
        res_json = requests.get(url=url, params=data).json()

        return res_json

    def get_userInfo(self, userId):
        """
         获取部门用户userid列表
        :param userId:
        :return:
        """
        url = f"{dd_domain}/user/get"
        data = {
            "access_token": self.access_token,
            "userid": userId,
        }
        res_json = requests.get(url=url, params=data).json()

        userIds_list = list(objectpath.Tree(res_json).execute("$..*[@.userid is not null].(mobile, userid)"))
        userInfo = userIds_list[0]

        return {userInfo.get("mobile"): userInfo.get("userid")}

    def send_ddMsg(self, userId, content):
        """
         向企业个人发送钉钉通知
        :param userId:
        :return:
        """
        url = f"{dd_domain}/message/send?access_token={self.access_token}"
        body_dict = {
            "touser": userId,
            "agentid": AGENT_ID,
            "msgtype": "text",
            "text": {"content": content}
        }
        res = requests.post(url=url, data=json.dumps(body_dict))
        print(res.text)

    def getAll_userIds(self):
        """
        获取公司内所有人员的userId
        :return:
        """
        deptIds_list = self.get_depList()

        userIds_list = list()

        for deptId in deptIds_list:
            res_json = self.get_memberList(deptId)
            userIds = objectpath.Tree(res_json).execute("$.userIds")
            userIds_list.extend(userIds)

        return userIds_list

    def getAll_usersInfo(self):
        """
        获取公司内所有人员的mobile和userId的映射关系表
        :return:
        """
        userIds_list = self.getAll_userIds()
        usersInfo_dict = dict()
        for userId in userIds_list:
            userInfo = self.get_userInfo(userId)
            usersInfo_dict.update(userInfo)

        return usersInfo_dict
相关推荐
青靴1 天前
轻量级 CI/CD 实战(四):本地开发钉钉告警 → 自动部署云服务器 Kafka 消费者容器
ci/cd·docker·钉钉
是孑然呀12 天前
【钉钉表单(周/日报)】每天定时发送,实现收集每天信息
钉钉
ζั͡山 ั͡有扶苏 ั͡✾13 天前
完善EKF可观测性体系:基于ElastAlert2构建k8s智能钉钉日志告警系统
容器·kubernetes·钉钉·kibana·filebeat·日志监控
cui_win13 天前
Prometheus实战教程 05 - 告警通知实现 - 邮件 + 钉钉 + 自定义告警模板
钉钉·prometheus·邮件通知
CHN悠远17 天前
debian13 安装钉钉后,钉钉无法运行问题的解决办法
linux·运维·服务器·钉钉·debian13
PyAIGCMaster20 天前
钉钉的设计理念方面,我可以学习
人工智能·深度学习·学习·钉钉
是孑然呀20 天前
【钉钉多元表格(自动化)】钉钉群根据表格 自动推送当天值日生信息
运维·自动化·钉钉
IT小哥哥呀20 天前
Node.js 实现企业内部消息通知系统(钉钉/企业微信机器人)
node.js·钉钉·企业微信·webhook·后端开发·自动化通知·mysql实战
javachen__24 天前
Spring Boot将错误日志发送到企微微信或钉钉群
spring boot·后端·钉钉
Teable任意门互动1 个月前
主流多维表格产品深度解析:飞书、Teable、简道云、明道云、WPS
开发语言·网络·开源·钉钉·飞书·开源软件·wps