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
- Identifique o contato (por telefone, email ou ID)
- Busque mensagens recentes do contato via
messages_limit - Injete no contexto da LLM
- 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_limitbaixo (10-20) — overhead de tokens cresce rápido - Considere streaming da resposta da LLM para reduzir tempo percebido
Próximos passos
- Endpoints planejados — webhook de entrada para reagir a novas mensagens em vez de polling