上篇提到了使用webhook方式发送消息。这个有一定的局限性,只能在群里发。
钉钉还提供了使用工作通知账号发送钉钉消息的方法,可以直接发送消息给统一组织内的指定账号。
实现使用工作通知发送消息需要以下几步
创建企业内部应用
登录开发者后台,创建企业内部应用。
- 应用类型:选择H5微应用。
- 开发方式:选择企业自主开发。
获取AppKey和AppSecret
单击基础信息 > 应用信息,获取应用AppKey和AppSecret。
调用API发送消息
生成token
使用上文中申请的AppKey和AppSecret生成token。
def get_token():
"""
获取token
:return:
"""
api_rul = "https://oapi.dingtalk.com/gettoken"
try:
params = {"appkey": "xxxxxx",
"appsecret": "yyyyyy"
}
r = requests.get(api_rul, params=params)
result = r.json()
if result["errcode"] == 0 and result["errmsg"] == "ok":
token = result["access_token"]
return {'success': True, 'msg': token}
else:
return {'success': False, 'msg': "Requests Fail"}
except Exception as e:
print(e)
return {'success': False, 'msg': str(e)}
调用API
根据token调用工作通知发送信息,演示的是发送markdown格式消息,如果是普通消息或者其他格式消息,可以通过修改文中msg_dic来实现,具体格式参见钉钉文档工作通知 - 钉钉开放平台 (dingtalk.com)
下文中的useridlist是用户的钉钉id,这个id可以通过钉钉SDK来获取。
def user_msg(token,useridlist, msg):
"""
:parma token: 钉钉token
:param useridlist: 用户钉钉账号的id list 元素为str
:param msg: 字典,{"msgtype": "text", "text": {"content": "群消息测试"}}
https://open.dingtalk.com/document/isvapp-server/message-types-and-data-format
:return:
"""
api = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2"
msg_dict = {
"msgtype": "markdown",
"markdown": {
"title": "markdown type",
"text": msg
},
}
msg_data = json.dumps(msg_dict)
data = {
"agent_id": self.agentid,
"userid_list": ','.join(useridlist),
"msg": msg_data
}
params = {"access_token": token}
try:
r = requests.post(api, params=params, data=data).json()
print(r)
except Exception as E:
return {'success': False, 'msg': str(E)}
if r['errcode'] == 0:
return {"success": True, "msg": json.dumps(r)}
else:
return {"success": False, "msg": r}
将两部分代码合并起来就可以实现向指定账号的工作通知发送通知了。