{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/akeda-ru/json-schema/akeda-ru-crminbox-line-input-schema.json",
  "title": "CRMInboxLineInput",
  "description": "Создание и правка линии; при правке неуказанное поле не меняется",
  "x-generated": "2026-11-01",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/akeda-ru-openapi.yaml#/components/schemas/CRMInboxLineInput",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "is_active": {
      "type": "boolean"
    },
    "distribution": {
      "type": "string",
      "enum": [
        "round_robin",
        "even",
        "all"
      ]
    },
    "member_ids": {
      "type": "array",
      "items": {
        "type": "integer",
        "format": "int64"
      },
      "maxItems": 200,
      "description": "Очередь сотрудников в порядке распределения"
    },
    "schedule": {
      "$ref": "#/$defs/CRMInboxLineSchedule"
    },
    "off_hours_message": {
      "type": "string",
      "maxLength": 1000
    },
    "off_hours_wait": {
      "type": "boolean"
    },
    "consent_enabled": {
      "type": "boolean"
    },
    "consent_url": {
      "type": "string",
      "maxLength": 2000,
      "description": "Ссылка на документ согласия, http(s)"
    },
    "consent_text": {
      "type": "string",
      "maxLength": 1000
    },
    "transfer_enabled": {
      "type": "boolean",
      "description": "Если сотрудник не ответил за transfer_minutes минут, передать диалог следующему в очереди (в рабочее время, каждому — один раз за обращение)"
    },
    "transfer_minutes": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1440,
      "description": "Через сколько минут без ответа передать следующему"
    },
    "known_client_owner": {
      "type": "boolean",
      "description": "Знакомого клиента (уже есть запись CRM) — сразу ответственному этой записи, минуя очередь"
    },
    "busy_enabled": {
      "type": "boolean",
      "description": "Через busy_minutes минут без ответа отправить клиенту busy_message — один раз за обращение, только в рабочее время"
    },
    "busy_minutes": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1440,
      "description": "Через сколько минут без ответа отправить сообщение «все заняты»"
    },
    "busy_message": {
      "type": "string",
      "maxLength": 1000,
      "description": "Сообщение «все сотрудники заняты»"
    },
    "close_enabled": {
      "type": "boolean",
      "description": "Закрыть диалог, если клиент молчит close_minutes минут после ответа сотрудника"
    },
    "close_minutes": {
      "type": "integer",
      "minimum": 5,
      "maximum": 43200,
      "description": "Сколько минут тишины клиента до закрытия"
    },
    "close_message_enabled": {
      "type": "boolean",
      "description": "Отправить клиенту close_message при закрытии"
    },
    "close_message": {
      "type": "string",
      "maxLength": 1000,
      "description": "Сообщение при закрытии диалога"
    },
    "reopen_mode": {
      "type": "string",
      "enum": [
        "new",
        "return"
      ],
      "description": "Клиент написал после закрытия: new — новое обращение (снова приветствие и очередь); return — прежнему сотруднику, если с закрытия прошло меньше reopen_days дней"
    },
    "reopen_days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 90,
      "description": "Срок возврата прежнему сотруднику, дней"
    },
    "rating_enabled": {
      "type": "boolean",
      "description": "Просить клиента оценить ответ после закрытия: кнопки «👍 Хорошо» и «👎 Плохо» в Telegram, VK и MAX, ответ «1» или «2» в Avito"
    },
    "rating_text": {
      "type": "string",
      "maxLength": 1000,
      "description": "Текст просьбы оценить; пусто — «Оцените, пожалуйста, как мы вам помогли:»"
    },
    "rating_thanks": {
      "type": "string",
      "maxLength": 1000,
      "description": "Ответ на оценку; пусто — «Спасибо за оценку!»"
    },
    "mail_autoreply_enabled": {
      "type": "boolean",
      "description": "Автоответ письмом на новое письмо почты этой линии; не уходит роботам, на автоответы и отчёты о доставке и одному адресу не чаще раза в mail_autoreply_hours часов"
    },
    "mail_autoreply_text": {
      "type": "string",
      "maxLength": 1000,
      "description": "Текст автоответа письмом; вне рабочего времени уходит off_hours_message, если оно задано"
    },
    "mail_autoreply_hours": {
      "type": "integer",
      "minimum": 1,
      "maximum": 720,
      "description": "Не чаще раза в столько часов на один адрес"
    },
    "crm_create": {
      "type": "string",
      "enum": [
        "none",
        "lead",
        "deal",
        "customer"
      ],
      "description": "Работа с CRM: что создать по новому клиенту — none — ничего (менеджер создаст сам из переписки), lead — лид, deal — сделку с клиентом в воронке crm_pipeline_id, customer — только карточку клиента. В режиме работы CRM deals вместо лида заводится сделка"
    },
    "crm_pipeline_id": {
      "type": [
        "string",
        "null"
      ],
      "format": "uuid",
      "description": "Воронка новых сделок; нет — основная воронка"
    },
    "crm_stage_id": {
      "type": [
        "string",
        "null"
      ],
      "format": "uuid",
      "description": "Рабочий этап воронки crm_pipeline_id, на который встаёт сделка; нет — первый рабочий этап"
    },
    "crm_match_contacts": {
      "type": "boolean",
      "description": "Узнавать знакомого клиента по телефону и почте из сообщения во всех каналах, а не только по аккаунту мессенджера"
    },
    "crm_repeat": {
      "type": "string",
      "enum": [
        "open",
        "new",
        "customer"
      ],
      "description": "Знакомый клиент пишет снова: open — в его открытую сделку или лид, если открытых нет — как новый клиент; new — всегда новая сделка (лид в режиме с лидами); customer — только в карточку клиента"
    },
    "crm_owner_mode": {
      "type": "string",
      "enum": [
        "queue",
        "user",
        "first_reply"
      ],
      "description": "Ответственный за новую запись: queue — очередь линии; user — сотрудник crm_owner_id; first_reply — кто первым ответил в чате (до ответа запись числится за первым в очереди)"
    },
    "crm_owner_id": {
      "type": [
        "integer",
        "null"
      ],
      "format": "int64",
      "description": "Ответственный при crm_owner_mode = user"
    },
    "crm_follow_up": {
      "type": "boolean",
      "description": "Ставить ответственному дело «Ответить клиенту» по новому обращению"
    },
    "crm_calendar": {
      "type": "boolean",
      "description": "Дело «Ответить клиенту» — ещё и в календарь ответственного"
    },
    "crm_due_minutes": {
      "type": "integer",
      "enum": [
        15,
        30,
        60,
        120,
        240,
        1440
      ],
      "description": "Через сколько минут срок дела «Ответить клиенту»"
    },
    "crm_default_pipeline": {
      "type": "boolean",
      "description": "Сбросить воронку и этап новых сделок на основную воронку"
    },
    "channel_ids": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/UUID"
      },
      "description": "Полный состав каналов линии; каналы не из списка остаются без линии"
    }
  },
  "$defs": {
    "CRMInboxLineSchedule": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "always",
            "schedule"
          ],
          "description": "always — круглосуточно; schedule — по дням и часам"
        },
        "days": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1,
            "maximum": 7
          },
          "description": "Рабочие дни недели: 1 — понедельник, 7 — воскресенье"
        },
        "from": {
          "type": "string",
          "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
          "description": "Начало рабочего дня, ЧЧ:ММ"
        },
        "to": {
          "type": "string",
          "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
          "description": "Конец рабочего дня, ЧЧ:ММ; меньше начала — смена через полночь"
        },
        "timezone": {
          "type": "string",
          "description": "Часовой пояс IANA, например Europe/Moscow"
        },
        "holidays": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Нерабочие даты каждого года: ММ-ДД или промежуток ММ-ДД:ММ-ДД"
        }
      }
    },
    "UUID": {
      "type": "string",
      "format": "uuid"
    }
  }
}