跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonSaaSWeChatPay

使用 Python 实现飞书记账机器人

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

王者发布于 2025/2/6更新于 2026/10/1993 浏览
使用 Python 实现飞书记账机器人

使用 Python 实现飞书记账机器人

本文介绍如何使用 Python 结合飞书开放平台 API 和 Flask 框架搭建自动化记账机器人。通过配置飞书应用获取凭证,利用消息事件接收指令,解析关键词后调用飞书表格接口写入数据,并支持主动回复反馈。

核心逻辑

  1. 触发机制:通过特定关键词触发机器人记账,例如 /fs 支出 微信 18 午饭。其中 /fs 为触发前缀,后续四项分别为类型、支付渠道、金额、备注。
  2. 数据处理:机器人识别到关键词后,调用内部函数解析内容,并通过飞书文档接口将结构化数据写入指定电子表格。
  3. 结果反馈:根据写入结果返回成功状态及文档链接,或失败状态及错误信息。

准备工作

创建飞书应用

  1. 登录飞书开放平台,点击 创建企业自建应用。
  2. 在 凭证与基础信息 中记录 App ID 和 App Secret。
  3. 添加应用能力:
    • 勾选 机器人 功能。
    • 搜索 电子表格,开通相关读写权限。
    • 搜索 消息,开通发送接收消息权限。
    • 搜索 获取用户 user ID,开通获取用户 ID 权限。
  4. 提交审核并发布新版本。

准备飞书表格

在飞书文档中创建一个 Excel 文件,获取其链接。链接格式如下:

https://xxxxxx.feishu.cn/sheets/PQV*****************Uh?sheet=k****Y
  • PQV...Uh 为 spreadsheetToken。
  • k****Y 为工作表名称(Sheet ID)。

对接飞书电子表格 API

本案例使用飞书追加数据接口。首先需要获取访问令牌(Access Token)。

获取 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()[]
     access_token

header = {
    : ,
    : 
}
"tenant_access_token"
return
"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"])

部署 Webhook 接收消息

需要一台云服务器或内网穿透环境来接收飞书推送的消息。

Flask 服务示例

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": f"Bearer {token}"}
    url = f"https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=user_id"
    post_data = {
        "receive_id": user_id,
        "msg_type": "text",
        "content": json.dumps({"text": text})
    }
    r = requests.post(url, headers=header, data=json.dumps(post_data))
    return r.json()

@app.route('/func', methods=['POST'])
def webhook_handler():
    data = request.json
    if not data:
        return "No Data", 400

    # 解析消息内容
    event = data.get("event", {})
    content = event.get("message", {}).get("content", "")
    sender_id = event.get("sender", {}).get("user_id", "")

    # 检查触发词
    if TRIGGER_KEYWORD in content:
        parts = content.split()
        if len(parts) >= 5:
            _, type_, channel, amount, remark = parts[0], parts[1], parts[2], parts[3], parts[4]
            result = write_to_sheet(amount, type_, channel, remark)
            if result.get("code") == 0:
                msg_text = f"记账成功!\n类型:{type_}\n金额:{amount}\n详情:{remark}"
            else:
                msg_text = f"记账失败:{result.get('msg')}"
        else:
            msg_text = "格式错误,请使用 /fs 类型 渠道 金额 备注"
        send_msg(sender_id, msg_text)

    return jsonify({"status": "ok"})

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=8003)

总结

通过上述步骤,我们实现了基于 Python 的飞书记账机器人。该方案利用了飞书开放的 API 能力,结合轻量级 Web 服务,实现了数据的自动采集与存储。开发者可根据实际需求扩展更多功能,如统计报表生成、多账户管理等。

目录

  1. 使用 Python 实现飞书记账机器人
  2. 核心逻辑
  3. 准备工作
  4. 创建飞书应用
  5. 准备飞书表格
  6. 对接飞书电子表格 API
  7. 获取 Access Token
  8. 写入数据测试
  9. 部署 Webhook 接收消息
  10. Flask 服务示例
  11. 完整集成代码
  12. 配置信息
  13. 总结

更多推荐文章

查看全部
  • 开源项目:支持本地部署的免费 AI 搜索聚合器
  • LangChain 简明讲义:从 0 到 1 构建 LLM 应用程序
  • Microsoft Visual C++ 6.0 下载与安装教程
  • 自然语言处理(NLP)高级应用与前沿技术实战
  • Win10/11 系统下 WSL2 + Ubuntu 20.04 全流程安装指南(支持安装至 D 盘)
  • FPGA 跨时钟域 CDC 处理的三种实用工程方案
  • node-llama-cpp 安装与配置:Windows、Linux 和 Mac 全平台教程
  • Java Lambda 和匿名内部类为何不能修改外部变量?final 与等效 final 解析
  • 华为 OD 机试:分割均衡字符串
  • ComfyUI 按需部署方案:低成本玩转 AI 绘画
  • 【论文笔记】A Survey on Data Synthesis and Augmentation for Large Language Models
  • 链表分割:以给定值 x 为基准划分链表
  • 使用 Jekyll 和 Github Pages 搭建静态博客
  • FastGPT 结合 MCP 协议构建工具增强型智能体实战
  • 国产 AI 生图与设计工具横评:6 款“平民版 Midjourney”怎么选
  • C++ 多线程同步实战:原子操作 atomic 详解
  • SpringBoot 端口 8080 被占用问题排查与解决
  • VS Code 远程开发时 GitHub Copilot 失效排查指南
  • 使用 Whisper-large-v3 搭建本地语音转文字服务
  • AI Agent 中的 Skills 概念与作用解析

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online