# Telegram Chunking - Разбивка длинных сообщений

Когда AI генерирует ответ слишком большой для Telegram (лимит 4096 символов), ответ существует, но не доходит до пользователя.

## 🎯 Проблема

**Context overflow** → Ответ генерируется, но Telegram отвергает из-за размера:
```
❌ Ошибка: сообщение слишком длинное (превышает 4096 символов)
✅ Ответ: есть в памяти, но не отправлен
```

## 💡 Решение

### Вариант 1: Скрипт chunk-message (автоматическая разбивка)

```bash
# Использование
./bin/chunk-message "очень длинный текст..."

# Скрипт сам разобьет на части и добавит нумерацию:
# --- Часть 1 из 3 ---
# (текст первой части)
# ⏳
# --- Часть 2 из 3 ---
# (текст второй части)
# ⏳
# --- Часть 3 из 3 (конец) ---
# (текст третьей части)
```

**Особенности:**
- Разбивает по параграфам (сохраняет целостность)
- Добавляет нумерацию частей
- Не разрывает предложения mid-слове
- Добавляет паузы между частями

### Вариант 2: Интеграция с message tool

При отправке через `message` tool:

```javascript
// Псевдокод для проверки длины
if (response.length > 4000) {
  const chunks = splitIntoChunks(response, 4000);
  
  chunks.forEach((chunk, index) => {
    message send action:send \
      message:"[Часть ${index+1}/${chunks.length}]\n\n${chunk}" \
      channel:telegram
  });
}
```

### Вариант 3: Многошаговый подход для AI

**Инструкции для промптов:**

```
"Если ответ будет длинным (>3000 символов), 
разбей его на логические части и отправь по отдельности.

Каждая часть должна:
1. Быть самодостаточной (законченная мысль)
2. Начинаться с [Часть X/Y]
3. Заканчиваться явным завершением

Не отправляй '...' или 'продолжение следует'."
```

### Вариант 4: Интерактивная доставка

```bash
# Чанк 1 с запросом подтверждения
opencode run "Сгенерируй ответ, но если он длинный, 
отправь только первую часть и в конце напиши:
'[Осталось еще N частей. Продолжить? Y/n]'"

# Жди user input
# При "Y" - отправь следующую часть
```

## 🔧 Настройка для OpenClaw

### 1. Автоматическая проверка перед отправкой

Добавь в `AGENTS.md`:

```markdown
## Telegram Size Limit

Перед отправкой в Telegram проверяй длину:
- Если <4000 символов → отправь целиком
- Если 4000-8000 → разбей на 2-3 части
- Если >8000 → предложи альтернативу (файл, gist, ссылку)

Используй `./bin/chunk-message` для автоматической разбивки.
```

### 2. Создание файла вместо сообщения

Для очень длинных ответов (>10000 символов):

```bash
# Сохрани в файл и отправь путь
opencode run "Сохрани полный ответ в /tmp/response.md 
и отправь пользователю: 'Полный ответ: /tmp/response.md'"
```

### 3. Использование GitHub Gist

```bash
# Для кода >5000 символов
opencode run "Создай gist на GitHub и отправь ссылку"
```

## 📊 Практические примеры

### Пример 1: Длинный список файлов

**Плохо:**
```
"Вот все файлы: [5000 строк списком]"  # ❌ Не дойдет
```

**Хорошо:**
```
"Часть 1/3: Файлы A-G [список]
⏳
Часть 2/3: Файлы H-P [список]
⏳
Часть 3/3 (конец): Файлы Q-Z [список]"
```

### Пример 2: Большие изменения кода

**Хорошо:**
```
"Создам несколько файлов для решения:
Часть 1/3: auth.ts (полный код)
⏳
Часть 2/3: api.ts (изменения)
⏳
Часть 3/3 (конец): package.json + инструкция"
```

### Пример 3: Длинное объяснение

**Хорошо:**
```
"Объясню по шагам:
Шаг 1 (часть 1/2): Описание проблемы и анализ
⏳
Шаг 1 (часть 2/2): Первое решение
⏳
Шаг 2: Реализация"
```

## 🛠️ Интеграция в Workflow

### Когда возникает context overflow:

1. **AI генерирует полный ответ** (он существует в памяти)
2. **Проверка длины** → если >4000 символов
3. **Применяется chunk-message** → разбивка на части
4. **Отправка в Telegram** → каждая часть отдельно
5. **User видит полный ответ** → по кускам, но полностью

### Автоматизация через cron:

```json
{
  "name": "telegram-chunker",
  "schedule": {"kind": "every", "everyMs": 60000},
  "payload": {
    "kind": "systemEvent",
    "text": "Проверь очереди длинных сообщений для Telegram"
  }
}
```

## 📝 Шаблоны промптов для AI

### Для кодинга:
```
"Если результат >3000 символов:
- Разбей на логические блоки (файл за файлом)
- Отправь первый блок с: '[Часть 1/X]'
- Каждый блок должен быть РАБОЧИМ кодом
- Между блоками ставь: ⏳
- В конце: '[КОНЕЦ]'"
```

### Для объяснений:
```
"Используй структуру:
📍 Часть 1: Описание
📍 Часть 2: Решение  
📍 Часть 3: Примеры

Каждую часть отправь отдельно с меткой [Часть X/Y]"
```

### Для списков:
```
"Список >100 элементов? Разбей на группы по 20:
Группа 1 (1-20): [список]
⏳
Группа 2 (21-40): [список]"
```

## ⚡ Быстрые команды

```bash
# Проверить длину текста
echo "текст" | wc -c

# Разбить автоматически
./bin/chunk-message "$(cat long_response.txt)"

# Отправить частями
for chunk in $(./bin/chunk-message "длинный текст"); do
  message send "$chunk" channel:telegram
done
```

## 🎯 Best Practices

1. **Предсказывай** — если задача большая, сразу скажи "отправлю по частям"
2. **Нумеруй части** — [Часть 1/3], [Часть 2/3] и т.д.
3. **Разделяй маркером** — ⏳ визуально показывает продолжение
4. **Сохраняй целостность** — не разрывай предложения mid-слове
5. **Альтернативы** — для >15000 символов лучше использовать gist/файлы

## 🔗 Интеграция с OpenClaw

Обнови `TOOLS.md`:
```markdown
### Telegram Chunking
Если ответ >4000 символов, используй chunk-message скрипт
или разбей вручную с метками [Часть X/Y].
```

---
Created: 2025-01-30
OpenClaw Workspace