API базы знаний

API позволяет синхронизировать текстовые знания напрямую из вашей CMS. Каждый файл набора знаний перезаписывается полностью.

Токен должен иметь scope knowledge_base.

Базовый URL: https://api.apx.chat/api

Перед началом

  • Создайте базу знаний в разделе Настройки -> Ресурсы AI -> База знаний.
  • В настройках канала включите AI оператора и привяжите эту базу.
  • Выпустите токен с scope knowledge_base.

Допустимые форматы и лимиты

  • Расширения: .csv, .htm, .html, .md, .txt, .xml, .json
  • Максимальный размер файла: 20 MB
  • Лимит файлов на канал: 20

Где взять channelId

const url = "https://api.apx.chat/api/external/channels";

const response = await fetch(url, {
  method: "GET",
  headers: {
    "X-Api-Token": "tok_xxxxx",
  },
});

const data = await response.json();
console.log(data);

Подробно: /docs/channels

fileId

fileId - произвольная строка (например slug статьи). Один fileId соответствует одному файлу.

Если хеш загруженного файла совпадает с предыдущей версией, повторная индексация не выполняется.

Получение списка файлов

GET /api/ai-operator/external/channels/{channelId}/knowledge

const url = "https://api.apx.chat/api/ai-operator/external/channels/{channelId}/knowledge";

const response = await fetch(url, {
  method: "GET",
  headers: {
    "X-Api-Token": "tok_xxxxx",
  },
});

const data = await response.json();
console.log(data);

Загрузка или обновление файла

PUT /api/ai-operator/external/channels/{channelId}/knowledge/{fileId}

Запрос должен быть multipart/form-data с полем file.

const url = "https://api.apx.chat/api/ai-operator/external/channels/{channelId}/knowledge/{fileId}";

const formData = new FormData();
formData.append("file", fileInput.files[0]); // fileInput: <input type="file" />

const response = await fetch(url, {
  method: "PUT",
  headers: {
    "X-Api-Token": "tok_xxxxx",
  },
  body: formData,
});

const data = await response.json();
console.log(data);

Ответ возвращает объект загрузки и флаг updated.

Удаление файла

DELETE /api/ai-operator/external/channels/{channelId}/knowledge/{fileId}

const url = "https://api.apx.chat/api/ai-operator/external/channels/{channelId}/knowledge/{fileId}";

const response = await fetch(url, {
  method: "DELETE",
  headers: {
    "X-Api-Token": "tok_xxxxx",
  },
});

const data = await response.json();
console.log(data);

Удаление асинхронное, в ответе возвращается jobId.

Что происходит после загрузки

  • Файл сохраняется в S3 и сверяется по SHA-256 с предыдущей версией.
  • Если контент изменился, старая версия удаляется, новые чанки индексируются в Milvus.
  • В ответе ориентируйтесь на status и processedAt.