fix: corrige hydration, notificacoes e melhora visual
- Corrige hydration mismatch no Toaster (sonner) e ChatWidgetProvider - Corrige API de preferencias de notificacao (typePreferences como string) - Melhora visual do Switch (estado ativo em preto) - Adiciona icones em circulos na pagina de notificacoes - Corrige acentuacao em "Obrigatorio" - Corrige centralizacao das estrelas de avaliacao nos e-mails - Aplica Sentence case nos titulos dos templates de e-mail - Adiciona script de teste de e-mail 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
7a3791117b
commit
eedd446b36
7 changed files with 302 additions and 55 deletions
209
scripts/test-email.ts
Normal file
209
scripts/test-email.ts
Normal file
|
|
@ -0,0 +1,209 @@
|
|||
/**
|
||||
* Script para testar envio de e-mail
|
||||
* Uso: bun scripts/test-email.ts [destinatario]
|
||||
*/
|
||||
|
||||
import { sendSmtpMail } from "../src/server/email-smtp"
|
||||
import { renderTemplate } from "../src/server/email/email-templates"
|
||||
|
||||
const DESTINATARIO = process.argv[2] || "renan.pac@paulicon.com.br"
|
||||
|
||||
// Credenciais do SMTP (usando as da documentacao)
|
||||
const smtpConfig = {
|
||||
host: "smtp.c.inova.com.br",
|
||||
port: 587,
|
||||
username: "envio@rever.com.br",
|
||||
password: "CAAJQm6ZT6AUdhXRTDYu",
|
||||
from: '"Sistema de Chamados" <envio@rever.com.br>',
|
||||
starttls: true,
|
||||
tls: false,
|
||||
rejectUnauthorized: false,
|
||||
timeoutMs: 15000,
|
||||
}
|
||||
|
||||
async function testEmail() {
|
||||
console.log("=".repeat(50))
|
||||
console.log("TESTE DE ENVIO DE E-MAIL")
|
||||
console.log("=".repeat(50))
|
||||
console.log(`Destinatario: ${DESTINATARIO}`)
|
||||
console.log(`SMTP: ${smtpConfig.host}:${smtpConfig.port}`)
|
||||
console.log("")
|
||||
|
||||
// 1. Teste basico
|
||||
console.log("[1/10] Enviando e-mail de teste basico...")
|
||||
try {
|
||||
const html = renderTemplate("test", {
|
||||
title: "Teste do Sistema de E-mail",
|
||||
message: "Este e-mail confirma que o sistema de notificacoes esta funcionando corretamente.",
|
||||
timestamp: new Date().toLocaleString("pt-BR", { timeZone: "America/Sao_Paulo" }),
|
||||
})
|
||||
|
||||
await sendSmtpMail(smtpConfig, DESTINATARIO, "Teste - Sistema de Chamados Raven", html)
|
||||
console.log(" SUCESSO!")
|
||||
} catch (error) {
|
||||
console.error(" ERRO:", (error as Error).message)
|
||||
}
|
||||
|
||||
// 2. Teste de abertura de chamado
|
||||
console.log("\n[2/10] Enviando notificacao de abertura de chamado...")
|
||||
try {
|
||||
const html = renderTemplate("ticket_created", {
|
||||
reference: 12345,
|
||||
subject: "Problema no sistema de vendas",
|
||||
status: "PENDING",
|
||||
priority: "HIGH",
|
||||
createdAt: new Date().toISOString(),
|
||||
viewUrl: "https://tickets.esdrasrenan.com.br/tickets/12345",
|
||||
})
|
||||
|
||||
await sendSmtpMail(smtpConfig, DESTINATARIO, "Chamado #12345 Aberto - Problema no sistema de vendas", html)
|
||||
console.log(" SUCESSO!")
|
||||
} catch (error) {
|
||||
console.error(" ERRO:", (error as Error).message)
|
||||
}
|
||||
|
||||
// 3. Teste de resolucao de chamado
|
||||
console.log("\n[3/10] Enviando notificacao de resolucao...")
|
||||
try {
|
||||
const html = renderTemplate("ticket_resolved", {
|
||||
reference: 12345,
|
||||
subject: "Problema no sistema de vendas",
|
||||
assigneeName: "Joao Silva",
|
||||
resolutionSummary: "O problema foi identificado como uma configuracao incorreta no modulo de pagamentos. A configuracao foi corrigida e o sistema esta funcionando normalmente.",
|
||||
viewUrl: "https://tickets.esdrasrenan.com.br/tickets/12345",
|
||||
rateUrl: "https://tickets.esdrasrenan.com.br/rate/12345",
|
||||
})
|
||||
|
||||
await sendSmtpMail(smtpConfig, DESTINATARIO, "Chamado #12345 Resolvido - Problema no sistema de vendas", html)
|
||||
console.log(" SUCESSO!")
|
||||
} catch (error) {
|
||||
console.error(" ERRO:", (error as Error).message)
|
||||
}
|
||||
|
||||
// 4. Teste de comentario
|
||||
console.log("\n[4/10] Enviando notificacao de comentario...")
|
||||
try {
|
||||
const html = renderTemplate("ticket_comment", {
|
||||
reference: 12345,
|
||||
subject: "Problema no sistema de vendas",
|
||||
authorName: "Joao Silva",
|
||||
commentBody: "Estou analisando o problema e em breve envio uma atualizacao. Por favor, verifique se o erro persiste apos limpar o cache do navegador.",
|
||||
commentedAt: new Date().toISOString(),
|
||||
viewUrl: "https://tickets.esdrasrenan.com.br/tickets/12345",
|
||||
})
|
||||
|
||||
await sendSmtpMail(smtpConfig, DESTINATARIO, "Nova atualizacao no Chamado #12345", html)
|
||||
console.log(" SUCESSO!")
|
||||
} catch (error) {
|
||||
console.error(" ERRO:", (error as Error).message)
|
||||
}
|
||||
|
||||
// 5. Teste de atribuicao de chamado
|
||||
console.log("\n[5/10] Enviando notificacao de atribuicao...")
|
||||
try {
|
||||
const html = renderTemplate("ticket_assigned", {
|
||||
reference: 12345,
|
||||
subject: "Problema no sistema de vendas",
|
||||
status: "AWAITING_ATTENDANCE",
|
||||
priority: "HIGH",
|
||||
requesterName: "Maria Santos",
|
||||
assigneeName: "Joao Silva",
|
||||
isForRequester: false,
|
||||
viewUrl: "https://tickets.esdrasrenan.com.br/tickets/12345",
|
||||
})
|
||||
|
||||
await sendSmtpMail(smtpConfig, DESTINATARIO, "Chamado #12345 Atribuido", html)
|
||||
console.log(" SUCESSO!")
|
||||
} catch (error) {
|
||||
console.error(" ERRO:", (error as Error).message)
|
||||
}
|
||||
|
||||
// 6. Teste de mudanca de status
|
||||
console.log("\n[6/10] Enviando notificacao de mudanca de status...")
|
||||
try {
|
||||
const html = renderTemplate("ticket_status", {
|
||||
reference: 12345,
|
||||
subject: "Problema no sistema de vendas",
|
||||
oldStatus: "PENDING",
|
||||
newStatus: "AWAITING_ATTENDANCE",
|
||||
viewUrl: "https://tickets.esdrasrenan.com.br/tickets/12345",
|
||||
})
|
||||
|
||||
await sendSmtpMail(smtpConfig, DESTINATARIO, "Status do Chamado #12345 Alterado", html)
|
||||
console.log(" SUCESSO!")
|
||||
} catch (error) {
|
||||
console.error(" ERRO:", (error as Error).message)
|
||||
}
|
||||
|
||||
// 7. Teste de reset de senha
|
||||
console.log("\n[7/10] Enviando notificacao de reset de senha...")
|
||||
try {
|
||||
const html = renderTemplate("password_reset", {
|
||||
resetUrl: "https://tickets.esdrasrenan.com.br/reset-password?token=abc123",
|
||||
})
|
||||
|
||||
await sendSmtpMail(smtpConfig, DESTINATARIO, "Redefinicao de Senha - Raven", html)
|
||||
console.log(" SUCESSO!")
|
||||
} catch (error) {
|
||||
console.error(" ERRO:", (error as Error).message)
|
||||
}
|
||||
|
||||
// 8. Teste de convite
|
||||
console.log("\n[8/10] Enviando notificacao de convite...")
|
||||
try {
|
||||
const html = renderTemplate("invite", {
|
||||
inviterName: "Admin Sistema",
|
||||
roleName: "Agente",
|
||||
companyName: "Empresa Teste",
|
||||
inviteUrl: "https://tickets.esdrasrenan.com.br/invite?token=xyz789",
|
||||
})
|
||||
|
||||
await sendSmtpMail(smtpConfig, DESTINATARIO, "Voce foi convidado - Raven", html)
|
||||
console.log(" SUCESSO!")
|
||||
} catch (error) {
|
||||
console.error(" ERRO:", (error as Error).message)
|
||||
}
|
||||
|
||||
// 9. Teste de novo login
|
||||
console.log("\n[9/10] Enviando notificacao de novo login...")
|
||||
try {
|
||||
const html = renderTemplate("new_login", {
|
||||
loginAt: new Date().toISOString(),
|
||||
userAgent: "Chrome 120 no Windows 11",
|
||||
ipAddress: "189.45.123.78",
|
||||
})
|
||||
|
||||
await sendSmtpMail(smtpConfig, DESTINATARIO, "Novo Acesso Detectado - Raven", html)
|
||||
console.log(" SUCESSO!")
|
||||
} catch (error) {
|
||||
console.error(" ERRO:", (error as Error).message)
|
||||
}
|
||||
|
||||
// 10. Teste de SLA em risco
|
||||
console.log("\n[10/10] Enviando notificacao de SLA em risco...")
|
||||
try {
|
||||
const html = renderTemplate("sla_warning", {
|
||||
reference: 12345,
|
||||
subject: "Problema no sistema de vendas",
|
||||
status: "AWAITING_ATTENDANCE",
|
||||
priority: "HIGH",
|
||||
requesterName: "Maria Santos",
|
||||
assigneeName: "Joao Silva",
|
||||
timeRemaining: "2 horas",
|
||||
dueAt: new Date(Date.now() + 2 * 60 * 60 * 1000).toISOString(),
|
||||
viewUrl: "https://tickets.esdrasrenan.com.br/tickets/12345",
|
||||
})
|
||||
|
||||
await sendSmtpMail(smtpConfig, DESTINATARIO, "ALERTA: SLA em Risco - Chamado #12345", html)
|
||||
console.log(" SUCESSO!")
|
||||
} catch (error) {
|
||||
console.error(" ERRO:", (error as Error).message)
|
||||
}
|
||||
|
||||
console.log("\n" + "=".repeat(50))
|
||||
console.log("TESTE CONCLUIDO - 10 TIPOS DE NOTIFICACAO")
|
||||
console.log("=".repeat(50))
|
||||
console.log(`Verifique a caixa de entrada de: ${DESTINATARIO}`)
|
||||
}
|
||||
|
||||
testEmail().catch(console.error)
|
||||
Loading…
Add table
Add a link
Reference in a new issue