diff --git a/README.md b/README.md index f43e050..d59fe4f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Omnichannel Sothis +# Sothis Connect Plataforma omnichannel para atendimento com foco inicial em WhatsApp. O sistema combina atendimento em tempo real, Agente Virtual para triagem, filas por especialidade, abertura ativa por template, agenda de contatos, painéis operacionais e administração de usuários/perfis. diff --git a/database/migrations/025_demo_templates.sql b/database/migrations/025_demo_templates.sql new file mode 100644 index 0000000..a79dbae --- /dev/null +++ b/database/migrations/025_demo_templates.sql @@ -0,0 +1,132 @@ +-- ============================================================ +-- Migration 025: Templates de demonstração — filas RH +-- Abordagem ativa: RH iniciando o contato +-- Filas: Colaborador, Ex-colaborador, Suporte, Vagas +-- ============================================================ + +-- Garante que as áreas de RH existam +INSERT INTO areas (nome, descricao) VALUES + ('Colaborador', 'Atendimento RH para colaboradores ativos'), + ('Ex-colaborador', 'Atendimento RH para ex-colaboradores e processos de desligamento'), + ('Vagas', 'Atendimento de recrutamento e seleção para candidatos') +ON CONFLICT (nome) DO NOTHING; + +-- ── COLABORADOR ───────────────────────────────────────────── +INSERT INTO whatsapp_templates (name, content, area_id, status, category, requested_by_role, admin_approved_at, meta_submitted_at, meta_approved_at, updated_at) +SELECT t.name, t.content, a.id, 'approved', 'UTILITY', 'admin', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP +FROM areas a +JOIN (VALUES + ('colab_holerite_disponivel', + 'Olá, {nome}! O holerite de {mes}/{ano} já está disponível para consulta. Precisa de ajuda para acessar?'), + ('colab_pendencia_assinatura', + 'Olá, {nome}. Identificamos um documento pendente de assinatura no sistema. Pode verificar assim que possível?'), + ('colab_ferias_programar', + 'Olá, {nome}. Você possui {saldo_dias} dias de férias a vencer até {data_limite}. Vamos programar juntos?'), + ('colab_atualizacao_cadastral', + 'Olá, {nome}. Precisamos atualizar alguns dados cadastrais seus. Você tem alguns minutinhos para confirmar as informações?'), + ('colab_convite_treinamento', + 'Olá, {nome}! Você foi selecionado(a) para o treinamento de {nome_treinamento} no dia {data} às {hora}. Confirma participação?'), + ('colab_aviso_beneficio', + 'Olá, {nome}. Informamos que seu benefício de {beneficio} passou por uma atualização a partir de {data}. Quer saber mais?'), + ('colab_documentos_admissao', + 'Olá, {nome}. Para concluir sua admissão, ainda precisamos dos seguintes documentos: {lista_documentos}. Pode nos enviar?') +) AS t(name, content) ON a.nome = 'Colaborador' +ON CONFLICT (name) DO UPDATE SET + content = EXCLUDED.content, + area_id = EXCLUDED.area_id, + status = 'approved', + meta_approved_at = CURRENT_TIMESTAMP, + updated_at = CURRENT_TIMESTAMP; + +-- ── EX-COLABORADOR ────────────────────────────────────────── +INSERT INTO whatsapp_templates (name, content, area_id, status, category, requested_by_role, admin_approved_at, meta_submitted_at, meta_approved_at, updated_at) +SELECT t.name, t.content, a.id, 'approved', 'UTILITY', 'admin', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP +FROM areas a +JOIN (VALUES + ('excolab_rescisao_disponivel', + 'Olá, {nome}. Seus documentos de rescisão estão prontos e disponíveis para retirada. Quando você pode passar aqui?'), + ('excolab_homologacao_agendada', + 'Olá, {nome}. Sua homologação está agendada para {data} às {hora}. Confirme sua presença respondendo esta mensagem.'), + ('excolab_informe_rendimentos', + 'Olá, {nome}. Seu informe de rendimentos do ano {ano} já está disponível. Prefere receber por aqui ou por e-mail?'), + ('excolab_devolucao_equipamentos', + 'Olá, {nome}. Ainda consta em nosso sistema a devolução de {equipamento}. Pode nos informar quando será possível regularizar?'), + ('excolab_pendencia_bancaria', + 'Olá, {nome}. Identificamos uma pendência no repasse dos seus acertos. Pode confirmar os dados bancários para finalizarmos?'), + ('excolab_recontratacao', + 'Olá, {nome}. Temos uma oportunidade que pode ser do seu interesse. Você teria disponibilidade para uma conversa rápida?') +) AS t(name, content) ON a.nome = 'Ex-colaborador' +ON CONFLICT (name) DO UPDATE SET + content = EXCLUDED.content, + area_id = EXCLUDED.area_id, + status = 'approved', + meta_approved_at = CURRENT_TIMESTAMP, + updated_at = CURRENT_TIMESTAMP; + +-- ── SUPORTE (abordagem ativa de TI/sistemas) ───────────────── +INSERT INTO whatsapp_templates (name, content, area_id, status, category, requested_by_role, admin_approved_at, meta_submitted_at, meta_approved_at, updated_at) +SELECT t.name, t.content, a.id, 'approved', 'UTILITY', 'admin', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP +FROM areas a +JOIN (VALUES + ('suporte_manutencao_programada', + 'Olá, {nome}. Informamos que o sistema {sistema} ficará em manutenção no dia {data} das {hora_inicio} às {hora_fim}.'), + ('suporte_senha_expirando', + 'Olá, {nome}. Sua senha de acesso ao {sistema} expira em {dias} dias. Recomendamos atualizar antes disso para evitar bloqueio.'), + ('suporte_acesso_liberado', + 'Olá, {nome}. Seu acesso ao sistema {sistema} foi liberado conforme solicitado. Qualquer dúvida, é só chamar.'), + ('suporte_equipamento_disponivel', + 'Olá, {nome}. Seu equipamento {equipamento} está pronto para retirada. Pode passar a partir de {data}.'), + ('suporte_chamado_resolvido', + 'Olá, {nome}. O chamado {protocolo} foi resolvido pela nossa equipe. Conseguiu acessar normalmente?'), + ('suporte_alerta_seguranca', + 'Olá, {nome}. Identificamos uma tentativa de acesso suspeita na sua conta. Recomendamos trocar sua senha agora. Posso te ajudar?') +) AS t(name, content) ON a.nome = 'Suporte' +ON CONFLICT (name) DO UPDATE SET + content = EXCLUDED.content, + area_id = EXCLUDED.area_id, + status = 'approved', + meta_approved_at = CURRENT_TIMESTAMP, + updated_at = CURRENT_TIMESTAMP; + +-- ── VAGAS ──────────────────────────────────────────────────── +INSERT INTO whatsapp_templates (name, content, area_id, status, category, requested_by_role, admin_approved_at, meta_submitted_at, meta_approved_at, updated_at) +SELECT t.name, t.content, a.id, 'approved', 'UTILITY', 'admin', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP +FROM areas a +JOIN (VALUES + ('vagas_convite_processo', + 'Olá, {nome}! Encontramos seu perfil e acreditamos que você pode ter fit com a vaga de {cargo}. Teria interesse em conhecer mais?'), + ('vagas_convite_entrevista', + 'Olá, {nome}! Gostaríamos de te convidar para uma entrevista para a vaga de {cargo} no dia {data} às {hora}. Topas?'), + ('vagas_confirmacao_entrevista', + 'Olá, {nome}. Passando para confirmar sua entrevista de amanhã às {hora} para a vaga de {cargo}. Ainda está confirmado(a)?'), + ('vagas_solicitacao_documentos', + 'Olá, {nome}. Para avançarmos no processo seletivo, precisamos de alguns documentos seus: {lista_documentos}. Pode nos enviar?'), + ('vagas_proposta', + 'Olá, {nome}! Temos ótimas notícias. Gostaríamos de apresentar uma proposta para você. Quando tem um momento para conversarmos?'), + ('vagas_feedback_reprovado', + 'Olá, {nome}. Agradecemos sua participação no processo seletivo para {cargo}. Dessa vez não seguiremos juntos, mas mantemos seu perfil no banco de talentos.'), + ('vagas_banco_talentos', + 'Olá, {nome}. Seu perfil foi incluído no nosso banco de talentos. Surgindo uma vaga compatível, entraremos em contato.') +) AS t(name, content) ON a.nome = 'Vagas' +ON CONFLICT (name) DO UPDATE SET + content = EXCLUDED.content, + area_id = EXCLUDED.area_id, + status = 'approved', + meta_approved_at = CURRENT_TIMESTAMP, + updated_at = CURRENT_TIMESTAMP; + +-- ── Workflow demo (pending para mostrar fluxo de aprovação) ── +INSERT INTO whatsapp_templates (name, content, area_id, status, category, requested_by_role, updated_at) +SELECT t.name, t.content, a.id, t.status, 'MARKETING', 'supervisor', CURRENT_TIMESTAMP +FROM areas a +JOIN (VALUES + ('vagas_abordagem_ativa_linkedin', 'Vagas', 'pending_meta', + 'Olá, {nome}! Vi seu perfil e acredito que temos uma oportunidade alinhada com sua experiência em {area}. Posso te contar mais?'), + ('colab_pesquisa_clima', 'Colaborador', 'pending_admin', + 'Olá, {nome}! O RH está realizando uma pesquisa de clima organizacional. Leva menos de 2 minutos. Topa participar?') +) AS t(name, area_nome, status, content) ON a.nome = t.area_nome +ON CONFLICT (name) DO UPDATE SET + content = EXCLUDED.content, + area_id = EXCLUDED.area_id, + status = EXCLUDED.status, + updated_at = CURRENT_TIMESTAMP; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..830b404 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "omnichannel-Cesari", + "lockfileVersion": 3, + "requires": true, + "packages": {} +}