• 钉钉通过userid发送自定义消息给用户


    利用服务器和钉钉API给钉钉账号发消息,在很多实际的场景中会有作用,比如应用程序的报警通知,或者数据报表的通知等等。微信目前的开放程度没有钉钉强,使用钉钉API可以很方便的做到,这里就简单总结一下步骤。

    有几个关键步骤需要完成。

    注册一个钉钉账号

    这个比较简单,自行下载钉钉客户端注册,或者在网站上注册即可。

    在钉钉开发者平台上注册一个团队

    通过钉钉开发者平台https://ding-doc.dingtalk.com/注册团队,用前面注册钉钉账号的手机来注册团队,这样可以让团队管理绑定钉钉账号。这一步比较重要,因为后续团队涉及到认证问题,只有认证才能获取到调用API所需要的token。绑定钉钉账号,这些过程就变得简单。

    创建H5微应用

    注册团队完成后,就可以跳转登陆https://open-dev.dingtalk.com/,也就是钉钉开放平台。在开放平台中创建H5微应用。

     之后就可以拿到三个重要的信息,AgentID、APPkey、APPSecret。

    利用工作通知发送消息

    几个需要注意的地方。

    1. 使用API需要access_token,这个需要利用API做一次交互获取;

    2. 发送消息是基于userid,这个userid跟钉钉账号还不一样,是钉钉开发者平台的userid。可以通过钉钉账号的信息来获取,这里使用的是get_userid用手机号获取方式;

    3. 利用工作通知发送是一个取巧的方式。因为其它方式,需要创建或者获取对话,相对麻烦,而工作通知可以直接发送消息;

    4. 重复的消息内容会被去重;

    5. 消息的格式可以参考https://ding-doc.dingtalk.com/doc#/serverapi2/pgoxpy;

    #! /bin/env python
    # -*- coding: UTF-8 -*-
    import sys
    import json
    
    if sys.version_info.major <= 2:
        print("not support python2")
        sys.exit(0)
    
    import urllib.request as request
    import urllib.parse
    
    APP_KEY = "你的APPKey"
    APP_SECRET = "你的APPSecret"
    AGENT_ID = "你的AgentID"
    
    def get_access_token():
        req = request.urlopen('https://oapi.dingtalk.com/gettoken?appkey=%s&appsecret=%s' % (APP_KEY, APP_SECRET))
        res = req.read().decode('utf-8')
        data = json.loads(res)
        if data["errcode"] == 0:
            return data["access_token"]
        else:
            return None
    
    def get_userid(access_token, mobile):
        req = request.urlopen('https://oapi.dingtalk.com/user/get_by_mobile?access_token=%s&mobile=%s' % (access_token, mobile))
        res = req.read().decode('utf-8')
        data = json.loads(res)
        if data["errcode"] == 0:
            return data["userid"]
        else:
            return None
    
    def post_message(userid, access_token):
        msg = {}
        msg["userid_list"] = userid
        msg["agent_id"] = AGENT_ID
        msg["msg"] = {}
        msg["msg"]["msgtype"] = "text"
        msg["msg"]["text"] = {}
        msg["msg"]["text"]["content"] = "This is a test message2!"
        postData = urllib.parse.urlencode(msg)
        postData = postData.encode('utf-8')
        res = request.urlopen('https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token=%s' % access_token, postData)
        result = res.read()
        print(result)
    
    if __name__ == '__main__':
        access_token = get_access_token()
        userid = get_userid(access_token, "接收账号对应的手机号")
        post_message(userid, access_token)
        sys.exit(0)
    

      注意事项:

        使用api时需要开启接口权限管理

     

     还要开启api调用白名单IP

     

  • 相关阅读:
    Layui表格之动态添加数据(表格多选解决方案)
    Ztree勾选节点后取消勾选其父子节点
    如何判断某个元素在页面上是否存在
    Linux环境搭建SVN服务
    Linux环境下验证码不显示F12报500
    Ztree节点前加上两个自定义按钮
    解决window.location.href参数太长
    Ztree加载完成默认选中根节点右侧生成表格
    输入框点击下滑Ztree菜单
    Mybatis中and和or的细节处理
  • 原文地址:https://www.cnblogs.com/allmdzz/p/14592906.html
Copyright © 2020-2023  润新知