cashclaw 1.0.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/LICENSE +21 -0
- package/README.md +281 -0
- package/bin/cashclaw.js +2 -0
- package/missions/blog-post-1500.json +21 -0
- package/missions/blog-post-500.json +19 -0
- package/missions/lead-list-50.json +20 -0
- package/missions/seo-audit-basic.json +19 -0
- package/missions/seo-audit-pro.json +23 -0
- package/missions/social-media-weekly.json +19 -0
- package/missions/whatsapp-setup.json +22 -0
- package/package.json +45 -0
- package/skills/cashclaw-content-writer/SKILL.md +245 -0
- package/skills/cashclaw-core/SKILL.md +251 -0
- package/skills/cashclaw-invoicer/SKILL.md +395 -0
- package/skills/cashclaw-invoicer/scripts/stripe-ops.js +441 -0
- package/skills/cashclaw-lead-generator/SKILL.md +246 -0
- package/skills/cashclaw-lead-generator/scripts/scraper.js +356 -0
- package/skills/cashclaw-seo-auditor/SKILL.md +240 -0
- package/skills/cashclaw-seo-auditor/scripts/audit.js +401 -0
- package/skills/cashclaw-social-media/SKILL.md +374 -0
- package/skills/cashclaw-whatsapp-manager/SKILL.md +357 -0
- package/src/cli/commands/dashboard.js +72 -0
- package/src/cli/commands/init.js +290 -0
- package/src/cli/commands/status.js +174 -0
- package/src/cli/index.js +496 -0
- package/src/cli/utils/banner.js +44 -0
- package/src/cli/utils/config.js +170 -0
- package/src/dashboard/public/app.js +329 -0
- package/src/dashboard/public/index.html +139 -0
- package/src/dashboard/public/style.css +464 -0
- package/src/dashboard/server.js +224 -0
- package/src/engine/earnings-tracker.js +184 -0
- package/src/engine/mission-runner.js +224 -0
- package/src/engine/scheduler.js +139 -0
- package/src/integrations/hyrve-bridge.js +213 -0
- package/src/integrations/openclaw-bridge.js +207 -0
- package/src/integrations/stripe-connect.js +204 -0
- package/templates/config.default.json +83 -0
- package/templates/invoice.html +260 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cashclaw-whatsapp-manager
|
|
3
|
+
description: Sets up and manages WhatsApp Business accounts including auto-response systems, client communication workflows, FAQ templates, and broadcast campaigns.
|
|
4
|
+
metadata:
|
|
5
|
+
{
|
|
6
|
+
"openclaw":
|
|
7
|
+
{
|
|
8
|
+
"emoji": "\U0001F4F1",
|
|
9
|
+
"requires": { "bins": ["node"] },
|
|
10
|
+
"install":
|
|
11
|
+
[
|
|
12
|
+
{
|
|
13
|
+
"id": "npm",
|
|
14
|
+
"kind": "node",
|
|
15
|
+
"package": "cashclaw",
|
|
16
|
+
"bins": ["cashclaw"],
|
|
17
|
+
"label": "Install CashClaw via npm"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# CashClaw WhatsApp Manager
|
|
25
|
+
|
|
26
|
+
You set up and manage WhatsApp Business communication systems for clients.
|
|
27
|
+
Your goal is to automate client communication, reduce response times, and
|
|
28
|
+
increase conversion rates through professional WhatsApp workflows.
|
|
29
|
+
|
|
30
|
+
## Pricing
|
|
31
|
+
|
|
32
|
+
| Service | Scope | Price | Delivery |
|
|
33
|
+
|---------|-------|-------|----------|
|
|
34
|
+
| Initial Setup | Account config + 10 auto-responses | $19 | 24 hours |
|
|
35
|
+
| Monthly Management | Ongoing optimization + new templates | $49/month | Ongoing |
|
|
36
|
+
| Campaign Setup | Single broadcast campaign | $15 | 12 hours |
|
|
37
|
+
| FAQ System | Up to 30 FAQ responses | $25 | 24 hours |
|
|
38
|
+
|
|
39
|
+
## WhatsApp Business Setup Workflow
|
|
40
|
+
|
|
41
|
+
### Step 1: Account Configuration
|
|
42
|
+
|
|
43
|
+
Gather from the client:
|
|
44
|
+
|
|
45
|
+
```yaml
|
|
46
|
+
Business Profile:
|
|
47
|
+
Business Name: {legal name}
|
|
48
|
+
Display Name: {name shown to customers, max 25 chars}
|
|
49
|
+
Category: {e.g., "Professional Services", "E-commerce"}
|
|
50
|
+
Description: {about section, max 512 chars}
|
|
51
|
+
Address: {business address}
|
|
52
|
+
Email: {business email}
|
|
53
|
+
Website: {URL}
|
|
54
|
+
Hours: {business hours by day}
|
|
55
|
+
Profile Photo: {URL or file path, 640x640 recommended}
|
|
56
|
+
Cover Photo: {URL or file path, 1024x576 recommended}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Configure the profile with these settings:
|
|
60
|
+
|
|
61
|
+
1. Set profile photo and cover photo.
|
|
62
|
+
2. Write a compelling About section (max 512 chars) that includes:
|
|
63
|
+
- What the business does (1 sentence).
|
|
64
|
+
- Key differentiator (1 sentence).
|
|
65
|
+
- CTA or contact info.
|
|
66
|
+
3. Add catalog items if the business sells products/services.
|
|
67
|
+
4. Configure business hours accurately.
|
|
68
|
+
5. Set up greeting message and away message.
|
|
69
|
+
|
|
70
|
+
### Step 2: Greeting and Away Messages
|
|
71
|
+
|
|
72
|
+
**Greeting Message** (sent to first-time contacts):
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
Hi there! Welcome to {Business Name}.
|
|
76
|
+
|
|
77
|
+
We help {target audience} with {core service}.
|
|
78
|
+
|
|
79
|
+
How can I help you today? You can:
|
|
80
|
+
1. Learn about our services
|
|
81
|
+
2. Get a price quote
|
|
82
|
+
3. Schedule a consultation
|
|
83
|
+
4. Ask a question
|
|
84
|
+
|
|
85
|
+
Just type a number or describe what you need!
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Away Message** (sent outside business hours):
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
Thanks for reaching out to {Business Name}!
|
|
92
|
+
|
|
93
|
+
We are currently outside business hours ({hours}).
|
|
94
|
+
We will get back to you first thing when we are back.
|
|
95
|
+
|
|
96
|
+
In the meantime, you can:
|
|
97
|
+
- Visit our website: {URL}
|
|
98
|
+
- Email us: {email}
|
|
99
|
+
- Check our FAQ: {link}
|
|
100
|
+
|
|
101
|
+
Talk soon!
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Step 3: Auto-Response System
|
|
105
|
+
|
|
106
|
+
Create keyword-triggered auto-responses. Design at least 10 for the initial setup:
|
|
107
|
+
|
|
108
|
+
```yaml
|
|
109
|
+
Auto-Responses:
|
|
110
|
+
- triggers: ["pricing", "price", "cost", "how much", "rates"]
|
|
111
|
+
response: |
|
|
112
|
+
Here are our current rates:
|
|
113
|
+
|
|
114
|
+
{service_1}: ${price}
|
|
115
|
+
{service_2}: ${price}
|
|
116
|
+
{service_3}: ${price}
|
|
117
|
+
|
|
118
|
+
Want a custom quote? Just describe what you need and
|
|
119
|
+
I will get back to you within 1 hour.
|
|
120
|
+
|
|
121
|
+
- triggers: ["hours", "open", "available", "when"]
|
|
122
|
+
response: |
|
|
123
|
+
Our business hours:
|
|
124
|
+
|
|
125
|
+
Mon-Fri: 9:00 AM - 6:00 PM
|
|
126
|
+
Saturday: 10:00 AM - 2:00 PM
|
|
127
|
+
Sunday: Closed
|
|
128
|
+
|
|
129
|
+
Need something urgent? Email {email} with URGENT
|
|
130
|
+
in the subject line.
|
|
131
|
+
|
|
132
|
+
- triggers: ["location", "address", "where", "directions"]
|
|
133
|
+
response: |
|
|
134
|
+
You can find us at:
|
|
135
|
+
{address}
|
|
136
|
+
|
|
137
|
+
Google Maps: {maps_link}
|
|
138
|
+
|
|
139
|
+
Parking is available {parking_info}.
|
|
140
|
+
|
|
141
|
+
- triggers: ["appointment", "schedule", "book", "meeting", "call"]
|
|
142
|
+
response: |
|
|
143
|
+
I would love to schedule a time with you!
|
|
144
|
+
|
|
145
|
+
You can book directly here: {calendar_link}
|
|
146
|
+
|
|
147
|
+
Or let me know your preferred:
|
|
148
|
+
- Date
|
|
149
|
+
- Time
|
|
150
|
+
- Topic to discuss
|
|
151
|
+
|
|
152
|
+
And I will confirm within 1 hour.
|
|
153
|
+
|
|
154
|
+
- triggers: ["thanks", "thank you", "thx"]
|
|
155
|
+
response: |
|
|
156
|
+
You are welcome! Happy to help.
|
|
157
|
+
|
|
158
|
+
Is there anything else I can assist you with?
|
|
159
|
+
|
|
160
|
+
If you found our service helpful, we would love a
|
|
161
|
+
review: {review_link}
|
|
162
|
+
|
|
163
|
+
- triggers: ["help", "support", "issue", "problem"]
|
|
164
|
+
response: |
|
|
165
|
+
I am sorry to hear you are having an issue.
|
|
166
|
+
|
|
167
|
+
To help you as quickly as possible, please share:
|
|
168
|
+
1. Your name / order number
|
|
169
|
+
2. Description of the issue
|
|
170
|
+
3. Any screenshots (just attach them here)
|
|
171
|
+
|
|
172
|
+
Our support team typically responds within 30 minutes
|
|
173
|
+
during business hours.
|
|
174
|
+
|
|
175
|
+
- triggers: ["portfolio", "work", "examples", "case study"]
|
|
176
|
+
response: |
|
|
177
|
+
Great question! Here are some of our recent projects:
|
|
178
|
+
|
|
179
|
+
{portfolio_link_1} - {brief_description}
|
|
180
|
+
{portfolio_link_2} - {brief_description}
|
|
181
|
+
{portfolio_link_3} - {brief_description}
|
|
182
|
+
|
|
183
|
+
Want to discuss a similar project? Just let me know!
|
|
184
|
+
|
|
185
|
+
- triggers: ["quote", "estimate", "proposal"]
|
|
186
|
+
response: |
|
|
187
|
+
I would be happy to provide a quote!
|
|
188
|
+
|
|
189
|
+
To give you an accurate estimate, I need:
|
|
190
|
+
1. What service are you interested in?
|
|
191
|
+
2. What is your timeline?
|
|
192
|
+
3. Any specific requirements?
|
|
193
|
+
|
|
194
|
+
I will have a quote ready within 2 hours.
|
|
195
|
+
|
|
196
|
+
- triggers: ["cancel", "refund", "return"]
|
|
197
|
+
response: |
|
|
198
|
+
I understand. Let me help you with that.
|
|
199
|
+
|
|
200
|
+
Our cancellation/refund policy:
|
|
201
|
+
- {policy_details}
|
|
202
|
+
|
|
203
|
+
Please share your order/invoice number and I will
|
|
204
|
+
process this right away.
|
|
205
|
+
|
|
206
|
+
- triggers: ["1"]
|
|
207
|
+
response: |
|
|
208
|
+
Here is an overview of our services:
|
|
209
|
+
|
|
210
|
+
{service_list_with_brief_descriptions}
|
|
211
|
+
|
|
212
|
+
Which one interests you? I can share more details
|
|
213
|
+
or set up a quick call to discuss.
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Step 4: Quick Reply Templates
|
|
217
|
+
|
|
218
|
+
Create reusable quick replies for common agent responses:
|
|
219
|
+
|
|
220
|
+
```yaml
|
|
221
|
+
Quick Replies:
|
|
222
|
+
- name: "confirm_appointment"
|
|
223
|
+
text: "Your appointment is confirmed for {date} at {time}. See you then!"
|
|
224
|
+
|
|
225
|
+
- name: "request_info"
|
|
226
|
+
text: "Thanks for your interest! Could you share a bit more about {topic} so I can give you the best recommendation?"
|
|
227
|
+
|
|
228
|
+
- name: "follow_up"
|
|
229
|
+
text: "Hi {name}! Just following up on our conversation about {topic}. Have you had a chance to think it over?"
|
|
230
|
+
|
|
231
|
+
- name: "payment_received"
|
|
232
|
+
text: "Payment received! Thank you. Your {service} will be delivered by {date}. I will keep you updated."
|
|
233
|
+
|
|
234
|
+
- name: "delivery_complete"
|
|
235
|
+
text: "Your {deliverable} is ready! {link_or_attachment}. Let me know if you need any adjustments."
|
|
236
|
+
|
|
237
|
+
- name: "review_request"
|
|
238
|
+
text: "Hi {name}! Hope you are enjoying {service}. If you have a moment, a quick review would mean a lot to us: {review_link}"
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Step 5: Broadcast Campaign Setup
|
|
242
|
+
|
|
243
|
+
For campaign service, configure:
|
|
244
|
+
|
|
245
|
+
```yaml
|
|
246
|
+
Campaign:
|
|
247
|
+
Name: {campaign_name}
|
|
248
|
+
Audience: {segment description}
|
|
249
|
+
Template:
|
|
250
|
+
Header: {text or image}
|
|
251
|
+
Body: |
|
|
252
|
+
{message body with {variables}}
|
|
253
|
+
Footer: {optional footer text}
|
|
254
|
+
Buttons:
|
|
255
|
+
- type: url
|
|
256
|
+
text: "Learn More"
|
|
257
|
+
url: "{link}"
|
|
258
|
+
- type: quick_reply
|
|
259
|
+
text: "Interested"
|
|
260
|
+
Schedule: {date and time}
|
|
261
|
+
Frequency: {one-time | weekly | monthly}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**Campaign Rules:**
|
|
265
|
+
- Never send more than 1 broadcast per week to the same contact.
|
|
266
|
+
- Always include an opt-out option: "Reply STOP to unsubscribe."
|
|
267
|
+
- Only send to contacts who have opted in.
|
|
268
|
+
- Track delivery rate, read rate, and response rate.
|
|
269
|
+
- Best times: Tue-Thu, 10AM-12PM or 2PM-4PM local time.
|
|
270
|
+
|
|
271
|
+
### Step 6: Client Communication Workflow
|
|
272
|
+
|
|
273
|
+
Design the complete communication flow:
|
|
274
|
+
|
|
275
|
+
```
|
|
276
|
+
New Contact
|
|
277
|
+
-> Greeting Message
|
|
278
|
+
-> Auto-response based on keyword
|
|
279
|
+
-> If no keyword match -> "I will connect you with our team shortly"
|
|
280
|
+
-> Agent picks up within 5 minutes during business hours
|
|
281
|
+
-> Resolution or escalation
|
|
282
|
+
|
|
283
|
+
Returning Contact
|
|
284
|
+
-> Skip greeting
|
|
285
|
+
-> Direct to auto-response or agent
|
|
286
|
+
-> Reference previous conversation context
|
|
287
|
+
|
|
288
|
+
Post-Purchase
|
|
289
|
+
-> Day 0: Thank you + delivery confirmation
|
|
290
|
+
-> Day 3: Check-in ("How is everything going?")
|
|
291
|
+
-> Day 7: Review request
|
|
292
|
+
-> Day 30: Re-engagement ("We have something new for you!")
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
## FAQ System Design
|
|
296
|
+
|
|
297
|
+
For the FAQ service ($25), create up to 30 question-answer pairs:
|
|
298
|
+
|
|
299
|
+
1. Analyze the client's website, product pages, and existing support tickets.
|
|
300
|
+
2. Identify the top 30 most common questions.
|
|
301
|
+
3. Write concise, helpful answers (2-5 sentences each).
|
|
302
|
+
4. Map each FAQ to trigger keywords.
|
|
303
|
+
5. Organize into categories: General, Products/Services, Pricing, Support, Policy.
|
|
304
|
+
|
|
305
|
+
Deliverable format:
|
|
306
|
+
|
|
307
|
+
```json
|
|
308
|
+
{
|
|
309
|
+
"faqs": [
|
|
310
|
+
{
|
|
311
|
+
"id": 1,
|
|
312
|
+
"category": "General",
|
|
313
|
+
"question": "What services do you offer?",
|
|
314
|
+
"answer": "We offer...",
|
|
315
|
+
"triggers": ["services", "what do you do", "offerings"]
|
|
316
|
+
}
|
|
317
|
+
]
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
## Deliverables
|
|
322
|
+
|
|
323
|
+
For each service, deliver:
|
|
324
|
+
|
|
325
|
+
| Service | Deliverables |
|
|
326
|
+
|---------|-------------|
|
|
327
|
+
| Initial Setup | Profile config doc, 10 auto-responses, greeting/away messages, setup checklist |
|
|
328
|
+
| Monthly | Performance report, new/updated templates, optimization recommendations |
|
|
329
|
+
| Campaign | Campaign brief, message template, audience segment, schedule, results report |
|
|
330
|
+
| FAQ System | 30 FAQ entries in JSON + Markdown, keyword mapping, category structure |
|
|
331
|
+
|
|
332
|
+
## Performance Metrics to Track
|
|
333
|
+
|
|
334
|
+
```yaml
|
|
335
|
+
Monthly Report:
|
|
336
|
+
Messages Received: {count}
|
|
337
|
+
Messages Sent: {count}
|
|
338
|
+
Avg Response Time: {minutes}
|
|
339
|
+
Auto-Response Rate: {%} # messages handled without human
|
|
340
|
+
Conversion Rate: {%} # conversations that led to sale/booking
|
|
341
|
+
Customer Satisfaction: {rating}
|
|
342
|
+
Top Keywords: {list}
|
|
343
|
+
Unmatched Queries: {list} # queries with no auto-response, need new templates
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
## Example Commands
|
|
347
|
+
|
|
348
|
+
```bash
|
|
349
|
+
# Set up WhatsApp Business account
|
|
350
|
+
cashclaw whatsapp setup --config business-profile.yaml
|
|
351
|
+
|
|
352
|
+
# Create auto-response templates
|
|
353
|
+
cashclaw whatsapp templates --count 10 --industry "dental practice"
|
|
354
|
+
|
|
355
|
+
# Launch a broadcast campaign
|
|
356
|
+
cashclaw whatsapp campaign --template promo.yaml --audience "active-clients"
|
|
357
|
+
```
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import open from 'open';
|
|
4
|
+
import { loadConfig } from '../utils/config.js';
|
|
5
|
+
import { createDashboardServer } from '../../dashboard/server.js';
|
|
6
|
+
import { showMiniBanner } from '../utils/banner.js';
|
|
7
|
+
|
|
8
|
+
const orange = chalk.hex('#FF6B35');
|
|
9
|
+
const green = chalk.hex('#16C784');
|
|
10
|
+
const dim = chalk.dim;
|
|
11
|
+
|
|
12
|
+
export async function runDashboard(options = {}) {
|
|
13
|
+
showMiniBanner();
|
|
14
|
+
|
|
15
|
+
const config = await loadConfig();
|
|
16
|
+
const port = options.port || config.server.port || 3847;
|
|
17
|
+
const host = config.server.host || 'localhost';
|
|
18
|
+
|
|
19
|
+
const spinner = ora('Starting dashboard server...').start();
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
const app = createDashboardServer();
|
|
23
|
+
|
|
24
|
+
await new Promise((resolve, reject) => {
|
|
25
|
+
const server = app.listen(port, host, () => {
|
|
26
|
+
resolve(server);
|
|
27
|
+
});
|
|
28
|
+
server.on('error', (err) => {
|
|
29
|
+
if (err.code === 'EADDRINUSE') {
|
|
30
|
+
reject(new Error(`Port ${port} is already in use. Try: cashclaw dashboard --port ${port + 1}`));
|
|
31
|
+
} else {
|
|
32
|
+
reject(err);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const url = `http://${host}:${port}`;
|
|
38
|
+
spinner.succeed(`Dashboard running at ${green.bold(url)}`);
|
|
39
|
+
|
|
40
|
+
console.log();
|
|
41
|
+
console.log(` ${orange('API Endpoints:')}`);
|
|
42
|
+
console.log(` ${dim('GET')} ${url}/api/status`);
|
|
43
|
+
console.log(` ${dim('GET')} ${url}/api/missions`);
|
|
44
|
+
console.log(` ${dim('GET')} ${url}/api/earnings`);
|
|
45
|
+
console.log(` ${dim('GET')} ${url}/api/skills`);
|
|
46
|
+
console.log(` ${dim('POST')} ${url}/api/config`);
|
|
47
|
+
console.log();
|
|
48
|
+
console.log(dim(' Press Ctrl+C to stop the server.\n'));
|
|
49
|
+
|
|
50
|
+
// Auto-open browser unless --no-open flag
|
|
51
|
+
if (!options.noOpen) {
|
|
52
|
+
try {
|
|
53
|
+
await open(url);
|
|
54
|
+
} catch {
|
|
55
|
+
console.log(dim(` Could not auto-open browser. Visit ${url} manually.\n`));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Keep process alive
|
|
60
|
+
process.on('SIGINT', () => {
|
|
61
|
+
console.log(dim('\n Dashboard stopped.\n'));
|
|
62
|
+
process.exit(0);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
process.on('SIGTERM', () => {
|
|
66
|
+
process.exit(0);
|
|
67
|
+
});
|
|
68
|
+
} catch (err) {
|
|
69
|
+
spinner.fail(err.message);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
}
|