В последние годы популярность автоматических сервисов в социальных сетях резко выросла. Одним из самых востребованных направлений является «автогадание» – бот, который мгновенно отвечает пользователям раскладами Таро, картами «карты судьбы», нумерологией и другими видами предсказаний. В этой статье мы подробно разберём, как создать такой сервис в ВКонтакте с нуля, используя официальный API, простой сервер и небольшие скрипты.
Содержание
- Что понадобится
- Создание группы и получение токена
- Развёртывание сервера (Python/Node.js)
- Логика гадания: базы карт и алгоритмы раскладов
- Настройка Callback API (вебхука)
- Автоматический запуск ежедневных предсказаний
- Безопасность и обработка ошибок
- Часто задаваемые вопросы
Что понадобится
- Учётная запись ВКонтакте с правом администрировать сообщества.
- Созданное сообщество (группа) – в которой будет работать бот.
- Веб‑сервер с поддержкой HTTPS (например, Heroku, Render, Railway, DigitalOcean или любой VPS).
- Язык программирования – Python 3.10+ или Node.js 18+. В примерах ниже используется Python + Flask.
- База данных (по желанию) – SQLite для простых проектов, PostgreSQL/MySQL для масштабных.
- Точки доступа к VK API (документация).
Создание группы и получение токена
- Откройте ВКонтакте → Сообщества → Создать сообщество. Выберите тип «Сообщество» → «Тема – Развлечения» (или любой другой).
- Заполните название, аватарку и описание. Сохраните.
- Перейдите в раздел Управление → Работа с API → Создать приложение. Выберите «Standalone приложение».
- Скопируйте Id приложения и Защищённый ключ – они потребуются для подписи запросов.
- В разделе Управление → Работа с API → Ключи доступа нажмите «Создать ключ доступа» и выберите права:
- messages – отправка и чтение сообщений.
- groups – управление сообществом.
- photos (если планируется отправка изображений карт).
- Сохраните токен доступа. Он будет использоваться в запросах к API.
Развёртывание сервера (Python + Flask)
Ниже – минимальный пример сервера, который будет принимать запросы от VK и отвечать пользователям.
# app.py
import os
import random
from flask import Flask, request, jsonify
app = Flask(__name__)
GROUP_TOKEN = os.getenv('VK_GROUP_TOKEN')
CONFIRMATION_CODE = os.getenv('VK_CONFIRMATION_CODE') # код подтверждения из настроек Callback API
TAROT_DECK = [
"0 – Шут (Новое начало, свобода)",
"1 – Маг (Воля, действие)",
"2 – Верховная Жрица (Интуиция, тайна)",
# … остальные 78 карт …
]
def draw_cards(num=1):
"""Выбор случайных карт без повторов."""
return random.sample(TAROT_DECK, k=num)
@app.route('/', methods=['POST'])
def vk_handler:
data = request.get_json
if not data:
return 'ok'
# 1. Проверка типа события
if data['type'] == 'confirmation':
return CONFIRMATION_CODE
if data['type'] == 'message_new':
obj = data['object']
user_id = obj['user_id']
text = obj['body'].strip.lower
# 2. Обработка команд
if text.startswith('гадание') or text.startswith('таро'):
cards = draw_cards(3) # простой тройной расклад
answer = "Ваш расклад:
" + "
".join(cards)
elif text.startswith('прогноз'):
cards = draw_cards(1)
answer = f"Сегодня ваша карта: {cards[0]}"
else:
answer = ("Привет! Я автоматический гадатель.
"
"Команды:
"
"• таро – случайный расклад из 3 карт.
"
"• прогноз – одна карта на сегодня.
"
"Напиши команду, и я предскажу твоё будущее!")
# 3. Отправка сообщения пользователю
send_message(user_id, answer)
return 'ok'
return 'ok'
def send_message(user_id, message):
import requests
url = 'https://api.vk.com/method/messages.send'
params = {
'user_id': user_id,
'random_id': random.randint(1, 2**31),
'message': message,
'access_token': GROUP_TOKEN,
'v': '5.131'
}
requests.get(url, params=params)
if __name__ == '__main__':
# Для локального теста
app.run(host='0.0.0.0', port=int(os.getenv('PORT', 5000)))
Сохраните код в файл app.py, создайте requirements.txt с зависимостями (Flask, requests) и разверните приложение на выбранном хостинге. Не забудьте задать переменные среды VK_GROUP_TOKEN и VK_CONFIRMATION_CODE;
Логика гадания: базы карт и алгоритмы раскладов
Для более «магического» опыта рекомендуется:
- Создать отдельный JSON‑файл со всеми 78 картами Таро, их названиями, значениями в прямом и перевёрнутом положении.
- Реализовать перевёрнутый статус (шанс 50 %). При выборе карты добавляйте «(перевёрнутая)» и используйте альтернативный смысл.
- Разработать несколько шаблонов раскладов:
- Три карты» – прошлое, настоящее, будущее.
- Кельтский крест» – 10 позиций, более сложный алгоритм.
- Нумерологический день» – расчёт на основе даты рождения.
- Хранить историю запросов в базе данных, чтобы не выдавать одну и ту же комбинацию подряд.
Настройка Callback API (вебхука)
- В панели управления сообществом перейдите в Настройки → Работа с API → Callback API.
- Включите переключатель Включить Callback API.
- В поле «URL сервера» укажите публичный адрес вашего приложения (e.g.
https://my-gadanie-bot.herokuapp.com/). - Нажмите Получить код подтверждения. Скопируйте код – он понадобится в переменной
VK_CONFIRMATION_CODE(см. выше). - В разделе «Версия API» выберите 5.131 или новее.
- Установите типы событий, которые ваш бот будет получать – минимум
message_new. - Сохраните настройки. Система проверит ваш URL, отправив запрос
type=confirmation. Ваш сервер должен вернутьVK_CONFIRMATION_CODE. После успешного подтверждения вы увидите статус «Работает».
Автоматический запуск ежедневных предсказаний
Помимо реакции на запросы, часто хочется отправлять пользователям «утренний прогноз». Это делается через планировщик задач (cron) на сервере.
Пример cron‑задачи (Linux)
# Открываем редактор crontab
crontab -e
0 8 * * * /usr/bin/python3 /path/to/daily_forecast.py >> /var/log/gadanie.log 2>&1
Скрипт отправки ежедневного предсказания
# daily_forecast.py
import os, random, requests
TOKEN = os;getenv('VK_GROUP_TOKEN')
USER_IDS = [12345678, 87654321] # список подписчиков (можно хранить в БД)
TAROT_DECK = [...] # тот же список, что и в app.py
def draw_one:
return random.choice(TAROT_DECK)
def send(user_id, text):
params = {
'user_id': user_id,
'random_id': random.randint(1, 2**31),
'message': text,
'access_token': TOKEN,
'v': '5.131'
}
requests.get('https://api.vk.com/method/messages.send', params=params)
for uid in USER_IDS:
card = draw_one
msg = f"Доброе утро! Ваша карта на сегодня: {card}"
send(uid, msg)
В реальном проекте список подписчиков хранится в базе, а подписка/отписка реализуется через команды подписаться / отписаться.
Безопасность и обработка ошибок
- HTTPS обязателен – VK отклонит запросы к HTTP‑адресам.
- Храните токен и ключи в переменных окружения, а не в коде.
- Ограничьте количество запросов от одного пользователя (rate‑limit), чтобы избежать спама.
- Логируйте входящие события (но не сохраняйте личные сообщения полностью – это нарушение политики VK).
- Обрабатывайте ошибки API (например,
error_code=14 – Доступ запрещён) и повторяйте запрос при временных сбоях.
Часто задаваемые вопросы
8.1 Как добавить изображение карты к ответу?
Загрузите изображения в раздел «Фотографии сообщества» и получите их owner_id и id. Затем в методе messages.send укажите параметр attachment=photo{owner_id}_{id}.
8.2 Что делать, если бот перестал отвечать?
- Проверьте журнал сервера (лог файлы). Часто причина – падение процесса Flask.
- Убедитесь, что токен не истёк (в VK он не имеет срока жизни, но может быть отозван).
- Откройте раздел Callback API в настройках группы и нажмите «Проверить» – система покажет последние запросы и ответы.
8.3 Как реализовать «прямой эфир» с раскладом в реальном времени?
Можно использовать WebSocket соединение между клиентом (веб‑страница) и сервером, а в ВК добавить кнопку «Перейти к приложению», где будет отображаться интерактивный расклад.
8.4 Как хранить пользовательские настройки (например, язык или тип гаданий)?
Создайте таблицу users со столбцами vk_id, language, preferred_deck и т.д. При первом взаимодействии добавляйте запись, а далее обновляйте её через команды язык ru или колода Таро.
Теперь у вас есть полная инструкция: от создания группы до развертывания сервера, от базовой логики гадания до ежедневных автоматических предсказаний. Следуйте каждому шагу, экспериментируйте с раскладами и не забывайте поддерживать связь с аудиторией – ведь магия работает лучше, когда её делят с другими.
Удачного создания автогадания и пусть ваши предсказания приносят радость и вдохновение!