AI PLAY玩法更新持续收录
← 回到更新流

2026-10-15 · 原文发布日

每天监控Booking和tiket.com竞品房价推送到Telegram

一个n8n免费模板:每天定时用MrScraper抓取Google表格里列出的竞品酒店在Booking.com和tiket.com未来两个周末的房价,tiket.com页面借助Gemini解析;与历史记录比对识别价格变化后写入Rate_History和Current_Status,还附带城市区域扫描。最后由Gemini生成印尼语汇总报告发到Telegram,需要自托管n8n并安装MrScraper社区节点。

原文要点

这是n8n社区免费模板(作者Ghazy Achmed),每天雅加达时间15:00触发,从Google表格Listings读取竞品酒店,为未来两个周末共4个入住日期拼出Booking.com和tiket.com详情页URL,用自托管n8n上的MrScraper社区节点抓取;tiket.com的markdown结果再交给Gemini解析房型与价格。之后把价格归一化、与历史表比对确认价格变化,追加写入Rate_History并更新Current_Status,同时另跑一条城市区域扫描写入Area_Scan,最后由Gemini生成印尼语报告(失败时用固定模板兜底)发到一个Telegram会话。MrScraper免费档允许10个并发,单次运行最多3次Gemini请求,10家酒店约46次页面请求。

这次做成什么

在自己的自托管n8n里复刻一条「每日竞品房价监控」流水线:定时触发→读取监控清单→分平台抓取→归一化比对→写表→生成汇总发Telegram。由于原模板需在n8n.io获取且依赖付费第三方抓取额度,本站给出独立设计的等价练习方案:用沙盒表格和合成数据先把比对与报告逻辑跑通,再接真实抓取。

准备什么

  • 自托管n8n实例,并已安装社区节点包n8n-nodes-mrscraper
  • MrScraper账号与API令牌(免费档10并发,注意额度)
  • Google Sheets OAuth2凭据及含Listings、Rate_History、Current_Status、Area_Scan四个标签页的表格
  • Google Gemini API密钥,单次运行最多消耗3次请求
  • 通过@BotFather创建的Telegram机器人令牌和目标chat ID

具体怎么做

  1. 建表并填入监控清单

    复制或新建Google表格,建Listings、Rate_History、Current_Status、Area_Scan四个标签页。Listings列含hotel_name、platform(booking.com或tiket.com)、detail_url。填入2家虚构酒店做联调用数据,并把表格ID替换到所有Google Sheets节点的YOUR_GOOGLE_SHEET_ID位置。

  2. 配置触发器与URL构造

    加Schedule Trigger设为每天15:00(Asia/Jakarta)。在Code节点里用WEEKEND_COUNT=2计算未来两个周末共4个入住日期,按平台把checkin/checkout参数拼进详情页URL,booking.com走结构化抓取分支,tiket.com走渲染页面抓取分支。

  3. 接入抓取与Gemini解析

    安装n8n-nodes-mrscraper后添加MrScraper凭据,节点On Error设为Continue,失败的页面记录状态后继续跑。tiket.com返回的markdown送入Gemini节点,用提示词抽取房型与最低价,输出统一JSON字段room_type与price。

  4. 归一化与历史比对

    在Normalize节点里把价格统一为数值货币,设ALERT_THRESHOLD_PCT(如5)。与Rate_History中同酒店同日期的最近记录比对,涨跌幅超过阈值才标记为confirmed change;所有观测追加到Rate_History,最新值用upsert写入Current_Status。

  5. 区域扫描与报告发送

    用Build Area Scan URL节点按AREA_CITY和DAY_OFFSET拼Booking.com城市搜索页URL,抓前若干 listings 的最低价写入Area_Scan。最后用Gemini生成汇总报告(失败时回退到固定模板),在Telegram节点把YOUR_TELEGRAM_CHAT_ID换成目标会话ID,发送单条合并消息。

可直接复制的材料

Listings标签页示例数据(合成CSV)

本站虚构示例,URL需替换为真实竞品详情页

hotel_name,platform,detail_url
Hotel Kencana Jakarta,booking.com,https://www.booking.com/hotel/id/example-kencana.html
Hotel Melati Yogyakarta,tiket.com,https://www.tiket.com/hotel/example-melati

Gemini汇总报告提示词(中文改写版)

本站按原模板报告结构独立改写,原报告为印尼语,可在节点里改回

你是酒店收益分析助手。根据下面的JSON监控结果,用中文写一条适合Telegram发送的汇总报告(不超过1500字符)。结构:1) 平台健康:各平台成功/失败页数;2) 今日确认的价格变化:酒店名、平台、入住日期、旧价→新价、涨跌幅%;3) 每个入住日期的全网最低价酒店;4) 售罄清单;5) 区域扫描最低价Top3。没有的段落写「无」。数据如下:{{ $json.summary }}

比对与告警字段映射配置

本站设计的练习配置;各变量在原模板对应Code节点中核对实际命名

{"WEEKEND_COUNT":2,"ALERT_THRESHOLD_PCT":5,"AREA_CITY":"Jakarta","DAY_OFFSET":7,"rateHistoryFields":["hotel_name","platform","checkin_date","room_type","price","scraped_at","change_confirmed"],"currentStatusKey":["hotel_name","platform","checkin_date"]}

输入与输出示例

本站虚构演示,非原模板实跑结果

输入

Listings含2家酒店(1家booking.com、1家tiket.com),WEEKEND_COUNT=2共4个入住日期;合成观测:Hotel Kencana在2026-10-17入住日房价从850000印尼盾涨到935000印尼盾,Hotel Melati同日期维持620000印尼盾。

对应输出

Rate_History追加8行观测;Current_Status中Hotel Kencana该日期价格更新为935000且change_confirmed=true(涨幅10%>阈值5%);Telegram收到一条汇总:「价格变化:Hotel Kencana (booking.com) 2026-10-17 850000→935000 (+10.0%);当日全网最低:Hotel Melati 620000;售罄:无」。

做完检查这些

  • Listings中每家酒店展开为4个入住日期的抓取请求,失败页面带状态记录但不中断整轮运行
  • Rate_History只追加不覆盖,Current_Status按酒店+平台+日期键upsert最新值
  • 涨跌幅未超过ALERT_THRESHOLD_PCT时change_confirmed为false,超过才进入报告的价格变化段
  • Gemini节点失效时仍能收到固定模板的Telegram兜底汇总

容易卡住的地方

  • 必须自托管n8n才能装社区节点,n8n Cloud默认装不了n8n-nodes-mrscraper
  • MrScraper免费档10并发,10家酒店约46次请求,规模大时要分批或升级
  • tiket.com依赖Gemini解析markdown,Gemini额度不足会导致解析失败,需确认配额
  • Booking/tiket页面结构变化会使选择器失效,抓取字段为空时先检查MrScraper任务配置

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Monitor hotel competitor rates on Booking.com and tiket.com with MrScraper, Gemini and Telegram
原作者
Ghazy Achmed
原始发布日期
2026-10-14T17:33:28.401Z
来源
https://n8n.io/workflows/20971