feat(b2b-assistant): Implement Step 7 (Customer Journey) with tactical focus on Buying Center, Deal-Breakers, and Assets. Add restart functionality for individual steps.

This commit is contained in:
2026-01-14 08:42:14 +00:00
parent 34203e2325
commit 09dbdac817
8 changed files with 166 additions and 98 deletions

View File

@@ -150,6 +150,22 @@ Fuehre fuer jede **[Rolle]** innerhalb der **[Fokus-Branche: {{focus_industry}}]
Erstelle ONLY die finale Markdown-Tabelle.
* **Table Columns:** *Fokus-Branche | Rolle | Kernbotschaft (2-3 sentences) | {{channels}}*.
* **Requirement:** Your response must start with the heading \"## Schritt 6: Botschaften\" and contain ONLY die vollstaendige Markdown-Tabelle.""",
"""# Aufgabe
Fuehre **Schritt 7 - Customer Journey & Buying Center** durch.
# Kontext: Validierte Ergebnisse aus vorherigen Schritten
{{previous_steps_data}}
# Fokus
Beziehe dich auf die **Fokus-Branche: {{focus_industry}}**.
# Anweisungen fuer Schritt 7
* Analysiere die Kaufreise ("Journey") vom ersten Trigger bis zum Vertrag.
* Identifiziere fuer jede Phase die **Dynamik im Buying Center**: Wer treibt an (Champion), wer bremst oder prueft (Gatekeeper/Evaluator), wer entscheidet (Decider)?
* Gehe besonders auf **technische und organisatorische Barrieren** ein (z.B. IT-Sicherheit, Schnittstellen wie Aufzugssteuerung, Prozessintegration).
* Definiere **konkrete Assets**, die die jeweilige Rolle in dieser Phase benoetigt, um Einwaende zu entkraeften oder interne Mitstreiter zu ueberzeugen (z.B. "API-Dokumentation fuer Aufzugsbauer", "ROI-Rechner fuer CFO", "Sicherheits-Whitepaper").
* **Output:** Erstelle eine Markdown-Tabelle mit exakt diesen Spalten: *Phase | Rolle | Funktion (Buying Center) | Zentrale Frage / Beduerfnis | Moeglicher Deal-Breaker | Benoetigtes Asset / Format*.
* **Format-Anforderung:** Antworte NUR mit den Ergebnissen fuer diesen einen Schritt. Deine Antwort muss mit der Ueberschrift \"## Schritt 7: Customer Journey\" beginnen."""
]
SYSTEM_PROMPT_EN = """# System Role
@@ -256,7 +272,23 @@ For each **[Role]** within the **[Focus Industry: {{focus_industry}}]**, perform
# Output Format
Create ONLY the final Markdown table.
* **Table Columns:** *Focus Industry | Role | Core Message (2-3 sentences) | {{channels}}*.
* **Requirement:** Your response must start with the heading \"## Step 6: Messages\" and contain ONLY the complete Markdown table."""
* **Requirement:** Your response must start with the heading \"## Step 6: Messages\" and contain ONLY the complete Markdown table.""",
"""# Task
Perform **Step 7 - Customer Journey & Buying Center**.
# Context: Validated results from previous steps
{{previous_steps_data}}
# Focus
Refer to the **Focus Industry: {{focus_industry}}**.
# Instructions for Step 7
* Analyze the purchase journey ("Journey") from the first trigger to the contract.
* Identify the **Buying Center dynamics** for each phase: Who drives it (Champion), who slows it down or audits (Gatekeeper/Evaluator), who decides (Decider)?
* Focus specifically on **technical and organizational barriers** (e.g., IT security, interfaces like elevator control, process integration).
* Define **concrete assets** that each role needs in this phase to invalidate objections or convince internal stakeholders (e.g., "API documentation for elevator manufacturers", "ROI calculator for CFO", "Security Whitepaper").
* **Output:** Create a Markdown table with exactly these columns: *Phase | Role | Function (Buying Center) | Key Question / Need | Potential Deal-Breaker | Needed Asset / Format*.
* **Format Requirement:** Respond ONLY with the results for this single step. Your response must start with the heading \"## Step 7: Customer Journey\"."""
]
PROMPTS = {
@@ -270,6 +302,7 @@ PROMPTS = {
'painPoints': 'Schritt 4: Painpoints je Rolle (WARUM)',
'gains': 'Schritt 5: Gains & Nutzen je Rolle (WARUM wechseln)',
'messages': 'Schritt 6: Marketingbotschaften je Segment & Rolle (WIE sprechen)',
'customerJourney': 'Schritt 7: Customer Journey & Buying Center',
},
'SUMMARY_TITLE': 'Kurzresuemee:',
'SUMMARY_TEXT_FOR_STEP1': [
@@ -287,6 +320,7 @@ PROMPTS = {
'painPoints': 'Step 4: Pain Points per Role (WHY)',
'gains': 'Step 5: Gains & Benefits per Role (WHY switch)',
'messages': 'Step 6: Marketing Messages per Segment & Role (HOW to speak)',
'customerJourney': 'Step 7: Customer Journey & Buying Center',
},
'SUMMARY_TITLE': 'Summary:',
'SUMMARY_TEXT_FOR_STEP1': [
@@ -432,7 +466,7 @@ def format_context_for_prompt(analysis_data, language):
context = ""
current_prompts = PROMPTS[language]
step_titles = current_prompts['STEP_TITLES']
step_keys = ['offer', 'targetGroups', 'personas', 'painPoints', 'gains', 'messages']
step_keys = ['offer', 'targetGroups', 'personas', 'painPoints', 'gains', 'messages', 'customerJourney']
for i, step_key in enumerate(step_keys):
step_data = analysis_data.get(step_key)
if step_data:
@@ -530,7 +564,7 @@ def next_step(language, context_file, generation_step, channels, focus_industry=
# Log the full response
save_detailed_log(f"step{generation_step}", "response", response_text)
step_key = ['offer', 'targetGroups', 'personas', 'painPoints', 'gains', 'messages'][generation_step - 1]
step_key = ['offer', 'targetGroups', 'personas', 'painPoints', 'gains', 'messages', 'customerJourney'][generation_step - 1]
expected_title = current_prompts['STEP_TITLES'][step_key]
title_match = re.search(rf'## {re.escape(expected_title)}\s*', response_text, re.IGNORECASE)
content = response_text[title_match.end():].strip() if title_match else response_text