CRM Oficina Martech
Guias

Contexto para IA

Alimentar agentes LLM com dados do CRM em tempo real para respostas personalizadas.

Caso de uso: você está construindo um agente IA (chatbot, copiloto de vendas, gerador de resumos) que precisa de contexto sobre conversas anteriores do contato.

Padrão de uso

  1. Identifique o contato (por telefone, email ou ID)
  2. Busque mensagens recentes do contato via messages_limit
  3. Injete no contexto da LLM
  4. Geração ocorre com dados frescos
async function buildContextForContact(contactPhone: string) {
  const url = new URL("https://crm.oficinamartech.com/api/contacts/message-search");
  url.searchParams.set("organization_id", ORG_ID);
  url.searchParams.set("q", "."); // qualquer caractere — força lookup pelo identificador
  url.searchParams.set("direction", "all");
  url.searchParams.set("messages_limit", "20");

  // Filtra do lado do cliente após o retorno
  const res = await fetch(url, {
    headers: { Authorization: `Bearer ${OFM_API_KEY}` },
  });
  const { data } = await res.json();

  const match = data.find((c) => c.contact.phone === contactPhone);
  if (!match) return null;

  return {
    contact: {
      name: match.contact.name,
      phone: match.contact.phone,
      email: match.contact.email,
    },
    recentMessages: match.messages.map((m) => ({
      role: m.direction === "inbound" ? "user" : "assistant",
      content: m.content,
      at: m.sent_at,
    })),
  };
}

Injetando no prompt

const ctx = await buildContextForContact("+5511999999999");

const systemPrompt = `Você é um assistente comercial. Contexto do contato:

Nome: ${ctx.contact.name}
Últimas mensagens:
${ctx.recentMessages
  .map((m) => `[${m.at}] ${m.role}: ${m.content}`)
  .join("\n")}

Responda de forma contextual e personalizada.`;

const response = await openai.chat.completions.create({
  model: "gpt-4o",
  messages: [
    { role: "system", content: systemPrompt },
    { role: "user", content: "Resuma o histórico em 2 frases." },
  ],
});

Atenção com PII e LGPD

Mensagens podem conter dados pessoais sensíveis (PII). Antes de enviar para LLMs hospedadas em terceiros, considere:

  • Política do provedor: alguns treinam modelos com dados do usuário (verificar opt-out)
  • Anonimização: remova nomes, telefones e emails antes de gerar
  • LGPD: documente o uso na sua base legal (consentimento, legítimo interesse, etc.)
  • Retenção: não persista o contexto além do necessário para a geração

Latência

  • Adicione cache do contexto por 5-15 minutos se o usuário fizer múltiplas perguntas
  • Use messages_limit baixo (10-20) — overhead de tokens cresce rápido
  • Considere streaming da resposta da LLM para reduzir tempo percebido

Próximos passos