Ты мой разработчик. Собери мне ИИ-ассистента для директа Instagram. Я не программист: объясняй простыми словами, веди по шагам и жди моего подтверждения после каждого шага.

## Что должно получиться

1. **Материалы по кодовому слову.** Человек пишет под моим Reels кодовое слово, например «гайд», и получает в директ ссылку на материал. Под комментарием публично появляется короткий ответ, каждый раз другой.
2. **Консультант в директе.** Человек пишет мне в директ вопрос. Ассистент отвечает от моего лица по моей базе знаний: что я продаю, сколько стоит, как купить. Когда человек готов, ассистент собирает заявку и присылает её мне в Telegram.

## Стек

- **Instagram**: профессиональный аккаунт (Автор или Бизнес), привязанный к странице Facebook.
- **Zernio** (https://zernio.com): официальный партнёр Meta, даёт API к директу и комментариям. Бесплатно для 2 аккаунтов, первые 10 000 исходящих сообщений в месяц бесплатно. Документация для тебя: https://docs.zernio.com/llms-full.txt и https://docs.zernio.com/platforms/instagram
- **OpenRouter** (https://openrouter.ai): доступ к моделям по одному ключу. Модель ассистента: самая свежая DeepSeek из списка https://openrouter.ai/models (найди сам и покажи мне цену). Пополнение от 5 $.
- **Cloudflare Workers** (https://workers.cloudflare.com) и база **D1**: бесплатный тариф, 100 000 запросов в сутки. Не Vercel: бесплатный Vercel по правилам только для некоммерческих проектов.
- **Telegram-бот** для заявок: создаю через @BotFather.

## Правила для тебя

- Ключи и токены никогда не пиши в код, в файлы проекта и в наш чат. Попроси меня ввести их командой `npx wrangler secret put ИМЯ`, в код они попадают только как переменные окружения.
- Прежде чем писать код по Zernio, прочитай их документацию по ссылкам выше. Не выдумывай адреса API: сверяй каждый.
- Всё, что уходит клиентам (тексты кодовых слов, публичные ответы, промпт ассистента), сначала покажи мне. Внедряй только после моего «да».
- Код держи простым: один Worker на TypeScript, одна база D1, без лишних библиотек.

## Шаг 1. Аккаунты (я делаю руками, ты подсказываешь)

1. Instagram переключен на профессиональный аккаунт и привязан к странице Facebook.
2. Регистрация в Zernio → подключить Instagram → создать API-ключ на https://zernio.com/dashboard/api-keys
3. ⚠️ Самое важное, без этого бот читает сообщения, но не может ответить: на Facebook открыть https://www.facebook.com/settings/?tab=advanced_messaging → «Подключённые приложения» → приложение Zernio (называется «Social Media Connector») → включить **«Управление переписками»**.
4. OpenRouter: регистрация, пополнение, ключ на https://openrouter.ai/settings/keys. Поставить лимит расходов на ключ.
5. Cloudflare: регистрация, дальше ты ставишь `wrangler` и логинишь меня командой `npx wrangler login`.
6. Telegram: создать бота у @BotFather, написать ему любое сообщение, ты поможешь узнать мой chat_id.

## Шаг 2. Кодовые слова (без кода)

У Zernio есть встроенная автоматизация «комментарий по слову → директ» (Create comment automation в документации). Используй её, свой код для этого не пиши.

Для каждого слова спроси у меня: слово, ссылку на материал, текст сообщения. Настрой:
- `matchMode: "exact"`: срабатывает, только если комментарий целиком равен слову. Иначе бот ответит на случайную фразу, где слово просто встретилось.
- `alsoMatchInDms: true`: слово, присланное в директ, тоже срабатывает.
- `commentReplyVariations`: 10 разных публичных ответов, одним предложением: благодарность плюс «проверь директ». Одинаковые ответы под сотней комментариев Instagram считает спамом.
- ⚠️ Сообщение только текстом со ссылкой, без кнопок и карточек: с конца августа 2026 Instagram не доставляет кнопки тем, кто на меня не подписан.

## Шаг 3. Ассистент в директе

Cloudflare Worker принимает вебхук Zernio `message.received` и отвечает через API Zernio (отправка сообщения в диалог, найди точный адрес в документации).

Обязательно:
1. **Подпись вебхука.** Проверяй заголовок `X-Zernio-Signature` (HMAC-SHA256 от тела запроса секретом вебхука). Без верной подписи отвечай 401.
2. **Быстрый ответ Zernio.** Сразу верни 200, а модель вызывай в `ctx.waitUntil`, иначе Zernio повторит вебхук.
3. **Без дублей.** Сохраняй id входящего сообщения в D1, повтор пропускай.
4. **Не мешать кодовым словам.** Сообщение, которое совпадает с кодовым словом, ассистент пропускает: его обрабатывает автоматизация из шага 2.
5. **Свои и чужие исходящие.** В событии `message.sent` смотри поле `sentVia`: `api` — это наш ассистент. Любое другое исходящее значит, что я сам ответил человеку руками: ассистент молчит в этом диалоге 12 часов.
6. **История.** Последние 20 сообщений диалога храни в D1 и передавай модели. Старше 30 дней удаляй.
7. **Лимит.** Не больше 15 ответов одному человеку в сутки, дальше одно сообщение «на сегодня лимит, возвращайтесь завтра».
8. **Несколько сообщений подряд.** Человек часто пишет тремя сообщениями. Перед отправкой ответа проверь, не пришло ли от него новое: если пришло, этот ответ не отправляй, ответит следующий вызов с полной историей.
9. **Заявка.** Дай модели инструмент `save_lead` (имя, страна, что хочет, контакт). При вызове пришли мне в Telegram заявку со ссылкой на диалог `https://ig.me/m/НИК`, а ассистент в этом диалоге замолкает на 12 часов: дальше пишу я.
10. **Позвать меня.** Инструмент `handoff`: жалоба, возврат, торг, вопрос не из базы. Уведомление мне в Telegram.
11. **Голосовые.** Голосовое скачай по ссылке из вложения, расшифруй моделью с аудио на входе через тот же OpenRouter (например, свежая Gemini Flash Lite, аудио передаётся в base64) и отдай ассистенту как текст с пометкой «[голосовое]». Не вышло: вежливо попроси написать текстом.
12. **Проверка ответа перед отправкой.** Не длиннее 350 знаков, без разметки. Цифры и ссылки в ответе должны быть в базе знаний: если модель назвала цену или ссылку, которой в базе нет, не отправляй, а напиши «уточню и вернусь» и вызови handoff.
13. **Модель через OpenRouter**, `temperature` 0.4. Ошибка модели: человеку короткое «уточню и вернусь», мне уведомление в Telegram.

## Шаг 4. База знаний и характер ассистента

Интервью со мной, по одному вопросу:
- чем я занимаюсь и что продаю, цены, как оплатить, что входит;
- кому мои продукты подходят и кому нет;
- частые вопросы клиентов и мои ответы;
- как я пишу: на «вы» или на «ты», эмодзи, любимые слова, чего я никогда не скажу.

Из ответов собери два файла: `knowledge.md` (факты) и `prompt.md` (кто ассистент, как пишет, как ведёт к заявке, о чём не говорит). В промпте обязательно: факты только из базы, не выдумывать цены и сроки, на вопрос не по теме вежливо вернуть к теме, на «ты бот?» честно сказать, что ИИ-ассистент, и предложить позвать меня. Покажи мне оба файла до запуска.

## Шаг 5. Запуск и проверка

1. `npx wrangler deploy`, адрес Worker зарегистрируй вебхуком в Zernio на события `message.received` и `message.sent`.
2. Проверка с другого моего аккаунта: вопрос в директ → ответ за несколько секунд. Кодовое слово под постом → материал в директ и публичный ответ. Голосовое → ответ по сути. «Хочу купить» → заявка в Telegram. Мой ручной ответ → ассистент замолчал.
3. Покажи мне, где смотреть логи (`npx wrangler tail`) и сколько стоил один ответ в OpenRouter.

В конце напиши короткую памятку: где что лежит, как поменять базу знаний и промпт, как добавить новое кодовое слово.
