Troubleshooting
A symptom-keyed cookbook for the most common product-behavior issues. Each entry: symptom → likely cause → recovery steps → escape-hatch.
What this page covers: Product-behavior failures that show up after Escalate is installed and running.
What this page does NOT cover: OAuth install errors. Those are vendor-specific and live at:
If your symptom is an error message from an OAuth callback page, start with the per-vendor page; if it's about something Escalate SHOULD have done but didn't, you're in the right place.
§1 Why didn't an alert fire on a stalled deal?
Symptom: Legal has been silent on a contract redline for 3 business days, and you expected an alert. None arrived.
Likely causes:
- The threshold hasn't crossed. Default Legal threshold is 2
BD. Run
/escalate stats— if you see the deal listed in "covered" with no alert, the silence-tracker is running but the threshold may not have crossed (weekends + holidays don't count per Alerts). - The classifier didn't categorize the message as a substantive ask. Routing questions ("who's the lead on Acme?") and completed-task messages ("done, see attached") don't start silence timers. Check the original message: if it's framed as a question that requires action ("can we accept this clause?"), it's substantive; if it's framed as a ping ("any updates?"), the classifier may have rejected it.
- The sub-thread isn't in a deal channel. Escalate only watches channels it auto-created. If Legal is being asked in a DM or in a non-Escalate channel, the bot can't see it.
- The workspace is in cancellation grace period. Alerts pause during the 30-day read-only window post-cancellation. The audit chain still records but no DMs fire.
Recovery steps:
- Run
/escalate statsto verify the deal is covered + the trigger is in-force. - Open the deal channel. If you don't see one, the trigger may not have fired — see §2 below.
- If the sub-thread IS in the deal channel and IS a substantive ask, the classifier may have misjudged. Wait one more business day; the follow-up reminder cycle may pick it up.
Escape-hatch: If this doesn't resolve, email hello@tryescalate.com with the deal name + the original message permalink + the role you expected to alert; the founder has audit- chain access to trace what the classifier decided.
§2 Why didn't a channel auto-create?
Symptom: A deal moved into a qualifying stage in your CRM, but no Slack channel appeared.
Likely causes:
- The deal didn't clear
minAmountUsd. Default is $75,000 USD. Deals below this don't qualify. Check the deal's amount field in CRM. - The deal's stage doesn't match
qualifyingStages. Default stages: Negotiation, Verbal Commit, Contract Sent, Proposal. If your pipeline uses different stage names (e.g., "Final Negotiation"), they won't match by default — see Triggers. - The CRM amount field is null AND
requireAmount: true. Deals without amount fields don't qualify under the default. - The CRM polling lag (Salesforce only). Salesforce uses a 5-minute poll, so there's up to a 5-minute window between stage transition and trigger evaluation. HubSpot uses webhooks (~30s).
- The CRM connection broke. Token expiry or vendor-side
revocation. Check
/escalate stats— connection status is surfaced there.
Recovery steps:
- Verify the deal's amount + stage against your trigger config:
/escalate config trigger. - For Salesforce, wait 5 minutes after the stage transition.
- If the CRM connection is broken, see §3.
- If the trigger config looks right but the channel still didn't
create, run
/escalate retrofit(admin) to force a re-scan.
Escape-hatch: If this doesn't resolve, email
hello@tryescalate.com with the deal ID (or name) + the stage
name + the amount + a screenshot of /escalate stats; the
founder can inspect the trigger-evaluation log.
§3 How do I reconnect a broken CRM token?
Symptom: /escalate stats shows "CRM connection: disconnected"
or a deal that should have qualified didn't, and the connection
status is degraded.
Likely causes:
- OAuth refresh token expired. Salesforce: tokens are refreshable for 1 year post-grant if used, less if dormant. HubSpot: refresh tokens are durable but can be revoked by the workspace admin.
- The HubSpot/Salesforce app was uninstalled OR revoked from the vendor side. Check your CRM's connected-apps panel.
- The OAuth user who originally connected the CRM was deactivated. Salesforce + HubSpot tokens are user-scoped; if that user is gone, the token's gone.
Recovery steps:
- Re-run
/escalate config crm(admin) and pick the vendor again. Follow the OAuth consent flow. - For Salesforce: in Setup → Connected Apps → "Escalate," verify the app is still authorized. Re-authorize if not.
- For HubSpot: Settings → Integrations → "Escalate," verify the app is connected. Re-connect if not.
Escape-hatch: If the re-OAuth fails with an unfamiliar error, see Slack setup → Troubleshooting for the OAuth error-page recovery table, or email hello@tryescalate.com with the error text + the vendor.
§4 Why did my role-assignment vanish?
Symptom: You set Legal = @alice via /escalate config roles, but
new deal channels are creating without Legal in the invitee list.
Likely causes:
- @alice was deactivated in Slack. Escalate skips deactivated users on channel invite. The role mapping persists; it just can't resolve to a live user.
- You re-ran
/escalate config rolesand didn't re-confirm Legal. The modal pre-populates with the current value, but if the user-picker was cleared (intentionally or accidentally) before submit, the field saves as null. - The user joined a different workspace. Slack user IDs are workspace-local; if @alice was invited to a separate Escalate- installed workspace, the user-picker entry doesn't cross over.
Recovery steps:
- Run
/escalate config rolesagain; verify each role's user- picker is populated. - If a user shows as "deactivated," reactivate them in Slack OR pick a different user for that role.
- Existing in-flight channels retain their original role assignments — new channels use the updated config.
Escape-hatch: If this doesn't resolve, email hello@tryescalate.com with the workspace ID + the role + the expected user's Slack handle.
§5 The bot isn't responding to slash commands
Symptom: You type /escalate stats (or any other slash command)
and Slack returns "command failed" or nothing happens.
Likely causes:
- The Escalate Slack app was uninstalled and re-installed. The bot user ID changes; slash commands may briefly fail until the workspace re-registers. Wait 30s and retry.
- Slack's slash-command service is degraded. Check Slack status.
- Workspace exceeded Slack API rate limits. Rare but possible on workspaces with very high message volume. Retry in 1-2 minutes.
- The Escalate worker is down. Bot ingest will be lagging.
/escalate statswill fail; alerts may also be delayed.
Recovery steps:
- Retry the command after 30 seconds.
- Run
/escalate help <message>— if the help command works but others don't, the issue is command-specific (likely an audience tier — admin or founder-only — that you're not in). - Check the Escalate status page if you're seeing widespread bot unresponsiveness.
Escape-hatch: If this doesn't resolve within 5 minutes, email hello@tryescalate.com with the workspace name + the command + the exact error message (if any); the founder can check ingest health + bot heartbeat.
Next steps
- Setup not yet complete? Start with Slack setup.
- Want to inspect what's covered:
/escalate statsor Coverage Report. - Found a behavior we should document better? Email hello@tryescalate.com — we add troubleshooting entries based on what customers actually hit.