Python和飞书API实现飞书消息推送

请添加图片描述

当你需要在自己的应用中集成消息推送时,飞书(Lark)提供了一套非常强大的API。今天,让我们一起来看看如何使用Python和飞书API实现智能消息推送功能。不用担心复杂的过程,我会一步步带你解析这段代码,让你了解每个环节的作用。

1. 准备工作

首先,确保你已经有了飞书开发者账户,以及创建了一个应用,这样你才能获得必须的app_idapp_secret。接着,我们需要安装lark_oapi库,这样才能方便地调用飞书提供的API接口。

2. 功能点拆解

2.1 初始化客户端

client = lark.Client.builder() \
    .app_id(app_id) \
    .app_secret(app_secret) \
    .log_level(lark.LogLevel.ERROR) \
    .build()

在这里,我们初始化了一个lark客户端,配置了应用的app_idapp_secret,这是我们身份的凭证。同时,我们设置了日志级别,这样只有错误信息会被记录,让日志更清爽。

2.2 获取用户ID

request: BatchGetIdUserRequest = BatchGetIdUserRequest.builder() \
    .user_id_type("open_id") \
    .request_body(BatchGetIdUserRequestBody.builder()
        .mobiles([receive_phone_number])
        .include_resigned(False)
        .build()) \
    .build()
response: BatchGetIdUserResponse = client.contact.v3.user.batch_get_id(request)

在这段代码中,我们通过用户的手机号获取其在飞书上的open_id。这个open_id是推送消息的关键,它是每个用户的标识。

2.3 消息推送

request: CreateMessageRequest = CreateMessageRequest.builder() \
    .receive_id_type("open_id") \
    .request_body(CreateMessageRequestBody.builder()
        .receive_id(receive_open_id)
        .msg_type(msg_type)
        .content(msg_content)
        .build()) \
    .build()
response: CreateMessageResponse = client.im.v1.message.create(request)

接下来,我们构建了一个消息推送请求,指定了消息的类型和内容,然后调用client.im.v1.message.create方法进行消息推送。

3. 完整示例代码

import lark_oapi as lark
from lark_oapi.api.im.v1 import *
from lark_oapi.api.contact.v3 import *

# 1. 用户消息推送
# 2. 群组消息推送
# https://open.feishu.cn/document/server-docs/im-v1/message/create
# 3. 批量消息推送
# https://open.feishu.cn/document/server-docs/im-v1/batch_message/send-messages-in-batches

def app_push_msg(
        app_id: str,
        app_secret: str,
        receive_phone_number: str,
        msg_type: str,
        msg_content: str,
    ):
    """
    应用用户消息推送

    :param app_id: 应用ID (App ID)
    :param app_secret: App Secret (应用密钥)
    :param receive_phone_number: 消息接收方手机号列表 (仅支持单个用户推送)
    :param msg_type: 消息类型
    :param msg_content: 消息内容
    """
    # 创建client
    client = lark.Client.builder() \
        .app_id(app_id) \
        .app_secret(app_secret) \
        .log_level(lark.LogLevel.ERROR) \
        .build()
    # 通过手机号获取飞书用户open_id
    request: BatchGetIdUserRequest = BatchGetIdUserRequest.builder() \
        .user_id_type("open_id") \
        .request_body(BatchGetIdUserRequestBody.builder()
            .mobiles([receive_phone_number])
            .include_resigned(False)  # 是否获取已离职员工ID
            .build()) \
        .build()
    # 发起请求
    response: BatchGetIdUserResponse = client.contact.v3.user.batch_get_id(request)
    # 处理请求结果
    if response.success():
        result = lark.JSON.marshal(response.data, indent=4)
        lark.logger.info(result)
    else:
        result = f"client.contact.v3.user.batch_get_id failed, code: {response.code}, msg: {response.msg}, log_id: {response.get_log_id()}"
        lark.logger.error(result)
        return result
    # 解析open_id
    receive_open_id = response.data.user_list[0].user_id

    # 推送消息
    request: CreateMessageRequest = CreateMessageRequest.builder() \
        .receive_id_type("open_id") \
        .request_body(CreateMessageRequestBody.builder()
            .receive_id(receive_open_id)
            .msg_type(msg_type)
            .content(msg_content)
            .build()) \
        .build()
    # 发起请求
    response: CreateMessageResponse = client.im.v1.message.create(request)

    # 处理结果
    if response.success():
        result = lark.JSON.marshal(response.data, indent=4)
        lark.logger.info(result)
    else:
        result = f"client.im.v1.message.create failed, code: {response.code}, msg: {response.msg}, log_id: {response.get_log_id()}"
        lark.logger.error(result)
    
    return result


if __name__ == "__main__":
    app_push_msg(
        'cli_aXXXXXXXXXXXXXXX',
        'bkZXXXXXXXXXXXXXXXXXXXXXXXXXXXXEuvbF',
        "156XXXXXXXX",
        "interactive",
        """{\"type\": \"template\", \"data\": { \"template_id\": \"ctp_AAXXXXXXXXXX\", \"template_variable\": {
            \"alarm_title\": \"赚他一个亿\",
            \"alarm_error_content\": \"叮铃,微信到账1亿元\",
            \"alarm_error_datetime\": \"2023-1-30 15:27:00\",
            \"alarm_error_rpc\": \"RPA888\",
            \"alarm_error_rrb\": \"RPA888@nb\",
            \"im_chat_link\": \"https://applink.feishu.cn/client/chat/open?openId=ou_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\",
            \"pm_chat_link\": \"https://applink.feishu.cn/client/chat/open?openId=ou_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\"
            } } }
        """
    )

推送的卡片消息示例:
卡片示例

结语

通过上述步骤,我们已经实现了一个简单的消息推送功能。虽然这只是冰山一角,但足以让你开始探索飞书API的强大功能。

希望你在实现自己的智能消息推送时也能有所启发,不过不要忘了,实际操作中还需要考虑很多细节,比如安全性、错误处理和用户体验等。开发是一门技术,也是一门艺术,代码的每一次迭代都是一次创造。

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 基于Python实现的每日发送测试人员缺陷情况到飞书群的机器人源码+使用说明.zip # 环境要求 |环境|版本| |-|-| |python|3.7.4| |pip|22.0.4| 更新pip ```python pip install --upgrade pip ``` 创建虚拟目录 ```shell # python -m venv 虚拟环境名称,名称是随意起的 python -m venv tutorial-env ``` 激活虚拟环境 * 当激活虚拟环境时命令行上会有个虚拟环境名前缀 ## Unix或MacOS上激活虚拟环境 ```shell source tutorial-env/bin/activate ``` ## windows上激活虚拟环境 ```shell tutorial-env\Scripts\activate.bat ``` # 项目依赖安装 ```shell python3.7 -m pip install --upgrade pip pip install -r requirements.txt ``` * 如果引入其他新的依赖,可以执行冻结第三方库,就是将所有第三方库及版本号保存到requirements.txt文本文件中 ```shell pip freeze > requirements.txt ``` * 如果pip不起作用,可以从pypi上下载最新的源码包(https://pypi.python.org/pypi/)进行安装: ```shell python setup.py install ``` 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载,沟通交流,互相学习,共同进步!
对于 Python 飞书消息推送,你可以使用飞书开放平台提供的 API实现。下面是一个简单的示例: 首先,你需要在飞书开放平台创建一个应用并获取到相应的 App ID 和 App Secret。 然后,你可以使用 Python 的 requests 库来发送 HTTP 请求,调用飞书开放平台的 API。 ```python import requests def send_feishu_message(app_id, app_secret, user_id, message): # 获取 access_token token_url = f"https://open.feishu.cn/open-apis/auth/v3/app_access_token" token_payload = { "app_id": app_id, "app_secret": app_secret } token_response = requests.post(token_url, json=token_payload) access_token = token_response.json()["app_access_token"] # 发送消息 message_url = f"https://open.feishu.cn/open-apis/message/v4/send/" message_payload = { "msg_type": "text", "content": { "text": message }, "user_id": user_id } headers = { "Authorization": f"Bearer {access_token}" } message_response = requests.post(message_url, json=message_payload, headers=headers) return message_response.status_code == 200 # 使用示例 app_id = "your_app_id" app_secret = "your_app_secret" user_id = "user_id_to_receive_message" message = "Hello, World!" send_feishu_message(app_id, app_secret, user_id, message) ``` 在上述示例中,`send_feishu_message` 函数接受应用的 App ID、App Secret、接收消息的用户 ID 和要发送的消息作为参数。函数内部通过调用飞书开放平台的 API 获取 access_token,并使用 access_token 发送消息。 需要注意的是,该示例只是一个简单的推送文本消息的例子。如果你需要发送其他类型的消息,可以参考飞书开放平台的文档,调用相应的 API 进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值