Skip to content

✅ WebChat Adapter - Implementação Completa

O WebChat Adapter foi implementado com sucesso! Agora você pode usar o iFriend Agent diretamente em widgets de chat no seu website através de requisições HTTP/REST síncronas.

🎯 O que foi criado

1. WebChat Adapter (messaging/adapters/webchat_adapter.py)

  • ✅ Adaptador HTTP/REST para widgets de chat
  • ✅ Resposta síncrona (na mesma requisição)
  • ✅ Sessões persistentes
  • ✅ CORS configurável
  • ✅ Sem necessidade de webhooks

2. Endpoint no Unified Bot (unified_bot.py)

  • ✅ Endpoint: POST /webchat/message
  • ✅ CORS configurado via middleware
  • ✅ Integração completa com o Runner ADK
  • ✅ Tratamento de erros robusto

3. Factory Integration (messaging/factory.py)

  • ✅ WebChatAdapter registrado no factory
  • ✅ Auto-detecção via WEBCHAT_ENABLED
  • ✅ Configuração via variáveis de ambiente

4. Documentação Completa

  • docs/guides/WEBCHAT_WIDGET_EXAMPLE.md - Guia detalhado
  • examples/README_WEBCHAT.md - Quick start
  • messaging/README.md - Atualizado com WebChat

5. Exemplos Práticos

  • examples/webchat-simple.html - Widget HTML standalone completo
  • examples/webchat_integration_example.py - Exemplos programáticos
  • tests/test_webchat.py - Testes unitários e de integração

6. Configuração

  • .env.example - Atualizado com variáveis do WebChat

🚀 Como Usar

Passo 1: Configurar

Adicione no seu .env:

WEBCHAT_ENABLED=true

Passo 2: Iniciar Servidor

python unified_bot.py

Passo 3: Testar

Opção A: Abrir HTML no navegador

open examples/webchat-simple.html

Opção B: Testar com cURL

curl -X POST http://localhost:8080/webchat/message \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "user123",
    "message": "Olá! Quero fazer uma viagem para Paris"
  }'

Resposta esperada:

{
  "response": "Olá! Que ótimo que você quer viajar para Paris! ...",
  "session_id": "webchat_user123_a1b2c3d4",
  "metadata": {
    "platform": "webchat",
    "user_id": "user123"
  }
}

📝 API Reference

Request

POST /webchat/message

{
  "user_id": string,      // Obrigatório
  "message": string,      // Obrigatório
  "session_id"?: string,  // Opcional (auto-gerado)
  "metadata"?: {          // Opcional
    "page_url"?: string,
    "user_name"?: string,
    ...
  }
}

Response

{
  "response": string,
  "session_id": string,
  "metadata": {
    "platform": "webchat",
    "user_id": string
  }
}

🎨 Exemplo HTML Mínimo

<!DOCTYPE html>
<html>
<head><title>Chat</title></head>
<body>
    <div id="messages"></div>
    <form id="form">
        <input id="input" type="text" placeholder="Mensagem...">
        <button type="submit">Enviar</button>
    </form>

    <script>
        const API = 'http://localhost:8080/webchat/message';
        const userId = 'user_' + Math.random().toString(36).substr(2, 9);
        let sessionId = null;

        document.getElementById('form').onsubmit = async (e) => {
            e.preventDefault();
            const msg = document.getElementById('input').value;
            document.getElementById('input').value = '';

            addMsg('Você: ' + msg);

            const res = await fetch(API, {
                method: 'POST',
                headers: {'Content-Type': 'application/json'},
                body: JSON.stringify({user_id: userId, session_id: sessionId, message: msg})
            });

            const data = await res.json();
            sessionId = data.session_id;
            addMsg('Bot: ' + data.response);
        };

        function addMsg(text) {
            const div = document.createElement('div');
            div.textContent = text;
            document.getElementById('messages').appendChild(div);
        }
    </script>
</body>
</html>

🔧 Configuração Avançada

CORS para Produção

WEBCHAT_ALLOWED_ORIGINS=https://seusite.com,https://www.seusite.com

Custom Path

WEBCHAT_WEBHOOK_PATH=/api/chat

📚 Arquitetura

Frontend (Widget)
    ↓ POST /webchat/message
Unified Bot (FastAPI)
    ↓
WebChatAdapter.parse_webhook_request()
    ↓
ConversationProcessor (ou direto no endpoint)
    ↓
ADK Runner (Gemini)
    ↓
Response JSON (síncrono)
    ↓
Frontend (exibe resposta)

✨ Diferenças dos Outros Adapters

Característica Slack/WhatsApp/Telegram WebChat
Comunicação Webhook assíncrono HTTP síncrono
Resposta Enviada via API Retornada no response
Setup Tokens, webhooks Configuração mínima
CORS Não aplicável Configurável
Uso Apps de mensageria Widgets em sites

🧪 Testes

# Rodar testes
pytest tests/test_webchat.py -v

# Testar manualmente
python examples/webchat_integration_example.py

📖 Documentação

🎯 Próximos Passos Recomendados

  1. Testar localmente: Abrir examples/webchat-simple.html
  2. Customizar widget: Modificar CSS/JavaScript
  3. 🔒 Adicionar autenticação: Usar metadata para tokens
  4. 📊 Monitorar: Adicionar analytics (GA, Mixpanel)
  5. 🚀 Deploy: Configurar CORS adequadamente

💡 Casos de Uso

  • ✅ Widget de chat em websites
  • ✅ Assistente virtual integrado
  • ✅ Suporte ao cliente automatizado
  • ✅ Chatbot para landing pages
  • ✅ FAQ interativo

🎉 Status

PRONTO PARA PRODUÇÃO!

O sistema já está totalmente funcional e preparado para: - ✅ Uso local (desenvolvimento) - ✅ Deploy em produção - ✅ Integração com qualquer frontend - ✅ CORS configurado - ✅ Sessões persistentes - ✅ Testes implementados


Desenvolvido para extensibilidade e simplicidade 🚀

Para dúvidas ou melhorias, consulte a documentação ou os exemplos fornecidos.