Автопостинг і взаємодія з аудиторією в Telegram за допомогою PHP та AI (практичний кейс)
У цьому дописі розглядається реалізація Telegram-бота для автопостингу та відповіді в чатах із використанням PHP і AI (Llama 3.1 через Groq API). Розберемо архітектуру, логіку роботи, обмеження та практичні рішення.
Вступ
Автоматизація Telegram-каналів — досить популярна задача, особливо в тематиках криптовалюти, маркетингу та ком’юніті-менеджменту.
Більшість рішень або занадто прості (звичайний автопостинг), або занадто складні (мікросервіси, черги, окремі AI-сервіси).
Ми вирішили зробити щось посередині:
простий, але гнучкий бот на PHP, який:
- генерує контент
- постить у канал
- відповідає в чатах
Що хотіли реалізувати
Основні задачі:
- автогенерація постів
- постинг у Telegram-канал
- відповіді в групах по ключових словах
- інтеграція з AI
- базова анти-спам логіка
Архітектура рішення
Система максимально проста:
- PHP-скрипт (CLI)
- Cron для запуску
- Telegram Bot API
- AI API (Groq)
- локальні файли для історії
Схема:
Cron → PHP Script → Telegram API ↓ Groq AI ↓ Data APIs
Основний принцип роботи
Скрипт запускається по cron і виконує 2 задачі:
- Генерує пост → публікує в канал
- Перевіряє нові повідомлення → відповідає
Генерація контенту через AI
Ми використовували модель Llama 3.1 через Groq API.
Основна функція:
function callGroq($apiKey, $prompt) {
$res = curlRequest("https://api.groq.com/openai/v1/chat/completions", [
"model" => "llama-3.1-8b-instant",
"messages" => [
["role" => "user", "content" => $prompt]
]
], [
'Authorization: Bearer ' . $apiKey
]);
$json = json_decode($res, true);
return $json['choices'][0]['message']['content'] ?? null;
}
Формування поста
Пост будується динамічно:
- дані ринку
- текст із AI
- посилання
- хештеги
function generatePost($config) {
$market = getMarketPrice();
$prompt = str_replace('{MARKET}', $market, $config['custom_prompt']);
return callGroq($config['groq_key'], $prompt);
}
Отримання ринкових даних
Для «живого» контенту використовувався зовнішній API:
function getMarketPrice() {
$res = curlRequest("//api.dexscreener.com/latest/dex/pairs/solana");
$json = json_decode($res, true);
return $json['pairs'][0]['priceUsd'] ?? 'N/A';
}
Постинг у Telegram
Використовується стандартний Bot API:
function sendTelegramMessage($token, $chatId, $text) {
$url = "https://api.telegram.org/bot{$token}/sendMessage";
curlRequest($url, json_encode([
'chat_id' => $chatId,
'text' => $text,
'parse_mode' => 'HTML'
]), ['Content-Type: application/json']);
}
Відповіді в чатах
Бот отримує повідомлення через getUpdates, фільтрує їх і відповідає:
if (stripos($text, $keyword) !== false) {
$reply = generateReply($config, $text);
sendTelegramMessage($token, $chatId, $reply);
}
Анти-спам логіка
Щоб уникнути проблем:
- історія повідомлень (щоб не відповідати двічі)
- затримки між відповідями
- фільтр груп і користувачів
Проблеми, з якими зіткнулися
1. Обмеження Telegram API
- rate limit
- затримки
2. Polling замість Webhook
- Через простоту використовувався polling → більша затримка
3. AI не завжди стабільний
- іноді генерує занадто довгі відповіді
- потребує обмеження
Що вийшло
У результаті:
- бот генерує контент
- постить у канал
- відповідає в чатах
- працює без складної інфраструктури
Висновки
- PHP підходить для таких задач на рівні MVP
- Cron + polling — просте, але робоче рішення
- AI значно покращує якість контенту
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів