Триггеры

Триггеры в 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 (такой код ответа нам приходит при просроченной сессии).

Назад