手把手教你,使用 Python 实现一个飞书/钉钉/微信机器人

哈喽,大家好,我是老表,学 Python 编程,找老表就对了。

今天给大分享一篇之前写的 Python实现飞书机器人教程。

预计7月初还会开第二期的Python微信/钉钉机器人训练营,感兴趣的朋友可以加我微信私聊(微信看下下图)。

a8ee45cbb08b201047b75afb50570a15.png

和老表一起学:

620fcbcea143d8d1e7736fd9c406fb4f.png

今天的主题是:使用Python联动飞书文档+机器人,实现一个专属的记账助手,这篇文章如果对你帮助极大,欢迎你分享给你的朋友、她、他,一起成长。

整合代码较多,源码已分享到 Github,项目地址可以点击下方公众号卡片,关注后回复:jsjz 获取,还可加入对应开源项目交流群,更好的学习交流。

f5b91fa642bd98f943741f9071738f49.png
目录

89d5e24a50abd12f036ce024fb724aef.png

核心逻辑

1、通过关键词触发机器人记账,比如/fs 支出 微信 18 午饭,其中/fs 为触发关键词,后面的四项分别是:类型、支付渠道、金额、备注。

2、机器人识别到关键词,调用飞书记账功能函数,在该函数中对收到内容进行解析,并调用飞书文档接口,将内容写入飞书文档。

3、机器人判断飞书文档写入结果,写入成功则返回记录成功+文档地址;写入失败则返回记录失败+错误信息。

微信效果:3f921361e9ce203da83ae85ae0c92ae6.png

飞书效果:4a31ac95eb88c6320a9b85bc7dbc74fb.png

实践出真知

首先你需要登录飞书APP创建一个企业,这个过程很简单,手机下载飞书APP即可,我这里就不贴图了。

创建一个飞书应用

前提:你已经有了一个飞书帐号,并创建了一个个人企业。

飞书开放平台地址:https://open.feishu.cn/app/

访问 飞书开放平台,点击创建企业自建应用,输入应用相关信息即可。

fd1bf809c69ef212c90ca56375d37cd4.png

创建成功后,在凭证与基础信息中可以看到应用的 App ID 和 App Secret,后面有用。

5549086ecdd568d8ef54b2c8906fd009.png

点击左侧的添加应用能力,点击添加机器人功能。

d56cf07ade7f880f56c0f2f1393c7472.png

没添加这个后面调用会出现如下错误:

b8f0adf7b5d48c97f17062b816bb4718.png

点击左侧的权限管理,搜索电子表格,将相关的两个权限勾选开通。

b38a01b59d7f04da91adcf6fbfe2c8e8.png

再搜索消息,开通发送接收消息权限,如下图:

9b6ec8b7cba805f3205dc9e5cdafa4fc.png

再搜索获取用户 user ID,开通获取用户 user_id 权限,如下图:

8ca7c913679f2e4ba65508e9a1587cb1.png

点击确定并前往创建应用版本

e285505d9181078d9d3c0a5540c6261f.png

在版本创建页面点击创建版本,然后根据提示输入版本号、更新说明、申请理由即可。

76db55bc2faeaac6af5aa3f9207c59e0.png

应用管理后台:https://exxxxxxxxz.feishu.cn/admin/appCenter/audit

exxxxxxxxz 改成自己的飞书主页域名前缀

访问上面应用管理后台地址,审核通过即可。

e3dfaa9e69b31bf3c78f4c2ba8104199.png

对接飞书Excel

首先在飞书文档里创建一个 Excel,获取到Excel 链接,格式如下:

https://xxxxxx.feishu.cn/sheets/PQV*****************Uh?sheet=k****Y

其中PQV*****************Uh是spreadsheetToken,k****Y表格名称,用于锁定具体工作表。

本案例我们使用飞书追加数据接口:https://open.feishu.cn/document/server-docs/docs/sheets-v3/data-operation/append-data

d27a2a72de34b779b5edf5aa4fd72906.png

其中请求参数中 Authorization 获取方法如下:

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"])  #输出来判断写入是否成功

结果:

5acaa2faf49dafb6d4dda00f445be644.png

记账功能对接到飞书机器人

开通消息事件,接收消息

如果你想对接到飞书,得有一个云服务器用来接收用户发给飞书机器人的消息,并返回处理后的结果给飞书用户。

或者本地部署,然后内网穿透方法也行(不是长久之计)。

开通消息事件之前,需要先在服务器部署一个简单 web 服务用于接收消息,如下图,没啥特别要求,用 flask 快速写一个简单的代码,如下,

4841df249bf4e9957d75a9f799267250.png
from flask import Flask, request, jsonify

app = Flask(__name__)


@app.route('/func', methods=['POST'])
def all_func():
    try:
        data = request.json  # 解析收到的 JSON 数据
        print(data)
        if data:
            # 原样返回数据
            return jsonify(data)
        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")

将上面代码写入服务器的 feishu.py 文件,然后运行python feishu.py 即可,

默认配置链接为:http://你的服务器公网IP:8003/func

然后在飞书管理后台,事件与回调页面配置验证接口是否OK,没问题点保存即可。

93916eeb628ebd21f1823ef8dbcc0e8a.png

然后点击添加事件,搜索接收消息,添加对应事件。

c22b3b1895ad99c08be091a22744a0e4.png

点击开启获取用户发给机器人的单聊消息获取用户在群组中@机器人的消息权限。

464975ccd85f0f38e0580e8d2ad4bc23.png

然后发布一个新版本。

这时我们从飞书发送消息给机器人,我们就可以在服务器获取到对应消息了。

飞书:9c82fc62b6a11234d83d7fe60df1a2ae.png

服务器:adc6f0412bb2388664e5cd3b5efcc121.png

飞书主动回复用户实现

在前面实践部分,我们已经开通过了接收消息权限,这里直接上请求代码。

'''
发送消息
doc-link https://open.feishu.cn/document/server-docs/im-v1/message/create
接口限制:1000 次/分钟、50 次/秒

receive_id_type值:
- 私聊 user_id 
- 群聊 chat_id

msg_type: 
doc-link https://open.feishu.cn/document/server-docs/im-v1/message-content-description/create_json

'''
def fs_send_msg(headers, post_data, receive_id_type):
    url= f"https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type={receive_id_type}"  
    r = requests.post(url, headers=headers, data=json.dumps(post_data))
    result = r.json()
    return result

测试请求:

# 这里 user_id 可以怎么获取?
# 在前面`消息事件`返回结果里面有,可以从里面获取
receive_id_type = "user_id"
receive_id = "xxxxx"
msg_type = "text"
content = "{\"text\": \"你好\"}"

post_data = {
      "receive_id": receive_id,
      "msg_type": msg_type,
      "content": content,
      # "uuid": "选填,每次调用前请更换,如a0d69e20-1dd1-458b-k525-dfeca4015204"
    }
result = fs_send_msg(headers, post_data, receive_id_type)

结果:c0f042d0e16f79e721515bafcca20d2a.png飞书:689bd4a6e8c08bd269cc1112361736f0.png

整合代码实现自动记账

逻辑思路:32e97571bdd16c14e16078bcbb1f5a3f.png

实现效果:5bbb8b5eb9e921fc251f01ff32bb1902.png

整合代码较多,源码已分享到 Github,项目地址可以点击下方公众号卡片,关注后回复:jsjz 获取,还可加入对应开源项目交流群,更好的学习交流。

e1334a4db2e60848cbd388ea06997d80.png
对接到微信

通过前面操作,我们已经完成了Python代码和飞书的对接,将该功能加入到机器人就比较简单了。

78e22e147456dbf13980c0ad0a4cd5c9.png

流程我已经在文章最开头分享了,大家可以根据需要去实践,至于如何开发机器人,大家可以github搜索下相关项目。后面也会将相关实现更新到开源项目中,欢迎关注支持。

预计7月初还会开第二期的Python微信/钉钉机器人训练营,感兴趣的朋友可以加我微信私聊(微信看下下图)。

e9a1fa64347f19c70b07be7c91380955.png

我是老表,学 Python 编程,找老表就对了。

老表写教程,就是要写的小白也能懂!有问题,快来评论区 up up up~ (打亢奋素式学习法)

最后推荐3本好书,留言区留言说说你读完本文有些什么自定义机器人想法,我会从留言区随机选一位赠书一本。

Python语言科研绘图与学术图表绘制从入门到精通

专业级Python科研绘图绘制指南:以“软件底层原理+详解代码逻辑+案例实际操作”为讲解思路,轻松掌握科技绘图全方位技巧,从变量到极坐标,从2D到3D,再到地理信息可视化,一应俱全。

AI短视频文案写作从入门到精通宣传文案

3大AI智能工具+4大主流短视频文案类型+短视频与AI有机结合,一分钟成为短视频文案写作高手。

芯片封测从入门到精通

凝聚作者18年芯片一线封装测试工作经验,从零开始全流程讲解芯片封装测试原理。

如果觉得文章还不错,记得点赞转发收藏。

长按下方二维码加我微信,回复关键词:监督老表 可进入Python学习交流群

扫码加我微信,回复:监督老表,
一起迎接AI时代
记得发送留言截图哦~
  • 11
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我会尽力回答你的问题。首先,你需要先在钉钉开发者平台上创建一个自定义机器人,并获取到机器人的webhook地址。然后,使用Python编写代码,调用钉钉机器人API发送图片。 以下是一个示例代码,可以帮助你实现钉钉机器人发送图片的功能: ```python import requests def send_dingtalk_image(image_url, access_token): """ 发送钉钉机器人图片消息 :param image_url: 图片的URL地址 :param access_token: 钉钉机器人的access_token """ url = "https://oapi.dingtalk.com/robot/send?access_token=" + access_token headers = {"Content-Type": "application/json;charset=utf-8"} data = { "msgtype": "image", "image": { "media_id": image_url } } response = requests.post(url=url, json=data, headers=headers) if response.status_code == 200: print("发送成功") else: print("发送失败") if __name__ == '__main__': # 图片的URL地址 image_url = "http://example.com/image.png" # 钉钉机器人的access_token access_token = "xxxxxxxxxxxxxx" # 调用发送钉钉机器人图片消息的函数 send_dingtalk_image(image_url, access_token) ``` 在调用`send_dingtalk_image`函数时,你需要传入图片的URL地址和钉钉机器人的access_token。其中,`image_url`参数为图片的URL地址,`access_token`参数为钉钉机器人的access_token。 注意,在发送图片消息时,需要将`msgtype`参数设置为`image`,并且在`image`字段中,将`media_id`设置为图片的URL地址。 希望这个示例代码可以帮助你实现钉钉机器人发送图片的功能。如果你还有其他问题,请随时提出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简说Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值