// notification-service.ts
import { CordialyClient } from './cordialy';
const cordialy = new CordialyClient(process.env.CORDIALY_API_KEY!);
export const Notificacoes = {
// ── E-commerce ─────────────────────────────────────────────────────────
async pedidoConfirmado(leadId: string, pedido: Pedido) {
await cordialy.leads.sendMessage(leadId,
`✅ Pedido *#${pedido.id}* confirmado!\n\n` +
`📦 Itens: ${pedido.itens.join(', ')}\n` +
`💰 Total: R$ ${pedido.total.toFixed(2)}\n` +
`🚚 Previsão de entrega: ${pedido.prazoEntrega}`
);
},
async pedidoEnviado(leadId: string, pedido: Pedido) {
await cordialy.leads.sendMessage(leadId,
`📦 Seu pedido *#${pedido.id}* saiu para entrega!\n\n` +
`Rastreio: ${pedido.codigoRastreio}\n` +
`Transportadora: ${pedido.transportadora}`
);
},
async pedidoEntregue(leadId: string, pedido: Pedido) {
await cordialy.leads.sendMessage(leadId,
`🎉 Pedido *#${pedido.id}* entregue!\n\n` +
`Obrigado pela compra! Sua avaliação é muito importante para nós. ⭐`
);
// Marca como convertido
await cordialy.leads.update(leadId, { status: 'converted' });
},
async carrinhoAbandonado(leadId: string, carrinho: Carrinho) {
await cordialy.leads.sendMessage(leadId,
`Oi! Vi que você deixou ${carrinho.itens.length} item(s) no carrinho 🛒\n\n` +
`${carrinho.itens.map(i => `• ${i.nome} — R$ ${i.preco.toFixed(2)}`).join('\n')}\n\n` +
`Posso te ajudar com alguma dúvida?`
);
},
// ── Financeiro ─────────────────────────────────────────────────────────
async faturaGerada(leadId: string, fatura: Fatura) {
await cordialy.leads.sendMessage(leadId,
`💳 Sua fatura de *R$ ${fatura.valor.toFixed(2)}* foi gerada.\n\n` +
`📅 Vencimento: ${formatarData(fatura.vencimento)}\n` +
`🔗 Pague via Pix: ${fatura.linkPagamento}`
);
},
async faturaVencendo(leadId: string, fatura: Fatura, diasRestantes: number) {
const urgencia = diasRestantes <= 1 ? '⚠️ ATENÇÃO:' : '📅';
await cordialy.leads.sendMessage(leadId,
`${urgencia} Sua fatura de *R$ ${fatura.valor.toFixed(2)}* vence ` +
`${diasRestantes === 0 ? 'hoje' : `em ${diasRestantes} dia(s)`}.\n\n` +
`Pague agora: ${fatura.linkPagamento}`
);
},
async pagamentoConfirmado(leadId: string, fatura: Fatura) {
await cordialy.leads.sendMessage(leadId,
`✅ Pagamento de *R$ ${fatura.valor.toFixed(2)}* confirmado!\n\n` +
`Obrigado. Seu acesso permanece ativo. 🙏`
);
},
// ── Agendamentos ───────────────────────────────────────────────────────
async agendamentoConfirmado(leadId: string, agendamento: Agendamento) {
await cordialy.leads.sendMessage(leadId,
`📅 *Agendamento confirmado!*\n\n` +
`🗓 Data: ${formatarData(agendamento.data)}\n` +
`🕐 Horário: ${agendamento.hora}\n` +
`📍 Local: ${agendamento.local}\n\n` +
`Para cancelar ou reagendar, responda esta mensagem.`
);
},
async lembreteAgendamento(leadId: string, agendamento: Agendamento) {
await cordialy.leads.sendMessage(leadId,
`⏰ *Lembrete:* você tem um agendamento amanhã!\n\n` +
`🗓 ${formatarData(agendamento.data)} às ${agendamento.hora}\n` +
`📍 ${agendamento.local}`
);
},
};
// Uso:
// No webhook de pedido do e-commerce:
await Notificacoes.pedidoConfirmado(lead.cordialy_id, pedido);
// No cron de cobranças (rodar diariamente):
for (const fatura of faturasVencendo3Dias) {
await Notificacoes.faturaVencendo(fatura.leadId, fatura, 3);
}
Exemplos
Serviço de Notificações
Enviar mensagens automáticas baseadas em eventos do seu sistema
Centralize todos os disparos de mensagens em um único serviço reutilizável.