Akquise Pipeline

Automatisierte Email-Kampagne zur Neukunden-Akquise mit manueller Freigabe

Beschreibung

Die Akquise Pipeline wandelt fertige Websites in Kunden um. Der 🤖 Akquise Agent kümmert sich um die komplette Vorbereitung: Screenshot erstellen, personalisierte Angebotsseite (webseiten.minicon.eu/?ref={slug}) aktualisieren, CUSTOMER_REF eintragen und deployen. Dann Email-Kampagne: Jede Email wird vor dem Versand von Michael geprüft und freigegeben. Der Support-Bot-Name ({bot_name}) wird pro Kunde individuell aus dem Hub geladen (api.minicon.eu/api/admin/customers/{siteId}botPersona.name). Email-Layout: Felsenland-Hero + Michael-Signatur + Registerdaten-Footer (einheitlich für ALLE Emails).

⏰ Timer: alle 6 Stunden 🤖 Akquise Agent orchestriert Pipeline 👤 Michael gibt Email frei 📧 3 Email-Stufen
Flow
1

S6a – Akquise Vorbereitung

Trigger: Build-Ticket mit po-approved + build-ticket

Schedule: 0 6,12,18 * * * (3× täglich)

Agent: 🤖 akquise

Action:

  1. Build-Tickets suchen: JQL: project=DAHN AND labels="build-ticket" AND labels="po-approved"
  2. Dreifach-Duplikat-Check pro Ticket:
    • Akquise-Ticket existiert? → JQL: labels="akquise-ticket" AND labels="siteid-{slug}" → SKIP
    • Discovery-Duplikat? → JQL: labels="discovery-done" AND labels="siteid-{slug}" → >1 = SKIP + Duplikat schließen
    • Bereits vorbereitet? → JQL: labels="akquise-vorbereitet" AND labels="siteid-{slug}" → SKIP
  3. Screenshot erstellen:
    node C:\working\atlas\scripts\screenshot.js "https://{slug}.minicon.eu" "C:\working\akquise\screenshots\{slug}.jpg"
  4. Akquise-Ticket in Jira erstellen:
    • Summary: [Akquise] {Firmenname}
    • Labels: akquise-ticket, siteid-{slug}, akquise-bereit
    • Description: Kontaktdaten + Preview-URL + Angebotsseite
    • Link: relates to Build-Ticket
  5. Screenshot an Jira-Ticket attachen:
    jira-attach.ps1 -TicketKey "DAHN-YY" -FilePath "{slug}.jpg"
  6. Labels + Kommentare setzen:
    • Build-Ticket: Kommentar "[AKQUISE] Akquise-Ticket DAHN-YY erstellt"
    • Akquise-Ticket: Kommentar mit Build-Link + Preview-URL
    • Label: akquise-bereitakquise-vorbereitet
  7. Screenshot für Angebotsseite kopieren:
    Copy-Item → C:\working\website-webseiten\public\previews\{slug}.jpg
  8. CUSTOMER_REF in Angebotsseite eintragen:
    In website-webseiten/src/app/page.tsx zwei Keys hinzufügen:
    '{slug}.minicon.eu': dahnCustomer('{slug}', '{Name}', '{Beschreibung}', '{Branche}')
    '{slug}': dahnCustomer('{slug}', '{Name}', '{Beschreibung}', '{Branche}')
  9. Angebotsseite build + deploy:
    • npm run build
    • npx wrangler pages deploy out --project-name=website-webseiten --branch=main
    • git add + commit + push
    • CF Cache purgen (Zone minicon.eu)

Ergebnis: Akquise-Ticket mit Screenshot, Angebotsseite aktualisiert mit personalisiertem Ref-Link (webseiten.minicon.eu/?ref={slug})

🤖 Akquise Agent (S6a)
2

S6b – Pre-Send-Check + Vorschau an Michael

Trigger: akquise-vorbereitet + Website existiert (HTTP 200)

Schedule: 0 9,15,21 * * * (3× täglich)

Agent: 🤖 akquise

Action:

  1. Tickets finden:
    JQL: project=DAHN AND labels="akquise-ticket" AND labels="akquise-vorbereitet" AND labels NOT IN ("akquise-email-preview-sent","akquise-email-approved","akquise-email-1",...)
  2. Website-Check (PFLICHT!):
    curl -sI https://{siteid}.minicon.eu
    Wenn NICHT HTTP 200 → SKIP! Keine Email ohne live Website.
  3. Bot-Name aus Hub laden:
    GET api.minicon.eu/api/admin/customers/{siteId}botPersona.name
    Wenn vorhanden: {bot_intro} = "mein Name ist {bot_name} — ich bin Ihr persönlicher Support Agent..."
    Wenn leer: {bot_intro} = "" (Zeile komplett weglassen)
  4. Features aus S1d/S1f/S1g extrahieren:
    Build-Ticket finden über siteid-{slug} Label, Kommentare lesen mit Get-AdfText.
    Individuelle Features pro Kunde (NICHT generisch!): Leistungen, Öffnungszeiten, Speisekarte, etc.
  5. Email-Template laden + Variablen ersetzen:
    Template: 📧 email-1-vorstellung.html
    • {Anrede} = Formelle Anrede oder "Guten Tag"
    • {firmenname} = Aus Jira-Ticket Summary
    • {siteid} = Aus Label siteid-{slug}
    • {preview_url} = https://{siteid}.minicon.eu (die fertige Website)
    • {angebots_url} = https://webseiten.minicon.eu/?ref={siteid} (ANGEBOTSSEITE! NIEMALS die Preview-URL!)
    • {bot_name} = Support-Bot-Name aus Hub
    • {bot_intro} = Voller Intro-Satz mit Bot-Name (oder leer)
    • {features} = Individuell extrahierte Features als HTML-Liste
  6. VORSCHAU-Email an Michael senden:
    Via Resend API (re_bxqzKnVZ_...), From: [email protected]
    An: [email protected]
    Subject: "📋 [VORSCHAU] Email an {firmenname} — Bitte freigeben"
  7. Email als HTML-Attachment am Jira-Ticket speichern
  8. Label setzen: akquise-email-preview-sent
  9. Jira-Kommentar: "📤 Vorschau an Michael gesendet — wartet auf Freigabe"

Ergebnis: Label akquise-email-preview-sent, Michael erhält Vorschau per Email

Max 5 Emails pro Run (Rate Limit)

🤖 Akquise Agent (S6b)
3

Manuelle Freigabe

Trigger: Michael erhält Email-Vorschau

Action:

  1. Michael erhält Email mit:
    • Vollständiger Email-Text (gerendert als HTML)
    • Link zur Live-Website: {websiteUrl}
    • Link zumPdfManagement Angebot
    • Ticket-ID und Kundendaten
  2. Michael prüft Email-Inhalt auf:
    • Richtige Anrede (Vorname/Nachname korrekt?)
    • Richtiger Website-Link?
    • Stimmt das Angebot?
    • Alles professionell und fehlerfrei?
  3. Option A — Freigeben: Michael setzt Label akquise-email-approved auf dem Jira-Ticket
  4. Option B — Anpassen: Michael antwortet auf die Vorschau-Email mit Änderungswünschen → S6a/S6b passt Email an
  5. Option C — Ablehnen: Michael setzt Label akquise-abgelehnt → Pipeline beendet für dieses Ticket

Ergebnis: S6b erkennt akquise-email-approved → Email 1 wird an Kunden gesendet

Du
4

S6b – Email 1 an Kunden (nach Freigabe)

Trigger: Label akquise-email-approved (Michael hat freigegeben)

Gleicher Cron wie S6b Vorschau — prüft in Schritt 2 freigegebene Tickets

Template: 📧 email-1-vorstellung.html

Action:

  1. Freigegebene Tickets finden:
    JQL: project=DAHN AND labels="akquise-ticket" AND labels="akquise-email-approved" AND labels NOT IN ("akquise-email-1","akquise-kontakt","akquise-aktiv")
  2. Bereits erstellte Email laden (aus Jira-Attachment oder neu generieren)
  3. Email an echte Kunden-Adresse senden:
    Via Resend API, From: [email protected]
    An: Kunden-Email (aus S1d-Kommentar oder Jira-Description)
    Layout: Felsenland-Hero + Michael-Signatur + Registerdaten-Footer
  4. Labels aktualisieren:
    • Label akquise-email-approvedakquise-email-1
    • Label akquise-vorbereitet entfernen
  5. Jira-Kommentar: "📧 Email 1 (Vorstellung) versendet an {kundenEmail}"

Ergebnis: Label akquise-email-1

🤖 Akquise Agent (S6b)
5

S6b – Email 2 Follow-up

Trigger: 3 Tage nach Email 1, keine Antwort

Template: 📧 email-2-followup.html

Action:

  1. Cron/Trigger: alle 6 Stunden prüfen ob akquise_next_followup_at ≤ jetzt
  2. Prüfen ob Ticket bereits akquise-email-2 hat → nur wenn noch nicht gesendet
  3. Prüfen ob Kunde geantwortet hat (keine akquise-email-2 wenn schon Antwort)
  4. Email-Template laden: email-2-followup.html
  5. Variablen ersetzen:
    • {vorname}, {nachname}, {firma}
    • {websiteUrl} = Live-URL
    • {angebotLink} = Link zumPdfManagement Angebot
    • {unsubscribeLink} = Opt-Out Link
  6. Email senden an: {kundenEmail}
  7. Reply-To: [email protected]
  8. Jira-Ticket updaten:
    • Label akquise-email-2 setzen
    • Custom Field akquise_email_2_sent_at = jetzt
    • Custom Field akquise_email_2_recipient = {kundenEmail}
    • Custom Field akquise_next_followup_at = jetzt + 5 Tage
  9. Jira-Kommentar: "📧 Email 2 (Follow-up) versendet an {kundenEmail} — nächste Follow-up: {datum +5d}"

Ergebnis: Label akquise-email-2

🤖 Akquise Agent (S6b)
6

S6b – Email 3 Letzte Chance

Trigger: 5 Tage nach Email 2, keine Antwort

Template: 📧 email-3-letzte-chance.html

Action:

  1. Cron/Trigger: prüfen ob akquise_next_followup_at ≤ jetzt
  2. Prüfen ob Ticket bereits akquise-email-3 hat → nur wenn noch nicht gesendet
  3. Prüfen ob Kunde geantwortet hat (Pipeline beenden wenn ja)
  4. Email-Template laden: email-3-letzte-chance.html
  5. Variablen ersetzen:
    • {vorname}, {nachname}, {firma}
    • {websiteUrl} = Live-URL
    • {angebotLink} = Link zumPdfManagement Angebot
    • {unsubscribeLink} = Opt-Out Link
  6. Email senden an: {kundenEmail}
  7. Reply-To: [email protected]
  8. Jira-Ticket updaten:
    • Label akquise-email-3 setzen
    • Custom Field akquise_email_3_sent_at = jetzt
    • Custom Field akquise_email_3_recipient = {kundenEmail}
    • Custom Field akquise_kampagne_ended_at = jetzt
    • Custom Field akquise_kampagne_outcome = keine_antwort
  9. Jira-Kommentar: "📧 Email 3 (Letzte Chance) versendet an {kundenEmail} — Kampagne beendet, keine weitere Aktion"
  10. Jira-Kommentar: "⚠️ Kampagne beendet — Ticket bleibt offen für manuelle Nachverfolgung durch Michael"

Ergebnis: Label akquise-email-3

🤖 Akquise Agent (S6b)
✅ Erfolgs-Flow: Kunde antwortet / kauft

Trigger: Kunde antwortet auf eine der Emails oder klickt auf Angebot

  1. S6a erkennt eingehende Email (Reply-To Match oder neuer Inbound)
  2. Prüft ob Email positiv ist (Angebot angeklickt, Termin gewünscht, direkt gekauft)
  3. Jira-Ticket updaten:
    • Label akquise-konvertiert setzen
    • Custom Field akquise_konvertiert_at = jetzt
    • Custom Field akquise_konvertiert_via = email-Nr (1, 2 oder 3)
    • Custom Field akquise_kampagne_outcome = konvertiert
  4. Jira-Kommentar: "🎉 Kunde konvertiert! via Email {N} — weitere Aktion nötig (Vertrieb/Michael)"
  5. Telegram/Discord Alert an Michael: "Akquise Erfolg! {firma} hat über Email {N} reagiert"
  6. Pipeline für dieses Ticket beenden — manueller Vertriebsprozess übernimmt
❌ Pipeline-Abbruch (Opt-Out / Spam)

Trigger: Kunde antwortet mit Abmeldung oder bounce

  1. S6a erkennt Opt-Out via:
    • Unsubscribe-Link Klick → wird in CRM/Email-Tool getrackt
    • Kunde antwortet mit "abmelden" / "stop" / "unsubscribe"
    • Email Bounce (unzustellbar)
  2. Jira-Ticket updaten:
    • Label akquise-opt-out setzen
    • Custom Field akquise_outcome = opt_out
    • Custom Field akquise_kampagne_ended_at = jetzt
  3. Jira-Kommentar: "🚫 Opt-Out / Bounce — Kampagne für dieses Ticket beendet"
  4. Wichtig: Email-Adresse in CRM auf Blacklist setzen (DSGVO)
Email-Templates

Akquise Emails:

📧 email-1-vorstellung.html | 📧 email-2-followup.html | 📧 email-3-letzte-chance.html

CR Workflow Emails:

📧 CR Workflow Email-Templates im CR Workflow PAP
Labels

akquise-ticket – Akquise-Ticket

akquise-vorbereitet – Bereit für Email-Kampagne

akquise-email-preview-sent – Vorschau an Michael gesendet

akquise-email-approved – Michael hat freigegeben

akquise-email-1 – Email 1 versendet

akquise-email-2 – Email 2 (Follow-up) versendet

akquise-email-3 – Email 3 (Letzte Chance) versendet

akquise-selbst – Manuell verkauft/erledigt

akquise-konvertiert – Kunde hat gekauft/reagiert

akquise-opt-out – Kunde hat sich abgemeldet

akquise-abgelehnt – Michael hat Email-Kampagne abgelehnt