Как создать бота‑предсказателя в WhatsApp: от no‑code до собственной ML‑модели

Гайд по созданию бота-предсказателя в WhatsApp: no-code конструкторы, Business API и свои ML-модели для точных прогнозов.

Идея создать бота-предсказателя в WhatsApp звучит заманчиво: от развлекательного «Шара судьбы» до серьезного инструмента для прогнозирования трендов или личных финансов. В этой статье мы разберем все способы реализации — от нулевого кодирования (no-code) до разработки собственного ML-модели с интеграцией через WhatsApp Business API.


Определение концепции: Что именно будет предсказывать ваш бот?

Прежде чем писать код или настраивать конструктор, определитесь с типом «предсказателя»:

  • Развлекательный (Magic 8-Ball): Выдает случайные ответы («Да», «Нет», «Спроси позже», «Звезды говорят да»). Идеально для развлечения друзей или вовлечения аудитории.
  • Астрологический / Нумерологический: Рассчитывает гороскоп, совместимость или число судьбы по дате рождения пользователя.
  • ИИ-советник (LLM-based): Использует большие языковые модели (GPT, Llama, локальные модели) для генерации советов, сценариев будущего или анализа ситуации на основе контекста диалога.
  • Аналитический / Бизнес-прогноз: Подключается к базам данных, использует временные ряды (ARIMA, Prophet, LSTM) для прогноза продаж, курсов валют, погоды или трафика.

Путь 1: No-code конструкторы (Самый быстрый старт)

Если вам нужен работающий бот «вчера» и вы не хотите возиться с серверами и кодом — используйте официальные партнеры Meta (BSP) или визуальные билдеры.

Популярные платформы:

  1. ManyChat / Chatfuel / SendPulse: Отличные визуальные редакторы блок-схем. Поддерживают кнопки, картинки, задержки ответов.
  2. BotHelp / Salebot / Aimylogic: Популярны в СНГ, имеют готовые шаблоны и интеграцию с CRM.
  3. Nocode-интеграции (Make, n8n, Zapier): Позволяют соединить WhatsApp с Google Sheets (как базой предсказаний) или OpenAI API без кода.

Пример логики для «Шары судьбы» в конструкторе:

  • Триггер: Входящее сообщение (ключевое слово «Предсказание» или любое сообщение).
  • Действие (Код/Функция): Генерация случайного числа от 1 до N.
  • Условия (Роутинг): Если 1 -> «Бесспорно», Если 2 -> «Мне кажется — да»… и т.д.
  • Ответ: Отправка текста пользователю.

Плюсы: Запуск за 15 минут, хостинг на стороне платформы, удобная аналитика.
Минусы: Ежемесячная плата, ограничения логики, зависимость от стороннего сервиса, сложно внедрить кастомную ML-модель.


Путь 2: Собственный бот на Python (Полный контроль + ИИ)

Это профессиональный подход. Вам понадобятся:

  • Сервер (VPS) или облачная функция (AWS Lambda, Yandex Cloud Functions, Google Cloud Run).
  • Аккаунт Meta for Developers и настроенный WhatsApp Business API (через Meta напрямую или провайдеров: 360dialog, Twilio, Wazzup, Green-API).
  • Python 3.10+ и библиотеки: flask/fastapi, requests, openai (или transformers для локальных моделей).

Архитектура «Умного предсказателя» на LLM:

User (WhatsApp) 
 -> Meta Cloud API / Provider 
 -> Ваш Webhook (HTTPS POST) 
 -> Ваш Backend (Python) 
 -> Логика / Prompt Engineering 
 -> LLM API (OpenAI / Local Llama) 
 -> Ответ -> User

Минимальный рабочий пример (FastAPI + OpenAI):

# main.py
from fastapi import FastAPI, Request, Header, HTTPException
from pydantic import BaseModel
import openai
import os
import uvicorn

app = FastAPI
openai.api_key = os;getenv("OPENAI_API_KEY")
VERIFY_TOKEN = os.getenv("WHATSAPP_VERIFY_TOKEN") # Токен для верификации вебхука

@app.get("/webhook")
async def verify_webhook(hub_mode: str = "", hub_challenge: str = "", hub_verify_token: str = ""):
 if hub_mode == "subscribe" and hub_verify_token == VERIFY_TOKEN:
 return int(hub_challenge)
 raise HTTPException(status_code=403, detail="Verification failed")

class WhatsAppMessage(BaseModel):
 object: str
 entry: list

@app.post("/webhook")
async def receive_message(body: WhatsAppMessage, x_hub_signature_256: str = Header(None)):
 # Тут должна быть проверка подписи X-Hub-Signature-256 для безопасности!
 
 for entry in body.entry:
 for change in entry.get("changes", []):
 value = change.get("value", {})
 messages = value.get("messages", [])
 contacts = value.get("contacts", [])
 
 for msg in messages:
 if msg["type"] == "text":
 user_phone = msg["from"]
 user_text = msg["text"]["body"]
 
 # 1. Формируем промпт для "Предсказателя"
 system_prompt = """Ты, Мистический Предсказатель. Отвечай загадочно, метафорично, но по существу. 
 Не давай медицинских, юридических или финансовых советов. Используй эмодзи 🔮✨."""
 
 # 2. Вызов LLM
 try:
 completion = openai.chat.completions.create(
 model="gpt-4o-mini", # Быстрая и дешевая модель
 messages=[
 {"role": "system", "content": system_prompt},
 {"role": "user", "content": user_text}
 ],
 temperature=0.8,
 max_tokens=150
 ) prediction = completion.choices[0].message.content
 except Exception as e:
 prediction = "Туман застилает мою сферу... Попробуй позже. 🌫️"
 print(f"OpenAI Error: {e}")

 # 3. Отправка ответа обратно в WhatsApp (через Graph API)
 send_whatsapp_message(user_phone, prediction)
 
 return {"status": "ok"}

def send_whatsapp_message(to: str, text: str):
 # Реализация отправки через requests к Graph API Meta или API провайдера
 # POST https://graph.facebook.com/v19.0/{PHONE_NUMBER_ID}/messages
 # Headers: Authorization: Bearer {ACCESS_TOKEN}
 # JSON: {"messaging_product": "whatsapp", "to": to, "type": "text", "text": {"body": text}}
 pass

if __name__ == "__main__":
 uvicorn.run(app, host="0.0.0.0", port=8000)

Путь 3: Локальные ML-модели (TensorFlow / PyTorch) — для офлайн и приватности

Если вы хотите запустить модель бесплатно на своем железе и без отправки данных третьим лицам, используйте открытые LLM (Llama 3, Mistral, Gemma) через llama.cpp (Python биндинг llama-cpp-python) или классические NLP модели.

Важный нюанс про токенизацию (связано с вашим фрагментом про UNK):

При обучении собственной модели» с нуля (не дообучении, а именно обучении токенизатора и модели с нуля) вы столкнетесь с понятием UNK (Unknown) токена.

UNK Token — это специальный токен (обычно [UNK] или <unk>), который заменяет все слова, не вошедшие в словарь (vocabulary).

В коде подготовки данных (как в вашем примере из StackOverflow/TensorFlow) это выглядит так:

# Пример логики build_dataset
vocabulary_size = 50000
count = [['UNK', -1]] # UNK токен всегда индекс 0
count.extend(collections.Counter(words).most_common(vocabulary_size ౼ 1))

dictionary = dict
for word, _ in count:
 dictionary[word] = len(dictionary)

data = list
unk_count = 0
for word in words:
 index = dictionary.get(word, 0) # 0 — это индекс UNK
 if index == 0: 
 unk_count += 1
 data.append(index)
count[0][1] = unk_count

Совет: Для «Предсказателя» в 2024-2026 годах не обучайте модель с нуля. Используйте Fine-tuning (LoRA/QLoRA) готовых моделей (Llama 3 8B, Mistral 7B) на датасете с предсказаниями/гороскопами/советом. Это даст качество выше, чем обучение с нуля на малом датасете, и решит проблему UNK-токенов, так как токенизатор базовой модели уже знает миллионы слов.


Интеграция с WhatsApp Business API: Нюансы 2024-2026

Обычный WhatsApp (серый) или WhatsApp Business App не поддерживают ботов официально. Использование неофициальных библиотек (whatsapp-web.js, go-whatsapp, python-whatsapp) ведет к бану номера.

Только легальные пути:

  1. Meta Cloud API (Прямо от Meta): Бесплатно (первые 1000 диалогов в месяц), сложная модерация шаблонов, нужно верифицировать бизнес в Meta.
  2. Официальные BSP (Business Solution Providers):
    • Twilio — надежно, дорого, сложный интерфейс.
    • 360dialog — дешево, простое API, хорошая поддержка.
    • Green-API / Wazzup / Chat-API — популярны в СНГ, простая регистрация, работают через «зеленый» API (эмуляция веб-версии, но легально оформленные).

Критически важно: Шаблоны сообщений (Template Messages)

Если пользователь не писал вам первым за последние 24 часа (окно сессии), вы не можете просто так отправить ему предсказание. Вы должны использовать предварительно одобренный Meta Шаблон (Template) с кнопкой «Получить предсказание» или быстрым ответом.


Идеи для наполнения «Предсказателя» (Контент-стратегия)

Тип Источник данных Пример промпта / Логики
Ежедневный гороскоп API астрологии (например, aztro или расчет на Swiss Ephemeris) «Рассчитай натальную карту для {date} в {city}. Дай совет на день для знака {sign}.»
Финансовый прогноз Yahoo Finance API, MOEX, CryptoCompare LSTM/Prophet модель на исторических данных + LLM для объяснения: «Почему Биткоин может вырасти/упасть».
Психологический совет RAG (Retrieval-Augmented Generation) на базе книг по CBT, стоицизму Векторная БД (Qdrant/Chroma) + Embeddings. Пользователь жалуется -> поиск релевантной главы -> генерация ответа.
Генератор сценариев Чистый LLM (Creative Writing) «Напиши 3 варианта развития событий для ситуации: {user_input}. Жанр: киберпанк / реализм / комедия».

Безопасность, Этика и Юридические риски

  • Дисклеймеры: Обязательно добавляйте в профиль бота и в меню: «Это развлекательный ИИ-бот. Не принимайте решения о здоровье, деньгах или безопасности на основе его ответов».
  • PII (Персональные данные): Не просите и не храните паспортные данные, номера карт, точную геолокацию без нужды. Шифруйте БД.
  • Политика Meta: Запрещено: спам, обман, медицинские диагнозы, азартные игры (лотереи, ставки), политические агитации. Нарушение = бан бизнес-аккаунта навсегда.
  • Rate Limiting: Реализуйте ограничение запросов (например, 5 предсказаний в час на пользователя), чтобы не улететь в бан за спам и не потратить весь бюджет на OpenAI.

Чек-лист запуска (Deployment Checklist)

  1. [ ] Зарегистрирован Meta Business Manager / Аккаунт у BSP провайдера.
  2. [ ] Куплен/подтвержден номер телефона для WABA.
  3. [ ] Настроен HTTPS Webhook (ngrok для теста, домен + SSL для продакшена).
  4. [ ] Протестирована верификация вебхука (GET запрос).
  5. [ ] Написан код обработки входящих сообщений (POST).
  6. [ ] Интегрирована LLM / ML модель / Логика случайных предсказаний.
  7. [ ] Реализована отправка исходящих сообщений (POST /messages).
  8. [ ] Созданы и одобрены Meta Шаблоны сообщений для первого контакта.
  9. [ ] Настроено логирование (Sentry, Grafana Loki, или просто файл/БД).
  10. [ ] Добавлены дисклеймеры в описание бота и приветственное сообщение.
  11. [ ] Проведено нагрузочное тестирование (Locust / k6);

Создать «Предсказателя на будущее» в WhatsApp сегодня — задача на один вечер (если используете No-code + OpenAI) или неделю (если пишете свой бэкенд, дообучаете модель и проходите модерацию Meta).

Мой совет: Начните с MVP на FastAPI + OpenAI API + Green-API (или 360dialog). Это даст максимальную гибкость, низкую стоимость входа и возможность масштабироваться до серьезного продукта. Не забывайте про UNK-токены только если решите обучать токенизатор с нуля — в остальных случаях современные LLM решают эту проблему за вас.

Удачи в предсказании будущего! 🔮🚀