Skill: Product Recommender (/best)
Finds the best products in a category using authoritative review sources across US, EU, and UK.
Trigger
/best [product name] — e.g.,
/best airfryer, INLINECODE2
Sources
Review Aggregators — US
| Source | Region | URL | Access |
|---|
| Wirecutter | US | nytimes.com/wirecutter | Public |
| RTINGS |
US | rtings.com | Public |
| Consumer Reports | US | consumerreports.org | Public (summaries) |
Review Aggregators — UK
| Source | Region | URL | Access |
|---|
| TechRadar UK | UK | techradar.com | Public |
| Which? |
UK | which.co.uk | Public (summaries) |
Review Aggregators — EU
| Source | Region | URL | Access |
|---|
| Tweakers | NL | tweakers.net | Public |
| Kieskeurig |
NL/BE | kieskeurig.nl | Public |
| Consumentenbond | NL/BE | consumentenbond.nl | Public (summaries) |
| Testberichte.de | DE | testberichte.de | Public |
| Stiftung Warentest | DE | test.de | Public (summaries) |
| 01net | FR | 01net.com | Public |
| Les Numériques | FR | lesnumeriques.com | Public |
| Altroconsumo | IT | altroconsumo.it | Public |
| Xataka | ES | xataka.com | Public |
| Benchmark.pl | PL | benchmark.pl | Public |
| Komputer Świat | PL | komputerswiat.pl | Public |
| Test-Aankoop | BE | test-aankoop.be | Public (summaries) |
Price Comparison Sources
| Source | Coverage | URL | Notes |
|---|
| Kieskeurig | NL/BE | kieskeurig.nl | Aggregates all NL/BE retailers, real-time prices |
| Tweakers Pricewatch |
NL | tweakers.net/prijzen | Real-time NL pricing |
| Keepa | Amazon | keepa.com | Amazon price history (free tier) |
| Idealo | EU | idealo.co.uk | EU price comparison |
| PriceRunner | EU | pricerunner.com | Multi-country price comparison |
Retailers (Availability)
United States
| Retailer | Website |
|---|
| Amazon | amazon.com |
| Best Buy |
bestbuy.com |
| Walmart | walmart.com |
United Kingdom
| Retailer | Website |
|---|
| Amazon UK | amazon.co.uk |
| Currys |
currys.co.uk |
| John Lewis | johnlewis.com |
| Argos | argos.co.uk |
Germany
| Retailer | Website |
|---|
| Amazon DE | amazon.de |
| Coolblue |
coolblue.de |
| MediaMarkt DE | mediamarkt.de |
| Saturn | saturn.de |
| Otto | otto.de |
France
| Retailer | Website |
|---|
| Amazon FR | amazon.fr |
| MediaMarkt FR |
mediamarkt.fr |
| Fnac | fnac.com |
| Darty | darty.com |
| Boulanger | boulanger.com |
| Cdiscount | cdiscount.com |
Italy
| Retailer | Website |
|---|
| Amazon IT | amazon.it |
| MediaMarkt IT |
mediamarkt.it |
| Unieuro | unieuro.it |
| Euronics | euronics.it |
Spain
| Retailer | Website |
|---|
| Amazon ES | amazon.es |
| MediaMarkt ES |
mediamarkt.es |
| El Corte Inglés | elcorteingles.es |
| Fnac | fnac.es |
Netherlands
| Retailer | Website |
|---|
| Amazon NL | amazon.nl |
| Coolblue |
coolblue.nl |
| MediaMarkt NL | mediamarkt.nl |
Belgium
| Retailer | Website |
|---|
| Amazon BE | amazon.be |
| MediaMarkt BE |
mediamarkt.be |
| Coolblue | coolblue.be |
| Krëfel | krefel.be |
Poland
| Retailer | Website |
|---|
| Amazon PL | amazon.pl |
| Media Expert |
mediaexpert.pl |
| RTV Euro AGD | euroagd.pl |
| Komputronik | komputronik.pl |
Other EU Markets
| Country | Retailers |
|---|
| Austria | Amazon AT, MediaMarkt AT |
| Sweden |
Amazon SE, MediaMarkt SE |
| Denmark | Amazon DK |
| Finland | Amazon FI |
| Switzerland | Amazon CH |
Workflow
- 1. Parse query — extract product category from user input
- Detect region — default to NL (Ralph is based in the Netherlands). Allow explicit override:
/best airfryer de, /best earbuds fr, INLINECODE5 - Search sources — query relevant aggregator for top-rated products via
web_search (Brave Search API) - Filter by region — keep products available in selected region
- Categorize picks:
-
Top Pick — best overall
-
Best Value — best performance per dollar/pound/euro
-
Budget — solid option under $50/£40/€50
- 6. Generate output — 3 picks with summary + link
- Date rule: Always use today's actual date (resolved from the system at runtime). Never copy dates from review pages or search results.
- Price rule: Show approximate price range from search snippets (e.g., "€120-150"). Use "v.a. €X" for lowest found.
- Link rule: Use direct Google search link with full product name:
https://www.google.[nl|de|co.uk]/search?q=[product-name]. Region defaults to NL. - Summary rule: Always include 1-2 sentence summary explaining why it's top pick, best value, or budget in English.
- Language rule: Always output in the user's language where possible. For NL/BE queries, summaries may be in Dutch or English. For all other regions, use English.
- Cache — store results for 6 hours in INLINECODE8
Price-Order Validation (MANDATORY — CHECK BEFORE OUTPUT)
After generating picks, validate price ordering:
- - Budget ≤ Best Value ≤ Top Pick
- If violated: reorder the categories to match price, or discard the mismatched pick
- Never output a "Budget" pick that is more expensive than Best Value or Top Pick
Example of a price-order violation:
Budget: Ninja Foodi AF300EU — €149 ← WRONG: more expensive than Top Pick
Top Pick: Philips Airfryer XXL — €130 ← WRONG: cheaper than Budget
Fix: Either swap the category labels to match actual prices, or replace the Ninja with a genuinely cheaper option.
Price-Sanity Checks (MANDATORY — CHECK BEFORE OUTPUT)
Before presenting any pick, verify:
- 1. Budget is genuinely budget for the region (NL: ≤ €90, UK: ≤ £75, DE: ≤ €90)
- Best Value is cheaper than Top Pick
- Budget is cheaper than Best Value
- All three picks have real prices — never output "unknown" or leave price blank
If any check fails: do not output that pick. Find a cheaper/different alternative or flag the draft as needing review.
If prices cannot be verified: output with a note: "⚠️ Prijzen niet live geverifieerd — check voor publicatie."
Region Detection
Default: NL (Netherlands) — can be overridden per query.
| Command | Region | Retailers Checked |
|---|
| INLINECODE9 | NL (default) | amazon.nl, Coolblue, MediaMarkt |
| INLINECODE10 |
UK | amazon.co.uk, Currys, John Lewis |
|
/best [product] de | Germany | amazon.de, MediaMarkt, Saturn, Otto |
|
/best [product] fr | France | amazon.fr, Fnac, Darty, Boulanger |
|
/best [product] it | Italy | amazon.it, MediaMarkt, Unieuro |
|
/best [product] es | Spain | amazon.es, MediaMarkt, El Corte Inglés |
|
/best [product] nl | Netherlands | amazon.nl, Coolblue, MediaMarkt |
|
/best [product] be | Belgium | amazon.be, MediaMarkt, Coolblue |
|
/best [product] pl | Poland | amazon.pl, Media Expert, RTV Euro AGD |
|
/best [product] eu | Generic EU | amazon.de, Coolblue, MediaMarkt |
Output Format
CODEBLOCK1
Caching
- - Location: INLINECODE19
- Format:
{product}-{region}.json (e.g., earbuds-nl.json) - TTL: 6 hours
- Check: Always check cache first; if stale/missing, fetch fresh data
- To disable/clear:
rm -rf ~/.openclaw/cache/best-products/ — cache is optional, not required - Privacy note: Cached data is only product names and prices, no personal information
Link Verification (MANDATORY)
CRITICAL: All output URLs MUST be working Google search links. No exceptions.
| Rule | Requirement |
|---|
| ✅ Use Google Search | INLINECODE23 |
| ✅ Full product name |
Always use exact name from reviews (e.g., "Philips Airfryer XXL 3000 Series NA342") |
| ✅ Region match | Use google.nl for NL, google.de for DE, google.co.uk for UK |
| ❌ No direct retailer links | These often block; Google search always works |
| ❌ No markdown links | Use raw URL format only:
🔗 https://www.google.nl/search?q=product — never
[text](url) |
| ✅ Default to NL | Always use google.nl unless user explicitly specifies another region |
Verification workflow:
- 1. Search reviews → get exact product names
- Construct Google search URL with full product name
- Verify the product name is accurate from trusted sources (Consumentenbond, Which?, etc.)
- Output Google search link — user can click to see current prices
External Endpoints
| Endpoint | Data Sent | Purpose |
|---|
Brave Search API (web_search) | Product search queries only (e.g. "best airfryer nl reviews") | Find review pages from trusted sources |
| Google Search URLs |
Product names only | Generate price comparison links for user (open in browser) |
| Review aggregator sites | None — read-only via
web_fetch | Extract named product recommendations |
No personal data, credentials, or API keys are sent to external services.
Privacy & System Access
- - Search queries: Product search terms only → Brave Search API (via OpenClaw's built-in
web_search tool). This is the same as typing a product query into a search engine. - Google Search URLs: Product names embedded in links → Google (opens search results in browser)
- Cache: Writes to
~/.openclaw/cache/best-products/ for 6 hours. Optional — can be disabled by clearing that folder. - Timezone detection: Reads system timezone to default to NL. Can be overridden per query (e.g.,
/best earbuds de). - No credentials required: Uses OpenClaw's built-in
web_search and web_fetch tools only. - No PII: No user identifiers, emails, or personal information processed.
Trust Statement
This skill uses publicly available review data from trusted sources (Wirecutter, RTINGS, Which?, Tweakers, Consumentenbond, etc.) and price data from major retailers (Amazon, Best Buy, MediaMarkt, Coolblue, etc.). No personal data is collected or sent to third parties beyond standard search queries.
Model Invocation Note
This skill can be invoked autonomously when the user types /best [product]. Users can opt out by disabling this skill in their OpenClaw configuration.
技能:产品推荐 (/best)
使用美国、欧盟和英国的权威评测来源,查找某一类别中的最佳产品。
触发方式
/best [产品名称] — 例如:/best 空气炸锅、/best 无线耳机
来源
评测聚合网站 — 美国
| 来源 | 地区 | 网址 | 访问方式 |
|---|
| Wirecutter | 美国 | nytimes.com/wirecutter | 公开 |
| RTINGS |
美国 | rtings.com | 公开 |
| Consumer Reports | 美国 | consumerreports.org | 公开(摘要) |
评测聚合网站 — 英国
| 来源 | 地区 | 网址 | 访问方式 |
|---|
| TechRadar UK | 英国 | techradar.com | 公开 |
| Which? |
英国 | which.co.uk | 公开(摘要) |
评测聚合网站 — 欧盟
| 来源 | 地区 | 网址 | 访问方式 |
|---|
| Tweakers | 荷兰 | tweakers.net | 公开 |
| Kieskeurig |
荷兰/比利时 | kieskeurig.nl | 公开 |
| Consumentenbond | 荷兰/比利时 | consumentenbond.nl | 公开(摘要) |
| Testberichte.de | 德国 | testberichte.de | 公开 |
| Stiftung Warentest | 德国 | test.de | 公开(摘要) |
| 01net | 法国 | 01net.com | 公开 |
| Les Numériques | 法国 | lesnumeriques.com | 公开 |
| Altroconsumo | 意大利 | altroconsumo.it | 公开 |
| Xataka | 西班牙 | xataka.com | 公开 |
| Benchmark.pl | 波兰 | benchmark.pl | 公开 |
| Komputer Świat | 波兰 | komputerswiat.pl | 公开 |
| Test-Aankoop | 比利时 | test-aankoop.be | 公开(摘要) |
价格比较来源
| 来源 | 覆盖范围 | 网址 | 备注 |
|---|
| Kieskeurig | 荷兰/比利时 | kieskeurig.nl | 聚合所有荷兰/比利时零售商,实时价格 |
| Tweakers Pricewatch |
荷兰 | tweakers.net/prijzen | 荷兰实时价格 |
| Keepa | 亚马逊 | keepa.com | 亚马逊价格历史(免费版) |
| Idealo | 欧盟 | idealo.co.uk | 欧盟价格比较 |
| PriceRunner | 欧盟 | pricerunner.com | 多国价格比较 |
零售商(库存情况)
美国
| 零售商 | 网站 |
|---|
| 亚马逊 | amazon.com |
| Best Buy |
bestbuy.com |
| 沃尔玛 | walmart.com |
英国
| 零售商 | 网站 |
|---|
| 亚马逊英国 | amazon.co.uk |
| Currys |
currys.co.uk |
| John Lewis | johnlewis.com |
| Argos | argos.co.uk |
德国
| 零售商 | 网站 |
|---|
| 亚马逊德国 | amazon.de |
| Coolblue |
coolblue.de |
| MediaMarkt 德国 | mediamarkt.de |
| Saturn | saturn.de |
| Otto | otto.de |
法国
| 零售商 | 网站 |
|---|
| 亚马逊法国 | amazon.fr |
| MediaMarkt 法国 |
mediamarkt.fr |
| Fnac | fnac.com |
| Darty | darty.com |
| Boulanger | boulanger.com |
| Cdiscount | cdiscount.com |
意大利
| 零售商 | 网站 |
|---|
| 亚马逊意大利 | amazon.it |
| MediaMarkt 意大利 |
mediamarkt.it |
| Unieuro | unieuro.it |
| Euronics | euronics.it |
西班牙
| 零售商 | 网站 |
|---|
| 亚马逊西班牙 | amazon.es |
| MediaMarkt 西班牙 |
mediamarkt.es |
| El Corte Inglés | elcorteingles.es |
| Fnac | fnac.es |
荷兰
| 零售商 | 网站 |
|---|
| 亚马逊荷兰 | amazon.nl |
| Coolblue |
coolblue.nl |
| MediaMarkt 荷兰 | mediamarkt.nl |
比利时
| 零售商 | 网站 |
|---|
| 亚马逊比利时 | amazon.be |
| MediaMarkt 比利时 |
mediamarkt.be |
| Coolblue | coolblue.be |
| Krëfel | krefel.be |
波兰
| 零售商 | 网站 |
|---|
| 亚马逊波兰 | amazon.pl |
| Media Expert |
mediaexpert.pl |
| RTV Euro AGD | euroagd.pl |
| Komputronik | komputronik.pl |
其他欧盟市场
| 国家 | 零售商 |
|---|
| 奥地利 | 亚马逊奥地利, MediaMarkt 奥地利 |
| 瑞典 |
亚马逊瑞典, MediaMarkt 瑞典 |
| 丹麦 | 亚马逊丹麦 |
| 芬兰 | 亚马逊芬兰 |
| 瑞士 | 亚马逊瑞士 |
工作流程
- 1. 解析查询 — 从用户输入中提取产品类别
- 检测地区 — 默认为荷兰(Ralph 位于荷兰)。允许显式覆盖:/best 空气炸锅 de、/best 耳机 fr、/best 耳机 uk
- 搜索来源 — 通过 web_search(Brave 搜索 API)查询相关聚合网站,获取评分最高的产品
- 按地区筛选 — 仅保留所选地区有售的产品
- 分类推荐:
-
首选推荐 — 综合最佳
-
最佳性价比 — 每美元/英镑/欧元性能最佳
-
经济之选 — 50美元/40英镑/50欧元以下的可靠选择
- 6. 生成输出 — 3个推荐,附摘要和链接
- 日期规则: 始终使用今天的实际日期(运行时从系统获取)。切勿从评测页面或搜索结果中复制日期。
- 价格规则: 显示搜索摘要中的大致价格范围(例如€120-150)。最低价格使用v.a. €X格式。
- 链接规则: 使用包含完整产品名称的 Google 搜索直接链接:https://www.google.[nl|de|co.uk]/search?q=[产品名称]。地区默认为荷兰。
- 摘要规则: 始终包含1-2句英文摘要,说明为何是首选推荐、最佳性价比或经济之选。
- 语言规则: 尽可能使用用户的语言输出。对于荷兰/比利时查询,摘要可使用荷兰语或英语。对于所有其他地区,使用英语。
- 缓存 — 将结果存储在 ~/.openclaw/cache/best-products/ 中,有效期6小时
价格顺序验证(强制 — 输出前检查)
生成推荐后,验证价格顺序:
- - 经济之选 ≤ 最佳性价比 ≤ 首选推荐
- 如果违反:重新排列类别以匹配价格,或丢弃不匹配的推荐
- 切勿输出比最佳性价比或首选推荐更贵的经济之选
价格顺序违规示例:
经济之选: Ninja Foodi AF300EU — €149 ← 错误:比首选推荐更贵
首选推荐: Philips Airfryer XXL — €130 ← 错误:比经济之选更便宜
修正: 要么交换类别标签以匹配实际价格,要么用真正更便宜的选择替换 Ninja。
价格合理性检查(强制 — 输出前检查)
在呈现任何推荐前,验证:
- 1. 经济之选在对应地区确实属于经济价位(荷兰:≤ €90,英国:≤ £75,德国:≤ €90)
- 最佳性价比比首选推荐便宜
- 经济之选比最佳性价比便宜
- 所有三个推荐都有真实价格 — 切勿输出未知或留空价格
如果任何检查失败:不输出该推荐。寻找更便宜/不同的替代方案,或将草稿标记为需要审核。
如果价格无法验证:输出时附注:⚠️ 价格未经实时验证 — 发布前请检查。
地区检测
默认:荷兰 — 可按查询覆盖。
| 命令 | 地区 | 检查的零售商 |
|---|
| /best [产品] | 荷兰(默认) | amazon.nl, Coolblue, MediaMarkt |
| /best [产品] uk |
英国 | amazon.co.uk, Currys, John Lewis |
| /best [产品] de | 德国 | amazon.de, MediaMarkt, Saturn, Otto |
| /best [产品] fr | 法国 | amazon.fr, Fnac, Darty, Boulanger |
| /best [产品] it