

使用企微机器人api创建智能表格的时候忘记指定管理员了,发现自己不是管理员还不能设置,找技术人员还慢,怎么解决?
使用企微机器人api创建智能表格的时候想同时指定管理员,怎么解决?
使用企微机器人api创建智能表格的时候发现指定管理员的时候,找不到user_id,怎么解决?
今天就教你们
下面是代码
首先,先配置企业ID及应用的Secret,然后调用这样函数即可,包含以下功能:
1.获取 access_token
2.通过电话号码获取user_id
3.验证user_id的有效性
4.创建智能表格并指定管理员 (事前)
5.为已有智能表格添加/更新管理员(事后)
import os
import requests
# ========== 配置区域(从环境变量读取敏感信息) ==========
WECOM_CORPID = os.environ.get('WECOM_CORPID') # "您的企业ID"
WECOM_SECRET = os.environ.get('WECOM_SECRET') # "应用的Secret"
# ========== 获取 access_token ==========
def get_access_token():
url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={WECOM_CORPID}&corpsecret={WECOM_SECRET}"
resp = requests.get(url).json()
if resp.get("errcode") == 0:
return resp["access_token"]
else:
raise Exception(f"获取token失败: {resp}")
# 通过电话号码获取user_id
def get_userid_by_mobile( mobile):
# 获取 access_token
access_token = get_access_token()
url = f"https://qyapi.weixin.qq.com/cgi-bin/user/getuserid?access_token={access_token}"
payload = {"mobile": mobile}
resp = requests.post(url, json=payload).json()
if resp.get("errcode") == 0:
# print(resp["userid"])
return resp["userid"]
else:
print(f"获取userid失败: {resp}")
return None
# ======= 验证user_id的有效性 =========
def validate_userid( userid):
"""验证userid在当前应用的token下是否有效"""
if not userid:
print("未提供任何管理员userid,操作已取消。")
return False
# 获取 access_token
access_token = get_access_token()
url = f"https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token={access_token}&userid={userid}"
resp = requests.get(url).json()
if resp.get("errcode") == 0:
print(f"✅ userid '{userid}' 验证成功!")
return True
else:
print(f"❌ userid '{userid}' 验证失败:{resp.get('errmsg')} (错误码: {resp.get('errcode')})")
return False
# ========== 1. 为已有智能表格添加/更新管理员 ==========
def update_smartsheet_admin(docid, admin_userids, access_token=None):
"""
为已存在的智能表格添加或更新管理员(会覆盖原有管理员?不会,只会追加/更新)。
Args:
docid: 智能表格的文档ID
admin_userids: list of str,要设置为管理员的成员userid列表(例如 ['zhangsan', 'lisi'])
access_token: 可选,若不提供则自动获取
Returns:
bool: 是否成功
"""
if not admin_userids:
print("未提供任何管理员userid,操作已取消。")
return False
# 获取 access_token
if access_token is None:
access_token = get_access_token()
# 自动将字符串转为列表
if isinstance(admin_userids, str):
admin_userids = [admin_userids]
url = f"https://qyapi.weixin.qq.com/cgi-bin/wedoc/mod_doc_member?access_token={access_token}"
# 构造要添加/更新的成员列表,auth=7 表示管理员权限
update_list = [{"type": 1, "auth": 7, "userid": uid} for uid in admin_userids]
payload = {
"docid": docid,
"update_file_member_list": update_list
# 注意:不会影响其他已有成员,仅添加或更新这些成员为管理员
}
try:
resp = requests.post(url, json=payload, timeout=30)
result = resp.json()
if result.get("errcode") == 0:
print(f"成功为表格 {docid} 设置管理员: {admin_userids}")
return True
else:
print(f"设置管理员失败,错误码: {result.get('errcode')}, 错误信息: {result.get('errmsg')}")
return False
except Exception as e:
print(f"请求异常: {e}")
return False
# ========== 创建智能表格并指定管理员 ==========
def create_smartsheet_with_admin(doc_name, admin_userids, spaceid=None, fatherid=None, access_token=None):
"""
创建一个新的智能表格,并指定初始管理员。
Args:
doc_name: 新表格的名称(例如 "成本异常监控表")
admin_userids: list of str,初始管理员userid列表(也支持单个字符串)
spaceid: 微盘空间ID,若不提供则使用 DEFAULT_SPACEID(如果非空)
fatherid: 父目录ID,若不提供则使用 DEFAULT_FATHERID(如果非空)
access_token: 可选,若不提供则自动获取
Returns:
str or None: 成功返回新表格的docid,失败返回None
"""
if not doc_name or not admin_userids:
print("必须提供文档名称和管理员列表")
return None
# 兼容:如果 admin_userids 是字符串,转为列表
if isinstance(admin_userids, str):
admin_userids = [admin_userids]
if access_token is None:
access_token = get_access_token()
url = f"https://qyapi.weixin.qq.com/cgi-bin/wedoc/create_doc?access_token={access_token}"
payload = {
"doc_type": 10,
"doc_name": doc_name,
"admin_users": admin_userids
}
# 处理微盘空间ID(仅当明确提供或默认值非空时才添加)
final_spaceid = spaceid
if final_spaceid:
payload["spaceid"] = final_spaceid
# 处理父目录ID(仅当明确提供或默认值非空时才添加)
final_fatherid = fatherid
if final_fatherid:
payload["fatherid"] = final_fatherid
try:
resp = requests.post(url, json=payload, timeout=30)
result = resp.json()
if result.get("errcode") == 0:
new_docid = result.get("docid")
print(f"智能表格创建成功!名称:{doc_name},docid:{new_docid}")
print(f"访问链接:{result.get('url')}")
return new_docid
else:
print(f"创建失败,错误码:{result.get('errcode')},错误信息:{result.get('errmsg')}")
return None
except Exception as e:
print(f"请求异常:{e}")
return None参考资料