@agenticmail/core 0.9.32 → 0.9.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/skills/built-in/accommodation-intake.json +132 -0
- package/dist/skills/built-in/add-driver-vehicle-household.json +133 -0
- package/dist/skills/built-in/admissions-waitlist-followup.json +129 -0
- package/dist/skills/built-in/anchor-and-counter-anchor.json +161 -0
- package/dist/skills/built-in/anti-social-engineering.json +153 -0
- package/dist/skills/built-in/anything-else-sweep.json +120 -0
- package/dist/skills/built-in/apologise-correctly.json +126 -0
- package/dist/skills/built-in/ask-for-in-person-meeting.json +114 -0
- package/dist/skills/built-in/attorney-new-client-intake.json +133 -0
- package/dist/skills/built-in/bant-discovery-call.json +125 -0
- package/dist/skills/built-in/book-new-patient-appointment.json +131 -0
- package/dist/skills/built-in/bookmark-close.json +113 -0
- package/dist/skills/built-in/bypass-i-am-the-supervisor.json +130 -0
- package/dist/skills/built-in/bypass-scripted-rep.json +142 -0
- package/dist/skills/built-in/calibrated-questions.json +155 -0
- package/dist/skills/built-in/call-911-fire.json +118 -0
- package/dist/skills/built-in/call-911-medical-emergency.json +126 -0
- package/dist/skills/built-in/call-911-violent-crime-in-progress.json +133 -0
- package/dist/skills/built-in/call-988-crisis-line.json +106 -0
- package/dist/skills/built-in/call-poison-control.json +115 -0
- package/dist/skills/built-in/call-police-non-emergency.json +114 -0
- package/dist/skills/built-in/call-with-person-in-distress.json +133 -0
- package/dist/skills/built-in/cancel-cable-fiber-no-retention-loop.json +156 -0
- package/dist/skills/built-in/cancel-policy-clean.json +130 -0
- package/dist/skills/built-in/capture-rep-identity.json +113 -0
- package/dist/skills/built-in/childcare-provider-intake.json +157 -0
- package/dist/skills/built-in/close-account-no-residual-fees.json +127 -0
- package/dist/skills/built-in/close-on-concrete-next-step.json +116 -0
- package/dist/skills/built-in/confirm-agreement-readback.json +134 -0
- package/dist/skills/built-in/confirm-next-step-ownership.json +113 -0
- package/dist/skills/built-in/contractor-estimate-request.json +142 -0
- package/dist/skills/built-in/court-clerk-administrative-inquiry.json +119 -0
- package/dist/skills/built-in/cpa-intake-call.json +134 -0
- package/dist/skills/built-in/day-of-flight-cancellation.json +127 -0
- package/dist/skills/built-in/de-escalate-angry-rep.json +114 -0
- package/dist/skills/built-in/decline-unsolicited-pitch.json +110 -0
- package/dist/skills/built-in/deliver-difficult-news.json +122 -0
- package/dist/skills/built-in/detect-fake-escalation-loops.json +140 -0
- package/dist/skills/built-in/detect-lies-and-contradictions.json +139 -0
- package/dist/skills/built-in/dispute-billing-code-eob.json +147 -0
- package/dist/skills/built-in/dispute-charge-reg-e-reg-z.json +131 -0
- package/dist/skills/built-in/dispute-credit-report-via-bank.json +128 -0
- package/dist/skills/built-in/dispute-denied-claim.json +143 -0
- package/dist/skills/built-in/dispute-security-deposit.json +130 -0
- package/dist/skills/built-in/dispute-usage-spike-meter-reread.json +120 -0
- package/dist/skills/built-in/dmv-vehicle-registration-renewal.json +120 -0
- package/dist/skills/built-in/document-call-promises.json +145 -0
- package/dist/skills/built-in/early-lease-termination.json +126 -0
- package/dist/skills/built-in/elite-line-escalation.json +107 -0
- package/dist/skills/built-in/equipment-swap-cable-router-modem.json +126 -0
- package/dist/skills/built-in/eu261-uk261-dot-compensation.json +113 -0
- package/dist/skills/built-in/file-fnol-auto-claim.json +130 -0
- package/dist/skills/built-in/file-habitability-complaint.json +115 -0
- package/dist/skills/built-in/financial-aid-appeal.json +128 -0
- package/dist/skills/built-in/follow-up-stalled-claim.json +118 -0
- package/dist/skills/built-in/get-past-gatekeeper.json +115 -0
- package/dist/skills/built-in/get-past-tier-1-script.json +130 -0
- package/dist/skills/built-in/handle-callback-stall.json +120 -0
- package/dist/skills/built-in/handle-outsourced-no-escalation.json +138 -0
- package/dist/skills/built-in/handle-send-me-an-email-deflection.json +112 -0
- package/dist/skills/built-in/handle-time-pressure.json +159 -0
- package/dist/skills/built-in/health-prior-auth-appeal.json +131 -0
- package/dist/skills/built-in/hoa-dispute.json +123 -0
- package/dist/skills/built-in/hold-time-strategy.json +137 -0
- package/dist/skills/built-in/hold-warmth-cold-rep.json +114 -0
- package/dist/skills/built-in/hotel-walk-over-recovery.json +114 -0
- package/dist/skills/built-in/humour-when-it-lands.json +127 -0
- package/dist/skills/built-in/i20-visa-dso.json +134 -0
- package/dist/skills/built-in/invoke-regulator-firmly.json +137 -0
- package/dist/skills/built-in/irrops-waiver-awareness.json +103 -0
- package/dist/skills/built-in/irs-payment-plan-setup.json +134 -0
- package/dist/skills/built-in/k12-iep-504-enrollment.json +134 -0
- package/dist/skills/built-in/late-add-petition.json +128 -0
- package/dist/skills/built-in/leave-of-absence-deferral.json +130 -0
- package/dist/skills/built-in/lock-in-terms-verbally.json +127 -0
- package/dist/skills/built-in/match-energy-keep-goal.json +120 -0
- package/dist/skills/built-in/medical-records-transfer.json +138 -0
- package/dist/skills/built-in/medical-withdrawal.json +131 -0
- package/dist/skills/built-in/mid-call-evidence-collection.json +159 -0
- package/dist/skills/built-in/mirror-technique.json +145 -0
- package/dist/skills/built-in/missed-connection-distressed-passenger.json +111 -0
- package/dist/skills/built-in/mortgage-loan-hardship.json +130 -0
- package/dist/skills/built-in/move-out-walkthrough.json +114 -0
- package/dist/skills/built-in/multi-channel-escalation.json +141 -0
- package/dist/skills/built-in/multi-issue-tradeoffs.json +155 -0
- package/dist/skills/built-in/negotiate-rent-renewal.json +123 -0
- package/dist/skills/built-in/no-as-opening.json +154 -0
- package/dist/skills/built-in/not-sound-like-spam-dialer.json +118 -0
- package/dist/skills/built-in/outage-credit-applied.json +127 -0
- package/dist/skills/built-in/passport-expedite-or-appointment.json +123 -0
- package/dist/skills/built-in/pediatric-school-forms.json +141 -0
- package/dist/skills/built-in/personal-trainer-discovery.json +138 -0
- package/dist/skills/built-in/pharmacy-callback.json +134 -0
- package/dist/skills/built-in/pivot-mid-call.json +141 -0
- package/dist/skills/built-in/port-mobile-number-survive-retention.json +127 -0
- package/dist/skills/built-in/prescription-refill-followup.json +132 -0
- package/dist/skills/built-in/push-past-invented-policy.json +159 -0
- package/dist/skills/built-in/rapport-opening-30-seconds.json +130 -0
- package/dist/skills/built-in/reach-executive-office.json +137 -0
- package/dist/skills/built-in/read-vocal-cues.json +139 -0
- package/dist/skills/built-in/read-vocal-tone.json +159 -0
- package/dist/skills/built-in/realestate-agent-vetting.json +144 -0
- package/dist/skills/built-in/receive-difficult-news.json +115 -0
- package/dist/skills/built-in/recording-claim-conversation-legally.json +121 -0
- package/dist/skills/built-in/recover-summary-refusal.json +121 -0
- package/dist/skills/built-in/reengage-ghosted-lead.json +115 -0
- package/dist/skills/built-in/referral-followup-without-burning.json +116 -0
- package/dist/skills/built-in/referral-prior-authorization.json +130 -0
- package/dist/skills/built-in/refuse-the-split.json +142 -0
- package/dist/skills/built-in/refuse-upsell-at-close.json +114 -0
- package/dist/skills/built-in/rental-car-counter-defense.json +116 -0
- package/dist/skills/built-in/rental-scam-report.json +125 -0
- package/dist/skills/built-in/replace-lost-stolen-card-expedited.json +139 -0
- package/dist/skills/built-in/report-downed-line-gas-smell-911-triage.json +130 -0
- package/dist/skills/built-in/report-elder-or-child-abuse.json +117 -0
- package/dist/skills/built-in/report-fbi-tip.json +109 -0
- package/dist/skills/built-in/report-fraud-ic3-or-ftc.json +117 -0
- package/dist/skills/built-in/report-fraudulent-transaction.json +126 -0
- package/dist/skills/built-in/report-power-outage-get-etr.json +116 -0
- package/dist/skills/built-in/report-urgent-maintenance.json +123 -0
- package/dist/skills/built-in/request-credit-limit-increase.json +126 -0
- package/dist/skills/built-in/request-supervisor-gracefully.json +129 -0
- package/dist/skills/built-in/request-welfare-check.json +127 -0
- package/dist/skills/built-in/request-written-confirmation.json +113 -0
- package/dist/skills/built-in/reschedule-appointment.json +121 -0
- package/dist/skills/built-in/reset-by-callback.json +143 -0
- package/dist/skills/built-in/resist-urgency-manipulation.json +152 -0
- package/dist/skills/built-in/revisit-totaling-decision.json +125 -0
- package/dist/skills/built-in/roadside-assistance-dispatch.json +132 -0
- package/dist/skills/built-in/roommate-replacement.json +121 -0
- package/dist/skills/built-in/same-day-urgent-appointment.json +130 -0
- package/dist/skills/built-in/schedule-rental-viewing.json +111 -0
- package/dist/skills/built-in/service-move-shutoff-start-no-overlap.json +129 -0
- package/dist/skills/built-in/social-security-replacement-card.json +122 -0
- package/dist/skills/built-in/specialist-doctor-booking.json +136 -0
- package/dist/skills/built-in/spot-bait-and-switch.json +155 -0
- package/dist/skills/built-in/stop-recurring-ach.json +127 -0
- package/dist/skills/built-in/switch-postpaid-to-prepaid-mid-cycle.json +130 -0
- package/dist/skills/built-in/tactical-empathy-labeling.json +147 -0
- package/dist/skills/built-in/therapist-intake-call.json +133 -0
- package/dist/skills/built-in/train-cancellation-refund-rebook.json +104 -0
- package/dist/skills/built-in/transcript-request.json +128 -0
- package/dist/skills/built-in/travel-insurance-claim-on-the-road.json +114 -0
- package/dist/skills/built-in/travel-notice-unlock-card.json +119 -0
- package/dist/skills/built-in/unemployment-claim-status-and-appeal.json +123 -0
- package/dist/skills/built-in/uscis-case-status-and-biometrics.json +125 -0
- package/dist/skills/built-in/utility-deposit-waiver.json +122 -0
- package/dist/skills/built-in/utility-payment-plan-avoid-disconnect.json +122 -0
- package/dist/skills/built-in/verify-insurance-coverage-pre-procedure.json +140 -0
- package/dist/skills/built-in/verify-out-of-network-coverage.json +129 -0
- package/dist/skills/built-in/veteran-benefits-community-college.json +134 -0
- package/dist/skills/built-in/veterinary-new-patient-intake.json +135 -0
- package/dist/skills/built-in/visa-boarding-denial-recovery.json +115 -0
- package/dist/skills/built-in/vital-records-certificate-copy.json +120 -0
- package/dist/skills/built-in/voicemail-that-gets-called-back.json +114 -0
- package/dist/skills/built-in/voter-registration-and-ballot.json +124 -0
- package/dist/skills/built-in/walkaway-threats.json +159 -0
- package/dist/skills/built-in/wedding-vendor-intake.json +149 -0
- package/dist/skills/built-in/when-to-stop-being-polite.json +161 -0
- package/dist/skills/built-in/wire-funds-safely.json +129 -0
- package/package.json +1 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "get-past-gatekeeper",
|
|
3
|
+
"name": "Get Past a Gatekeeper to the Decision-Maker",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"category": "other",
|
|
6
|
+
"tags": [
|
|
7
|
+
"cold-call",
|
|
8
|
+
"gatekeeper",
|
|
9
|
+
"executive-assistant",
|
|
10
|
+
"phone-call",
|
|
11
|
+
"routing",
|
|
12
|
+
"outreach-sales"
|
|
13
|
+
],
|
|
14
|
+
"description": "When the agent calls a target organisation on behalf of the operator and reaches a receptionist, executive assistant, or main-line gatekeeper, navigate to the right decision-maker with honesty and respect — not tricks.",
|
|
15
|
+
"disclaimer": "Skills assume the call is solicited by the operator. NEVER use these to power a mass-cold-call campaign without the operator's explicit per-prospect authorisation.",
|
|
16
|
+
"context": {
|
|
17
|
+
"when_to_use": "Operator has asked the agent to reach a specific person (named or by role) at a company, and the call is intercepted by a gatekeeper. The operator has a legitimate, named reason for the call (introduction, follow-up, referral, prior touch).",
|
|
18
|
+
"preconditions": [
|
|
19
|
+
"Operator has authorised this specific outreach (not a mass campaign).",
|
|
20
|
+
"Agent has the target's name or, at minimum, a precise role title.",
|
|
21
|
+
"Agent has a one-sentence honest reason for the call ready.",
|
|
22
|
+
"Agent has the referring party's name on hand if this is a referral."
|
|
23
|
+
],
|
|
24
|
+
"estimated_call_duration_minutes": 4
|
|
25
|
+
},
|
|
26
|
+
"principles": [
|
|
27
|
+
"The gatekeeper is a colleague, not an obstacle. Treating them as an obstacle is the fastest way to be permanently blocked.",
|
|
28
|
+
"Be specific about who you want and why. Vagueness reads as sales; specificity reads as legitimate business.",
|
|
29
|
+
"Never lie about who you are, who you represent, or what the call is about. Gatekeepers verify and have long memories.",
|
|
30
|
+
"Match the formality of the receiving organisation. A law firm gatekeeper expects more formality than a startup's front desk.",
|
|
31
|
+
"If the gatekeeper says 'they're not available', accept it on the first ask. Pressing turns a soft no into a hard no."
|
|
32
|
+
],
|
|
33
|
+
"phrases": {
|
|
34
|
+
"opener_named": "Hi, this is [agent name] calling from [operator name]'s office. Could you put me through to [target full name], please?",
|
|
35
|
+
"opener_referral": "Hi, this is [agent name] on behalf of [operator name]. [Referrer name] suggested I reach out to [target name] about [topic] — is [target] the right person, and could I be put through?",
|
|
36
|
+
"opener_role": "Hi, this is [agent name] calling for [operator name]. Could you tell me who handles [specific function] there, and whether they're available to speak briefly?",
|
|
37
|
+
"honest_reason": "It's about [one-sentence honest topic]. I'm not selling anything on this call — [operator] just wants to introduce themselves / follow up on [prior touch].",
|
|
38
|
+
"voicemail_redirect": "Thank you. Could you send me to their voicemail, or is there a better time to try them?",
|
|
39
|
+
"polite_decline_accept": "No problem at all — thank you for checking. Could I leave a brief message, or would email be better for a first touch?",
|
|
40
|
+
"name_request": "I want to make sure I send the right thing in writing — could I get your name? Thanks, [name], appreciate it."
|
|
41
|
+
},
|
|
42
|
+
"tactics": [
|
|
43
|
+
{
|
|
44
|
+
"name": "Lead with the target's name if you have it",
|
|
45
|
+
"when": "You know exactly who you want to speak to.",
|
|
46
|
+
"script": "Use the `opener_named` phrase. Saying the target's first and last name signals you actually know them, not that you're dialing a list.",
|
|
47
|
+
"priority": 1
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "Cite the referrer immediately if there is one",
|
|
51
|
+
"when": "This call exists because someone introduced the operator.",
|
|
52
|
+
"script": "Use `opener_referral`. The referrer's name does most of the work — drop it in the first sentence, not deep in the call.",
|
|
53
|
+
"priority": 2
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "If you only have a role, ask who owns it",
|
|
57
|
+
"when": "Operator only knows 'the head of partnerships' or similar.",
|
|
58
|
+
"script": "Use `opener_role`. Phrase it as a discovery question, not a demand. Gatekeepers respond well to 'help me figure out who I should be talking to'.",
|
|
59
|
+
"priority": 3
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"name": "Offer the honest reason BEFORE being asked",
|
|
63
|
+
"when": "Gatekeeper pauses or asks 'what is this regarding?'.",
|
|
64
|
+
"script": "Use the `honest_reason` phrase pre-emptively on calls into formal organisations. It disarms the screening question.",
|
|
65
|
+
"priority": 4
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "Ask the gatekeeper's name and remember it",
|
|
69
|
+
"when": "After the gatekeeper has spent more than ~20 seconds helping.",
|
|
70
|
+
"script": "Use `name_request`. Logging the gatekeeper's name and using it on future calls compounds enormously — within 2-3 calls they recognise you as 'one of the good ones'.",
|
|
71
|
+
"priority": 5
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "Accept the first soft no",
|
|
75
|
+
"when": "Gatekeeper says target is in a meeting / unavailable / travelling.",
|
|
76
|
+
"script": "Use `polite_decline_accept`. Ask for best time or for voicemail. Do NOT ask twice in the same call to override the answer."
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"boundaries": [
|
|
80
|
+
"Do NOT pretend to be a personal friend, family member, or colleague of the target.",
|
|
81
|
+
"Do NOT claim the target 'is expecting your call' unless it is literally true.",
|
|
82
|
+
"Do NOT use the 'I'll just leave my number, they have my email' trick to extract direct lines.",
|
|
83
|
+
"Do NOT push past a gatekeeper who has clearly said no. Try a different channel (email, LinkedIn) next instead.",
|
|
84
|
+
"Do NOT call back the same day after being told the target is unavailable — that escalates to harassment fast."
|
|
85
|
+
],
|
|
86
|
+
"success_signals": [
|
|
87
|
+
"Gatekeeper transfers the call to the target.",
|
|
88
|
+
"Gatekeeper provides a direct dial, email, or 'best time to call'.",
|
|
89
|
+
"Gatekeeper offers to take a detailed message and confirms it will be passed on.",
|
|
90
|
+
"Gatekeeper confirms the right role/owner for the topic."
|
|
91
|
+
],
|
|
92
|
+
"failure_signals": [
|
|
93
|
+
"Gatekeeper firmly says 'we don't take cold calls — send an email'.",
|
|
94
|
+
"Gatekeeper repeats target is unavailable on a second probe.",
|
|
95
|
+
"Gatekeeper asks the agent to remove them from a list (treat as a hard stop).",
|
|
96
|
+
"Gatekeeper recognises this is the third call this week and is now cold."
|
|
97
|
+
],
|
|
98
|
+
"exit_strategy": {
|
|
99
|
+
"on_success": "Note the gatekeeper's name and any callback window they suggested. If transferred, lean into the voicemail or live-call skill depending on what answers.",
|
|
100
|
+
"on_failure": "Thank the gatekeeper warmly by name, ask for the best written channel (general inbox vs. role-specific email), and end the call. Log a 'do not retry by phone for N days' note for the operator.",
|
|
101
|
+
"follow_ups": [
|
|
102
|
+
"Email the operator: who answered, gatekeeper's name, what was learned (target's correct role / spelling / best channel).",
|
|
103
|
+
"If a callback window was given, schedule the next attempt inside that window — not earlier."
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
"required_user_info": [
|
|
107
|
+
"Operator's name and the name of the company/identity being represented",
|
|
108
|
+
"Target's name OR precise role at the target organisation",
|
|
109
|
+
"One honest sentence about why the call is happening",
|
|
110
|
+
"Referrer's name if applicable",
|
|
111
|
+
"Whether voicemail is acceptable as a fallback"
|
|
112
|
+
],
|
|
113
|
+
"contributed_by": "sales-outbound agent (v0.9.87 community drop)",
|
|
114
|
+
"updated_at": "2026-05-20T06:09:47Z"
|
|
115
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "get-past-tier-1-script",
|
|
3
|
+
"name": "Get Past the Tier-1 Script-Bound Rep",
|
|
4
|
+
"version": "1.0.1",
|
|
5
|
+
"category": "customer-service",
|
|
6
|
+
"tags": [
|
|
7
|
+
"escalation",
|
|
8
|
+
"phone-call",
|
|
9
|
+
"tier-1",
|
|
10
|
+
"scripts",
|
|
11
|
+
"authority",
|
|
12
|
+
"front-line",
|
|
13
|
+
"customer-support"
|
|
14
|
+
],
|
|
15
|
+
"description": "Move a call out of the front-line script-and-knowledge-base loop and into the hands of someone with real decision authority, without making the tier-1 rep feel demeaned or marked as difficult.",
|
|
16
|
+
"disclaimer": null,
|
|
17
|
+
"context": {
|
|
18
|
+
"when_to_use": "The rep is clearly working from a flowchart: repeating canned phrases, putting you on hold to 'check' the same answer, offering only the options the IVR already offered. You need a human with authority to make exceptions. NOT for cases where tier-1 can actually solve it — pushing past tier-1 prematurely just adds 20 minutes of transfer.",
|
|
19
|
+
"preconditions": [
|
|
20
|
+
"User has stated the goal clearly at least once and the rep's response was clearly scripted.",
|
|
21
|
+
"User has the account number / verification info ready (you only get one shot at a warm handoff).",
|
|
22
|
+
"Call has been going at least 3-4 minutes — long enough to confirm tier-1 is stuck, short enough that you haven't burned goodwill yet."
|
|
23
|
+
],
|
|
24
|
+
"estimated_call_duration_minutes": 12
|
|
25
|
+
},
|
|
26
|
+
"principles": [
|
|
27
|
+
"Tier-1 reps are graded on call-handle-time and first-call-resolution. A polite escalation request that LOOKS like an FCR (warm handoff, agreed by both sides) is your best leverage.",
|
|
28
|
+
"Never tell a rep they are 'just reading a script'. Even if true, that's the fastest way to get marked 'difficult' in the CRM notes and watch every future rep treat you accordingly.",
|
|
29
|
+
"Listen for tells: 'per our policy', 'the system won't let me', 'I don't have access to that' — each one is a flag that you've hit the edge of tier-1 authority. Don't argue with the wall; ask who's on the other side of it.",
|
|
30
|
+
"The magic word is 'who'. 'WHO can help me with this?' is non-confrontational and forces the rep to name a team or a tool. 'Why can't YOU help me?' is the wrong question.",
|
|
31
|
+
"Give the rep a clean way out. 'I know this isn't in your usual workflow' is a face-saving sentence that converts adversaries into allies.",
|
|
32
|
+
"Specificity escalates faster than emotion. 'I need someone who can issue a credit over $50' beats 'I need a manager NOW'.",
|
|
33
|
+
"Mirror their pacing. Scripted reps speak in pre-loaded chunks; if you speak in calm, slow, complete sentences, you sound competent and they unconsciously raise your perceived seniority."
|
|
34
|
+
],
|
|
35
|
+
"phrases": {
|
|
36
|
+
"soft_diagnostic": "I want to make sure I'm asking the right team — does this kind of request usually get handled at your level, or is it something a different group owns?",
|
|
37
|
+
"name_the_authority": "Who in your organization is allowed to [specific action: waive this fee / restore the service / issue a credit over $X]? I want to make sure we're working with the right person.",
|
|
38
|
+
"warm_handoff_request": "It sounds like this might be outside what your team can adjust. Could you do a warm transfer — stay on the line, brief them, and then drop off — so I don't have to start over?",
|
|
39
|
+
"face_saver": "I can tell you've already tried the obvious options — thanks for that. Let's loop in whoever owns the exception process so we don't keep going in circles.",
|
|
40
|
+
"no_blame_escalation": "Nothing you've done is wrong — I just don't think this is a tier-1 decision. Who's the next layer up?",
|
|
41
|
+
"preempt_the_loop": "Before you put me on hold to check again, can I ask — is the answer going to be different from what you've already told me? If not, I'd rather use that time to get to someone who can change the answer.",
|
|
42
|
+
"specific_authority_ask": "I need to speak with someone who has authority to [action]. That's a 'yes I can do that' / 'no I can't' question — could you confirm whether that's you, and if not, who?"
|
|
43
|
+
},
|
|
44
|
+
"tactics": [
|
|
45
|
+
{
|
|
46
|
+
"name": "Diagnose the ceiling before pushing through it",
|
|
47
|
+
"when": "First 2-3 minutes — you suspect tier-1 but aren't certain.",
|
|
48
|
+
"script": "Use `soft_diagnostic`. Listen for whether the rep claims authority ('yes I can do that') or deflects ('let me check / our policy says / the system'). Deflection = ceiling confirmed.",
|
|
49
|
+
"priority": 1,
|
|
50
|
+
"decision_point": "If the rep says 'yes I can do that' and then actually does it, STOP escalating. Tier-1 just solved your problem. Don't ask for a supervisor out of habit."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "Name the authority, not the title",
|
|
54
|
+
"when": "Ceiling confirmed — you need to go up but don't want to say 'supervisor' yet (that triggers defensive scripts).",
|
|
55
|
+
"script": "Use `name_the_authority`. Asking for 'the team that handles X' is softer than 'a manager' and gets you to the right place faster, because some companies don't escalate vertically — they escalate sideways to a specialist queue.",
|
|
56
|
+
"priority": 2
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "Request a warm handoff",
|
|
60
|
+
"when": "Rep agrees to transfer.",
|
|
61
|
+
"script": "Use `warm_handoff_request`. Cold transfers dump you into a queue and you re-verify, re-explain, and lose context. Insist (politely) that the rep stays on the line to brief the next person.",
|
|
62
|
+
"priority": 3,
|
|
63
|
+
"decision_point": "If the rep says they can't do a warm transfer, ask WHY. 'Our system doesn't support it' = real; 'I'll just transfer you now' = they're trying to dump you. In the second case, get the rep's name, ID, and the direct number/extension of where you're being sent BEFORE accepting the transfer."
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"name": "Pre-empt the hold loop",
|
|
67
|
+
"when": "Rep says 'let me put you on hold and check' for the second time on the same question.",
|
|
68
|
+
"script": "Use `preempt_the_loop`. Putting you on hold to ask the same person the same question is the cheapest stall — interrupting it politely is fair game.",
|
|
69
|
+
"priority": 4
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "Convert the rep into your advocate",
|
|
73
|
+
"when": "After 1-2 escalation requests, before going harder.",
|
|
74
|
+
"script": "Use `face_saver` + `no_blame_escalation`. A rep who feels respected will sometimes proactively flag your account 'VIP' or 'priority callback' in the notes — that's worth more than any single escalation.",
|
|
75
|
+
"priority": 5
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"name": "Force a binary on authority",
|
|
79
|
+
"when": "You've been polite twice and the rep is still circling.",
|
|
80
|
+
"script": "Use `specific_authority_ask`. Asking 'is that a yes/no you can give me' makes it socially awkward to keep stalling — the rep almost always either commits or transfers.",
|
|
81
|
+
"priority": 6,
|
|
82
|
+
"decision_point": "If the answer is 'I can't promise but let me try one more thing', give them ONE more shot (90 seconds). If they fail, transfer time. If they hesitate to even attempt — escalate immediately."
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "Capture the breadcrumb on the way up",
|
|
86
|
+
"when": "Moment of transfer.",
|
|
87
|
+
"script": "Before the rep transfers, capture: their name, their employee ID or initials, the department you're being sent to, and the case/ticket number they've opened. If the transfer fails, you have a thread to pick back up.",
|
|
88
|
+
"priority": 7
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
"boundaries": [
|
|
92
|
+
"Do NOT mock, raise voice, or call the rep incompetent. The rep can disconnect, mark your account, and you start over from worse than zero.",
|
|
93
|
+
"Do NOT lie about being a lawyer, journalist, or executive contact unless the user actually is one. It works once and burns the relationship for life.",
|
|
94
|
+
"Do NOT demand a supervisor in the first 90 seconds — it triggers a defensive script and ALL tier-1s are trained to deflect early supervisor asks.",
|
|
95
|
+
"Do NOT accept a cold transfer to 'a queue' without first capturing the rep's name, the target department, and the case number.",
|
|
96
|
+
"Do NOT volunteer information the rep didn't ask for. Every extra detail is a new place the script can route you to.",
|
|
97
|
+
"Do NOT use threats (lawsuit, social media, regulator) at the tier-1 layer — wrong altitude. Save those for after a real supervisor has also said no."
|
|
98
|
+
],
|
|
99
|
+
"success_signals": [
|
|
100
|
+
"Rep names a specific team or specialist queue ('that would be our retention team' / 'billing exceptions handles that').",
|
|
101
|
+
"Rep offers a warm transfer without being asked.",
|
|
102
|
+
"Rep says 'let me see what I can do' with a noticeable change in tone — they've switched from script to discretion.",
|
|
103
|
+
"Rep opens a case/ticket number proactively.",
|
|
104
|
+
"Rep volunteers a callback time or direct extension."
|
|
105
|
+
],
|
|
106
|
+
"failure_signals": [
|
|
107
|
+
"Rep repeats the same scripted line verbatim more than twice.",
|
|
108
|
+
"Rep refuses to give their name or employee ID.",
|
|
109
|
+
"Hold times escalate (30s → 2min → 5min) without new information.",
|
|
110
|
+
"Rep claims 'there is no supervisor available' more than once — that's almost always false.",
|
|
111
|
+
"Rep starts citing 'our terms of service' as a closer — that's a polite hang-up warning."
|
|
112
|
+
],
|
|
113
|
+
"exit_strategy": {
|
|
114
|
+
"on_success": "Capture the new rep's name + ID + department, restate the problem in one sentence, and let them speak. Do NOT re-litigate everything the tier-1 already heard — the warm handoff did that for you.",
|
|
115
|
+
"on_failure": "Ask for the rep's name and ID, the case number opened, and a callback number for the team you should have been transferred to. End politely. Use `request-supervisor-gracefully` on the callback, or pivot to `multi-channel-escalation`.",
|
|
116
|
+
"follow_ups": [
|
|
117
|
+
"Log: time of call, rep name + ID, case number, what was promised and what was refused.",
|
|
118
|
+
"If you got a case number, reference it on every subsequent call — it short-circuits re-verification.",
|
|
119
|
+
"If transfer failed mid-call, call back within 24h while the case is fresh — older cases get harder to find in some CRMs."
|
|
120
|
+
]
|
|
121
|
+
},
|
|
122
|
+
"required_user_info": [
|
|
123
|
+
"Account identifier (number, login email, phone on file)",
|
|
124
|
+
"The specific outcome you want stated in one sentence",
|
|
125
|
+
"What tier-1 has already said no to (or you'll repeat the loop)",
|
|
126
|
+
"Any prior case/ticket numbers from earlier calls"
|
|
127
|
+
],
|
|
128
|
+
"contributed_by": "support-escalator agent (v0.9.87 community drop)",
|
|
129
|
+
"updated_at": "2026-05-20T06:09:47Z"
|
|
130
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "handle-callback-stall",
|
|
3
|
+
"name": "Handle the \"We'll Call You Back\" Stall",
|
|
4
|
+
"version": "1.0.1",
|
|
5
|
+
"category": "other",
|
|
6
|
+
"tags": [
|
|
7
|
+
"closing",
|
|
8
|
+
"stall",
|
|
9
|
+
"callback",
|
|
10
|
+
"anti-pattern",
|
|
11
|
+
"phone-call",
|
|
12
|
+
"closing-commitment"
|
|
13
|
+
],
|
|
14
|
+
"description": "When a rep says 'we'll call you back', convert that vague intent into a specific, accountable, named commitment — or refuse it. The unbounded callback is the single biggest time sink in customer-service workflows. Most callbacks never happen. Treat the phrase as a stall, not a plan.",
|
|
15
|
+
"disclaimer": null,
|
|
16
|
+
"context": {
|
|
17
|
+
"when_to_use": "Any time a rep proposes ending the current call with a 'we'll get back to you' — whether for research, escalation, system limitations, or any other reason. ALSO use when a rep hints they'd rather end the call than continue working the issue.",
|
|
18
|
+
"preconditions": [
|
|
19
|
+
"You're still on the call with the rep who proposed the callback.",
|
|
20
|
+
"You have not yet agreed to end the call.",
|
|
21
|
+
"You can keep the line open for another 3-5 minutes to pin specifics."
|
|
22
|
+
],
|
|
23
|
+
"estimated_call_duration_minutes": 5
|
|
24
|
+
},
|
|
25
|
+
"principles": [
|
|
26
|
+
"A callback without a named owner is functionally a callback that won't happen. Companies route callbacks to queues; queues route to whoever's next; whoever's next has no context.",
|
|
27
|
+
"A callback without a deadline is functionally indefinite. 'In a few days' becomes weeks.",
|
|
28
|
+
"A callback without a ticket / case / reference number is unverifiable. If you call asking 'where's my callback?', they need a key to look it up.",
|
|
29
|
+
"Push to resolve on THIS call whenever possible. Even waiting on hold for 20 minutes is usually cheaper than the round-trip cost of a callback that needs to be chased.",
|
|
30
|
+
"Get the callback number FROM you to THEM — not the other way around. 'I'll be at this number at this time, calling YOU then' shifts the work back."
|
|
31
|
+
],
|
|
32
|
+
"phrases": {
|
|
33
|
+
"first_resistance": "Before we go to a callback — is there any way we can resolve this on the line today? Even if it takes a longer hold. I find callbacks often slip through the cracks for both of us.",
|
|
34
|
+
"owner_pin": "If we do go to a callback, who specifically will be calling — you, a named teammate, or just whoever's next in the queue? I'd like a name so I know who to ask for if I have to follow up.",
|
|
35
|
+
"deadline_pin": "What's the latest I should expect to hear by? I'd rather you over-promise on the time and beat it than leave it open-ended.",
|
|
36
|
+
"ticket_pin": "What's the case or ticket number for the callback? If I don't hear back by [deadline], I'll call in referencing that number — saves us starting over.",
|
|
37
|
+
"no_show_protocol": "If the callback doesn't happen on time, what's the best number for me to call, and is there a way to flag it as 'callback overdue' rather than starting fresh?",
|
|
38
|
+
"reverse_callback": "Rather than waiting, can I be the one to call back at [specific time]? I'll ask for you / [named rep] directly. I find that's more reliable.",
|
|
39
|
+
"escalate_stall": "Thanks for offering the callback — but I've been burned before. Could we get a supervisor on now to either resolve this today or formally schedule the callback with a named owner?",
|
|
40
|
+
"graceful_close_success": "Got it: callback by [deadline], from [name or team], ticket [N]. If I don't hear by then, I'll call back referencing [N]. Thank you.",
|
|
41
|
+
"graceful_close_failure": "I'm not comfortable closing on an open-ended callback — could I speak with a supervisor before we end the call?"
|
|
42
|
+
},
|
|
43
|
+
"tactics": [
|
|
44
|
+
{
|
|
45
|
+
"name": "Resist the callback first",
|
|
46
|
+
"when": "Rep first proposes 'we'll call you back'.",
|
|
47
|
+
"script": "Use the `first_resistance` phrase. Many callbacks are offered because the rep is approaching their wrap time or doesn't want to hold — pushing back gently often unlocks resolution on the live call.",
|
|
48
|
+
"priority": 1
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "Pin the owner",
|
|
52
|
+
"when": "Callback is genuinely required (research, system update, escalation).",
|
|
53
|
+
"script": "Use the `owner_pin` phrase. 'Someone from our team will reach out' = nobody. A name + ID is the minimum.",
|
|
54
|
+
"priority": 2
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "Pin the deadline",
|
|
58
|
+
"when": "Owner has been named.",
|
|
59
|
+
"script": "Use the `deadline_pin` phrase. Force a specific date AND time-of-day if possible. 'By Friday' is weaker than 'by 5pm Friday'.",
|
|
60
|
+
"priority": 3
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "Pin the ticket / case number",
|
|
64
|
+
"when": "Owner and deadline pinned.",
|
|
65
|
+
"script": "Use the `ticket_pin` phrase. The ticket is the recovery key. Without it, a failed callback turns into a fresh call from scratch.",
|
|
66
|
+
"priority": 4
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "Set the no-show protocol upfront",
|
|
70
|
+
"when": "Everything pinned.",
|
|
71
|
+
"script": "Use the `no_show_protocol` phrase. This rehearses the recovery path while you still have the rep — they may volunteer a direct line or escalation route they wouldn't share later.",
|
|
72
|
+
"priority": 5
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"name": "Offer to reverse the callback",
|
|
76
|
+
"when": "Rep can't pin an owner, deadline, or ticket reliably.",
|
|
77
|
+
"script": "Use the `reverse_callback` phrase. Customer-initiated callbacks with prior reference numbers complete vastly more often than company-initiated ones. Take ownership when possible.",
|
|
78
|
+
"priority": 6
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"name": "Escalate if pinning fails",
|
|
82
|
+
"when": "Two or more of owner / deadline / ticket cannot be pinned.",
|
|
83
|
+
"script": "Use the `escalate_stall` phrase. An unstructured callback is essentially the rep wishing you well. Supervisors can either resolve live OR commit to a structured callback the front line can't.",
|
|
84
|
+
"priority": 7
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"boundaries": [
|
|
88
|
+
"Do NOT accept 'we'll call you back' without at least: a name OR team, a deadline, and a reference number. Two of three is the minimum bar.",
|
|
89
|
+
"Do NOT let the rep set the callback time at a moment when the user is unavailable — pin a window that actually works.",
|
|
90
|
+
"Do NOT promise to wait silently. Tell the rep what your follow-up plan is ('I'll call back referencing [N] if I don't hear by [deadline]') so they know the callback failure path is real.",
|
|
91
|
+
"Do NOT accept callback to a number the user doesn't control or check ('I'll call your home line' when the user only checks mobile)."
|
|
92
|
+
],
|
|
93
|
+
"success_signals": [
|
|
94
|
+
"Rep names a specific person or named team who will call.",
|
|
95
|
+
"Rep gives a deadline tighter than the user expected.",
|
|
96
|
+
"Rep volunteers a direct extension or queue identifier for the no-show recovery path.",
|
|
97
|
+
"Rep agrees to send the ticket number in writing before hanging up."
|
|
98
|
+
],
|
|
99
|
+
"failure_signals": [
|
|
100
|
+
"Rep waffles on the owner ('someone will get back to you').",
|
|
101
|
+
"Rep gives no deadline or a wildly open one ('within 30 days').",
|
|
102
|
+
"Rep refuses or fails to provide a ticket number.",
|
|
103
|
+
"Rep gets defensive when you push for specifics — strong signal the callback isn't real."
|
|
104
|
+
],
|
|
105
|
+
"exit_strategy": {
|
|
106
|
+
"on_success": "Log: callback owner, deadline, ticket number, no-show recovery path. Calendar the deadline + a buffer (e.g. deadline + 2 hours). At the buffer, initiate the user-side callback per the no-show protocol.",
|
|
107
|
+
"on_failure": "Escalate to a supervisor before closing. If supervisor also cannot structure the callback, treat the issue as effectively unresolved and consider opening a formal complaint case as the actual artifact.",
|
|
108
|
+
"follow_ups": [
|
|
109
|
+
"If the callback happens: immediately re-run `capture-rep-identity` and `lock-in-terms-verbally` on the new call.",
|
|
110
|
+
"If the callback fails: call in with the original ticket number and refuse to re-tell the story from scratch — 'I have ticket [N], please pull it up'."
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
"required_user_info": [
|
|
114
|
+
"A reliable callback number AND a time window when the user can answer",
|
|
115
|
+
"Tolerance threshold: how long the user is willing to wait before escalating",
|
|
116
|
+
"Authority to escalate or open a complaint case if pinning fails"
|
|
117
|
+
],
|
|
118
|
+
"contributed_by": "closing-commitment agent (v0.9.87 community drop)",
|
|
119
|
+
"updated_at": "2026-05-20T06:09:47Z"
|
|
120
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "handle-outsourced-no-escalation",
|
|
3
|
+
"name": "Handle Outsourced Support That Cannot Escalate",
|
|
4
|
+
"version": "1.0.1",
|
|
5
|
+
"category": "customer-service",
|
|
6
|
+
"tags": [
|
|
7
|
+
"escalation",
|
|
8
|
+
"outsourced",
|
|
9
|
+
"BPO",
|
|
10
|
+
"phone-call",
|
|
11
|
+
"routing",
|
|
12
|
+
"bypass",
|
|
13
|
+
"customer-support"
|
|
14
|
+
],
|
|
15
|
+
"description": "Recognize when you've reached an outsourced BPO (business process outsourcer) that genuinely has no escalation path to the actual company — and route around it to reach the brand's own internal escalation team or corporate office.",
|
|
16
|
+
"disclaimer": null,
|
|
17
|
+
"context": {
|
|
18
|
+
"when_to_use": "Several signals point to outsourced support: significant background noise (large call-center room), heavy accent suggesting offshore location for a domestic-US brand, scripted answers that don't match your actual issue, rep can't access certain account features ('our system doesn't show that'), rep refers to 'the client' or 'the company' as a third party. The rep may be competent and well-meaning but structurally limited.",
|
|
19
|
+
"preconditions": [
|
|
20
|
+
"User has already attempted standard escalation with this rep / queue at least once.",
|
|
21
|
+
"User is willing to invest research time to find the brand's internal channels (Office of the President, executive relations, social-care team).",
|
|
22
|
+
"User stays patient with the BPO rep — they're often skilled professionals whose hands are tied by their contract."
|
|
23
|
+
],
|
|
24
|
+
"estimated_call_duration_minutes": 22
|
|
25
|
+
},
|
|
26
|
+
"principles": [
|
|
27
|
+
"Outsourced support is a contract relationship. The BPO has a contract with the brand specifying EXACTLY what they can and can't do. The rep isn't refusing to help out of laziness — they literally cannot make decisions outside their contract. Treat them with respect; they're as constrained as you are.",
|
|
28
|
+
"The fastest path is NOT to argue with the BPO rep. It's to confirm the limitation, capture documentation, and pivot to a different access point to the actual brand.",
|
|
29
|
+
"Tells that you've reached a BPO: rep refers to 'the client' or 'the partner' (meaning the brand they're outsourcing for), rep can't transfer 'outside our team', rep's call-center has audibly different noise/scale than the brand would suggest, rep apologizes for tools they obviously don't control, time-of-day mismatch (US brand answered at 2am US time = likely offshore BPO).",
|
|
30
|
+
"Every BPO contract has SOMEONE on the brand side who manages the relationship. You can't reach them directly, but they exist. Your path is around the BPO, not through it.",
|
|
31
|
+
"Decision point — am I trying to fix this on THIS call, or am I gathering enough info to escape to a different channel? Once you've identified BPO, the answer is almost always 'escape' — but the call still has value because the rep can give you names, case numbers, and the brand-side address for written escalations.",
|
|
32
|
+
"BPO reps often hold internal knowledge a customer wouldn't have: the brand-side 'escalation address', the official 'cases the BPO can't handle' workflow, the contractual carve-outs. Ask for it nicely.",
|
|
33
|
+
"Some BPOs handle ALL escalations including supervisor — so 'speaking to the supervisor' just gets you another BPO employee with the same contract limitations. Don't escalate vertically inside the BPO; escalate sideways out of it."
|
|
34
|
+
],
|
|
35
|
+
"phrases": {
|
|
36
|
+
"diagnostic_probe": "I want to make sure I understand the structure — are you part of [Brand] directly, or are you a partner / contracted support center? I'm trying to understand my options here, not put you on the spot.",
|
|
37
|
+
"the_polite_ask": "Okay — sounds like this is outside what your team can handle. Could you share what the right channel is for cases that need to go to [Brand] directly? Most companies have a brand-side address or an escalation team that handles cases outside the standard support contract.",
|
|
38
|
+
"ask_for_brand_address": "Do you have a [Brand]-side corporate address, an executive escalations contact, or a 'cases above this team's authority' email that I should use?",
|
|
39
|
+
"name_the_constraint_kindly": "I can tell you're working within a tight scope and I respect that — that's a contract issue, not a you issue. Let me ask a different question: how do other customers in my situation get their issues resolved?",
|
|
40
|
+
"request_the_internal_referral": "Could you internally flag this case to be reviewed by [Brand] directly? Some BPO contracts allow that for specific case types — is mine one of them?",
|
|
41
|
+
"capture_breadcrumbs": "Before we end the call — what's the case number you've opened, what's your name and ID, and what's the name of your call center / BPO so I have it for my records?",
|
|
42
|
+
"graceful_transition": "Thank you. Honestly — you've been more helpful than you might realize. You've given me what I need to take the next step through a different channel.",
|
|
43
|
+
"brand_email_opener": "Hello [Brand] Customer Relations,\n\nI'm writing because your outsourced support center (BPO: [name if known], case ref [#]) was unable to resolve [issue]. The BPO rep was professional but indicated this case is outside their contract's scope. I'd appreciate review by your internal team."
|
|
44
|
+
},
|
|
45
|
+
"tactics": [
|
|
46
|
+
{
|
|
47
|
+
"name": "Confirm BPO status carefully",
|
|
48
|
+
"when": "You suspect outsourced support but aren't certain.",
|
|
49
|
+
"script": "Use `diagnostic_probe`. Ask it with a curious-not-confrontational tone. Reps trained at BPOs almost always confirm honestly when asked directly. The answer reframes the rest of the call.",
|
|
50
|
+
"priority": 1,
|
|
51
|
+
"decision_point": "If the rep confirms BPO status — STOP trying to win the call. Pivot to information-gathering for the next channel. If the rep claims to be in-house but other signals contradict it — proceed gently; you may be wrong, or they may not realize how their company is organized."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "Acknowledge the constraint without resentment",
|
|
55
|
+
"when": "BPO confirmed.",
|
|
56
|
+
"script": "Use `name_the_constraint_kindly`. Reps who feel respected often go off-script and tell you exactly what works — including 'most customers who get past this contact their corporate office directly' or 'send an email to [address]'. That info is gold and only flows if you treat the rep as a partner.",
|
|
57
|
+
"priority": 2
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "Ask for the brand-side escape route",
|
|
61
|
+
"when": "After acknowledging the constraint.",
|
|
62
|
+
"script": "Use `ask_for_brand_address`. Some BPO scripts forbid sharing certain addresses; others encourage it (because the brand wants out-of-scope cases off the BPO's plate). Worth asking — worst case is 'I can't share that', best case is the direct path you need.",
|
|
63
|
+
"priority": 3
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"name": "Request the internal-flag option",
|
|
67
|
+
"when": "Some BPO contracts include an 'escalate to brand' workflow.",
|
|
68
|
+
"script": "Use `request_the_internal_referral`. Some contracts have a literal button for this. Some don't. Asking costs nothing.",
|
|
69
|
+
"priority": 4,
|
|
70
|
+
"decision_point": "If the rep flags the case to the brand-side team and gives you a separate case number — track it. It's a real, separate workflow. Set a 5-business-day follow-up calendar. If no separate flag is possible, accept it and pivot."
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"name": "Capture every breadcrumb before disengaging",
|
|
74
|
+
"when": "Right before ending the call.",
|
|
75
|
+
"script": "Use `capture_breadcrumbs`. The BPO's name, the case number, your rep's name/ID — all of these are referenceable when you contact the brand directly. The brand's internal team can look up the BPO case and pick up the timeline.",
|
|
76
|
+
"priority": 5
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"name": "Disengage warmly",
|
|
80
|
+
"when": "End of call.",
|
|
81
|
+
"script": "Use `graceful_transition`. The rep often appreciates being treated as a competent professional facing structural limits — they may even add notes to your case that help the next escalation.",
|
|
82
|
+
"priority": 6
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "Pivot to brand-direct channel within 24h",
|
|
86
|
+
"when": "Post-call.",
|
|
87
|
+
"script": "Email the brand's corporate / executive relations address using `brand_email_opener`. Reference the BPO name, the BPO case number, and the rep ID. This frames you as a thoughtful customer who already did the work — not as a complaint trying to skip the line.",
|
|
88
|
+
"priority": 7
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"name": "Use research channels to find the brand-direct contact",
|
|
92
|
+
"when": "BPO couldn't or wouldn't share the brand-direct address.",
|
|
93
|
+
"script": "LinkedIn (find a Customer Experience VP at the brand). Press releases. SEC filings. The brand's investor relations email is a back-door — it's monitored and the team will forward customer escalations to the right place.",
|
|
94
|
+
"priority": 8
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"boundaries": [
|
|
98
|
+
"Do NOT take frustration out on the BPO rep — their hands are genuinely tied and they're often paid little to absorb yelling.",
|
|
99
|
+
"Do NOT assume offshore = incompetent. Many offshore BPO reps are extremely skilled; what they lack is authority, not capability.",
|
|
100
|
+
"Do NOT lie about who you are to bypass the BPO ('I'm a journalist'). Caller verification can catch you and the call gets flagged.",
|
|
101
|
+
"Do NOT keep escalating inside the BPO. Three calls to the same BPO queue is three identical experiences. The constraint is the contract, not the rep.",
|
|
102
|
+
"Do NOT post the BPO's name in a public review as 'bad support' — the brand chose the BPO; the rep didn't. Direct any public criticism at the brand.",
|
|
103
|
+
"Do NOT share account credentials or PII more than necessary. BPO reps see your account but may not have the same data-handling controls as in-house teams.",
|
|
104
|
+
"Do NOT bypass the BPO unless you actually have a substantive issue. The brand-side team is small and reserves attention for real escalations."
|
|
105
|
+
],
|
|
106
|
+
"success_signals": [
|
|
107
|
+
"Rep confirms BPO status when asked.",
|
|
108
|
+
"Rep voluntarily names the brand-side escalation address or contact function.",
|
|
109
|
+
"Rep agrees to internally flag the case for brand review and provides a separate case number.",
|
|
110
|
+
"Brand-direct email gets a response from a different domain or different signature line than the BPO ('Customer Advocacy', 'Executive Relations').",
|
|
111
|
+
"The brand's internal team picks up the BPO case file by reference — meaning your BPO documentation work paid off."
|
|
112
|
+
],
|
|
113
|
+
"failure_signals": [
|
|
114
|
+
"BPO rep won't acknowledge their structure ('we are [Brand] customer service') and routes you in circles.",
|
|
115
|
+
"Brand has no published corporate address — sometimes intentional, sometimes lazy. Either way, you need LinkedIn / press releases as backup.",
|
|
116
|
+
"Brand-direct email gets routed BACK to the BPO with a 'we've forwarded your case' auto-reply. This is the trap — you're back where you started.",
|
|
117
|
+
"Multiple BPOs in the chain (BPO routes to another BPO). Possible but rare; tells you the brand has minimal direct customer-facing infrastructure.",
|
|
118
|
+
"Rep claims 'there is no brand-side team, this IS the [Brand] support'. Could be true (rare) or could be a script. Verify via independent research before believing it."
|
|
119
|
+
],
|
|
120
|
+
"exit_strategy": {
|
|
121
|
+
"on_success": "Confirm the case is being handled by the brand-side team, get the new contact's name and the brand-side case number, and stop interacting with the BPO. Calendar a check-back at the brand-side team's promised timeline.",
|
|
122
|
+
"on_failure": "If brand-direct email also bounces you to the BPO, the brand has structurally minimized its consumer support. Escalate via `multi-channel-escalation` (social + executive office + regulator if applicable). Public/regulator channels often force brand-direct engagement.",
|
|
123
|
+
"follow_ups": [
|
|
124
|
+
"Document the BPO interaction thoroughly — BPO escalations are NOT visible to the brand's internal CRM in some cases, which is why you reconstruct them in the brand-direct email.",
|
|
125
|
+
"If the brand keeps routing you back to the BPO despite a substantive issue, that's a possible BBB / state-AG topic — pattern of inaccessible support, not just one bad call.",
|
|
126
|
+
"Keep the brand's executive-relations contact in a personal log for future issues. Outsourced support is usually a permanent choice by the brand; you'll need this contact again."
|
|
127
|
+
]
|
|
128
|
+
},
|
|
129
|
+
"required_user_info": [
|
|
130
|
+
"Account identifier",
|
|
131
|
+
"Description of the issue stated in one sentence",
|
|
132
|
+
"Any prior interactions including dates and what was promised",
|
|
133
|
+
"Brand's known direct channels (corporate website's 'contact us' section, executive team page, social handles)",
|
|
134
|
+
"Willingness to wait 5-7 business days for brand-direct response"
|
|
135
|
+
],
|
|
136
|
+
"contributed_by": "support-escalator agent (v0.9.87 community drop)",
|
|
137
|
+
"updated_at": "2026-05-20T06:09:47Z"
|
|
138
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "handle-send-me-an-email-deflection",
|
|
3
|
+
"name": "Handle 'Send Me an Email' as a Deflection",
|
|
4
|
+
"version": "1.0.1",
|
|
5
|
+
"category": "other",
|
|
6
|
+
"tags": [
|
|
7
|
+
"objection-handling",
|
|
8
|
+
"deflection",
|
|
9
|
+
"phone-call",
|
|
10
|
+
"judgement-call",
|
|
11
|
+
"outreach-sales"
|
|
12
|
+
],
|
|
13
|
+
"description": "When a prospect responds to a cold or follow-up call with 'just send me an email', distinguish between (a) a legitimate channel preference, (b) a polite brush-off, and (c) a buying signal in disguise — and respond appropriately to each, without forcing the call.",
|
|
14
|
+
"disclaimer": "Skills assume the call is solicited by the operator. NEVER use these to power a mass-cold-call campaign without the operator's explicit per-prospect authorisation.",
|
|
15
|
+
"context": {
|
|
16
|
+
"when_to_use": "On any outbound call where the prospect, before substantive conversation has happened, asks the agent to send information by email. The agent must read the situation in seconds and pick a response.",
|
|
17
|
+
"preconditions": [
|
|
18
|
+
"Agent has gotten past the gatekeeper and is speaking with the target (or their delegate).",
|
|
19
|
+
"Agent has a real, sendable artefact appropriate for this prospect — not a generic deck.",
|
|
20
|
+
"Operator has been briefed on the agent's policy for email follow-up (always comply / push once / never comply on cold)."
|
|
21
|
+
],
|
|
22
|
+
"estimated_call_duration_minutes": 2
|
|
23
|
+
},
|
|
24
|
+
"principles": [
|
|
25
|
+
"'Send me an email' is information, not an answer. Read the tone, the speed, and the context before deciding.",
|
|
26
|
+
"Comply gracefully when in doubt. Refusing to send email when asked is a worse signal than sending and following up.",
|
|
27
|
+
"Push back ONLY when you have a clear, concrete reason a 30-second live exchange is more valuable for THEM than email — and you can say that reason out loud.",
|
|
28
|
+
"Never argue. The moment you sound like you're not accepting their stated preference, you lose.",
|
|
29
|
+
"An email follow-up is a real commitment. If you say you'll send something, send something real, within the window you named."
|
|
30
|
+
],
|
|
31
|
+
"phrases": {
|
|
32
|
+
"comply_clean": "Sure — what's the best email for you? I'll keep it short, one or two paragraphs and a link, not a deck-bomb.",
|
|
33
|
+
"qualify_before_sending": "Happy to. Quick question first so I send the right thing rather than a generic email — is the [topic] something you're actively looking at, or more of a 'down the road' thing?",
|
|
34
|
+
"single_push": "Sure, I can do that. Honestly though — there's one thing I'd rather just ask you live for 30 seconds, then I'll send the rest as written follow-up. Is now OK, or worse timing than I think?",
|
|
35
|
+
"respect_the_no": "No problem — what's the best email? I won't follow up beyond the one note unless you tell me to.",
|
|
36
|
+
"honest_about_brushoff": "Totally cool if 'send me an email' is your nice way of saying not interested — would you tell me straight, just so I don't keep your inbox warm for no reason?",
|
|
37
|
+
"concrete_commitment": "I'll send it within the hour today. Subject line will say [X] so it's easy to find or ignore."
|
|
38
|
+
},
|
|
39
|
+
"tactics": [
|
|
40
|
+
{
|
|
41
|
+
"name": "Read the request in three seconds — preference, brush-off, or buying signal",
|
|
42
|
+
"when": "Immediately upon hearing the request.",
|
|
43
|
+
"script": "Preference (calm, neutral tone, after some engagement) → comply cleanly. Brush-off (fast, before any real exchange, slightly cool tone) → respect the no AND offer one honest out. Buying signal ('send me a proposal') → comply with qualification first.",
|
|
44
|
+
"priority": 1
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"name": "Comply cleanly when the request is genuine",
|
|
48
|
+
"when": "Tone reads as legitimate channel preference.",
|
|
49
|
+
"script": "Use `comply_clean`. Some prospects genuinely do their best work async. Forcing live time on them is a tax they'll resent.",
|
|
50
|
+
"priority": 2
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "Qualify briefly before sending if the email would benefit",
|
|
54
|
+
"when": "Prospect seems engaged enough that 60 seconds of context would meaningfully change what you send.",
|
|
55
|
+
"script": "Use `qualify_before_sending`. One question — not three — to avoid sending a generic deck.",
|
|
56
|
+
"priority": 3
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "Push back exactly once if there's a real reason",
|
|
60
|
+
"when": "You have a specific live-only question whose answer reshapes the email.",
|
|
61
|
+
"script": "Use `single_push`. If they decline, drop it immediately — do not push twice on the same call.",
|
|
62
|
+
"priority": 4
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "Surface the brush-off if you suspect one",
|
|
66
|
+
"when": "Request was fast, before any real exchange, and follow-up emails are likely to vanish into ghosting.",
|
|
67
|
+
"script": "Use `honest_about_brushoff`. This surprises most prospects and produces honest answers — they'll either say 'no, actually, send it' or 'yeah, not for us', and either saves time.",
|
|
68
|
+
"priority": 5
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"name": "Make the commitment concrete on the call",
|
|
72
|
+
"when": "Closing the conversation.",
|
|
73
|
+
"script": "Use `concrete_commitment`. Name a window, name a subject line. Vague 'I'll send something across' rarely gets opened."
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
"boundaries": [
|
|
77
|
+
"Do NOT pretend a follow-up email requires live information you could easily figure out from public sources.",
|
|
78
|
+
"Do NOT push back more than once. Two attempts to keep them on the phone after they asked for email is pressure.",
|
|
79
|
+
"Do NOT promise an email and not send it. Better to not commit than to break the small promise.",
|
|
80
|
+
"Do NOT send a generic deck. Send something written FOR this prospect, even if 80% is templated.",
|
|
81
|
+
"Do NOT cc the operator or the prospect's boss on a follow-up email unless explicitly authorised."
|
|
82
|
+
],
|
|
83
|
+
"success_signals": [
|
|
84
|
+
"Prospect gives their preferred email and a topic to focus on.",
|
|
85
|
+
"Prospect responds to the follow-up email within a reasonable window.",
|
|
86
|
+
"Prospect agrees to a small live exchange when the push-back was honest and well-framed.",
|
|
87
|
+
"Prospect admits it's a no — clean signal, time saved."
|
|
88
|
+
],
|
|
89
|
+
"failure_signals": [
|
|
90
|
+
"Prospect repeats 'just email me' more crisply (push again and you've lost them).",
|
|
91
|
+
"Prospect goes silent on the email follow-up for 10+ business days.",
|
|
92
|
+
"Prospect's stated email bounces or is a generic shared inbox — they didn't want this to land."
|
|
93
|
+
],
|
|
94
|
+
"exit_strategy": {
|
|
95
|
+
"on_success": "Send the promised email within the named window. Keep it under 8 lines. One link, one ask, one calendar option. End the call warmly with a thank-you.",
|
|
96
|
+
"on_failure": "If the brush-off was confirmed, log the prospect as 'declined — do not retry by phone'. If they went silent post-email, follow the ghosted-lead re-engagement cadence — not a re-call.",
|
|
97
|
+
"follow_ups": [
|
|
98
|
+
"Send the email by the committed deadline, with the committed subject line.",
|
|
99
|
+
"Single written nudge 5-7 business days later if no response — then stop.",
|
|
100
|
+
"Log outcome in CRM with the prospect's exact words about preferred channel."
|
|
101
|
+
]
|
|
102
|
+
},
|
|
103
|
+
"required_user_info": [
|
|
104
|
+
"Operator's standing policy on email-deflection responses",
|
|
105
|
+
"Real artefacts the operator wants the agent to send (not 'a deck' — actual links/files)",
|
|
106
|
+
"Operator's preferred follow-up cadence after the email lands",
|
|
107
|
+
"Whether the agent can quote pricing or capabilities in the written follow-up",
|
|
108
|
+
"Operator's outbound email signature / sending identity"
|
|
109
|
+
],
|
|
110
|
+
"contributed_by": "sales-outbound agent (v0.9.87 community drop)",
|
|
111
|
+
"updated_at": "2026-05-20T06:09:47Z"
|
|
112
|
+
}
|