Python调用钉钉API发送报警消息完整指南

阿橙
阿橙
发布时间:2026-10-13 | 4人浏览过
原创

本文详细介绍如何使用Python通过钉钉开放平台接口发送报警消息。内容涵盖获取access_token的方法、文本、链接及文件等多种消息类型的发送实现,以及向指定用户和群会话发送消息的具体代码示例与参数说明,帮助开发者快速集成即时通知功能。

钉钉开放平台官方入口:https://open.dingtalk.com

公司内部普遍采用钉钉作为主要通讯工具,员工在电脑和手机端均保持在线状态,确保了消息的即时触达。鉴于报警通知对时效性的高要求,利用钉钉进行实时告警通知是较为合适的选择。

接下来将具体演示如何利用Python代码实现向钉钉发送报警消息的功能。

第一步:获取access token

调用钉钉接口发送消息前,必须先获取有效的access token,相关实现代码如下:

def get_access_token():
 url = 'https://oapi.dingtalk.com/gettoken?corpid=%s&corpsecret=%s' % (corp_id, corp_secret)
 request = urllib2.Request(url)
 response = urllib2.urlopen(request)
 response_str = response.read()
 response_dict = json.loads(response_str)
 error_code_key = "errcode"
 access_token_key = "access_token"
 if response_dict.has_key(error_code_key) and response_dict[error_code_key] == 0 and response_dict.has_key(access_token_key):
  return response_dict[access_token_key]
 else:
  return ''

获取到的access token有效期为2小时,在此期间内重复请求将返回相同结果,且有效期会自动顺延。corp_id和corp_secret分别代表企业ID和密钥,可在钉钉管理后台获取。此外,代码中使用了urllib2和json模块,需提前导入:

import urllib2
import json

第二步:确定消息类型

钉钉支持的消息类型包括text(文本)、image(图片)、voice(语音)、file(文件)、link(链接)以及OA消息,具体的消息格式规范可参考官方文档:https://open-doc.dingtalk.com/docs/doc.htm?treeId=172&articleId=104972&docType=1 。

下文将以发送文本、链接和文件这三种常见消息类型为例进行详细说明。

第三步:向指定用户发送消息

发送文本消息

def send_text_to_users(access_token, users, text):
 msg_type, msg = _gen_text_msg(text)
 return _send_msg_to_users(access_token, users, msg_type, msg)

def _gen_text_msg(text):
 msg_type = 'text'
 msg = { "content": text }
 return msg_type, msg

def _send_msg_to_users(access_token, users, msg_type, msg):
 to_users = '|'.join(users)
 body_dict = {
  "touser": to_users,
  "agentid": agent_id,
  "msgtype": msg_type
 }
 body_dict[msg_type] = msg
 body = json.dumps(body_dict)
 return _send_msg("https://oapi.dingtalk.com/message/send?access_token=", access_token, body)

其中,agent_id为钉钉应用的唯一标识ID,用于指定以哪个应用的名义向用户发送消息。users参数为用户ID列表,每个元素均为字符串类型的用户ID。

发送链接消息

def send_link_to_users(access_token, users, url, title, text):
 msg_type, msg = _gen_link_msg(url, title, text)
 return _send_msg_to_users(access_token, users, msg_type, msg)

def _gen_link_msg(url, title, text):
 msg_type = 'link'
 msg = { 
  "messageUrl": url,
  "picUrl": "https://gw.alicdn.com/tps/TB1FN16LFXXXXXJXpXXXXXXXXXX-256-130.png",
  "title": title,
  "text": text 
 }
 return msg_type, msg

_send_msg_to_users方法的具体实现可参考前文代码。picUrl字段在此处设置为钉钉官方提供的测试图片地址,主要用于功能验证。

发送文件消息

def send_file_to_users(access_token, users, file_name):
 media_id = upload_file(access_token, file_name)
 if media_id == '':
  return
 msg_type, msg = _gen_file_msg(media_id)
 return _send_msg_to_users(access_token, users, msg_type, msg)

def upload_file(access_token, file_name):
 register_openers()
 datagen, headers = multipart_encode({'media': open(file_name, 'rb')})
 requst_url = 'https://oapi.dingtalk.com/media/upload?access_token=' + access_token + '&type=file'
 request = urllib2.Request(requst_url, datagen, headers)
 response = urllib2.urlopen(request)
 response_str = response.read()
 response_dict = json.loads(response_str)
 media_id_key = 'media_id'
 error_code_key = 'errcode'
 if response_dict.has_key(error_code_key) and response_dict[error_code_key] == 0 and response_dict.has_key(media_id_key):
  return response_dict[media_id_key]
 else:
  return ''

发送文件前,需先上传文件以获取media_id,随后利用该media_id将文件发送给目标用户。此外,此处使用了poster库,可通过pip命令进行安装:

pip install poster

安装完成后,需引入multipart_encode和register_openers函数:

from poster.encode import multipart_encode
from poster.streaminghttp import register_openers

第四步:向群会话发送消息

向群会话发送消息的流程与向用户发送类似,主要区别在于需要指定群会话ID而非用户列表。以下以发送文本消息为例展示代码:

def send_text_to_chat(access_token, chat_id, text):
 msg_type, msg = _gen_text_msg(text)
 return _send_msg_to_chat(access_token, chat_id, msg_type, msg)

def _send_msg_to_chat(access_token, chat_id, msg_type, msg):
 body_dict = {
  "chatid": chat_id,
  "msgtype": msg_type
 }
 body_dict[msg_type] = msg
 body = json.dumps(body_dict)
 return _send_msg("https://oapi.dingtalk.com/chat/send?access_token=", access_token, body)

_gen_text_msg方法的具体实现可参考前文代码。

群会话可由管理员自行创建,具体操作指南参见:https://open-doc.dingtalk.com/docs/doc.htm?treeId=172&articleId=104977&docType=1 。

以上即为使用Python实现钉钉报警消息发送的完整方法,希望能为读者提供有价值的参考,也欢迎大家继续支持本站内容。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表