Dingraia APIs
注意事项
除非特殊说明,否则默认为已经为 dingraia 配置了 config 参数的完整版本,否则只可以发送 WebHook 消息
对于已经配置好 main.py 并可以正常运行的情况,可以使用 python -m dingraia 启用控制台模式,框架将自动加载app配置并载入大部分所需模块,无需再次导入
模块说明
基础类
Dingtalk
主要的应用类,用于处理所有钉钉相关的操作。
属性
config: 配置对象access_token: 当前的访问令牌running_mode: 当前运行模式clientSession: HTTP客户端会话loop: 事件循环
方法概览
消息相关
send_message(): 发送消息sendMessage(): 同步发送消息recall_message(): 撤回消息send_ding(): 发送DING消息send_card(): 发送卡片消息send_markdown_card(): 发送Markdown卡片send_ai_card(): 发送AI卡片send_ai_message(): 发送AI消息update_card(): 更新卡片内容
群组管理
create_group(): 创建群组get_group(): 获取群组信息update_group(): 更新群组信息disband_group(): 解散群组mirror_group(): 复制群组change_group_title(): 修改群名change_group_owner(): 更换群主mute_all(): 全员禁言unmute_all(): 解除全员禁言
成员管理
add_member(): 添加成员kick_member(): 移除成员set_admin(): 设置管理员mute_member(): 禁言成员unmute_member(): 解除成员禁言
组织管理
get_depts(): 获取部门列表get_dept_users(): 获取部门成员get_user(): 获取用户信息create_user(): 创建用户remove_user(): 删除用户update_user(): 更新用户信息
文件处理
upload_file(): 上传文件download_file(): 下载文件
认证相关
get_user_access_token(): 获取用户访问令牌get_login_url(): 获取登录URLoauth_login(): OAuth登录check_login_status(): 检查登录状态
运行控制
start(): 启动应用stop(): 停止应用create_task(): 创建异步任务
详细API说明
__init__
初始化 Dingtalk 类。
参数
config:dingraia.config.Config配置类实例,用于初始化Dingtalk类。
示例
from dingraia.config import Config, Bot, CallBack, Stream
from dingraia.DingTalk import Dingtalk
app = Dingtalk(config=Config(
bot=Bot('AppKey',
'AppSecret',
'CorpId'),
# 机器人配置,必填
event_callback=CallBack("AesKey",
"Token",
"AppKey"),
# 事件回调配置,可选
stream=[
Stream('AppKey',
'AppSecret')
],
# Stream配置,可选
customStreamConnect=None,
# 自定义Stream连接器,可选
autoBotConfig=True,
# 是否自动配置机器人,如果不想在使用Stream时自动配置机器人,可设置为False,可选
useDatabase=True,
# 是否使用数据库,可选。(建议使用,数据库操作本身占用时间极小,远远小于网络连接)
dataCacheTime=3600,
# 数据缓存时间,可选。(建议适当调高,避免频繁访问,减少网络请求次数)
webRequestHandlers=None,
# Web请求处理器,可选。
raise_for_api_error=True,
# 是否在API调用失败时抛出API错误,可选。(建议开启)
))
send_message
向指定用户发送消息。
额外需求
发送到 OpenConversationId、发送文件、模板消息
需要配置
Dingtalk.config.botAPI 消耗:
1
发送到群聊、私聊、Webhook
缓存过期
需要配置
Dingtalk.config.botAPI 消耗:
1
在
MessageChain中包含File对象需要配置
Dingtalk.config.botAPI 消耗:
1×File数量
参数
target: 要发送消息的目标,可以是Group,Member,OpenConversationId,Webhook,str*msg: 要发送的对象,可以是MessageChain,File,str,list特别注意:如果
msg是list,则会被逐个执行并返回list结果
返回值
dingraia.element.Response: 发送消息的响应
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId
from dingraia.message.chain import MessageChain
app = Dingtalk()
app.prepare()
res = await app.send_message(OpenConversationId('cid1145149191810'), MessageChain('Hello, world!'))
# 一定要配置config参数,否则只可以发送WebHook消息
# 在缓存启用时,可以通过带 id 的 Group 实例发送消息,若过期则自动转为 API 发送
# res = <Response True>
sendMessage
对 send_message 的同步函数包装,使用方式同 send_message。
recall_message
撤回消息。
额外需求
需要配置 Dingtalk.config.bot
API 消耗:1
参数
message: 撤回的消息对象,可以是Message,List[Message]openConversationId: 消息所在对话,可以是OpenConversationId,Group,strprocessQueryKeys: 消息的唯一标识,可以是str,List[str]robotCode: 机器人标识,可以是str, 若配置了config则可不填inThreadTime: 等待x秒后撤回,可以是int
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId
from dingraia.message.chain import MessageChain
app = Dingtalk()
app.prepare()
send = await app.send_message(OpenConversationId('cid1145149191810'), MessageChain('Hello, world!'))
res = await app.recall_message(send)
send_ding
发送 Ding 消息
注意事项
本接口 尚未测试
额外需求
钉钉专业版专属功能
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
targets: 要发送到的人员列表,可以是Member,List[Member]content: 要发送的消息内容,可以是strremindType: 提醒类型,可以是int1: 应用内提醒2: 短信提醒3: 电话提醒
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import Member
app = Dingtalk()
app.prepare()
user = Member()
user.staffId = '1145149191810'
res = await app.send_ding([user], 'Hello, world!', 1)
send_card
发送卡片消息
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
2
参数
target: 要发送到的目标,可以是OpenConversationId,Group,MembercardTemplateId: 卡片模板 IDcardData: 卡片数据,字典类型(本接口默认将数据包裹在cardData->cardParamMap中)privateData: 私有数据,可以是dict或者PrivateDataBuilder实例(使用PrivateDataBuilder可以更方便地设置私有数据)supportForward: 是否支持折叠,默认FalsecallbackType: 回调类型,可以是auto,Stream,HTTPoutTrackId: 外部追踪 ID,默认随机生成
返回值
dingraia.element.CardResponse: 包含原始卡片的公共数据、私有数据和追踪 ID
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId
app = Dingtalk()
app.prepare()
res = await app.send_card(
OpenConversationId('cid1145149191810'),
'template_id',
{'title': 'Hello, world!'}
)
send_markdown_card
发送 Markdown 卡片消息
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
2
参数
target: 要发送到的目标,可以是OpenConversationId,Group,Membermarkdown: Markdown 内容,必须是Markdown实例logo: 卡片 logo,可以是File实例或者@开头的图片 URLoutTrackId: 外部追踪 ID,默认随机生成supportForward: 是否支持折叠,默认False
返回值
dingraia.element.CardResponse: 包含原始卡片的公共数据、私有数据和追踪 ID
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId
from dingraia.message.element import Markdown
app = Dingtalk()
app.prepare()
res = await app.send_markdown_card(
OpenConversationId('cid1145149191810'),
Markdown('## Hello, world!', title='标题'),
'@mediaId' # 也可以使用 File 实例
)
update_card
更新卡片
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
outTrackId: Union[str, CardResponse],
cardParamData: Union[dict, Markdown],
privateData: Union[dict, PrivateDataBuilder] = None,
outTrackId: 卡片的外部追踪 ID,可以是str或者CardResponse实例cardParamData: 卡片数据,可以是dict或者Markdown实例privateData: 私有数据,可以是dict或者PrivateDataBuilder实例(使用PrivateDataBuilder可以更方便地设置私有数据)
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId
from dingraia.message.element import Markdown
app = Dingtalk()
app.prepare()
res = await app.send_markdown_card(
'out_track_id',
Markdown('## Hello, world!', title='标题'),
{'key': 'value'}
)
await app.update_card(
res,
Markdown('## Updated', title='标题'),
)
sned_ai_card
发送 AI 卡片消息
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
3+(根据 AI 卡片更新的频率判定)
参数
target: 要发送到的目标,可以是OpenConversationId,Group,MembercardTemplateId: 卡片模板 IDcard: 卡片数据,AICard实例update_limit: 卡片更新频率限制,单位为秒,默认0表示不限制key: 卡片数据在卡片模板中的键名,默认contentoutTrackId: 外部追踪 ID,默认随机生成
返回值
dingraia.element.CardResponse: 包含原始卡片的公共数据、私有数据和追踪 ID
示例
由于 AI 卡片配置较为复杂,请参考 example_module.AICard.py 中的示例代码
如果你的 AI API接口支持 POST 方式的流式输出,可以使用示例代码中的方法进行快速流式输出
create_group
创建群聊
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
name: 群聊名称templateId: 群聊模板 IDownerUserId: 群主 IDicon: 群聊头像,可以是File实例或者@开头的图片 URLuserIds: 群成员 ID 列表,可以是Member,List[Member],str,List[str]subAdminIds: 群管理员 ID 列表,可以是Member,List[Member],str,List[str]showHistory: 是否展示群历史消息,默认Falsevalidation: 是否开启群验证,默认Truesearchable: 是否允许群搜索,默认FalseUUID: 唯一标识符 ID,默认随机生成access_token: 企业的 access_token,默认None
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import Member
app = Dingtalk()
app.prepare()
user1 = Member()
user1.staffId = '1145149191810'
user2 = Member()
user2.staffId = '1145149191811'
res = await app.create_group(
'测试群聊',
'template_id',
'owner_id',
'@mediaId',
[user1, user2]
)
get_group
获取群聊信息,包含群成员列表
额外需求
群聊必须是场景群或者启用酷应用的群聊
需要配置
Dingtalk.config.botAPI 消耗:
2/0
参数
OpenConversationId: 群聊 ID,可以是OpenConversationId,Group,straccess_token: 企业的 access_token,默认Noneusing_cache: 是否使用缓存,默认None表示自动判断,若缓存不存在会自动使用API获取
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId
app = Dingtalk()
app.prepare()
res = await app.get_group(OpenConversationId('cid1145149191810'))
get_depts
获取部门列表
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
deptId: 部门 ID,默认1表示获取根部门列表access_token: 企业的 access_token,默认None
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
app = Dingtalk()
app.prepare()
res = await app.get_depts()
get_dept_users
获取部门成员列表
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
deptId: 部门 ID,默认1表示获取根部门成员列表access_token: 企业的 access_token,默认None
返回值
list所有部门成员的 StaffId(str) 列表
示例
from dingraia.DingTalk import Dingtalk
app = Dingtalk()
app.prepare()
res = await app.get_dept_users()
get_user
获取用户信息
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1/0
参数
userId: 用户 ID,可以是Member,strlanguage: 语言,默认zh_CNaccess_token: 企业的 access_token,默认Noneusing_cache: 是否使用缓存,默认None表示自动判断,若缓存不存在会自动使用API获取当使用缓存时,将会在
dict中添加dingraia_cache键,包含以下内容id: 用户 ID (本框架内)name: 用户名staffId: 组织内唯一标识unionId: 钉钉用户唯一标识timeStamp: 时间戳strfTimeStamp: 格式化的时间
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import Member
app = Dingtalk()
app.prepare()
user = Member()
user.staffId = '1145149191810'
res = await app.get_user(user)
unionId2staffId
根据 unionId 获取 staffId
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
unionId: 钉钉用户唯一标识using_cache: 是否使用缓存,默认None表示自动判断,若缓存不存在会自动使用API获取
返回值
str组织内唯一标识若传入了
Member实例,则会同时更新Member实例的staffId属性
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import Member
app = Dingtalk()
app.prepare()
user = Member()
user.unionId = 'unionId1145149191810'
res = await app.unionId2staffId(user)
remove_user
移除用户
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
userStaffId: 组织内唯一标识,可以是Member,straccess_token: 企业的 access_token,默认None
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
app = Dingtalk()
app.prepare()
res = await app.remove_user('staffId1145149191810')
create_user
创建用户
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
name: 用户名mobilePhone: 手机号deptIds: 部门 ID 列表,可以是str或者List[str]userId: 用户 ID,默认随机生成hidePhone: 是否隐藏手机号jobNumber: 工号positionName: 职位personalEmail: 个人邮箱organizeEmail: 组织邮箱organizeEmailType: 组织邮箱类型,可以是base或者professionworkPlace: 办公地点remark: 备注extension: 扩展属性isSenior: 是否开启高管模式managerUserId: 上级用户 IDloginEmail: 登录邮箱
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
app = Dingtalk()
app.prepare()
res = await app.create_user(
'测试用户',
'13800138000',
['deptId1145149191810', 'deptId1145149191811'],
jobNumber='jobNumber1145149191810',
positionName='positionName1145149191810',
personalEmail='personalEmail1145149191810',
organizeEmail='organizeEmail1145149191810',
organizeEmailType='profession',
workPlace='workPlace1145149191810',
remark='remark1145149191810',
extension='extension1145149191810',
isSenior=True,
managerUserId='managerUserId1145149191810',
loginEmail='loginEmail1145149191810'
)
update_user
更新用户
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
userId: 用户 ID,可以是Member,strname: 用户名hide_mobile: 是否隐藏手机号telephone: 手机号job_number: 工号manager_userid: 上级用户 IDtitle: 职位email: 个人邮箱org_email: 组织邮箱work_place: 办公地点remark: 备注dept_id_list: 部门 ID 列表,可以是str或者List[str]dept_title_list: 部门名称列表,可以是dict或者List[dict]dept_order_list: 部门排序列表,可以是dict或者List[dict]extension: 扩展属性senior_mode: 是否开启高管模式hired_date: 入职时间language: 语言,默认zh_CNforce_update_fields: 强制更新的字段列表,默认None表示不强制更新
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import Member
app = Dingtalk()
app.prepare()
user = Member()
user.staffId = '1145149191810'
res = await app.update_user(
user,
name='测试用户',
job_number='jobNumber1145149191810',
manager_userid='managerUserId1145149191810',
title='positionName1145149191810',
email='personalEmail1145149191810',
org_email='organizeEmail1145149191810',
work_place='workPlace1145149191810',
remark='remark1145149191810',
dept_id_list=['deptId1145149191810', 'deptId1145149191811'],
dept_title_list=[{'dept_id': 'deptId1145149191810', 'dept_title': '测试部门1'}, {'dept_id': 'deptId1145149191811', 'dept_title': '测试部门2'}],
dept_order_list=[{'dept_id': 'deptId1145149191810', 'dept_order': 1}, {'dept_id': 'deptId1145149191811', 'dept_order': 2}],
extension='extension1145149191810',
senior_mode=True,
hired_date='2021-01-01',
force_update_fields=['name', 'job_number', 'title', 'email', 'org_email', 'work_place', 'dept_id_list', 'dept_title_list', 'dept_order_list', 'extension','senior_mode', 'hired_date']
)
mirror_group
创建群聊的镜像
注意事项
该 API 仅支持创建场景群聊的镜像,不支持创建普通群聊的镜像
通过此方法创建的群聊,会在群聊名字后方加上
- 转生字样此方法会随机挑选临时群主,防止群主创建群过多无法成功创建群,随后通过API更改回原群主
此方法无视青少年模式
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
6+
参数
OpenConversationId: 群聊 ID,可以是OpenConversationId,Group,str
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId
app = Dingtalk()
app.prepare()
res = await app.mirror_group(OpenConversationId('cid1145149191810'))
update_group
更新群聊
注意事项
该 API 仅支持更新场景群聊,不支持更新普通群聊
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
openConversationId: 群聊 ID,可以是OpenConversationId,Group,strtitle: 群聊名称owner_user_id: 群主 IDicon: 群头像,可以是File实例,也可以是 mediaIdmention_all_authority: 是否允许 @所有人show_history_type: 是否展示历史消息validation_type: 是否开启入群验证searchable: 是否可被搜索chat_banned_type: 是否全员禁言management_type: 管理类型0: 所有人可管理1: 仅群主可管理
only_admin_can_ding: 是否仅群主能使用 DING 消息0: 所有人1: 仅群主
all_members_can_create_mcs_conf: 群会议权限0: 群主和管理员1: 所有人
all_members_can_create_calendar: 是否所有成员均可创建日程group_email_disabled: 是否禁用群邮件only_admin_can_set_msg_top: 是否仅群主能设置消息置顶add_friend_forbidden: 是否禁止加好友group_live_switch: 是否允许群直播members_to_admin_chat: 成员是否允许和群管理员聊天plugin_customize_verify: 自定义插件是否需要群主或管理员审批access_token: 企业的 access_token,默认None
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId
app = Dingtalk()
app.prepare()
res = await app.update_group(
OpenConversationId('cid1145149191810'),
title='测试群聊',
owner_user_id='ownerUserId1145149191810',
icon='mediaId1145149191810',
mention_all_authority=True,
show_history_type=1,
validation_type=0,
searchable=True,
chat_banned_type=0,
management_type=0,
only_admin_can_ding=0,
all_members_can_create_mcs_conf=0,
all_members_can_create_calendar=True,
group_email_disabled=False,
only_admin_can_set_msg_top=True,
add_friend_forbidden=False,
group_live_switch=True,
members_to_admin_chat=True,
plugin_customize_verify=False
)
disband_group
解散群聊
注意事项
该 API 仅支持解散场景群聊,不支持解散普通群聊
此方法非官方方法,其原理为移出所有群成员,群聊仍然存在
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
openConversationId: 群聊 ID,可以是OpenConversationId,Group,str
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId
app = Dingtalk()
app.prepare()
res = await app.disband_group(OpenConversationId('cid1145149191810'))
change_group_title (update_group 的分支)
修改群聊名称
注意事项
该 API 仅支持更新场景群聊,不支持更新普通群聊
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
openConversationId: 群聊 ID,可以是OpenConversationId,Group,strtitle: 群聊名称
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId
app = Dingtalk()
app.prepare()
res = await app.change_group_title(OpenConversationId('cid1145149191810'), '测试群聊')
change_group_owner (update_group 的分支)
修改群主
注意事项
该 API 仅支持更新场景群聊,不支持更新普通群聊
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
openConversationId: 群聊 ID,可以是OpenConversationId,Group,strowner_user_id: 群主 ID
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId
app = Dingtalk()
app.prepare()
res = await app.change_group_owner(OpenConversationId('cid1145149191810'), 'ownerUserId1145149191810')
mute_all (update_group 的分支)
全员禁言
注意事项
该 API 仅支持更新场景群聊,不支持更新普通群聊
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
openConversationId: 群聊 ID,可以是OpenConversationId,Group,str
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId
app = Dingtalk()
app.prepare()
res = await app.mute_all(OpenConversationId('cid1145149191810'))
unmute_all (update_group 的分支)
取消全员禁言
注意事项
该 API 仅支持更新场景群聊,不支持更新普通群聊
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
openConversationId: 群聊 ID,可以是OpenConversationId,Group,str
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId
app = Dingtalk()
app.prepare()
res = await app.unmute_all(OpenConversationId('cid1145149191810'))
kick_member
踢出群成员
注意事项
该 API 仅支持踢出场景群聊的成员,不支持踢出普通群聊的成员
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
openConversationId: 群聊 ID,可以是OpenConversationId,Group,strmemberStaffIds: 用户 ID 列表,可以是Member,str,List[Member]或者List[str]
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId, Member
app = Dingtalk()
app.prepare()
res = await app.kick_member(
OpenConversationId('cid1145149191810'),
[Member('staffId1145149191810'), Member('staffId1145149191811')]
)
add_member
邀请群成员
注意事项
该 API 仅支持邀请场景群聊的成员,不支持邀请普通群聊的成员
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
openConversationId: 群聊 ID,可以是OpenConversationId,Group,strmemberStaffIds: 用户 ID 列表,可以是Member,str,List[Member]或者List[str]
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId, Member
app = Dingtalk()
app.prepare()
res = await app.add_member(
OpenConversationId('cid1145149191810'),
[Member('staffId1145149191810'), Member('staffId1145149191811')]
)
set_admin
设置管理员
注意事项
该 API 仅支持设置场景群聊的管理员,不支持设置普通群聊的管理员
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
openConversationId: 群聊 ID,可以是OpenConversationId,Group,strmemberStaffIds: 用户 ID 列表,可以是Member,str,List[Member]或者List[str]set_admin: 设置管理员,True为设置,False为取消设置
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId, Member
app = Dingtalk()
app.prepare()
res = await app.set_admin(
OpenConversationId('cid1145149191810'),
[Member('staffId1145149191810'), Member('staffId1145149191811')]
)
mute_member
禁言群成员
注意事项
该 API 仅支持禁言场景群聊的成员,不支持禁言普通群聊的成员
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
openConversationId: 群聊 ID,可以是OpenConversationId,Group,strmemberStaffIds: 用户 ID 列表,可以是Member,str,List[Member]或者List[str]muteTime: 禁言时长,单位为秒,0为取消禁言似乎没有最大时间限制,你甚至可以禁言他10年
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId, Member
app = Dingtalk()
app.prepare()
res = await app.mute_member(
OpenConversationId('cid1145149191810'),
[Member('staffId1145149191810'), Member('staffId1145149191811')],
60*60*24*365 # 禁言一年
)
unmute_member (mute_member 的分支)
取消禁言群成员
注意事项
该 API 仅支持取消禁言场景群聊的成员,不支持取消禁言普通群聊的成员
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
openConversationId: 群聊 ID,可以是OpenConversationId,Group,strmemberStaffIds: 用户 ID 列表,可以是Member,str,List[Member]或者List[str]
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId, Member
app = Dingtalk()
app.prepare()
res = await app.unmute_member(
OpenConversationId('cid1145149191810'),
[Member('staffId1145149191810'), Member('staffId1145149191811')]
)
set_off_duty_prompt
设置 Stream 机器人离线提醒
注意事项
此接口只支持 Stream 机器人,不支持 HTTP 机器人
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
text: str = "人家今天下班了呢~请晚些再来找我吧",
title: str = "钉钉Stream机器人",
logo: Union[File, str] = "@lALPDfJ6V_FPDmvNAfTNAfQ",
robotCode: str = None,
access_token: str = None
text: 离线提醒内容title: 离线提醒标题logo: 离线提醒头像,可以是File对象或者@开头的 mediaIDrobotCode: 机器人编码,如果不指定,则使用默认机器人access_token: 机器人 access_token,如果不指定,则使用默认机器人
返回值
dict钉钉原始返回(可能以后会改为更适合的返回类型)
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import Image
app = Dingtalk()
app.prepare()
res = await app.set_off_duty_prompt(
text="人家今天下班了呢~请晚些再来找我吧",
title="钉钉Stream机器人",
logo=Image("path/to/your/logo.png")
)
upload_file
上传文件
注意事项
上传完成的文件获取到的 mediaId 在全钉钉可用
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1/0
参数
file: 文件路径,可以是str或者File对象不建议直接使用
File对象,建议使用对应对象Image对象大小必须是20MiB以下Voice对象大小必须是2MiB以下Video对象大小必须是20MiB以下File对象大小必须是20MiB以下
返回值
输入的为
File对象,则更新其mediaId属性,并返回输入的为
str对象,则返回已经更新mediaId属性的File对象
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import File, Image
app = Dingtalk()
app.prepare()
image = await app.upload_file(Image("path/to/your/image.png"))
download_file
下载文件
注意事项
需要指定下载的路径和文件名
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
downloadCode: 下载码,可以是str或者File对象path: 下载路径,可以是str或者Path对象
返回值
bool下载成功与否
示例
忘记怎么写了,这个功能我很少用,因为不能自动判断文件类型,所以很麻烦
run_coroutine
在同步函数中运行异步函数
参数
coroutine: 异步函数
返回值
Any异步函数的返回值
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId
app = Dingtalk()
app.prepare()
res = app.run_coroutine(app.semd_message(OpenConversationId('cid1145149191810'), 'hello'))
with_access_token
在特定上下文中使用特定 access_token
注意事项
该 API 仅支持在特定上下文中使用特定 access_token,不支持全局使用
似乎在控制台模式下存在无法切换回原有 access_token 的问题
参数
access_token:AccessToken对象
返回值
ContextManager特定上下文管理器
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import OpenConversationId
from dingraia.access_token import AccessToken
app = Dingtalk()
app.prepare()
with app.with_access_token(AccessToken('your_access_token')):
res = app.run_coroutine(app.semd_message(OpenConversationId('cid1145149191810'), 'hello'))
create_task
创建异步任务
注意事项
该函数只能在框架还未开始进入消息等待时调用,否则无效
参数
coroutine: 异步函数name: 任务名称,可选show_info: 是否显示任务信息,可选not_cancel_at_the_exit: 是否在退出时不取消任务,可选
返回值
tuple:Task,name
示例
from dingraia.lazy import *
@channel.use(ListenerSchema(listening_events=[LoadComplete]))
async def init(app: Dingtalk):
app.create_task(check_power_fee(), "Check Power Fee")
stop
停止框架
返回值
None
coroutine_watcher
监控异步函数的运行状态并在意外结束时自动重启
参数
function: 异步函数*args: 异步函数参数**kwargs: 异步函数关键字参数
返回值
None
get_info
从缓存中读取对象的信息
参数
target: 目标对象,可以是Member,Group,OpenConversationId,str,int
返回值
tuple:dict目标对象信息,int缓存时间戳
update_object
从缓存中更新对象信息
参数
target: 目标对象,可以是Member,Group,OpenConversationId或其他
返回值
target(已更新)
群组管理API
create_group
创建群组
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
2
参数
name: 群名称,str类型owner: 群主,可以是Member实例或员工ID(str)useridlist: 初始成员列表,List[str]类型showHistory: 是否显示历史消息,bool类型,默认Truesearchable: 是否可搜索,bool类型,默认TruevalidationType: 验证类型,int类型mentionAllAuthority: @所有人权限,int类型managementType: 管理类型,int类型chatBannedType: 禁言类型,int类型
返回值
dingraia.model.Group: 创建的群组对象
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import Member
app = Dingtalk()
app.prepare()
owner = Member()
owner.staffId = 'manager123'
members = ['user1', 'user2', 'user3']
group = await app.create_group(
name='测试群组',
owner=owner,
useridlist=members,
showHistory=True
)
update_card
更新已发送的卡片内容。
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
outTrackId: 卡片的追踪ID,可以是字符串或CardResponse对象cardParamData: 新的卡片数据,可以是字典或Markdown对象privateData: 新的私有数据,可以是字典或PrivateDataBuilder对象
返回值
dict: 钉钉API的响应数据
示例
from dingraia.DingTalk import Dingtalk
from dingraia.message.element import Markdown
app = Dingtalk()
app.prepare()
# 发送卡片
card = await app.send_markdown_card(
target,
Markdown("原始内容", "标题")
)
# 更新卡片
await app.update_card(
card.outTrackId,
Markdown("更新后的内容", "新标题")
)
get_depts
获取组织的部门列表。
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
deptId: 部门ID,默认为1(根部门)access_token: 可选的访问令牌
返回值
list: 部门列表
示例
from dingraia.DingTalk import Dingtalk
app = Dingtalk()
app.prepare()
# 获取根部门下的所有部门
depts = await app.get_depts()
# 获取指定部门下的子部门
sub_depts = await app.get_depts("123456")
get_dept_users
获取部门下的用户列表。
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
deptId: 部门ID,默认为"1"(根部门)access_token: 可选的访问令牌
返回值
list: 用户ID列表
示例
from dingraia.DingTalk import Dingtalk
app = Dingtalk()
app.prepare()
# 获取部门用户
users = await app.get_dept_users("123456")
create_user
在组织中创建新用户。
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
name: 用户名称mobilePhone: 手机号码deptIds: 所属部门ID列表userId: 可选的用户IDhidePhone: 是否隐藏手机号jobNumber: 工号positionName: 职位名称personalEmail: 个人邮箱organizeEmail: 企业邮箱其他可选参数...
返回值
dict: 创建结果
示例
from dingraia.DingTalk import Dingtalk
app = Dingtalk()
app.prepare()
# 创建用户
result = await app.create_user(
name="张三",
mobilePhone="13800138000",
deptIds=["1"],
jobNumber="001",
positionName="工程师"
)
update_user
更新用户信息。
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
userId: 用户IDname: 新的用户名hide_mobile: 是否隐藏手机号telephone: 新的电话号码job_number: 新的工号其他可选参数...
返回值
dict: 更新结果
示例
from dingraia.DingTalk import Dingtalk
app = Dingtalk()
app.prepare()
# 更新用户信息
result = await app.update_user(
userId="123456",
name="李四",
job_number="002"
)
remove_user
从组织中移除用户。
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
userStaffId: 用户的staffIdaccess_token: 可选的访问令牌
返回值
dict: 删除结果
示例
from dingraia.DingTalk import Dingtalk
app = Dingtalk()
app.prepare()
# 移除用户
result = await app.remove_user("123456")
set_off_duty_prompt
设置机器人离线时的提示信息。
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
text: 提示文本title: 卡片标题logo: 卡片logorobotCode: 可选的机器人代码access_token: 可选的访问令牌
返回值
dict: 设置结果
示例
from dingraia.DingTalk import Dingtalk
app = Dingtalk()
app.prepare()
# 设置离线提示
result = await app.set_off_duty_prompt(
text="我现在不在线,稍后回复您",
title="离线提示"
)
upload_file
上传文件到钉钉服务器。
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
file: 要上传的文件,可以是路径、URL或File对象
返回值
File: 包含mediaId的File对象
示例
from dingraia.DingTalk import Dingtalk
from dingraia.element import File
app = Dingtalk()
app.prepare()
# 上传本地文件
file = await app.upload_file("path/to/file.txt")
# 上传网络文件
file = await app.upload_file("https://example.com/file.txt")
# 上传File对象
file_obj = File()
file_obj.file = open("file.txt", "rb")
file = await app.upload_file(file_obj)
download_file
下载机器人接收到的文件。
额外需求
需要配置
Dingtalk.config.botAPI 消耗:
1
参数
downloadCode: 文件的下载码path: 保存文件的路径
返回值
bool: 下载是否成功
示例
from dingraia.DingTalk import Dingtalk
app = Dingtalk()
app.prepare()
# 下载文件
success = await app.download_file(
"download_code",
"path/to/save/file.txt"
)