Documentation is Chinese-first. For an English project overview, see the English README. 飞书内的
help/帮助回复是本手册的简要入口,完整行为与限制以本手册为准。
飞账是运行在飞书 / Lark 中的 AI 记账机器人。你可以用日常语言记录收支,也可以修改或撤销最近一笔、查询汇总、管理分类月预算和生成消费报告。
机器客户端使用通道无关的稳定契约 /api/v1/*(v0.9.0 起正式;/api/client/v1/* 为兼容别名,同一组 handler)。响应是稳定的结构化 JSON,不以 AI 展示文本作为业务结果。Bearer 个人令牌(llv1_)在 Web Dashboard 的「系统 → API 令牌」页或 POST /api/web/v1/client-credentials 创建;该请求仍受 Cookie + CSRF 保护。明文只在创建响应中出现一次,服务端仅保存 SHA-256 摘要;令牌可设过期、可随时撤销。浏览器 Session Cookie 不能代替 Bearer,Bearer 也不能绕过 Web CSRF。完整说明见 Client API 文档。
curl -H "Authorization: Bearer llv1_..." \
https://ledger.example/api/v1/me
curl -X POST https://ledger.example/api/v1/transactions \
-H "Authorization: Bearer llv1_..." \
-H "Idempotency-Key: device-20260809-0001" \
-H "Content-Type: application/json" \
-d '{"type":"expense","amount":"32.00","currency":"CNY","category":"餐饮","note":"午饭","occurred_at":"2026-08-09T12:00:00+08:00"}'(/api/v1/transactions 与 /api/v1/entries 等价。)
- 写请求必须带 1–128 字符的
Idempotency-Key。同一用户、操作和账本中的相同键 + 相同负载返回原业务快照;负载不同返回conflict。不同用户或账本可安全复用相同键。 - 当前账本保存在具体凭证上。
POST /ledgers/{ledger_id}/select会重新认证并授权;家庭成员退出或被移除后,下次请求立即回退默认个人账本。 - 列表端点使用
page/page_size;账目时间使用左闭右开start/end,分析使用本地日期start_date/end_date,服务端维持最大范围和导出大小限制。 - 高风险写入仍进入既有 Pending。具有
pending:writescope 的凭证才能确认或取消;确认时重新检查冻结的actor_user_id + ledger_id,重复确认只执行一次。 - 稳定错误码为
authentication_required、permission_denied、resource_not_found、validation_error、conflict、expired、rate_limited、temporary_failure。未授权资源统一使用不可枚举的 not-found 响应。
/api/v1 自 v0.9.0 起是稳定契约:新增字段优先为可选字段,破坏性变更通过新的版本路径发布。完整 OpenAPI(含 Bearer security scheme)可从运行实例的 /openapi.json 获取;错误 envelope 带 request_id,日志中只记录令牌前缀。
群聊中请先
@飞账;与机器人单聊时可以直接发送。只有收到“已记录”“已修改”“已撤销”或查询结果,才表示操作成功。
| 你想做什么 | 示例 |
|---|---|
| 记录支出 | 晚饭猪脚饭花了20元 |
| 记录收入 | 工资到账10000元 |
| 批量记录并设置预算 | 早餐12,午饭32,打车45,餐饮预算1000 |
| 补记过去的账 | 昨天打车38.5元 |
| 查看最近账目 | 最近10笔、最近20笔 |
| 查看单笔 | 查看 #A83F2 |
| 按短 ID 修改 | 把 #A83F2 改成35元、修改 #A83F2 分类为交通 |
| 按短 ID 删除 / 恢复 | 删除 #A83F2、恢复 #A83F2 |
| 修改最近一笔 | 上一笔改成25元 |
| 撤销最近一笔 | 撤销刚才那笔 |
| 查询支出 | 这个月餐饮花了多少 |
| 查询收入 | 这个月收入多少 |
| 设置分类预算 | 每月餐饮预算1500元 |
| 查看或取消预算 | 查看预算、取消餐饮预算 |
| 生成消费报告 | 生成这个月的消费图表 |
| 查看简要帮助 | help、帮助、你会做什么 |
飞账支持一个用户维护多个相互隔离的个人账本。账本命令由程序在 AI 之前确定性解析:
| 命令 | 作用 |
|---|---|
账本列表(或 查看账本 / 我的账本) |
列出自己的账本,并标记当前与默认账本 |
创建账本 旅行(或 新建账本 旅行 / 创建新账本 旅行) |
创建个人账本;不会自动切换 |
切换账本 旅行(或 切换到账本 旅行) |
只切换当前飞书入口账本 |
当前账本 |
查看当前账本 |
设为默认账本 旅行(或 设置默认账本 旅行) |
设置新会话的回退账本;不会切换当前账本 |
重命名账本 旅行 旅游 |
重命名自己的账本 |
新建账本、切换到账本 等常用说法与命令表中的动词等价。若输入明显是想管理账本但语法未匹配(例如 新建账本 后没写名称),机器人会回复账本命令用法提示,而不是通用帮助。
Web Dashboard 侧栏也提供账本选择器和创建入口。每个 Dashboard Session 单独保存当前账本;新 Session 回退到用户默认账本。切换后,记账、查询、预算、统计、报告、CSV 导出和新建 Pending 都使用所选账本。已经创建的确认单始终写入创建时冻结的账本,即使之后切换了当前账本。
家庭空间只邀请已经使用过飞账、因而已有内部身份的用户。创建家庭时会自动创建一个家庭公共账本;成员的原有个人账本和账目不会复制、迁移或自动共享。家庭公共账本也不能设为个人默认账本,新飞书入口或新 Web Session 仍回退到默认个人账本。
| 命令 | 作用 |
|---|---|
创建家庭 小家 |
创建家庭及“小家公共账本” |
家庭列表 / 当前家庭 |
查看已加入家庭或当前家庭 |
家庭成员 |
查看当前家庭成员 |
邀请家庭成员 ou_xxx |
所有者按完整飞书 open_id 邀请已有用户 |
家庭邀请列表 |
查看自己的待处理邀请 |
接受家庭邀请 <邀请编号> |
接受并成为普通成员 |
拒绝家庭邀请 <邀请编号> |
拒绝邀请 |
切换家庭账本 小家 |
切换到家庭公共账本 |
退出家庭 小家 |
普通成员退出;所有者不能直接退出 |
概览 / 家庭概览 / 家庭开销 |
查看当前账本的本月概览(支出 / 收入 / 结余 / 预算 / 成员支出 / 未来周期) |
家庭命令在 AI 之前确定性解析;无法唯一解析的邀请目标会被拒绝。成员退出或被移除后立即失去公共账本访问权,历史账目保持原样。如果此前选择了该公共账本,服务端会清除失效选择并回退默认个人账本。Pending 始终冻结创建时的账本,确认时重新验权;成员权限已失效就拒绝执行,不会改写到当前个人账本。
家庭账本区分谁记账(创建者)与谁付钱(付款人)。一条消息可显式指定付款人,按成员别名 > 显示名 > open_id 顺序确定性解析:
B 买菜120— 创建者是 A,付款人是 B;回复会显示· 付款:B- 不指定时付款人默认是记账人自己;付款人无法唯一解析时会列出成员供选择
- 成员别名由户主在 Web「家庭成员」页设置(例如把 B 设为
老婆,之后老婆买菜120同样有效)
账户在家庭账本中可以是共享(默认,所有成员可见)或私人(仅本人可见)。私人账户的余额、账目、周期规则、待确认、预算消耗与成员统计对其他人完全不可见;个人账本不受影响。在 Web「账户」页可查看 共享 / 私人 徽标并切换可见性(仅户主或账户本人)。
一条消息可以记录一笔或多笔支出、收入,并可同时设置分类预算。建议同时说明每笔用途或来源、金额和必要的日期:
早餐12元昨天买日用品花了86.5房租支出2500元奖金到账2000元旅行午饭1300日元早餐12,午饭32,打车45,餐饮预算1000
复杂文字消息最多处理 30 笔账目和 10 项预算。机器人会逐项校验并统一回复成功、失败、收支合计和预算结果;某一项无效或保存失败时,其他有效项仍会保存。超出上限时只处理前 30 笔账目或前 10 项预算并明确提示。
同一条消息出现更正时以最后的明确说法为准,例如“午饭36,不对,是38”只记录 38;优惠券或满减只记录实际支付额。垫付、朋友还款、AA 收款和公司报销按真实资金流水分别记录,例如“聚餐426我先付,另外三人每人转我106.5”会记录一笔支出和三笔收入,不合并为净支出。
修改上一笔、撤销、查询和报告不能混在批量记账消息中,请分别发送,避免操作顺序或查询范围产生歧义。
机器人会判断收支方向并生成简短分类。金额必须大于 0,最多保留两位小数;单笔金额不能超过数据库字段允许的 14 位有效数字。新账目统一使用管理员配置的币种,默认是 CNY。
每笔账目都有一个当前用户账本内唯一的五位短 ID,成功回复会以 #XXXXX 展示(例如 #A83F2)。短 ID 用于在聊天中引用具体账目;内部仍使用 UUID 主键,普通用户无需关心。已撤销(软删除)记录的短 ID 不会重新分配给新账。你可以用短 ID 查看详情、修改、删除或恢复任意一笔(见下文);也可以继续用「上一笔」快捷方式操作最近一笔。
新增账目、修改上一笔和设置预算时,可以明确写出人民币、美元、欧元、日元、英镑、港币、韩元、澳元、加元或新加坡元。外币会按最新参考汇率约算成管理员配置的默认币种后保存,例如 上一笔改成1300日元。回复会同时展示换算结果和原始外币金额:
已修改 #A83F2:¥62.15(由 1300.00 JPY 约算)· 餐饮
汇率来自管理员配置的在线服务,并在当前进程内缓存。刷新失败时会沿用已有缓存;服务重启后首次获取汇率失败则不会修改账本。参考汇率不等同于银行卡、支付平台或现金兑换的实际成交价。汇总、预算进度和报告始终使用账本默认币种,不能临时切换展示币种。
回复示例:
已记录支出 ¥50.00 · 餐饮(晚饭)
可以使用明确日期或相对时间,例如 昨天午饭32元、上周五打车45元。机器人按照管理员配置的 IANA 时区解释“昨天”“这个月”等表达,默认时区为 Asia/Shanghai。
如果日期很重要,请写得明确。AI 无法可靠判断时会返回帮助或处理失败,不会以未经 Schema 校验的数据写入账本。
可以发送飞书语音消息或包含可转写音频的文件。机器人下载媒体、调用转写模型得到文字,再按与文本消息相同的流程处理。
背景噪声较大、金额含小数或日期容易混淆时,建议改用文字。飞账不会保存音频到账本,但媒体会在处理过程中发送给配置的 AI 服务。
可以发送小票照片、支付截图或含有清晰金额和消费信息的账单图片。机器人把图片交给支持视觉输入的模型,并尝试记录账目。
也可以在一条飞书富文本消息中同时发送说明文字和图片,例如写明“这笔按交通分类”后附上支付截图。正文中的明确补充或纠正会与图片一起交给视觉模型;群聊中的 @飞账 只用于触发机器人,不会作为记账说明。一条富文本最多包含 5 张不同图片,超过时整条消息不会处理,请拆分后重新发送。
单笔支付详情和小票会生成一笔待确认项,小票中的多个商品不会拆成多笔。支付宝、微信支付或银行流水列表可以按图片顺序识别并处理最多 30 笔独立交易。每一笔都会单独校验:有效项进入冻结预览,无效项跳过;确认后才保存有效项,并回复成功/失败数量、收支合计和逐笔结果。图片超过 30 笔时只处理前 30 笔并明确提示。
多张图片会作为同一次请求处理,可能是连续页面或有重叠的截图;机器人会尝试避免重复记录相同交易,所有图片合计仍最多处理 30 笔流水。任一图片下载或格式校验失败时,整条消息都不会入账。批量图片也可能因遮挡、分辨率或日期缺失而只成功一部分。
图片 / 语音 / 批量识别结果不会直接入账(v0.3.0 高风险确认)。识别完成后机器人会先发送一张确认卡片和确认单编号(#C-XXXXX),只有你确认后才会真正写入账本。
图片识别、语音识别、批量记账以及疑似重复的记录,会先进入待确认状态,不会直接写入账本。简单明确的单笔文字记账仍直接入账。
发送图片、语音或批量消息后,机器人返回一张预览卡片,包含总笔数、收支笔数、分方向总额、逐笔摘要(金额 / 分类 / 时间 / 备注)和异常项,以及确认单编号 #C-A83F2(C 前缀用于与账目短 ID #XXXXX 区分)。你可以:
| 你说 | 效果 |
|---|---|
确认 #C-A83F2 |
执行该确认单中的冻结记账,写入账本 |
取消 #C-A83F2 / 撤销 #C-A83F2 |
取消该确认单,不写入账本 |
查看待确认 / 确认列表 |
列出当前待确认的确认单 |
也可以直接点击预览卡片上的确认 / 取消按钮,效果与文本命令一致;文本命令始终可用,是卡片不可用时的兜底。
要点:
- 确认时使用冻结的解析结果,不会重新调用 AI,也不会重新识别图片或语音。
- 同一用户重复投递完全相同的图片时,活跃的待确认项只保留一个,不会重复识别或重复发卡。
- 确认单有有效期(默认 24 小时,管理员可配置);过期后无法确认或取消,需要重新发送原记账内容。
- 疑似重复:当一条记录与已有账目方向、金额、币种、时间接近且分类或来源相同、备注相似时,预览会提示「疑似与 #XXXXX 重复」。不直接拒绝——你确认后仍会写入。
- 已确认并入账的确认单重复确认不会重复记账;重复点击卡片按钮也只会执行一次。
- 确认单只属于当前用户,其他用户无法确认或取消你的确认单。
#C-XXXXX是确认单编号;普通#XXXXX才是账目编号。因此撤销 #C-A83F2取消待确认,撤销 #A83F2则撤销已有账目。
飞账只能修改当前用户最近一笔未撤销记录。可修改金额、收支方向、分类、备注或发生时间:
上一笔改成25元刚才那笔分类改成交通上一笔其实是收入上一笔是昨天发生的
未明确要求修改的字段保持不变。这里的“最近一笔”先按发生时间、再按创建时间排序,不一定是刚刚发送的消息;补记历史账目后尤其需要留意。成功后回复会包含该笔账的短 ID,例如 已修改 #A83F2:¥25.00 · 交通。
发送 撤销刚才那笔 或 删除上一笔,可以软删除当前用户最近一笔未撤销记录。撤销后的记录不再计入汇总、预算和报告。成功回复示例:已撤销 #A83F2:¥25.00 · 交通。
也可用短 ID 删除或恢复任意一笔,见下文。
可以按时间范围、收支方向和分类汇总:
今天花了多少钱这周交通支出多少这个月餐饮花了多少这个月收入多少上个月工资收入多少
没有明确说“收入”时,汇总默认查询支出。结果只包含当前用户、指定时间范围内且未撤销的记录,并按分类列出合计:
合计支出 ¥75.00
• 餐饮:¥45.00
• 交通:¥30.00
可以按最近条数、时间范围或分类查看逐笔账目(纯文本,默认 10 笔,单次最多 20 笔):
最近10笔最近20笔查看本月账单查看餐饮账单/查看本月餐饮支出查看 #A83F2(单笔详情;已删除记录会标明状态与删除时间)查看 #A83F2 之前的10笔(无状态 Keyset 分页;短 ID 使用上一页最后一笔)
列表默认不含已删除记录。单笔查看可以识别已删除状态。分页不要只发「下一页」——需要带上边界短 ID。
汇总查询(例如「这个月花了多少」「本月餐饮总共多少」)仍只返回分类合计,不进明细列表。
每笔账有用户内唯一的五位短 ID(如 #A83F2)。可以指定操作某一笔:
把 #A83F2 改成35元修改 #A83F2 分类为交通把 #A83F2 的备注改成和客户吃饭/清空 #A83F2 的备注(按机器人理解)删除 #A83F2恢复 #A83F2
仍可使用「上一笔」快捷方式:上一笔改成25元、撤销刚才那笔。
规则:
- 一次只允许操作一个短 ID;
- 删除是软删除,列表默认不再显示;可用短 ID 查看详情并恢复;
- 已删除的账目需先恢复再修改;
- 修改、删除、恢复会保留内部 revision 审计记录(用户无需操作 revision);
- 当前不支持批量修改。
可以把当前飞书用户本人的账目导出为 CSV Schema v1 文件,并通过飞书文件消息发回当前会话。
| 你说 | 效果 |
|---|---|
导出账单 / 导出最近90天账单 |
默认最近 90 天、CSV、不含已删除 |
导出本月账单 |
本月(应用时区自然月,左闭右开) |
导出今年的账单 |
当年范围 |
导出 2026-01-01 到 2026-06-30 的账单 |
自定义时间范围 |
导出全部账单 |
仅当明确说「全部 / 所有 / 完整历史」时导出全部历史 |
导出本月账单,包含已删除记录 |
在范围内纳入软删除记录 |
「查看本月账单」仍是列表;「本月花了多少钱」仍是汇总;只有带「导出」语义才会生成文件。
- 用户隔离:只导出当前会话用户的账目;文件中不含其他用户数据,也不含
open_id/ 数据库 UUID / 消息 ID。 - 默认不含已删除;需显式要求才包含;
deleted_at列在未删除行为空。 - 最多 5000 行;超出时不会截断发送,会提示缩小时间范围。
- 最大约 5MB;超限不上传,提示缩小范围。
- UTF-8 with BOM,逗号分隔,便于 Windows Excel 打开中文。
- CSV 公式注入防护:对用户可控文本(分类、备注等)在导出副本中做前缀转义,不改数据库原文。
- 排序:按发生时间、创建时间、内部 ID 升序,时间线稳定。
- 文件名形如
larkledger-export-v1-20260805-223000.csv(含 Schema v1),不含用户输入或 open_id。 - 只读:导出不修改账目、不写 revision。
- 投递:生成后上传到飞书并以文件消息回复;发送失败会由 Reply Worker 按指数退避自动重试直至
dead(v0.2.1)。文件上传成功后发送失败会复用已持久化的file_key,不重复上传;报告图片上传失败时降级为文字卡片。 - CSV 导出不等于 PostgreSQL 完整备份或灾备。
- JSON 导出当前不是正式能力;本版本只支持 CSV。
short_id, occurred_at, direction, amount, currency, category, note,
source_type, created_at, updated_at, deleted_at
short_id:展示形式#A83F2direction:稳定枚举expense/income
- 飞书文字转账使用明确账户名,例如:
招商银行 → 支付宝 1000。账户名不能唯一匹配时会要求确认,不会猜测账户。 - Client / Web API:
POST /transfers、GET /transfers/{transfer_id}、POST /transfers/{transfer_id}/reverse、GET /accounts/{account_id}/balance、GET /assets(分别位于/api/v1、/api/client/v1与/api/web/v1)。 - Transfer 是独立账务事实,不是 income/expense LedgerEntry,因此不进入收支、分类消费与预算统计。
- 资产/现金账户的正余额表示持有资产:
opening + income - expense + inbound transfer - outbound transfer。 - 负债账户的正余额表示当前负债,资金流方向取反:收入/转入降低负债,支出/转出增加负债。净资产始终为总资产减总负债。
- 余额不存储为可修改字段;归档账户仍可查询历史余额,已删除账目和已撤销转账不计入当前余额。
- 时间为带时区偏移的 ISO 8601;金额为十进制字符串
每位用户可为每个分类设置一个长期沿用的月预算:
每月餐饮预算1500元交通预算500,人情往来预算1000查看预算查看餐饮预算取消餐饮预算
一条消息可以设置最多 10 个分类预算,也可以在批量记账消息中同时设置;每项可使用不同币种。批量处理中有效项目会保存,无效项目不会影响其他项目,回复会逐项列出成功或失败原因。同一条消息重复出现相同分类时以最后一项为准。
重复设置同一分类会更新额度。查看预算会显示当前自然月的已用金额、预算金额和剩余额度;预算按管理员配置的时区统计,只计算分类名称完全相同、未撤销的支出。
新增或修改本月支出后:
- 首次达到 80% 时提醒一次。
- 首次达到或超过 100% 时提醒一次;如果一笔消费直接越过 100%,只显示超额提醒,同时记下两个阈值。
- 每个分类的每个阈值在同一自然月只提醒一次。
设置预算本身不会触发阈值提醒。撤销支出也不会重新开放本月已经发送过的提醒。
可以生成最长 366 天的消费报告:
生成这个月的消费图表分析最近30天消费生成上个月的消费报告
报告包含收入、支出、结余、支出分类、支出趋势和 2~3 条建议。92 天及以内按日展示趋势,更长范围按月展示。没有记录时只返回提示;图片渲染或上传失败时会降级为文字卡片。
用于生成建议的 AI 请求只包含币种、收支合计、分类合计、趋势和记录数量,不包含用户标识或逐笔备注。
把“想存到多少钱”变成可跟踪的目标:
我的目标/目标/查看目标—— 列出当前账本的目标与确定性进度。- 创建 / 编辑目标在 Web「目标」页完成(第一版聊天只做查看,不为命令引入复杂 DSL)。
进度来自真实账本:目标绑定 1 个或多个现金 / 资产账户,current_amount 始终等于绑定账户的实时余额之和,目标本身不保存、不手工维护余额。账户余额因记账 / 删账 / 恢复 / 转账变化时,目标进度自动重算。
- 支持目标金额、币种、目标日期与 forecast(按过去 90 天净储蓄速度估算剩余月数与可能缺口);历史不足或速度为负时不做预测。
- 目标可见性继承其绑定账户:只要目标引用任何私人账户,其他成员就完全看不到该目标(列表过滤 + 直接访问 404),不会通过目标显示泄漏私人余额。
- 目标不是虚拟账户 / 钱包 / 资金池:创建、修改、删除目标从不创建或修改账户、账目或转账。
洞察/财务洞察/本月洞察—— 自动发现值得注意的确定性事实。
第一版四类洞察(全部由确定性规则计算,AI 不参与计算):
- 支出变化:本月某分类支出 vs 近 3 个月平均,超过阈值时提醒。
- 预算风险:本月预算使用率明显快于时间进度(超出容差)时提醒“存在超支风险”,不做“一定会超支”的预测。
- 未来周期支出:未来 30 天内的 active 周期支出笔数与合计,不同币种分组展示、绝不直接相加。
- 目标进度:目标已达成 / 临近目标日期 / 按当前速度预计到目标日期还有缺口。
隐私与数据不足:私人账户数据不会进入任何洞察(包括分类合计、预算消耗等侧信道);新用户或历史不足时返回“没有需要特别关注的变化”,不制造噪音。AI 解释层(可选)只改写结构化洞察文本,AI 不可用时自动回退为确定性摘要,洞察功能不依赖 AI 可用性。
- 每位内部用户可拥有多个个人账本;授权以服务端验证的
actor_user_id + ledger_id为边界,客户端不能提交任意 UUID 覆盖当前账本。 - 同一个飞书
event_id会自动去重,避免重复投递造成重复操作。 - AI 只能生成预定义并通过严格 Schema 校验的业务动作,不能访问数据库或执行 SQL。
- 账本保存在部署者自己的 PostgreSQL 中;备份、保留和删除策略由部署管理员负责。
- 文字、图片和音频会发送到部署者配置的 AI 服务,请按该服务的隐私和数据保留政策使用。
- 处理失败时,机器人回复不会暴露内部异常或上游响应;请把错误编号提供给管理员,由管理员在服务日志中查询完整异常。
这不是普通用户的飞书命令。管理员在服务器终端处理 dead / failed 事件时,可先运行:
python -m lark_ledger.admin replay-event \
--event-id <event_id> \
--operator <operator> \
--reason "temporary upstream outage"默认只做 dry-run;输出状态、lease、Outbox / 来源账目计数和安全原因码,不输出消息 payload、
财务正文、operator 或 reason。确认预检为 eligible 后,追加 --execute 才会重新排队并写审计。
事件重放会重新执行业务,与只重发已持久化回复的“结果回放”严格不同。存在任何 Outbox 时 必须拒绝事件重放并改用结果回放;存在来源账目、有效 lease、无 payload、版本不支持、状态不 安全或历史原子性无法证明时也默认拒绝。模糊事件应先人工取证,不能用重放命令替代数据库备份。
- 把一张小票拆成多个商品
- 在批量记账消息中混入修改、撤销、查询、导出或报告动作
- 飞书对话中按关键词全文搜索账目(Dashboard 支持关键词、分类、时间与短 ID 筛选)
- 批量按短 ID 修改/删除
- JSON / Excel / PDF 导出(当前仅 CSV;JSON 不是正式能力)
- 用户自定义分类、个人币种或个人时区
- 按指定外币展示汇总或报告
- 共享账本、账户余额和单月例外预算
- 自定义预算提醒比例
- 导出任务队列、公网下载链接、管理员全库导出
- 企业多租户、组织树、复杂 RBAC 或共享账本
- 多级审批、多人共享确认(确认只属于当前用户)
- 普通用户的结果/事件重放命令(仅 Dashboard 管理员可使用受控运维入口)
- 视频、表情等非文字、非图片、非音频消息
v0.3.0 高风险确认与 v0.4.0 Web Dashboard 已实现;Dashboard 配置见环境与部署指南。
群聊中先确认已经 @飞账。仍无回复时,请管理员检查机器人是否在群内、应用版本是否已发布、消息事件与权限是否配置完成,以及服务和长连接是否在线。
稍后重试,或换成更明确的表达:时间 + 用途/来源 + 金额 + 收入或支出(需要时)。如果持续失败,请管理员检查应用日志、AI 服务和数据库,但不要在工单或聊天中粘贴真实凭据或完整财务消息。
立即发送 上一笔改成…… 修正,例如 上一笔改成25元,分类改成交通。图片和语音记账后尤其应核对确认回复。
检查时间范围、收支方向和分类是否正确。可以先扩大范围,例如把 今天餐饮花了多少 改成 这个月花了多少。
请管理员确认事件模式为 websocket、App ID 与 App Secret 正确、容器能出站访问飞书,并查看 GET /healthz 和应用日志。Verification Token 与 Encrypt Key 不参与长连接认证。