企业微信智能表格API创建:获取user_id & 指定管理员 & 更新管理员
评论
收藏

企业微信智能表格API创建:获取user_id & 指定管理员 & 更新管理员

经验分享
早日下班
2026-05-14 10:44·浏览量:258
早日下班
影刀高级开发者
发布于 2026-05-14 10:44258浏览
  1. 使用企微机器人api创建智能表格的时候忘记指定管理员了,发现自己不是管理员还不能设置,找技术人员还慢,怎么解决?

  2. 使用企微机器人api创建智能表格的时候想同时指定管理员,怎么解决?

  3. 使用企微机器人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

参考资料

修改文档成员与权限 - 文档 - 企业微信开发者中心

新建文档 - 文档 - 企业微信开发者中心

错误码查询工具 - 企业微信开发者中心

收藏1
全部评论1
最新
发布评论
评论