山东大学软件学院创新实训——MarketClaw(三):飞书机器人接入DeepSeek,实现商品营销对话
一、引言
在MarketClaw项目中,我们需要提供一种基于飞书的轻量级对话服务,让用户无需切换复杂系统,在日常聊天场景中即可完成营销内容生成。本章的核心目标:实现用户通过飞书发送商品描述,机器人自动调用大模型生成小红书风格的营销文案并直接回复,打通“商品输入 → 文案生成 → 飞书回复”的最小闭环。
我们选择飞书开放平台作为接入渠道,因其提供了完善的企业自建应用能力和长连接机制,无需公网IP即可本地开发调试。大模型选择了DeepSeek API,主要因为它响应速度快、支持JSON结构化输出,方便我们直接生成带标题、正文、标签的文案。
二、方案设计
飞书提供两种事件接收方式:Webhook回调(需公网地址)和长连接模式(本地即可建立持久连接)。我们处于开发测试阶段,选择长连接模式,利用飞书官方SDK在本地与服务器建立WebSocket连接。
整体流程:
-
用户通过飞书单聊向机器人发送消息(以“商品:”开头)
-
飞书服务器通过长连接将事件推送到本地Python程序
-
程序解析消息内容,调用DeepSeek API生成小红书文案(JSON格式)
-
解析JSON并组装成飞书文本,调用飞书发送消息API回复用户
三、飞书应用配置
首先在飞书开放平台创建企业自建应用,命名为“MarketClaw”,并开启机器人能力。获取App ID和App Secret,后续代码中使用。
配置权限:添加im:message.p2p_msg:readonly(接收单聊消息)和im:message:send_as_bot(发送消息)。

配置事件:在“事件与回调”中选择“使用长连接接收事件”,添加im.message.receive_v1事件。最后发布应用版本,使配置生效。

四、本地环境搭建
创建项目文件夹MarketClaw-bot,使用虚拟环境并安装依赖:
python -m venv venv venv\Scripts\activate # Windows pip install lark-oapi requests python-dotenv

在根目录创建.env文件,存储密钥:(因涉及个人隐私,故使用“****”代替)
FEISHU_APP_ID=**** FEISHU_APP_SECRET=**** DEEPSEEK_API_KEY=****

图4:本地项目目录结构
五、核心代码实现
5.1 长连接启动与事件注册
长连接模式下,直接使用SDK的WsClient和事件分发器。关键代码:
from lark_oapi.ws import Client as WsClient
from lark_oapi import EventDispatcherHandler
from lark_oapi.api.im.v1 import P2ImMessageReceiveV1
def main():
handler = EventDispatcherHandler.builder("", "") \
.register_p2_im_message_receive_v1(handle_message) \
.build()
ws_client = WsClient(APP_ID, APP_SECRET, event_handler=handler)
ws_client.start()
5.2 解析用户消息
在事件处理函数中,从event.event.message提取发送者open_id和消息文本:
def handle_message(event: P2ImMessageReceiveV1):
open_id = event.event.sender.sender_id.open_id
content = json.loads(event.event.message.content)
user_text = content.get("text", "")
5.3 调用DeepSeek生成文案
设计system prompt要求返回JSON格式(标题、正文、标签),调用API后解析JSON并组装成回复文本:
def generate_copy(product_info):
prompt = """请根据商品信息生成小红书种草文案,返回JSON:
{"title":"...","body":"...","hashtags":["..."]}"""
resp = requests.post("https://api.deepseek.com/chat/completions",
headers={"Authorization": f"Bearer {DEEPSEEK_API_KEY}"},
json={"model":"deepseek-chat","messages":[{"role":"system","content":prompt},{"role":"user","content":product_info}]})
data = resp.json()["choices"][0]["message"]["content"]
# 解析JSON并格式化...
5.4 发送消息到飞书
发送消息采用HTTP API,注意receive_id_type必须放在URL参数中,否则会报错。
def send_reply(open_id, text):
token = get_tenant_access_token() # 通过app_id/app_secret换取
requests.post("https://open.feishu.cn/open-apis/im/v1/messages",
params={"receive_id_type": "open_id"},
headers={"Authorization": f"Bearer {token}"},
json={"receive_id":open_id, "msg_type":"text", "content":json.dumps({"text":text})})
5.5 防重复回复
测试中发现有时机器人会重复回复相同内容。原因是飞书在网络波动时可能重推事件(虽消息ID不同但内容相同)。我们增加基于(open_id, user_text, 时间窗口)的去重机制,5分钟内相同内容不再处理。
六、遇到的问题与解决
-
导入错误:
Message类从lark_oapi顶层导入失败 → 改为从lark_oapi.api.im.v1导入CreateMessageRequest。 -
获取open_id失败:误用
message.sender→ 正确路径为event.event.sender.sender_id.open_id。 -
发送消息字段验证失败:
receive_id_type is required→ 将该字段从请求体移到URL参数中。 -
重复回复:飞书重推导致 → 增加内容级去重。
-
JSON解析失败:DeepSeek偶尔返回包含注释或多余文本 → 用正则提取JSON对象。
七、成果展示
在手机飞书中搜索机器人“MarketClaw”,发送“商品:智能台灯,卖点:护眼无蓝光、亮度可调、定时关灯”,机器人约3秒后回复完整的小红书文案(含标题、正文、标签)。终端日志显示长连接正常、消息发送成功。

图5:终端输出,长连接已建立且消息发送成功

图6:飞书对话演示,用户输入商品信息,机器人返回小红书风格文案
八、总结
本章实现了飞书机器人对话生成营销文案的核心功能,完成了“商品输入 → 文案生成 → 回复”的闭环。后续我将开发热点信息采集模块,使文案能够结合时事热点,进一步提升营销效果。
完整代码已上传Gitee:https://gitee.com/cusir666/MarketClaw
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)