价格战的本质是信息差。当你的竞品已经降价两小时,你的定价策略还停留在昨天。本文手把手教你用 OpenClaw AI
亚马逊竞品调价监控系统架构:OpenClaw AI Agent + Pangolinfo Scrape API + 飞书Slack告警流程图

价格战,你永远比对手慢几步

做亚马逊的人都知道一件事:价格是影响Buybox和转化率的核心杠杆。但有多少运营团队真正做到了对竞品价格的实时感知?大多数人的方式是——每天早上打开后台,翻翻竞品的Offer页,或者登录某个卖家工具看一眼昨天的价格快照。这意味着,当你的主要竞品在昨晚11点悄悄把价格从$89调到了$74的时候,你要等到今天早上才知道。而在这段时间里,你的广告一直在高价位跑着,转化率跌了你却还不明白为什么。

亚马逊竞品调价监控的本质是时效性问题。竞品的每一次降价,都是另一个卖家的运营动作的结果:可能是库存积压要清货,可能是敏感到了你的广告在吃流量准备用价格截杀,可能是他们要冲某一天的BSR榜单。任何一种情况,你都需要在第一时间得知,才能做出及时的应对——跟价、维持、还是主动发起应对策略。

问题不是”要不要监控”,而是”如何监控才能快到有意义”。日报级的工具告诉你昨天发生了什么,周报告诉你上周的趋势——这些都有价值,但对于价格博弈这种以小时计的动态场景来说,它们永远是马后炮。你需要的是一套能在竞品调价后10分钟内就把消息推到你眼前的系统。

这正是今天这篇文章的目的:用 OpenClaw AI Agent 与 Pangolinfo Scrape API,从零搭建一套可以在生产环境真实运行的亚马逊竞品调价监控脚本,配置完成后全程自动运行,竞品价格有变动就把告警推到你的飞书或Slack工作群。

传统价格监控方案的三大硬伤

在介绍具体实现之前,有必要理解为什么现有方案不够用,这样才能明白这套方案解决的是什么核心问题。

第一个硬伤是数据频率。市面上大多数卖家工具的价格监控模块以日级为主,部分工具能做到4-6小时级。对于竞品调价这种场景,4小时已经意味着对方能完成一轮Flash Sale并恢复原价,而你的告警才刚刚触发。这不是告警,是事后记录。真正有价值的竞品价格预警窗口是10-30分钟,超过这个时间告警就失去了即时响应的意义。

第二个硬伤是通知渠道。邮件告警在2026年基本等同于没告警,大多数运营人员查邮件的频率已经低于每小时一次。真正能穿透注意力的通知渠道是工作即时通讯工具——飞书或Slack的消息卡片,会以推送的形式出现在你手机上,像工作消息一样无法忽视。而现有工具的告警大多数还停留在邮件+APP推送的组合。

第三个硬伤是数据深度与分析能力的分离。工具发给你的告警是”B0D6BFMNN5的价格从$89变成了$74″,但它不会告诉你:这是不是Amazon直营在动价?这个价格是否低于你的成本线?历史上这个竞品有没有类似的调价规律?把这些分析留给运营人员自己做,等于把告警的价值折半。引入AI Agent层,就是为了让告警不只是事件通知,而是带有初步分析和建议的决策辅助。

系统架构:三层模型,各司其职

亚马逊竞品调价监控系统架构:OpenClaw AI Agent + Pangolinfo Scrape API + 飞书Slack告警流程图
从数据采集到告警推送的完整链路:Pangolinfo API 每10分钟抓取竞品价格 → OpenClaw Agent 分析变化 → 触发飞书/Slack 实时通知

整套亚马逊竞品调价监控系统由三层构成,每一层职责清晰,互不耦合。

第一层:数据采集层(Pangolinfo Scrape API)。这是整个系统的数据基础。Pangolinfo Scrape API 负责每隔10分钟对目标ASIN的商品页面发起采集请求,返回结构化的商品数据,包括当前Buybox价格、所有Offer列表中各卖家的报价、库存状态、到货时间预估等字段。这一层解决了”数据从哪里来”的问题,同时屏蔽了直接爬取亚马逊页面所涉及的反爬对抗、IP轮换、代理管理等技术复杂性。

第二层:AI分析层(OpenClaw Agent)。OpenClaw 是一个轻量的 AI Agent 框架,在这套方案里承担的是”看数据、做分析、做决策”的角色。当新一轮价格数据到来时,OpenClaw Agent 会将本次数据与上一次快照进行比对,识别价格变化、计算降幅百分比、判断是否触及设定的告警阈值,并根据历史数据生成一段简短的背景分析(例如:”该竞品上次降价发生在2周前,当时持续了约48小时后恢复原价”)。这一层把原始数据变成有语境的信息。

第三层:通知层(飞书 + Slack Webhook)。当分析层判定告警需要触发时,通知层负责把格式化的告警消息卡片推送到指定的飞书群或Slack频道。卡片包含:触发告警的ASIN、竞品卖家、新旧价格对比、降幅百分比、AI生成的简短分析,以及跳转查看详细数据的按钮。这一层解决”告警怎么到人眼前”的问题。

三层之间通过 Python 脚本串联,整体运行在定时任务(Cron / APScheduler)框架下,每10分钟触发一次完整的采集→分析→告警周期。

完整代码实现:手把手搭建动态定价追踪系统

环境准备

开始之前,确认以下依赖已就绪:

  • Python 3.9+
  • Pangolinfo API Key(在 Pangolinfo 控制台申请)
  • OpenClaw 安装(pip install openclaw
  • 飞书自定义机器人Webhook URL 或 Slack Webhook URL
pip install openclaw requests apscheduler python-dotenv

第一步:Pangolinfo API 价格采集模块


# price_collector.py
import requests
import json
from datetime import datetime
from typing import Optional

PANGOLINFO_API_URL = "https://api.pangolinfo.com/v1/amazon/product"

def fetch_asin_prices(asin: str, api_key: str, marketplace: str = "US") -> Optional[dict]:
    """
    通过 Pangolinfo Scrape API 采集指定 ASIN 的完整价格数据
    
    Args:
        asin: 目标 ASIN 编号
        api_key: Pangolinfo API Key
        marketplace: 站点(默认美国站)
    
    Returns:
        包含 Buybox 价格和所有 Offer 价格的结构化数据
    """
    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }
    
    payload = {
        "asin": asin,
        "marketplace": marketplace,
        "parse": True,          # 返回结构化 JSON,非原始 HTML
        "include_offers": True, # 获取所有卖家报价
        "include_buybox": True  # 获取 Buybox 归属和价格
    }
    
    try:
        resp = requests.post(PANGOLINFO_API_URL, json=payload, headers=headers, timeout=30)
        resp.raise_for_status()
        data = resp.json()
        
        # 提取价格监控所需的核心字段
        return {
            "asin": asin,
            "collected_at": datetime.utcnow().isoformat() + "Z",
            "marketplace": marketplace,
            "buybox_price": data.get("buybox", {}).get("price"),
            "buybox_seller": data.get("buybox", {}).get("seller_name"),
            "buybox_seller_id": data.get("buybox", {}).get("seller_id"),
            "all_offers": [
                {
                    "seller_id": o.get("seller_id"),
                    "seller_name": o.get("seller_name"),
                    "price": o.get("price"),
                    "is_fba": o.get("is_fba"),
                    "seller_rating": o.get("seller_rating")
                }
                for o in data.get("offers", [])
            ],
            "title": data.get("title", ""),
            "in_stock": data.get("availability") == "In Stock"
        }
    
    except requests.RequestException as e:
        print(f"[ERROR] 采集 ASIN {asin} 失败: {e}")
        return None


def batch_collect(asin_list: list, api_key: str, marketplace: str = "US") -> list:
    """批量采集多个 ASIN 的当前价格快照"""
    results = []
    for asin in asin_list:
        result = fetch_asin_prices(asin, api_key, marketplace)
        if result:
            results.append(result)
            print(f"[INFO] {asin}: Buybox 价格 ${result['buybox_price']} | 卖家: {result['buybox_seller']}")
    return results
        

第二步:OpenClaw Agent 价格变化分析模块


# price_analyzer.py
import json
from openclaw import Agent, Task
from typing import Optional

class PriceChangeAnalyzer:
    """
    基于 OpenClaw Agent 的价格变化分析器
    负责比对新旧价格快照,判断是否触发告警,并生成 AI 分析摘要
    """
    
    def __init__(self, alert_threshold_pct: float = 5.0, my_seller_id: str = ""):
        """
        Args:
            alert_threshold_pct: 触发告警的降价百分比阈值(默认5%)
            my_seller_id: 自己的卖家账号ID(用于排除自身价格变化)
        """
        self.threshold = alert_threshold_pct
        self.my_seller_id = my_seller_id
        self.price_history = {}  # 存储每个 ASIN 的历史价格
        
        # 初始化 OpenClaw Agent(使用配置的 LLM 进行分析)
        self.agent = Agent(
            name="PriceMonitorAgent",
            role="亚马逊竞品价格分析专家",
            goal="分析竞品价格变化,识别潜在威胁并给出应对建议",
            backstory="你是一位资深的亚马逊运营专家,深谙价格战策略和竞品分析方法"
        )
    
    def analyze(self, current_snapshot: dict) -> Optional[dict]:
        """
        分析当前快照与历史数据的差异,生成告警事件(如有)
        
        Returns:
            告警事件字典,如无异常则返回 None
        """
        asin = current_snapshot["asin"]
        current_price = current_snapshot.get("buybox_price")
        
        if current_price is None:
            return None
        
        # 首次采集,建立基准值
        if asin not in self.price_history:
            self.price_history[asin] = {
                "price": current_price,
                "seller": current_snapshot.get("buybox_seller"),
                "collected_at": current_snapshot["collected_at"],
                "change_log": []
            }
            print(f"[INIT] {asin}: 基准价格设定为 ${current_price}")
            return None
        
        previous = self.price_history[asin]
        prev_price = previous["price"]
        
        # 计算价格变化
        if prev_price and prev_price > 0:
            change_pct = (current_price - prev_price) / prev_price * 100
        else:
            return None
        
        # 只在竞品降价超过阈值时触发
        is_competitor = current_snapshot.get("buybox_seller_id") != self.my_seller_id
        if change_pct <= -self.threshold and is_competitor:
            
            # 调用 OpenClaw Agent 生成分析摘要
            analysis_task = Task(
                description=f"""
                分析以下亚马逊竞品调价事件,给出简短的背景分析和应对建议(100字以内):
                
                ASIN: {asin}
                商品名称: {current_snapshot.get('title', '未知')[:50]}
                竞品卖家: {current_snapshot.get('buybox_seller', '未知')}
                原价: ${prev_price:.2f}
                现价: ${current_price:.2f}
                降幅: {abs(change_pct):.1f}%
                历史调价记录: {len(previous.get('change_log', []))} 次
                """,
                expected_output="一段简洁的中文分析,包含威胁等级评估和建议应对动作"
            )
            
            ai_analysis = self.agent.execute_task(analysis_task)
            
            # 更新历史记录
            self.price_history[asin]["change_log"].append({
                "from": prev_price,
                "to": current_price,
                "change_pct": change_pct,
                "timestamp": current_snapshot["collected_at"]
            })
            self.price_history[asin]["price"] = current_price
            
            return {
                "type": "PRICE_DROP",
                "priority": "HIGH" if abs(change_pct) >= 10 else "MEDIUM",
                "asin": asin,
                "title": current_snapshot.get("title", "")[:60],
                "competitor_seller": current_snapshot.get("buybox_seller"),
                "price_from": prev_price,
                "price_to": current_price,
                "change_pct": change_pct,
                "ai_analysis": ai_analysis,
                "detected_at": current_snapshot["collected_at"]
            }
        
        # 价格回升也记录,但不告警
        self.price_history[asin]["price"] = current_price
        return None
        

第三步:飞书与Slack双渠道告警配置

亚马逊竞品调价监控告警通知 - 飞书消息卡片显示ASIN、竞品价格、降幅和竞品卖家信息
当竞品降价幅度超过设定阈值时,系统自动推送包含ASIN、新旧价格对比、降幅百分比的告警卡片到飞书或Slack工作群

# alert_dispatcher.py
import requests
import json

class AlertDispatcher:
    """负责将告警事件格式化并推送到飞书和/或Slack"""
    
    def __init__(self, feishu_webhook: str = "", slack_webhook: str = ""):
        self.feishu_webhook = feishu_webhook
        self.slack_webhook = slack_webhook
    
    def send_feishu_alert(self, event: dict) -> bool:
        """推送飞书消息卡片"""
        if not self.feishu_webhook:
            return False
        
        priority_color = "red" if event["priority"] == "HIGH" else "orange"
        change_pct = event["change_pct"]
        
        card = {
            "msg_type": "interactive",
            "card": {
                "header": {
                    "title": {
                        "content": f"🚨 竞品降价预警 | {event['asin']}",
                        "tag": "plain_text"
                    },
                    "template": priority_color
                },
                "elements": [
                    {
                        "tag": "div",
                        "text": {
                            "content": (
                                f"**商品**:{event['title']}\n"
                                f"**竞品卖家**:{event['competitor_seller']}\n"
                                f"**价格变化**:${event['price_from']:.2f} → **${event['price_to']:.2f}**\n"
                                f"**降幅**:{abs(change_pct):.1f}%\n"
                                f"**AI分析**:{event['ai_analysis']}"
                            ),
                            "tag": "larkmd"
                        }
                    },
                    {
                        "tag": "action",
                        "actions": [
                            {
                                "tag": "button",
                                "text": {"content": "查看 ASIN 价格走势", "tag": "plain_text"},
                                "type": "primary",
                                "url": f"https://tool.pangolinfo.com/tracking/{event['asin']}"
                            },
                            {
                                "tag": "button",
                                "text": {"content": "查看竞品 Listing", "tag": "plain_text"},
                                "type": "default",
                                "url": f"https://www.amazon.com/dp/{event['asin']}"
                            }
                        ]
                    }
                ]
            }
        }
        
        resp = requests.post(self.feishu_webhook, json=card, timeout=10)
        return resp.status_code == 200
    
    def send_slack_alert(self, event: dict) -> bool:
        """推送 Slack 消息(Block Kit格式)"""
        if not self.slack_webhook:
            return False
        
        change_pct = event["change_pct"]
        emoji = "🔴" if event["priority"] == "HIGH" else "🟡"
        
        payload = {
            "blocks": [
                {
                    "type": "header",
                    "text": {
                        "type": "plain_text",
                        "text": f"{emoji} Amazon Competitor Price Drop Alert"
                    }
                },
                {
                    "type": "section",
                    "fields": [
                        {"type": "mrkdwn", "text": f"*ASIN:*\n{event['asin']}"},
                        {"type": "mrkdwn", "text": f"*Competitor:*\n{event['competitor_seller']}"},
                        {"type": "mrkdwn", "text": f"*Price Change:*\n${event['price_from']:.2f} → ${event['price_to']:.2f}"},
                        {"type": "mrkdwn", "text": f"*Drop:*\n{abs(change_pct):.1f}%"}
                    ]
                },
                {
                    "type": "section",
                    "text": {"type": "mrkdwn", "text": f"*AI Analysis:*\n{event['ai_analysis']}"}
                },
                {
                    "type": "actions",
                    "elements": [
                        {
                            "type": "button",
                            "text": {"type": "plain_text", "text": "View Price History"},
                            "url": f"https://tool.pangolinfo.com/tracking/{event['asin']}"
                        }
                    ]
                }
            ]
        }
        
        resp = requests.post(self.slack_webhook, json=payload, timeout=10)
        return resp.status_code == 200
    
    def dispatch(self, event: dict):
        """同时推送到飞书和Slack"""
        feishu_ok = self.send_feishu_alert(event)
        slack_ok = self.send_slack_alert(event)
        
        print(f"[ALERT] {event['asin']} 降价 {abs(event['change_pct']):.1f}% | "
              f"飞书: {'✅' if feishu_ok else '❌'} | "
              f"Slack: {'✅' if slack_ok else '❌'}")
        

第四步:定时任务主程序(10分钟轮询)


# main.py
import os
from dotenv import load_dotenv
from apscheduler.schedulers.blocking import BlockingScheduler
from price_collector import batch_collect
from price_analyzer import PriceChangeAnalyzer
from alert_dispatcher import AlertDispatcher

load_dotenv()

# ========== 配置区域 ==========
PANGOLINFO_API_KEY = os.getenv("PANGOLINFO_API_KEY")
MY_SELLER_ID = os.getenv("MY_SELLER_ID", "")

# 要监控的竞品 ASIN 列表
MONITOR_ASINS = [
    "B0D6BFMNN5",
    "B08K2S9X7Q",
    "B09XYZ1234",
    # 添加更多目标 ASIN...
]

# 告警配置
ALERT_THRESHOLD_PCT = 5.0   # 降价超过5%触发告警
FEISHU_WEBHOOK = os.getenv("FEISHU_WEBHOOK_URL", "")
SLACK_WEBHOOK = os.getenv("SLACK_WEBHOOK_URL", "")
POLL_INTERVAL_MINUTES = 10  # 每10分钟采集一次
# ==============================

# 初始化各模块
analyzer = PriceChangeAnalyzer(
    alert_threshold_pct=ALERT_THRESHOLD_PCT,
    my_seller_id=MY_SELLER_ID
)
dispatcher = AlertDispatcher(
    feishu_webhook=FEISHU_WEBHOOK,
    slack_webhook=SLACK_WEBHOOK
)

def run_monitoring_cycle():
    """执行一轮完整的采集→分析→告警循环"""
    print(f"\n{'='*50}")
    print(f"[CYCLE] 开始采集 {len(MONITOR_ASINS)} 个 ASIN...")
    
    # 采集当前价格快照
    snapshots = batch_collect(MONITOR_ASINS, PANGOLINFO_API_KEY)
    
    # 逐个分析,触发告警
    alert_count = 0
    for snapshot in snapshots:
        alert_event = analyzer.analyze(snapshot)
        if alert_event:
            dispatcher.dispatch(alert_event)
            alert_count += 1
    
    print(f"[CYCLE] 完成。本轮采集 {len(snapshots)} 个,"
          f"触发告警 {alert_count} 个。")

if __name__ == "__main__":
    print("🚀 亚马逊竞品调价监控系统启动")
    print(f"监控 ASIN 数量: {len(MONITOR_ASINS)}")
    print(f"采集间隔: 每 {POLL_INTERVAL_MINUTES} 分钟")
    print(f"告警阈值: 降价超过 {ALERT_THRESHOLD_PCT}%\n")
    
    # 启动时先执行一次
    run_monitoring_cycle()
    
    # 设置定时任务
    scheduler = BlockingScheduler()
    scheduler.add_job(
        run_monitoring_cycle,
        'interval',
        minutes=POLL_INTERVAL_MINUTES,
        id='price_monitor'
    )
    
    try:
        scheduler.start()
    except KeyboardInterrupt:
        print("\n监控系统已停止。")
        

在项目根目录创建 .env 文件,填入你的凭证:


PANGOLINFO_API_KEY=your_api_key_here
MY_SELLER_ID=your_amazon_seller_id
FEISHU_WEBHOOK_URL=https://open.feishu.cn/open-apis/bot/v2/hook/your_token
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/your/path
        
亚马逊竞品调价监控Python脚本终端运行截图 - 显示价格采集、变化检测和告警触发日志
脚本每10分钟自动执行一次价格采集,检测到竞品降价后立即记录日志并触发飞书通知,整个响应链路不超过30秒

生产部署:让动态定价追踪系统全天候运行

本地测试通过之后,建议采用以下方式将脚本部署到生产环境,确保7×24小时不间断运行。

方案一:服务器 + Systemd(推荐自建服务器)。在 Linux 服务器上创建 systemd service 文件,设置 Restart=always,脚本会在崩溃时自动重启,并在服务器重启时自动恢复运行。配合 journald 日志,所有告警和采集记录都有完整的审计轨迹。

方案二:GitHub Actions(无服务器,零成本)。利用 GitHub Actions 的 schedule 触发器,每10分钟触发一次 workflow,执行价格采集脚本。优点是完全免费且无需维护服务器;缺点是 GitHub Actions 的最小调度间隔是5分钟,且可能有小幅延迟。

方案三:云函数(AWS Lambda / 阿里云函数计算)。将采集逻辑打包为无服务器函数,通过 EventBridge 或云平台的定时触发器每10分钟调用一次。适合已有云基础设施的团队,几乎零运维成本,按调用次数计费,对于监控10-20个ASIN的场景月费用极低。

无论选择哪种部署方式,建议配套以下监控措施:设置脚本连续失败3次后发送紧急通知(防止采集静默失败);定期将价格历史数据导出至数据库或电子表格,为后续趋势分析提供数据积累;在旺季(Q4、会员日、黑五)期间将采集频率提高到5分钟一次,确保最关键时期不遗漏任何价格动态。

如果你的团队不想维护自建脚本,AMZ Data Tracker 提供了同等能力的无代码配置界面,同样支持飞书告警和小时级数据采集,适合没有专职工程资源的运营团队。

把亚马逊竞品调价监控变成你的定价护城河

价格战的胜负,最终取决于谁掌握的信息更实时。当你能在竞品降价10分钟内就收到告警,你的决策窗口比对方慢半拍降幅就小了一个量级。亚马逊竞品调价监控不是一个”好有更好”的功能,而是在高竞争类目中保持价格主动权的基础设施。

这套 OpenClaw + Pangolinfo API 的方案给你的是:可以真正跑起来的代码、可以订制的告警逻辑、以及 AI 辅助分析带来的决策加速。代码是开放的、可扩展的,你可以在它的基础上加入更多维度的数据(评论变化、BSR波动、广告位变化),构建一套真正属于你的实时竞品智能系统。

开始行动:把你最核心的3-5个竞品ASIN加进监控列表,跑一周,看看你会发现多少曾经被你错过的竞品价格动作。那些被你错过的信号,正是你的竞对手一直在利用的优势。

📌 没有工程团队?直接试用 AMZ Data Tracker,零代码配置竞品价格监控和飞书告警,10分钟上线。需要 API 直接集成?访问 Pangolinfo Scrape API 获取你的 API Key,开始搭建属于你自己的调价预警系统。

相关资源:

Pangolinfo API 支持文档

Scrape API

AMZ Data Tracker

Pangolinfo控制台

解决方案

为电商场景打造的高可用数据采集 API,自动规避 IP 封禁、验证码拦截、代理故障等爬虫难题,无需复杂配置即可快速获取精准、稳定的电商数据。

AMZ Data Tracker 是亚马逊卖家专属的全方位运营工具,集关键词调研、竞品销量追踪、Listing 优化、恶意跟卖与差评监控于一体,助力卖家数据化决策,高效提升店铺销量与排名。

每周教程

准备好开始您的数据采集之旅了吗?

注册免费账户,立即体验强大的网页数据采集API,无需信用卡。

微信扫一扫
与我们联系

QR Code
快速测试

联系我们,您的问题,我们随时倾听

无论您在使用 Pangolin 产品的过程中遇到任何问题,或有任何需求与建议,我们都在这里为您提供支持。请填写以下信息,我们的团队将尽快与您联系,确保您获得最佳的产品体验。

Talk to our team

If you encounter any issues while using Pangolin products, please fill out the following information, and our team will contact you as soon as possible to ensure you have the best product experience.