API SDK
Кратко
Для интеграций можно использовать fetch SDK @aisenler/sdk-fetch. Пакет генерируется из публичной OpenAPI-спецификации и дает клиент AiSenlerClient с группами API как свойствами объекта.
Установка
Устанавливайте фиксированную версию, чтобы сборки были воспроизводимыми:
npm install github:SenlerBot/Senler-io-sdk#v0.1.6
Для последнего коммита из main можно использовать:
npm install github:SenlerBot/Senler-io-sdk
SDK требует Node.js 18+ или другое окружение с глобальным fetch.
Базовый вызов
import { AiSenlerClient } from "@aisenler/sdk-fetch";
const client = new AiSenlerClient({
accessToken: "access_token",
});
const project = await client.projects.getMe();
Методы принимают параметры одним объектом в camelCase. Например:
const agents = await client.agents.list({
projectId: "project_id",
xSessionId: "session_id",
limit: 20,
});
В версии 0.1.6 группы для работы с сегментами называются client.segments и client.segmentsPublic. Прежние названия client.leadGroups и client.leadGroupsPublic больше не используются. В правилах назначения агента поле также называется segmentId в параметрах SDK и segment_id в JSON API.
const segments = await client.segments.getSegments({ projectId });
Оператор проекта
Если сотрудник пишет через внешний аккаунт, чат или канал, который система видит как обычного отправителя, интеграция может отметить соответствующего лида или пространство как «Оператор проекта»:
PATCH /api/leads/{leadId}/project-operator
Content-Type: application/json
{"is_project_operator": true}
PATCH /api/spaces/{spaceId}/project-operator
Content-Type: application/json
{"is_project_operator": true}
Для лида нужны права на управление лидами, для пространства - права на управление пространствами. Значение false снимает отметку. Она не выдаёт доступ к проекту: её единственная задача - сообщить автоматизации, что новые сообщения и нажатия кнопок этого отправителя относятся к стороне проекта и не должны запускать агента.
При создании или обновлении агента параметр cancel_pending_response_on_project_operator_message управляет уже начатым ответом. По умолчанию он равен true: если оператор проекта ответил первым, ожидающий AI-ответ отменяется. При значении false ответ может прийти после сообщения оператора. Для изменения опубликованного агента обновите его черновик и опубликуйте новую версию.
Пользовательский сценарий, выбор нужной сущности и безопасная проверка разобраны в статье Оператор проекта и ответы агента.
Актуальная сборка мобильного приложения
Публичный запрос без токена возвращает текущую сборку iPhone, доступную внешним тестировщикам в TestFlight:
GET /api/mobile-app-releases/ios
Пример ответа с доступной сборкой:
{
"platform": "ios",
"version_name": "1.8",
"build_number": "9",
"source_uploaded_at": "2026-07-15T12:00:00.000Z",
"expires_at": "2026-10-13T12:00:00.000Z",
"synced_at": "2026-07-16T00:00:00.000Z"
}
В ответе есть платформа, версия, номер сборки, дата загрузки, дата окончания доступности и время последнего обновления данных. Пока актуальная сборка недоступна, поля версии и дат могут быть null; это нормальный ответ, а не причина подставлять устаревшее значение вручную. Запрос возвращает сведения о сборке, но не ссылку установки: пользователь открывает TestFlight из окна загрузки мобильного приложения в кабинете.
OAuth token refresh
Если интеграция использует OAuth и хранит refresh token, передайте refreshToken, clientId и обработчик сохранения новых токенов:
const client = new AiSenlerClient({
accessToken: "access_token",
refreshToken: "refresh_token",
clientId: "client_id",
onTokenRefreshed: (newAccess, newRefresh) => {
saveTokens(newAccess, newRefresh);
},
});
Автообновление включается только когда переданы и refreshToken, и clientId.
График техподдержки
В версии 0.1.6 в клиенте есть группа client.supportSchedules. Через нее разработчик может работать с API графика техподдержки: читать график, менять настройки, создавать и обновлять смены и назначения операторов.
Доступные методы:
getSupportSchedule- получить настройки, смены, назначения и операторов;updateSupportScheduleSettings- включить или выключить учет графика;supportScheduleShifts,updateSupportScheduleShifts,deleteSupportScheduleShifts- создать, изменить или удалить смену;supportScheduleAssignments,updateSupportScheduleAssignments,deleteSupportScheduleAssignments- создать, изменить или удалить назначение.
await client.supportSchedules.updateSupportScheduleSettings({
projectId,
updateSupportScheduleSettingsDto: {
enabled: true,
timezone: "Europe/Moscow",
},
});
await client.supportSchedules.supportScheduleAssignments({
projectId,
createSupportScheduleAssignmentDto: {
projectMemberId,
startsAt: new Date("2026-07-13T09:00:00+03:00"),
endsAt: new Date("2026-07-13T18:00:00+03:00"),
},
});
Поле enabled обязательно при обновлении настроек. Необязательное поле timezone принимает название часового пояса IANA, например Europe/Moscow; в нём график создаётся и показывается в кабинете. У смены задаются название, начало и конец в минутах от начала дня и признак окончания на следующий день; отдельного цвета у смены нет. Для выборки по периоду передавайте from и to вместе. В назначении начало и конец должны содержать смещение часового пояса, а участник должен быть активным оператором техподдержки.
Для операций управления нужны права на управление графиком. Если назначение пересекается с уже существующим интервалом этого же оператора, API вернет понятную ошибку: у оператора уже есть назначение, которое пересекается с выбранным интервалом. В таком случае выберите другой интервал, другого оператора или измените существующее назначение. Отключить признак оператора или удалить участника с текущими либо будущими назначениями нельзя, пока эти назначения не удалены или не перенесены.
Ошибки
Неуспешные HTTP-ответы выбрасывают ResponseError с исходным response.
import { ResponseError } from "@aisenler/sdk-fetch";
try {
await client.projects.getMe();
} catch (error) {
if (error instanceof ResponseError) {
console.log(error.response.status);
}
}
Для диагностики проверьте статус ответа, тело ошибки, права API-ключа или OAuth-токена, выбранный проект и наличие нужного projectId.