Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Designing and configuring Salesforce Service Cloud — cases, assignment/escalation rules, queues, entitlements and milestones (SLAs), the Lightning Service Console, Knowledge (Knowledge__kav, data categories, KCS), Omni-Channel routing, Web-to-Case/Email-to-Case, CTI/voice, and contact-center analytics (AHT, FCR, CSAT). Use when scoping or implementing a case-management/support solution, intake channels, or routing. Not Sales Cloud pipeline (see salesforce-sales-cloud-consultant), portals (see sa
.claude/skills/toddkasper-salesforce-service-cloud-consultant/SKILL.md| Model | Eval pass | Runs |
|---|---|---|
| gemini-3.6-flash | 100% | 13 |
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 170% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 242% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 262% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 502% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 314% | 0% |
> This file is an operational playbook, not an exam outline. Each section states > the rule as an actionable instruction, gives concrete limits/numbers, decision > criteria, and anti-patterns to catch in review. Read the > Operational Rules Quick Reference first.
The Salesforce Certified Service Cloud Consultant credential (exam code Service-Con-201) validates that a practitioner can design, configure, and implement Service Cloud solutions that are scalable, maintainable, and aligned to documented business requirements. It covers the full contact-center lifecycle: discovery, solution architecture, channel configuration (email, chat, voice, messaging, social), case management automation, entitlement-based SLA enforcement, knowledge base design, agent-desktop optimization via the Service Console, and operational analytics.
> Load this skill when… designing or configuring a case-management or support solution; setting up intake channels (Email-to-Case, Web-to-Case, chat); implementing entitlements/milestones for SLA enforcement; configuring the Service Console or Omni-Channel routing. > Not this skill: Sales Cloud pipeline (Leads, Opportunities, forecasting) → see salesforce-sales-cloud-consultant; authenticated self-service portals → see salesforce-experience-cloud-consultant; field service dispatching/work orders → see salesforce-field-service-consultant; general org admin (profiles, flows, reports) → see salesforce-administrator.
> Deeper context: Study resources live in references/study-resources.md (loaded on demand). For org-specific applications, see a per-org appendix in your own project referenced from a CLAUDE.md. For NPSP/nonprofit-specific guidance, see salesforce-nonprofit-cloud-consultant.
> Verify steps assume nothing about your tooling — use your project's Salesforce MCP connection, the Salesforce CLI (sf), or the Salesforce setup UI, in that order of preference. The SOQL and describe calls below are written to work through any of them.
Credential logistics and study path: see references/study-resources.md.
[volatile — verify live]), case merge limits, sandbox refresh intervals, SMS/10DLC registration requirements, Knowledge license names, and any feature-availability detail — verify against official Salesforce documentation and your live org before acting.[volatile — verify live] or [opinion — house style]. If you act on an untagged fact and the live system disagrees, file feedback — do not silently trust this file over the live org.Pick the channel by volume, latency tolerance, and audience, not by what's fashionable. Use this table at design time:
| Need | Choose | Because | |---|---|---| | Async, paper-trail intake, low volume | Email-to-Case / Web-to-Case | Cheapest, no agent-presence required | | Real-time, agent online | Chat / Messaging | Synchronous SLA, deflects phone | | Voice with CTI/transcription | Service Cloud Voice (see §5 for model options) | Native, screen-pop, supervisor barge-in | | Unauthenticated public access | Salesforce Site / Help Center | No login friction | | Authenticated self-service | Experience Cloud community | Per-user record visibility |
Design for the audience first. Login friction is a real cost for low-tech or one-time users on shared devices. For such audiences, anonymous submit and tokenized magic-link flows beat an authenticated Experience Cloud portal — don't reflexively propose authenticated portals when the audience argues against them.
Default to declarative; reach for code only when declarative can't express it. Decision order:
| Requirement | Use | Don't use | |---|---|---| | Block a bad save / enforce field rule | Validation Rule | Apex trigger | | Field update, record create, simple branch on save | Record-Triggered Flow | Apex trigger | | Multi-object, recursion control, complex bulk logic, callouts | Apex (trigger + handler) | Flow with loops doing DML | | Agent step-by-step script | Screen Flow | Hard-coded console buttons |
sf sobject list, or Setup → Object Manager), then describe the target object (your Salesforce MCP, sf sobject describe --sobject <object>, or Object Manager → <object> → Fields & Relationships) to see existing fields and record types; check existing Flows/triggers in source control before authoring a new one.A custom intake object can be treated as the Case analog; the same lifecycle discipline applies.
AssignmentRuleHeader — otherwise the record keeps the running user as owner. RED FLAG: expecting auto-routing on records created by an integration user via API/JWT.[volatile — verify live]; pick the master deliberately — related records re-parent to the master and field values follow master-selection rules.sf sobject describe / Object Manager) to see record types and picklist entries; run a SOQL query (MCP / sf data query / Developer Console) to confirm status-value distribution in the live org.| Tier | Use for | Data | |---|---|---| | Developer | metadata dev, unit work | none copied | | Developer Pro | larger dev/test data sets | none copied | | Partial Copy | UAT with sample data | template-sampled | | Full | load/perf test, prod-like rehearsal | full copy (mask PII) |
Mask PII in any sandbox that carries production data.
sfdx-project.json — run sf project ... from there, or it fails with InvalidProjectWorkspaceError.console:relatedRecord component.quickActionLayoutItems via SFDX, Salesforce's runtime QA cache often does NOT invalidate — the new fields are silently absent on the rendered tab, even after a full browser logout/login, with no error. Fix: edit any non-field-list metadata on the QA (<description>, <label>, <layoutSectionStyle>) and redeploy; SF treats the structural change as meaningful and flushes the org-level cache.sf sobject describe / Object Manager) — object access ≠ FLS — see §9.[volatile — verify live] — submissions beyond that limit are NOT silently dropped; they enter a shared pending request queue (combined Web-to-Case + Web-to-Lead, 50,000-request capacity). Queued requests are processed after the next midnight UTC reset. If the pending queue itself is full, additional submissions are permanently lost (the admin receives a notification for the first five rejections only). A custom web app POSTing to your own API (rather than native Web-to-Case) is not bound by this cap.sf data query / Developer Console) filtering on the origin/source field to confirm which intake path produced a record.CTI/Voice depth (Open CTI vs. Service Cloud Voice, screen pop, supervisor features, PBX considerations): references/cti-voice.md — load when designing or troubleshooting a telephony integration.
Knowledge__kav. There are no per-type article objects (that was Classic). Don't design around article types.[volatile — verify live] plus the "Manage Salesforce Knowledge" / "Publish Articles" perms — license alone is not enough.[volatile — verify live]. Industry self-service deflection target is 60–80% [volatile — verify live] before an agent touch.GROUP BY status/type (MCP / sf data query / Developer Console) to confirm the real pipeline distribution before building a dashboard on assumptions.field-meta.xml creates the field but gives zero field-level security — queries fail with "Invalid field" even as System Administrator. Add explicit <fieldPermissions> in a profile or permset for every custom field.<fieldPermissions> on a <required> field — permset deploy fails with "You cannot deploy to a required field." Omit required fields.Map, iterate in memory, collect into a List, DML once. RED FLAG: any [SELECT ...] or DML inside a for/while body.relationshipName unique per parent. Two Lookups to the same parent can't share a name (deploy fails: "Duplicate relationship name"). Use role-specific suffixes; SOQL traversal keys on field name, so renaming is safe.max length / picklist values at the input boundary from constants generated from the live org's schema. Apex truncation is a last-line fallback, not a primary guard.sf sobject describe / Object Manager) — returns length, type, picklist value set — diff against generated constants if a field was recently resized, then regenerate.Entitlement Processes are the template that governs which milestones apply and when the clock starts. Confusing the Process with the Milestone (or the Entitlement) is the most common design error.
CaseMilestone records via SOQL to confirm the expected milestones were inserted, their TargetDate is correct given the Business Hours, and the timeline aligns with the Entitlement Process configuration.SELECT OwnerId FROM Case WHERE Id = '<id>' confirms correct owner.SELECT Id, TargetDate, CompletionDate FROM CaseMilestone WHERE CaseId = '<id>' — expected milestones present with correct TargetDate.CaseMilestone.TargetDate — confirm it shifted forward if the process has "Stop timing on On-Hold" enabled. → gate: TargetDate delta matches the paused duration.AgentWork record created in SOQL confirming the work item assignment.Five original scenarios. Scenarios 4–5 are in references/scenarios.md — load for the entitlement TargetDate Business Hours gotcha and the Web-to-Case spike capacity scenario.
Scenario 1 — Assignment rule not firing on API-created cases
Situation: Integration creates Cases via REST/JWT. All new cases land in the integration user's personal queue. Active assignment rule is configured correctly.
Competent move: Assignment rules are not auto-applied on API inserts unless AssignmentRuleHeader is explicitly set in the request. Fix the integration to set AssignmentRuleHeader pointing to the active rule ID.
Tempting-but-wrong: Re-ordering rule entries or adding an after-insert Flow. The Flow workaround works but duplicates routing logic; AssignmentRuleHeader is the correct surface.
Verify: Insert a test case via the same path; SOQL query Case.OwnerId (MCP / sf data query / Developer Console). Confirm Assignment Rule history on the Case record.
Scenario 2 — Milestone clock running through On-Hold cases
Situation: SLA report shows frequent violations on cases agents placed in "On Hold" while waiting for documents. Delay was customer-caused; agents see the violations as unfair.
Competent move: Open the Entitlement Process → enable "Stop milestone timing when case status equals On Hold." Test: set a case to On Hold, wait, reopen, confirm CaseMilestone.TargetDate shifts forward by paused duration.
Tempting-but-wrong: After-update Flow to extend the target date manually — fragile, bypasses the native engine, produces drift. Adjusting Warning/Violation email actions informs people about violations without preventing them.
Verify: Query CaseMilestone.TargetDate before and after the change. Note: existing milestones are not retroactively adjusted — only future cases benefit.
Scenario 3 — New Quick Action fields silently missing after SFDX deploy
Situation: Developer adds three fields to an existing Quick Action via quickActionLayoutItems in SFDX. Deploy succeeds. Testers log out/in; fields are absent from the contextual tab with no error.
Competent move: QA org-level cache was not flushed. Fix: edit any non-field-list metadata on the QA (<description> or <label>) and redeploy — SF treats it as a structural change and invalidates the cache.
Tempting-but-wrong: Repeated logout/login (cache is org-level, not browser-level); adding FLS permissions before diagnosing the cache.
Verify: After the cache-bust redeploy, visually confirm fields render in the org. Also describe the object (MCP / sf sobject describe) to confirm FLS is correct — deploy success does not grant FLS (see §9).
<fieldPermissions> for every non-required custom field — SFDX field-meta grants FLS to no one.<fieldPermissions> on a required field — the deploy fails; omit required fields.relationshipName unique per parent object (role-specific suffixes).AssignmentRuleHeader explicitly.<description>) when new QA fields don't render — logout/login alone won't.Knowledge__kav; Data Categories drive visibility.sf project ... from the SFDX project root (where sfdx-project.json lives), never an arbitrary dir.For NPSP/nonprofit-specific operational guidance, see salesforce-nonprofit-cloud-consultant.
Using this skill and hit a wall? If you find a claim contradicted by the live system or official docs, a missing rule that cost you a wrong attempt, or a decision this skill gave no criteria for — append an entry in the moment to .skill-feedback/salesforce-service-cloud-consultant.md at the project root (create it if absent):
date | skill last-reviewed | claim or gap | what you observed instead | evidence (error text / doc URL / query output) | suggested fix
These are harvested back into the skill via the learning loop. When the live system and this file disagree, trust the live system.
[volatile — verify live] marks, executable workflows, tool-agnostic verify steps, and the feedback protocol above. Exam logistics relocated to references/study-resources.md; last-reviewed set to 2026-06-09.> Disclaimer: Independent educational content to upskill AI agents. Not affiliated with, authorized by, endorsed by, or sponsored by Salesforce, Inc. or any certification body. "Salesforce," "Service Cloud," "Salesforce Certified Service Cloud Consultant," and related marks are trademarks of Salesforce, Inc. and are used here solely to identify the subject matter. Content is provided as-is, as guidance only — verify all configuration details, limits, and procedures against official Salesforce documentation and your live org before acting. No certification outcome is implied or guaranteed.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-08 | pass→pass | 14,330 | 7,950 | -45% | 1 | 1 | 0% | 2,396 | 9,150 | +282% | 0 | 0 | — |
case-01 | fail→pass | 24,881 | 19,308 | -22% | 1 | 1 | 0% | 4,230 | 11,400 | +170% | 0 | 0 | — |
case-02 | fail→pass | 18,540 | 10,992 | -41% | 1 | 1 | 0% | 2,852 | 9,749 | +242% | 0 | 0 | — |
case-03 | pass→pass | 19,626 | 12,429 | -37% | 1 | 1 | 0% | 2,983 | 9,731 | +226% | 0 | 0 | — |
case-04 | pass→pass | 17,421 | 13,543 | -22% | 1 | 1 | 0% | 2,577 | 9,747 | +278% | 0 | 0 | — |
case-05 | pass→pass | 22,626 | 13,442 | -41% | 1 | 1 | 0% | 3,743 | 10,255 | +174% | 0 | 0 | — |
case-06 | pass→pass | 9,320 | 5,609 | -40% | 1 | 1 | 0% | 1,693 | 8,917 | +427% | 0 | 0 | — |
case-07 | fail→pass | 15,977 | 10,193 | -36% | 1 | 1 | 0% | 2,631 | 9,526 | +262% | 0 | 0 | — |
case-09 | pass→pass | 11,915 | 7,752 | -35% | 1 | 1 | 0% | 2,215 | 9,381 | +324% | 0 | 0 | — |
case-10 | pass→pass | 10,119 | 6,291 | -38% | 1 | 1 | 0% | 1,712 | 8,884 | +419% | 0 | 0 | — |
case-11 | pass→pass | 17,939 | 12,146 | -32% | 1 | 1 | 0% | 2,825 | 9,692 | +243% | 0 | 0 | — |
case-12 | pass→pass | 6,995 | 4,413 | -37% | 1 | 1 | 0% | 1,027 | 8,622 | +740% | 0 | 0 | — |
case-13 | pass→pass | 10,757 | 8,346 | -22% | 1 | 1 | 0% | 1,645 | 9,118 | +454% | 0 | 0 | — |
case-23 | pass→pass | 8,594 | 5,220 | -39% | 1 | 1 | 0% | 1,458 | 8,993 | +517% | 0 | 0 | — |
case-14 | pass→pass | 9,077 | 8,001 | -12% | 1 | 1 | 0% | 1,555 | 9,051 | +482% | 0 | 0 | — |
case-15 | pass→pass | 8,693 | 6,000 | -31% | 1 | 1 | 0% | 1,518 | 8,953 | +490% | 0 | 0 | — |
case-16 | pass→pass | 7,631 | 5,355 | -30% | 1 | 1 | 0% | 1,088 | 8,686 | +698% | 0 | 0 | — |
case-17 | pass→pass | 11,752 | 7,116 | -39% | 1 | 1 | 0% | 1,908 | 9,130 | +379% | 0 | 0 | — |
case-18 | pass→pass | 7,418 | 5,906 | -20% | 1 | 1 | 0% | 1,526 | 9,126 | +498% | 0 | 0 | — |
case-19 | pass→pass | 13,670 | 7,934 | -42% | 1 | 1 | 0% | 2,379 | 9,140 | +284% | 0 | 0 | — |
case-20 | pass→pass | 4,353 | 4,277 | -2% | 1 | 1 | 0% | 605 | 8,562 | +1315% | 0 | 0 | — |
case-21 | fail→pass | 8,547 | 3,815 | -55% | 1 | 1 | 0% | 1,423 | 8,566 | +502% | 0 | 0 | — |
case-22 | fail→pass | 13,332 | 5,111 | -62% | 1 | 1 | 0% | 2,102 | 8,692 | +314% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +22 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.