мета-данные страницы
Триггеры
Триггеры в Albato используются как способ получения данных из Агбис и передачи их в другие сервисы связок.
Их настройка в целом идентична запросам из настройки авторизации, но есть несколько нюансов. В качестве общего примера рассмотрим настройку на этой команде
Поля
Здесь обычно нужно добавить два поля - startDate и stopDate (название можно поменять), для того, чтобы задать промежуток, за который нужно получить данные. Тип данных - обычно string (см. документацию по команде).
Если в данных нам понадобятся массивы, для них нужно завести "Строковые секции" (на примере этой команды).
В ответе команды есть массивы Srvices и Payments - для них например и заведем секции
Уже внутри секции добавляются поля, которые используются в ней - по аналогии с обычными полями.
Настройка request триггера
- Метод запроса - POST (но смотрим на документацию)
- Content-Type - JSON (для корректной генерации тела);
- Авторизация - выберем нашу авторизацию;
- Поля - заполняем StartDate и StopDate указанными в предыдущем шаге полями;
- Редактировать JS код → preScript - здесь нам нужен код ниже, который заполнит значения startDate и stopDate как промежуток [текущее время минус 5 минут; текущее время], с поправкой на часовой пояс с помощью credential.timezone, который мы указали в полях подключения. На выходе получатся данные того формата, который нужен по нашей документации.
StopDate = new Date(); StopDate.setHours(StopDate.getHours() + parseInt(credential.timezone, 10)); const StartDate = new Date(StopDate.getTime() - 5 * 60 * 1000); // Функция для форматирования даты в "DD.MM.YYYY HH:mm" function formatDate(date) { const day = String(date.getDate()).padStart(2, '0'); const month = String(date.getMonth() + 1).padStart(2, '0'); // месяцы 0-11 const year = date.getFullYear(); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); return `${day}.${month}.${year} ${hours}:${minutes}`; } // Форматируем обе даты data.stopDate = formatDate(StopDate); data.startDate = formatDate(StartDate);
Настройка Response триггера
- Content-Type - JSON (обычно);
- Путь к массиву данных - в данном случае данные приходят в массиве clients. Указываем это и выставляем галочку
- Настройка параметров - ключи, которые находятся в массиве, должны иметь соответствующую галочку "Находится в массиве". А error находится в корне ответа - он не требует этой галочки.
- Редактировать JS код → postScript: данные обычно мы отдаём в UrlEncoded-виде, но Альбато не умеет само осуществлять UrlDecode для JSON-тела данных. Поэтому нужно заполнить скрипт пост-обработки этим кодом:
function decodeData(item) { if (Array.isArray(item)) { // Если это массив, обрабатываем каждый элемент item.forEach(decodeData); } else if (typeof item === 'object' && item !== null) { // Если это объект, проходим по его ключам for (const key in item) { if (Object.prototype.hasOwnProperty.call(item, key)) { const value = item[key]; if (typeof value === 'string') { // Если значение - строка, декодируем ее item[key] = decodeURIComponent(value); } else if (typeof value === 'object' && value !== null) { // Если значение - объект или массив, рекурсивно вызываем функцию decodeData(value); } } } } } // Запускаем декодирование для всего массива data decodeData(data);
Если у нас в ответе есть массивы (как в случае этой команды), для них указывается соответствующее поле сущности, после чего уже для него добавляем ключи из ответа, соответствующие полям строковой секции
Настройка Statuses триггера
Здесь важно добавить ошибку с типом ExpiredToken - именно она даёт сигнал Albato о необходимости сделать запрос на обновление токена
В качестве значения указываем data.error, условие - "равно", значение - 3 (такой код ответа нам приходит при просроченной сессии).