@elitedcs/ghl-mcp 3.96.0 → 3.97.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 +22 -0
- package/README.md +1 -1
- package/dist/index.js +82134 -81165
- package/guide/guide.html +1 -1
- package/package.json +1 -1
- package/skills/blueprint/examples/validate-plan.cjs +2 -1
- package/skills/blueprint/presets/clinic.preset.json +62 -10
- package/skills/blueprint/presets/coach.preset.json +62 -10
- package/skills/blueprint/presets/ecommerce.preset.json +57 -10
- package/skills/blueprint/presets/generic-client.preset.json +62 -10
- package/skills/blueprint/presets/local-service.preset.json +62 -10
- package/skills/blueprint/presets/med-spa.preset.json +62 -10
- package/skills/blueprint/presets/wellness-clinic.preset.json +62 -10
- package/skills/blueprint/references/copy-guide.md +1 -1
|
@@ -1187,13 +1187,17 @@
|
|
|
1187
1187
|
"callDirection": "inbound"
|
|
1188
1188
|
},
|
|
1189
1189
|
"stopOnResponse": true,
|
|
1190
|
-
"_design": "Fires on an inbound call that was not answered (no-answer / busy / voicemail). Texts back within seconds, tags the contact, alerts a real person and creates a call-back task,
|
|
1190
|
+
"_design": "Fires on an inbound call that was not answered (no-answer / busy / voicemail). Texts back within seconds, takes the missed-call tag off and puts it back on (so Missed Call - Pipeline Card starts on every missed call, W47), tags the contact, alerts a real person and creates a call-back task. W48 (2026-10-29): allowed to run again on every missed call; the closing 10-minute wait keeps the contact inside it, and GoHighLevel did not start it again for a contact still inside it (live call proof 2026-10-29), so a redial within 10 minutes gets no second text. The hour-later text is its own workflow, Missed Call - Follow-Up.",
|
|
1191
1191
|
"actions": [
|
|
1192
1192
|
{
|
|
1193
1193
|
"type": "send_sms",
|
|
1194
1194
|
"smsRef": "sms.mc_sms_1",
|
|
1195
1195
|
"conditionalOn": "channels.sms == true"
|
|
1196
1196
|
},
|
|
1197
|
+
{
|
|
1198
|
+
"type": "remove_contact_tag",
|
|
1199
|
+
"tagRef": "tag.missed_call"
|
|
1200
|
+
},
|
|
1197
1201
|
{
|
|
1198
1202
|
"type": "add_contact_tag",
|
|
1199
1203
|
"tagRef": "tag.missed_call"
|
|
@@ -1217,26 +1221,21 @@
|
|
|
1217
1221
|
},
|
|
1218
1222
|
{
|
|
1219
1223
|
"type": "wait",
|
|
1220
|
-
"value":
|
|
1221
|
-
"unit": "
|
|
1222
|
-
},
|
|
1223
|
-
{
|
|
1224
|
-
"type": "send_sms",
|
|
1225
|
-
"smsRef": "sms.mc_sms_2",
|
|
1226
|
-
"conditionalOn": "channels.sms == true"
|
|
1224
|
+
"value": 10,
|
|
1225
|
+
"unit": "minutes"
|
|
1227
1226
|
}
|
|
1228
1227
|
]
|
|
1229
1228
|
},
|
|
1230
1229
|
{
|
|
1231
1230
|
"ref": "workflow.missed_call_card",
|
|
1232
|
-
"allowMultiple":
|
|
1231
|
+
"allowMultiple": true,
|
|
1233
1232
|
"name": "Missed Call - Pipeline Card",
|
|
1234
1233
|
"conditionalOn": "channels.sms == true",
|
|
1235
1234
|
"trigger": {
|
|
1236
1235
|
"type": "contact_tag",
|
|
1237
1236
|
"tagRef": "tag.missed_call"
|
|
1238
1237
|
},
|
|
1239
|
-
"_design": "
|
|
1238
|
+
"_design": "W47 (2026-10-29 live call proof): started by the missed-call tag being added, and allowed to run again. The text-back takes the tag off and puts it straight back on every missed call, so the tag is newly added each time and a repeat caller is checked again (a contact who already had the tag, with re-entry off, never reached this workflow). A caller with no card in this pipeline gets one at the first stage, an owner and the new-lead tag, as a form lead does in Speed to Lead. A caller who already has a card in this pipeline keeps it and is tagged returning-caller. Not yet proven live: whether a closed (won or lost) card counts as found; Find Opportunity reads the latest card in the pipeline and the build sets no status filter. Started by the tag, not the call, because a shared account gates call-started workflows with an If/Else, and find_opportunity must be the last step and cannot sit inside one.",
|
|
1240
1239
|
"actions": [
|
|
1241
1240
|
{
|
|
1242
1241
|
"type": "find_opportunity",
|
|
@@ -1266,6 +1265,35 @@
|
|
|
1266
1265
|
}
|
|
1267
1266
|
]
|
|
1268
1267
|
},
|
|
1268
|
+
{
|
|
1269
|
+
"ref": "workflow.missed_call_follow_up",
|
|
1270
|
+
"allowMultiple": true,
|
|
1271
|
+
"name": "Missed Call - Follow-Up",
|
|
1272
|
+
"conditionalOn": "channels.sms == true",
|
|
1273
|
+
"trigger": {
|
|
1274
|
+
"type": "call_status",
|
|
1275
|
+
"callStatuses": [
|
|
1276
|
+
"no-answer",
|
|
1277
|
+
"busy",
|
|
1278
|
+
"voicemail"
|
|
1279
|
+
],
|
|
1280
|
+
"callDirection": "inbound"
|
|
1281
|
+
},
|
|
1282
|
+
"stopOnResponse": true,
|
|
1283
|
+
"_design": "W48 (2026-10-29): the hour-later text, split from the instant text-back so a second missed call inside the hour still gets an instant reply. Started by the same missed call; a redial while a contact is still waiting here gets no second follow-up. Stops the moment they reply.",
|
|
1284
|
+
"actions": [
|
|
1285
|
+
{
|
|
1286
|
+
"type": "wait",
|
|
1287
|
+
"value": 1,
|
|
1288
|
+
"unit": "hours"
|
|
1289
|
+
},
|
|
1290
|
+
{
|
|
1291
|
+
"type": "send_sms",
|
|
1292
|
+
"smsRef": "sms.mc_sms_2",
|
|
1293
|
+
"conditionalOn": "channels.sms == true"
|
|
1294
|
+
}
|
|
1295
|
+
]
|
|
1296
|
+
},
|
|
1269
1297
|
{
|
|
1270
1298
|
"ref": "workflow.lead_nurture",
|
|
1271
1299
|
"allowMultiple": false,
|
|
@@ -1427,6 +1455,11 @@
|
|
|
1427
1455
|
"workflowRef": "workflow.missed_call",
|
|
1428
1456
|
"conditionalOn": "channels.sms == true"
|
|
1429
1457
|
},
|
|
1458
|
+
{
|
|
1459
|
+
"type": "remove_from_workflow",
|
|
1460
|
+
"workflowRef": "workflow.missed_call_follow_up",
|
|
1461
|
+
"conditionalOn": "channels.sms == true"
|
|
1462
|
+
},
|
|
1430
1463
|
{
|
|
1431
1464
|
"type": "remove_from_workflow",
|
|
1432
1465
|
"workflowRef": "workflow.lead_nurture"
|
|
@@ -1568,6 +1601,11 @@
|
|
|
1568
1601
|
"workflowRef": "workflow.missed_call",
|
|
1569
1602
|
"conditionalOn": "channels.sms == true"
|
|
1570
1603
|
},
|
|
1604
|
+
{
|
|
1605
|
+
"type": "remove_from_workflow",
|
|
1606
|
+
"workflowRef": "workflow.missed_call_follow_up",
|
|
1607
|
+
"conditionalOn": "channels.sms == true"
|
|
1608
|
+
},
|
|
1571
1609
|
{
|
|
1572
1610
|
"type": "add_contact_tag",
|
|
1573
1611
|
"tagRef": "tag.lc_booked"
|
|
@@ -1875,6 +1913,7 @@
|
|
|
1875
1913
|
"blocks": [
|
|
1876
1914
|
"workflow.speed_to_lead",
|
|
1877
1915
|
"workflow.missed_call",
|
|
1916
|
+
"workflow.missed_call_follow_up",
|
|
1878
1917
|
"workflow.lead_nurture",
|
|
1879
1918
|
"workflow.win_back",
|
|
1880
1919
|
"workflow.appointment_booked",
|
|
@@ -1934,6 +1973,7 @@
|
|
|
1934
1973
|
"blocks": [
|
|
1935
1974
|
"workflow.speed_to_lead",
|
|
1936
1975
|
"workflow.missed_call",
|
|
1976
|
+
"workflow.missed_call_follow_up",
|
|
1937
1977
|
"workflow.lead_nurture",
|
|
1938
1978
|
"workflow.win_back",
|
|
1939
1979
|
"workflow.appointment_booked",
|
|
@@ -1961,6 +2001,18 @@
|
|
|
1961
2001
|
],
|
|
1962
2002
|
"_blocksNote": "Lists every SMS-bearing WORKFLOW ref (so they stay DRAFT) plus the sms.* asset refs. After conditional pruning, drop any entry whose workflow/asset was removed."
|
|
1963
2003
|
},
|
|
2004
|
+
{
|
|
2005
|
+
"ref": "handoff.stop_line_check",
|
|
2006
|
+
"conditionalOn": "channels.sms == true",
|
|
2007
|
+
"owner": "OPERATOR-UI",
|
|
2008
|
+
"title": "Check whether the account adds its own Reply STOP line",
|
|
2009
|
+
"trigger": "channels.sms == true",
|
|
2010
|
+
"instruction": "Your GoHighLevel account may already add its own 'Reply STOP' line to the first text each contact gets. If it does, a contact may see the opt-out line twice on that first text. That is safe. Remove the build's own line from a text only if you are sure the account's own line is switched on.",
|
|
2011
|
+
"produces": null,
|
|
2012
|
+
"successCheck": "You know whether the account adds its own Reply STOP line to first texts",
|
|
2013
|
+
"blocks": [],
|
|
2014
|
+
"_design": "W49 (command-center ruling 2026-10-30): a doubled opt-out line is cosmetic, a missing one is a compliance failure, so the build keeps its own STOP line and says so. No settings path is named because none has been seen on screen; the setting is to be checked live later."
|
|
2015
|
+
},
|
|
1964
2016
|
{
|
|
1965
2017
|
"ref": "handoff.stripe",
|
|
1966
2018
|
"conditionalOn": "flags includes stripe_not_connected",
|
|
@@ -1163,13 +1163,17 @@
|
|
|
1163
1163
|
"callDirection": "inbound"
|
|
1164
1164
|
},
|
|
1165
1165
|
"stopOnResponse": true,
|
|
1166
|
-
"_design": "Fires on an inbound call that was not answered (no-answer / busy / voicemail). Texts back within seconds, tags the contact, alerts a real person and creates a call-back task,
|
|
1166
|
+
"_design": "Fires on an inbound call that was not answered (no-answer / busy / voicemail). Texts back within seconds, takes the missed-call tag off and puts it back on (so Missed Call - Pipeline Card starts on every missed call, W47), tags the contact, alerts a real person and creates a call-back task. W48 (2026-10-29): allowed to run again on every missed call; the closing 10-minute wait keeps the contact inside it, and GoHighLevel did not start it again for a contact still inside it (live call proof 2026-10-29), so a redial within 10 minutes gets no second text. The hour-later text is its own workflow, Missed Call - Follow-Up.",
|
|
1167
1167
|
"actions": [
|
|
1168
1168
|
{
|
|
1169
1169
|
"type": "send_sms",
|
|
1170
1170
|
"smsRef": "sms.mc_sms_1",
|
|
1171
1171
|
"conditionalOn": "channels.sms == true"
|
|
1172
1172
|
},
|
|
1173
|
+
{
|
|
1174
|
+
"type": "remove_contact_tag",
|
|
1175
|
+
"tagRef": "tag.missed_call"
|
|
1176
|
+
},
|
|
1173
1177
|
{
|
|
1174
1178
|
"type": "add_contact_tag",
|
|
1175
1179
|
"tagRef": "tag.missed_call"
|
|
@@ -1193,26 +1197,21 @@
|
|
|
1193
1197
|
},
|
|
1194
1198
|
{
|
|
1195
1199
|
"type": "wait",
|
|
1196
|
-
"value":
|
|
1197
|
-
"unit": "
|
|
1198
|
-
},
|
|
1199
|
-
{
|
|
1200
|
-
"type": "send_sms",
|
|
1201
|
-
"smsRef": "sms.mc_sms_2",
|
|
1202
|
-
"conditionalOn": "channels.sms == true"
|
|
1200
|
+
"value": 10,
|
|
1201
|
+
"unit": "minutes"
|
|
1203
1202
|
}
|
|
1204
1203
|
]
|
|
1205
1204
|
},
|
|
1206
1205
|
{
|
|
1207
1206
|
"ref": "workflow.missed_call_card",
|
|
1208
|
-
"allowMultiple":
|
|
1207
|
+
"allowMultiple": true,
|
|
1209
1208
|
"name": "Missed Call - Pipeline Card",
|
|
1210
1209
|
"conditionalOn": "channels.sms == true",
|
|
1211
1210
|
"trigger": {
|
|
1212
1211
|
"type": "contact_tag",
|
|
1213
1212
|
"tagRef": "tag.missed_call"
|
|
1214
1213
|
},
|
|
1215
|
-
"_design": "
|
|
1214
|
+
"_design": "W47 (2026-10-29 live call proof): started by the missed-call tag being added, and allowed to run again. The text-back takes the tag off and puts it straight back on every missed call, so the tag is newly added each time and a repeat caller is checked again (a contact who already had the tag, with re-entry off, never reached this workflow). A caller with no card in this pipeline gets one at the first stage, an owner and the new-lead tag, as a form lead does in Speed to Lead. A caller who already has a card in this pipeline keeps it and is tagged returning-caller. Not yet proven live: whether a closed (won or lost) card counts as found; Find Opportunity reads the latest card in the pipeline and the build sets no status filter. Started by the tag, not the call, because a shared account gates call-started workflows with an If/Else, and find_opportunity must be the last step and cannot sit inside one.",
|
|
1216
1215
|
"actions": [
|
|
1217
1216
|
{
|
|
1218
1217
|
"type": "find_opportunity",
|
|
@@ -1242,6 +1241,35 @@
|
|
|
1242
1241
|
}
|
|
1243
1242
|
]
|
|
1244
1243
|
},
|
|
1244
|
+
{
|
|
1245
|
+
"ref": "workflow.missed_call_follow_up",
|
|
1246
|
+
"allowMultiple": true,
|
|
1247
|
+
"name": "Missed Call - Follow-Up",
|
|
1248
|
+
"conditionalOn": "channels.sms == true",
|
|
1249
|
+
"trigger": {
|
|
1250
|
+
"type": "call_status",
|
|
1251
|
+
"callStatuses": [
|
|
1252
|
+
"no-answer",
|
|
1253
|
+
"busy",
|
|
1254
|
+
"voicemail"
|
|
1255
|
+
],
|
|
1256
|
+
"callDirection": "inbound"
|
|
1257
|
+
},
|
|
1258
|
+
"stopOnResponse": true,
|
|
1259
|
+
"_design": "W48 (2026-10-29): the hour-later text, split from the instant text-back so a second missed call inside the hour still gets an instant reply. Started by the same missed call; a redial while a contact is still waiting here gets no second follow-up. Stops the moment they reply.",
|
|
1260
|
+
"actions": [
|
|
1261
|
+
{
|
|
1262
|
+
"type": "wait",
|
|
1263
|
+
"value": 1,
|
|
1264
|
+
"unit": "hours"
|
|
1265
|
+
},
|
|
1266
|
+
{
|
|
1267
|
+
"type": "send_sms",
|
|
1268
|
+
"smsRef": "sms.mc_sms_2",
|
|
1269
|
+
"conditionalOn": "channels.sms == true"
|
|
1270
|
+
}
|
|
1271
|
+
]
|
|
1272
|
+
},
|
|
1245
1273
|
{
|
|
1246
1274
|
"ref": "workflow.lead_nurture",
|
|
1247
1275
|
"allowMultiple": false,
|
|
@@ -1403,6 +1431,11 @@
|
|
|
1403
1431
|
"workflowRef": "workflow.missed_call",
|
|
1404
1432
|
"conditionalOn": "channels.sms == true"
|
|
1405
1433
|
},
|
|
1434
|
+
{
|
|
1435
|
+
"type": "remove_from_workflow",
|
|
1436
|
+
"workflowRef": "workflow.missed_call_follow_up",
|
|
1437
|
+
"conditionalOn": "channels.sms == true"
|
|
1438
|
+
},
|
|
1406
1439
|
{
|
|
1407
1440
|
"type": "remove_from_workflow",
|
|
1408
1441
|
"workflowRef": "workflow.lead_nurture"
|
|
@@ -1544,6 +1577,11 @@
|
|
|
1544
1577
|
"workflowRef": "workflow.missed_call",
|
|
1545
1578
|
"conditionalOn": "channels.sms == true"
|
|
1546
1579
|
},
|
|
1580
|
+
{
|
|
1581
|
+
"type": "remove_from_workflow",
|
|
1582
|
+
"workflowRef": "workflow.missed_call_follow_up",
|
|
1583
|
+
"conditionalOn": "channels.sms == true"
|
|
1584
|
+
},
|
|
1547
1585
|
{
|
|
1548
1586
|
"type": "add_contact_tag",
|
|
1549
1587
|
"tagRef": "tag.lc_booked"
|
|
@@ -1851,6 +1889,7 @@
|
|
|
1851
1889
|
"blocks": [
|
|
1852
1890
|
"workflow.speed_to_lead",
|
|
1853
1891
|
"workflow.missed_call",
|
|
1892
|
+
"workflow.missed_call_follow_up",
|
|
1854
1893
|
"workflow.lead_nurture",
|
|
1855
1894
|
"workflow.win_back",
|
|
1856
1895
|
"workflow.appointment_booked",
|
|
@@ -1910,6 +1949,7 @@
|
|
|
1910
1949
|
"blocks": [
|
|
1911
1950
|
"workflow.speed_to_lead",
|
|
1912
1951
|
"workflow.missed_call",
|
|
1952
|
+
"workflow.missed_call_follow_up",
|
|
1913
1953
|
"workflow.lead_nurture",
|
|
1914
1954
|
"workflow.win_back",
|
|
1915
1955
|
"workflow.appointment_booked",
|
|
@@ -1937,6 +1977,18 @@
|
|
|
1937
1977
|
],
|
|
1938
1978
|
"_blocksNote": "Lists every SMS-bearing WORKFLOW ref (so they stay DRAFT) plus the sms.* asset refs. After conditional pruning, drop any entry whose workflow/asset was removed."
|
|
1939
1979
|
},
|
|
1980
|
+
{
|
|
1981
|
+
"ref": "handoff.stop_line_check",
|
|
1982
|
+
"conditionalOn": "channels.sms == true",
|
|
1983
|
+
"owner": "OPERATOR-UI",
|
|
1984
|
+
"title": "Check whether the account adds its own Reply STOP line",
|
|
1985
|
+
"trigger": "channels.sms == true",
|
|
1986
|
+
"instruction": "Your GoHighLevel account may already add its own 'Reply STOP' line to the first text each contact gets. If it does, a contact may see the opt-out line twice on that first text. That is safe. Remove the build's own line from a text only if you are sure the account's own line is switched on.",
|
|
1987
|
+
"produces": null,
|
|
1988
|
+
"successCheck": "You know whether the account adds its own Reply STOP line to first texts",
|
|
1989
|
+
"blocks": [],
|
|
1990
|
+
"_design": "W49 (command-center ruling 2026-10-30): a doubled opt-out line is cosmetic, a missing one is a compliance failure, so the build keeps its own STOP line and says so. No settings path is named because none has been seen on screen; the setting is to be checked live later."
|
|
1991
|
+
},
|
|
1940
1992
|
{
|
|
1941
1993
|
"ref": "handoff.stripe",
|
|
1942
1994
|
"conditionalOn": "flags includes stripe_not_connected",
|
|
@@ -2345,13 +2345,17 @@
|
|
|
2345
2345
|
},
|
|
2346
2346
|
"stopOnResponse": true,
|
|
2347
2347
|
"_source": "[NO REAL SOURCE: proposed] No live account has a missed-call text-back. Med-spa's 7-action shape.",
|
|
2348
|
-
"_design": "
|
|
2348
|
+
"_design": "Fires on an inbound call that was not answered (no-answer / busy / voicemail). Texts back within seconds, takes the missed-call tag off and puts it back on (so Missed Call - Pipeline Card starts on every missed call, W47), tags the contact, alerts a real person and creates a call-back task. W48 (2026-10-29): allowed to run again on every missed call; the closing 10-minute wait keeps the contact inside it, and GoHighLevel did not start it again for a contact still inside it (live call proof 2026-10-29), so a redial within 10 minutes gets no second text. The hour-later text is its own workflow, Missed Call - Follow-Up.",
|
|
2349
2349
|
"actions": [
|
|
2350
2350
|
{
|
|
2351
2351
|
"type": "send_sms",
|
|
2352
2352
|
"smsRef": "sms.mc_sms_1",
|
|
2353
2353
|
"conditionalOn": "channels.sms == true"
|
|
2354
2354
|
},
|
|
2355
|
+
{
|
|
2356
|
+
"type": "remove_contact_tag",
|
|
2357
|
+
"tagRef": "tag.missed_call"
|
|
2358
|
+
},
|
|
2355
2359
|
{
|
|
2356
2360
|
"type": "add_contact_tag",
|
|
2357
2361
|
"tagRef": "tag.missed_call"
|
|
@@ -2375,26 +2379,21 @@
|
|
|
2375
2379
|
},
|
|
2376
2380
|
{
|
|
2377
2381
|
"type": "wait",
|
|
2378
|
-
"value":
|
|
2379
|
-
"unit": "
|
|
2380
|
-
},
|
|
2381
|
-
{
|
|
2382
|
-
"type": "send_sms",
|
|
2383
|
-
"smsRef": "sms.mc_sms_2",
|
|
2384
|
-
"conditionalOn": "channels.sms == true"
|
|
2382
|
+
"value": 10,
|
|
2383
|
+
"unit": "minutes"
|
|
2385
2384
|
}
|
|
2386
2385
|
]
|
|
2387
2386
|
},
|
|
2388
2387
|
{
|
|
2389
2388
|
"ref": "workflow.missed_call_card",
|
|
2390
|
-
"allowMultiple":
|
|
2389
|
+
"allowMultiple": true,
|
|
2391
2390
|
"name": "Missed Call - Pipeline Card",
|
|
2392
2391
|
"conditionalOn": "channels.sms == true",
|
|
2393
2392
|
"trigger": {
|
|
2394
2393
|
"type": "contact_tag",
|
|
2395
2394
|
"tagRef": "tag.missed_call"
|
|
2396
2395
|
},
|
|
2397
|
-
"_design": "
|
|
2396
|
+
"_design": "W47 (2026-10-29 live call proof): started by the missed-call tag being added, and allowed to run again. The text-back takes the tag off and puts it straight back on every missed call, so the tag is newly added each time and a repeat caller is checked again (a contact who already had the tag, with re-entry off, never reached this workflow). A caller with no card in this pipeline gets one at the first stage, an owner and the new-lead tag, as a form lead does in Speed to Lead. A caller who already has a card in this pipeline keeps it and is tagged returning-caller. Not yet proven live: whether a closed (won or lost) card counts as found; Find Opportunity reads the latest card in the pipeline and the build sets no status filter. Started by the tag, not the call, because a shared account gates call-started workflows with an If/Else, and find_opportunity must be the last step and cannot sit inside one.",
|
|
2398
2397
|
"actions": [
|
|
2399
2398
|
{
|
|
2400
2399
|
"type": "find_opportunity",
|
|
@@ -2424,6 +2423,35 @@
|
|
|
2424
2423
|
}
|
|
2425
2424
|
]
|
|
2426
2425
|
},
|
|
2426
|
+
{
|
|
2427
|
+
"ref": "workflow.missed_call_follow_up",
|
|
2428
|
+
"allowMultiple": true,
|
|
2429
|
+
"name": "Missed Call - Follow-Up",
|
|
2430
|
+
"conditionalOn": "channels.sms == true",
|
|
2431
|
+
"trigger": {
|
|
2432
|
+
"type": "call_status",
|
|
2433
|
+
"callStatuses": [
|
|
2434
|
+
"no-answer",
|
|
2435
|
+
"busy",
|
|
2436
|
+
"voicemail"
|
|
2437
|
+
],
|
|
2438
|
+
"callDirection": "inbound"
|
|
2439
|
+
},
|
|
2440
|
+
"stopOnResponse": true,
|
|
2441
|
+
"_design": "W48 (2026-10-29): the hour-later text, split from the instant text-back so a second missed call inside the hour still gets an instant reply. Started by the same missed call; a redial while a contact is still waiting here gets no second follow-up. Stops the moment they reply.",
|
|
2442
|
+
"actions": [
|
|
2443
|
+
{
|
|
2444
|
+
"type": "wait",
|
|
2445
|
+
"value": 1,
|
|
2446
|
+
"unit": "hours"
|
|
2447
|
+
},
|
|
2448
|
+
{
|
|
2449
|
+
"type": "send_sms",
|
|
2450
|
+
"smsRef": "sms.mc_sms_2",
|
|
2451
|
+
"conditionalOn": "channels.sms == true"
|
|
2452
|
+
}
|
|
2453
|
+
]
|
|
2454
|
+
},
|
|
2427
2455
|
{
|
|
2428
2456
|
"ref": "workflow.lead_nurture",
|
|
2429
2457
|
"allowMultiple": false,
|
|
@@ -2673,6 +2701,11 @@
|
|
|
2673
2701
|
"workflowRef": "workflow.missed_call",
|
|
2674
2702
|
"conditionalOn": "channels.sms == true"
|
|
2675
2703
|
},
|
|
2704
|
+
{
|
|
2705
|
+
"type": "remove_from_workflow",
|
|
2706
|
+
"workflowRef": "workflow.missed_call_follow_up",
|
|
2707
|
+
"conditionalOn": "channels.sms == true"
|
|
2708
|
+
},
|
|
2676
2709
|
{
|
|
2677
2710
|
"type": "remove_from_workflow",
|
|
2678
2711
|
"workflowRef": "workflow.lead_nurture"
|
|
@@ -3058,6 +3091,11 @@
|
|
|
3058
3091
|
"workflowRef": "workflow.missed_call",
|
|
3059
3092
|
"conditionalOn": "channels.sms == true"
|
|
3060
3093
|
},
|
|
3094
|
+
{
|
|
3095
|
+
"type": "remove_from_workflow",
|
|
3096
|
+
"workflowRef": "workflow.missed_call_follow_up",
|
|
3097
|
+
"conditionalOn": "channels.sms == true"
|
|
3098
|
+
},
|
|
3061
3099
|
{
|
|
3062
3100
|
"type": "add_contact_tag",
|
|
3063
3101
|
"tagRef": "tag.lc_trial_booked"
|
|
@@ -3649,6 +3687,7 @@
|
|
|
3649
3687
|
"blocks": [
|
|
3650
3688
|
"workflow.speed_to_lead",
|
|
3651
3689
|
"workflow.missed_call",
|
|
3690
|
+
"workflow.missed_call_follow_up",
|
|
3652
3691
|
"workflow.lead_nurture",
|
|
3653
3692
|
"workflow.book_reply",
|
|
3654
3693
|
"workflow.win_back",
|
|
@@ -3877,6 +3916,7 @@
|
|
|
3877
3916
|
"blocks": [
|
|
3878
3917
|
"workflow.speed_to_lead",
|
|
3879
3918
|
"workflow.missed_call",
|
|
3919
|
+
"workflow.missed_call_follow_up",
|
|
3880
3920
|
"workflow.lead_nurture",
|
|
3881
3921
|
"workflow.book_reply",
|
|
3882
3922
|
"workflow.win_back",
|
|
@@ -3941,6 +3981,18 @@
|
|
|
3941
3981
|
"sms.review_sms_1"
|
|
3942
3982
|
]
|
|
3943
3983
|
},
|
|
3984
|
+
{
|
|
3985
|
+
"ref": "handoff.stop_line_check",
|
|
3986
|
+
"conditionalOn": "channels.sms == true",
|
|
3987
|
+
"owner": "OPERATOR-UI",
|
|
3988
|
+
"title": "Check whether the account adds its own Reply STOP line",
|
|
3989
|
+
"trigger": "channels.sms == true",
|
|
3990
|
+
"instruction": "Your GoHighLevel account may already add its own 'Reply STOP' line to the first text each contact gets. If it does, a contact may see the opt-out line twice on that first text. That is safe. Remove the build's own line from a text only if you are sure the account's own line is switched on.",
|
|
3991
|
+
"produces": null,
|
|
3992
|
+
"successCheck": "You know whether the account adds its own Reply STOP line to first texts",
|
|
3993
|
+
"blocks": [],
|
|
3994
|
+
"_design": "W49 (command-center ruling 2026-10-30): a doubled opt-out line is cosmetic, a missing one is a compliance failure, so the build keeps its own STOP line and says so. No settings path is named because none has been seen on screen; the setting is to be checked live later."
|
|
3995
|
+
},
|
|
3944
3996
|
{
|
|
3945
3997
|
"ref": "handoff.email_domain",
|
|
3946
3998
|
"conditionalOn": "flags includes email_domain_needed",
|
|
@@ -102,7 +102,7 @@ Replace with a specific: what happened, what we noticed, what we can do, what to
|
|
|
102
102
|
| Sequence | Touches | Span | Shape |
|
|
103
103
|
|---|---|---|---|
|
|
104
104
|
| Speed to Lead | 5 (3 texts, 2 emails) | 24 hours | instant text + email, call task, +20 min text (binary question), +3 h email (what happens next), +1 day text (not chasing), then the `nurture-start` hand-off as the LAST action |
|
|
105
|
-
| Missed Call Text-Back | 2 texts | 1 hour | instant text-back (how can we help), tag, alert, call-back task
|
|
105
|
+
| Missed Call Text-Back + Missed Call - Follow-Up | 2 texts | 1 hour | instant text-back (how can we help), tag, alert, call-back task (at most once per 10 minutes per caller); the +1 h text (call-back time or booking link) is its own workflow, so a second missed call inside the hour still gets the instant text |
|
|
106
106
|
| Lead Nurture (30 days) | 11 (6 emails, 5 texts) | 31 days of waits | day 1 reframe, 3 one-word question, 5 how it works + top objection, 8 free tip, 10 method as proof, 14 price/time head-on, 15 midpoint binary, 20 cost of waiting, 23 any question, 27 decision sheet, 30 last direct ask, then `lifecycle-lapsed` + `winback-start` |
|
|
107
107
|
| Win-back (30 days) | 5 (3 emails, 2 texts) | 31 days of waits | day 0 one question, 7 binary text, 14 what changed, 22 concrete reason text, 30 the door stays open (says it is the last automatic message), then `lifecycle-lost` |
|
|
108
108
|
| Appointment | confirm email + text; 24 h text + prep email; 2 h text | appointment-relative | confirmation restates time, what to bring, what they leave with, how to move it |
|