需构建7×24小时自动监控竞品库存的系统,通过bright data mcp接入、dify结构化工作流(含input、web scraper、python清洗、condition状态比对或sqlite差值计算)、企业微信告警及每15分钟cron调度实现精准预警。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要一个能7×24小时盯住竞品库存数字跳动的系统,而不是每天手动刷新页面、截图比对、再发消息提醒——这种重复劳动既容易漏掉关键变化,又无法在库存归零前10分钟发出预警。
准备亮数据MCP接入凭证
登录 Bright Data 官网,进入 MCP 控制台 → 创建新项目 → 复制 Project ID 和 API Key。这两个值必须严格匹配,【Project ID 写错会导致所有请求返回 404,且错误提示不明确】。Dify 中插件配置时需分别填入对应字段,不能互换。
用你自己的邮箱注册 Bright Data 账户(非团队子账号),否则后续无法开通 Walmart/eBay 的专用 scraper 权限——亚马逊库存监控虽可用基础版,但多平台扩展时会卡在这一步。
在Dify中创建结构化工作流
新建应用 → 选择“Workflow”类型 → 命名为“Amazon_Stock_Alert” → 点击“+ Add Node”添加首个节点。
第一步:拖入“Input”节点,字段名设为 asin_list,类型选 Text,勾选“Multiple values”,允许用户一次性输入多个ASIN,用英文逗号分隔。
第二步:添加“Bright Data Web Scraper”节点,选择“Structured Data Feeds”模式;在“Target URL”中填入 https://www.amazon.com/dp/{{asin_list}},注意双大括号包裹变量名,不可写成 {asin_list} 或 $asin_list。
第三步:配置 scraper 参数:勾选“Wait for selector”,填入 #availability;启用“Extract JSON-LD”,因为亚马逊部分页面将库存状态嵌在 script 标签内;超时时间设为 25 秒——低于 20 秒可能截断未加载完的 JS 数据,高于 30 秒会拖慢整条链路响应。
第四步:接一个“Python Code”节点,粘贴以下逻辑:
import json
results = []
for item in inputs['data']:
try:
stock_text = item.get('availability', {}).get('text', '')
if 'In stock' in stock_text or 'Only' in stock_text:
results.append({'asin': item.get('asin'), 'stock_status': 'available', 'raw': stock_text})
elif 'Out of stock' in stock_text:
results.append({'asin': item.get('asin'), 'stock_status': 'out_of_stock', 'raw': stock_text})
else:
results.append({'asin': item.get('asin'), 'stock_status': 'unknown', 'raw': stock_text})
except:
results.append({'asin': item.get('asin'), 'stock_status': 'error', 'raw': 'parse_failed'})
return {'parsed_results': results}
这一步必须做,因为亮数据返回的是原始 HTML 片段或 JSON-LD,不清洗就进数据库会污染后续告警判断逻辑。
设置库存变化触发条件
方法一:用“Condition”节点做状态比对
连接上一步 Python 节点的输出 → 添加“Condition”节点 → 设置判断字段为 parsed_results[*].stock_status → 条件选 “is changed from previous run” → 启用“State memory”,保存历史状态到 Dify 内置键值存储。这个开关不打开,每次都会当成全新状态,永远触发不了“变化”条件。
方法二:直接对接 SQLite 存储做差值计算
在 Python 节点后加“SQL Query”节点,执行 INSERT OR REPLACE INTO stock_log (asin, status, timestamp) VALUES (?, ?, ?),再执行 SELECT * FROM stock_log WHERE asin = ? AND status != (SELECT status FROM stock_log WHERE asin = ? ORDER BY timestamp DESC LIMIT 1 OFFSET 1)。此方式更可靠,但要求你已在 Dify 中配置好 SQLite 连接字符串。
配置企业微信实时告警
添加“HTTP Request”节点,Method 选 POST,URL 填你企业微信机器人 webhook 地址;Body 类型选 JSON;在 Body 中写:
{"msgtype": "text", "text": {"content": "⚠️ 库存变动:{{changed_asins}} 从 {{old_status}} 变为 {{new_status}},时间 {{now}}"}}
其中 {{changed_asins}} 需提前在 Condition 或 SQL 节点中提取并注入上下文变量,Dify 不自动传递嵌套数组里的单个字段值——漏掉这步,消息里只会显示空括号。
最后,在工作流右上角点击“Schedule”,设置 Cron 表达式为 */15 * * * *,即每15分钟运行一次。不要用“Every 15 minutes”,该选项在跨月时存在时区偏移 bug,曾导致某次凌晨3:59的库存归零未被捕捉。










