/ MQL No Book - Slack Reaction.md
MQL No Book - Slack Reaction.md
 1  ---
 2  type: make-scenario-migration
 3  status: pending
 4  make-id: 2952024
 5  active: true
 6  invalid: false
 7  trigger: close-crm
 8  apps: [close-crm, util, slack]
 9  executions: ~high
10  last-edit: 2026-04-05
11  ---
12  
13  # MQL No Book - Slack Reaction
14  
15  **Status:** Active
16  **Make ID:** 2952024
17  **Trigger:** Close CRM → New Lead (trigger on new lead created)
18  
19  ---
20  
21  ## Module Sequence
22  
23  1. **Close CRM — New Lead Trigger** → fires when a new lead is created in Close
24  2. **Filter** → only continue if: Application Date field exists AND Lead Status = MQL
25  3. **util:FunctionSleep** → wait 250 seconds (allow time for Calendly booking to process)
26  4. **Close CRM — List Opportunities** → get opps for this lead
27  5. **Filter** → only continue if: no opportunities exist OR no opp has stage = "Booked"
28  6. **Slack — Search Messages** → search for the lead's original notification message in the relevant channel
29  7. **Filter** → only continue if: a matching Slack message was found
30  8. **Slack — Add Reaction** → add `:x:` reaction to the original lead message (marks as no-book)
31     - Error handling: Ignore error (in case message already has reaction)
32  9. **Slack — Create Message** → post thread reply `@mention MQL No Book` alert to the same thread
33     - Error handling: Ignore error
34  
35  ---
36  
37  ## n8n Node Mapping
38  
39  | Make Module | n8n Node | Notes |
40  |---|---|---|
41  | Close CRM New Lead Trigger | Webhook node | Set up Close CRM webhook → Leads → Created event pointing to n8n |
42  | Filter (Application Date + MQL) | IF node | `body.status_label == "MQL"` AND application_date field not null |
43  | util:FunctionSleep (250s) | Wait node | Wait 250 seconds |
44  | Close CRM List Opportunities | HTTP Request | GET Close API /opportunity/?lead_id={id} |
45  | Filter (no booked opp) | IF node | Check opp array length or stage values |
46  | Slack Search Messages | Slack node | Search Messages action with query |
47  | Filter (message found) | IF node | Check search result count > 0 |
48  | Slack Add Reaction | Slack node | Add Reaction action with `:x:` emoji |
49  | Slack Create Message | Slack node | Send Message (thread reply) |
50  
51  ---
52  
53  ## Key Details
54  
55  - The 250-second sleep is critical — it waits for the Calendly → Demo Booked scenario to create an opportunity if the lead booked
56  - Close CRM webhook trigger: in Close, go to Settings → Integrations → Webhooks → add webhook for `lead.created` event
57  - The Slack search query must match the exact message format posted by the "1a - New Leads" scenario
58  - `@mention` in thread — identify which user/channel is being tagged
59  - Ignore error on Add Reaction and Create Message to prevent scenario failure if Slack has issues
60  
61  ---
62  
63  ## Migration Checklist
64  
65  - [ ] Set up Close CRM webhook for `lead.created` → n8n URL
66  - [ ] Recreate Close CRM API credential in n8n
67  - [ ] Recreate Slack credential in n8n
68  - [ ] Identify exact Slack search query used (from blueprint)
69  - [ ] Identify Slack channel ID being searched
70  - [ ] Identify which user is @mentioned in the thread reply
71  - [ ] Build workflow with Wait node (250s), IF nodes, HTTP Requests, Slack nodes
72  - [ ] Test with a new MQL lead that doesn't book
73  - [ ] Test with a new MQL lead that DOES book (reaction should NOT fire)
74  - [ ] Confirm `:x:` reaction appears on original lead message
75  - [ ] Confirm thread reply posts correctly
76  - [ ] Mark active in n8n, deactivate Make scenario