В последние годы чат‑боты стали популярным способом взаимодействия с аудиторией․ Один из самых востребованных нишевых проектов – бот‑астролог, который умеет генерировать гороскопы, отвечать на вопросы о знаках зодиака и даже рассчитывать натальные карты․ В этой статье мы разберём все этапы создания такого бота – от выбора платформы до публикации и продвижения․
Планирование и определение функций
Прежде чем писать код, необходимо чётко сформулировать, какие задачи будет выполнять ваш бот․ Ниже перечислены самые популярные функции:
- Выдача ежедневных, недельных и месячных гороскопов․
- Расчёт натальной карты по дате, времени и месту рождения․
- Ответы на часто задаваемые вопросы о совместимости знаков․
- Персонализированные рекомендации (любовь, работа, здоровье)․
- Интеграция с календарём для напоминаний о важных астрологических событиях․
Важно: определите минимальный набор функций (MVP), чтобы быстрее вывести продукт на рынок и собрать обратную связь․
Выбор платформы для чат‑бота
Существует несколько популярных платформ, каждая из которых имеет свои плюсы и минусы․
| Платформа | Поддерживаемые мессенджеры | Язык разработки | Стоимость |
|---|---|---|---|
| Telegram Bot API | Telegram | Python, Node․js, PHP, Go и др․ | Бесплатно (ограничения по запросам) |
| Facebook Messenger Platform | Facebook, Instagram | Node․js, PHP, Java | Бесплатно до 2000 запросов/день |
| Viber Bot API | Viber | Python, Node․js, Ruby | Бесплатно |
| Microsoft Bot Framework | Telegram, Slack, Teams, Web‑чат и др․ | C#, Node․js, Python | Бесплатный тариф + платные опции |
Для большинства русскоязычных пользователей Telegram – лучший выбор: простая регистрация бота, широкая аудитория и отсутствие строгих ограничений․
Подготовка астрологической базы данных
Бот‑астрологу нужна надёжная информация о планетных позициях, знаках зодиака, аспектах и т․п․ Есть два основных подхода:
Использование готовых API
- Aztro API – бесплатный сервис для получения ежедневных гороскопов․
- AstrologyAPI – платный, но предоставляет расчёт натальных карт, совместимость и транзиты․
- AstronomyAPI – открытый API с эфемеридами․
Самостоятельный расчёт эфемерид
Если хотите полностью контролировать данные, скачайте JPL DE430 или Swiss Ephemeris и используйте их в своём коде․ Ниже пример на Python с библиотекой pyswisseph:
import swisseph as swe
from datetime import datetime
def get_planet_positions(date_time: datetime, lat: float, lon: float):
# Устанавливаем координаты наблюдателя
swe․set_topo(lon, lat, 0)
# Переводим дату в юлианский день
jd = swe․julday(date_time․year, date_time․month, date_time․day,
date_time․hour + date_time․minute/60․0)
planets = {
'Sun': swe․SUN,
'Moon': swe․MOON,
'Mercury': swe․MERCURY,
'Venus': swe․VENUS,
'Mars': swe․MARS,
'Jupiter': swe․JUPITER,
'Saturn': swe․SATURN,
'Uranus': swe․URANUS,
'Neptune': swe․NEPTUNE,
'Pluto': swe․PLUTO
}
positions = {}
for name, pl in planets․items:
lon, lat, dist = swe․calc(jd, pl)[:3]
positions[name] = lon # долгота в градусах
return positions
now = datetime․now
pos = get_planet_positions(now, 55․75, 37․62) # Москва
print(pos)
Эти данные потом можно преобразовать в знаки зодиака, дома и аспекты․
Архитектура бота
Рекомендуемая схема выглядит так:
- Frontend (мессенджер) – получает сообщения от пользователя․
- Webhook‑сервер – обработчик запросов (например, Flask/Django для Python)․
- Логика бота – модуль, отвечающий за диалог, парсинг запросов и вызов астрологических функций․
- Астрологический модуль – расчёт гороскопов, натальных карт, совместимости․
- База данных – хранит пользовательские профили (дата/время рождения, предпочтения)․
- Служба планирования – cron‑задачи для отправки ежедневных гороскопов․
Ниже схематичный пример кода на Python + Flask для Telegram:
from flask import Flask, request
import requests
import json
app = Flask(__name__)
TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN'
TELEGRAM_URL = f'https://api․telegram․org/bot{TOKEN}/'
def send_message(chat_id, text):
url = TELEGRAM_URL + 'sendMessage' requests․post(url, json=payload)
def get_daily_horoscope(sign):
# Пример обращения к бесплатному API Aztro
resp = requests․post('https://aztro․sameerkumar․website/?sign=' + sign․lower + '&day=today')
data = resp․json
return data['description']
@app․route('/webhook', methods=['POST'])
def webhook:
update = request․get_json
if 'message' in update:
chat_id = update['message']['chat']['id']
text = update['message']․get('text', '')․strip․lower
# простая команда /start
if text == '/start':
send_message(chat_id, 'Привет! Я астрологический бот․ Введи знак зодиака, и я пришлю твой гороскоп․')
elif text in ['овен','телец','близнецы','рак','лев','дева','весы','скорпион','стрелец','козерог','водолей','рыбы']:
horoscope = get_daily_horoscope(text)
send_message(chat_id, f'{text․} — {horoscope}')
else:
send_message(chat_id, 'Я не понял․ Пожалуйста, введи название знака зодиака․')
return 'ok'
if __name__ == '__main__':
# Для локального теста используйте ngrok, а в продакшн – любой облачный хостинг
app․run(host='0․0․0․0', port=8443)
Хранение пользовательских данных
Чтобы предлагать персонализированные гороскопы, необходимо сохранять дату, время и место рождения․ Наиболее простые варианты:
- SQLite – для небольших проектов, легко встраивается в приложение․
- PostgreSQL – если планируется масштабирование и аналитика․
- Firebase Realtime Database – если хотите полностью безсерверное решение․
Пример таблицы в PostgreSQL:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
telegram_id BIGINT UNIQUE NOT NULL,
name TEXT,
birth_date DATE NOT NULL,
birth_time TIME,
latitude NUMERIC(9,6),
longitude NUMERIC(9,6)
);
Планирование отправки ежедневных гороскопов
Для автоматической рассылки используйте планировщик задач:
- Cron на VPS (Linux) – простейший способ․
- Heroku Scheduler – если ваш бот размещён на Heroku․
- AWS Lambda + CloudWatch Events – без серверов, только платите за исполнение․
Пример cron‑записи, отправляющей гороскоп в 9:00 по Москве каждому пользователю:
0 6 * * * /usr/bin/python3 /home/bot/send_daily․py
В скрипте send_daily․py вы выбираете всех пользователей из БД, получаете их знак (по дате рождения) и вызываете функцию get_daily_horoscope, после чего отправляете сообщение через Telegram API․
Тестирование и отладка
Качественное тестирование – залог успеха․ Обязательно проверьте:
- Корректность парсинга входных сообщений (регистронезависимость, синонимы)․
- Точность астрологических расчётов (сравните с известными сервисами)․
- Работу с ошибками: отсутствие даты рождения, неверный формат, недоступность внешних API․
- Производительность при рассылке (не превышайте лимиты Telegram – 30 сообщений в секунду)․
Для автоматических тестов удобно использовать pytest (Python) и мокировать запросы к внешним API․
Публикация и продвижение
После того как бот готов, выполните следующие шаги:
- Зарегистрируйте Webhook у выбранного мессенджера (Telegram:
setWebhook)․ - Разместите сервер в надёжном облаке (DigitalOcean, AWS, Google Cloud)․ Минимальный тариф – 5 USD/мес․
- Создайте короткое и запоминающееся имя пользователя (например,
@astro_bot)․ - Подготовьте приветственное сообщение и инструкцию по использованию;
- Продвигайте бот в тематических группах, на форумах астрологии, через рекламные посты в соцсетях․
Расширенные возможности
Когда базовый функционал отлажен, можно добавить:
- Голосовые ответы (используя Google Text‑to‑Speech)․
- Интеграцию с Google Calendar для напоминаний о лунных фазах․
- Платные подписки на персональные отчёты (Stripe, PayPal)․
- Графическое отображение натальной карты (SVG‑генерация)․
- Машинное обучение для более «человечного» диалога․
Часто задаваемые вопросы
Нужно ли иметь астрологическое образование?
Технически нет, но базовые знания о знаках, домах и аспектах помогут построить более качественную логику и избежать ошибок․
Как обеспечить безопасность пользовательских данных?
Используйте HTTPS для всех запросов, храните токены в переменных окружения, а личные данные (дата и время рождения) шифруйте (например, с помощью cryptography в Python)․
Какие ограничения у Telegram Bot API?
Максимальный размер сообщения – , ограничение на отправку медиа‑файлов (20 МБ)․ Также есть лимит в 30 сообщений в секунду на один бот․
Создание бота‑астролога – увлекательный проект, который сочетает в себе программирование, работу с астрологическими данными и взаимодействие с пользователями․ Следуя этому пошаговому руководству, вы сможете быстро собрать MVP, протестировать его на реальной аудитории и постепенно расширять функционал․
Помните: успех бота зависит не только от точности гороскопов, но и от качества пользовательского опыта․ Делайте диалог живым, отвечайте быстро и не забывайте про регулярные обновления․
Удачной разработки! 🚀