💬

AI-чатбот на сайт за час

Виджет чатбота на JavaScript + Python-бэкенд с AI. Поддержка клиентов, продажи, сбор лидов. Бесплатный деплой.

веб-разработка ⏱ 20 мин
AI Chatbot Widget — архитектура 🌐 Сайт JavaScript виджет <script src="chatbot.js"> 1 строчка в HTML ⚡ FastAPI WebSocket / POST CORS, rate limit Python backend 🧠 AI Engine GPT-4o / Claude RAG: база знаний System prompt компании Этапы интеграции 1. Пишем бэкенд 2. Делаем виджет 3. Вставляем скрипт 4. Бот работает! ⚡ 60 минут от идеи до работающего AI-чатбота

# 1. Python-бэкенд на FastAPI

Сервер принимает сообщения от виджета, отправляет в OpenAI API, возвращает ответ. WebSocket для стриминга (ответ появляется посимвольно), CORS для доступа с любого домена, rate limiting для защиты от злоупотреблений.

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from openai import OpenAI
from pydantic import BaseModel

app = FastAPI()
app.add_middleware(CORSMiddleware, allow_origins=["*"],
    allow_methods=["*"], allow_headers=["*"])
client = OpenAI()

# Системный промпт с информацией о компании
SYSTEM_PROMPT = """
Ты — чат-бот компании «ТехноЛаб». 
Знаешь: адрес, часы работы, услуги, цены, контакты.
Отвечай вежливо и по делу.
Если вопрос не по теме — перенаправляй к менеджеру.
"""

class Message(BaseModel):
    text: str
    session_id: str = "default"

# Хранилище диалогов (в продакшене — Redis)
sessions = {}

@app.post("/api/chat")
async def chat(msg: Message):
    if msg.session_id not in sessions:
        sessions[msg.session_id] = [
            {"role":"system", "content":SYSTEM_PROMPT}
        ]
    sessions[msg.session_id].append(
        {"role":"user", "content":msg.text}
    )
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=sessions[msg.session_id],
        max_tokens=300
    )
    answer = response.choices[0].message.content
    sessions[msg.session_id].append(
        {"role":"assistant", "content":answer}
    )
    return {"reply": answer}

# 2. JavaScript-виджет для сайта

Виджет — это плавающая кнопка в правом нижнем углу. При клике открывается окно чата. Минимальный JavaScript без фреймворков, легко стилизовать под дизайн сайта.

// chatbot-widget.js — подключить на сайт одной строкой
(function() {
  const API = 'https://your-server.com/api/chat';
  const sessionId = 'user_' + Math.random().toString(36).slice(2);

  // Создаём кнопку
  const btn = document.createElement('div');
  btn.innerHTML = '💬';
  Object.assign(btn.style, {
    position:'fixed', bottom:'20px', right:'20px',
    width:'56px', height:'56px', borderRadius:'50%',
    background:'#3B82F6', color:'#fff', fontSize:'24px',
    display:'flex', alignItems:'center', justifyContent:'center',
    cursor:'pointer', zIndex:'9999', boxShadow:'0 4px 12px rgba(0,0,0,.3)'
  });

  // Создаём окно чата
  const box = document.createElement('div');
  Object.assign(box.style, {
    position:'fixed', bottom:'90px', right:'20px',
    width:'340px', height:'480px', background:'#fff',
    borderRadius:'12px', boxShadow:'0 8px 32px rgba(0,0,0,.15)',
    display:'none', flexDirection:'column', zIndex:'9998',
    overflow:'hidden', fontFamily:'system-ui,sans-serif'
  });
  box.innerHTML = `
    <div style="background:#3B82F6;color:#fff;padding:14px;font-weight:bold">
      🤖 Чат-бот ТехноЛаб
    </div>
    <div id="chat-messages" style="flex:1;overflow-y:auto;padding:12px"></div>
    <div style="padding:10px;border-top:1px solid #eee;display:flex">
      <input id="chat-input" placeholder="Задайте вопрос..." 
             style="flex:1;border:none;outline:none;font-size:14px">
      <button onclick="window._chatSend()" 
              style="background:#3B82F6;color:#fff;border:none;
                     padding:8px 14px;border-radius:6px;cursor:pointer">
        →
      </button>
    </div>
  `;

  // Отправка сообщения
  window._chatSend = async function() {
    const input = document.getElementById('chat-input');
    const text = input.value.trim();
    if (!text) return;
    input.value = '';
    // Показываем сообщение пользователя
    const msgs = document.getElementById('chat-messages');
    msgs.innerHTML += `<div style="text-align:right;margin:8px">
      <span style="background:#3B82F6;color:#fff;padding:8px 12px;
             border-radius:12px;display:inline-block">${text}</span>
    </div>`;
    // Запрос к AI
    const resp = await fetch(API, {
      method:'POST',
      headers:{'Content-Type':'application/json'},
      body:JSON.stringify({text, session_id:sessionId})
    });
    const {reply} = await resp.json();
    msgs.innerHTML += `<div style="margin:8px">
      <span style="background:#f0f0f0;padding:8px 12px;
             border-radius:12px;display:inline-block">${reply}</span>
    </div>`;
    msgs.scrollTop = msgs.scrollHeight;
  };

  btn.onclick = () => box.style.display =
    box.style.display === 'none' ? 'flex' : 'none';
  document.body.append(btn, box);
})();

# 3. Интеграция на сайт

Вставьте ОДНУ строчку в HTML вашего сайта — и чат-бот работает. Делать ничего больше не нужно.

<!-- Вставьте перед закрывающим </body> -->
<script src="https://your-server.com/chatbot-widget.js"></script>

# 4. RAG: база знаний компании

Добавьте векторную базу знаний: загрузите FAQ, инструкции, описание услуг. AI-чатбот будет искать релевантные документы и отвечать на основе них. Технологии: ChromaDB + OpenAI Embeddings + LangChain. Без RAG: бот знает только то, что в system prompt. С RAG: бот знает всю документацию компании.

# 5. Деплой на сервер

Деплой FastAPI-бэкенда на VPS (PythonAnywhere бесплатно, Railway $5/мес, или свой VPS). Nginx как reverse proxy + SSL через Let's Encrypt. Раздача статического chatbot-widget.js через тот же сервер. Полный деплой — 30 минут.

# 6. Аналитика и улучшения

Собирайте метрики: количество диалогов, темы вопросов, конверсия в лиды. AI-анализ логов покажет, какие вопросы клиенты задают чаще всего — дополните базу знаний. Чат-бот учится на реальных диалогах и становится умнее с каждым днём.

✅ Итог

AI-чатбот на сайт — это 1 час разработки, 1 строчка в HTML и $15-30/мес на API (при среднем трафике). Стек: FastAPI + OpenAI API + JavaScript-виджет. Бот работает 24/7, отвечает мгновенно, не уходит в отпуск. ROI очевиден: бот обрабатывает 70-80% типовых запросов, разгружая поддержку. Для максимальной полезности добавьте RAG с базой знаний компании — бот станет экспертом по вашему продукту.