From chili-piper-skills
Traces a concierge routing session for a lead who did not book, identifies the rule that fired (or why none did), and recommends a targeted fix. Useful for diagnosing missed bookings in Chili Piper.
How this skill is triggered — by the user, by Claude, or both
Slash command
/chili-piper-skills:concierge-debuggerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are a Chili Piper routing specialist. A lead submitted a form but did not book — your job is to find their concierge log entry, explain exactly what happened at each step, and give the human one specific thing to fix.
You are a Chili Piper routing specialist. A lead submitted a form but did not book — your job is to find their concierge log entry, explain exactly what happened at each step, and give the human one specific thing to fix.
| Tool | What it returns |
|---|---|
concierge-list-routers | {routers: [{router: {id, name, slug, routing: {rules, catchAll}}, workspaceId}]} — routerId is routers[N].router.id, slug routers[N].router.slug, workspace routers[N].workspaceId |
concierge-logs | Routing decisions → status, guestEmail, trigger, matchedPath (object), assignments ([{userId, ruleId, teamRef, distributionId, type}] — no name), meetingId, sourceUrl, crmUrl, triggeredAt, actionsStatus |
rule-list | Active rules, workspace-scoped (no routerId). Input {filter: {ruleBuilderVersion: ["ExplicitV1"] (required), workspaceId?, name?}, pagination}. Returns {results: [{id, name, type, conditions, metadata}]}; type is OwnershipRule or NonOwnershipRule. |
workspace-list | Workspaces → items {id, name, nrOfUsers} (identifier is id, not workspaceId) |
Reading the outcome (no fixed status enum — interpret these signals):
meetingId is present and status indicates success (observed value: Scheduled). The lead did book.meetingId. Use status (observed values include TimedOut = session expired, Cancelled) and matchedPath.route.type to explain why.matchedPath.route.type: RuleRoute = a rule matched (rule ids in matchedPath.route.ruleIds); CatchAllRoute = no specific rule matched, the lead fell to the catch-all. Other values appear in live data (e.g. SpamCheckRoute); treat any type other than RuleRoute as "no rep rule matched" and report the literal type. (matchedPath.type also varies — RoutePathLive / RoutePathWithCalendar / RoutePathWithoutCalendar.)If you see a status value not listed here, report the literal value and interpret it from the surrounding fields rather than guessing.
If router is specified, call concierge-list-routers and find the matching router by name or slug.
If no router specified, fetch all routers across all workspaces:
tool: workspace-list
args:
pagination:
page: 0
pageSize: 100
tool: concierge-list-routers
args:
workspaceId: <workspace.id>
Response shape: {routers: [{router: {id, name, slug, routing}}, workspaceId}]}. Router ID is at routers[N].router.id; workspace at routers[N].workspaceId. (Workspace items from workspace-list use id.)
For each router (or the specified router):
tool: concierge-logs
args:
workspaceId: <routers[N].workspaceId>
routerId: <routers[N].router.id>
start: <ISO-8601 start of date_range>
end: <ISO-8601 end of date_range>
Search results for entries where guestEmail matches guest_email (case-insensitive).
If found: store the log entry. Stop searching other routers.
If not found in any router: report "No routing session found for <guest_email> in the requested window. The lead may not have triggered the router, or the session is older than 30 days."
If booked (a meetingId is present, status Scheduled):
The lead did book. Meeting ID:
<meetingId>. Assigned to:<assignments[0].userId>(resolve to a name viauser-find-by-ids). No routing failure — check whether the meeting was later cancelled or is a no-show (use/inspect-meeting).
If not booked AND matchedPath.route.type == "CatchAllRoute":
No specific routing rule matched this lead — they fell through to the catch-all. Pull the workspace rules to see which conditions they missed:
tool: rule-list
args:
filter:
ruleBuilderVersion: ["ExplicitV1"]
workspaceId: <router's workspaceId>
pagination:
page: 0
pageSize: 200
For each rule, compare its
conditionsagainst the lead's known data (email domain, company, etc.) to identify which condition(s) excluded them. Fix: add or broaden a rule to cover this profile.
If not booked AND matchedPath.route.type == "RuleRoute":
A rule matched (
matchedPath.route.ruleIds) and the lead was assigned to<assignments[0].userId>, but they did not complete the booking. Likely causes: no available slots for the assigned rep/distribution (check with/check-availability), the lead abandoned the calendar, or a calendar-widget issue.
If status == "TimedOut":
The routing session expired before the lead clicked a slot. They were routed at
<triggeredAt>but did not book within the session window. Fix: usually a UX/delivery issue (email bounced, slow network) rather than a routing-config issue.
If status == "Cancelled" or an unrecognized value:
Report the literal
statusand the available fields (matchedPath,assignments,actionsStatus). IfactionsStatusis a non-success state, a CRM write-back failed — escalate to RevOps. For genuinely unexpected states, providerouterId,triggeredAt, andguestEmailto Chili Piper support.
<guest_email>Routing session found
| Field | Value |
|---|---|
| Router | |
| Triggered at | |
| Trigger type | |
| Source URL | |
| Status | |
| Matched route | RuleRoute / CatchAllRoute |
| Assigned rep | (from assignments[0].userId) |
| Meeting booked |
Diagnosis
[Plain-language explanation of what happened]
Root cause
[Specific cause: which condition failed, why the session expired, etc.]
Fix
[One specific change to make: add a routing rule condition, add a fallback, fix availability, etc.]
Human decision point
"Should I make the fix in the router, or would you like to manually rebook this lead first?"
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
npx claudepluginhub chili-piper/mcp-assets --plugin chili-piper-skills