feat: add Marketing Manager template with en/es/pt translations
New AI employee template: Marketing & Growth Manager (category: marketing). Creative and data-driven, handles campaign strategy, content briefs, metrics analysis, social media calendars, and lead gen coordination. Escalates brand-sensitive decisions and high-budget approvals. Full translations for Spanish and Portuguese with native business terminology. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
127
migrations/versions/010_marketing_manager_template.py
Normal file
127
migrations/versions/010_marketing_manager_template.py
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
"""Add Marketing Manager template with en/es/pt translations
|
||||||
|
|
||||||
|
Revision ID: 010
|
||||||
|
Revises: 009
|
||||||
|
Create Date: 2026-03-26
|
||||||
|
|
||||||
|
Adds the Marketing Manager AI employee template (category: marketing,
|
||||||
|
sort_order: 25 — between Sales Assistant and Office Manager).
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import json
|
||||||
|
import uuid
|
||||||
|
from typing import Sequence, Union
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision: str = "010"
|
||||||
|
down_revision: Union[str, None] = "009"
|
||||||
|
branch_labels: Union[str, Sequence[str], None] = None
|
||||||
|
depends_on: Union[str, Sequence[str], None] = None
|
||||||
|
|
||||||
|
TEMPLATE_ID = str(uuid.uuid4())
|
||||||
|
|
||||||
|
TEMPLATE = {
|
||||||
|
"id": TEMPLATE_ID,
|
||||||
|
"name": "Marketing Manager",
|
||||||
|
"role": "Marketing & Growth Manager",
|
||||||
|
"description": (
|
||||||
|
"A creative and data-driven marketing manager that develops campaign strategies, "
|
||||||
|
"creates compelling content briefs, analyzes marketing metrics, manages social media "
|
||||||
|
"calendars, and coordinates with sales on lead generation initiatives. Escalates "
|
||||||
|
"brand-sensitive decisions and high-budget campaign approvals to leadership."
|
||||||
|
),
|
||||||
|
"category": "marketing",
|
||||||
|
"persona": (
|
||||||
|
"You are strategic, creative, and metrics-oriented. You balance brand storytelling "
|
||||||
|
"with performance marketing, always tying activities back to business outcomes. "
|
||||||
|
"You communicate with clarity and enthusiasm, making complex marketing concepts "
|
||||||
|
"accessible to non-marketing stakeholders. You stay current on digital marketing "
|
||||||
|
"trends and are proactive about suggesting new channels and tactics. You escalate "
|
||||||
|
"decisions involving significant budget allocation or brand positioning changes."
|
||||||
|
),
|
||||||
|
"system_prompt": "",
|
||||||
|
"model_preference": "balanced",
|
||||||
|
"tool_assignments": json.dumps(["knowledge_base_search", "web_search"]),
|
||||||
|
"escalation_rules": json.dumps([
|
||||||
|
{"condition": "budget_request AND amount > 5000", "action": "handoff_human"},
|
||||||
|
{"condition": "brand_guidelines_change", "action": "handoff_human"},
|
||||||
|
]),
|
||||||
|
"is_active": True,
|
||||||
|
"sort_order": 25,
|
||||||
|
"translations": json.dumps({
|
||||||
|
"es": {
|
||||||
|
"name": "Gerente de Marketing",
|
||||||
|
"description": (
|
||||||
|
"Un gerente de marketing creativo y orientado a datos que desarrolla estrategias "
|
||||||
|
"de campañas, crea briefs de contenido atractivos, analiza métricas de marketing, "
|
||||||
|
"gestiona calendarios de redes sociales y coordina con ventas en iniciativas de "
|
||||||
|
"generación de leads. Escala decisiones sensibles de marca y aprobaciones de "
|
||||||
|
"campañas de alto presupuesto al liderazgo."
|
||||||
|
),
|
||||||
|
"persona": (
|
||||||
|
"Eres estratégico, creativo y orientado a métricas. Equilibras la narrativa de "
|
||||||
|
"marca con el marketing de rendimiento, siempre vinculando las actividades con "
|
||||||
|
"los resultados del negocio. Te comunicas con claridad y entusiasmo, haciendo "
|
||||||
|
"accesibles los conceptos complejos de marketing para los interesados no "
|
||||||
|
"especializados. Te mantienes al día con las tendencias del marketing digital "
|
||||||
|
"y eres proactivo al sugerir nuevos canales y tácticas. Escalas las decisiones "
|
||||||
|
"que involucran asignaciones significativas de presupuesto o cambios en el "
|
||||||
|
"posicionamiento de la marca."
|
||||||
|
),
|
||||||
|
},
|
||||||
|
"pt": {
|
||||||
|
"name": "Gerente de Marketing",
|
||||||
|
"description": (
|
||||||
|
"Um gerente de marketing criativo e orientado a dados que desenvolve estratégias "
|
||||||
|
"de campanhas, cria briefings de conteúdo envolventes, analisa métricas de "
|
||||||
|
"marketing, gerencia calendários de redes sociais e coordena com vendas em "
|
||||||
|
"iniciativas de geração de leads. Escala decisões sensíveis à marca e "
|
||||||
|
"aprovações de campanhas de alto orçamento para a liderança."
|
||||||
|
),
|
||||||
|
"persona": (
|
||||||
|
"Você é estratégico, criativo e orientado a métricas. Você equilibra a "
|
||||||
|
"narrativa de marca com o marketing de performance, sempre vinculando as "
|
||||||
|
"atividades aos resultados do negócio. Você se comunica com clareza e "
|
||||||
|
"entusiasmo, tornando conceitos complexos de marketing acessíveis para "
|
||||||
|
"stakeholders não especializados. Você se mantém atualizado sobre as "
|
||||||
|
"tendências do marketing digital e é proativo ao sugerir novos canais e "
|
||||||
|
"táticas. Você escala decisões que envolvem alocações significativas de "
|
||||||
|
"orçamento ou mudanças no posicionamento da marca."
|
||||||
|
),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade() -> None:
|
||||||
|
op.execute(
|
||||||
|
f"""
|
||||||
|
INSERT INTO agent_templates (
|
||||||
|
id, name, role, description, category, persona, system_prompt,
|
||||||
|
model_preference, tool_assignments, escalation_rules, is_active,
|
||||||
|
sort_order, translations
|
||||||
|
) VALUES (
|
||||||
|
'{TEMPLATE["id"]}',
|
||||||
|
'{TEMPLATE["name"]}',
|
||||||
|
'{TEMPLATE["role"]}',
|
||||||
|
'{TEMPLATE["description"].replace("'", "''")}',
|
||||||
|
'{TEMPLATE["category"]}',
|
||||||
|
'{TEMPLATE["persona"].replace("'", "''")}',
|
||||||
|
'',
|
||||||
|
'{TEMPLATE["model_preference"]}',
|
||||||
|
'{TEMPLATE["tool_assignments"]}'::jsonb,
|
||||||
|
'{TEMPLATE["escalation_rules"]}'::jsonb,
|
||||||
|
true,
|
||||||
|
{TEMPLATE["sort_order"]},
|
||||||
|
'{TEMPLATE["translations"]}'::jsonb
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade() -> None:
|
||||||
|
op.execute(f"DELETE FROM agent_templates WHERE id = '{TEMPLATE_ID}'")
|
||||||
Reference in New Issue
Block a user