modules Add detailed README documentation for 15+ bot templates including: - Platform analytics, BI reporting, and web crawler templates - CRM, contacts, and marketing automation templates - Legal document processing and office productivity templates - LLM tools, LLM server, and API client integration templates - Reminder management and meta-template for creating new templates Add new Rust configuration modules: - BM25 config for Tantivy-based sparse
458 lines
No EOL
13 KiB
Markdown
458 lines
No EOL
13 KiB
Markdown
# Marketing Automation Template (marketing.gbai)
|
|
|
|
A General Bots template for marketing campaign management, content creation, and multi-channel broadcast messaging.
|
|
|
|
## Overview
|
|
|
|
The Marketing template provides marketing automation capabilities including campaign management, content ideation, image generation, social media posting, and WhatsApp broadcast messaging. It enables marketing teams to create, schedule, and deliver campaigns through conversational AI.
|
|
|
|
## Features
|
|
|
|
- **Campaign Management** - Create and organize marketing campaigns
|
|
- **Content Ideation** - AI-assisted content idea generation
|
|
- **Image Generation** - AI-powered marketing visuals
|
|
- **Social Media Posting** - Direct posting to Instagram and other platforms
|
|
- **WhatsApp Broadcasts** - Mass messaging with template support
|
|
- **Contact Segmentation** - Target specific audience segments
|
|
- **Template Compliance** - META-approved template validation
|
|
- **Broadcast Logging** - Track delivery and engagement
|
|
|
|
## Package Structure
|
|
|
|
```
|
|
marketing.gbai/
|
|
├── README.md
|
|
├── marketing.gbdialog/
|
|
│ ├── add-new-idea.bas # Content ideation tool
|
|
│ ├── broadcast.bas # WhatsApp broadcast messaging
|
|
│ ├── get-image.bas # AI image generation
|
|
│ ├── post-to-instagram.bas # Instagram posting
|
|
│ ├── poster.bas # Marketing poster creation
|
|
│ └── campaigns/ # Campaign templates
|
|
└── marketing.gbot/
|
|
└── config.csv # Bot configuration
|
|
```
|
|
|
|
## Scripts
|
|
|
|
| File | Description |
|
|
|------|-------------|
|
|
| `add-new-idea.bas` | Generate and save marketing content ideas |
|
|
| `broadcast.bas` | Send WhatsApp broadcasts to contact lists |
|
|
| `get-image.bas` | Generate marketing images with AI |
|
|
| `post-to-instagram.bas` | Post content to Instagram |
|
|
| `poster.bas` | Create marketing posters and visuals |
|
|
|
|
## WhatsApp Broadcast
|
|
|
|
The `broadcast.bas` script enables mass WhatsApp messaging with template support:
|
|
|
|
### Parameters
|
|
|
|
| Parameter | Type | Description | Example |
|
|
|-----------|------|-------------|---------|
|
|
| `message` | STRING | Message with variables | `"Olá {name}, confira nossas novidades!"` |
|
|
| `template_file` | FILE | Header image for template | `header.jpg` |
|
|
| `list_file` | FILE | Contact list with phone numbers | `contacts.xlsx` |
|
|
| `filter` | STRING | Optional filter condition | `"Perfil=VIP"` |
|
|
|
|
### Usage
|
|
|
|
```basic
|
|
PARAM message AS STRING LIKE "Olá {name}, confira nossas novidades!"
|
|
DESCRIPTION "Message to broadcast, supports {name} and {telefone} variables"
|
|
PARAM template_file AS FILE LIKE "header.jpg"
|
|
DESCRIPTION "Header image file for the template"
|
|
PARAM list_file AS FILE LIKE "contacts.xlsx"
|
|
DESCRIPTION "File with contacts (must have telefone column)"
|
|
PARAM filter AS STRING LIKE "Perfil=VIP"
|
|
DESCRIPTION "Filter condition for contact list" OPTIONAL
|
|
|
|
DESCRIPTION "Send marketing broadcast message to a filtered contact list via WhatsApp template"
|
|
```
|
|
|
|
### Template Compliance
|
|
|
|
The system validates messages for META WhatsApp template approval:
|
|
|
|
```basic
|
|
report = LLM "Esta mensagem será aprovada pelo WhatsApp META como Template?
|
|
Responda OK se sim, ou explique o problema: " + message
|
|
|
|
IF report <> "OK" THEN
|
|
TALK "Atenção: " + report
|
|
END IF
|
|
```
|
|
|
|
### Broadcast Execution
|
|
|
|
```basic
|
|
IF filter THEN
|
|
list = FIND list_file, filter
|
|
ELSE
|
|
list = FIND list_file
|
|
END IF
|
|
|
|
index = 1
|
|
sent = 0
|
|
|
|
DO WHILE index < UBOUND(list)
|
|
row = list[index]
|
|
|
|
SEND TEMPLATE TO row.telefone, template_file
|
|
|
|
WAIT 0.1 ' Rate limiting
|
|
|
|
' Log delivery
|
|
WITH logEntry
|
|
timestamp = NOW()
|
|
phone = row.telefone
|
|
name = row.name
|
|
status = "sent"
|
|
END WITH
|
|
|
|
SAVE "broadcast_log.csv", logEntry
|
|
|
|
sent = sent + 1
|
|
index = index + 1
|
|
LOOP
|
|
|
|
TALK "Broadcast enviado para " + sent + " contatos."
|
|
```
|
|
|
|
## Contact List Format
|
|
|
|
The contact file should include:
|
|
|
|
| Column | Required | Description |
|
|
|--------|----------|-------------|
|
|
| `telefone` | Yes | Phone number with country code |
|
|
| `name` | No | Contact name for personalization |
|
|
| `email` | No | Email address |
|
|
| `Perfil` | No | Segment tag for filtering |
|
|
|
|
### Example contacts.xlsx
|
|
|
|
```csv
|
|
telefone,name,email,Perfil
|
|
+5511999999999,João Silva,joao@email.com,VIP
|
|
+5511888888888,Maria Santos,maria@email.com,Regular
|
|
+5511777777777,Pedro Costa,pedro@email.com,VIP
|
|
```
|
|
|
|
## Campaign Management
|
|
|
|
### Creating Campaigns
|
|
|
|
```
|
|
User: Create a new marketing campaign
|
|
Bot: What's the campaign name?
|
|
User: Black Friday 2024
|
|
Bot: What's the campaign objective?
|
|
User: Drive sales for electronics category
|
|
Bot: What's the target audience?
|
|
User: VIP customers who purchased in the last 6 months
|
|
Bot: ✅ Campaign created: Black Friday 2024
|
|
Objective: Drive sales for electronics
|
|
Audience: VIP customers (last 6 months)
|
|
```
|
|
|
|
### Campaign Structure
|
|
|
|
```basic
|
|
WITH campaign
|
|
id = "CAMP-" + FORMAT(NOW(), "YYYYMMDD") + "-" + FORMAT(RANDOM(1000, 9999))
|
|
name = campaign_name
|
|
objective = objective
|
|
audience = audience_filter
|
|
status = "draft"
|
|
created_at = NOW()
|
|
created_by = GET SESSION "user_email"
|
|
END WITH
|
|
|
|
SAVE "campaigns.csv", campaign
|
|
```
|
|
|
|
## Content Ideation
|
|
|
|
### AI-Powered Ideas
|
|
|
|
```basic
|
|
' add-new-idea.bas
|
|
PARAM topic AS STRING DESCRIPTION "Topic or product for content ideas"
|
|
PARAM platform AS STRING LIKE "instagram" DESCRIPTION "Target platform"
|
|
PARAM tone AS STRING LIKE "professional" DESCRIPTION "Content tone" OPTIONAL
|
|
|
|
DESCRIPTION "Generate marketing content ideas using AI"
|
|
|
|
SET CONTEXT "You are a creative marketing specialist."
|
|
|
|
ideas = LLM "Generate 5 creative marketing content ideas for:
|
|
Topic: " + topic + "
|
|
Platform: " + platform + "
|
|
Tone: " + (tone OR "engaging") + "
|
|
|
|
Include:
|
|
- Headline
|
|
- Key message
|
|
- Call to action
|
|
- Hashtag suggestions"
|
|
|
|
TALK ideas
|
|
|
|
' Save ideas for future reference
|
|
WITH idea_record
|
|
id = FORMAT(GUID())
|
|
topic = topic
|
|
platform = platform
|
|
ideas = ideas
|
|
created_at = NOW()
|
|
END WITH
|
|
|
|
SAVE "content_ideas.csv", idea_record
|
|
```
|
|
|
|
## Image Generation
|
|
|
|
### AI Marketing Visuals
|
|
|
|
```basic
|
|
' get-image.bas
|
|
PARAM prompt AS STRING DESCRIPTION "Description of the image to generate"
|
|
PARAM style AS STRING LIKE "photorealistic" DESCRIPTION "Image style" OPTIONAL
|
|
PARAM size AS STRING LIKE "1080x1080" DESCRIPTION "Image dimensions" OPTIONAL
|
|
|
|
DESCRIPTION "Generate marketing images using AI"
|
|
|
|
full_prompt = prompt
|
|
IF style THEN
|
|
full_prompt = full_prompt + ", " + style + " style"
|
|
END IF
|
|
|
|
image = GENERATE IMAGE full_prompt, size OR "1080x1080"
|
|
|
|
IF image THEN
|
|
SEND FILE image, "Generated image for: " + prompt
|
|
RETURN image
|
|
ELSE
|
|
TALK "Failed to generate image. Please try a different prompt."
|
|
RETURN NULL
|
|
END IF
|
|
```
|
|
|
|
## Social Media Posting
|
|
|
|
### Instagram Integration
|
|
|
|
```basic
|
|
' post-to-instagram.bas
|
|
PARAM image AS FILE DESCRIPTION "Image to post"
|
|
PARAM caption AS STRING DESCRIPTION "Post caption with hashtags"
|
|
PARAM schedule AS STRING DESCRIPTION "Schedule time (optional)" OPTIONAL
|
|
|
|
DESCRIPTION "Post content to Instagram"
|
|
|
|
' Validate caption length
|
|
IF LEN(caption) > 2200 THEN
|
|
TALK "Caption too long. Maximum 2,200 characters."
|
|
RETURN
|
|
END IF
|
|
|
|
IF schedule THEN
|
|
' Schedule for later
|
|
SET SCHEDULE schedule, "execute-instagram-post.bas"
|
|
SET BOT MEMORY "scheduled_post_" + FORMAT(GUID()), {
|
|
"image": image,
|
|
"caption": caption,
|
|
"scheduled_for": schedule
|
|
}
|
|
TALK "Post scheduled for: " + schedule
|
|
ELSE
|
|
' Post immediately
|
|
result = POST TO INSTAGRAM image, caption
|
|
|
|
IF result.success THEN
|
|
TALK "✅ Posted to Instagram successfully!"
|
|
TALK "Post ID: " + result.post_id
|
|
ELSE
|
|
TALK "❌ Failed to post: " + result.error
|
|
END IF
|
|
END IF
|
|
```
|
|
|
|
## Poster Creation
|
|
|
|
### Marketing Poster Generator
|
|
|
|
```basic
|
|
' poster.bas
|
|
PARAM headline AS STRING DESCRIPTION "Main headline text"
|
|
PARAM subheadline AS STRING DESCRIPTION "Supporting text" OPTIONAL
|
|
PARAM product_image AS FILE DESCRIPTION "Product image" OPTIONAL
|
|
PARAM template AS STRING LIKE "sale" DESCRIPTION "Poster template: sale, announcement, event"
|
|
|
|
DESCRIPTION "Create marketing posters with customizable templates"
|
|
|
|
' Generate poster using template
|
|
poster = GENERATE POSTER template WITH {
|
|
"headline": headline,
|
|
"subheadline": subheadline,
|
|
"image": product_image,
|
|
"brand_color": GET CONFIG "brand_color",
|
|
"logo": GET CONFIG "logo_file"
|
|
}
|
|
|
|
SEND FILE poster, "Marketing poster: " + headline
|
|
RETURN poster
|
|
```
|
|
|
|
## Configuration
|
|
|
|
Configure in `marketing.gbot/config.csv`:
|
|
|
|
| Parameter | Description | Example |
|
|
|-----------|-------------|---------|
|
|
| `Brand Color` | Primary brand color | `#FF5722` |
|
|
| `Logo File` | Company logo path | `logo.png` |
|
|
| `Instagram Account` | Connected IG account | `@mycompany` |
|
|
| `WhatsApp Business ID` | WA Business account | `123456789` |
|
|
| `Default Template` | Default broadcast template | `marketing_update` |
|
|
| `Rate Limit` | Messages per second | `10` |
|
|
| `Max Broadcast Size` | Maximum recipients | `1000` |
|
|
|
|
## Audience Segmentation
|
|
|
|
### Filter Examples
|
|
|
|
| Filter | Description |
|
|
|--------|-------------|
|
|
| `Perfil=VIP` | VIP customers only |
|
|
| `Perfil=Regular AND compras>5` | Regular customers with 5+ purchases |
|
|
| `ultima_compra>2024-01-01` | Recent purchasers |
|
|
| `cidade=São Paulo` | Location-based |
|
|
| `interesse=electronics` | Interest-based |
|
|
|
|
### Building Segments
|
|
|
|
```basic
|
|
' Create reusable segments
|
|
WITH segment
|
|
id = "SEG-" + FORMAT(GUID())
|
|
name = "VIP São Paulo"
|
|
filter = "Perfil=VIP AND cidade=São Paulo"
|
|
count = COUNT(FIND "contacts.xlsx", filter)
|
|
created_at = NOW()
|
|
END WITH
|
|
|
|
SAVE "segments.csv", segment
|
|
```
|
|
|
|
## Analytics & Reporting
|
|
|
|
### Broadcast Analytics
|
|
|
|
```basic
|
|
' Get broadcast statistics
|
|
broadcast_id = "BROADCAST-20240115-1234"
|
|
logs = FIND "broadcast_log.csv", "broadcast_id = '" + broadcast_id + "'"
|
|
|
|
total_sent = COUNT(logs)
|
|
delivered = COUNT(FIND logs, "status = 'delivered'")
|
|
read = COUNT(FIND logs, "status = 'read'")
|
|
clicked = COUNT(FIND logs, "status = 'clicked'")
|
|
|
|
TALK "📊 Broadcast Report"
|
|
TALK "Total Sent: " + total_sent
|
|
TALK "Delivered: " + delivered + " (" + (delivered/total_sent*100) + "%)"
|
|
TALK "Read: " + read + " (" + (read/total_sent*100) + "%)"
|
|
TALK "Clicked: " + clicked + " (" + (clicked/total_sent*100) + "%)"
|
|
```
|
|
|
|
## Example Workflows
|
|
|
|
### Product Launch Campaign
|
|
|
|
```
|
|
User: Create a product launch broadcast
|
|
Bot: What product are you launching?
|
|
User: New wireless headphones
|
|
Bot: I'll help you create the campaign. Let me generate some content ideas...
|
|
|
|
📝 Content Ideas:
|
|
1. "Experience Sound Like Never Before 🎧"
|
|
2. "Your Music. Your Freedom. Wireless."
|
|
3. "Say Goodbye to Tangled Cables"
|
|
|
|
Which headline do you prefer?
|
|
|
|
User: 1
|
|
Bot: Now let me generate a promotional image...
|
|
[Generates AI image]
|
|
|
|
Here's your promotional image. Should I create the broadcast?
|
|
|
|
User: Yes, send to VIP customers
|
|
Bot: ✅ Broadcast prepared:
|
|
📱 Recipients: 234 VIP customers
|
|
📝 Message: "Experience Sound Like Never Before 🎧"
|
|
🖼️ Template with header image
|
|
|
|
Send now or schedule?
|
|
|
|
User: Send now
|
|
Bot: 📤 Broadcasting...
|
|
✅ Broadcast complete! Sent to 234 contacts.
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. **Template compliance** - Always validate templates before broadcast
|
|
2. **Segment wisely** - Target relevant audiences to improve engagement
|
|
3. **Rate limiting** - Respect platform rate limits to avoid blocks
|
|
4. **Personalization** - Use variables for personalized messages
|
|
5. **A/B testing** - Test different messages with small segments first
|
|
6. **Timing** - Schedule broadcasts for optimal engagement times
|
|
7. **Tracking** - Monitor delivery and engagement metrics
|
|
8. **Opt-out handling** - Honor unsubscribe requests immediately
|
|
|
|
## Troubleshooting
|
|
|
|
| Issue | Cause | Solution |
|
|
|-------|-------|----------|
|
|
| Template rejected | Non-compliant content | Review META guidelines |
|
|
| Low delivery rate | Invalid phone numbers | Clean contact list |
|
|
| Broadcast blocked | Rate limit exceeded | Reduce sending speed |
|
|
| Images not generating | Invalid prompt | Simplify prompt text |
|
|
| Instagram post failed | Auth expired | Reconnect account |
|
|
|
|
## Related Templates
|
|
|
|
- `crm.gbai` - Customer relationship management
|
|
- `contacts.gbai` - Contact list management
|
|
- `broadcast.gbai` - General message broadcasting
|
|
- `analytics.gbai` - Marketing analytics
|
|
|
|
## Use Cases
|
|
|
|
- **Product Launches** - Announce new products to customers
|
|
- **Promotions** - Send special offers and discounts
|
|
- **Events** - Promote webinars, sales, and events
|
|
- **Newsletters** - Regular customer communications
|
|
- **Re-engagement** - Win back inactive customers
|
|
- **Social Media** - Automated content posting
|
|
|
|
## Compliance Notes
|
|
|
|
- Ensure recipients have opted in to receive marketing messages
|
|
- Honor unsubscribe requests within 24 hours
|
|
- Follow META WhatsApp Business policies
|
|
- Comply with GDPR/LGPD data protection requirements
|
|
- Keep records of consent for audit purposes
|
|
|
|
## License
|
|
|
|
AGPL-3.0 - Part of General Bots Open Source Platform.
|
|
|
|
---
|
|
|
|
**Pragmatismo** - General Bots |