review-demos
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseReview InboxMate Demos
审核InboxMate演示项目
Announce:━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Demo Review Pipeline started. Checking environment... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
通知:━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 演示审核流程已启动。 检查环境中... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
STEP 0 — Check Environment
步骤0 — 检查环境
Before doing anything, check if a file exists in the current working directory. Read it and source it:
.envbash
source .envThe file should contain tokens for:
.env- CRM API — for querying and updating opportunities (variable name should be obvious, e.g. contains "CRM" and "TOKEN")
- InboxMate MCP API — for auto-fixing widget styles (variable name should reference "MCP" or "DEMO" and "TOKEN")
If the file is missing or doesn't contain recognizable tokens for both services, stop immediately and ask the user to provide them.
.envNote on env var placeholders: Throughout this skill, and mean "use the actual variable name you found in for the CRM token and InboxMate MCP token respectively." Substitute with the real variable names when running commands.
$<CRM_TOKEN_VAR>$<MCP_TOKEN_VAR>.envOnce verified, announce:Environment OK. Finding demos pending review...
在开始任何操作前,检查当前工作目录下是否存在文件。读取并加载该文件:
.envbash
source .env.env- CRM API — 用于查询和更新商机(变量名称应清晰可辨,例如包含"CRM"和"TOKEN")
- InboxMate MCP API — 用于自动修复部件样式(变量名称应包含"MCP"或"DEMO"和"TOKEN")
如果文件缺失,或未包含这两个服务的可识别令牌,请立即停止并要求用户提供。
.env关于环境变量占位符的说明: 在本技能中,和表示“使用你在中找到的CRM令牌和InboxMate MCP令牌的实际变量名称”。运行命令时请替换为真实的变量名称。
$<CRM_TOKEN_VAR>$<MCP_TOKEN_VAR>.env验证通过后,通知:环境验证通过。正在查找待审核的演示项目...
STEP 1 — Find Demos Pending Review
步骤1 — 查找待审核的演示项目
Query CRM for opportunities at SCREENING stage with demoStatus = PENDING_REVIEW:
bash
curl -s -X POST https://crm.psquared.dev/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $<CRM_TOKEN_VAR>" \
-d '{"query":"{ opportunities(filter: { stage: { eq: SCREENING }, demoStatus: { eq: PENDING_REVIEW } }, first: 50) { edges { node { id name stage demoStatus demoUrl { primaryLinkUrl } company { id name domainName { primaryLinkUrl } } } } } }"}'Announce:Found [N] demos pending review: 1. [Company Name] — [demoUrl] 2. [Company Name] — [demoUrl] ...
If none found, announce "No demos pending review" and stop.
查询CRM中处于SCREENING阶段且demoStatus为PENDING_REVIEW的商机:
bash
curl -s -X POST https://crm.psquared.dev/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $<CRM_TOKEN_VAR>" \
-d '{"query":"{ opportunities(filter: { stage: { eq: SCREENING }, demoStatus: { eq: PENDING_REVIEW } }, first: 50) { edges { node { id name stage demoStatus demoUrl { primaryLinkUrl } company { id name domainName { primaryLinkUrl } } } } } }"}'通知:找到[N]个待审核的演示项目: 1. [公司名称] — [demoUrl] 2. [公司名称] — [demoUrl] ...
如果未找到任何项目,通知“无待审核的演示项目”并停止操作。
STEP 2 — Review Each Demo
步骤2 — 审核每个演示项目
For each opportunity, perform a quality check:
针对每个商机,执行质量检查:
2a — Fetch the Demo Page
2a — 获取演示页面
Use WebFetch to open the demo playground URL. The demo page is at .
demo.inboxmate.psquared.dev/?id=<demoId>Look at the page content for:
- Company name and branding
- Bot greeting message
- Quick questions displayed
- Color theme
使用WebFetch打开演示 playground URL。演示页面地址为。
demo.inboxmate.psquared.dev/?id=<demoId>检查页面内容是否包含:
- 公司名称和品牌标识
- 机器人问候语
- 显示的快速问题
- 颜色主题
2b — Fetch the Company Website
2b — 获取公司官网
Use WebFetch on the company's domain (from ). Compare against the demo.
company.domainName.primaryLinkUrl使用WebFetch访问公司域名(来自)。将其与演示项目进行对比。
company.domainName.primaryLinkUrl2b2 — Get Brand Colors via OpenBrand
2b2 — 通过OpenBrand获取品牌颜色
Call the OpenBrand API to extract the company's actual brand colors:
WebFetch: https://openbrand.sh/api/extract?url=https://[companyDomain]From the response, find the primary color — look for the color tagged as in the array. Record this hex value as .
"primary"colorsexpectedPrimaryColorIf OpenBrand fails or returns no colors, fall back to manually inspecting the company website HTML for dominant button/CTA colors.
调用OpenBrand API提取公司的实际品牌颜色:
WebFetch: https://openbrand.sh/api/extract?url=https://[companyDomain]从响应中找到主色调 — 在数组中查找标记为的颜色。记录该十六进制值为。
colors"primary"expectedPrimaryColor如果OpenBrand调用失败或未返回任何颜色,退回到手动检查公司官网HTML中的主导航/CTA按钮颜色。
2b3 — Get Demo Data via API
2b3 — 通过API获取演示数据
Fetch the demo's stored data to check the countdown configuration:
WebFetch: https://app.psquared.dev/api/demo/[demoId]Extract the from the opportunity's (the parameter or last path segment).
demoIddemoUrl?id=From the response, record:
- — the offer headline text
offerText - — the countdown deadline (ISO date, or null if missing)
offerExpiresAt - — needed for auto-fixes
agentId
获取演示项目的存储数据以检查倒计时配置:
WebFetch: https://app.psquared.dev/api/demo/[demoId]从商机的中提取(参数或最后一个路径段)。
demoUrldemoId?id=从响应中记录:
- — 优惠标题文本
offerText - — 倒计时截止日期(ISO格式,若缺失则为null)
offerExpiresAt - — 自动修复所需的ID
agentId
2c — Quality Checklist
2c — 质量检查清单
Score each item as PASS or FAIL:
| Check | What to verify |
|---|---|
| Company match | Demo mentions the correct company name |
| Language match | Demo language matches the company website language (DE/EN/both) |
| Greeting quality | Greeting is specific to the company, not generic ("Hi! How can I help?") |
| Quick questions | Questions are relevant to this company's products/services |
| Color match | Widget primary color matches OpenBrand |
| Countdown set | |
| Content accuracy | Any visible knowledge snippets reference real products/services from the website |
| No hallucinations | Demo doesn't mention products, pricing, or features not on the company website |
为每个项目评分PASS或FAIL:
| 检查项 | 验证内容 |
|---|---|
| 公司信息匹配 | 演示项目中提及正确的公司名称 |
| 语言匹配 | 演示项目的语言与公司官网语言一致(德语/英语/双语) |
| 问候语质量 | 问候语针对该公司定制,而非通用内容(如“嗨!我能帮你什么?”) |
| 快速问题相关性 | 问题与该公司的产品/服务相关 |
| 颜色匹配 | 部件主色调与OpenBrand返回的 |
| 倒计时设置 | |
| 内容准确性 | 所有可见的知识片段均引用官网的真实产品/服务 |
| 无幻觉内容 | 演示项目未提及官网中不存在的产品、定价或功能 |
2d — Auto-Fix: Colors
2d — 自动修复:颜色
If the Color match check FAILED (widget color doesn't match OpenBrand primary color):
- Call via the InboxMate MCP to fix the color:
update_widget_style
bash
curl -s -X POST https://app.psquared.dev/api/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $<MCP_TOKEN_VAR>" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"update_widget_style","arguments":{"agentId":"[agentId]","primaryColor":"[expectedPrimaryColor]"}}}'- Republish the agent:
bash
curl -s -X POST https://app.psquared.dev/api/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $<MCP_TOKEN_VAR>" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"publish_agent","arguments":{"agentId":"[agentId]"}}}'Announce:Auto-fixed: Updated [Company] widget color from [oldColor] to [expectedPrimaryColor]After auto-fixing, mark the Color match check as PASS (fixed).
如果颜色匹配检查失败(部件颜色与OpenBrand主色调不匹配):
- 调用InboxMate MCP的接口修复颜色:
update_widget_style
bash
curl -s -X POST https://app.psquared.dev/api/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $<MCP_TOKEN_VAR>" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"update_widget_style","arguments":{"agentId":"[agentId]","primaryColor":"[expectedPrimaryColor]"}}}'- 重新发布agent:
bash
curl -s -X POST https://app.psquared.dev/api/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $<MCP_TOKEN_VAR>" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"publish_agent","arguments":{"agentId":"[agentId]"}}}'通知:自动修复完成:将[公司名称]的部件颜色从[旧颜色]更新为[expectedPrimaryColor]自动修复完成后,将颜色匹配检查标记为PASS(已修复)。
2e — Auto-Fix: Countdown / Deadline
2e — 自动修复:倒计时/截止日期
If the Countdown set check FAILED (missing , expired date, or wrong ):
offerExpiresAtofferTextDetermine the correct deadline:
- If the CRM opportunity notes mention a specific deadline → use that date
- Otherwise → set to 7 days from today (ISO 8601)
Determine the correct offer text:
- The text should describe a time-limited offer that fits the countdown premise
- Good examples (DE): "Jetzt starten und 50% Rabatt im ersten Jahr sichern", "Ihren KI-Assistenten jetzt aktivieren — Sonderkonditionen sichern"
- Good examples (EN): "Start now and save 50% in your first year", "Activate your AI assistant now — special terms available"
- Never use "Kostenlose Erstberatung" — the countdown is for an offer deadline, not a consultation
Apply the fix — update the table directly via Supabase:
demo_pagesUse mcp__plugin_supabase_supabase__execute_sql with:
project_id: "fevtfywriufbqnvbgyrm"
query: UPDATE demo_pages SET offer_text = '[corrected offerText]', offer_expires_at = '[corrected ISO date]' WHERE id = '[demoId]'Announce:Auto-fixed: Updated [Company] countdown — expires [date], text: "[offerText]"After auto-fixing, mark the Countdown set check as PASS (fixed).
如果倒计时设置检查失败(缺失、日期已过期或不正确):
offerExpiresAtofferText确定正确的截止日期:
- 如果CRM商机的备注中提及具体截止日期 → 使用该日期
- 否则 → 设置为当前日期后的7天(ISO 8601格式)
确定正确的优惠文本:
- 文本应描述符合倒计时场景的限时优惠
- 优秀示例(德语):"Jetzt starten und 50% Rabatt im ersten Jahr sichern"、"Ihren KI-Assistenten jetzt aktivieren — Sonderkonditionen sichern"
- 优秀示例(英语):"Start now and save 50% in your first year"、"Activate your AI assistant now — special terms available"
- 禁止使用"Kostenlose Erstberatung" — 倒计时用于优惠截止日期,而非咨询
应用修复 — 通过Supabase直接更新表:
demo_pages使用mcp__plugin_supabase_supabase__execute_sql,参数:
project_id: "fevtfywriufbqnvbgyrm"
query: UPDATE demo_pages SET offer_text = '[corrected offerText]', offer_expires_at = '[corrected ISO date]' WHERE id = '[demoId]'通知:自动修复完成:更新[公司名称]的倒计时 — 截止日期[date],文本:"[offerText]"自动修复完成后,将倒计时设置检查标记为PASS(已修复)。
2f — Make a Decision
2f — 做出决策
- 6+ PASS (including auto-fixed), 0 critical FAILs →
OK_TO_SEND - Any critical FAIL (wrong company, wrong language, hallucinated content) →
NEEDS_FIX - Minor issues only (greeting could be better) → with note about improvements
OK_TO_SEND - Auto-fixed items count as PASS but should be mentioned in the review note
- 6项及以上PASS(包括自动修复项),无严重FAIL →
OK_TO_SEND - 存在任何严重FAIL(公司信息错误、语言错误、幻觉内容) →
NEEDS_FIX - 仅存在 minor 问题(问候语可优化) → ,并在备注中提及改进建议
OK_TO_SEND - 自动修复项计为PASS,但应在审核备注中提及
STEP 3 — Update CRM
步骤3 — 更新CRM
If OK_TO_SEND:
若标记为OK_TO_SEND:
bash
undefinedbash
undefinedUpdate demoStatus
更新demoStatus
curl -s -X POST https://crm.psquared.dev/graphql
-H "Content-Type: application/json"
-H "Authorization: Bearer $<CRM_TOKEN_VAR>"
-d '{"query":"mutation { updateOpportunity(id: "[opportunityId]", data: { demoStatus: OK_TO_SEND, demoReviewIssues: null }) { id } }"}'
-H "Content-Type: application/json"
-H "Authorization: Bearer $<CRM_TOKEN_VAR>"
-d '{"query":"mutation { updateOpportunity(id: "[opportunityId]", data: { demoStatus: OK_TO_SEND, demoReviewIssues: null }) { id } }"}'
undefinedcurl -s -X POST https://crm.psquared.dev/graphql
-H "Content-Type: application/json"
-H "Authorization: Bearer $<CRM_TOKEN_VAR>"
-d '{"query":"mutation { updateOpportunity(id: "[opportunityId]", data: { demoStatus: OK_TO_SEND, demoReviewIssues: null }) { id } }"}'
-H "Content-Type: application/json"
-H "Authorization: Bearer $<CRM_TOKEN_VAR>"
-d '{"query":"mutation { updateOpportunity(id: "[opportunityId]", data: { demoStatus: OK_TO_SEND, demoReviewIssues: null }) { id } }"}'
undefinedIf NEEDS_FIX:
若标记为NEEDS_FIX:
bash
curl -s -X POST https://crm.psquared.dev/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $<CRM_TOKEN_VAR>" \
-d '{"query":"mutation { updateOpportunity(id: \"[opportunityId]\", data: { demoStatus: NEEDS_FIX, demoReviewIssues: \"[Issue 1: description. Issue 2: description. Suggested fixes: ...]\" }) { id } }"}'bash
curl -s -X POST https://crm.psquared.dev/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $<CRM_TOKEN_VAR>" \
-d '{"query":"mutation { updateOpportunity(id: \"[opportunityId]\", data: { demoStatus: NEEDS_FIX, demoReviewIssues: \"[问题1:描述。问题2:描述。建议修复方案:...]\" }) { id } }"}'STEP 4 — Report
步骤4 — 生成报告
Announce:━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Demo Review complete. ✅ OK to send: - [Company A] — [brief reason] - [Company B] — [brief reason] ❌ Needs fix: - [Company C] — [issue summary] Next step: Send approved demos to prospects ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
通知:━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 演示审核完成。 ✅ 可发送: - [公司A] — [简要原因] - [公司B] — [简要原因] ❌ 需要修复: - [公司C] — [问题摘要] 下一步:将已通过审核的演示项目发送给潜在客户 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CRM Fields Updated by This Skill
本技能更新的CRM字段
| Step | Field | Value | When |
|---|---|---|---|
| 3 (OK) | | | Demo passed QA |
| 3 (OK) | | | Clear any previous issues |
| 3 (FIX) | | | Demo failed QA |
| 3 (FIX) | | | What's wrong and how to fix |
Reads: (filter PENDING_REVIEW), (demo page link), company domain
demoStatusdemoUrlDoes NOT touch: , , ,
outreachSentAtfollowupSentAtagenthubAccountIdstageImportant: is a GraphQL enum — use bare values (no quotes):
demoStatusdemoStatus: OK_TO_SEND| 步骤 | 字段 | 值 | 触发条件 |
|---|---|---|---|
| 3(OK) | | | 演示项目通过QA审核 |
| 3(OK) | | | 清除所有之前的问题记录 |
| 3(FIX) | | | 演示项目未通过QA审核 |
| 3(FIX) | | | 问题描述及修复建议 |
读取字段: (筛选PENDING_REVIEW)、(演示页面链接)、公司域名
demoStatusdemoUrl不修改字段: 、、、
outreachSentAtfollowupSentAtagenthubAccountIdstage重要提示: 是GraphQL枚举类型 — 使用裸值(无需引号):
demoStatusdemoStatus: OK_TO_SEND