使用 Python 实现飞书记账机器人
本文介绍了如何使用 Python 结合飞书开放平台 API 和 Flask 框架搭建自动化记账机器人。通过配置飞书应用获取凭证,利用消息事件接收指令,解析关键词后调用飞书表格接口写入数据,并支持主动回复反馈。文章涵盖了应用创建、权限配置、API 鉴权、Webhook 部署及完整代码整合,实现了从指令输入到数据落地的全流程自动化。

本文介绍了如何使用 Python 结合飞书开放平台 API 和 Flask 框架搭建自动化记账机器人。通过配置飞书应用获取凭证,利用消息事件接收指令,解析关键词后调用飞书表格接口写入数据,并支持主动回复反馈。文章涵盖了应用创建、权限配置、API 鉴权、Webhook 部署及完整代码整合,实现了从指令输入到数据落地的全流程自动化。

本文介绍如何使用 Python 结合飞书开放平台 API 和 Flask 框架搭建自动化记账机器人。通过配置飞书应用获取凭证,利用消息事件接收指令,解析关键词后调用飞书表格接口写入数据,并支持主动回复反馈。
/fs 支出 微信 18 午饭。其中 /fs 为触发前缀,后续四项分别为类型、支付渠道、金额、备注。创建企业自建应用。凭证与基础信息 中记录 App ID 和 App Secret。机器人 功能。电子表格,开通相关读写权限。消息,开通发送接收消息权限。获取用户 user ID,开通获取用户 ID 权限。在飞书文档中创建一个 Excel 文件,获取其链接。链接格式如下:
https://xxxxxx.feishu.cn/sheets/PQV*****************Uh?sheet=k****Y
PQV...Uh 为 spreadsheetToken。k****Y 为工作表名称(Sheet ID)。本案例使用飞书追加数据接口。首先需要获取访问令牌(Access Token)。
import requests
import json
def get_access_token():
url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/"
# 替换为你的 App ID 和 App Secret
post_data = {
"app_id": "cli_xxxxxxxx",
"app_secret": "8xxxxxxxxxxxxxxxxxxk"
}
r = requests.post(url, data=post_data)
access_token = r.json()["tenant_access_token"]
return access_token
header = {
"Content-Type": "application/json; charset=utf-8",
"Authorization": f"Bearer {get_access_token()}"
}
spreadsheetToken = "Pxxxxxxxxxxxxh"
sheetId = "lxxxxV"
data_raw = {
"valueRange": {
"range": f"{sheetId}!A1:E3",
"values": [
["2023/12/25", "收入", "微信", "100", "帐号 老表 max"],
["2023/12/25", "支出", "支付宝", "10", "买东西 老表 max"],
["2023/12/26", "支出", "支付宝", "19.9", "买东西 老表 max"]
]
}
}
url = f"https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{spreadsheetToken}/values_append"
r2 = requests.post(url, data=json.dumps(data_raw), headers=header)
print(r2.json()["msg"])
需要一台云服务器或内网穿透环境来接收飞书推送的消息。
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/func', methods=['POST'])
def all_func():
try:
data = request.json
print(data)
if data:
return jsonify({"status": "success", "message": "Received"})
else:
return "Missing data", 400
except Exception as e:
return str(e), 500
if __name__ == '__main__':
app.run(debug=True, port=8003, host="0.0.0.0")
在飞书管理后台的 事件与回调 页面配置验证接口 URL,并开启 接收消息 事件权限(包括私聊和群聊@机器人)。
将上述模块整合为一个完整的记账机器人脚本。
import requests
import json
import re
from flask import Flask, request, jsonify
# 配置信息
APP_ID = "cli_xxxxxxxx"
APP_SECRET = "8xxxxxxxxxxxxxxxxxxk"
SPREADSHEET_TOKEN = "Pxxxxxxxxxxxxh"
SHEET_ID = "lxxxxV"
TRIGGER_KEYWORD = "/fs"
app = Flask(__name__)
def get_access_token():
url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/"
post_data = {"app_id": APP_ID, "app_secret": APP_SECRET}
r = requests.post(url, data=post_data)
return r.json()["tenant_access_token"]
def write_to_sheet(amount, type_, channel, remark):
token = get_access_token()
header = {"Content-Type": "application/json; charset=utf-8", "Authorization": f"Bearer {token}"}
date = "2023-12-25" # 实际使用时可获取当前日期
data_raw = {
"valueRange": {
"range": f"{SHEET_ID}!A1:A1",
"values": [[date, type_, channel, amount, remark]]
}
}
url = f"https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{SPREADSHEET_TOKEN}/values_append"
r = requests.post(url, data=json.dumps(data_raw), headers=header)
return r.json()
def send_msg(user_id, text):
token = get_access_token()
header = {"Content-Type": "application/json; charset=utf-8", "Authorization": }
url =
post_data = {
: user_id,
: ,
: json.dumps({: text})
}
r = requests.post(url, headers=header, data=json.dumps(post_data))
r.json()
():
data = request.json
data:
,
event = data.get(, {})
content = event.get(, {}).get(, )
sender_id = event.get(, {}).get(, )
TRIGGER_KEYWORD content:
parts = content.split()
(parts) >= :
_, type_, channel, amount, remark = parts[], parts[], parts[], parts[], parts[]
result = write_to_sheet(amount, type_, channel, remark)
result.get() == :
msg_text =
:
msg_text =
:
msg_text =
send_msg(sender_id, msg_text)
jsonify({: })
__name__ == :
app.run(host=, port=)
通过上述步骤,我们实现了基于 Python 的飞书记账机器人。该方案利用了飞书开放的 API 能力,结合轻量级 Web 服务,实现了数据的自动采集与存储。开发者可根据实际需求扩展更多功能,如统计报表生成、多账户管理等。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online