builders
feishu.approval.builders
¶
approval_form_field
¶
approval_form_field(widget_id: str, value: Any, *, widget_type: str | None = None, name: str | None = None) -> NestedDict
构造一个飞书审批表单控件值。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
str
|
审批定义中的表单控件 ID。 |
必需 |
|
Any
|
该控件接受的取值。 |
必需 |
|
str | None
|
可选飞书控件类型。 |
None
|
|
str | None
|
可选可读字段名。 |
None
|
返回:
| 类型 | 描述 |
|---|---|
NestedDict
|
单个表单控件载荷,可交给 feishu.approval.approval_form 序列化。 |
示例:
| Python Console Session | |
|---|---|
源代码位于: feishu/approval/builders.py
approval_form
¶
序列化飞书审批表单字段。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
Mapping[str, Any] | Iterable[Mapping[str, Any]]
|
|
必需 |
返回:
| 类型 | 描述 |
|---|---|
str
|
可用于 |
示例:
| Python Console Session | |
|---|---|
源代码位于: feishu/approval/builders.py
approval_instance
¶
approval_instance(approval_code: str, *, form: str | Mapping[str, Any] | Iterable[Mapping[str, Any]] | None = None, user_id: str | None = None, open_id: str | None = None, department_id: str | None = None, node_approver_user_id_list: list[dict[str, Any]] | None = None, **extra: Any) -> NestedDict
构造飞书审批实例创建载荷。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
str
|
审批定义 Code。 |
必需 |
|
str | Mapping[str, Any] | Iterable[Mapping[str, Any]] | None
|
已序列化表单 JSON、 |
None
|
|
str | None
|
申请人的用户 ID。 |
None
|
|
str | None
|
申请人的 Open ID。 |
None
|
|
str | None
|
申请人所属部门 ID。 |
None
|
|
list[dict[str, Any]] | None
|
可选自选审批人列表。 |
None
|
|
Any
|
其他需要透传的飞书字段。 |
{}
|
返回:
| 类型 | 描述 |
|---|---|
NestedDict
|
可传给 feishu.approval.instances.InstancesNamespace.create 的审批实例载荷。 |
源代码位于: feishu/approval/builders.py
approval_definition_index
¶
将审批定义表单索引为 widget_id -> {type, name, required, is_child, children}。
与会拍平结构的 feishu.approval.approval_definition_widgets 不同,本函数保留 fieldList
(费用明细等可重复分组)控件的父子关系:父控件条目携带有序 children,子控件条目标记
is_child=True。该索引用于定义感知序列化 feishu.approval.approval_form_payloads,
以及必填覆盖校验 feishu.approval.approval_form_problems。
示例:
源代码位于: feishu/approval/builders.py
approval_form_payloads
¶
approval_form_payloads(index: Mapping[str, Mapping[str, Any]], values: Mapping[str, Any], *, default_currency: str = 'CNY', tz_offset: str = '+08:00') -> list[dict[str, Any]]
按审批定义把 widget_id -> value 序列化为创建实例所需的表单控件载荷。
每个元素会成为飞书文档约定的 {"id", "type", "value"} 结构,并按控件类型格式化:
amount 生成数字 value 和同级 currency;date 转为带 tz_offset 的 RFC3339;
formula / number 转为 JSON 数字;列表值控件(如 attachmentV2 / checkboxV2 / contact / connect)
转为数组;fieldList 转为二维的类型化子控件行。未知类型保持原值透传。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
Mapping[str, Mapping[str, Any]]
|
feishu.approval.approval_definition_index 的输出(控件 ID 到条目的映射)。 |
必需 |
|
Mapping[str, Any]
|
调用方提供的 |
必需 |
|
str
|
|
'CNY'
|
|
str
|
裸 |
'+08:00'
|
示例:
源代码位于: feishu/approval/builders.py
approval_form_problems
¶
approval_form_problems(index: Mapping[str, Mapping[str, Any]], values: Mapping[str, Any], *, resolved_account_widget_ids: Iterable[str] = ()) -> list[str]
在触发飞书不透明的 1390001 前,返回表单会校验失败的人类可读原因。
本函数检查每个顶层必填控件:API 不支持的类型(见
feishu.approval.APPROVAL_API_UNSUPPORTED_WIDGET_TYPES)会报告为不可填写;缺失值会按字段名报告;
fieldList 会校验至少有一行,且每行都包含其必填子控件。account 控件默认不接受 form
里的任何值;只有调用方通过 resolved_account_widget_ids 明确标记该字段来自受信任账户解析器时,
才接受已解析出的账户对象。返回空列表表示表单看起来完整。
示例:
源代码位于: feishu/approval/builders.py
| Python | |
|---|---|
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 | |
approval_account_widgets
¶
approval_account_widgets(instance: Mapping[str, Any]) -> list[NestedDict]
从已读取的审批实例表单中返回已填写的 account(收款账户)控件。
飞书没有枚举用户绑定收款账户的公开 API,但用户本人过去提交的实例可能在 form 中携带完整账户值。
这些值应视为敏感数据:调用方只应暴露不透明句柄 / 脱敏标签,并且只能在同一用户的 account
控件提交路径中复用完整对象。
示例:
| Python Console Session | |
|---|---|
源代码位于: feishu/approval/builders.py
approval_instance_participant_ids
¶
收集审批实例中所有合法参与者的用户标识。
返回申请人(顶层字段)、task_list 中每个审批人、以及 timeline 中每个操作人的 open_id /
user_id。调用方用它保证只有实例参与者可以读取该实例:查询实例接口走租户 token(用户 token 会返回
99991668),如果没有这层校验,被越权操控的智能体可凭实例 ID 读取他人实例及其中的银行账户表单数据。
应与请求用户自身 ID 求交集,无交集时 fail closed。
示例:
| Python Console Session | |
|---|---|
源代码位于: feishu/approval/builders.py
approval_account_number
¶
从账户控件值中提取银行卡号;这是服务端内部去重键,不应暴露给模型。
源代码位于: feishu/approval/builders.py
approval_account_label
¶
为账户值生成隐私脱敏的人类可读标签:'<bank> ****<last4> (<holder>)'。
仅暴露末 4 位;完整卡号绝不能进入模型上下文。
示例:
| Python Console Session | |
|---|---|
源代码位于: feishu/approval/builders.py
approval_definition_schema
¶
approval_definition_schema(definition: Mapping[str, Any]) -> NestedDict
从审批定义返回紧凑、适合模型读取的 schema。
返回值保留高价值原始定义字段,并在能发现表单控件时增加归一化 fields 列表。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
Mapping[str, Any]
|
原始审批定义映射,通常来自 feishu.approval.definitions.DefinitionsNamespace.get。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
NestedDict
|
含 |
NestedDict
|
chanfig.NestedDict;发现表单控件时增加归一化 |
NestedDict
|
|
源代码位于: feishu/approval/builders.py
approval_cached_definition_summary
¶
approval_cached_definition_summary(definition: Mapping[str, Any]) -> NestedDict
返回适合缓存、日志和工具上下文的小型审批定义摘要。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
Mapping[str, Any]
|
原始或已归一化的审批定义映射(通常为 feishu.approval.approval_definition_schema 的输出)。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
NestedDict
|
仅包含 |
NestedDict
|
源代码位于: feishu/approval/builders.py
approval_definition_code
¶
从常见飞书响应结构中提取审批定义 Code。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
Mapping[str, Any]
|
可能携带审批定义 Code 的映射(列表项或定义详情)。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
str | None
|
首个命中的非空 Code(依次尝试 |
str | None
|
|
源代码位于: feishu/approval/builders.py
approval_definition_summary
¶
approval_definition_summary(item: Mapping[str, Any], access_method: str | None = None) -> NestedDict
将一个审批定义列表项归一化为紧凑摘要。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
Mapping[str, Any]
|
单个审批定义列表项映射。 |
必需 |
|
str | None
|
可选的访问方式标记(如 |
None
|
返回:
| 类型 | 描述 |
|---|---|
NestedDict
|
含 |
NestedDict
|
|
源代码位于: feishu/approval/builders.py
approval_nonempty_form
¶
返回非空审批表单载荷,并保留原始的映射 / 列表形状。
与按定义把 widget_id -> value 序列化为控件载荷列表的
feishu.approval.approval_form_payloads 不同,本函数不做任何序列化,仅在 form
为非空映射或非空列表时原样透传(映射会包装为 chanfig.NestedDict),否则返回 None。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
Any
|
待检查的原始表单,通常为映射或列表;其他类型或空值一律视为无表单。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
Mapping[str, Any] | list[Any] | None
|
非空映射(包装为 |
源代码位于: feishu/approval/builders.py
approval_definition_widgets
¶
approval_definition_widgets(definition: Mapping[str, Any]) -> list[NestedDict]
从审批定义中返回拍平后的表单控件列表。
飞书审批定义在不同版本中会以多种形态暴露 form:有时是 JSON 字符串,有时是列表 / 字典。
本函数解析已知形态,并递归收集看起来像表单控件的对象。
源代码位于: feishu/approval/builders.py
approval_file_fields
¶
提取文件类审批控件的稳定字段标识。
当定义看起来包含文件控件但没有可解析的 fields 时,抛出 ValueError,
避免调用方猜测字段名。
源代码位于: feishu/approval/builders.py
approval_definition_may_contain_file_widget
¶
approval_definition_may_contain_file_widget(definition: Mapping[str, Any]) -> bool
判断原始审批定义字段是否提到文件类控件。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
Mapping[str, Any]
|
原始审批定义映射;检查其 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
bool
|
当任一字段的文本看起来描述文件类控件(见 |
bool
|
feishu.approval.is_approval_file_widget_text)时返回 |
源代码位于: feishu/approval/builders.py
is_approval_file_widget_text
¶
判断自由文本是否像是在描述审批文件类控件。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
str
|
待检查的自由文本(如序列化后的 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
bool
|
文本(不区分大小写)包含 |
bool
|
|
源代码位于: feishu/approval/builders.py
approval_field_key
¶
从表单 / 控件映射中提取最稳定的字段键。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
Mapping[str, Any]
|
单个表单或控件映射。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
str | None
|
首个命中的非空字段键(依次尝试 |
str | None
|
|
源代码位于: feishu/approval/builders.py
is_approval_file_widget
¶
判断表单 / 控件映射是否代表文件类控件。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
Mapping[str, Any]
|
单个表单或控件映射;读取其 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
bool
|
控件类型(不区分大小写)包含 |
bool
|
时返回 |