Operate Feishu or Lark IM APIs via UXC + curated OpenAPI schema
Design & media
Feishu Invoice Approval
Try itScaffold, configure, validate, run, and maintain a Feishu/Lark invoice approval bot that uses Codex vision, validates buyer headers, auto-selects the closest expense category, drafts the approval reason, sends an interactive confirmation card, and submits only after the original uploader confirms. Use for building or troubleshooting Feishu invoice-to-approval workflows, approval form mappings, dry-run tests, card callbacks, and duplicate protection.
What it does
Scaffold, configure, validate, run, and maintain a Feishu/Lark invoice approval bot that uses Codex vision, validates buyer headers, auto-selects the closest expense category, drafts the approval reason, sends an interactive confirmation card, and submits only after the original uploader confirms. Use for building or troubleshooting Feishu invoice-to-approval workflows, approval form mappings, dry-run tests, card callbacks, and duplicate protection.
The skill document
Automate Feishu Invoice Approval
Build a reusable Python service that turns invoice images sent to a Feishu bot into uploader-confirmed expense approvals.
Core workflow
-
Choose a new or empty target directory. Do not overwrite an existing project.
-
Run
python3 /scripts/scaffold.py --target. -
Read references/setup.md before configuring a first deployment or changing an approval definition.
-
Copy
.env.exampleto.envandconfig/approval_mapping.example.jsontoconfig/approval_mapping.json. -
Fill the buyer name, buyer tax ID, approval code, expense option IDs, and approval widget IDs. Never put an app secret in
.envor the mapping file. -
Configure the Feishu application credential with
scripts/setup-lark.sh. -
Run the generated project's tests and validation:
PYTHONPATH=src python3 -m unittest discover -s tests -v PYTHONPATH=src python3 -m invoice_approval_bot.cli validate -
Start with
BOT_DRY_RUN=true. Send representative invoices and verify extraction, buyer-header rejection, category selection, reason generation, confirmation-card callbacks, and duplicate handling. -
Set
BOT_AUTO_SUBMIT=trueandBOT_DRY_RUN=falseonly when the user explicitly authorizes real approval creation. -
Run
scripts/run.shunder the user's preferred supervisor. Read references/operations.md for status meanings and incident checks.
Safety invariants
- Limit file reads and writes to the Skill bundle and the user-selected target project. Shell access is required to run the scaffolder, tests, validation,
codex, andlark-cli; environment access is limited to the variables declared in frontmatter and the generated project's.env. - Reject an invoice before confirmation when either the normalized buyer name or normalized buyer tax ID differs from the configured values. Tell the uploader which field failed.
- Never create a real approval until the original uploader clicks Submit on the confirmation card.
- Accept card actions only from the uploader and only for the matching card and source message.
- Keep dry-run enabled during initial setup, approval-form changes, and callback changes.
- Preserve SQLite idempotency and invoice-fingerprint duplicate protection.
- Do not publish or log
.env, app secrets, approval credentials, real invoice images, extracted invoice JSON, SQLite databases, open IDs, or organization-specific approval/widget IDs. - Do not invent approval widget or radio-option IDs. Obtain them from the target approval definition.
Customization
- Edit the JSON Schema enum in
config/invoice-output.schema.jsonand the matchingexpense_type_optionsobject together when changing expense categories. - Keep mapping values on supported paths such as
invoice.expense_category_value,invoice.approval_summary,invoice.total_amount_number, andapproval_file.attachment_code. - Update or add unit tests whenever changing mappings, normalization, card actions, or submission state transitions.
- Keep the bundled confirmation gate unless the user explicitly requests a different approval policy and understands the risk.
Bundled resources
scripts/scaffold.pycopies a clean, reusable project template.assets/template/contains the Python service, tests, schema, and safe example configuration.references/setup.mdcovers Feishu application and approval mapping setup.references/operations.mdcovers dry-run promotion, records, statuses, and troubleshooting.
Related skills
Use this skill for Feishu/Lark OpenAPI integration work: configuring OpenClaw Feishu bot accounts, setting app credentials outside the skill, reading or writ...
Design or implement a paper-management workflow built on a Feishu bot plus OpenClaw. Use when the user wants to ingest papers from Feishu messages, save PDFs...
Poll Feishu groups for new messages, download message resources, read Feishu docs/wiki/sheets/bitables, compile message-source markdown, judge which chat segments are worth preserving, and ingest valuable materials into the Research KB through a prepare/apply workflow.
Use when the user provides a Feishu/Lark document URL (feishu.cn or larksuite.com) and wants to export, download, save, or convert it to a local Markdown file. Triggers on phrases like "Export Lark documents as Markdown, save them locally, or convert ", or any feishu.cn/docx link with export intent.
Configure OpenClaw multi-agent routing for Feishu multi-account setups. Use when users need two or more Feishu bots (different appId/appSecret) to run on iso...