@elitedcs/ghl-mcp 3.89.0-beta.1 → 3.89.0-beta.10
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 +239 -1
- package/README.md +1 -1
- package/dist/index.js +17544 -6620
- package/package.json +1 -1
- package/skills/blueprint/SKILL.md +1 -1
- package/skills/blueprint/examples/medspa-build-plan.json +4 -4
- package/skills/blueprint/examples/sample-build-plan.json +4 -4
- package/skills/blueprint/examples/validate-plan.cjs +15 -9
- package/skills/blueprint/presets/clinic.preset.json +71 -10
- package/skills/blueprint/presets/coach.preset.json +32 -4
- package/skills/blueprint/presets/ecommerce.preset.json +16 -4
- package/skills/blueprint/presets/generic-client.preset.json +31 -3
- package/skills/blueprint/presets/local-service.preset.json +32 -4
- package/skills/blueprint/presets/med-spa.preset.json +31 -4
- package/skills/blueprint/presets/wellness-clinic.md +55 -0
- package/skills/blueprint/presets/wellness-clinic.preset.json +3907 -0
- package/skills/blueprint/references/build-plan-schema.md +1 -1
- package/skills/blueprint/references/preset-format.md +5 -1
|
@@ -50,26 +50,32 @@
|
|
|
50
50
|
"default": [
|
|
51
51
|
{
|
|
52
52
|
"ref": "stage.new_subscriber",
|
|
53
|
+
"aliases": ["new subscriber", "subscriber", "new lead", "signup", "lead", "new"],
|
|
53
54
|
"name": "New Subscriber"
|
|
54
55
|
},
|
|
55
56
|
{
|
|
56
57
|
"ref": "stage.engaged",
|
|
58
|
+
"aliases": ["engaged", "clicked", "contacted"],
|
|
57
59
|
"name": "Engaged"
|
|
58
60
|
},
|
|
59
61
|
{
|
|
60
62
|
"ref": "stage.first_order",
|
|
63
|
+
"aliases": ["first order", "first purchase", "purchased", "customer"],
|
|
61
64
|
"name": "First Order"
|
|
62
65
|
},
|
|
63
66
|
{
|
|
64
67
|
"ref": "stage.repeat",
|
|
68
|
+
"aliases": ["repeat customer", "repeat", "returning"],
|
|
65
69
|
"name": "Repeat Customer"
|
|
66
70
|
},
|
|
67
71
|
{
|
|
68
72
|
"ref": "stage.vip",
|
|
73
|
+
"aliases": ["vip"],
|
|
69
74
|
"name": "VIP"
|
|
70
75
|
},
|
|
71
76
|
{
|
|
72
77
|
"ref": "stage.lapsed",
|
|
78
|
+
"aliases": ["lapsed", "inactive", "churned", "lost"],
|
|
73
79
|
"name": "Lapsed"
|
|
74
80
|
}
|
|
75
81
|
]
|
|
@@ -414,7 +420,7 @@
|
|
|
414
420
|
{
|
|
415
421
|
"ref": "sms_template.n_sms_1",
|
|
416
422
|
"name": "Nurture Text 1 - One Word",
|
|
417
|
-
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: best sellers, new arrivals, or a gift? One word and I'll send you the right page
|
|
423
|
+
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: best sellers, new arrivals, or a gift? One word and I'll send you the right page.\nReply STOP to opt out."
|
|
418
424
|
},
|
|
419
425
|
{
|
|
420
426
|
"ref": "sms_template.n_sms_2",
|
|
@@ -439,7 +445,7 @@
|
|
|
439
445
|
{
|
|
440
446
|
"ref": "sms_template.w_sms_1",
|
|
441
447
|
"name": "Win-back Text 1",
|
|
442
|
-
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Still interested, or would you rather only hear about new arrivals? Reply 1 for still interested, 2 for new arrivals only
|
|
448
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Still interested, or would you rather only hear about new arrivals? Reply 1 for still interested, 2 for new arrivals only.\nReply STOP to opt out."
|
|
443
449
|
},
|
|
444
450
|
{
|
|
445
451
|
"ref": "sms_template.w_sms_2",
|
|
@@ -808,6 +814,7 @@
|
|
|
808
814
|
"workflows": [
|
|
809
815
|
{
|
|
810
816
|
"ref": "workflow.speed_to_lead",
|
|
817
|
+
"allowMultiple": false,
|
|
811
818
|
"name": "Speed to Lead",
|
|
812
819
|
"trigger": {
|
|
813
820
|
"type": "form_submission",
|
|
@@ -893,6 +900,7 @@
|
|
|
893
900
|
},
|
|
894
901
|
{
|
|
895
902
|
"ref": "workflow.missed_call",
|
|
903
|
+
"allowMultiple": true,
|
|
896
904
|
"name": "Missed Call Text-Back",
|
|
897
905
|
"conditionalOn": "channels.sms == true",
|
|
898
906
|
"trigger": {
|
|
@@ -947,13 +955,14 @@
|
|
|
947
955
|
},
|
|
948
956
|
{
|
|
949
957
|
"ref": "workflow.lead_nurture",
|
|
958
|
+
"allowMultiple": false,
|
|
950
959
|
"name": "Lead Nurture (30 days)",
|
|
951
960
|
"trigger": {
|
|
952
961
|
"type": "contact_tag",
|
|
953
962
|
"tagRef": "tag.nurture_start"
|
|
954
963
|
},
|
|
955
964
|
"stopOnResponse": true,
|
|
956
|
-
"_design": "Starts from the Speed to Lead hand-off tag. 11 touches (6 emails + 5 texts) across 31 days of waits: give, give, ask. Removes its own trigger tag first
|
|
965
|
+
"_design": "Starts from the Speed to Lead hand-off tag. 11 touches (6 emails + 5 texts) across 31 days of waits: give, give, ask. Removes its own trigger tag first; each contact goes through it once (re-entry off). Ends by tagging lapsed and handing off to Win-back. Any reply stops it (stopOnResponse) and Replied - Stop & Route takes over.",
|
|
957
966
|
"actions": [
|
|
958
967
|
{
|
|
959
968
|
"type": "remove_contact_tag",
|
|
@@ -1088,6 +1097,7 @@
|
|
|
1088
1097
|
},
|
|
1089
1098
|
{
|
|
1090
1099
|
"ref": "workflow.reply_route",
|
|
1100
|
+
"allowMultiple": true,
|
|
1091
1101
|
"name": "Replied - Stop & Route",
|
|
1092
1102
|
"trigger": {
|
|
1093
1103
|
"type": "customer_reply"
|
|
@@ -1137,6 +1147,7 @@
|
|
|
1137
1147
|
},
|
|
1138
1148
|
{
|
|
1139
1149
|
"ref": "workflow.win_back",
|
|
1150
|
+
"allowMultiple": false,
|
|
1140
1151
|
"name": "Win-back (30 days)",
|
|
1141
1152
|
"trigger": {
|
|
1142
1153
|
"type": "contact_tag",
|
|
@@ -1208,6 +1219,7 @@
|
|
|
1208
1219
|
},
|
|
1209
1220
|
{
|
|
1210
1221
|
"ref": "workflow.review_request",
|
|
1222
|
+
"allowMultiple": false,
|
|
1211
1223
|
"name": "Review Requests",
|
|
1212
1224
|
"trigger": {
|
|
1213
1225
|
"type": "contact_tag",
|
|
@@ -1353,7 +1365,7 @@
|
|
|
1353
1365
|
"owner": "OPERATOR-EXT",
|
|
1354
1366
|
"title": "Connect store orders to GHL",
|
|
1355
1367
|
"trigger": "always",
|
|
1356
|
-
"instruction": "Connect your store so orders reach GHL (Shopify: the native integration under Integrations; other platforms: an order webhook to an inbound webhook trigger). Then add a small workflow: on order → tag lifecycle-first-order, remove from Lead Nurture and Win-back, move the pipeline card to
|
|
1368
|
+
"instruction": "Connect your store so orders reach GHL (Shopify: the native integration under Integrations; other platforms: an order webhook to an inbound webhook trigger). Then add a small workflow: on order → tag lifecycle-first-order, remove from Lead Nurture and Win-back, move the pipeline card to {{stage.first_order}}. Until this exists, staff move cards by hand.",
|
|
1357
1369
|
"produces": null,
|
|
1358
1370
|
"successCheck": "A test order appears on the contact in GHL within a minute",
|
|
1359
1371
|
"blocks": []
|
|
@@ -44,35 +44,43 @@
|
|
|
44
44
|
"default": [
|
|
45
45
|
{
|
|
46
46
|
"ref": "stage.new_lead",
|
|
47
|
+
"aliases": ["new lead", "new inquiry", "inquiry", "new", "lead", "prospect"],
|
|
47
48
|
"name": "New Lead"
|
|
48
49
|
},
|
|
49
50
|
{
|
|
50
51
|
"ref": "stage.contacted",
|
|
52
|
+
"aliases": ["contacted", "engaged", "in conversation", "follow up", "working"],
|
|
51
53
|
"name": "Contacted"
|
|
52
54
|
},
|
|
53
55
|
{
|
|
54
56
|
"ref": "stage.qualified",
|
|
57
|
+
"aliases": ["qualified"],
|
|
55
58
|
"name": "Qualified"
|
|
56
59
|
},
|
|
57
60
|
{
|
|
58
61
|
"ref": "stage.appointment_booked",
|
|
62
|
+
"aliases": ["appointment booked", "consult booked", "consultation booked", "call booked", "booked", "scheduled", "=consultation"],
|
|
59
63
|
"name": "Appointment Booked",
|
|
60
64
|
"conditionalOn": "goal.bookingNeeded == true"
|
|
61
65
|
},
|
|
62
66
|
{
|
|
63
67
|
"ref": "stage.proposal_sent",
|
|
68
|
+
"aliases": ["proposal sent", "quote sent", "estimate sent", "proposal", "quote"],
|
|
64
69
|
"name": "Proposal / Quote Sent"
|
|
65
70
|
},
|
|
66
71
|
{
|
|
67
72
|
"ref": "stage.won",
|
|
73
|
+
"aliases": ["won", "closed won", "sold", "signed"],
|
|
68
74
|
"name": "Won"
|
|
69
75
|
},
|
|
70
76
|
{
|
|
71
77
|
"ref": "stage.repeat",
|
|
78
|
+
"aliases": ["repeat", "retention"],
|
|
72
79
|
"name": "Repeat / Retention"
|
|
73
80
|
},
|
|
74
81
|
{
|
|
75
82
|
"ref": "stage.lost",
|
|
83
|
+
"aliases": ["lost", "closed lost", "not interested"],
|
|
76
84
|
"name": "Lost"
|
|
77
85
|
}
|
|
78
86
|
]
|
|
@@ -486,7 +494,7 @@
|
|
|
486
494
|
{
|
|
487
495
|
"ref": "sms_template.n_sms_1",
|
|
488
496
|
"name": "Nurture Text 1 - One Word",
|
|
489
|
-
"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
|
|
497
|
+
"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.\nReply STOP to opt out."
|
|
490
498
|
},
|
|
491
499
|
{
|
|
492
500
|
"ref": "sms_template.n_sms_2",
|
|
@@ -511,7 +519,7 @@
|
|
|
511
519
|
{
|
|
512
520
|
"ref": "sms_template.w_sms_1",
|
|
513
521
|
"name": "Win-back Text 1",
|
|
514
|
-
"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
|
|
522
|
+
"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?\nReply STOP to opt out."
|
|
515
523
|
},
|
|
516
524
|
{
|
|
517
525
|
"ref": "sms_template.w_sms_2",
|
|
@@ -1062,6 +1070,7 @@
|
|
|
1062
1070
|
"workflows": [
|
|
1063
1071
|
{
|
|
1064
1072
|
"ref": "workflow.speed_to_lead",
|
|
1073
|
+
"allowMultiple": false,
|
|
1065
1074
|
"name": "Speed to Lead",
|
|
1066
1075
|
"trigger": {
|
|
1067
1076
|
"type": "form_submission",
|
|
@@ -1147,6 +1156,7 @@
|
|
|
1147
1156
|
},
|
|
1148
1157
|
{
|
|
1149
1158
|
"ref": "workflow.missed_call",
|
|
1159
|
+
"allowMultiple": true,
|
|
1150
1160
|
"name": "Missed Call Text-Back",
|
|
1151
1161
|
"conditionalOn": "channels.sms == true",
|
|
1152
1162
|
"trigger": {
|
|
@@ -1201,13 +1211,14 @@
|
|
|
1201
1211
|
},
|
|
1202
1212
|
{
|
|
1203
1213
|
"ref": "workflow.lead_nurture",
|
|
1214
|
+
"allowMultiple": false,
|
|
1204
1215
|
"name": "Lead Nurture (30 days)",
|
|
1205
1216
|
"trigger": {
|
|
1206
1217
|
"type": "contact_tag",
|
|
1207
1218
|
"tagRef": "tag.nurture_start"
|
|
1208
1219
|
},
|
|
1209
1220
|
"stopOnResponse": true,
|
|
1210
|
-
"_design": "Starts from the Speed to Lead hand-off tag. 11 touches (6 emails + 5 texts) across 31 days of waits: give, give, ask. Removes its own trigger tag first
|
|
1221
|
+
"_design": "Starts from the Speed to Lead hand-off tag. 11 touches (6 emails + 5 texts) across 31 days of waits: give, give, ask. Removes its own trigger tag first; each contact goes through it once (re-entry off). Ends by tagging lapsed and handing off to Win-back. Any reply stops it (stopOnResponse) and Replied - Stop & Route takes over.",
|
|
1211
1222
|
"actions": [
|
|
1212
1223
|
{
|
|
1213
1224
|
"type": "remove_contact_tag",
|
|
@@ -1342,6 +1353,7 @@
|
|
|
1342
1353
|
},
|
|
1343
1354
|
{
|
|
1344
1355
|
"ref": "workflow.reply_route",
|
|
1356
|
+
"allowMultiple": true,
|
|
1345
1357
|
"name": "Replied - Stop & Route",
|
|
1346
1358
|
"trigger": {
|
|
1347
1359
|
"type": "customer_reply"
|
|
@@ -1396,6 +1408,7 @@
|
|
|
1396
1408
|
},
|
|
1397
1409
|
{
|
|
1398
1410
|
"ref": "workflow.win_back",
|
|
1411
|
+
"allowMultiple": false,
|
|
1399
1412
|
"name": "Win-back (30 days)",
|
|
1400
1413
|
"trigger": {
|
|
1401
1414
|
"type": "contact_tag",
|
|
@@ -1467,6 +1480,7 @@
|
|
|
1467
1480
|
},
|
|
1468
1481
|
{
|
|
1469
1482
|
"ref": "workflow.appointment_booked",
|
|
1483
|
+
"allowMultiple": true,
|
|
1470
1484
|
"name": "Appointment Booked - Confirm & Move",
|
|
1471
1485
|
"trigger": {
|
|
1472
1486
|
"type": "appointment",
|
|
@@ -1488,6 +1502,15 @@
|
|
|
1488
1502
|
"type": "remove_from_workflow",
|
|
1489
1503
|
"workflowRef": "workflow.win_back"
|
|
1490
1504
|
},
|
|
1505
|
+
{
|
|
1506
|
+
"type": "remove_from_workflow",
|
|
1507
|
+
"workflowRef": "workflow.no_show"
|
|
1508
|
+
},
|
|
1509
|
+
{
|
|
1510
|
+
"type": "remove_from_workflow",
|
|
1511
|
+
"workflowRef": "workflow.missed_call",
|
|
1512
|
+
"conditionalOn": "channels.sms == true"
|
|
1513
|
+
},
|
|
1491
1514
|
{
|
|
1492
1515
|
"type": "add_contact_tag",
|
|
1493
1516
|
"tagRef": "tag.lc_booked"
|
|
@@ -1531,6 +1554,7 @@
|
|
|
1531
1554
|
},
|
|
1532
1555
|
{
|
|
1533
1556
|
"ref": "workflow.appointment_reminders",
|
|
1557
|
+
"allowMultiple": true,
|
|
1534
1558
|
"name": "Appointment Reminders",
|
|
1535
1559
|
"trigger": {
|
|
1536
1560
|
"type": "appointment",
|
|
@@ -1569,6 +1593,8 @@
|
|
|
1569
1593
|
},
|
|
1570
1594
|
{
|
|
1571
1595
|
"ref": "workflow.no_show",
|
|
1596
|
+
"allowMultiple": true,
|
|
1597
|
+
"stagePreference": { "stage.contacted": ["no show", "noshow", "missed appointment", "did not show"] },
|
|
1572
1598
|
"name": "No-Show Rescue",
|
|
1573
1599
|
"trigger": {
|
|
1574
1600
|
"type": "appointment",
|
|
@@ -1657,6 +1683,7 @@
|
|
|
1657
1683
|
},
|
|
1658
1684
|
{
|
|
1659
1685
|
"ref": "workflow.review_request",
|
|
1686
|
+
"allowMultiple": false,
|
|
1660
1687
|
"name": "Review Requests",
|
|
1661
1688
|
"trigger": {
|
|
1662
1689
|
"type": "contact_tag",
|
|
@@ -1706,6 +1733,7 @@
|
|
|
1706
1733
|
},
|
|
1707
1734
|
{
|
|
1708
1735
|
"ref": "workflow.quote_follow_up",
|
|
1736
|
+
"allowMultiple": true,
|
|
1709
1737
|
"name": "Quote Follow-up",
|
|
1710
1738
|
"trigger": {
|
|
1711
1739
|
"type": "contact_tag",
|
|
@@ -53,35 +53,43 @@
|
|
|
53
53
|
"default": [
|
|
54
54
|
{
|
|
55
55
|
"ref": "stage.new_lead",
|
|
56
|
+
"aliases": ["new lead", "new inquiry", "inquiry", "new", "lead", "prospect"],
|
|
56
57
|
"name": "New Lead"
|
|
57
58
|
},
|
|
58
59
|
{
|
|
59
60
|
"ref": "stage.contacted",
|
|
61
|
+
"aliases": ["contacted", "engaged", "in conversation", "qualified", "follow up", "working"],
|
|
60
62
|
"name": "Contacted"
|
|
61
63
|
},
|
|
62
64
|
{
|
|
63
65
|
"ref": "stage.estimate_scheduled",
|
|
66
|
+
"aliases": ["estimate scheduled", "estimate booked", "appointment booked", "visit booked", "booked", "scheduled"],
|
|
64
67
|
"name": "Estimate Scheduled",
|
|
65
68
|
"conditionalOn": "goal.bookingNeeded == true"
|
|
66
69
|
},
|
|
67
70
|
{
|
|
68
71
|
"ref": "stage.quote_sent",
|
|
72
|
+
"aliases": ["quote sent", "estimate sent", "proposal sent", "quote"],
|
|
69
73
|
"name": "Quote Sent"
|
|
70
74
|
},
|
|
71
75
|
{
|
|
72
76
|
"ref": "stage.job_won",
|
|
77
|
+
"aliases": ["job won", "closed won", "won", "sold", "hired"],
|
|
73
78
|
"name": "Job Won"
|
|
74
79
|
},
|
|
75
80
|
{
|
|
76
81
|
"ref": "stage.job_complete",
|
|
82
|
+
"aliases": ["job complete", "job completed", "completed", "finished"],
|
|
77
83
|
"name": "Job Complete"
|
|
78
84
|
},
|
|
79
85
|
{
|
|
80
86
|
"ref": "stage.maintenance",
|
|
87
|
+
"aliases": ["maintenance", "repeat", "recurring"],
|
|
81
88
|
"name": "Repeat / Maintenance"
|
|
82
89
|
},
|
|
83
90
|
{
|
|
84
91
|
"ref": "stage.lost",
|
|
92
|
+
"aliases": ["lost", "closed lost", "not interested"],
|
|
85
93
|
"name": "Lost"
|
|
86
94
|
}
|
|
87
95
|
]
|
|
@@ -275,7 +283,7 @@
|
|
|
275
283
|
{
|
|
276
284
|
"ref": "tag.service_done",
|
|
277
285
|
"name": "service-complete",
|
|
278
|
-
"_note": "Added when the work is done and paid for. Starts Review Request; removed by it
|
|
286
|
+
"_note": "Added when the work is done and paid for. Starts Review Request; removed by it. Each contact is asked for a review once."
|
|
279
287
|
}
|
|
280
288
|
],
|
|
281
289
|
"_tagNote": "Interest tags mirror the Service Needed options. The skill derives trade-specific ones from offer.summary (e.g. interest-roof-replacement) at fill time.",
|
|
@@ -529,7 +537,7 @@
|
|
|
529
537
|
{
|
|
530
538
|
"ref": "sms_template.n_sms_1",
|
|
531
539
|
"name": "Nurture Text 1 - One Word",
|
|
532
|
-
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: are you leaning toward a repair, a replacement, or just pricing it for now? One word is enough
|
|
540
|
+
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: are you leaning toward a repair, a replacement, or just pricing it for now? One word is enough.\nReply STOP to opt out."
|
|
533
541
|
},
|
|
534
542
|
{
|
|
535
543
|
"ref": "sms_template.n_sms_2",
|
|
@@ -554,7 +562,7 @@
|
|
|
554
562
|
{
|
|
555
563
|
"ref": "sms_template.w_sms_1",
|
|
556
564
|
"name": "Win-back Text 1",
|
|
557
|
-
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is {{offer.summary || the work you asked about}} still on your list this season, or did you get it handled
|
|
565
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is {{offer.summary || the work you asked about}} still on your list this season, or did you get it handled?\nReply STOP to opt out."
|
|
558
566
|
},
|
|
559
567
|
{
|
|
560
568
|
"ref": "sms_template.w_sms_2",
|
|
@@ -1075,6 +1083,7 @@
|
|
|
1075
1083
|
"workflows": [
|
|
1076
1084
|
{
|
|
1077
1085
|
"ref": "workflow.speed_to_lead",
|
|
1086
|
+
"allowMultiple": false,
|
|
1078
1087
|
"name": "Speed to Lead",
|
|
1079
1088
|
"trigger": {
|
|
1080
1089
|
"type": "form_submission",
|
|
@@ -1160,6 +1169,7 @@
|
|
|
1160
1169
|
},
|
|
1161
1170
|
{
|
|
1162
1171
|
"ref": "workflow.missed_call",
|
|
1172
|
+
"allowMultiple": true,
|
|
1163
1173
|
"name": "Missed Call Text-Back",
|
|
1164
1174
|
"conditionalOn": "channels.sms == true",
|
|
1165
1175
|
"trigger": {
|
|
@@ -1214,13 +1224,14 @@
|
|
|
1214
1224
|
},
|
|
1215
1225
|
{
|
|
1216
1226
|
"ref": "workflow.lead_nurture",
|
|
1227
|
+
"allowMultiple": false,
|
|
1217
1228
|
"name": "Lead Nurture (30 days)",
|
|
1218
1229
|
"trigger": {
|
|
1219
1230
|
"type": "contact_tag",
|
|
1220
1231
|
"tagRef": "tag.nurture_start"
|
|
1221
1232
|
},
|
|
1222
1233
|
"stopOnResponse": true,
|
|
1223
|
-
"_design": "Starts from the Speed to Lead hand-off tag. 11 touches (6 emails + 5 texts) across 31 days of waits: give, give, ask. Removes its own trigger tag first
|
|
1234
|
+
"_design": "Starts from the Speed to Lead hand-off tag. 11 touches (6 emails + 5 texts) across 31 days of waits: give, give, ask. Removes its own trigger tag first; each contact goes through it once (re-entry off). Ends by tagging lapsed and handing off to Win-back. Any reply stops it (stopOnResponse) and Replied - Stop & Route takes over.",
|
|
1224
1235
|
"actions": [
|
|
1225
1236
|
{
|
|
1226
1237
|
"type": "remove_contact_tag",
|
|
@@ -1355,6 +1366,7 @@
|
|
|
1355
1366
|
},
|
|
1356
1367
|
{
|
|
1357
1368
|
"ref": "workflow.reply_route",
|
|
1369
|
+
"allowMultiple": true,
|
|
1358
1370
|
"name": "Replied - Stop & Route",
|
|
1359
1371
|
"trigger": {
|
|
1360
1372
|
"type": "customer_reply"
|
|
@@ -1409,6 +1421,7 @@
|
|
|
1409
1421
|
},
|
|
1410
1422
|
{
|
|
1411
1423
|
"ref": "workflow.win_back",
|
|
1424
|
+
"allowMultiple": false,
|
|
1412
1425
|
"name": "Win-back (30 days)",
|
|
1413
1426
|
"trigger": {
|
|
1414
1427
|
"type": "contact_tag",
|
|
@@ -1480,6 +1493,7 @@
|
|
|
1480
1493
|
},
|
|
1481
1494
|
{
|
|
1482
1495
|
"ref": "workflow.appointment_booked",
|
|
1496
|
+
"allowMultiple": true,
|
|
1483
1497
|
"name": "Estimate Booked - Confirm & Move",
|
|
1484
1498
|
"trigger": {
|
|
1485
1499
|
"type": "appointment",
|
|
@@ -1501,6 +1515,15 @@
|
|
|
1501
1515
|
"type": "remove_from_workflow",
|
|
1502
1516
|
"workflowRef": "workflow.win_back"
|
|
1503
1517
|
},
|
|
1518
|
+
{
|
|
1519
|
+
"type": "remove_from_workflow",
|
|
1520
|
+
"workflowRef": "workflow.no_show"
|
|
1521
|
+
},
|
|
1522
|
+
{
|
|
1523
|
+
"type": "remove_from_workflow",
|
|
1524
|
+
"workflowRef": "workflow.missed_call",
|
|
1525
|
+
"conditionalOn": "channels.sms == true"
|
|
1526
|
+
},
|
|
1504
1527
|
{
|
|
1505
1528
|
"type": "add_contact_tag",
|
|
1506
1529
|
"tagRef": "tag.lc_booked"
|
|
@@ -1544,6 +1567,7 @@
|
|
|
1544
1567
|
},
|
|
1545
1568
|
{
|
|
1546
1569
|
"ref": "workflow.appointment_reminders",
|
|
1570
|
+
"allowMultiple": true,
|
|
1547
1571
|
"name": "Estimate Reminders",
|
|
1548
1572
|
"trigger": {
|
|
1549
1573
|
"type": "appointment",
|
|
@@ -1582,6 +1606,8 @@
|
|
|
1582
1606
|
},
|
|
1583
1607
|
{
|
|
1584
1608
|
"ref": "workflow.no_show",
|
|
1609
|
+
"allowMultiple": true,
|
|
1610
|
+
"stagePreference": { "stage.contacted": ["no show", "noshow", "missed appointment", "did not show"] },
|
|
1585
1611
|
"name": "No-Show Rescue",
|
|
1586
1612
|
"trigger": {
|
|
1587
1613
|
"type": "appointment",
|
|
@@ -1670,6 +1696,7 @@
|
|
|
1670
1696
|
},
|
|
1671
1697
|
{
|
|
1672
1698
|
"ref": "workflow.quote_follow_up",
|
|
1699
|
+
"allowMultiple": true,
|
|
1673
1700
|
"name": "Quote Follow-up",
|
|
1674
1701
|
"trigger": {
|
|
1675
1702
|
"type": "contact_tag",
|
|
@@ -1731,6 +1758,7 @@
|
|
|
1731
1758
|
},
|
|
1732
1759
|
{
|
|
1733
1760
|
"ref": "workflow.review_request",
|
|
1761
|
+
"allowMultiple": false,
|
|
1734
1762
|
"name": "Review Request",
|
|
1735
1763
|
"trigger": {
|
|
1736
1764
|
"type": "contact_tag",
|
|
@@ -49,32 +49,39 @@
|
|
|
49
49
|
"default": [
|
|
50
50
|
{
|
|
51
51
|
"ref": "stage.new_lead",
|
|
52
|
+
"aliases": ["new lead", "new inquiry", "inquiry", "new", "lead", "prospect"],
|
|
52
53
|
"name": "New Lead"
|
|
53
54
|
},
|
|
54
55
|
{
|
|
55
56
|
"ref": "stage.contacted",
|
|
57
|
+
"aliases": ["contacted", "engaged", "in conversation", "qualified", "follow up", "working"],
|
|
56
58
|
"name": "Contacted"
|
|
57
59
|
},
|
|
58
60
|
{
|
|
59
61
|
"ref": "stage.consult_booked",
|
|
62
|
+
"aliases": ["consult booked", "consultation booked", "trial booked", "appointment booked", "booked", "scheduled", "=consultation"],
|
|
60
63
|
"name": "Consult Booked",
|
|
61
64
|
"conditionalOn": "goal.bookingNeeded == true"
|
|
62
65
|
},
|
|
63
66
|
{
|
|
64
67
|
"ref": "stage.showed",
|
|
68
|
+
"aliases": ["showed", "trial showed", "consult completed", "attended", "consultation completed", "consultation done", "consultation attended", "consultation showed", "consultation complete", "consultation held"],
|
|
65
69
|
"name": "Showed",
|
|
66
70
|
"conditionalOn": "goal.bookingNeeded == true"
|
|
67
71
|
},
|
|
68
72
|
{
|
|
69
73
|
"ref": "stage.treated",
|
|
74
|
+
"aliases": ["treated", "package sold", "sold", "purchased"],
|
|
70
75
|
"name": "Treated"
|
|
71
76
|
},
|
|
72
77
|
{
|
|
73
78
|
"ref": "stage.member",
|
|
79
|
+
"aliases": ["member", "membership", "rebooked"],
|
|
74
80
|
"name": "Member / Rebooked"
|
|
75
81
|
},
|
|
76
82
|
{
|
|
77
83
|
"ref": "stage.lost",
|
|
84
|
+
"aliases": ["lost", "closed lost", "not interested"],
|
|
78
85
|
"name": "Lost"
|
|
79
86
|
}
|
|
80
87
|
]
|
|
@@ -262,7 +269,7 @@
|
|
|
262
269
|
{
|
|
263
270
|
"ref": "tag.service_done",
|
|
264
271
|
"name": "service-complete",
|
|
265
|
-
"_note": "Added when the work is done and paid for. Starts Review Request; removed by it
|
|
272
|
+
"_note": "Added when the work is done and paid for. Starts Review Request; removed by it. Each contact is asked for a review once."
|
|
266
273
|
}
|
|
267
274
|
],
|
|
268
275
|
"_tagNote": "The skill derives interest-<x> tags from offer.summary at fill time (injectables / filler / facials / membership for a med spa) and mirrors them onto the Service Interest field options. Declared here so they are reviewable.",
|
|
@@ -506,7 +513,7 @@
|
|
|
506
513
|
{
|
|
507
514
|
"ref": "sms_template.n_sms_1",
|
|
508
515
|
"name": "Nurture Text 1 - One Word",
|
|
509
|
-
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: is it lines, volume, or skin texture you'd most like to fix first? One word is enough
|
|
516
|
+
"body": "{{contact.first_name}}, quick one from {{custom_values.owner_first_name}} at {{custom_values.business_name}}: is it lines, volume, or skin texture you'd most like to fix first? One word is enough.\nReply STOP to opt out."
|
|
510
517
|
},
|
|
511
518
|
{
|
|
512
519
|
"ref": "sms_template.n_sms_2",
|
|
@@ -531,7 +538,7 @@
|
|
|
531
538
|
{
|
|
532
539
|
"ref": "sms_template.w_sms_1",
|
|
533
540
|
"name": "Win-back Text 1",
|
|
534
|
-
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is your skin still on the list this season, or should I close your file for now
|
|
541
|
+
"body": "Hi {{contact.first_name}}, it's {{custom_values.owner_first_name}} at {{custom_values.business_name}}. Is your skin still on the list this season, or should I close your file for now?\nReply STOP to opt out."
|
|
535
542
|
},
|
|
536
543
|
{
|
|
537
544
|
"ref": "sms_template.w_sms_2",
|
|
@@ -1052,6 +1059,7 @@
|
|
|
1052
1059
|
"workflows": [
|
|
1053
1060
|
{
|
|
1054
1061
|
"ref": "workflow.speed_to_lead",
|
|
1062
|
+
"allowMultiple": false,
|
|
1055
1063
|
"name": "Speed to Lead",
|
|
1056
1064
|
"trigger": {
|
|
1057
1065
|
"type": "form_submission",
|
|
@@ -1137,6 +1145,7 @@
|
|
|
1137
1145
|
},
|
|
1138
1146
|
{
|
|
1139
1147
|
"ref": "workflow.missed_call",
|
|
1148
|
+
"allowMultiple": true,
|
|
1140
1149
|
"name": "Missed Call Text-Back",
|
|
1141
1150
|
"conditionalOn": "channels.sms == true",
|
|
1142
1151
|
"trigger": {
|
|
@@ -1191,13 +1200,14 @@
|
|
|
1191
1200
|
},
|
|
1192
1201
|
{
|
|
1193
1202
|
"ref": "workflow.lead_nurture",
|
|
1203
|
+
"allowMultiple": false,
|
|
1194
1204
|
"name": "Lead Nurture (30 days)",
|
|
1195
1205
|
"trigger": {
|
|
1196
1206
|
"type": "contact_tag",
|
|
1197
1207
|
"tagRef": "tag.nurture_start"
|
|
1198
1208
|
},
|
|
1199
1209
|
"stopOnResponse": true,
|
|
1200
|
-
"_design": "Starts from the Speed to Lead hand-off tag. 11 touches (6 emails + 5 texts) across 31 days of waits: give, give, ask. Removes its own trigger tag first
|
|
1210
|
+
"_design": "Starts from the Speed to Lead hand-off tag. 11 touches (6 emails + 5 texts) across 31 days of waits: give, give, ask. Removes its own trigger tag first; each contact goes through it once (re-entry off). Ends by tagging lapsed and handing off to Win-back. Any reply stops it (stopOnResponse) and Replied - Stop & Route takes over.",
|
|
1201
1211
|
"actions": [
|
|
1202
1212
|
{
|
|
1203
1213
|
"type": "remove_contact_tag",
|
|
@@ -1332,6 +1342,7 @@
|
|
|
1332
1342
|
},
|
|
1333
1343
|
{
|
|
1334
1344
|
"ref": "workflow.reply_route",
|
|
1345
|
+
"allowMultiple": true,
|
|
1335
1346
|
"name": "Replied - Stop & Route",
|
|
1336
1347
|
"trigger": {
|
|
1337
1348
|
"type": "customer_reply"
|
|
@@ -1386,6 +1397,7 @@
|
|
|
1386
1397
|
},
|
|
1387
1398
|
{
|
|
1388
1399
|
"ref": "workflow.win_back",
|
|
1400
|
+
"allowMultiple": false,
|
|
1389
1401
|
"name": "Win-back (30 days)",
|
|
1390
1402
|
"trigger": {
|
|
1391
1403
|
"type": "contact_tag",
|
|
@@ -1457,6 +1469,7 @@
|
|
|
1457
1469
|
},
|
|
1458
1470
|
{
|
|
1459
1471
|
"ref": "workflow.appointment_booked",
|
|
1472
|
+
"allowMultiple": true,
|
|
1460
1473
|
"name": "Consult Booked - Confirm & Move",
|
|
1461
1474
|
"trigger": {
|
|
1462
1475
|
"type": "appointment",
|
|
@@ -1478,6 +1491,15 @@
|
|
|
1478
1491
|
"type": "remove_from_workflow",
|
|
1479
1492
|
"workflowRef": "workflow.win_back"
|
|
1480
1493
|
},
|
|
1494
|
+
{
|
|
1495
|
+
"type": "remove_from_workflow",
|
|
1496
|
+
"workflowRef": "workflow.no_show"
|
|
1497
|
+
},
|
|
1498
|
+
{
|
|
1499
|
+
"type": "remove_from_workflow",
|
|
1500
|
+
"workflowRef": "workflow.missed_call",
|
|
1501
|
+
"conditionalOn": "channels.sms == true"
|
|
1502
|
+
},
|
|
1481
1503
|
{
|
|
1482
1504
|
"type": "add_contact_tag",
|
|
1483
1505
|
"tagRef": "tag.lc_booked"
|
|
@@ -1521,6 +1543,7 @@
|
|
|
1521
1543
|
},
|
|
1522
1544
|
{
|
|
1523
1545
|
"ref": "workflow.appointment_reminders",
|
|
1546
|
+
"allowMultiple": true,
|
|
1524
1547
|
"name": "Consult Reminders",
|
|
1525
1548
|
"trigger": {
|
|
1526
1549
|
"type": "appointment",
|
|
@@ -1559,6 +1582,8 @@
|
|
|
1559
1582
|
},
|
|
1560
1583
|
{
|
|
1561
1584
|
"ref": "workflow.no_show",
|
|
1585
|
+
"allowMultiple": true,
|
|
1586
|
+
"stagePreference": { "stage.contacted": ["no show", "noshow", "missed appointment", "did not show"] },
|
|
1562
1587
|
"name": "No-Show Rescue",
|
|
1563
1588
|
"trigger": {
|
|
1564
1589
|
"type": "appointment",
|
|
@@ -1647,6 +1672,7 @@
|
|
|
1647
1672
|
},
|
|
1648
1673
|
{
|
|
1649
1674
|
"ref": "workflow.quote_follow_up",
|
|
1675
|
+
"allowMultiple": true,
|
|
1650
1676
|
"name": "Quote Follow-up",
|
|
1651
1677
|
"trigger": {
|
|
1652
1678
|
"type": "contact_tag",
|
|
@@ -1708,6 +1734,7 @@
|
|
|
1708
1734
|
},
|
|
1709
1735
|
{
|
|
1710
1736
|
"ref": "workflow.review_request",
|
|
1737
|
+
"allowMultiple": false,
|
|
1711
1738
|
"name": "Review Request",
|
|
1712
1739
|
"trigger": {
|
|
1713
1740
|
"type": "contact_tag",
|