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

摘要:
在钉钉开发平台上注册团队。通过nailer开发者平台https:,您可以跳转到https:消息的格式可以参考https:APP_SERET))res=req.read().decode('utf-8')data=json.loads(res)ifdata[“errcode”]==0:req=request.urlopen('http:

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

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

注册一个钉钉账号

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

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

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

创建H5微应用

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

钉钉通过userid发送自定义消息给用户第1张

 之后就可以拿到三个重要的信息,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时需要开启接口权限管理

钉钉通过userid发送自定义消息给用户第2张

 钉钉通过userid发送自定义消息给用户第3张

 还要开启api调用白名单IP

钉钉通过userid发送自定义消息给用户第4张

 钉钉通过userid发送自定义消息给用户第5张

免责声明:文章转载自《钉钉通过userid发送自定义消息给用户》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用vscode访问和修改远程计算机文件制作1G的U盘启动盘下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

得到控制台窗口的句柄

得到控制台窗口的句柄 调用 GetConsoleTitle() 来保存当前的控制台窗口标题。 调用 SetConsoleTitle() 来将控制台标题更改为一个唯一的标题。 调用 Sleep(40),以确保已更新窗口标题。 调用 FindWindow(NULL, uniquetitle),以获取 HWND,此调用将返回 HWND, 如果操作失败,将返回...

首次使用JBoss流程(windows下)

1、首先应该明白JBoss分为社区版(AS)和企业版(EAP),其中社区版已经改名wildfly(难道是野苍蝇的意思?),企业版对个人开发者免费下载使用, 这里由于公司要求,我用的是jboss-eap-6.2,去官网下的一个zip压缩包,下载需要注册账号。 2、下载解压后,配置环境变量,除了JAVA_HOME,CLASSPATH外,还要配置一个JBOSS_...

01 CMDB简介

目录 资产管理系统(CMDB) CMDB实现的四种方式 Agent实现方式 ssh实现方式(基于Paramiko模块) 上述两种方案对比 saltstack方式salstack的安装和配置 资产管理系统(CMDB) 提供服务器的基础信息,例如服务器的磁盘,cpu,内存等,用来搜集服务器的基础信息,并将这些信息,提供给子系统(代码发布系...

SQLyog连接MySQL8.0报2058错误的完美解决方法

用SQLyog连接MySQL8.0(社区版:mysql-installer-community-8.0.15.0.msi),出现错误2058(Plugin caching_sha2_password could not be loaded:xxxx),通过查询资料了解了该错误的原因并在本文中提出了该问题的方案。 原因 该错误提示如下图所示: 具体原因:新的...

ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(八) 之 用 Redis 实现用户在线离线状态消息处理

前言   上篇的预告好像是“聊天室的小细节,你都注意到了吗?”。今天也是为那篇做铺垫吧。之前的版本有好多问题,比如:当前登录用户是否合法问题,userid参数如果随便传后台没有验证。还有一个致命的问题,用户AB都在线,但是如果A没有打开B的窗口或者B没有打开A的窗口,那么发消息,对方是收不到的。因为他们没有进入到同一个组里面。本篇讲述了一些Redis的东西...

TFS2008 基本安装

TFS2008基本安装 TFS(Team Foundation Server)2008的安装真的是比较麻烦,如果是第一次安装,基本上就会失败,下面将本人的安装经验总结一下,帮助后用的朋友少走些弯路。 如果大家有什么问题可以给我发Email:warensoft@163.com 1.        安装过程列表 预先准备: l         如果是Wind...