接入相关
如何获取表格的 workbookId
每个钉钉表格都有一个 workbookId 作为唯一标识,有以下几种获取方式:
- 从表格 URL 中获取:打开钉钉表格,URL 中包含的文档 ID 即为
workbookId。
- 从文档信息中获取:点击表格左上角「菜单」→「表格」→「文档信息」,其中的文档 ID 即为
workbookId。
- 通过知识库 API 获取:调用获取节点接口,返回的
nodeId(dentryUuid)即为workbookId。
如何获取 operatorId
operatorId是操作人的unionId,获取步骤如下:
- 通过手机号获取 userId:调用根据手机号查询用户接口。
- 通过 userId 获取 unionId:调用查询用户详情接口,返回的
unionId即为operatorId。
首次调用可能需要在应用中申请「通讯录」相关权限。获取到 operatorId 后建议将其保存下来(如配置为环境变量),避免每次都通过接口获取。
AccessToken 过期了怎么办
AccessToken 的有效期为 7200 秒(2 小时)。过期后需要重新调用 获取企业内部应用的accessToken接口获取新的 Token。
建议在应用中实现 Token 缓存和自动刷新机制:
- 缓存 Token 及其过期时间;
- 在 Token 过期前 5 分钟主动刷新;
- 当接口返回 Token 无效错误时,立即刷新并重试。
调用接口报错 The operator has no permission,如何解决
该错误表示operatorId对应的用户没有目标表格的操作权限。请检查:
-
用户是否有表格的访问权限:确保该用户已被添加为表格的协作者,或表格所在的知识库对该用户开放了权限。
-
权限类型是否匹配:
- 读操作:如
GetAllSheets、GetSheet、GetRange需要Document.Workbook.Read 权限。
- 写操作:如
AppendRows、UpdateRange、CreateSheet)需要 Document.Workbook.Write权限。
-
应用是否申请了对应权限:在钉钉开放平台的应用管理中,检查是否已申请并获批了相应的权限点。
API 使用相关
sheetId 参数可以传工作表名称吗
可以,sheetId参数支持传入工作表的 ID 或 名称(标题)。例如:
- 传 ID:
Sheet1,系统生成的 ID;
- 传名称:
销售数据,用户自定义的工作表标题。
建议:优先使用工作表 ID,因为名称可能被用户修改。可通过GetAllSheets接口获取所有工作表的 ID 和名称。
AppendRows 追加数据时,数据会写到哪里
AppendRows会自动定位工作表中最后一行有数据的位置,在其下方追加新行。
- 如果工作表为空,数据从第一行开始写入。
- 追加的列数应与已有数据的列数保持一致,以确保数据对齐。
UpdateRange 更新单元格时,rangeAddress 的格式是什么?
rangeAddress使用 A1 表示法,常见格式如下:
GetRange 和 UpdateRange 有什么区别?
GetRange适合在写入数据后验证结果,或在自动化流程中读取表格数据进行后续处理。两者使用相同的rangeAddress参数(A1 表示法)来指定操作的单元格范围。
调用接口返回 invalidRequest.resource.notFound,如何排查
该错误表示请求的资源不存在,常见原因:
钉钉表格 API 有哪些使用限制
如何在代码中处理 API 调用失败的情况
建议实现以下错误处理策略:
- Token 过期自动刷新:捕获 Token 无效错误,自动刷新后重试。
- 频率限制重试:收到 429 错误时,等待一段时间后重试(建议使用指数退避策略)。
- 幂等性处理:对于写操作(如
AppendRows),需注意重试可能导致数据重复写入。建议在数据中加入唯一标识,写入后通过 GetRange 验证。
- 超时处理:网络请求设置合理的超时时间(建议 30 秒),超时后进行重试。