@elitedcs/ghl-mcp 3.71.0 → 3.72.0
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/CHANGELOG.md +34 -0
- package/README.md +4 -4
- package/dist/capture-helper.js +10 -1
- package/dist/index.js +9078 -3211
- package/guide/guide.html +2 -1
- package/package.json +2 -2
- package/skills/blueprint/SKILL.md +2 -0
- package/skills/blueprint/examples/medspa-approval-view.md +58 -53
- package/skills/blueprint/examples/medspa-brief.json +70 -8
- package/skills/blueprint/examples/medspa-build-plan.json +1435 -123
- package/skills/blueprint/examples/medspa-dry-run-report.md +2 -0
- package/skills/blueprint/examples/sample-approval-view.md +20 -61
- package/skills/blueprint/examples/sample-brief.json +95 -7
- package/skills/blueprint/examples/sample-build-plan.json +1448 -119
- package/skills/blueprint/examples/validate-plan.cjs +195 -13
- package/skills/blueprint/presets/clinic-launch-a2p.preset.json +1 -0
- package/skills/blueprint/presets/clinic.md +60 -0
- package/skills/blueprint/presets/clinic.preset.json +1737 -0
- package/skills/blueprint/presets/coach.md +58 -0
- package/skills/blueprint/presets/coach.preset.json +1723 -0
- package/skills/blueprint/presets/ecommerce.md +54 -0
- package/skills/blueprint/presets/ecommerce.preset.json +1287 -0
- package/skills/blueprint/presets/generic-client.md +49 -27
- package/skills/blueprint/presets/generic-client.preset.json +1552 -122
- package/skills/blueprint/presets/local-service.md +58 -0
- package/skills/blueprint/presets/local-service.preset.json +1733 -0
- package/skills/blueprint/presets/med-spa.md +47 -48
- package/skills/blueprint/presets/med-spa.preset.json +1557 -111
- package/skills/blueprint/references/brief-schema.md +48 -1
- package/skills/blueprint/references/build-plan-schema.md +66 -5
- package/skills/blueprint/references/copy-guide.md +167 -0
- package/skills/blueprint/references/intake-question-set.md +64 -3
- package/skills/blueprint/references/preset-format.md +97 -51
- package/templates/action-schemas.json +12 -0
|
@@ -2,59 +2,245 @@
|
|
|
2
2
|
"schemaVersion": "0.1",
|
|
3
3
|
"planId": "plan_abc123",
|
|
4
4
|
"briefId": "sub_abc123",
|
|
5
|
-
"preset": "
|
|
6
|
-
"summary": "
|
|
5
|
+
"preset": "generic",
|
|
6
|
+
"summary": "Generated by the GHL Command Blueprint plan-gen skill from preset generic v2.0.0 (brief source: agency_os). Builds Glow Aesthetics a Tier 1 v2 account: 1 plan user(s) from the staff answers, a pipeline from the client's own stages, custom fields, a source / lifecycle / interest tag system, custom values every message reads from, a booking calendar assigned to real staff, an A2P-compliant intake form + funnel, 15 email + 17 SMS send-ready templates in the client's voice, and 8 workflows: Speed to Lead (5 touches in 24 hours, a call task and an alert to a real person, an opportunity card, then the nurture-start hand-off as its last action), Missed Call Text-Back (call_status trigger), Lead Nurture (11 touches across 31 days of waits, stops on reply, hands off to Win-back), Replied - Stop & Route, Win-back (5 touches across 31 days), and the three appointment workflows (confirm & move, reminders at 24 h and 2 h, no-show rescue). SMS-bearing workflows are held DRAFT behind the A2P handoff. Nothing is built until you approve.",
|
|
7
|
+
"users": [
|
|
8
|
+
{
|
|
9
|
+
"ref": "user.dana_reyes",
|
|
10
|
+
"firstName": "Dana",
|
|
11
|
+
"lastName": "Reyes",
|
|
12
|
+
"email": "dana@example.com",
|
|
13
|
+
"role": "admin",
|
|
14
|
+
"phone": "555-010-0100"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
7
17
|
"pipelines": [
|
|
8
18
|
{
|
|
9
19
|
"ref": "pipeline.main",
|
|
10
|
-
"name": "Glow Aesthetics Pipeline",
|
|
20
|
+
"name": "Glow Aesthetics Pipeline || Sales Pipeline",
|
|
11
21
|
"stages": [
|
|
12
|
-
{
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
{
|
|
22
|
+
{
|
|
23
|
+
"ref": "stage.new_lead",
|
|
24
|
+
"name": "new lead",
|
|
25
|
+
"position": 0
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"ref": "stage.contacted",
|
|
29
|
+
"name": "contacted",
|
|
30
|
+
"position": 1
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"ref": "stage.consult_booked",
|
|
34
|
+
"name": "consult booked",
|
|
35
|
+
"position": 2
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"ref": "stage.showed",
|
|
39
|
+
"name": "showed",
|
|
40
|
+
"position": 3
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"ref": "stage.treated",
|
|
44
|
+
"name": "treated",
|
|
45
|
+
"position": 4
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"ref": "stage.rebooked",
|
|
49
|
+
"name": "rebooked",
|
|
50
|
+
"position": 5
|
|
51
|
+
}
|
|
18
52
|
]
|
|
19
53
|
}
|
|
20
54
|
],
|
|
21
55
|
"customFields": [
|
|
22
|
-
{
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
56
|
+
{
|
|
57
|
+
"ref": "field.lead_source",
|
|
58
|
+
"name": "Lead Source",
|
|
59
|
+
"dataType": "SINGLE_OPTIONS",
|
|
60
|
+
"model": "contact",
|
|
61
|
+
"options": [
|
|
62
|
+
"Website",
|
|
63
|
+
"Instagram",
|
|
64
|
+
"Facebook",
|
|
65
|
+
"Google",
|
|
66
|
+
"Referral",
|
|
67
|
+
"Phone",
|
|
68
|
+
"Other"
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"ref": "field.interest",
|
|
73
|
+
"name": "What They Need",
|
|
74
|
+
"dataType": "SINGLE_OPTIONS",
|
|
75
|
+
"model": "contact",
|
|
76
|
+
"options": [
|
|
77
|
+
"Pricing / a quote",
|
|
78
|
+
"Book a time",
|
|
79
|
+
"A question first",
|
|
80
|
+
"Other"
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"ref": "field.top_concern",
|
|
85
|
+
"name": "Top Concern",
|
|
86
|
+
"dataType": "TEXT",
|
|
87
|
+
"model": "contact"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"ref": "field.appt_date",
|
|
91
|
+
"name": "Appointment Date",
|
|
92
|
+
"dataType": "DATE",
|
|
93
|
+
"model": "contact"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"ref": "field.deal_sold",
|
|
97
|
+
"name": "Deal Sold",
|
|
98
|
+
"dataType": "TEXT",
|
|
99
|
+
"model": "contact"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"ref": "field.ltv",
|
|
103
|
+
"name": "Estimated Lifetime Value",
|
|
104
|
+
"dataType": "MONETORY",
|
|
105
|
+
"model": "contact"
|
|
106
|
+
}
|
|
28
107
|
],
|
|
29
108
|
"tags": [
|
|
30
|
-
{
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
{
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
{
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
{
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
{
|
|
47
|
-
|
|
109
|
+
{
|
|
110
|
+
"ref": "tag.source_website",
|
|
111
|
+
"name": "source-website"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"ref": "tag.source_instagram",
|
|
115
|
+
"name": "source-instagram"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"ref": "tag.source_facebook",
|
|
119
|
+
"name": "source-facebook"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"ref": "tag.source_google",
|
|
123
|
+
"name": "source-google"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"ref": "tag.source_referral",
|
|
127
|
+
"name": "source-referral"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"ref": "tag.source_phone",
|
|
131
|
+
"name": "source-phone"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"ref": "tag.source_other",
|
|
135
|
+
"name": "source-other"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"ref": "tag.lc_new_lead",
|
|
139
|
+
"name": "lifecycle-new-lead"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"ref": "tag.lc_contacted",
|
|
143
|
+
"name": "lifecycle-contacted"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"ref": "tag.lc_nurturing",
|
|
147
|
+
"name": "lifecycle-nurturing"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"ref": "tag.lc_booked",
|
|
151
|
+
"name": "lifecycle-booked"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"ref": "tag.lc_qualified",
|
|
155
|
+
"name": "lifecycle-qualified"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"ref": "tag.lc_won",
|
|
159
|
+
"name": "lifecycle-won"
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"ref": "tag.lc_repeat",
|
|
163
|
+
"name": "lifecycle-repeat"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"ref": "tag.lc_lapsed",
|
|
167
|
+
"name": "lifecycle-lapsed"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"ref": "tag.lc_lost",
|
|
171
|
+
"name": "lifecycle-lost"
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"ref": "tag.nurture_start",
|
|
175
|
+
"name": "nurture-start"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"ref": "tag.winback_start",
|
|
179
|
+
"name": "winback-start"
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"ref": "tag.missed_call",
|
|
183
|
+
"name": "missed-call"
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"ref": "tag.no_show",
|
|
187
|
+
"name": "no-show"
|
|
188
|
+
}
|
|
48
189
|
],
|
|
49
190
|
"customValues": [
|
|
50
|
-
{
|
|
191
|
+
{
|
|
192
|
+
"ref": "cv.business_name",
|
|
193
|
+
"name": "business_name",
|
|
194
|
+
"value": "Glow Aesthetics"
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"ref": "cv.business_phone",
|
|
198
|
+
"name": "business_phone",
|
|
199
|
+
"value": "",
|
|
200
|
+
"filledBy": "handoff.business_details"
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"ref": "cv.owner_first_name",
|
|
204
|
+
"name": "owner_first_name",
|
|
205
|
+
"value": "Dana",
|
|
206
|
+
"filledBy": "handoff.business_details"
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"ref": "cv.booking_link",
|
|
210
|
+
"name": "booking_link",
|
|
211
|
+
"value": "",
|
|
212
|
+
"filledBy": "handoff.calendar_oauth"
|
|
213
|
+
}
|
|
51
214
|
],
|
|
52
215
|
"calendars": [
|
|
53
216
|
{
|
|
54
217
|
"ref": "calendar.consult",
|
|
55
|
-
"name": "
|
|
218
|
+
"name": "Consultation",
|
|
56
219
|
"calendarType": "round_robin",
|
|
57
|
-
"
|
|
220
|
+
"slotDuration": 30,
|
|
221
|
+
"slotDurationUnit": "mins",
|
|
222
|
+
"teamMemberRefs": [
|
|
223
|
+
"user.dana_reyes"
|
|
224
|
+
],
|
|
225
|
+
"openHours": [
|
|
226
|
+
{
|
|
227
|
+
"daysOfTheWeek": [
|
|
228
|
+
1,
|
|
229
|
+
2,
|
|
230
|
+
3,
|
|
231
|
+
4,
|
|
232
|
+
5
|
|
233
|
+
],
|
|
234
|
+
"hours": [
|
|
235
|
+
{
|
|
236
|
+
"openHour": 9,
|
|
237
|
+
"openMinute": 0,
|
|
238
|
+
"closeHour": 17,
|
|
239
|
+
"closeMinute": 0
|
|
240
|
+
}
|
|
241
|
+
]
|
|
242
|
+
}
|
|
243
|
+
],
|
|
58
244
|
"availabilityType": 0,
|
|
59
245
|
"slotDuration": 30,
|
|
60
246
|
"slotBuffer": 10,
|
|
@@ -64,164 +250,1307 @@
|
|
|
64
250
|
"forms": [
|
|
65
251
|
{
|
|
66
252
|
"ref": "form.intake",
|
|
67
|
-
"name": "Glow Aesthetics Inquiry",
|
|
253
|
+
"name": "Glow Aesthetics Inquiry || New Inquiry",
|
|
68
254
|
"fields": [
|
|
69
|
-
{
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
255
|
+
{
|
|
256
|
+
"type": "standard",
|
|
257
|
+
"key": "first_name",
|
|
258
|
+
"required": true
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
"type": "standard",
|
|
262
|
+
"key": "last_name",
|
|
263
|
+
"required": false
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
"type": "standard",
|
|
267
|
+
"key": "email",
|
|
268
|
+
"required": true
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"type": "standard",
|
|
272
|
+
"key": "phone",
|
|
273
|
+
"required": true
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"type": "custom",
|
|
277
|
+
"fieldRef": "field.interest",
|
|
278
|
+
"required": false
|
|
279
|
+
}
|
|
74
280
|
]
|
|
75
281
|
}
|
|
76
282
|
],
|
|
77
283
|
"funnels": [
|
|
78
284
|
{
|
|
79
285
|
"ref": "funnel.main",
|
|
80
|
-
"name": "Glow Aesthetics Funnel",
|
|
286
|
+
"name": "Glow Aesthetics Funnel || Lead Funnel",
|
|
287
|
+
"target": "ghl",
|
|
81
288
|
"pages": [
|
|
82
|
-
{
|
|
83
|
-
|
|
289
|
+
{
|
|
290
|
+
"ref": "page.landing",
|
|
291
|
+
"name": "Landing",
|
|
292
|
+
"role": "optin",
|
|
293
|
+
"formRef": "form.intake"
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
"ref": "page.thankyou",
|
|
297
|
+
"name": "Thank You",
|
|
298
|
+
"role": "confirmation",
|
|
299
|
+
"calendarRef": "calendar.consult"
|
|
300
|
+
}
|
|
84
301
|
]
|
|
85
302
|
}
|
|
86
303
|
],
|
|
304
|
+
"templates": {
|
|
305
|
+
"emails": [
|
|
306
|
+
{
|
|
307
|
+
"ref": "email_template.stl_email_1",
|
|
308
|
+
"name": "Speed to Lead - Instant Email",
|
|
309
|
+
"subject": "Got it, {{contact.first_name}}. Here's what happens next",
|
|
310
|
+
"html": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">Thanks for reaching out to {{custom_values.business_name}}. I'm {{custom_values.owner_first_name}}, and I see every inquiry that comes in.</p><p style=\"margin:0 0 14px;\">Here's what happens next: in the next few minutes you'll get a text from this number. Reply with one line about what you're trying to sort out, and I'll tell you straight whether we're the right fit, and what it would take.</p><p style=\"margin:0 0 14px;\">If you'd rather just talk, grab free skin assessment:</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Pick a time that suits me</a></p><p style=\"margin:0 0 14px;\">No pitch, no pressure. You'll leave the call knowing exactly what your options are.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"ref": "email_template.stl_email_2",
|
|
314
|
+
"name": "Speed to Lead - 3 Hour Email",
|
|
315
|
+
"subject": "The three questions we ask first",
|
|
316
|
+
"html": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">Before anyone at {{custom_values.business_name}} recommends anything, we ask three questions:</p><ul style=\"margin:0 0 14px 20px;padding:0;\"><li style=\"margin:0 0 6px;\">What does \"fixed\" look like to you, in one sentence?</li><li style=\"margin:0 0 6px;\">What have you already tried, and what happened?</li><li style=\"margin:0 0 6px;\">What's the cost of leaving it as it is for another six months?</li></ul><p style=\"margin:0 0 14px;\">Your answers decide what we'd suggest and what we'd tell you not to bother with. That's the whole point of the first conversation.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Book the conversation</a></p><p style=\"margin:0 0 14px;\">Or reply to this email with your answer to the first question. I read every reply.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"ref": "email_template.n_email_1",
|
|
320
|
+
"name": "Nurture 1 - The Mistake Most People Make",
|
|
321
|
+
"subject": "The mistake most people make with aging skin",
|
|
322
|
+
"html": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">When people first contact us about aging skin, most have already made the same mistake: they've waited until it was urgent, then picked whoever answered the phone first.</p><p style=\"margin:0 0 14px;\">Urgent decisions are expensive decisions. The better first move is boring: get the problem described properly, get two or three options with real prices, and pick the one that solves the actual problem instead of the loudest symptom.</p><p style=\"margin:0 0 14px;\">That's what our first conversation is for. It's short, it's free, and you can take what you learn anywhere you like.</p><p style=\"margin:0 0 14px;\">When you're ready: <a href=\"{{custom_values.booking_link}}\" style=\"color:#1a56db;text-decoration:underline;\">pick a time</a>.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"ref": "email_template.n_email_2",
|
|
326
|
+
"name": "Nurture 2 - How Working With Us Goes",
|
|
327
|
+
"subject": "How working with us actually goes",
|
|
328
|
+
"html": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">People hesitate because they don't know what happens after they say yes. So here it is:</p><ul style=\"margin:0 0 14px 20px;padding:0;\"><li style=\"margin:0 0 6px;\">Step 1: a short conversation. You describe the problem; we ask the three questions; you get honest options.</li><li style=\"margin:0 0 6px;\">Step 2: a written proposal with what we'd do, what it costs, and what you should expect by when. You take it away; nobody chases you the same day.</li><li style=\"margin:0 0 6px;\">Step 3: we do the work, you get updates you didn't have to ask for, and we don't call it done until you do.</li></ul><p style=\"margin:0 0 14px;\">The objection we hear most is price. That's why step 2 is in writing with options, so you choose the scope, not us.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Start with step 1</a></p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"ref": "email_template.n_email_3",
|
|
332
|
+
"name": "Nurture 3 - Why We Do It This Way",
|
|
333
|
+
"subject": "Why we do it this way",
|
|
334
|
+
"html": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">The best thing a client can say about {{custom_values.business_name}} is \"there were no surprises.\" Not the most exciting compliment. It's the one that gets us referred.</p><p style=\"margin:0 0 14px;\">It comes from a rule: everything in writing before it happens, and you hear about a problem from us before you notice it yourself. Slower to set up than a handshake. Far cheaper by the end.</p><p style=\"margin:0 0 14px;\">If you want to see what that looks like for your situation, that's what the first conversation is for.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">See my options</a></p><p style=\"margin:0 0 14px;\">Have a question first? Reply to this email. I'll answer it myself.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"ref": "email_template.n_email_4",
|
|
338
|
+
"name": "Nurture 4 - About the Cost",
|
|
339
|
+
"subject": "About the cost",
|
|
340
|
+
"html": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">Let's talk about the thing most people are too polite to ask: what does it cost?</p><p style=\"margin:0 0 14px;\">Injectables and facials for first-time and returning clients is priced by scope, and the scope is yours to choose. The written proposal shows options side by side, with the price of each, before anything starts. There is never a number on the invoice you didn't see first.</p><p style=\"margin:0 0 14px;\">One honest warning: the cheapest quote is rarely the cheapest job. If a price looks too good, ask what's been left out. We'll tell you what's in ours line by line.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Get my written options</a></p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"ref": "email_template.n_email_5",
|
|
344
|
+
"name": "Nurture 5 - What Waiting Costs",
|
|
345
|
+
"subject": "What waiting actually costs",
|
|
346
|
+
"html": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">There's a comfortable idea that aging skin can wait until a better month. Sometimes true. Usually not.</p><p style=\"margin:0 0 14px;\">Problems like this rarely stay the same size. They compound quietly, and then one day they're urgent, and urgent always costs more than planned: less choice, less time to compare, more money.</p><p style=\"margin:0 0 14px;\">You don't have to do anything today. A conversation now just keeps the cheap options on the table.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Keep my options open</a></p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"ref": "email_template.n_email_6",
|
|
350
|
+
"name": "Nurture 6 - Everything in One Place",
|
|
351
|
+
"subject": "Everything you need to decide, in one place",
|
|
352
|
+
"html": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">If you're still weighing it up, here is everything in one place:</p><ul style=\"margin:0 0 14px 20px;padding:0;\"><li style=\"margin:0 0 6px;\">What: Free skin assessment with {{custom_values.business_name}}, and written options you keep.</li><li style=\"margin:0 0 6px;\">Where: Scottsdale, AZ.</li><li style=\"margin:0 0 6px;\">Cost of the first step: nothing. Cost of the work: shown per option, in writing, before anything starts.</li><li style=\"margin:0 0 6px;\">Our rule: no surprises. You hear about problems from us first.</li><li style=\"margin:0 0 6px;\">Book, cancel or move your time any time: <a href=\"{{custom_values.booking_link}}\" style=\"color:#1a56db;text-decoration:underline;\">your booking link</a>.</li></ul><p style=\"margin:0 0 14px;\">If the answer is \"not now\", that's fine. Reply with the word later and I'll stop the emails and check in next quarter.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Book the conversation</a></p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
"ref": "email_template.w_email_1",
|
|
356
|
+
"name": "Win-back 1 - One Question",
|
|
357
|
+
"subject": "One question, {{contact.first_name}}",
|
|
358
|
+
"html": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">A while back you reached out to {{custom_values.business_name}} about aging skin, and then things went quiet. That's normal; it's what happens when something isn't urgent yet.</p><p style=\"margin:0 0 14px;\">One question, and an honest answer is all I need: what stopped you? Timing, price, trust, or something we said?</p><p style=\"margin:0 0 14px;\">Reply with a word or two. If it's something we can fix, I'll fix it. If it's not the right time, I'll leave you alone until it is.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
"ref": "email_template.w_email_2",
|
|
362
|
+
"name": "Win-back 2 - What Changed",
|
|
363
|
+
"subject": "What's changed since you last looked",
|
|
364
|
+
"html": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">Since you first reached out, a couple of things have changed at {{custom_values.business_name}}: more availability on the calendar, and written options that now include a smaller first step for people who want to start carefully.</p><p style=\"margin:0 0 14px;\">What hasn't changed: the first conversation is still free, still short, and still ends with options you take away rather than a decision on the spot.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">See the calendar</a></p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
"ref": "email_template.w_email_3",
|
|
368
|
+
"name": "Win-back 3 - The Door Stays Open",
|
|
369
|
+
"subject": "The door stays open",
|
|
370
|
+
"html": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">This is the last automatic email you'll get from me. I'd rather you hear from a person when the time is right than from a sequence.</p><p style=\"margin:0 0 14px;\">Your first conversation doesn't expire. When you're ready, the link below works, and so does replying to this email.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Book when you're ready</a></p><p style=\"margin:0 0 14px;\">Thanks for considering us. And whatever you do about aging skin, get it in writing first.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"ref": "email_template.appt_confirm_email",
|
|
374
|
+
"name": "Appointment Confirmed",
|
|
375
|
+
"subject": "Confirmed, {{contact.first_name}}: your appointment details",
|
|
376
|
+
"html": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">Your appointment with {{custom_values.business_name}} is confirmed for {{appointment.start_time}}.</p><p style=\"margin:0 0 14px;\">What to have ready: a one-line description of the problem and anything you've already tried. That's it.</p><p style=\"margin:0 0 14px;\">What you'll leave with: honest options and, if you want it, a written proposal within a day or two.</p><p style=\"margin:0 0 14px;\">Need to move it? Use your booking link: <a href=\"{{custom_values.booking_link}}\" style=\"color:#1a56db;text-decoration:underline;\">reschedule</a>, or reply to this email.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
"ref": "email_template.appt_prep_email",
|
|
380
|
+
"name": "Appointment Prep (day before)",
|
|
381
|
+
"subject": "Tomorrow: 3 things that make it more useful",
|
|
382
|
+
"html": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">See you tomorrow at {{appointment.start_time}}. Three small things that make the time more useful:</p><ul style=\"margin:0 0 14px 20px;padding:0;\"><li style=\"margin:0 0 6px;\">Write down what \"fixed\" looks like to you, in one sentence.</li><li style=\"margin:0 0 6px;\">Have any quotes, photos or documents you already have to hand.</li><li style=\"margin:0 0 6px;\">Decide the one question you most want answered. We'll start there.</li></ul><p style=\"margin:0 0 14px;\">Running late or need to move it? Reply to this email or call {{custom_values.business_phone}}.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
"ref": "email_template.ns_email_1",
|
|
386
|
+
"name": "No-Show 1 - We Missed You",
|
|
387
|
+
"subject": "We missed you, {{contact.first_name}} (no guilt)",
|
|
388
|
+
"html": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">We had you down for today and it didn't work out. Life happens; nobody here is bothered.</p><p style=\"margin:0 0 14px;\">Your time is still yours. Pick a new one whenever it suits, and if something put you off, reply and tell me. I'd rather know.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Rebook my time</a></p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
"ref": "email_template.ns_email_2",
|
|
392
|
+
"name": "No-Show 2 - Still Want This?",
|
|
393
|
+
"subject": "Still want to do this?",
|
|
394
|
+
"html": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">Quick and honest: if the timing is wrong, say so and I'll check back in a few months. If it's still something you want sorted, the calendar is open.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Pick a new time</a></p><p style=\"margin:0 0 14px;\">Either way, thanks for considering {{custom_values.business_name}}.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
395
|
+
}
|
|
396
|
+
],
|
|
397
|
+
"sms": [
|
|
398
|
+
{
|
|
399
|
+
"ref": "sms_template.stl_sms_1",
|
|
400
|
+
"name": "Speed to Lead - Instant Text",
|
|
401
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Got your inquiry. In one line, what are you trying to sort out? Reply STOP to opt out."
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
"ref": "sms_template.stl_sms_2",
|
|
405
|
+
"name": "Speed to Lead - 20 Minute Text",
|
|
406
|
+
"body": "{{contact.first_name}}, I can hold a 30-min slot for you this week. Mornings or afternoons? Or grab one here: {{custom_values.booking_link}}"
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"ref": "sms_template.stl_sms_3",
|
|
410
|
+
"name": "Speed to Lead - Next Day Text",
|
|
411
|
+
"body": "Hi {{contact.first_name}}, {{custom_values.owner_first_name}} again. Not chasing, I just don't want your inquiry to fall through the cracks. Still want to find a time, or is it a \"not now\"?"
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
"ref": "sms_template.mc_sms_1",
|
|
415
|
+
"name": "Missed Call - Instant Text-Back",
|
|
416
|
+
"body": "Hi, it's {{custom_values.business_name}}. Sorry we missed your call. How can we help? Reply here and a real person will answer. Reply STOP to opt out."
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
"ref": "sms_template.mc_sms_2",
|
|
420
|
+
"name": "Missed Call - 1 Hour Text",
|
|
421
|
+
"body": "Still need us? Reply with a good time to call you back, or book directly: {{custom_values.booking_link}}. {{custom_values.business_name}}, {{custom_values.business_phone}}"
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
"ref": "sms_template.n_sms_1",
|
|
425
|
+
"name": "Nurture Text 1 - One Word",
|
|
426
|
+
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: what matters most to you here, speed, price, or getting it right first time? One word is enough. Reply STOP to opt out."
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
"ref": "sms_template.n_sms_2",
|
|
430
|
+
"name": "Nurture Text 2 - Free Tip",
|
|
431
|
+
"body": "Tip from {{custom_values.business_name}}: before you hire anyone for this, ask three things. What exactly is included? What happens if it takes longer? Who do I call if something goes wrong? Want the rest of the list? Reply YES."
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
"ref": "sms_template.n_sms_3",
|
|
435
|
+
"name": "Nurture Text 3 - Midpoint",
|
|
436
|
+
"body": "{{contact.first_name}}, it's {{custom_values.owner_first_name}}. Still thinking about aging skin? I have a couple of openings this week. Want one, or should I check back next month?"
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
"ref": "sms_template.n_sms_4",
|
|
440
|
+
"name": "Nurture Text 4 - Any Question",
|
|
441
|
+
"body": "Hi {{contact.first_name}}, {{custom_values.owner_first_name}} here. No pitch, just checking: did you ever get your question answered? If not, ask it here and I'll reply personally."
|
|
442
|
+
},
|
|
443
|
+
{
|
|
444
|
+
"ref": "sms_template.n_sms_5",
|
|
445
|
+
"name": "Nurture Text 5 - Last Direct Ask",
|
|
446
|
+
"body": "{{contact.first_name}}, last one from me at {{custom_values.business_name}}. If you want this sorted this month, reply YES and I'll send two times. If not, no hard feelings. Reply STOP to opt out."
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
"ref": "sms_template.w_sms_1",
|
|
450
|
+
"name": "Win-back Text 1",
|
|
451
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is this still on your list this quarter, or should I close your file for now? Reply STOP to opt out."
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
"ref": "sms_template.w_sms_2",
|
|
455
|
+
"name": "Win-back Text 2",
|
|
456
|
+
"body": "{{contact.first_name}}, two openings came up this week at {{custom_values.business_name}}. Want one for a quick conversation? Reply YES and I'll hold it."
|
|
457
|
+
},
|
|
458
|
+
{
|
|
459
|
+
"ref": "sms_template.appt_confirm_sms",
|
|
460
|
+
"name": "Appointment Confirmed Text",
|
|
461
|
+
"body": "{{contact.first_name}}, you're confirmed with {{custom_values.business_name}} for {{appointment.start_time}}. Need to change it? Reply here. Reply STOP to opt out."
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
"ref": "sms_template.appt_24h_sms",
|
|
465
|
+
"name": "Appointment Reminder - 24 Hours",
|
|
466
|
+
"body": "Reminder: your appointment with {{custom_values.business_name}} is tomorrow at {{appointment.start_time}}. Reply C to confirm or R to reschedule."
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
"ref": "sms_template.appt_2h_sms",
|
|
470
|
+
"name": "Appointment Reminder - 2 Hours",
|
|
471
|
+
"body": "See you in about 2 hours, {{contact.first_name}}. {{custom_values.business_name}}, {{appointment.start_time}}. Reply here if you're running late."
|
|
472
|
+
},
|
|
473
|
+
{
|
|
474
|
+
"ref": "sms_template.ns_sms_1",
|
|
475
|
+
"name": "No-Show Text 1",
|
|
476
|
+
"body": "Hi {{contact.first_name}}, we missed you today at {{custom_values.business_name}}. No problem at all. Want me to find you a new time this week? Reply YES. Reply STOP to opt out."
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
"ref": "sms_template.ns_sms_2",
|
|
480
|
+
"name": "No-Show Text 2",
|
|
481
|
+
"body": "{{contact.first_name}}, {{custom_values.owner_first_name}} here. I kept a couple of times open for you this week. Want one? Reply with a day that works."
|
|
482
|
+
}
|
|
483
|
+
]
|
|
484
|
+
},
|
|
87
485
|
"emails": [
|
|
88
|
-
{
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
486
|
+
{
|
|
487
|
+
"ref": "email.stl_email_1",
|
|
488
|
+
"name": "Speed to Lead - Instant Email",
|
|
489
|
+
"subject": "Got it, {{contact.first_name}}. Here's what happens next",
|
|
490
|
+
"templateRef": "email_template.stl_email_1",
|
|
491
|
+
"mergeTags": [
|
|
492
|
+
"contact.first_name",
|
|
493
|
+
"custom_values.business_name",
|
|
494
|
+
"custom_values.owner_first_name",
|
|
495
|
+
"custom_values.booking_link",
|
|
496
|
+
"custom_values.business_phone"
|
|
497
|
+
],
|
|
498
|
+
"body": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">Thanks for reaching out to {{custom_values.business_name}}. I'm {{custom_values.owner_first_name}}, and I see every inquiry that comes in.</p><p style=\"margin:0 0 14px;\">Here's what happens next: in the next few minutes you'll get a text from this number. Reply with one line about what you're trying to sort out, and I'll tell you straight whether we're the right fit, and what it would take.</p><p style=\"margin:0 0 14px;\">If you'd rather just talk, grab free skin assessment:</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Pick a time that suits me</a></p><p style=\"margin:0 0 14px;\">No pitch, no pressure. You'll leave the call knowing exactly what your options are.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
499
|
+
},
|
|
500
|
+
{
|
|
501
|
+
"ref": "email.stl_email_2",
|
|
502
|
+
"name": "Speed to Lead - 3 Hour Email",
|
|
503
|
+
"subject": "The three questions we ask first",
|
|
504
|
+
"templateRef": "email_template.stl_email_2",
|
|
505
|
+
"mergeTags": [
|
|
506
|
+
"contact.first_name",
|
|
507
|
+
"custom_values.business_name",
|
|
508
|
+
"custom_values.booking_link",
|
|
509
|
+
"custom_values.owner_first_name",
|
|
510
|
+
"custom_values.business_phone"
|
|
511
|
+
],
|
|
512
|
+
"body": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">Before anyone at {{custom_values.business_name}} recommends anything, we ask three questions:</p><ul style=\"margin:0 0 14px 20px;padding:0;\"><li style=\"margin:0 0 6px;\">What does \"fixed\" look like to you, in one sentence?</li><li style=\"margin:0 0 6px;\">What have you already tried, and what happened?</li><li style=\"margin:0 0 6px;\">What's the cost of leaving it as it is for another six months?</li></ul><p style=\"margin:0 0 14px;\">Your answers decide what we'd suggest and what we'd tell you not to bother with. That's the whole point of the first conversation.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Book the conversation</a></p><p style=\"margin:0 0 14px;\">Or reply to this email with your answer to the first question. I read every reply.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
513
|
+
},
|
|
514
|
+
{
|
|
515
|
+
"ref": "email.n_email_1",
|
|
516
|
+
"name": "Nurture 1 - The Mistake Most People Make",
|
|
517
|
+
"subject": "The mistake most people make with aging skin",
|
|
518
|
+
"templateRef": "email_template.n_email_1",
|
|
519
|
+
"mergeTags": [
|
|
520
|
+
"contact.first_name",
|
|
521
|
+
"custom_values.booking_link",
|
|
522
|
+
"custom_values.owner_first_name",
|
|
523
|
+
"custom_values.business_name",
|
|
524
|
+
"custom_values.business_phone"
|
|
525
|
+
],
|
|
526
|
+
"body": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">When people first contact us about aging skin, most have already made the same mistake: they've waited until it was urgent, then picked whoever answered the phone first.</p><p style=\"margin:0 0 14px;\">Urgent decisions are expensive decisions. The better first move is boring: get the problem described properly, get two or three options with real prices, and pick the one that solves the actual problem instead of the loudest symptom.</p><p style=\"margin:0 0 14px;\">That's what our first conversation is for. It's short, it's free, and you can take what you learn anywhere you like.</p><p style=\"margin:0 0 14px;\">When you're ready: <a href=\"{{custom_values.booking_link}}\" style=\"color:#1a56db;text-decoration:underline;\">pick a time</a>.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
527
|
+
},
|
|
528
|
+
{
|
|
529
|
+
"ref": "email.n_email_2",
|
|
530
|
+
"name": "Nurture 2 - How Working With Us Goes",
|
|
531
|
+
"subject": "How working with us actually goes",
|
|
532
|
+
"templateRef": "email_template.n_email_2",
|
|
533
|
+
"mergeTags": [
|
|
534
|
+
"contact.first_name",
|
|
535
|
+
"custom_values.booking_link",
|
|
536
|
+
"custom_values.owner_first_name",
|
|
537
|
+
"custom_values.business_name",
|
|
538
|
+
"custom_values.business_phone"
|
|
539
|
+
],
|
|
540
|
+
"body": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">People hesitate because they don't know what happens after they say yes. So here it is:</p><ul style=\"margin:0 0 14px 20px;padding:0;\"><li style=\"margin:0 0 6px;\">Step 1: a short conversation. You describe the problem; we ask the three questions; you get honest options.</li><li style=\"margin:0 0 6px;\">Step 2: a written proposal with what we'd do, what it costs, and what you should expect by when. You take it away; nobody chases you the same day.</li><li style=\"margin:0 0 6px;\">Step 3: we do the work, you get updates you didn't have to ask for, and we don't call it done until you do.</li></ul><p style=\"margin:0 0 14px;\">The objection we hear most is price. That's why step 2 is in writing with options, so you choose the scope, not us.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Start with step 1</a></p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
"ref": "email.n_email_3",
|
|
544
|
+
"name": "Nurture 3 - Why We Do It This Way",
|
|
545
|
+
"subject": "Why we do it this way",
|
|
546
|
+
"templateRef": "email_template.n_email_3",
|
|
547
|
+
"mergeTags": [
|
|
548
|
+
"contact.first_name",
|
|
549
|
+
"custom_values.business_name",
|
|
550
|
+
"custom_values.booking_link",
|
|
551
|
+
"custom_values.owner_first_name",
|
|
552
|
+
"custom_values.business_phone"
|
|
553
|
+
],
|
|
554
|
+
"body": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">The best thing a client can say about {{custom_values.business_name}} is \"there were no surprises.\" Not the most exciting compliment. It's the one that gets us referred.</p><p style=\"margin:0 0 14px;\">It comes from a rule: everything in writing before it happens, and you hear about a problem from us before you notice it yourself. Slower to set up than a handshake. Far cheaper by the end.</p><p style=\"margin:0 0 14px;\">If you want to see what that looks like for your situation, that's what the first conversation is for.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">See my options</a></p><p style=\"margin:0 0 14px;\">Have a question first? Reply to this email. I'll answer it myself.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
555
|
+
},
|
|
556
|
+
{
|
|
557
|
+
"ref": "email.n_email_4",
|
|
558
|
+
"name": "Nurture 4 - About the Cost",
|
|
559
|
+
"subject": "About the cost",
|
|
560
|
+
"templateRef": "email_template.n_email_4",
|
|
561
|
+
"mergeTags": [
|
|
562
|
+
"contact.first_name",
|
|
563
|
+
"custom_values.booking_link",
|
|
564
|
+
"custom_values.owner_first_name",
|
|
565
|
+
"custom_values.business_name",
|
|
566
|
+
"custom_values.business_phone"
|
|
567
|
+
],
|
|
568
|
+
"body": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">Let's talk about the thing most people are too polite to ask: what does it cost?</p><p style=\"margin:0 0 14px;\">Injectables and facials for first-time and returning clients is priced by scope, and the scope is yours to choose. The written proposal shows options side by side, with the price of each, before anything starts. There is never a number on the invoice you didn't see first.</p><p style=\"margin:0 0 14px;\">One honest warning: the cheapest quote is rarely the cheapest job. If a price looks too good, ask what's been left out. We'll tell you what's in ours line by line.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Get my written options</a></p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
"ref": "email.n_email_5",
|
|
572
|
+
"name": "Nurture 5 - What Waiting Costs",
|
|
573
|
+
"subject": "What waiting actually costs",
|
|
574
|
+
"templateRef": "email_template.n_email_5",
|
|
575
|
+
"mergeTags": [
|
|
576
|
+
"contact.first_name",
|
|
577
|
+
"custom_values.booking_link",
|
|
578
|
+
"custom_values.owner_first_name",
|
|
579
|
+
"custom_values.business_name",
|
|
580
|
+
"custom_values.business_phone"
|
|
581
|
+
],
|
|
582
|
+
"body": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">There's a comfortable idea that aging skin can wait until a better month. Sometimes true. Usually not.</p><p style=\"margin:0 0 14px;\">Problems like this rarely stay the same size. They compound quietly, and then one day they're urgent, and urgent always costs more than planned: less choice, less time to compare, more money.</p><p style=\"margin:0 0 14px;\">You don't have to do anything today. A conversation now just keeps the cheap options on the table.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Keep my options open</a></p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
583
|
+
},
|
|
584
|
+
{
|
|
585
|
+
"ref": "email.n_email_6",
|
|
586
|
+
"name": "Nurture 6 - Everything in One Place",
|
|
587
|
+
"subject": "Everything you need to decide, in one place",
|
|
588
|
+
"templateRef": "email_template.n_email_6",
|
|
589
|
+
"mergeTags": [
|
|
590
|
+
"contact.first_name",
|
|
591
|
+
"custom_values.business_name",
|
|
592
|
+
"custom_values.booking_link",
|
|
593
|
+
"custom_values.owner_first_name",
|
|
594
|
+
"custom_values.business_phone"
|
|
595
|
+
],
|
|
596
|
+
"body": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">If you're still weighing it up, here is everything in one place:</p><ul style=\"margin:0 0 14px 20px;padding:0;\"><li style=\"margin:0 0 6px;\">What: Free skin assessment with {{custom_values.business_name}}, and written options you keep.</li><li style=\"margin:0 0 6px;\">Where: Scottsdale, AZ.</li><li style=\"margin:0 0 6px;\">Cost of the first step: nothing. Cost of the work: shown per option, in writing, before anything starts.</li><li style=\"margin:0 0 6px;\">Our rule: no surprises. You hear about problems from us first.</li><li style=\"margin:0 0 6px;\">Book, cancel or move your time any time: <a href=\"{{custom_values.booking_link}}\" style=\"color:#1a56db;text-decoration:underline;\">your booking link</a>.</li></ul><p style=\"margin:0 0 14px;\">If the answer is \"not now\", that's fine. Reply with the word later and I'll stop the emails and check in next quarter.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Book the conversation</a></p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
597
|
+
},
|
|
598
|
+
{
|
|
599
|
+
"ref": "email.w_email_1",
|
|
600
|
+
"name": "Win-back 1 - One Question",
|
|
601
|
+
"subject": "One question, {{contact.first_name}}",
|
|
602
|
+
"templateRef": "email_template.w_email_1",
|
|
603
|
+
"mergeTags": [
|
|
604
|
+
"contact.first_name",
|
|
605
|
+
"custom_values.business_name",
|
|
606
|
+
"custom_values.owner_first_name",
|
|
607
|
+
"custom_values.business_phone"
|
|
608
|
+
],
|
|
609
|
+
"body": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">A while back you reached out to {{custom_values.business_name}} about aging skin, and then things went quiet. That's normal; it's what happens when something isn't urgent yet.</p><p style=\"margin:0 0 14px;\">One question, and an honest answer is all I need: what stopped you? Timing, price, trust, or something we said?</p><p style=\"margin:0 0 14px;\">Reply with a word or two. If it's something we can fix, I'll fix it. If it's not the right time, I'll leave you alone until it is.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
610
|
+
},
|
|
611
|
+
{
|
|
612
|
+
"ref": "email.w_email_2",
|
|
613
|
+
"name": "Win-back 2 - What Changed",
|
|
614
|
+
"subject": "What's changed since you last looked",
|
|
615
|
+
"templateRef": "email_template.w_email_2",
|
|
616
|
+
"mergeTags": [
|
|
617
|
+
"contact.first_name",
|
|
618
|
+
"custom_values.business_name",
|
|
619
|
+
"custom_values.booking_link",
|
|
620
|
+
"custom_values.owner_first_name",
|
|
621
|
+
"custom_values.business_phone"
|
|
622
|
+
],
|
|
623
|
+
"body": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">Since you first reached out, a couple of things have changed at {{custom_values.business_name}}: more availability on the calendar, and written options that now include a smaller first step for people who want to start carefully.</p><p style=\"margin:0 0 14px;\">What hasn't changed: the first conversation is still free, still short, and still ends with options you take away rather than a decision on the spot.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">See the calendar</a></p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
624
|
+
},
|
|
625
|
+
{
|
|
626
|
+
"ref": "email.w_email_3",
|
|
627
|
+
"name": "Win-back 3 - The Door Stays Open",
|
|
628
|
+
"subject": "The door stays open",
|
|
629
|
+
"templateRef": "email_template.w_email_3",
|
|
630
|
+
"mergeTags": [
|
|
631
|
+
"contact.first_name",
|
|
632
|
+
"custom_values.booking_link",
|
|
633
|
+
"custom_values.owner_first_name",
|
|
634
|
+
"custom_values.business_name",
|
|
635
|
+
"custom_values.business_phone"
|
|
636
|
+
],
|
|
637
|
+
"body": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">This is the last automatic email you'll get from me. I'd rather you hear from a person when the time is right than from a sequence.</p><p style=\"margin:0 0 14px;\">Your first conversation doesn't expire. When you're ready, the link below works, and so does replying to this email.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Book when you're ready</a></p><p style=\"margin:0 0 14px;\">Thanks for considering us. And whatever you do about aging skin, get it in writing first.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
638
|
+
},
|
|
639
|
+
{
|
|
640
|
+
"ref": "email.appt_confirm_email",
|
|
641
|
+
"name": "Appointment Confirmed",
|
|
642
|
+
"subject": "Confirmed, {{contact.first_name}}: your appointment details",
|
|
643
|
+
"templateRef": "email_template.appt_confirm_email",
|
|
644
|
+
"mergeTags": [
|
|
645
|
+
"contact.first_name",
|
|
646
|
+
"custom_values.business_name",
|
|
647
|
+
"appointment.start_time",
|
|
648
|
+
"custom_values.booking_link",
|
|
649
|
+
"custom_values.owner_first_name",
|
|
650
|
+
"custom_values.business_phone"
|
|
651
|
+
],
|
|
652
|
+
"body": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">Your appointment with {{custom_values.business_name}} is confirmed for {{appointment.start_time}}.</p><p style=\"margin:0 0 14px;\">What to have ready: a one-line description of the problem and anything you've already tried. That's it.</p><p style=\"margin:0 0 14px;\">What you'll leave with: honest options and, if you want it, a written proposal within a day or two.</p><p style=\"margin:0 0 14px;\">Need to move it? Use your booking link: <a href=\"{{custom_values.booking_link}}\" style=\"color:#1a56db;text-decoration:underline;\">reschedule</a>, or reply to this email.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
653
|
+
},
|
|
654
|
+
{
|
|
655
|
+
"ref": "email.appt_prep_email",
|
|
656
|
+
"name": "Appointment Prep (day before)",
|
|
657
|
+
"subject": "Tomorrow: 3 things that make it more useful",
|
|
658
|
+
"templateRef": "email_template.appt_prep_email",
|
|
659
|
+
"mergeTags": [
|
|
660
|
+
"contact.first_name",
|
|
661
|
+
"appointment.start_time",
|
|
662
|
+
"custom_values.business_phone",
|
|
663
|
+
"custom_values.owner_first_name",
|
|
664
|
+
"custom_values.business_name"
|
|
665
|
+
],
|
|
666
|
+
"body": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">See you tomorrow at {{appointment.start_time}}. Three small things that make the time more useful:</p><ul style=\"margin:0 0 14px 20px;padding:0;\"><li style=\"margin:0 0 6px;\">Write down what \"fixed\" looks like to you, in one sentence.</li><li style=\"margin:0 0 6px;\">Have any quotes, photos or documents you already have to hand.</li><li style=\"margin:0 0 6px;\">Decide the one question you most want answered. We'll start there.</li></ul><p style=\"margin:0 0 14px;\">Running late or need to move it? Reply to this email or call {{custom_values.business_phone}}.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
667
|
+
},
|
|
668
|
+
{
|
|
669
|
+
"ref": "email.ns_email_1",
|
|
670
|
+
"name": "No-Show 1 - We Missed You",
|
|
671
|
+
"subject": "We missed you, {{contact.first_name}} (no guilt)",
|
|
672
|
+
"templateRef": "email_template.ns_email_1",
|
|
673
|
+
"mergeTags": [
|
|
674
|
+
"contact.first_name",
|
|
675
|
+
"custom_values.booking_link",
|
|
676
|
+
"custom_values.owner_first_name",
|
|
677
|
+
"custom_values.business_name",
|
|
678
|
+
"custom_values.business_phone"
|
|
679
|
+
],
|
|
680
|
+
"body": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">We had you down for today and it didn't work out. Life happens; nobody here is bothered.</p><p style=\"margin:0 0 14px;\">Your time is still yours. Pick a new one whenever it suits, and if something put you off, reply and tell me. I'd rather know.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Rebook my time</a></p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
681
|
+
},
|
|
682
|
+
{
|
|
683
|
+
"ref": "email.ns_email_2",
|
|
684
|
+
"name": "No-Show 2 - Still Want This?",
|
|
685
|
+
"subject": "Still want to do this?",
|
|
686
|
+
"templateRef": "email_template.ns_email_2",
|
|
687
|
+
"mergeTags": [
|
|
688
|
+
"contact.first_name",
|
|
689
|
+
"custom_values.booking_link",
|
|
690
|
+
"custom_values.business_name",
|
|
691
|
+
"custom_values.owner_first_name",
|
|
692
|
+
"custom_values.business_phone"
|
|
693
|
+
],
|
|
694
|
+
"body": "<div style=\"font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.5;color:#1f2937;max-width:600px;\"><p style=\"margin:0 0 14px;\">Hi {{contact.first_name}},</p><p style=\"margin:0 0 14px;\">Quick and honest: if the timing is wrong, say so and I'll check back in a few months. If it's still something you want sorted, the calendar is open.</p><p style=\"margin:0 0 14px;\"><a href=\"{{custom_values.booking_link}}\" style=\"display:inline-block;background:#1a56db;color:#ffffff;padding:12px 20px;border-radius:6px;text-decoration:none;font-weight:600;\">Pick a new time</a></p><p style=\"margin:0 0 14px;\">Either way, thanks for considering {{custom_values.business_name}}.</p><p style=\"margin:0;\">{{custom_values.owner_first_name}}<br>{{custom_values.business_name}} · {{custom_values.business_phone}}</p></div>"
|
|
695
|
+
}
|
|
95
696
|
],
|
|
96
697
|
"sms": [
|
|
97
|
-
{
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
698
|
+
{
|
|
699
|
+
"ref": "sms.stl_sms_1",
|
|
700
|
+
"name": "Speed to Lead - Instant Text",
|
|
701
|
+
"templateRef": "sms_template.stl_sms_1",
|
|
702
|
+
"mergeTags": [
|
|
703
|
+
"contact.first_name",
|
|
704
|
+
"custom_values.owner_first_name",
|
|
705
|
+
"custom_values.business_name"
|
|
706
|
+
],
|
|
707
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Got your inquiry. In one line, what are you trying to sort out? Reply STOP to opt out."
|
|
708
|
+
},
|
|
709
|
+
{
|
|
710
|
+
"ref": "sms.stl_sms_2",
|
|
711
|
+
"name": "Speed to Lead - 20 Minute Text",
|
|
712
|
+
"templateRef": "sms_template.stl_sms_2",
|
|
713
|
+
"mergeTags": [
|
|
714
|
+
"contact.first_name",
|
|
715
|
+
"custom_values.booking_link"
|
|
716
|
+
],
|
|
717
|
+
"body": "{{contact.first_name}}, I can hold a 30-min slot for you this week. Mornings or afternoons? Or grab one here: {{custom_values.booking_link}}"
|
|
718
|
+
},
|
|
719
|
+
{
|
|
720
|
+
"ref": "sms.stl_sms_3",
|
|
721
|
+
"name": "Speed to Lead - Next Day Text",
|
|
722
|
+
"templateRef": "sms_template.stl_sms_3",
|
|
723
|
+
"mergeTags": [
|
|
724
|
+
"contact.first_name",
|
|
725
|
+
"custom_values.owner_first_name"
|
|
726
|
+
],
|
|
727
|
+
"body": "Hi {{contact.first_name}}, {{custom_values.owner_first_name}} again. Not chasing, I just don't want your inquiry to fall through the cracks. Still want to find a time, or is it a \"not now\"?"
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
"ref": "sms.mc_sms_1",
|
|
731
|
+
"name": "Missed Call - Instant Text-Back",
|
|
732
|
+
"templateRef": "sms_template.mc_sms_1",
|
|
733
|
+
"mergeTags": [
|
|
734
|
+
"custom_values.business_name"
|
|
735
|
+
],
|
|
736
|
+
"body": "Hi, it's {{custom_values.business_name}}. Sorry we missed your call. How can we help? Reply here and a real person will answer. Reply STOP to opt out."
|
|
737
|
+
},
|
|
738
|
+
{
|
|
739
|
+
"ref": "sms.mc_sms_2",
|
|
740
|
+
"name": "Missed Call - 1 Hour Text",
|
|
741
|
+
"templateRef": "sms_template.mc_sms_2",
|
|
742
|
+
"mergeTags": [
|
|
743
|
+
"custom_values.booking_link",
|
|
744
|
+
"custom_values.business_name",
|
|
745
|
+
"custom_values.business_phone"
|
|
746
|
+
],
|
|
747
|
+
"body": "Still need us? Reply with a good time to call you back, or book directly: {{custom_values.booking_link}}. {{custom_values.business_name}}, {{custom_values.business_phone}}"
|
|
748
|
+
},
|
|
749
|
+
{
|
|
750
|
+
"ref": "sms.n_sms_1",
|
|
751
|
+
"name": "Nurture Text 1 - One Word",
|
|
752
|
+
"templateRef": "sms_template.n_sms_1",
|
|
753
|
+
"mergeTags": [
|
|
754
|
+
"contact.first_name",
|
|
755
|
+
"custom_values.owner_first_name",
|
|
756
|
+
"custom_values.business_name"
|
|
757
|
+
],
|
|
758
|
+
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: what matters most to you here, speed, price, or getting it right first time? One word is enough. Reply STOP to opt out."
|
|
759
|
+
},
|
|
760
|
+
{
|
|
761
|
+
"ref": "sms.n_sms_2",
|
|
762
|
+
"name": "Nurture Text 2 - Free Tip",
|
|
763
|
+
"templateRef": "sms_template.n_sms_2",
|
|
764
|
+
"mergeTags": [
|
|
765
|
+
"custom_values.business_name"
|
|
766
|
+
],
|
|
767
|
+
"body": "Tip from {{custom_values.business_name}}: before you hire anyone for this, ask three things. What exactly is included? What happens if it takes longer? Who do I call if something goes wrong? Want the rest of the list? Reply YES."
|
|
768
|
+
},
|
|
769
|
+
{
|
|
770
|
+
"ref": "sms.n_sms_3",
|
|
771
|
+
"name": "Nurture Text 3 - Midpoint",
|
|
772
|
+
"templateRef": "sms_template.n_sms_3",
|
|
773
|
+
"mergeTags": [
|
|
774
|
+
"contact.first_name",
|
|
775
|
+
"custom_values.owner_first_name"
|
|
776
|
+
],
|
|
777
|
+
"body": "{{contact.first_name}}, it's {{custom_values.owner_first_name}}. Still thinking about aging skin? I have a couple of openings this week. Want one, or should I check back next month?"
|
|
778
|
+
},
|
|
779
|
+
{
|
|
780
|
+
"ref": "sms.n_sms_4",
|
|
781
|
+
"name": "Nurture Text 4 - Any Question",
|
|
782
|
+
"templateRef": "sms_template.n_sms_4",
|
|
783
|
+
"mergeTags": [
|
|
784
|
+
"contact.first_name",
|
|
785
|
+
"custom_values.owner_first_name"
|
|
786
|
+
],
|
|
787
|
+
"body": "Hi {{contact.first_name}}, {{custom_values.owner_first_name}} here. No pitch, just checking: did you ever get your question answered? If not, ask it here and I'll reply personally."
|
|
788
|
+
},
|
|
789
|
+
{
|
|
790
|
+
"ref": "sms.n_sms_5",
|
|
791
|
+
"name": "Nurture Text 5 - Last Direct Ask",
|
|
792
|
+
"templateRef": "sms_template.n_sms_5",
|
|
793
|
+
"mergeTags": [
|
|
794
|
+
"contact.first_name",
|
|
795
|
+
"custom_values.business_name"
|
|
796
|
+
],
|
|
797
|
+
"body": "{{contact.first_name}}, last one from me at {{custom_values.business_name}}. If you want this sorted this month, reply YES and I'll send two times. If not, no hard feelings. Reply STOP to opt out."
|
|
798
|
+
},
|
|
799
|
+
{
|
|
800
|
+
"ref": "sms.w_sms_1",
|
|
801
|
+
"name": "Win-back Text 1",
|
|
802
|
+
"templateRef": "sms_template.w_sms_1",
|
|
803
|
+
"mergeTags": [
|
|
804
|
+
"contact.first_name",
|
|
805
|
+
"custom_values.owner_first_name",
|
|
806
|
+
"custom_values.business_name"
|
|
807
|
+
],
|
|
808
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is this still on your list this quarter, or should I close your file for now? Reply STOP to opt out."
|
|
809
|
+
},
|
|
810
|
+
{
|
|
811
|
+
"ref": "sms.w_sms_2",
|
|
812
|
+
"name": "Win-back Text 2",
|
|
813
|
+
"templateRef": "sms_template.w_sms_2",
|
|
814
|
+
"mergeTags": [
|
|
815
|
+
"contact.first_name",
|
|
816
|
+
"custom_values.business_name"
|
|
817
|
+
],
|
|
818
|
+
"body": "{{contact.first_name}}, two openings came up this week at {{custom_values.business_name}}. Want one for a quick conversation? Reply YES and I'll hold it."
|
|
819
|
+
},
|
|
820
|
+
{
|
|
821
|
+
"ref": "sms.appt_confirm_sms",
|
|
822
|
+
"name": "Appointment Confirmed Text",
|
|
823
|
+
"templateRef": "sms_template.appt_confirm_sms",
|
|
824
|
+
"mergeTags": [
|
|
825
|
+
"contact.first_name",
|
|
826
|
+
"custom_values.business_name",
|
|
827
|
+
"appointment.start_time"
|
|
828
|
+
],
|
|
829
|
+
"body": "{{contact.first_name}}, you're confirmed with {{custom_values.business_name}} for {{appointment.start_time}}. Need to change it? Reply here. Reply STOP to opt out."
|
|
830
|
+
},
|
|
831
|
+
{
|
|
832
|
+
"ref": "sms.appt_24h_sms",
|
|
833
|
+
"name": "Appointment Reminder - 24 Hours",
|
|
834
|
+
"templateRef": "sms_template.appt_24h_sms",
|
|
835
|
+
"mergeTags": [
|
|
836
|
+
"custom_values.business_name",
|
|
837
|
+
"appointment.start_time"
|
|
838
|
+
],
|
|
839
|
+
"body": "Reminder: your appointment with {{custom_values.business_name}} is tomorrow at {{appointment.start_time}}. Reply C to confirm or R to reschedule."
|
|
840
|
+
},
|
|
841
|
+
{
|
|
842
|
+
"ref": "sms.appt_2h_sms",
|
|
843
|
+
"name": "Appointment Reminder - 2 Hours",
|
|
844
|
+
"templateRef": "sms_template.appt_2h_sms",
|
|
845
|
+
"mergeTags": [
|
|
846
|
+
"contact.first_name",
|
|
847
|
+
"custom_values.business_name",
|
|
848
|
+
"appointment.start_time"
|
|
849
|
+
],
|
|
850
|
+
"body": "See you in about 2 hours, {{contact.first_name}}. {{custom_values.business_name}}, {{appointment.start_time}}. Reply here if you're running late."
|
|
851
|
+
},
|
|
852
|
+
{
|
|
853
|
+
"ref": "sms.ns_sms_1",
|
|
854
|
+
"name": "No-Show Text 1",
|
|
855
|
+
"templateRef": "sms_template.ns_sms_1",
|
|
856
|
+
"mergeTags": [
|
|
857
|
+
"contact.first_name",
|
|
858
|
+
"custom_values.business_name"
|
|
859
|
+
],
|
|
860
|
+
"body": "Hi {{contact.first_name}}, we missed you today at {{custom_values.business_name}}. No problem at all. Want me to find you a new time this week? Reply YES. Reply STOP to opt out."
|
|
861
|
+
},
|
|
862
|
+
{
|
|
863
|
+
"ref": "sms.ns_sms_2",
|
|
864
|
+
"name": "No-Show Text 2",
|
|
865
|
+
"templateRef": "sms_template.ns_sms_2",
|
|
866
|
+
"mergeTags": [
|
|
867
|
+
"contact.first_name",
|
|
868
|
+
"custom_values.owner_first_name"
|
|
869
|
+
],
|
|
870
|
+
"body": "{{contact.first_name}}, {{custom_values.owner_first_name}} here. I kept a couple of times open for you this week. Want one? Reply with a day that works."
|
|
871
|
+
}
|
|
101
872
|
],
|
|
102
873
|
"workflows": [
|
|
103
874
|
{
|
|
104
875
|
"ref": "workflow.speed_to_lead",
|
|
105
876
|
"name": "Speed to Lead",
|
|
106
|
-
"trigger": {
|
|
877
|
+
"trigger": {
|
|
878
|
+
"type": "form_submission",
|
|
879
|
+
"formRef": "form.intake"
|
|
880
|
+
},
|
|
107
881
|
"stopOnResponse": true,
|
|
108
882
|
"actions": [
|
|
109
|
-
{
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
{
|
|
114
|
-
|
|
883
|
+
{
|
|
884
|
+
"type": "add_contact_tag",
|
|
885
|
+
"tagRef": "tag.lc_new_lead"
|
|
886
|
+
},
|
|
887
|
+
{
|
|
888
|
+
"type": "create_opportunity",
|
|
889
|
+
"pipelineRef": "pipeline.main",
|
|
890
|
+
"stageRef": "stage.new_lead",
|
|
891
|
+
"name": "{{contact.name}} - New Lead"
|
|
892
|
+
},
|
|
893
|
+
{
|
|
894
|
+
"type": "assign_user",
|
|
895
|
+
"userRef": "user.dana_reyes"
|
|
896
|
+
},
|
|
897
|
+
{
|
|
898
|
+
"type": "send_sms",
|
|
899
|
+
"smsRef": "sms.stl_sms_1"
|
|
900
|
+
},
|
|
901
|
+
{
|
|
902
|
+
"type": "send_email",
|
|
903
|
+
"emailRef": "email.stl_email_1"
|
|
904
|
+
},
|
|
905
|
+
{
|
|
906
|
+
"type": "internal_notification",
|
|
907
|
+
"userRef": "user.dana_reyes",
|
|
908
|
+
"title": "New lead: {{contact.first_name}} {{contact.last_name}}",
|
|
909
|
+
"body": "{{contact.first_name}} just came in from the inquiry form. Phone {{contact.phone}}. Call within 5 minutes; the first text and email already went out."
|
|
910
|
+
},
|
|
911
|
+
{
|
|
912
|
+
"type": "task_notification",
|
|
913
|
+
"userRef": "user.dana_reyes",
|
|
914
|
+
"title": "Call {{contact.first_name}} now (new lead)",
|
|
915
|
+
"body": "Speed-to-lead call. {{contact.first_name}} {{contact.last_name}}, {{contact.phone}}, {{contact.email}}. Goal: one question about what they need, then hold a time. Log the outcome in the contact notes.",
|
|
916
|
+
"dueDate": "1"
|
|
917
|
+
},
|
|
918
|
+
{
|
|
919
|
+
"type": "wait",
|
|
920
|
+
"value": 20,
|
|
921
|
+
"unit": "minutes"
|
|
922
|
+
},
|
|
923
|
+
{
|
|
924
|
+
"type": "send_sms",
|
|
925
|
+
"smsRef": "sms.stl_sms_2"
|
|
926
|
+
},
|
|
927
|
+
{
|
|
928
|
+
"type": "wait",
|
|
929
|
+
"value": 3,
|
|
930
|
+
"unit": "hours"
|
|
931
|
+
},
|
|
932
|
+
{
|
|
933
|
+
"type": "send_email",
|
|
934
|
+
"emailRef": "email.stl_email_2"
|
|
935
|
+
},
|
|
936
|
+
{
|
|
937
|
+
"type": "wait",
|
|
938
|
+
"value": 1,
|
|
939
|
+
"unit": "days"
|
|
940
|
+
},
|
|
941
|
+
{
|
|
942
|
+
"type": "send_sms",
|
|
943
|
+
"smsRef": "sms.stl_sms_3"
|
|
944
|
+
},
|
|
945
|
+
{
|
|
946
|
+
"type": "add_notes",
|
|
947
|
+
"body": "Speed to Lead finished with no reply (5 touches over 24 hours). Handed off to Lead Nurture (30 days) by the nurture-start tag."
|
|
948
|
+
},
|
|
949
|
+
{
|
|
950
|
+
"type": "add_contact_tag",
|
|
951
|
+
"tagRef": "tag.nurture_start"
|
|
952
|
+
}
|
|
115
953
|
]
|
|
116
954
|
},
|
|
117
955
|
{
|
|
118
|
-
"ref": "workflow.
|
|
119
|
-
"name": "
|
|
120
|
-
"trigger": {
|
|
956
|
+
"ref": "workflow.missed_call",
|
|
957
|
+
"name": "Missed Call Text-Back",
|
|
958
|
+
"trigger": {
|
|
959
|
+
"type": "call_status",
|
|
960
|
+
"callStatuses": [
|
|
961
|
+
"no-answer",
|
|
962
|
+
"busy",
|
|
963
|
+
"voicemail"
|
|
964
|
+
],
|
|
965
|
+
"callDirection": "inbound"
|
|
966
|
+
},
|
|
121
967
|
"stopOnResponse": true,
|
|
122
968
|
"actions": [
|
|
123
|
-
{
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
{
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
{
|
|
969
|
+
{
|
|
970
|
+
"type": "send_sms",
|
|
971
|
+
"smsRef": "sms.mc_sms_1"
|
|
972
|
+
},
|
|
973
|
+
{
|
|
974
|
+
"type": "add_contact_tag",
|
|
975
|
+
"tagRef": "tag.missed_call"
|
|
976
|
+
},
|
|
977
|
+
{
|
|
978
|
+
"type": "add_contact_tag",
|
|
979
|
+
"tagRef": "tag.source_phone"
|
|
980
|
+
},
|
|
981
|
+
{
|
|
982
|
+
"type": "internal_notification",
|
|
983
|
+
"userRef": "user.dana_reyes",
|
|
984
|
+
"title": "Missed call: {{contact.first_name}} {{contact.phone}}",
|
|
985
|
+
"body": "An inbound call from {{contact.phone}} was not answered. A text-back already went out. Call back as soon as you can."
|
|
986
|
+
},
|
|
987
|
+
{
|
|
988
|
+
"type": "task_notification",
|
|
989
|
+
"userRef": "user.dana_reyes",
|
|
990
|
+
"title": "Call back {{contact.first_name}} (missed call)",
|
|
991
|
+
"body": "Missed inbound call from {{contact.phone}}. The text-back asked what they need; check the conversation first, then call.",
|
|
992
|
+
"dueDate": "1"
|
|
993
|
+
},
|
|
994
|
+
{
|
|
995
|
+
"type": "wait",
|
|
996
|
+
"value": 1,
|
|
997
|
+
"unit": "hours"
|
|
998
|
+
},
|
|
999
|
+
{
|
|
1000
|
+
"type": "send_sms",
|
|
1001
|
+
"smsRef": "sms.mc_sms_2"
|
|
1002
|
+
}
|
|
132
1003
|
]
|
|
133
1004
|
},
|
|
134
1005
|
{
|
|
135
|
-
"ref": "workflow.
|
|
136
|
-
"name": "
|
|
137
|
-
"trigger": {
|
|
1006
|
+
"ref": "workflow.lead_nurture",
|
|
1007
|
+
"name": "Lead Nurture (30 days)",
|
|
1008
|
+
"trigger": {
|
|
1009
|
+
"type": "contact_tag",
|
|
1010
|
+
"tagRef": "tag.nurture_start"
|
|
1011
|
+
},
|
|
138
1012
|
"stopOnResponse": true,
|
|
139
1013
|
"actions": [
|
|
140
|
-
{
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
1014
|
+
{
|
|
1015
|
+
"type": "remove_contact_tag",
|
|
1016
|
+
"tagRef": "tag.nurture_start"
|
|
1017
|
+
},
|
|
1018
|
+
{
|
|
1019
|
+
"type": "add_contact_tag",
|
|
1020
|
+
"tagRef": "tag.lc_nurturing"
|
|
1021
|
+
},
|
|
1022
|
+
{
|
|
1023
|
+
"type": "wait",
|
|
1024
|
+
"value": 1,
|
|
1025
|
+
"unit": "days"
|
|
1026
|
+
},
|
|
1027
|
+
{
|
|
1028
|
+
"type": "send_email",
|
|
1029
|
+
"emailRef": "email.n_email_1"
|
|
1030
|
+
},
|
|
1031
|
+
{
|
|
1032
|
+
"type": "wait",
|
|
1033
|
+
"value": 2,
|
|
1034
|
+
"unit": "days"
|
|
1035
|
+
},
|
|
1036
|
+
{
|
|
1037
|
+
"type": "send_sms",
|
|
1038
|
+
"smsRef": "sms.n_sms_1"
|
|
1039
|
+
},
|
|
1040
|
+
{
|
|
1041
|
+
"type": "wait",
|
|
1042
|
+
"value": 2,
|
|
1043
|
+
"unit": "days"
|
|
1044
|
+
},
|
|
1045
|
+
{
|
|
1046
|
+
"type": "send_email",
|
|
1047
|
+
"emailRef": "email.n_email_2"
|
|
1048
|
+
},
|
|
1049
|
+
{
|
|
1050
|
+
"type": "wait",
|
|
1051
|
+
"value": 3,
|
|
1052
|
+
"unit": "days"
|
|
1053
|
+
},
|
|
1054
|
+
{
|
|
1055
|
+
"type": "send_sms",
|
|
1056
|
+
"smsRef": "sms.n_sms_2"
|
|
1057
|
+
},
|
|
1058
|
+
{
|
|
1059
|
+
"type": "wait",
|
|
1060
|
+
"value": 2,
|
|
1061
|
+
"unit": "days"
|
|
1062
|
+
},
|
|
1063
|
+
{
|
|
1064
|
+
"type": "send_email",
|
|
1065
|
+
"emailRef": "email.n_email_3"
|
|
1066
|
+
},
|
|
1067
|
+
{
|
|
1068
|
+
"type": "wait",
|
|
1069
|
+
"value": 4,
|
|
1070
|
+
"unit": "days"
|
|
1071
|
+
},
|
|
1072
|
+
{
|
|
1073
|
+
"type": "send_email",
|
|
1074
|
+
"emailRef": "email.n_email_4"
|
|
1075
|
+
},
|
|
1076
|
+
{
|
|
1077
|
+
"type": "wait",
|
|
1078
|
+
"value": 1,
|
|
1079
|
+
"unit": "days"
|
|
1080
|
+
},
|
|
1081
|
+
{
|
|
1082
|
+
"type": "send_sms",
|
|
1083
|
+
"smsRef": "sms.n_sms_3"
|
|
1084
|
+
},
|
|
1085
|
+
{
|
|
1086
|
+
"type": "wait",
|
|
1087
|
+
"value": 5,
|
|
1088
|
+
"unit": "days"
|
|
1089
|
+
},
|
|
1090
|
+
{
|
|
1091
|
+
"type": "send_email",
|
|
1092
|
+
"emailRef": "email.n_email_5"
|
|
1093
|
+
},
|
|
1094
|
+
{
|
|
1095
|
+
"type": "wait",
|
|
1096
|
+
"value": 3,
|
|
1097
|
+
"unit": "days"
|
|
1098
|
+
},
|
|
1099
|
+
{
|
|
1100
|
+
"type": "send_sms",
|
|
1101
|
+
"smsRef": "sms.n_sms_4"
|
|
1102
|
+
},
|
|
1103
|
+
{
|
|
1104
|
+
"type": "wait",
|
|
1105
|
+
"value": 4,
|
|
1106
|
+
"unit": "days"
|
|
1107
|
+
},
|
|
1108
|
+
{
|
|
1109
|
+
"type": "send_email",
|
|
1110
|
+
"emailRef": "email.n_email_6"
|
|
1111
|
+
},
|
|
1112
|
+
{
|
|
1113
|
+
"type": "wait",
|
|
1114
|
+
"value": 3,
|
|
1115
|
+
"unit": "days"
|
|
1116
|
+
},
|
|
1117
|
+
{
|
|
1118
|
+
"type": "send_sms",
|
|
1119
|
+
"smsRef": "sms.n_sms_5"
|
|
1120
|
+
},
|
|
1121
|
+
{
|
|
1122
|
+
"type": "wait",
|
|
1123
|
+
"value": 1,
|
|
1124
|
+
"unit": "days"
|
|
1125
|
+
},
|
|
1126
|
+
{
|
|
1127
|
+
"type": "add_notes",
|
|
1128
|
+
"body": "Lead Nurture (30 days) finished with no reply: 11 touches over 31 days. Tagged lapsed; Win-back starts from the winback-start tag."
|
|
1129
|
+
},
|
|
1130
|
+
{
|
|
1131
|
+
"type": "add_contact_tag",
|
|
1132
|
+
"tagRef": "tag.lc_lapsed"
|
|
1133
|
+
},
|
|
1134
|
+
{
|
|
1135
|
+
"type": "add_contact_tag",
|
|
1136
|
+
"tagRef": "tag.winback_start"
|
|
1137
|
+
}
|
|
144
1138
|
]
|
|
145
1139
|
},
|
|
146
1140
|
{
|
|
147
|
-
"ref": "workflow.
|
|
148
|
-
"name": "
|
|
149
|
-
"trigger": {
|
|
1141
|
+
"ref": "workflow.reply_route",
|
|
1142
|
+
"name": "Replied - Stop & Route",
|
|
1143
|
+
"trigger": {
|
|
1144
|
+
"type": "customer_reply"
|
|
1145
|
+
},
|
|
150
1146
|
"stopOnResponse": false,
|
|
151
1147
|
"actions": [
|
|
152
|
-
{
|
|
153
|
-
|
|
154
|
-
|
|
1148
|
+
{
|
|
1149
|
+
"type": "remove_from_workflow",
|
|
1150
|
+
"workflowRef": "workflow.speed_to_lead"
|
|
1151
|
+
},
|
|
1152
|
+
{
|
|
1153
|
+
"type": "remove_from_workflow",
|
|
1154
|
+
"workflowRef": "workflow.missed_call"
|
|
1155
|
+
},
|
|
1156
|
+
{
|
|
1157
|
+
"type": "remove_from_workflow",
|
|
1158
|
+
"workflowRef": "workflow.lead_nurture"
|
|
1159
|
+
},
|
|
1160
|
+
{
|
|
1161
|
+
"type": "remove_from_workflow",
|
|
1162
|
+
"workflowRef": "workflow.win_back"
|
|
1163
|
+
},
|
|
1164
|
+
{
|
|
1165
|
+
"type": "remove_from_workflow",
|
|
1166
|
+
"workflowRef": "workflow.no_show"
|
|
1167
|
+
},
|
|
1168
|
+
{
|
|
1169
|
+
"type": "add_notes",
|
|
1170
|
+
"body": "Contact replied. Removed from Speed to Lead, Missed Call Text-Back, Lead Nurture, Win-back and No-Show Rescue. A human owns the conversation from here."
|
|
1171
|
+
},
|
|
1172
|
+
{
|
|
1173
|
+
"type": "add_contact_tag",
|
|
1174
|
+
"tagRef": "tag.lc_contacted"
|
|
1175
|
+
},
|
|
1176
|
+
{
|
|
1177
|
+
"type": "internal_notification",
|
|
1178
|
+
"userRef": "user.dana_reyes",
|
|
1179
|
+
"title": "{{contact.first_name}} replied",
|
|
1180
|
+
"body": "{{contact.first_name}} {{contact.last_name}} replied. All automated sequences stopped. Answer within 15 minutes: {{contact.phone}}"
|
|
1181
|
+
},
|
|
1182
|
+
{
|
|
1183
|
+
"type": "task_notification",
|
|
1184
|
+
"userRef": "user.dana_reyes",
|
|
1185
|
+
"title": "Reply to {{contact.first_name}} (15-minute target)",
|
|
1186
|
+
"body": "They replied to a message. Read the conversation, answer the question they asked, and offer one concrete time.",
|
|
1187
|
+
"dueDate": "1"
|
|
1188
|
+
}
|
|
155
1189
|
]
|
|
156
1190
|
},
|
|
157
1191
|
{
|
|
158
1192
|
"ref": "workflow.win_back",
|
|
159
|
-
"name": "Win-back",
|
|
160
|
-
"trigger": {
|
|
1193
|
+
"name": "Win-back (30 days)",
|
|
1194
|
+
"trigger": {
|
|
1195
|
+
"type": "contact_tag",
|
|
1196
|
+
"tagRef": "tag.winback_start"
|
|
1197
|
+
},
|
|
161
1198
|
"stopOnResponse": true,
|
|
162
1199
|
"actions": [
|
|
163
|
-
{
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
{
|
|
1200
|
+
{
|
|
1201
|
+
"type": "remove_contact_tag",
|
|
1202
|
+
"tagRef": "tag.winback_start"
|
|
1203
|
+
},
|
|
1204
|
+
{
|
|
1205
|
+
"type": "send_email",
|
|
1206
|
+
"emailRef": "email.w_email_1"
|
|
1207
|
+
},
|
|
1208
|
+
{
|
|
1209
|
+
"type": "wait",
|
|
1210
|
+
"value": 7,
|
|
1211
|
+
"unit": "days"
|
|
1212
|
+
},
|
|
1213
|
+
{
|
|
1214
|
+
"type": "send_sms",
|
|
1215
|
+
"smsRef": "sms.w_sms_1"
|
|
1216
|
+
},
|
|
1217
|
+
{
|
|
1218
|
+
"type": "wait",
|
|
1219
|
+
"value": 7,
|
|
1220
|
+
"unit": "days"
|
|
1221
|
+
},
|
|
1222
|
+
{
|
|
1223
|
+
"type": "send_email",
|
|
1224
|
+
"emailRef": "email.w_email_2"
|
|
1225
|
+
},
|
|
1226
|
+
{
|
|
1227
|
+
"type": "wait",
|
|
1228
|
+
"value": 8,
|
|
1229
|
+
"unit": "days"
|
|
1230
|
+
},
|
|
1231
|
+
{
|
|
1232
|
+
"type": "send_sms",
|
|
1233
|
+
"smsRef": "sms.w_sms_2"
|
|
1234
|
+
},
|
|
1235
|
+
{
|
|
1236
|
+
"type": "wait",
|
|
1237
|
+
"value": 8,
|
|
1238
|
+
"unit": "days"
|
|
1239
|
+
},
|
|
1240
|
+
{
|
|
1241
|
+
"type": "send_email",
|
|
1242
|
+
"emailRef": "email.w_email_3"
|
|
1243
|
+
},
|
|
1244
|
+
{
|
|
1245
|
+
"type": "wait",
|
|
1246
|
+
"value": 1,
|
|
1247
|
+
"unit": "days"
|
|
1248
|
+
},
|
|
1249
|
+
{
|
|
1250
|
+
"type": "add_notes",
|
|
1251
|
+
"body": "Win-back finished with no reply: 5 touches over 31 days. Tagged lost. The contact stays in the database for future campaigns; nothing else sends automatically."
|
|
1252
|
+
},
|
|
1253
|
+
{
|
|
1254
|
+
"type": "add_contact_tag",
|
|
1255
|
+
"tagRef": "tag.lc_lost"
|
|
1256
|
+
}
|
|
168
1257
|
]
|
|
169
1258
|
},
|
|
170
1259
|
{
|
|
171
|
-
"ref": "workflow.
|
|
172
|
-
"name": "
|
|
173
|
-
"trigger": {
|
|
1260
|
+
"ref": "workflow.appointment_booked",
|
|
1261
|
+
"name": "Appointment Booked - Confirm & Move",
|
|
1262
|
+
"trigger": {
|
|
1263
|
+
"type": "appointment",
|
|
1264
|
+
"appointmentStatus": "confirmed",
|
|
1265
|
+
"calendarRef": "calendar.consult"
|
|
1266
|
+
},
|
|
1267
|
+
"stopOnResponse": false,
|
|
1268
|
+
"actions": [
|
|
1269
|
+
{
|
|
1270
|
+
"type": "remove_from_workflow",
|
|
1271
|
+
"workflowRef": "workflow.speed_to_lead"
|
|
1272
|
+
},
|
|
1273
|
+
{
|
|
1274
|
+
"type": "remove_from_workflow",
|
|
1275
|
+
"workflowRef": "workflow.lead_nurture"
|
|
1276
|
+
},
|
|
1277
|
+
{
|
|
1278
|
+
"type": "remove_from_workflow",
|
|
1279
|
+
"workflowRef": "workflow.win_back"
|
|
1280
|
+
},
|
|
1281
|
+
{
|
|
1282
|
+
"type": "add_contact_tag",
|
|
1283
|
+
"tagRef": "tag.lc_booked"
|
|
1284
|
+
},
|
|
1285
|
+
{
|
|
1286
|
+
"type": "internal_notification",
|
|
1287
|
+
"userRef": "user.dana_reyes",
|
|
1288
|
+
"title": "Appointment booked: {{contact.first_name}}",
|
|
1289
|
+
"body": "{{contact.first_name}} {{contact.last_name}} booked an appointment for {{appointment.start_time}}. Confirmation sent."
|
|
1290
|
+
},
|
|
1291
|
+
{
|
|
1292
|
+
"type": "send_email",
|
|
1293
|
+
"emailRef": "email.appt_confirm_email"
|
|
1294
|
+
},
|
|
1295
|
+
{
|
|
1296
|
+
"type": "send_sms",
|
|
1297
|
+
"smsRef": "sms.appt_confirm_sms"
|
|
1298
|
+
},
|
|
1299
|
+
{
|
|
1300
|
+
"type": "find_opportunity",
|
|
1301
|
+
"pipelineRef": "pipeline.main",
|
|
1302
|
+
"found": [
|
|
1303
|
+
{
|
|
1304
|
+
"type": "update_opportunity",
|
|
1305
|
+
"pipelineRef": "pipeline.main",
|
|
1306
|
+
"stageRef": "stage.consult_booked"
|
|
1307
|
+
}
|
|
1308
|
+
],
|
|
1309
|
+
"notFound": [
|
|
1310
|
+
{
|
|
1311
|
+
"type": "create_opportunity",
|
|
1312
|
+
"pipelineRef": "pipeline.main",
|
|
1313
|
+
"stageRef": "stage.consult_booked",
|
|
1314
|
+
"name": "{{contact.name}} - Appointment Booked"
|
|
1315
|
+
}
|
|
1316
|
+
]
|
|
1317
|
+
}
|
|
1318
|
+
]
|
|
1319
|
+
},
|
|
1320
|
+
{
|
|
1321
|
+
"ref": "workflow.appointment_reminders",
|
|
1322
|
+
"name": "Appointment Reminders",
|
|
1323
|
+
"trigger": {
|
|
1324
|
+
"type": "appointment",
|
|
1325
|
+
"appointmentStatus": "confirmed",
|
|
1326
|
+
"calendarRef": "calendar.consult"
|
|
1327
|
+
},
|
|
174
1328
|
"stopOnResponse": false,
|
|
175
1329
|
"actions": [
|
|
176
|
-
{
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
1330
|
+
{
|
|
1331
|
+
"type": "wait_appointment",
|
|
1332
|
+
"value": 1,
|
|
1333
|
+
"unit": "days"
|
|
1334
|
+
},
|
|
1335
|
+
{
|
|
1336
|
+
"type": "send_sms",
|
|
1337
|
+
"smsRef": "sms.appt_24h_sms"
|
|
1338
|
+
},
|
|
1339
|
+
{
|
|
1340
|
+
"type": "send_email",
|
|
1341
|
+
"emailRef": "email.appt_prep_email"
|
|
1342
|
+
},
|
|
1343
|
+
{
|
|
1344
|
+
"type": "wait_appointment",
|
|
1345
|
+
"value": 2,
|
|
1346
|
+
"unit": "hours"
|
|
1347
|
+
},
|
|
1348
|
+
{
|
|
1349
|
+
"type": "send_sms",
|
|
1350
|
+
"smsRef": "sms.appt_2h_sms"
|
|
1351
|
+
}
|
|
1352
|
+
]
|
|
1353
|
+
},
|
|
1354
|
+
{
|
|
1355
|
+
"ref": "workflow.no_show",
|
|
1356
|
+
"name": "No-Show Rescue",
|
|
1357
|
+
"trigger": {
|
|
1358
|
+
"type": "appointment",
|
|
1359
|
+
"appointmentStatus": "noshow",
|
|
1360
|
+
"calendarRef": "calendar.consult"
|
|
1361
|
+
},
|
|
1362
|
+
"stopOnResponse": true,
|
|
1363
|
+
"actions": [
|
|
1364
|
+
{
|
|
1365
|
+
"type": "add_contact_tag",
|
|
1366
|
+
"tagRef": "tag.no_show"
|
|
1367
|
+
},
|
|
1368
|
+
{
|
|
1369
|
+
"type": "internal_notification",
|
|
1370
|
+
"userRef": "user.dana_reyes",
|
|
1371
|
+
"title": "No-show: {{contact.first_name}}",
|
|
1372
|
+
"body": "{{contact.first_name}} {{contact.last_name}} missed their appointment. A rebook text and email went out. Call-back task created."
|
|
1373
|
+
},
|
|
1374
|
+
{
|
|
1375
|
+
"type": "task_notification",
|
|
1376
|
+
"userRef": "user.dana_reyes",
|
|
1377
|
+
"title": "Call {{contact.first_name}} (no-show)",
|
|
1378
|
+
"body": "Missed appointment. Call, no guilt, offer two new times.",
|
|
1379
|
+
"dueDate": "1"
|
|
1380
|
+
},
|
|
1381
|
+
{
|
|
1382
|
+
"type": "send_sms",
|
|
1383
|
+
"smsRef": "sms.ns_sms_1"
|
|
1384
|
+
},
|
|
1385
|
+
{
|
|
1386
|
+
"type": "send_email",
|
|
1387
|
+
"emailRef": "email.ns_email_1"
|
|
1388
|
+
},
|
|
1389
|
+
{
|
|
1390
|
+
"type": "wait",
|
|
1391
|
+
"value": 1,
|
|
1392
|
+
"unit": "days"
|
|
1393
|
+
},
|
|
1394
|
+
{
|
|
1395
|
+
"type": "send_sms",
|
|
1396
|
+
"smsRef": "sms.ns_sms_2"
|
|
1397
|
+
},
|
|
1398
|
+
{
|
|
1399
|
+
"type": "wait",
|
|
1400
|
+
"value": 3,
|
|
1401
|
+
"unit": "days"
|
|
1402
|
+
},
|
|
1403
|
+
{
|
|
1404
|
+
"type": "send_email",
|
|
1405
|
+
"emailRef": "email.ns_email_2"
|
|
1406
|
+
},
|
|
1407
|
+
{
|
|
1408
|
+
"type": "wait",
|
|
1409
|
+
"value": 3,
|
|
1410
|
+
"unit": "days"
|
|
1411
|
+
},
|
|
1412
|
+
{
|
|
1413
|
+
"type": "add_notes",
|
|
1414
|
+
"body": "No-Show Rescue finished with no reply (4 touches over 7 days). Tagged lapsed; Win-back starts from the winback-start tag."
|
|
1415
|
+
},
|
|
1416
|
+
{
|
|
1417
|
+
"type": "add_contact_tag",
|
|
1418
|
+
"tagRef": "tag.lc_lapsed"
|
|
1419
|
+
},
|
|
1420
|
+
{
|
|
1421
|
+
"type": "add_contact_tag",
|
|
1422
|
+
"tagRef": "tag.winback_start"
|
|
1423
|
+
},
|
|
1424
|
+
{
|
|
1425
|
+
"type": "find_opportunity",
|
|
1426
|
+
"pipelineRef": "pipeline.main",
|
|
1427
|
+
"found": [
|
|
1428
|
+
{
|
|
1429
|
+
"type": "update_opportunity",
|
|
1430
|
+
"pipelineRef": "pipeline.main",
|
|
1431
|
+
"stageRef": "stage.contacted"
|
|
1432
|
+
}
|
|
1433
|
+
],
|
|
1434
|
+
"notFound": []
|
|
1435
|
+
}
|
|
180
1436
|
]
|
|
181
1437
|
}
|
|
182
1438
|
],
|
|
183
1439
|
"handoffs": [
|
|
184
1440
|
{
|
|
185
|
-
"ref": "handoff.
|
|
1441
|
+
"ref": "handoff.phone_number",
|
|
186
1442
|
"owner": "OPERATOR-UI",
|
|
187
|
-
"title": "
|
|
188
|
-
"trigger": "
|
|
189
|
-
"instruction": "
|
|
190
|
-
"produces":
|
|
191
|
-
"successCheck": "
|
|
192
|
-
"blocks": [
|
|
1443
|
+
"title": "Get a phone number in GoHighLevel (so texts and missed-call text-back can work)",
|
|
1444
|
+
"trigger": "channels.sms == true && channels.hasPhoneNumber != yes",
|
|
1445
|
+
"instruction": "Settings > Phone Numbers > Add Number: buy a local number for the business, then paste it into the business_phone custom value. Every text step and the missed-call text-back are built and wait for this; A2P registration (next) needs the number too.",
|
|
1446
|
+
"produces": "cv.business_phone",
|
|
1447
|
+
"successCheck": "A number shows under Phone Numbers and business_phone matches it",
|
|
1448
|
+
"blocks": [
|
|
1449
|
+
"workflow.speed_to_lead",
|
|
1450
|
+
"workflow.missed_call",
|
|
1451
|
+
"workflow.lead_nurture",
|
|
1452
|
+
"workflow.win_back",
|
|
1453
|
+
"workflow.appointment_booked",
|
|
1454
|
+
"workflow.appointment_reminders",
|
|
1455
|
+
"workflow.no_show"
|
|
1456
|
+
]
|
|
1457
|
+
},
|
|
1458
|
+
{
|
|
1459
|
+
"ref": "handoff.business_details",
|
|
1460
|
+
"owner": "OPERATOR-UI",
|
|
1461
|
+
"title": "Confirm your business phone and the name messages are signed with",
|
|
1462
|
+
"trigger": "always (30 seconds)",
|
|
1463
|
+
"instruction": "Settings > Custom Values: set business_phone to the number customers should call or text back, and owner_first_name to the first name every email is signed with. The build pre-fills both from the intake when it can.",
|
|
1464
|
+
"produces": "cv.owner_first_name",
|
|
1465
|
+
"successCheck": "business_phone and owner_first_name show real values, not blanks",
|
|
1466
|
+
"blocks": [
|
|
1467
|
+
"cv.owner_first_name"
|
|
1468
|
+
]
|
|
193
1469
|
},
|
|
194
1470
|
{
|
|
195
1471
|
"ref": "handoff.calendar_oauth",
|
|
196
1472
|
"owner": "OPERATOR-UI",
|
|
197
1473
|
"title": "Connect your calendar (Google / Outlook)",
|
|
198
1474
|
"trigger": "goal.bookingNeeded == true && channels.calendarConnected == false",
|
|
199
|
-
"instruction": "Open the
|
|
1475
|
+
"instruction": "Open the Consultation calendar > Connections and authorize your Google or Outlook account. This login can only be approved by you. Then copy the booking link into the booking_link custom value.",
|
|
200
1476
|
"produces": "cv.booking_link",
|
|
201
|
-
"successCheck": "Calendar shows a connected external account
|
|
202
|
-
"blocks": [
|
|
1477
|
+
"successCheck": "Calendar shows a connected external account and the booking link resolves",
|
|
1478
|
+
"blocks": [
|
|
1479
|
+
"cv.booking_link"
|
|
1480
|
+
]
|
|
1481
|
+
},
|
|
1482
|
+
{
|
|
1483
|
+
"ref": "handoff.assign_calendar_staff",
|
|
1484
|
+
"owner": "OPERATOR-UI",
|
|
1485
|
+
"title": "Assign who takes appointments on the calendar",
|
|
1486
|
+
"trigger": "a team account: Blueprint will not guess who books",
|
|
1487
|
+
"instruction": "Open the Consultation calendar > Team and add the people who take these appointments. Blueprint auto-assigns only when the account has exactly one user.",
|
|
1488
|
+
"produces": null,
|
|
1489
|
+
"successCheck": "The calendar has at least one assigned team member",
|
|
1490
|
+
"blocks": [
|
|
1491
|
+
"calendar.consult"
|
|
1492
|
+
]
|
|
203
1493
|
},
|
|
204
1494
|
{
|
|
205
1495
|
"ref": "handoff.a2p",
|
|
206
1496
|
"owner": "OPERATOR-EXT",
|
|
207
|
-
"title": "Register A2P (so texts can send)",
|
|
1497
|
+
"title": "Register A2P 10DLC (so texts can send)",
|
|
208
1498
|
"trigger": "channels.sms == true",
|
|
209
|
-
"instruction": "Submit your A2P brand and campaign
|
|
1499
|
+
"instruction": "Submit your A2P brand and campaign through the GHL Trust Center / your carrier. Every text step is built but the SMS-bearing workflows stay DRAFT and will not send until this is approved (7-14 day review). Save your full submission package before submitting.",
|
|
210
1500
|
"produces": null,
|
|
211
|
-
"successCheck": "A2P campaign status shows submitted
|
|
212
|
-
"blocks": [
|
|
1501
|
+
"successCheck": "A2P campaign status shows submitted or approved",
|
|
1502
|
+
"blocks": [
|
|
1503
|
+
"workflow.speed_to_lead",
|
|
1504
|
+
"workflow.missed_call",
|
|
1505
|
+
"workflow.lead_nurture",
|
|
1506
|
+
"workflow.win_back",
|
|
1507
|
+
"workflow.appointment_booked",
|
|
1508
|
+
"workflow.appointment_reminders",
|
|
1509
|
+
"workflow.no_show",
|
|
1510
|
+
"sms.stl_sms_1",
|
|
1511
|
+
"sms.stl_sms_2",
|
|
1512
|
+
"sms.stl_sms_3",
|
|
1513
|
+
"sms.mc_sms_1",
|
|
1514
|
+
"sms.mc_sms_2",
|
|
1515
|
+
"sms.n_sms_1",
|
|
1516
|
+
"sms.n_sms_2",
|
|
1517
|
+
"sms.n_sms_3",
|
|
1518
|
+
"sms.n_sms_4",
|
|
1519
|
+
"sms.n_sms_5",
|
|
1520
|
+
"sms.w_sms_1",
|
|
1521
|
+
"sms.w_sms_2",
|
|
1522
|
+
"sms.appt_confirm_sms",
|
|
1523
|
+
"sms.appt_24h_sms",
|
|
1524
|
+
"sms.appt_2h_sms",
|
|
1525
|
+
"sms.ns_sms_1",
|
|
1526
|
+
"sms.ns_sms_2"
|
|
1527
|
+
]
|
|
213
1528
|
},
|
|
214
1529
|
{
|
|
215
1530
|
"ref": "handoff.stripe",
|
|
216
1531
|
"owner": "OPERATOR-EXT",
|
|
217
1532
|
"title": "Connect Stripe (to take payment)",
|
|
218
1533
|
"trigger": "channels.payment != 'Stripe connected'",
|
|
219
|
-
"instruction": "Connect Stripe in Payments > Integrations and create your products/prices. The landing page is built; the money connection is yours to authorize.",
|
|
1534
|
+
"instruction": "Connect Stripe in Payments > Integrations and create your products / prices. The landing page is built; the money connection is yours to authorize.",
|
|
220
1535
|
"produces": null,
|
|
221
|
-
"successCheck": "Stripe shows connected
|
|
1536
|
+
"successCheck": "Stripe shows connected and products exist",
|
|
222
1537
|
"blocks": []
|
|
223
1538
|
}
|
|
224
1539
|
],
|
|
225
|
-
"buildOrder": [
|
|
1540
|
+
"buildOrder": [
|
|
1541
|
+
"user.*",
|
|
1542
|
+
"tag.*",
|
|
1543
|
+
"field.*",
|
|
1544
|
+
"cv.*",
|
|
1545
|
+
"pipeline.*",
|
|
1546
|
+
"calendar.*",
|
|
1547
|
+
"form.*",
|
|
1548
|
+
"funnel.*",
|
|
1549
|
+
"email.*",
|
|
1550
|
+
"sms.*",
|
|
1551
|
+
"email_template.*",
|
|
1552
|
+
"sms_template.*",
|
|
1553
|
+
"workflow.*"
|
|
1554
|
+
],
|
|
226
1555
|
"idMap": {}
|
|
227
1556
|
}
|