Темный режим

API Import Workflow

1. Обзор workflow

Workflow для импорта сотрудников с обработкой данных и интеграцией с внешним API.

Названиеapi-import
База данныхPostgreSQL (employees, departments)
Основные функцииИмпорт сотрудников, обработка данных, создание/обновление записей

2. Employee Import Workflow

Полный процесс импорта данных сотрудника с обработкой и проверкой.

Цепочка выполнения:

  1. When Executed by Another Workflow

    Триггер, запускаемый другим workflow. Принимает данные сотрудника в формате:

    {
      "Фамилия": "Ростонская",
      "Имя": "Полина",
      "Отчество": "Андреевна",
      "Должность": "Главный специалист",
      "Отдел": "Сектор поддержки начинающих предпринимателей...",
      "Город": "Санкт-Петербург",
      "Дата рождения": 37419,
      "Дата приема на работу": 45194,
      "Пол": "женский",
      "Email": "rostonskaya@crpp.ru",
      "Телефон": 79626812567,
      "Telegram": "polinarostonskaya",
      "companyId": 70,
      "token": "87d2a6f7-2cfd-4136-9281-8020ffb16ebe"
    }
  2. Edit Fields8

    Преобразует входящие данные в стандартные поля:

    lastName = $json['Фамилия']
    firstName = $json['Имя']
    middleName = $json['Отчество']
    role = $json['Должность']
    departmentName = $json['Отдел']
    city = $json['Город']
    birthDate = $json['Дата рождения']
    hireDate = $json['Дата приема на работу']
    gender = $json['Пол']
    email = $json.Email
    phone = $json['Телефон']
    Telegram = $json['Telegram']
    companyId = $json.companyId
    token = $json.token
  3. Code

    Выполняет сложную обработку данных:

    Функции обработки:

    1. format_date - преобразует даты из различных форматов:
      • Поддерживает Excel-формат (число дней с 1900-01-01)
      • Распознает форматы: xxxx.xx.xx, xx.xx.xxxx, xxxx-xx-xx, xx/xx/xxxx
      • Возвращает дату в формате YYYY-MM-DD
    2. format_gender - нормализует пол:
      • Приводит к значениям "male" или "female"
      • Распознает: "м", "муж", "жен", "женский" и др.
    3. generate_department_sql - генерирует SQL для отдела:
      • Проверяет существование отдела
      • Создает отдел если не существует
      • Возвращает departmentId в любом случае

    Пример сгенерированного SQL для отдела:

    WITH existing_department AS (
        SELECT "departmentId"
        FROM departments
        WHERE "companyId" = 70 AND "name" = 'Сектор поддержки...'
    ),
    inserted_department AS (
        INSERT INTO departments ("companyId", "name")
        SELECT 70, 'Сектор поддержки...'
        WHERE NOT EXISTS (
            SELECT 1 FROM existing_department
        )
        RETURNING "departmentId"
    )
    SELECT "departmentId" FROM existing_department
    UNION ALL
    SELECT "departmentId" FROM inserted_department;
  4. Параллельные операции:

    1. Postgres (department)

      Выполняет сгенерированный SQL для получения departmentId:

      {{ $json.generated_sql }}
    2. Postgres1 (employee check)

      Проверяет существование сотрудника:

      SELECT 
          COALESCE(
              (SELECT "userId" FROM employees 
               WHERE email = $1 AND "companyId" = $2 LIMIT 1),
              NULL
          ) AS "userId";

      Параметры: email и companyId

  5. Merge

    Объединяет результаты:

    • Основные данные сотрудника
    • departmentId из Postgres
    • userId (если существует) из Postgres1
  6. If

    Проверяет наличие userId:

    Условие: $json.userId пустое

    Определяет, нужно ли создавать нового сотрудника или обновлять существующего.

  7. Ветка 1 (новый сотрудник):

    1. create employee

      Отправляет POST-запрос к API:

      POST https://api.hroom.ai/webhook/employees/create
      Headers:
        Authorization: {{ $json.token }}
      
      Body:
      {
        "lastName": "{{ $json.lastName }}",
        "firstName": "{{ $json.firstName }}",
        "middleName": "{{ $json.middleName }}",
        "role": "{{ $json.role }}",
        "city": "{{ $json.city }}",
        "birthDate": "{{ $json.birthDate }}",
        "hireDate": "{{ $json.hireDate }}",
        "gender": "{{ $json.gender }}",
        "phone": "{{ $json.phone }}",
        "email": "{{ $json.email }}",
        "telegram": "{{ $json.Telegram }}",
        "companyId": "{{ $json.companyId }}",
        "departmentId": "{{ $json.departmentId }}",
        "status": "active"
      }
  8. Ветка 2 (обновление сотрудника):

    1. update employee

      Отправляет POST-запрос к API:

      POST https://api.hroom.ai/webhook/employees/update
      Headers:
        Authorization: {{ $json.token }}
      
      Body:
      {
        "lastName": "{{ $json.lastName }}",
        "firstName": "{{ $json.firstName }}",
        "middleName": "{{ $json.middleName }}",
        "role": "{{ $json.role }}",
        "city": "{{ $json.city }}",
        "birthDate": "{{ $json.birthDate }}",
        "hireDate": "{{ $json.hireDate }}",
        "gender": "{{ $json.gender }}",
        "phone": "{{ $json.phone }}",
        "email": "{{ $json.email }}",
        "telegram": "{{ $json.Telegram }}",
        "companyId": "{{ $json.companyId }}",
        "departmentId": "{{ $json.departmentId }}",
        "status": "active",
        "userId": "{{ $json.userId }}"
      }

Особенности обработки данных:

  • Даты: автоматическое преобразование из Excel-формата и других форматов
  • Отделы: автоматическое создание при отсутствии
  • Пол: нормализация к стандартным значениям
  • Проверка: определение существующего сотрудника по email и companyId