# Лента новостей

Публикация постов в Ленте новостей Битрикс24 через API: посты с адресацией отделам и сотрудникам, открытие доступа дополнительным получателям и комментарии.

**Скоуп:** `log` | **Базовый URL:** `https://vibecode.bitrix24.tech/v1` | **Авторизация:** `X-Api-Key`

[Быстрый старт](#быстрый-старт) | [Полный пример](#полный-пример) | [Справочник эндпоинтов](#справочник-эндпоинтов) | [Коды ошибок](#коды-ошибок)

## Разделы документации

- [Посты](/docs/feed/posts) — создание, список, обновление, удаление постов и добавление получателей
- [Комментарии](/docs/feed/comments) — добавление и удаление комментариев к постам

## Быстрый старт

### 1. Опубликуйте пост

```bash
curl -X POST https://vibecode.bitrix24.tech/v1/posts \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Обновление платформы",
    "text": "[b]Вышла новая версия[/b] — поддержка пакетных запросов.",
    "recipients": ["UA"]
  }'
```

Ответ — идентификатор созданного поста и получатели, которым он открыт:

```json
{
  "success": true,
  "data": {
    "id": 512,
    "recipients": ["UA"]
  }
}
```

### 2. Прокомментируйте пост

```bash
curl -X POST https://vibecode.bitrix24.tech/v1/posts/512/comments \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "text": "Отличная новость!" }'
```

Ответ — идентификатор комментария:

```json
{ "success": true, "data": 1024 }
```

### 3. Откройте пост дополнительным получателям

```bash
curl -X POST https://vibecode.bitrix24.tech/v1/posts/512/share \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "recipients": ["DR3", "U5"] }'
```

```json
{ "success": true, "data": true }
```

## Полный пример

Автоматический отчёт в ленту: публикация поста, комментарий от интеграции и открытие доступа руководству. Сценарий использует только скоуп `log`.

```javascript
const VIBE_KEY = process.env.VIBE_KEY
const BASE = 'https://vibecode.bitrix24.tech/v1'

async function api(method, path, body = null) {
  const opts = { method, headers: { 'X-Api-Key': VIBE_KEY } }
  if (body) {
    opts.headers['Content-Type'] = 'application/json'
    opts.body = JSON.stringify(body)
  }
  const res = await fetch(`${BASE}${path}`, opts)
  return res.status === 204 ? null : res.json()
}

// 1. Публикуем ежедневный отчёт, адресуя отделу с подотделами
const created = await api('POST', '/posts', {
  title: 'Ежедневный отчёт',
  text: [
    '[b]Итоги дня[/b]',
    '',
    'Закрытых задач: 48',
    'Новых обращений: 12'
  ].join('\n'),
  recipients: ['DR1']
})
const postId = created.data.id
console.log('Пост опубликован, ID:', postId)

// 2. Добавляем комментарий от интеграции
const comment = await api('POST', `/posts/${postId}/comments`, {
  text: 'Отчёт сформирован автоматически интеграцией Вайбкод.'
})
console.log('Комментарий добавлен, ID:', comment.data)

// 3. Открываем отчёт руководству
await api('POST', `/posts/${postId}/share`, { recipients: ['U1'] })

// 4. Проверяем, что пост в ленте
const list = await api('GET', '/posts?limit=5')
console.log('Всего постов:', list.meta.total)
```

## Справочник эндпоинтов

| Метод | Путь | Bitrix24 метод | Описание |
|-------|------|---------------|---------|
| POST | [/v1/posts](/docs/feed/posts/create) | log.blogpost.add | Создать пост |
| GET | [/v1/posts](/docs/feed/posts/list) | log.blogpost.get | Список постов |
| PATCH | [/v1/posts/:id](/docs/feed/posts/update) | log.blogpost.update | Обновить пост |
| DELETE | [/v1/posts/:id](/docs/feed/posts/delete) | log.blogpost.delete | Удалить пост |
| POST | [/v1/posts/:id/share](/docs/feed/posts/share) | log.blogpost.share | Добавить получателей |
| POST | [/v1/posts/:id/comments](/docs/feed/comments/add) | log.blogcomment.add | Добавить комментарий |
| DELETE | [/v1/posts/:id/comments/:commentId](/docs/feed/comments/delete) | log.blogcomment.delete | Удалить комментарий |

## Коды ошибок

### Ошибки ленты

| Код | HTTP | Описание |
|-----|------|---------|
| `SCOPE_DENIED` | 403 | У API-ключа нет скоупа `log` |
| `TOKEN_MISSING` | 401 | У API-ключа не настроены токены доступа |
| `MISSING_PARAMS` | 400 | Не переданы обязательные параметры (`text` для поста или комментария, `recipients` для добавления получателей) |
| `INVALID_LIMIT` | 400 | `limit` вне диапазона 1..50 |
| `INVALID_OFFSET` | 400 | `offset` отрицательный |
| `INVALID_POST_ID` | 400 | `id` поста не является положительным целым |
| `POST_NOT_FOUND` | 404 | Пост не найден или недоступен с этим ключом |
| `POST_NOT_FOUND_OR_INVALID_RECIPIENTS` | 404 | Добавление получателей отклонено: пост не существует или среди получателей есть неверный |
| `INVALID_RECIPIENTS` | 400 | Неверный формат получателей |
| `BITRIX_ACCESS_DENIED` | 403 | Недостаточно прав на пост |
| `COMMENT_NOT_FOUND` | 404 | Комментарий не найден |
| `INVALID_COMMENT_ID` | 400 | `commentId` неверный |
| `COMMENT_ACCESS_DENIED` | 403 | Недостаточно прав на комментарий |
| `DUPLICATE_COMMENT` | 409 | Повторный комментарий с тем же содержимым |

### Системные ошибки

| Код | HTTP | Описание |
|-----|------|---------|
| `MISSING_API_KEY` | 401 | Отсутствует заголовок `X-Api-Key` |
| `INVALID_API_KEY` | 401 | Неверный API-ключ |
| `RATE_LIMITED` | 429 | Превышен лимит запросов |
| `BITRIX_ERROR` | 422 | Битрикс24 вернул ошибку |
| `BITRIX_UNAVAILABLE` | 502 | Портал Битрикс24 недоступен |
| `INTERNAL_ERROR` | 500 | Внутренняя ошибка сервера |

Полный список общих ошибок API — [Ошибки](/docs/errors).

## Смотрите также

- [Посты](/docs/feed/posts)
- [Комментарии](/docs/feed/comments)
- [Ключи и авторизация](/docs/keys-auth)
- [Ошибки](/docs/errors)
