Суть урока
Мессенджеры — это уже не чаты. Это полноценные бизнес-платформы: продажи, поддержка, онбординг, командная работа. Проблема одна — всё это требует живых людей, которые устают, болеют и уходят в отпуск. AI меняет уравнение. В этом уроке строим умных ботов для Telegram, Slack, WhatsApp и Microsoft Teams: клиент пишет → Claude анализирует → отвечает за секунды → если сложно → эскалирует менеджеру.
Ключевые концепции
- Telegram Bot API — официальный интерфейс для ботов; python-telegram-bot — стандарт на Python
- Webhook vs Polling — два способа получать сообщения: webhook быстрее и дешевле в продакшне
- Slack Bolt SDK — официальный SDK: события, шорткаты, slash-команды в одном месте
- WhatsApp Business API — три пути: Twilio (надёжный), 360dialog (специализированный), Meta Cloud API (прямой)
- Microsoft Teams — уведомления через webhook в приложении Workflows и официальный Teams MCP от Microsoft (preview)
- ManyChat — no-code конструктор сценариев для личных сообщений (Instagram, WhatsApp, Messenger, Telegram и др.)
- Unified Messaging Hub — одна точка входа для всех каналов; Claude триажирует и маршрутизирует
- Escalation logic — когда бот отвечает сам, когда передаёт живому человеку
Теория
Каждый мессенджер — для какого бизнеса
| Мессенджер | Аудитория | Лучшее для | Сложность |
|---|---|---|---|
| Telegram | RU/СНГ, IT, блогеры | Сообщества, контент, лиды, продажи | Низкая |
| Slack | Команды, SaaS, B2B | Внутренние процессы, уведомления, DevOps | Средняя |
| Латамерика, Европа, глобально | Клиентская поддержка, малый бизнес | Средняя | |
| Teams | Корпоративный B2B | Enterprise клиенты, интеграция с O365 | Высокая |
Правило выбора: иди туда, где уже есть твоя аудитория. Не создавай новый канал — встраивайся в существующий.
Telegram Bot: от нуля до умного ассистента
Шаг 1: Создание бота
Напиши /newbot в @BotFather → введи имя и username → получи токен. Этот токен = доступ к управлению ботом.
Шаг 2: Базовая интеграция с Claude
import os
import logging
from telegram import Update
from telegram.ext import (
Application, CommandHandler, MessageHandler,
filters, ContextTypes
)
import anthropic
from dotenv import load_dotenv
load_dotenv()
claude = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
BOT_TOKEN = os.environ["TELEGRAM_BOT_TOKEN"]
# Хранение истории разговора в памяти
# В продакшне замени на Redis или SQLite
conversation_history: dict[int, list] = {}
SYSTEM_PROMPT = """Ты AI-ассистент агентства недвижимости Acme Realty.
Отвечаешь на вопросы о недвижимости в Эквадоре: цены, районы, процесс покупки.
Тон: дружелюбный эксперт, не продажник.
Если вопрос требует консультации менеджера — скажи об этом явно и предложи оставить контакт.
Отвечай кратко: 1–3 предложения если вопрос простой, до 5 абзацев если сложный.
Язык: русский."""
async def cmd_start(update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Команда /start — приветствие нового пользователя."""
user = update.effective_user
await update.message.reply_text(
f"Привет, {user.first_name}! 👋\n\n"
"Я помогу с вопросами о недвижимости в Куэнке, Эквадор. "
"Спросите о ценах, районах, процессе покупки — отвечу мгновенно.\n\n"
"Если нужна личная консультация — просто скажите."
)
async def cmd_contact(update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Команда /contact — сбор контактных данных."""
await update.message.reply_text(
"Оставьте ваш email или телефон для обратной связи, "
"и менеджер свяжется с вами в течение 2 часов в рабочее время."
)
# В реальном боте здесь ConversationHandler для получения и сохранения контакта
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Основной обработчик входящих сообщений."""
user_id = update.effective_user.id
user_text = update.message.text
# Инициализируем историю если первое сообщение
if user_id not in conversation_history:
conversation_history[user_id] = []
# Добавляем сообщение пользователя
conversation_history[user_id].append({
"role": "user",
"content": user_text
})
# Ограничиваем историю: последние 10 сообщений
if len(conversation_history[user_id]) > 10:
conversation_history[user_id] = conversation_history[user_id][-10:]
# Показываем "печатает..." для хорошего UX
await context.bot.send_chat_action(
chat_id=update.effective_chat.id,
action="typing"
)
# Запрос к Claude (актуальные модели: страница «Актуальное сейчас»)
response = claude.messages.create(
model="claude-sonnet-5-5",
max_tokens=1024,
system=SYSTEM_PROMPT,
messages=conversation_history[user_id]
)
assistant_reply = "".join(b.text for b in response.content if b.type == "text")
# Сохраняем ответ в историю
conversation_history[user_id].append({
"role": "assistant",
"content": assistant_reply
})
await update.message.reply_text(assistant_reply)
async def handle_error(update: object, context: ContextTypes.DEFAULT_TYPE):
"""Логируем ошибки."""
logging.error("Exception while handling update:", exc_info=context.error)
def main():
app = Application.builder().token(BOT_TOKEN).build()
app.add_handler(CommandHandler("start", cmd_start))
app.add_handler(CommandHandler("contact", cmd_contact))
app.add_handler(MessageHandler(
filters.TEXT & ~filters.COMMAND, handle_message
))
app.add_error_handler(handle_error)
print("Telegram bot запущен (polling mode)...")
app.run_polling(allowed_updates=Update.ALL_TYPES)
if __name__ == "__main__":
main()Telegram: четыре главных паттерна бота
1. FAQ-бот — отвечает на типовые вопросы о продукте, ценах, доставке. System prompt содержит всю базу знаний. Берёт на себя типовые вопросы и снимает заметную часть нагрузки со службы поддержки.
2. Квалификатор лидов — задаёт серию вопросов новому пользователю (бюджет, сроки, задачи), определяет "температуру" лида и либо предлагает встречу, либо отправляет в nurture-цепочку.
3. Бот записи на встречу — интегрируется с Calendly через API, предлагает свободные слоты и создаёт бронирование прямо в чате. Клиент не покидает Telegram.
4. Контент-паблишер — Claude генерирует пост по расписанию, бот публикует в канал. Планирование контента на неделю занимает 20 минут один раз в понедельник.
Slack: автоматизация командных процессов
Slack с Bolt SDK — это не просто чат. Это платформа для умных командных ботов.
Типичные сценарии:
- Standup-резюме: бот собирает ответы из опроса, Claude форматирует сводку → постит в канал
- PR-уведомления: когда открывается Pull Request, Claude читает diff и пишет краткое резюме изменений
- Задачи через команду:
/task Сделать лендинг→ Claude создаёт задачу в Notion/Linear → возвращает ссылку - @mention-ответы: бот "слушает" каналы и отвечает при обращении через @упоминание
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
import anthropic
import os
app = App(token=os.environ["SLACK_BOT_TOKEN"])
claude = anthropic.Anthropic()
@app.event("app_mention")
def handle_mention(event, say):
"""Отвечает когда к боту обращаются через @mention."""
user_text = event["text"]
# Убираем @упоминание бота из текста
clean_text = user_text.split(">", 1)[-1].strip() if ">" in user_text else user_text
response = claude.messages.create(
model="claude-sonnet-5-5",
max_tokens=512,
system="Ты ассистент команды разработки. Отвечай кратко и конкретно.",
messages=[{"role": "user", "content": clean_text}]
)
say(f"<@{event['user']}> {''.join(b.text for b in response.content if b.type == 'text')}")
@app.command("/standup")
def handle_standup(ack, say, command):
"""
/standup — генерирует форму стендапа.
Пользователь заполняет, бот собирает ответы и делает резюме.
"""
ack()
say({
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": f"*Стендап {command['user_name']}*\n"
"Ответь на три вопроса:"
}
},
{
"type": "input",
"block_id": "done",
"element": {
"type": "plain_text_input",
"action_id": "done_input",
"placeholder": {"type": "plain_text", "text": "Что сделал вчера?"}
},
"label": {"type": "plain_text", "text": "Сделано"}
}
]
})
@app.command("/summarize")
def handle_summarize(ack, say, command):
"""
/summarize [текст] — суммаризирует длинное сообщение.
Полезно для больших PR-описаний или документов в каналах.
"""
ack()
text_to_summarize = command.get("text", "")
if not text_to_summarize:
say("Укажи текст после команды: `/summarize [твой текст]`")
return
response = claude.messages.create(
model="claude-haiku-4-5",
max_tokens=300,
messages=[{
"role": "user",
"content": f"Суммаризируй этот текст в 3–5 пунктах:\n\n{text_to_summarize}"
}]
)
say(f"📋 *Краткое содержание:*\n{''.join(b.text for b in response.content if b.type == 'text')}")
if __name__ == "__main__":
handler = SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"])
print("Slack bot запущен...")
handler.start()WhatsApp Business API: самый большой охват
WhatsApp — один из самых массовых мессенджеров в мире, им пользуются миллиарды людей. Для бизнесов в Латинской Америке и Европе — часто единственный предпочитаемый канал.
Учти правила Meta: с 15 января 2026 Meta не пускает в WhatsApp Business Platform AI-ассистентов общего назначения (вроде ChatGPT); для отдельных стран есть исключения. Бот, который отвечает клиентам твоего собственного бизнеса, — другой случай, но перед запуском сверь действующие правила WhatsApp Business и условия своего провайдера.
Три пути подключения:
| Провайдер | Плюсы | Минусы | Цена |
|---|---|---|---|
| Twilio | Надёжный, документация отличная | Платите и провайдеру, и Meta | по тарифу Twilio + сборы Meta |
| 360dialog | Специализируется на WhatsApp | Меньше документации | по тарифу 360dialog + сборы Meta |
| Meta Cloud API | Прямой доступ, без наценки провайдера | Сложная верификация бизнеса | только сборы Meta |
С 1 июля 2025 Meta берёт плату за каждое доставленное шаблонное сообщение (зависит от категории сообщения и страны получателя); ответы клиенту внутри окна обслуживания бесплатны. Актуальные ставки смотри на странице Meta и у своего провайдера.
Код через Twilio + Claude:
from flask import Flask, request
from twilio.twiml.messaging_response import MessagingResponse
from twilio.rest import Client
import anthropic
import os
app = Flask(__name__)
twilio_client = Client(
os.environ["TWILIO_ACCOUNT_SID"],
os.environ["TWILIO_AUTH_TOKEN"]
)
claude = anthropic.Anthropic()
# История разговоров (в продакшне: Redis с TTL 24h)
wa_conversations: dict[str, list] = {}
WA_SYSTEM = """Ты AI-ассистент компании в WhatsApp.
Отвечай кратко (WhatsApp — не email).
Если вопрос требует менеджера — скажи: 'Передаю вас специалисту, ожидайте ответа в течение часа.'
Будь дружелюбным, но профессиональным."""
@app.route("/webhook/whatsapp", methods=["POST"])
def whatsapp_webhook():
"""Обрабатывает входящие сообщения WhatsApp."""
from_number = request.form.get("From", "")
body = request.form.get("Body", "").strip()
if not body:
return str(MessagingResponse())
# История разговора
if from_number not in wa_conversations:
wa_conversations[from_number] = []
wa_conversations[from_number].append(
{"role": "user", "content": body}
)
# Ограничиваем контекст последними 8 сообщениями
history = wa_conversations[from_number][-8:]
# Claude генерирует ответ
response = claude.messages.create(
model="claude-sonnet-5-5",
max_tokens=512,
system=WA_SYSTEM,
messages=history
)
reply = "".join(b.text for b in response.content if b.type == "text")
wa_conversations[from_number].append(
{"role": "assistant", "content": reply}
)
# Если Claude передаёт менеджеру — уведомляем внутри компании
if "специалисту" in reply.lower() or "передаю" in reply.lower():
notify_manager(from_number, body, reply)
# Отвечаем пользователю
resp = MessagingResponse()
resp.message(reply)
return str(resp)
def notify_manager(customer_number: str, question: str, bot_reply: str):
"""Уведомляем менеджера в Telegram когда бот не может помочь."""
import requests
telegram_token = os.environ.get("TELEGRAM_BOT_TOKEN")
manager_chat = os.environ.get("MANAGER_TELEGRAM_CHAT_ID")
if not telegram_token or not manager_chat:
return
message = (
f"🔔 *Эскалация из WhatsApp*\n\n"
f"Клиент: `{customer_number}`\n"
f"Вопрос: {question}\n\n"
f"Бот ответил: {bot_reply[:200]}..."
)
requests.post(
f"https://api.telegram.org/bot{telegram_token}/sendMessage",
json={
"chat_id": manager_chat,
"text": message,
"parse_mode": "Markdown"
}
)
if __name__ == "__main__":
app.run(port=5001, debug=False)Microsoft Teams: корпоративный канал
Если твои клиенты — корпорации, они работают в Teams. Два сценария:
Сценарий 1: Webhook-уведомления в Teams канал
Самый простой способ — приложение Workflows в Teams (работает на Power Automate): оно выдаёт адрес, на который можно отправить запрос с сообщением. Старые Incoming Webhook на коннекторах Office 365 Microsoft выводит из эксплуатации, поэтому новые уведомления настраивай через Workflows.
import requests
import json
import os
TEAMS_WEBHOOK_URL = os.environ["TEAMS_WEBHOOK_URL"]
def send_teams_notification(title: str, message: str,
color: str = "0078D4",
facts: list[dict] = None) -> bool:
"""
Отправляет карточку-уведомление в Teams канал через webhook-адрес из Workflows.
Workflows принимает и MessageCard, и Adaptive Card: формат проверь в тестовом канале.
color: hex-цвет боковой полосы (0078D4 = синий Microsoft)
facts: список {"name": "...", "value": "..."} для таблицы данных
"""
card = {
"@type": "MessageCard",
"@context": "http://schema.org/extensions",
"themeColor": color,
"summary": title,
"sections": [{
"activityTitle": title,
"activityText": message,
}]
}
if facts:
card["sections"][0]["facts"] = facts
response = requests.post(
TEAMS_WEBHOOK_URL,
headers={"Content-Type": "application/json"},
data=json.dumps(card)
)
return response.ok # любой успешный ответ (200, 202)
# Пример: уведомление о новой сделке
def notify_deal_closed(client_name: str, amount: float,
property_address: str) -> None:
"""Уведомление в Teams канал продаж при закрытии сделки."""
send_teams_notification(
title="🎉 Новая сделка закрыта!",
message=f"Агент подписал договор с клиентом.",
color="00B050", # зелёный
facts=[
{"name": "Клиент", "value": client_name},
{"name": "Сумма", "value": f"${amount:,.0f}"},
{"name": "Объект", "value": property_address},
]
)Как настроить webhook в Teams через Workflows:
- В Teams → Канал → ⋯ (троеточие) → Workflows
- Выбери шаблон «Send webhook alerts to a channel» (отправлять уведомления из webhook в канал)
- Задай параметры и сохрани
- Скопируй webhook-адрес → сохрани в переменную окружения
Сценарий 2: Teams MCP от Microsoft
У Microsoft есть официальный MCP-сервер для Teams (входит в Microsoft Agent 365, статус preview). Он позволяет агенту читать чаты и каналы, публиковать сообщения и отвечать в ветках. Это размещённый сервер, а не пакет для установки через npx: подключение настраивает администратор организации (регистрация приложения в Microsoft Entra и выдача прав), а названия инструментов в preview могут меняться. Актуальные инструменты и схема подключения: документация Microsoft. Какие MCP-клиенты поддерживаются, проверь в той же документации.
Когда что использовать:
- Webhook через Workflows — уведомления от бизнес-процессов (CRM, деплой, сделки). Быстро, без регистрации приложения.
- Teams MCP — интерактивный агент, который читает и отвечает в каналах. Требует регистрации приложения в Entra и прав администратора.
ManyChat: когда не нужен код
Для предпринимателей без программирования — ManyChat. Визуальный конструктор сценариев для личных сообщений: Instagram, Messenger, WhatsApp, TikTok, Telegram.
Что умеет ManyChat:
- Визуальные цепочки сообщений с условиями (if/else без кода)
- Интеграция с Google Sheets, Zapier, Make
- Сегментация аудитории по тегам
- A/B тестирование сообщений
- Broadcast для рассылок
ManyChat + Claude через Zapier: Свои AI-функции у ManyChat зависят от тарифа, а подключить именно Claude обычно проще через Zapier: ManyChat → Webhook → Zapier → Claude API → ответ обратно в ManyChat. Немного сложнее, зато без кода.
Unified Messaging Hub: одна система для всех каналов
from flask import Flask, request, jsonify
import anthropic
import json
import os
app = Flask(__name__)
claude = anthropic.Anthropic()
ROUTING_SYSTEM = """Ты роутер клиентских сообщений. Анализируй запрос и верни JSON:
{
"intent": "faq|lead|complaint|consultation|other",
"urgency": "low|medium|high",
"language": "ru|es|en",
"should_escalate": true|false,
"suggested_response": "краткий ответ если intent=faq"
}"""
def route_message(message: str, channel: str, user_id: str) -> dict:
"""
Анализирует входящее сообщение и определяет маршрут.
channel: telegram|whatsapp|slack|teams
"""
response = claude.messages.create(
model="claude-haiku-4-5", # Haiku для роутинга — быстро и дёшево; проверьте, что модель ещё доступна
max_tokens=256,
system=ROUTING_SYSTEM,
messages=[{
"role": "user",
"content": f"Канал: {channel}\nСообщение: {message}"
}]
)
try:
return json.loads("".join(b.text for b in response.content if b.type == "text"))
except json.JSONDecodeError:
return {
"intent": "other",
"urgency": "medium",
"language": "ru",
"should_escalate": False,
"suggested_response": ""
}
@app.route("/hub/incoming", methods=["POST"])
def unified_incoming():
"""
Единая точка входа для сообщений из всех каналов.
Каждый источник (Telegram bot, WhatsApp webhook, Slack event)
отправляет сообщение сюда в стандартизированном формате.
"""
data = request.json
channel = data.get("channel", "unknown")
user_id = data.get("user_id", "")
message = data.get("message", "")
# 1. Роутинг через Claude Haiku (дёшево и быстро)
routing = route_message(message, channel, user_id)
# 2. Логика обработки по интенту
if routing["should_escalate"]:
# Передаём живому менеджеру
escalate_to_manager(channel, user_id, message, routing)
reply = "Я передаю ваш вопрос специалисту. Ответим в течение 1 часа."
elif routing["intent"] == "faq" and routing["suggested_response"]:
# Используем готовый ответ из роутинга
reply = routing["suggested_response"]
else:
# Полный ответ через Claude Sonnet
response = claude.messages.create(
model="claude-sonnet-5-5",
max_tokens=512,
system="Ты дружелюбный помощник. Отвечай на языке клиента.",
messages=[{"role": "user", "content": message}]
)
reply = "".join(b.text for b in response.content if b.type == "text")
return jsonify({
"reply": reply,
"routing": routing,
"channel": channel
})
def escalate_to_manager(channel: str, user_id: str,
message: str, routing: dict) -> None:
"""Уведомляет менеджера через Telegram."""
bot_token = os.environ.get("TELEGRAM_BOT_TOKEN")
manager_chat = os.environ.get("MANAGER_TELEGRAM_CHAT_ID")
if not bot_token or not manager_chat:
return
import requests
requests.post(
f"https://api.telegram.org/bot{bot_token}/sendMessage",
json={
"chat_id": manager_chat,
"text": (
f"🔔 *Эскалация*\n"
f"Канал: {channel} | Пользователь: `{user_id}`\n"
f"Срочность: {routing.get('urgency', '?')}\n"
f"Сообщение: {message[:300]}"
),
"parse_mode": "Markdown"
}
)
if __name__ == "__main__":
app.run(port=5002, debug=False)Монетизация: продажа ботов клиентам
Это отдельная услуга. Малый бизнес нуждается в ботах, но не знает как их создать.
Типичные пакеты и из чего складывается цена:
| Пакет | Что входит | Из чего складывается цена |
|---|---|---|
| FAQ-бот базовый | Telegram бот, 20–50 вопросов в базе знаний | часы на настройку и наполнение базы знаний; обслуживание: правки промпта и мониторинг |
| Квалификатор лидов | Telegram + интеграция с CRM | часы на интеграцию с CRM; обслуживание: проверка передачи лидов |
| WhatsApp бот | WhatsApp Business API + Claude | настройка и верификация бизнеса; обслуживание + сборы Meta и провайдера |
| Полная система | Все каналы + CRM + Unified Hub + аналитика | суммарные часы по всем каналам + расходы на хостинг и токены |
Цены зависят от рынка, ниши и твоих затрат времени. Заработок в этой нише не гарантирован: считай расходы и спрос на своём рынке по урокам Упаковка предложения и Цены и монетизация.
Практика
Задание: Telegram AI-ассистент + webhook в Teams за 5 шагов
Шаг 1: Создай Telegram бота (10 мин)
- @BotFather →
/newbot→ имя → username → токен - Создай проект:
mkdir ai-messenger-bot && cd ai-messenger-bot
python -m venv venv && source venv/bin/activate
pip install python-telegram-bot anthropic python-dotenv flask requests- Создай
.env:
TELEGRAM_BOT_TOKEN=ваш_токен
ANTHROPIC_API_KEY=sk-ant-...
TEAMS_WEBHOOK_URL=https://... # добавим на шаге 3
MANAGER_TELEGRAM_CHAT_ID=ваш_chat_idШаг 2: Адаптируй code под свою нишу (10 мин)
Скопируй handle_message() из теории. Измени SYSTEM_PROMPT: опиши свой бизнес или нишу клиента. Запусти:
python bot.pyНайди бота в Telegram по username → отправь /start → задай 7–10 вопросов как клиент. Оцени качество — доработай system prompt если нужно.
Шаг 3: Настрой webhook в Teams (5 мин)
- В своём Teams (или попроси у клиента): Канал → ⋯ → Workflows → шаблон «Send webhook alerts to a channel»
- Дай имя "AI Assistant Bot" и сохрани
- Скопируй webhook-адрес → добавь в
.envкакTEAMS_WEBHOOK_URL - Запусти тест:
from dotenv import load_dotenv
load_dotenv()
notify_deal_closed("Иван Петров", 85000, "ул. Ларга 45, Куэнка")Проверь Teams канал — должна появиться карточка.
Шаг 4: Добавь эскалацию в Telegram (5 мин)
Скопируй функцию notify_manager() из раздела WhatsApp. Интегрируй в Telegram бот: когда пользователь пишет "хочу с менеджером" или "позвоните мне" — Claude возвращает флаг эскалации и ты уведомляешь себя.
Шаг 5: Задокументируй как кейс (5 мин)
- Скриншот разговора с ботом
- Скриншот Teams уведомления
- Описание: для какого бизнеса, какую проблему решает
- Расчёт стоимости для клиента (setup + обслуживание)
- Добавь в портфолио
Бонусное задание:
Добавь команду /contact в Telegram бот. Когда пользователь её вызывает — бот просит email/телефон, сохраняет в Google Sheet через gspread библиотеку и уведомляет тебя в Telegram. Это твой первый конвертер лидов.
Инструменты и ресурсы
- python-telegram-bot — стандарт для Telegram ботов на Python, бесплатно
- Slack Bolt SDK — официальный SDK для Slack-приложений, бесплатный
- Twilio WhatsApp — WhatsApp Business API, цены на сайте Twilio
- 360dialog — специализированный WhatsApp API, тарифы на сайте
- Meta Cloud API — прямой доступ к WhatsApp, сложная верификация, тарифы Meta
- ManyChat — no-code конструктор сценариев для личных сообщений, актуальные тарифы и условия на сайте
- Teams: webhook через Workflows — уведомления в Teams без отдельного бота
- ngrok — публичный URL для разработки, есть бесплатный тариф
- Redis / Upstash — хранение истории разговоров, есть бесплатный уровень
Ключевые выводы
Мессенджер без AI-бота — как сайт без формы обратной связи: клиент пришёл, никого нет, клиент ушёл. Бот ловит обращения, которые иначе пропали бы.
Хорошо настроенный Telegram-бот берёт на себя типовые вопросы и освобождает операторов для сложных. Стоимость токенов за обычный диалог — малая доля стоимости рабочего времени человека, но посчитай её для своего объёма. Актуальные цены и версии: Актуальное сейчас.
Продавать ботов клиентам можно как продукт, а не только как разовую работу: основа переиспользуется, а под нишу меняются system prompt и брендинг. Сколько это принесёт, зависит от твоего рынка и ниши, гарантий нет.
Дальше по теме
→ No-code AI — v0, Webflow AI и Framer для предпринимателей
Отметка хранится только в этом браузере и никуда не отправляется. Мой прогресс