SMS Flow Kampagner System
Teknisk & Kommerciel Handover Guide
Version: 1.0 | Dato: Januar 2025 | App: Loanly24 | Platform: Base44 + Twilio SMS
📋 Indholdsfortegnelse
- System Oversigt
- Arkitektur & Data Model
- Twilio Integration
- SMS Flow Kampagner
- Cron Jobs & Automatisering
- Opt-Out System
- Link Shortening & Tracking
- SMS Database & Lead Management
- Faldgruber & Best Practices
- Deployment & Monitoring
1. System Oversigt
1.1 Formål
SMS Flow Kampagner systemet er et automatiseret marketing automation system, der:
- Sender personaliserede SMS beskeder til leads baseret på triggers
- Håndterer multi-step kampagner med delays
- Respekterer opt-out regler (GDPR compliance)
- Tracker clicks og engagement
- Integrerer med Twilio for SMS levering
1.2 Hovedkomponenter
Campaign (Flow) → CampaignStep (Steps) → CampaignJob (Scheduled)
↓
Lead (Målgruppe) → Cron Job Processor → Twilio (SMS)
↓
SmsOptOut (GDPR) → SmsLog & Tracking (Analytics)
2. Arkitektur & Data Model
2.1 Database Entities
Campaign (Kampagne)
Hovedentitet for en SMS kampagne.
name: string
type: flow | broadcast
status: draft | scheduled | running | paused | completed | cancelled
trigger_type: manual | on_lead_created | on_lead_inactive
CampaignStep (Kampagne Trin)
campaign_id: string
name: string
order_index: 0, 1, 2, etc.
delay_hours: 24
sms_template: Hej navn!
stop_if_converted: true
Eksempel flow:
- Step 0: delay_hours=0 → "Velkommen! {{name}}"
- Step 1: delay_hours=24 → "Hej igen {{name}}, har du set vores tilbud?"
- Step 2: delay_hours=72 → "Sidste chance {{name}}!"
3. Twilio Integration
3.1 Opsætning
Systemet bruger Twilio til at sende SMS beskeder.
Environment Variables (Secrets):
TWILIO_ACCOUNT_SID=ACxxxxxxxx...
TWILIO_AUTH_TOKEN=xxxxxxxx...
TWILIO_MESSAGING_SERVICE_SID=MGxxxxxxxx...
3.2 E.164 Telefonnummer Format
⚠️ Kritisk vigtig! Twilio kræver E.164 format.
function normalizePhone(phone) {
let cleaned = phone.replace(/[\s\-\(\)]/g, '');
cleaned = cleaned.replace(/^(\+45|0045|45)/, '');
if (cleaned.length === 8) {
return `+45${cleaned}`;
}
return cleaned;
}
5. Cron Jobs & Automatisering
5.1 Arkitektur
SMS beskeder sendes IKKE real-time. De scheduleres og processeres af cron jobs.
Cron Job Setup
Brug en ekstern cron service (cron-job.org, EasyCron, GitHub Actions)
External Cron Service
↓
GET /api/functions/processFlowCampaigns?secret=xxx
↓
1. Hent alle "planned" jobs hvor scheduled_at <= now
2. For hver job:
- Check opt-out status
- Check if lead converted
- Replace template variables
- Send via Twilio
- Update job status
- Log to SmsLog
3. Return summary
5.2 Opsætning af Cron Job
Mulighed 1: cron-job.org (Gratis)
- Gå til https://cron-job.org/
- Opret konto
- Create ny cron job
- URL: https://nordic-loan-992ca5e8.base44.app/api/functions/processFlowCampaigns?secret=YOUR_SECRET
- Schedule: */5 * * * * (hver 5. minut)
Mulighed 2: GitHub Actions
name: Process SMS Campaigns
on: schedule: cron: '*/5 * * * *'
jobs:
process:
runs-on: ubuntu-latest
steps:
- name: Trigger SMS Processing
run: curl -X GET "URL?secret=SECRET"
6. Opt-Out System
6.1 GDPR & Legal Requirements
✅ Krav:
- • Hver SMS skal have afmeld mulighed
- • Afmelding skal være enkel og gratis
- • Afmeldte skal respekteres med det samme
- • Audit log af alle opt-out/opt-in handlinger
- • Mulighed for re-aktivering (med consent)
6.2 Opt-Out Landing Page
Se pages/Afmeld.jsx for komplet implementation.
7. Link Shortening & Tracking
7.1 Hvorfor Link Tracking?
- SMS har karakter begrænsning (160 tegn for single SMS)
- Lange URLs bruger værdifuld plads
- Tracking af clicks giver vigtig engagement data
- Kan måle kampagne effektivitet
9. Faldgruber & Best Practices
9.1 Almindelige Fejl
❌ Fejl #1: Manglende E.164 Format
// FORKERT
const phone = "20 12 34 56";
await twilioClient.messages.create({ to: phone });
// KORREKT
const phone = normalizePhone("20 12 34 56");
await twilioClient.messages.create({ to: phone });
❌ Fejl #2: Ikke Checke Opt-Out
// KORREKT - Check opt-out ALTID
const optOut = await base44.entities.SmsOptOut.filter({
phone: normalizedPhone,
opted_out: true
});
if (optOut.length > 0) {
console.log("User opted out, skipping");
return;
}
9.4 GDPR Compliance Checklist
- ☐ Opt-out link i ALLE marketing SMS
- ☐ Respektér opt-outs med det samme
- ☐ Audit log af alle opt-out actions
- ☐ Data retention policy
- ☐ User kan downloade deres data
- ☐ Clear consent ved signup
- ☐ Privacy policy link
10. Deployment & Monitoring
10.1 Deployment Checklist
Pre-deployment
- ☐ Test all functions locally
- ☐ Verify Twilio credentials
- ☐ Setup cron job service
- ☐ Test opt-out flow
- ☐ Verify link tracking
Deployment
- ☐ Deploy functions to Base44
- ☐ Set environment variables
- ☐ Create initial campaigns
- ☐ Test with small batch
- ☐ Monitor logs for errors
Post-deployment
- ☐ Monitor cron executions
- ☐ Check Twilio usage
- ☐ Review opt-out rates
- ☐ Analyze CTR
- ☐ Setup alerts
10.4 Cost Monitoring
💰 Twilio Costs:
- • SMS til Danmark: ~$0.08 per SMS
- • Estimat: 1000 leads × 3 steps = 3000 SMS = $240
- • Med 10% opt-out: 2700 SMS = $216
Sample SMS Templates
Welcome SMS
Hej [first_name]! 👋
Tak for din interesse i lån hos [lender_name].
Vi kontakter dig snart med dit tilbud.
Afmeld: [unsubscribe]
Follow-up SMS (Step 1)
Hej igen [first_name]!
Har du set vores seneste lånetilbud?
Klik her: [link]
Spørgsmål? Svar på denne SMS.
Afmeld: [unsubscribe]
Last Chance SMS (Step 2)
Sidste chance [first_name]! ⏰
Dit lånetilbud udløber snart.
Se tilbud nu: [link]
Afmeld: [unsubscribe]
Support & Resources
Twilio Resources
- • Dashboard: console.twilio.com
- • Documentation: twilio.com/docs/sms
- • Status: status.twilio.com
Base44 Resources
- • Dashboard: app.base44.app
- • Documentation: docs.base44.com
🚀
Held og lykke med videreudviklingen!
Version 1.0 | Januar 2025
