Connect with us

Chatbot

AI Chatbot – Assistente Virtual
AI Online

🤖 Assistente Virtual

Online agora
🤖
Olá! 👋 Sou seu assistente virtual com IA. Como posso ajudá-lo hoje?
🤖
👋 Olá
❓ Como funciona
🆘 Ajuda
// SISTEMA DE PERSONALIZAÇÃO AVANÇADA const PERSONALITY_CONFIGS = { // Para Nigerian Jobs Abroad jobConsultant: { systemPrompt: `Você é um consultor especialista em empregos no exterior para nigerianos. Características: – Conhece salários específicos ($50K-$100K) – Especialista em vistos para Canadá, EUA, Reino Unido, Austrália, Alemanha – Fala sobre processo de imigração – Menciona histórias de sucesso reais – Sempre oferece próximos passos práticos – Tom motivacional e profissional`, quickReplies: [ ‘💼 Vagas disponíveis’, ‘🌍 Melhores países’, ‘💰 Salários médios’, ‘📋 Como aplicar’ ] }, // Para Marriage Abroad relationshipCoach: { systemPrompt: `Você é uma consultora de relacionamentos internacionais. Características: – Ajuda homens nigerianos a encontrar parceiras no exterior – Conhece processo de visto de casamento – Fala sobre diferenças culturais – Dá conselhos sobre relacionamentos à distância – Tom amigável e encorajador – Sempre positiva sobre possibilidades`, quickReplies: [ ‘💕 Como encontrar parceira’, ‘🌍 Melhores países’, ‘💍 Processo de casamento’, ‘✈️ Visto de cônjuge’ ] }, // Para VIP Community communityManager: { systemPrompt: `Você é a gerente da comunidade VIP de sorteios. Características: – Entusiasmada com sorteios e prêmios – Explica como funciona o sistema de pontos – Incentiva engajamento (curtir, comentar, compartilhar) – Fala sobre prêmios disponíveis – Tom animado e motivador – Sempre menciona benefícios VIP`, quickReplies: [ ‘🎁 Próximos sorteios’, ‘💎 Benefícios VIP’, ‘📈 Como ganhar pontos’, ‘🏆 Histórico de ganhadores’ ] } }; // SISTEMA DE DETECÇÃO DE INTENÇÃO const INTENT_DETECTION = { job_inquiry: { keywords: [‘trabalho’, ’emprego’, ‘vaga’, ‘salario’, ‘job’, ‘work’, ‘career’], responses: [ ‘Ótimo! Temos várias oportunidades de trabalho no exterior. Que país te interessa mais? 🌍’, ‘Perfeito! Posso te ajudar a encontrar empregos com salários de $50K-$100K. Qual sua área? 💼’, ‘Excelente! Temos vagas em 5 países principais. Quer saber mais sobre algum específico? 🎯’ ] }, relationship_inquiry: { keywords: [‘casamento’, ‘parceira’, ‘namorada’, ‘relacionamento’, ‘marriage’, ‘partner’], responses: [ ‘Que legal! Posso te ajudar a encontrar sua parceira ideal no exterior. Que país prefere? 💕’, ‘Perfeito! Temos mulheres incríveis esperando por homens sérios como você. Quer saber como funciona? 💍’, ‘Ótima escolha! Relacionamentos internacionais podem mudar sua vida. Por onde começamos? 🌟’ ] }, giveaway_inquiry: { keywords: [‘sorteio’, ‘premio’, ‘ganhar’, ‘vip’, ‘giveaway’, ‘prize’], responses: [ ‘Que emocionante! Nossa comunidade VIP tem sorteios diários de até $50! Quer participar? 🎁’, ‘Perfeito! Quanto mais você engaja, mais chances de ganhar. Quer saber como funciona? 💎’, ‘Incrível! Temos prêmios todos os dias para membros VIP. Já se cadastrou? 🏆’ ] } }; // SISTEMA DE RESPOSTAS CONTEXTUAIS function detectIntent(message) { const lowerMessage = message.toLowerCase(); for (const [intent, config] of Object.entries(INTENT_DETECTION)) { for (const keyword of config.keywords) { if (lowerMessage.includes(keyword)) { return { intent: intent, response: config.responses[Math.floor(Math.random() * config.responses.length)] }; } } } return null; } // SISTEMA DE FOLLOW-UP INTELIGENTE const FOLLOW_UP_SYSTEM = { lastIntent: null, conversationStage: ‘initial’, userProfile: { interests: [], preferredCountry: null, contactInfo: null }, updateProfile: function(key, value) { this.userProfile[key] = value; localStorage.setItem(‘chatbot_profile’, JSON.stringify(this.userProfile)); }, loadProfile: function() { const saved = localStorage.getItem(‘chatbot_profile’); if (saved) { this.userProfile = { …this.userProfile, …JSON.parse(saved) }; } }, getPersonalizedResponse: function(intent) { const responses = { job_inquiry: [ `Baseado no seu interesse em ${this.userProfile.preferredCountry || ‘trabalhos no exterior’}, tenho algumas oportunidades perfeitas! 🎯`, `Lembro que você mencionou interesse em empregos. Que tal vermos as vagas mais recentes? 💼`, `Perfeito! Vamos focar em oportunidades que combinam com seu perfil. 🌟` ], relationship_inquiry: [ `Ótimo! Vamos encontrar sua parceira ideal. Que tipo de relacionamento você busca? 💕`, `Perfeito! Tenho várias mulheres interessadas em homens sérios como você. 💍`, `Excelente! Vamos começar sua jornada para encontrar o amor verdadeiro. 🌹` ] }; return responses[intent] ? responses[intent][Math.floor(Math.random() * responses[intent].length)] : ‘Como posso ajudá-lo melhor? 😊’; } }; // INTEGRAÇÃO COM WEBHOOK (Para salvar conversas) async function saveConversationToWebhook(message, response) { const webhookUrl = ‘https://seusite.com/webhook/chatbot’; // Substitua pela sua URL try { await fetch(webhookUrl, { method: ‘POST’, headers: { ‘Content-Type’: ‘application/json’ }, body: JSON.stringify({ timestamp: new Date().toISOString(), userMessage: message, botResponse: response, userProfile: FOLLOW_UP_SYSTEM.userProfile, sessionId: getSessionId() }) }); } catch (error) { console.log(‘Webhook save failed:’, error); } } // SISTEMA DE SESSÃO function getSessionId() { let sessionId = localStorage.getItem(‘chatbot_session’); if (!sessionId) { sessionId = ‘session_’ + Date.now() + ‘_’ + Math.random().toString(36).substr(2, 9); localStorage.setItem(‘chatbot_session’, sessionId); } return sessionId; } // VERSÃO MELHORADA DA FUNÇÃO sendToAI async function sendToAIAdvanced(message) { // Detectar intenção const intentResult = detectIntent(message); // Carregar perfil do usuário FOLLOW_UP_SYSTEM.loadProfile(); // Se detectou intenção específica, usar resposta contextual if (intentResult) { FOLLOW_UP_SYSTEM.lastIntent = intentResult.intent; // Salvar interesse do usuário if (!FOLLOW_UP_SYSTEM.userProfile.interests.includes(intentResult.intent)) { FOLLOW_UP_SYSTEM.userProfile.interests.push(intentResult.intent); FOLLOW_UP_SYSTEM.updateProfile(‘interests’, FOLLOW_UP_SYSTEM.userProfile.interests); } const response = FOLLOW_UP_SYSTEM.getPersonalizedResponse(intentResult.intent); // Salvar conversa await saveConversationToWebhook(message, response); return response; } // Caso contrário, usar IA normal try { const aiResponse = await sendToAI(message); await saveConversationToWebhook(message, aiResponse); return aiResponse; } catch (error) { return getFallbackResponse(message); } } // SISTEMA DE COLETA DE LEADS function detectContactInfo(message) { const emailRegex = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/; const phoneRegex = /(\+?\d{1,4}[\s-]?)?\(?\d{1,4}\)?[\s-]?\d{1,4}[\s-]?\d{1,9}/; const email = message.match(emailRegex); const phone = message.match(phoneRegex); if (email || phone) { FOLLOW_UP_SYSTEM.updateProfile(‘contactInfo’, { email: email ? email[0] : null, phone: phone ? phone[0] : null, timestamp: new Date().toISOString() }); return true; } return false; } // SISTEMA DE NOTIFICAÇÕES PUSH (Opcional) function requestNotificationPermission() { if (‘Notification’ in window && ‘serviceWorker’ in navigator) { Notification.requestPermission().then(permission => { if (permission === ‘granted’) { console.log(‘Notificações habilitadas’); } }); } } function showNotification(title, body) { if (Notification.permission === ‘granted’) { new Notification(title, { body: body, icon: ‘🤖’, badge: ‘🤖’ }); } } // CONFIGURAÇÃO DE PERSONALIDADE DINÂMICA function setPersonality(type) { if (PERSONALITY_CONFIGS[type]) { const config = PERSONALITY_CONFIGS[type]; // Atualizar system prompt chatHistory[0].content = config.systemPrompt; // Atualizar quick replies updateQuickReplies(config.quickReplies); // Salvar configuração localStorage.setItem(‘chatbot_personality’, type); console.log(`Personalidade alterada para: ${type}`); } } function updateQuickReplies(replies) { quickReplies.innerHTML = replies.map(reply => `
${reply}
` ).join(”); } // AUTO-CONFIGURAÇÃO BASEADA NA URL function autoConfigurePersonality() { const url = window.location.href.toLowerCase(); if (url.includes(‘jobs’) || url.includes(‘trabalho’)) { setPersonality(‘jobConsultant’); } else if (url.includes(‘marriage’) || url.includes(‘relacionamento’)) { setPersonality(‘relationshipCoach’); } else if (url.includes(‘vip’) || url.includes(‘sorteio’)) { setPersonality(‘communityManager’); } } // INICIALIZAÇÃO AVANÇADA document.addEventListener(‘DOMContentLoaded’, function() { // Configurações existentes… initializeChat(); setupEventListeners(); updateWelcomeTime(); // Novas configurações avançadas autoConfigurePersonality(); FOLLOW_UP_SYSTEM.loadProfile(); requestNotificationPermission(); // Carregar personalidade salva const savedPersonality = localStorage.getItem(‘chatbot_personality’); if (savedPersonality) { setPersonality(savedPersonality); } }); // SISTEMA DE ANALYTICS AVANÇADO const ANALYTICS = { sessionStart: Date.now(), interactions: 0, track: function(event, data = {}) { this.interactions++; const eventData = { event: event, timestamp: Date.now(), sessionDuration: Date.now() – this.sessionStart, interactions: this.interactions, userAgent: navigator.userAgent, url: window.location.href, …data }; // Enviar para Google Analytics if (typeof gtag !== ‘undefined’) { gtag(‘event’, event, { custom_parameter_1: JSON.stringify(data), value: this.interactions }); } // Enviar para seu backend this.sendToBackend(eventData); console.log(‘Analytics:’, eventData); }, sendToBackend: async function(data) { try { await fetch(‘/api/chatbot-analytics’, { method: ‘POST’, headers: { ‘Content-Type’: ‘application/json’ }, body: JSON.stringify(data) }); } catch (error) { console.log(‘Analytics backend error:’, error); } } }; // SISTEMA DE RATE LIMITING const RATE_LIMITER = { requests: [], maxRequests: 10, timeWindow: 60000, // 1 minuto canMakeRequest: function() { const now = Date.now(); this.requests = this.requests.filter(time => now – time < this.timeWindow); if (this.requests.length >= this.maxRequests) { return false; } this.requests.push(now); return true; }, getRemainingTime: function() { if (this.requests.length === 0) return 0; const oldestRequest = Math.min(…this.requests); return Math.max(0, this.timeWindow – (Date.now() – oldestRequest)); } }; // SISTEMA DE CACHE DE RESPOSTAS const RESPONSE_CACHE = { cache: new Map(), maxSize: 100, get: function(key) { return this.cache.get(this.hashMessage(key)); }, set: function(key, value) { const hashedKey = this.hashMessage(key); if (this.cache.size >= this.maxSize) { const firstKey = this.cache.keys().next().value; this.cache.delete(firstKey); } this.cache.set(hashedKey, { response: value, timestamp: Date.now() }); }, hashMessage: function(message) { return message.toLowerCase().replace(/[^\w]/g, ”).substring(0, 50); }, isValid: function(cachedItem) { const maxAge = 300000; // 5 minutos return Date.now() – cachedItem.timestamp < maxAge; } }; // FUNÇÃO PRINCIPAL MELHORADA async function sendMessage() { const message = chatInput.value.trim(); if (!message || isTyping) return; // Rate limiting if (!RATE_LIMITER.canMakeRequest()) { const remainingTime = Math.ceil(RATE_LIMITER.getRemainingTime() / 1000); addMessage(`Por favor, aguarde ${remainingTime} segundos antes de enviar outra mensagem. 😊`, 'bot'); return; } // Analytics ANALYTICS.track('message_sent', { message_length: message.length }); // Detectar informações de contato if (detectContactInfo(message)) { ANALYTICS.track('contact_info_detected'); } // Adicionar mensagem do usuário addMessage(message, 'user'); chatInput.value = ''; chatInput.style.height = 'auto'; sendButton.disabled = true; // Esconder quick replies após primeira mensagem if (messageCount === 1) { quickReplies.style.display = 'none'; } // Verificar cache const cachedResponse = RESPONSE_CACHE.get(message); if (cachedResponse && RESPONSE_CACHE.isValid(cachedResponse)) { addMessage(cachedResponse.response, 'bot'); ANALYTICS.track('response_from_cache'); return; } // Mostrar indicador de digitação showTyping(); try { // Usar sistema avançado de IA const response = await sendToAIAdvanced(message); // Cache da resposta RESPONSE_CACHE.set(message, response); hideTyping(); addMessage(response, 'bot'); ANALYTICS.track('ai_response_success'); } catch (error) { hideTyping(); addMessage('Desculpe, ocorreu um erro. Tente novamente em alguns instantes. 😔', 'bot'); ANALYTICS.track('ai_response_error', { error: error.message }); console.error('Erro na IA:', error); } } // SISTEMA DE BACKUP E RESTAURAÇÃO const BACKUP_SYSTEM = { save: function() { const backupData = { chatHistory: chatHistory, userProfile: FOLLOW_UP_SYSTEM.userProfile, messageCount: messageCount, timestamp: Date.now() }; localStorage.setItem('chatbot_backup', JSON.stringify(backupData)); }, restore: function() { const backup = localStorage.getItem('chatbot_backup'); if (backup) { const data = JSON.parse(backup); // Restaurar apenas se for recente (menos de 1 hora) if (Date.now() - data.timestamp < 3600000) { chatHistory = data.chatHistory; FOLLOW_UP_SYSTEM.userProfile = data.userProfile; messageCount = data.messageCount; this.rebuildChatUI(); return true; } } return false; }, rebuildChatUI: function() { chatMessages.innerHTML = ''; chatHistory.forEach((msg, index) => { if (msg.role !== ‘system’) { const sender = msg.role === ‘user’ ? ‘user’ : ‘bot’; const avatar = sender === ‘bot’ ? ‘🤖’ : ‘👤’; const messageDiv = document.createElement(‘div’); messageDiv.className = `message ${sender}`; messageDiv.innerHTML = `
${avatar}
${msg.content}
${getCurrentTime()}
`; chatMessages.appendChild(messageDiv); } }); // Adicionar typing indicator chatMessages.appendChild(typingIndicator); scrollToBottom(); } }; // AUTO-SAVE PERIÓDICO setInterval(() => { BACKUP_SYSTEM.save(); }, 30000); // A cada 30 segundos // CONFIGURAÇÕES DE DEPLOYMENT const DEPLOYMENT_CONFIG = { // Para produção, altere estas configurações environment: ‘development’, // ‘development’ ou ‘production’ // URLs de produção webhookUrl: ‘https://seusite.com/webhook/chatbot’, analyticsUrl: ‘https://seusite.com/api/chatbot-analytics’, // Configurações de segurança enableRateLimit: true, enableCache: true, enableAnalytics: true, // Personalização por domínio domainConfigs: { ‘nigerianjobsabroad.com’: ‘jobConsultant’, ‘marriageabroad.com’: ‘relationshipCoach’, ‘vipcommunity.com’: ‘communityManager’ } }; // INICIALIZAÇÃO FINAL window.addEventListener(‘load’, function() { // Tentar restaurar backup if (!BACKUP_SYSTEM.restore()) { // Se não há backup, inicializar normalmente console.log(‘Chatbot inicializado sem backup’); } else { console.log(‘Chatbot restaurado do backup’); } // Configurar personalidade baseada no domínio const domain = window.location.hostname; const domainConfig = DEPLOYMENT_CONFIG.domainConfigs[domain]; if (domainConfig) { setPersonality(domainConfig); } // Analytics de inicialização ANALYTICS.track(‘chatbot_initialized’, { domain: domain, personality: domainConfig || ‘default’ }); }); // FUNÇÕES DE ADMINISTRAÇÃO (Para debug) window.ChatbotAdmin = { resetChat: resetChat, setPersonality: setPersonality, exportChat: exportChatHistory, showStats: () => console.log({ interactions: ANALYTICS.interactions, cacheSize: RESPONSE_CACHE.cache.size, userProfile: FOLLOW_UP_SYSTEM.userProfile }), updateConfig: updateAIConfig };
To Top