From d95f154c184bf5c13c00b219d9aeaf4bca9f4b14 Mon Sep 17 00:00:00 2001 From: "Rodrigo Rodriguez (Pragmatismo)" Date: Mon, 16 Mar 2026 08:15:46 -0300 Subject: [PATCH] Add marketing automation templates and broadcast functionality --- .../marketing.gbdialog/add-new-idea.bas | 47 ++++++++++++ .../marketing.gbdialog/broadcast.bas | 68 ++++++++++++++++++ .../create-dynamic-list.bas | 49 +++++++++++++ .../marketing.gbdialog/create-template.bas | 53 ++++++++++++++ .../marketing.gbdialog/get-image.bas | 63 ++++++++++++++++ .../marketing.gbdialog/list-templates.bas | 58 +++++++++++++++ .../marketing.gbdialog/post-to-instagram.bas | 54 ++++++++++++++ .../marketing.gbdialog/poster.bas | 72 +++++++++++++++++++ .../marketing.gbdialog/start.bas | 17 ++++- crm/marketing.gbai/marketing.gbot/config.csv | 14 ++++ .../marketing-campaign.gbai/package.json | 23 ++++++ 11 files changed, 516 insertions(+), 2 deletions(-) create mode 100644 crm/marketing.gbai/marketing.gbdialog/add-new-idea.bas create mode 100644 crm/marketing.gbai/marketing.gbdialog/broadcast.bas create mode 100644 crm/marketing.gbai/marketing.gbdialog/create-dynamic-list.bas create mode 100644 crm/marketing.gbai/marketing.gbdialog/create-template.bas create mode 100644 crm/marketing.gbai/marketing.gbdialog/get-image.bas create mode 100644 crm/marketing.gbai/marketing.gbdialog/list-templates.bas create mode 100644 crm/marketing.gbai/marketing.gbdialog/post-to-instagram.bas create mode 100644 crm/marketing.gbai/marketing.gbdialog/poster.bas create mode 100644 crm/marketing.gbai/marketing.gbot/config.csv create mode 100644 multiagent/marketing-campaign.gbai/package.json diff --git a/crm/marketing.gbai/marketing.gbdialog/add-new-idea.bas b/crm/marketing.gbai/marketing.gbdialog/add-new-idea.bas new file mode 100644 index 0000000..654c074 --- /dev/null +++ b/crm/marketing.gbai/marketing.gbdialog/add-new-idea.bas @@ -0,0 +1,47 @@ +PARAM topic AS STRING LIKE "Novo produto de skincare" DESCRIPTION "Tema ou produto para ideation" +PARAM platform AS STRING LIKE "instagram" DESCRIPTION "Plataforma alvo: instagram, facebook, whatsapp, email" OPTIONAL +PARAM count AS INTEGER LIKE 5 DESCRIPTION "Quantidade de ideias a gerar" OPTIONAL + +DESCRIPTION "Gera ideias de conteúdo de marketing usando IA para campanhas." + +IF NOT topic THEN + TALK "Qual é o tema ou produto para gerar ideias?" + HEAR topic AS STRING +END IF + +platforms = IIF(platform, platform, "várias plataformas (Instagram, WhatsApp, Email)") +num_ideas = IIF(count, count, 5) + +TALK "🤖 Gerando " + num_ideas + " ideias de conteúdo para: **" + topic + "**" +TALK "Plataforma: " + platforms +TALK "" + +prompt = "Gere " + num_ideas + " ideias de conteúdo de marketing criativas e engagement para o tema: " + topic + ". " +prompt = prompt + "Para cada ideia, forneça: headline, mensagem-chave, call-to-action e hashtags relevantes. " +prompt = prompt + "Responda em formato de lista numerada." + +ideas = LLM prompt + +TALK "💡 **Ideias Geradas:**" +TALK ideas + +TALK "Quer que eu salve algumas dessas ideias para usar depois?" +HEAR save_ideas AS BOOLEAN + +IF save_ideas THEN + TALK "Quais números das ideias quer salvar? (ex: 1,3,5)" + HEAR selected AS STRING + + saved_count = 0 + FOR EACH num IN SPLIT(selected, ",") + idea_entry = POST "/api/marketing/ideas", #{ + topic: topic, + platform: platform, + idea_number: VAL(TRIM(num)), + saved_at: NOW() + } + saved_count = saved_count + 1 + NEXT + + TALK "✅ " + saved_count + " ideia(s) salva(s)!" +END IF diff --git a/crm/marketing.gbai/marketing.gbdialog/broadcast.bas b/crm/marketing.gbai/marketing.gbdialog/broadcast.bas new file mode 100644 index 0000000..f1af71d --- /dev/null +++ b/crm/marketing.gbai/marketing.gbdialog/broadcast.bas @@ -0,0 +1,68 @@ +PARAM message AS STRING DESCRIPTION "Mensagem com variáveis (ex: Olá {name}!)" +PARAM list_id AS STRING DESCRIPTION "ID da lista de contatos" +PARAM template_file AS STRING DESCRIPTION "URL da imagem de cabeçalho (opcional)" OPTIONAL +PARAM filter AS STRING DESCRIPTION "Filtro adicional (opcional)" OPTIONAL + +DESCRIPTION "Envia broadcast WhatsApp em massa para uma lista de contatos." + +IF NOT message THEN + TALK "Qual é a mensagem para o broadcast?" + HEAR message AS STRING +END IF + +TALK "🤖 Verificando aprovação do template..." +approval_check = LLM "Esta mensagem será aprovada pelo WhatsApp META como Template? Responda OK se sim, ou explique o problema: " + message + +IF approval_check <> "OK" THEN + TALK "⚠️ **Atenção:** " + approval_check + TALK "Deseja ajustar a mensagem ou continuar mesmo assim?" + HEAR proceed AS BOOLEAN + IF NOT proceed THEN + RETURN + END IF +ELSE + TALK "✅ Mensagem aprovada para template WhatsApp!" +END IF + +IF NOT list_id THEN + TALK "Qual lista de contatos devo usar?" + HEAR list_name AS STRING + lists = GET "/api/marketing/lists?search=" + list_name + IF UBOUND(lists) = 0 THEN + TALK "Lista não encontrada." + RETURN + END IF + list_id = FIRST(lists).id +END IF + +list_info = GET "/api/marketing/lists/" + list_id +TALK "📤 **Broadcast Preview:**" +TALK "Mensagem: " + message +IF template_file THEN + TALK "Imagem: " + template_file +END IF +TALK "Destinatários: " + list_info.contact_count + " contatos" +TALK "Lista: " + list_info.name + +TALK "Confirmar envio?" +HEAR confirm AS BOOLEAN + +IF NOT confirm THEN + TALK "Broadcast cancelado." + RETURN +END IF + +TALK "🚀 Enviando broadcast..." + +result = POST "/api/marketing/broadcast", #{ + message: message, + list_id: list_id, + template_file: template_file, + filter: filter +} + +TALK "✅ **Broadcast Enviado!**" +TALK "ID: " + result.broadcast_id +TALK "Status: " + result.status + +TALK "Acompanhe as métricas em alguns minutos." diff --git a/crm/marketing.gbai/marketing.gbdialog/create-dynamic-list.bas b/crm/marketing.gbai/marketing.gbdialog/create-dynamic-list.bas new file mode 100644 index 0000000..2d3521b --- /dev/null +++ b/crm/marketing.gbai/marketing.gbdialog/create-dynamic-list.bas @@ -0,0 +1,49 @@ +PARAM name AS STRING LIKE "VIPs de São Paulo" DESCRIPTION "Nome da lista dinâmica" +PARAM filter AS STRING LIKE "Perfil=VIP AND cidade=São Paulo" DESCRIPTION "Condição de filtro (SQL-like)" +PARAM description AS STRING DESCRIPTION "Descrição da lista (opcional)" OPTIONAL + +DESCRIPTION "Cria uma Lista Dinâmica baseada em filtros de contatos do CRM." + +IF NOT filter THEN + TALK "Qual é a condição de filtro para esta lista?" + TALK "Exemplos:" + TALK "- Perfil=VIP" + TALK "- cidade=São Paulo AND compras>5" + TALK "- ultima_compra>2024-01-01" + HEAR filter AS STRING +END IF + +TALK "🔍 Verificando quantos contatos matching o filtro..." +preview = GET "/api/crm/contacts/count?filter=" + filter + +IF preview = 0 THEN + TALK "⚠️ Nenhum contato encontrada com este filtro!" + TALK "Deseja ajustar o filtro ou criar a lista mesmo assim?" + HEAR proceed AS BOOLEAN + IF NOT proceed THEN + RETURN + END IF +ELSE + TALK "✅ " + preview + " contatos matching o filtro." + TALK "Prosseguir com a criação da lista dinâmica?" + HEAR confirm AS BOOLEAN + IF NOT confirm THEN + RETURN + END IF +END IF + +new_list = POST "/api/marketing/lists", #{ + name: name, + filter: filter, + description: description, + type: "dynamic" +} + +TALK "📋 **Lista Dinâmica Criada!**" +TALK "Nome: " + name +TALK "Filtro: " + filter +TALK "Contatos: " + preview + " (atualizado automaticamente)" +TALK "Tipo: Dinâmica (atualiza automaticamente)" +TALK "ID: " + new_list.id + +TALK "Use esta lista em campanhas - ela será atualizada automaticamente!" diff --git a/crm/marketing.gbai/marketing.gbdialog/create-template.bas b/crm/marketing.gbai/marketing.gbdialog/create-template.bas new file mode 100644 index 0000000..d548b0d --- /dev/null +++ b/crm/marketing.gbai/marketing.gbdialog/create-template.bas @@ -0,0 +1,53 @@ +PARAM name AS STRING LIKE "Promoção de Páscoa" DESCRIPTION "Nome do template" +PARAM channel AS STRING LIKE "whatsapp" DESCRIPTION "Canal: whatsapp, email, sms, telegram" +PARAM content AS STRING DESCRIPTION "Conteúdo do template (corpo da mensagem ou HTML para email)" +PARAM header_image AS STRING DESCRIPTION "URL da imagem de cabeçalho (opcional)" OPTIONAL +PARAM ai_prompt AS STRING LIKE "Escreva uma mensagem amigável oferecendo 15% de desconto em nossos produtos" DESCRIPTION "Prompt para IA gerar o conteúdo (opcional)" OPTIONAL +PARAM meta_template_id AS STRING DESCRIPTION "ID do template approval pela META (para WhatsApp)" OPTIONAL + +DESCRIPTION "Cria um Template de Marketing (email, WhatsApp, SMS) que pode ser usado em campanhas." + +IF ai_prompt THEN + TALK "🤖 Gerando conteúdo com IA..." + generated_content = LLM ai_prompt + content = generated_content + TALK "✅ Conteúdo gerado:" + TALK generated_content + TALK "Deseja usar este conteúdo ou pedir para a IA gerar outro?" + HEAR use_content AS BOOLEAN + IF NOT use_content THEN + TALK "Por favor, forneça o conteúdo do template:" + HEAR content AS STRING + END IF +END IF + +IF channel = "whatsapp" AND NOT meta_template_id THEN + TALK "⚠️ Para WhatsApp, você precisa de um template approval pela META." + TALK "Deseja proseguir salvando como rascunho (sem meta_template_id)?" + HEAR proceed AS BOOLEAN + IF NOT proceed THEN + RETURN + END IF +END IF + +new_template = POST "/api/marketing/templates", #{ + name: name, + channel: channel, + content: content, + header_image: header_image, + ai_prompt: ai_prompt, + meta_template_id: meta_template_id, + status: IIF(meta_template_id, "approved", "draft") +} + +TALK "📝 **Template Criado!**" +TALK "Nome: " + name +TALK "Canal: " + UCASE(channel) +TALK "Status: " + IIF(meta_template_id, "Approved", "Draft") +TALK "ID: " + new_template.id + +IF channel = "whatsapp" AND meta_template_id THEN + TALK "✅ Template pronto para uso em broadcasts WhatsApp!" +END IF + +RETURN new_template.id diff --git a/crm/marketing.gbai/marketing.gbdialog/get-image.bas b/crm/marketing.gbai/marketing.gbdialog/get-image.bas new file mode 100644 index 0000000..5fe7e56 --- /dev/null +++ b/crm/marketing.gbai/marketing.gbdialog/get-image.bas @@ -0,0 +1,63 @@ +PARAM prompt AS STRING DESCRIPTION "Descrição da imagem desejada" +PARAM style AS STRING LIKE "modern minimalist" DESCRIPTION "Estilo visual (opcional)" OPTIONAL +PARAM width AS INTEGER LIKE 1024 DESCRIPTION "Largura da imagem" OPTIONAL +PARAM height AS INTEGER LIKE 1024 DESCRIPTION "Altura da imagem" OPTIONAL + +DESCRIPTION "Gera imagens de marketing usando IA." + +IF NOT prompt THEN + TALK "Descreva a imagem que você quer gerar:" + HEAR prompt AS STRING +END IF + +TALK "🎨 Gerando imagem..." +TALK "Prompt: " + prompt + +enhanced_prompt = prompt +IF style THEN + enhanced_prompt = prompt + ", " + style + " style" +END IF + +enhanced_prompt = enhanced_prompt + ", professional product photography, high quality, marketing material" + +result = POST "/api/ai/image/generate", #{ + prompt: enhanced_prompt, + width: IIF(width, width, 1024), + height: IIF(height, height, 1024) +} + +TALK "✅ **Imagem Gerada!**" +TALK "URL: " + result.image_url + +TALK "O que gostaria de fazer agora?" +TALK "1. Postar no Instagram" +TALK "2. Usar em um broadcast" +TALK "3. Baixar a imagem" +TALK "4. Gerar variações" + +HEAR choice AS STRING + +IF choice = "1" OR choice = "instagram" THEN + TALK "Qual legenda para o post?" + HEAR caption AS STRING + post_result = POST "/api/social/instagram/post", #{ + image_url: result.image_url, + caption: caption + } + TALK "✅ Postado no Instagram! ID: " + post_result.post_id +ELSE IF choice = "2" OR choice = "broadcast" THEN + TALK "Qual lista para o broadcast?" + TALK "(Guarde a URL da imagem: " + result.image_url + ")" +ELSE IF choice = "3" OR choice = "baixar" THEN + TALK "Baixe a imagem em: " + result.image_url +ELSE IF choice = "4" OR choice = "variações" THEN + TALK "Gerando variações..." + variations = POST "/api/ai/image/variations", #{ + original_url: result.image_url, + count: 3 + } + TALK "✅ Variações geradas:" + FOR EACH v IN variations + TALK "- " + v.url + NEXT +END IF diff --git a/crm/marketing.gbai/marketing.gbdialog/list-templates.bas b/crm/marketing.gbai/marketing.gbdialog/list-templates.bas new file mode 100644 index 0000000..a890571 --- /dev/null +++ b/crm/marketing.gbai/marketing.gbdialog/list-templates.bas @@ -0,0 +1,58 @@ +PARAM search AS STRING DESCRIPTION "Termo de busca (opcional)" OPTIONAL +PARAM channel AS STRING LIKE "whatsapp" DESCRIPTION "Filtrar por canal: whatsapp, email, sms, telegram" OPTIONAL +PARAM status_filter AS STRING DESCRIPTION "Filtrar por status: draft, approved, active" OPTIONAL + +DESCRIPTION "Lista todos os Templates de Marketing disponíveis, com opção de busca e filtro." + +query = "/api/marketing/templates?" +has_param = FALSE + +IF search THEN + query = query + "search=" + search + has_param = TRUE +END IF + +IF channel THEN + IF has_param THEN + query = query + "&" + END IF + query = query + "channel=" + channel + has_param = TRUE +END IF + +IF status_filter THEN + IF has_param THEN + query = query + "&" + END IF + query = query + "status=" + status_filter +END IF + +templates = GET query + +IF UBOUND(templates) = 0 THEN + TALK "Nenhum template encontrado." + IF search OR channel OR status_filter THEN + TALK "Tente remover os filtros ou usar outros termos." + END IF + RETURN +END IF + +TALK "📋 **Templates Encontrados (" + UBOUND(templates) + "):**" + +FOR EACH t IN templates + status_icon = IIF(t.status = "approved", "✅", IIF(t.status = "active", "🟢", "📝")) + TALK status_icon + " **" + t.name + "**" + TALK " Canal: " + UCASE(t.channel) + TALK " Status: " + UCASE(t.status) + IF t.content THEN + preview = LEFT(t.content, 80) + IF LEN(t.content) > 80 THEN + preview = preview + "..." + END IF + TALK " Preview: " + preview + END IF + TALK " ID: " + t.id + TALK "" +NEXT t + +TALK "Para usar um template em uma campanha, anote o ID." diff --git a/crm/marketing.gbai/marketing.gbdialog/post-to-instagram.bas b/crm/marketing.gbai/marketing.gbdialog/post-to-instagram.bas new file mode 100644 index 0000000..e60cedd --- /dev/null +++ b/crm/marketing.gbai/marketing.gbdialog/post-to-instagram.bas @@ -0,0 +1,54 @@ +PARAM image_url AS STRING DESCRIPTION "URL da imagem ou caption" +PARAM caption AS STRING DESCRIPTION "Caption do post (opcional)" OPTIONAL +PARAM video_url AS STRING DESCRIPTION "URL do vídeo (para Reels, opcional)" OPTIONAL + +DESCRIPTION "Posta conteúdo no Instagram." + +IF NOT image_url AND NOT video_url THEN + TALK "Forneça a URL da imagem ou vídeo para postar:" + HEAR media_url AS STRING +ELSE + media_url = IIF(image_url, image_url, video_url) +END IF + +IF NOT caption THEN + TALK "Qual é a caption do post?" + HEAR caption AS STRING +END IF + +TALK "📸 **Preview do Post:**" +IF image_url THEN + TALK "Imagem: " + image_url +ELSE + TALK "Vídeo: " + video_url +END IF +TALK "Caption: " + caption + +TALK "Postar no Instagram agora?" +HEAR confirm AS BOOLEAN + +IF NOT confirm THEN + TALK "Post cancelado." + RETURN +END IF + +TALK "Postando..." + +IF video_url THEN + result = POST "/api/social/instagram/reel", #{ + video_url: video_url, + caption: caption + } + TALK "🎬 **Reel postado!**" +ELSE + result = POST "/api/social/instagram/post", #{ + image_url: media_url, + caption: caption + } + TALK "📸 **Postado no Instagram!**" +END IF + +TALK "Post ID: " + result.post_id +TALK "Link: " + result.permalink +TALK "" +TALK "Acompanhe o engajamento em Analytics!" diff --git a/crm/marketing.gbai/marketing.gbdialog/poster.bas b/crm/marketing.gbai/marketing.gbdialog/poster.bas new file mode 100644 index 0000000..e258d59 --- /dev/null +++ b/crm/marketing.gbai/marketing.gbdialog/poster.bas @@ -0,0 +1,72 @@ +PARAM text AS STRING DESCRIPTION "Texto principal do poster" +PARAM theme AS STRING LIKE "modern" DESCRIPTION "Tema: modern, vintage, minimal, bold" +PARAM primary_color AS STRING DESCRIPTION "Cor primária (hex, opcional)" OPTIONAL +PARAM secondary_color AS STRING DESCRIPTION "Cor secundária (hex, opcional)" OPTIONAL +PARAM logo_url AS STRING DESCRIPTION "URL do logo (opcional)" OPTIONAL + +DESCRIPTION "Cria posters e materiais visuais de marketing." + +IF NOT text THEN + TALK "Qual é o texto principal do poster?" + HEAR text AS STRING +END IF + +IF NOT theme THEN + TALK "Qual tema visual? (modern, vintage, minimal, bold)" + HEAR theme AS STRING +END IF + +TALK "🎨 Criando poster..." +TALK "Texto: " + text +TALK "Tema: " + theme + +prompt = "Create a marketing poster with text: '" + text + "'. " +prompt = prompt + "Style: " + theme + " graphic design. " +prompt = prompt + "Professional, eye-catching, suitable for social media. " + +IF primary_color THEN + prompt = prompt + "Primary color: " + primary_color + ". " +END IF + +IF logo_url THEN + prompt = prompt + "Include logo at bottom. " +END IF + +result = POST "/api/ai/image/generate", #{ + prompt: prompt, + width: 1080, + height: 1080 +} + +TALK "✅ **Poster Criado!**" +TALK "URL: " + result.image_url +TALK "" + +TALK "Opções:" +TALK "1. Baixar" +TALK "2. Postar no Instagram" +TALK "3. Criar versão alternativa" + +HEAR choice AS STRING + +IF choice = "1" OR choice = "baixar" THEN + TALK "Baixe em: " + result.image_url +ELSE IF choice = "2" OR choice = "instagram" THEN + TALK "Qual caption?" + HEAR caption AS STRING + post_result = POST "/api/social/instagram/post", #{ + image_url: result.image_url, + caption: caption + } + TALK "✅ Postado! " + post_result.permalink +ELSE IF choice = "3" OR choice = "alternativa" THEN + TALK "Descreva o que gostaria de mudar:" + HEAR feedback AS STRING + new_prompt = prompt + " Modified based on: " + feedback + alt_result = POST "/api/ai/image/generate", #{ + prompt: new_prompt, + width: 1080, + height: 1080 + } + TALK "✅ Nova versão: " + alt_result.image_url +END IF diff --git a/crm/marketing.gbai/marketing.gbdialog/start.bas b/crm/marketing.gbai/marketing.gbdialog/start.bas index 4bdb3f0..cd33f5f 100644 --- a/crm/marketing.gbai/marketing.gbdialog/start.bas +++ b/crm/marketing.gbai/marketing.gbdialog/start.bas @@ -4,6 +4,11 @@ ADD TOOL "send-campaign" ADD TOOL "create-template" ADD TOOL "list-templates" ADD TOOL "create-dynamic-list" +ADD TOOL "add-new-idea" +ADD TOOL "broadcast" +ADD TOOL "get-image" +ADD TOOL "post-to-instagram" +ADD TOOL "poster" SET CONTEXT "marketing" AS "You are a marketing automation assistant for General Bots. You help marketers create campaigns, design templates (email/WhatsApp), build contact lists (static or dynamic), and schedule or send messages. All features interact with the CRM contacts via the General Bots marketing REST API." @@ -11,8 +16,13 @@ CLEAR SUGGESTIONS ADD SUGGESTION "newcamp" AS "Criar nova campanha" ADD SUGGESTION "viewcamps" AS "Ver minhas campanhas" -ADD SUGGESTION "lists" AS "Criar lista de contatos" +ADD SUGGESTION "lists" AS "Criar lista dinâmica" ADD SUGGESTION "send" AS "Enviar uma campanha" +ADD SUGGESTION "template" AS "Criar template" +ADD SUGGESTION "broadcast" AS "Enviar broadcast WhatsApp" +ADD SUGGESTION "ideas" AS "Gerar ideias de conteúdo" +ADD SUGGESTION "image" AS "Gerar imagem com IA" +ADD SUGGESTION "instagram" AS "Postar no Instagram" BEGIN TALK **Marketing — Campanhas e Envio** @@ -21,7 +31,10 @@ Posso ajudar com: • Criar Campanhas (WhatsApp, Email, SMS) • Gerenciar Templates (com IA ou predefinidos) • Construir Listas Dinâmicas (ex: VIPs, Clientes do Bairro X) -• Enviar campanhas em massa (Broadcast) +• Enviar campanhas em massa (Broadcast WhatsApp) +• Gerar ideias de conteúdo com IA +• Criar imagens e posters de marketing +• Postar diretamente no Instagram • Ver métricas e estatísticas de aberturas O que quer divulgar hoje? diff --git a/crm/marketing.gbai/marketing.gbot/config.csv b/crm/marketing.gbai/marketing.gbot/config.csv new file mode 100644 index 0000000..3e8c15d --- /dev/null +++ b/crm/marketing.gbai/marketing.gbot/config.csv @@ -0,0 +1,14 @@ +name,value +episodic-memory-history,2 +episodic-memory-threshold,4 +theme-color1,#E91E63 +theme-color2,#FCE4EC +theme-logo,https://pragmatismo.com.br/icons/general-bots.svg +theme-title,Marketing Hub - General Bots +bot-name,Marketing Automation Assistant +welcome-message,Welcome to Marketing Hub! Create campaigns, templates, and broadcast messages. +instagram-account, +whatsapp-business-id, +default-channel,whatsapp +rate-limit,10 +max-broadcast-size,1000 diff --git a/multiagent/marketing-campaign.gbai/package.json b/multiagent/marketing-campaign.gbai/package.json new file mode 100644 index 0000000..02feb36 --- /dev/null +++ b/multiagent/marketing-campaign.gbai/package.json @@ -0,0 +1,23 @@ +{ + "name": "Marketing Campaign Workflow", + "description": "Multi-agent marketing campaign orchestration with audience analysis, content creation, and multi-channel distribution (email, social, ads)", + "version": "1.0.0", + "author": "General Bots", + "category": "marketing", + "keywords": ["marketing", "campaign", "multi-agent", "orchestration", "automation"], + "features": [ + "Multi-step workflow orchestration", + "Audience segmentation and analysis", + "AI-powered content generation", + "Multi-channel distribution (email, social, WhatsApp)", + "Parallel execution", + "Event-driven optimization", + "Cross-bot memory sharing", + "Performance analytics" + ], + "requirements": { + "tools": ["social-media-post", "email-sender", "analytics-tracker", "llm-generator"], + "knowledge_bases": ["brand-guidelines"], + "bots": ["audience-segmenter", "content-creator", "email-scheduler", "social-scheduler", "ad-manager", "performance-analyzer", "optimizer"] + } +}