API выдачи талонов на центральном сервере СУО Enter 3.3.7.0 (и выше) v2

Общие сведения

API работает по протоколу HTTP на порту, сконфигурированном для службы центрального сервера СУО (по умолчанию 82).

Запросы к API выполняются через HTTP-методы GET/POST.

Тело ответа имеет формат JSON, кодировку UTF-8.

Доступ к API возможен в двух случаях:
  1. Запрос выполняется с HTTP-заголовком Token, в котором указывается токен вашей системы, выданный вам администратором центрального сервера СУО. Если токен некорректный, сервер вернет ответ с HTTP-статусом 401 Unauthorized.

  2. Запрос (без заголовка Token). Если в конфигурации СУО отключена возможность выполнять запросы без заголовка Token, сервер вернет ответ с HTTP-статусом 401 Unauthorized.

Формат ответа об ошибке

Ответ об ошибке приходит с HTTP-статусом 4xx или 5xx в теле ответа приходит объект ErrorResponse.
  • Ответ с HTTP-статусом 4xx означает, что, вероятно, проблема на стороне интегратора или клиента.

  • Ответ с HTTP-статусом 5xx означает, что проблема произошла не по вине клиента или интегратора, и нужно обратится к владельцам системы с текстом ошибки.

Примечание

Если приходит UserMessage, то его обязательно нужно показать клиенту, если его нет, можно сказать общим планом, что что-то пошло не так. Если приходит Message, значит интегратору нужно обратить на него внимание, если его нет, то никак не нужно реагировать

ErrorResponse {
  "UserMessage": string, // cообщение для пользователя
  "Message": string // cообщение для интеграторов
}

Пример ответа на непринятый запрос

POST /api/1/ticketregistration/login/userTest HTTP/1.1
Token: a0adba90-b8a7-4fcd-9f73-787ae2eed727
Content-Length: 0
Host: center.suo.club:82

HTTP/1.1 401 Unauthorized
Content-Length: 138
Content-Type: application/json; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
Access-Control-Allow-Origin: *
Date: Fri, 07 Jun 2019 10:01:21 GMT
{
  "UserMessage": null,
  "Message": "Внешняя система с токеном a0adba90-b8a7-4fcd-9f73-787ae2eed727 не найдена."
}

GET /api/1/config/servers

Возвращает список филиалов центрального сервера СУО.

Формат ответа

ServerInfo[]

Пример запроса

http://center.suo.club:82/api/1/config/servers

Пример ответа

Развернуть
[
  {
    "Id": "51943aec-de2b-2bb8-d6aa-889ab434d9ca",
    "Name": "30 лет Победы",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "Тюменский филиал №3  ГАУ ТО \"МФЦ\"",
    "OrganizationFullName": "Тюменский филиал №3  ГАУ ТО \"МФЦ\"",
    "OrganizationAddress": "Тюменская обл., г. Тюмень, ул. 30 лет Победы, 95, корпус 2"
  },
  {
    "Id": "80c42d23-f32a-d57f-61eb-8292129f4ba7",
    "Name": "Армизонское",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "Армизонский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationFullName": "Армизонский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationAddress": "Тюменская обл., с. Армизонское, ул. Ленина, 5"
  },
  {
    "Id": "1991f64a-df2a-7995-a2ae-07d4f0b004de",
    "Name": "Аромашево",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "Аромашевский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationFullName": "Аромашевский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationAddress": "Тюменская обл., с. Аромашево, ул. Ленина, 166"
  },
  {
    "Id": "b085aff9-5a47-5c15-f7a4-5a7f1392fea0",
    "Name": "Бердюжье",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "Бердюжский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationFullName": "Бердюжский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationAddress": "Тюменская обл., с. Бердюжье, ул. Ленина, 27а"
  },
  {
    "Id": "78e721bb-c691-7d58-1db5-97882ad01310",
    "Name": "Водопроводная",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "ГАУ ТО \"МФЦ\"",
    "OrganizationFullName": "ГАУ ТО \"МФЦ\"",
    "OrganizationAddress": "Тюменская обл., г. Тюмень, ул. Водопроводная, 12"
  },
  {
    "Id": "2a5cc6b9-a6e8-cd50-29d9-4378e4233912",
    "Name": "Исетское",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "Исетский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationFullName": "Исетский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationAddress": "Тюменская обл., с. Исетское, ул. Механизаторов, 23, стр. 3"
  },
  {
    "Id": "6402a0d8-f5ba-de52-3f95-a87282ec3e63",
    "Name": "Ишим",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "Ишимский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationFullName": "Ишимский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationAddress": "Тюменская обл., г. Ишим, ул. Карла Маркса, 57"
  },
  {
    "Id": "9e6bbd29-37b4-3bf2-e43a-a0b0f252bbdf",
    "Name": "Казанское",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "Казанский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationFullName": "Казанский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationAddress": "Тюменская обл., с. Казанское, ул. Ленина, 12"
  },
  {
    "Id": "d00965d4-9b55-8a99-1e48-97ed543e47da",
    "Name": "М.Горького",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "Дополнительный офис приема и выдачи документов (ул. Максима Горького)",
    "OrganizationFullName": "Дополнительный офис приема и выдачи документов (ул. Максима Горького)",
    "OrganizationAddress": "Тюменская обл., г. Тюмень, ул. Максима Горького, 74, 76"
  },
  {
    "Id": "6b8dffbb-e0d7-19c4-5df5-94044bb6533b",
    "Name": "Нижняя Тавда",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "Нижнетавдинский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationFullName": "Нижнетавдинский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationAddress": "Тюменская обл., с. Нижняя Тавда, ул. Ульянова, 5"
  },
  {
    "Id": "b69f83f1-083c-e786-e611-23fe556420ed",
    "Name": "Омутинское",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "Омутинский филиал ГАУ ТО МФЦ",
    "OrganizationFullName": "Омутинский филиал ГАУ ТО МФЦ",
    "OrganizationAddress": "Тюменская обл., с. Омутинское, ул. Терешковой, 7"
  },
  {
    "Id": "7696b070-0b80-0cb2-30a7-c3d136c17cba",
    "Name": "Сладково",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "Сладковский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationFullName": "Сладковский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationAddress": "Тюменская обл., с. Сладково, ул. Пушкина, 6, стр. 2"
  },
  {
    "Id": "5c4eb635-d6d1-8efe-dc23-4621f6e24d2f",
    "Name": "Тобольск",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "Тобольский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationFullName": "Тобольский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationAddress": "г. Тобольск, 8-ой микрорайон, дом №32"
  },
  {
    "Id": "16644012-4b10-f2ed-dbba-1b353f59b74f",
    "Name": "Щербакова",
    "IsConnected": true,
    "WrongProtocol": false,
    "OrganizationName": "Тюменский филиал №1 ГАУ ТО \"МФЦ\"",
    "OrganizationFullName": "Тюменский филиал №1 ГАУ ТО \"МФЦ\"",
    "OrganizationAddress": "Тюменская обл., г. Тюмень, ул. Щербакова, д. 98/3"
  },
  {
    "Id": "e15c3f44-0538-9f78-56ff-4771b07d175d",
    "Name": "Этаж 1",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "-",
    "OrganizationFullName": "",
    "OrganizationAddress": "-"
  },
  {
    "Id": "fed76fbb-6a76-2171-61d8-2403663572ae",
    "Name": "Этаж 2",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "-",
    "OrganizationFullName": null,
    "OrganizationAddress": "-"
  },
  {
    "Id": "8074eddd-c64c-3e18-74de-fc79b224a8ed",
    "Name": "Этаж 3",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "-",
    "OrganizationFullName": null,
    "OrganizationAddress": "-"
  },
  {
    "Id": "1cdea4f5-7be1-853f-1869-83f094be32c7",
    "Name": "Юргинское",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "Юргинский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationFullName": "Юргинский филиал ГАУ ТО \"МФЦ\"",
    "OrganizationAddress": "Тюменская обл., с. Юргинское, ул. Восточная, 38"
  },
  {
    "Id": "ba73bcfd-fad9-6fea-939b-09ef35b71e1c",
    "Name": "Ямская",
    "IsConnected": false,
    "WrongProtocol": false,
    "OrganizationName": "Тюменский филиал №2 ГАУ ТО \"МФЦ\"",
    "OrganizationFullName": "Тюменский филиал №2 ГАУ ТО \"МФЦ\"",
    "OrganizationAddress": "Тюменская обл., г. Тюмень, ул. Ямская, д. 57"
  }
]

GET /api/1/config/menus/{serverId}

Возвращает список меню услуг филиала. Меню – иерархическая структура услуг, на которые посетитель может взять талон по записи (записаться) или в живую очередь.

Параметры

serverId - идентификатор филиала из метода /api/1/config/servers

Формат ответа

[
  {
    "Id": Guid, // идентификатор меню
    "Name": string, // название меню
    // неиспользуемые поля не описаны
  }
]

Пример запроса

http://center.suo.club:82/api/1/config/menus/78e721bb-c691-7d58-1db5-97882ad01310

Пример ответа

Развернуть
[
  {
    "Id": "4b299d29-d24b-0976-8e8f-5e0cd860531f",
    "Name": "test-",
    "ServerId": null
  },
  {
    "Id": "c1a87310-a5e4-4130-bff9-1285a67fde27",
    "Name": "Водопроводная",
    "ServerId": "78e721bb-c691-7d58-1db5-97882ad01310"
  },
  {
    "Id": "2ac14fbc-b68b-87a9-b2d6-8146e1475a12",
    "Name": "Меню с сококом",
    "ServerId": null
  },
  {
    "Id": "02f41482-5cac-df8c-6fa6-9ad49dcf938a",
    "Name": "Новое меню",
    "ServerId": null
  },
  {
    "Id": "00501659-f054-423d-6654-025140f5e7e9",
    "Name": "Новое меню2",
    "ServerId": null
  },
  {
    "Id": "08fa63eb-3372-6279-7425-20fd7aaa3a1f",
    "Name": "Новое меню333",
    "ServerId": null
  },
  {
    "Id": "41ba4fcb-dd4f-c7e5-bf48-17ee90e4a08d",
    "Name": "Новое менюьт",
    "ServerId": null
  },
  {
    "Id": "3a6c96e4-4eca-428f-b5e8-62bf85bdad2b",
    "Name": "Общее меню",
    "ServerId": null
  },
  {
    "Id": "670ca395-245f-c7d3-98ab-9273896a2fd6",
    "Name": "Тестовое меню с маршрутом для копирования",
    "ServerId": "78e721bb-c691-7d58-1db5-97882ad01310"
  },
  {
    "Id": "4a52f97e-8f76-5b46-2786-3d390c9eaaf0",
    "Name": "Тюмень Только предварловка",
    "ServerId": null
  }
]

POST /api/2/ticketregistration/session/open

Открывает сеанс (если указан VisitorIdentity, то сеанс будет привязан к нему).

Заголовки

Token (опциональный) - идентификатор внешней системы

Content-Type (опциональный) - application/json

Параметры

VisitorIdentity (опциональный) - идентификатор посетителя (передается как тело запроса)

Формат ответа

Guid – идентификатор сессии

Пример запроса

POST /api/2/ticketregistration/session/open HTTP/1.1
Token: e13de302-bf6c-c5c4-d48f-b6d18d3b2d95
Content-Length: 15
Content-Type: application/json
Host: center.suo.club:82
{VisitorIdentity: "UserIdentity1"}

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 38

"c3347c8d-5532-4007-a23e-78e125dbde6d"

POST /api/2/ticketregistration/session/close

Закрывает сеанс, не сохраняя данные (отменяет действия).

Заголовки

Authorization - идентификатор сессии из метода /session/open

Пример запроса

POST /api/2/ticketregistration/session/close HTTP/1.1
Authorization: 551d47d1-a339-4a95-b1d8-02ff7ff09f23
Content-Length: 0

Пример ответа

HTTP/1.1 200 OK

GET /api/2/ticketregistration/{serverId}/menu?menuType={MenuType}

Возвращает меню услуг филиала.

Заголовки

Token (опциональный) - идентификатор внешней системы

Authorization (опциональный) - идентификатор сессии (если передан данный идентификатор Token, то не используется)

Параметры

serverId - идентификатор филиала из метода /api/1/config/servers

menuType (опциональный) - перечисление MenuType

Формат ответа

MenuItem[]

Пример запроса

GET /api/2/ticketregistration/78e721bb-c691-7d58-1db5-97882ad01310/menu HTTP/1.1
Authorization: 9776f285-9e46-4b7b-8436-052f26aa952f

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 1841
Развернуть
[
  {
    "SubItems": [
      {
        "SubItems": [
          {
            "QueueIsAvailable": true,
            "RecordIsAvailable": false,
            "Multiplier": null,
            "IntegrationId": null,
            "Id": "c136e225-7f0d-63cd-130a-05c1442b0e0f",
            "Name": "Бесплатное предоставление земельных участков гражданам, имеющим трех и более детей…"
          }
        ],
        "Id": "f9b49eb4-ae0a-aff5-c927-492a23635aab",
        "Name": "Администрации муниципальных образований"
      },
      {
        "SubItems": [
          {
            "QueueIsAvailable": true,
            "RecordIsAvailable": false,
            "Multiplier": null,
            "IntegrationId": null,
            "Id": "f9678291-04eb-82e6-242e-43c79376b359",
            "Name": "Выдача заключения (по окончании строительства, реконструкции объекта капитального строительства) о соответствии построенного, реконструированного объекта капитального строительства требованиям технических регламентов (норм и правил), иных нормативных правовых актов и проектной документации, в том числе требованиям энергетической эффективности и требованиям оснащенности приборами учета используемых энергетических ресурсов"
          }
        ],
        "Id": "3733adc8-6b1f-b121-3fa6-ee0f75f4a856",
        "Name": "Главное управление строительства Тюменской области"
      }
    ],
    "Id": "59704c40-5c1b-0a94-1cef-cb9be68f6375",
    "Name": "Общ ."
  },
  {
    "QueueIsAvailable": true,
    "RecordIsAvailable": false,
    "Multiplier": null,
    "IntegrationId": null,
    "Id": "62a02ed3-ebcc-2689-45bd-afd07e8fabd0",
    "Name": "Предварительная запись россрестр."
  }
]

GET /api/2/ticketregistration/menu/{menuId}?menuType={MenuType}

Возвращает меню услуг с указанным идентификатором.

Заголовки

Token (опциональный) - идентификатор внешней системы

Authorization (опциональный) - идентификатор сессии (если передан данный идентификатор Token, то не используется)

Параметры

menuId - идентификатор меню из метода /api/1/config/menus/{serverId}

menuType (опциональный) - перечисление MenuType

Формат ответа

MenuItem[]

Пример запроса

GET /api/2/ticketregistration/menu/02f41482-5cac-df8c-6fa6-9ad49dcf938a HTTP/1.1
Token: e13de302-bf6c-c5c4-d48f-b6d18d3b2d95

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 1841
Развернуть
[
  {
    "SubItems": [
      {
        "SubItems": [
          {
            "QueueIsAvailable": true,
            "RecordIsAvailable": false,
            "Multiplier": null,
            "IntegrationId": null,
            "Id": "c136e225-7f0d-63cd-130a-05c1442b0e0f",
            "Name": "Бесплатное предоставление земельных участков гражданам, имеющим трех и более детей…"
          }
        ],
        "Id": "f9b49eb4-ae0a-aff5-c927-492a23635aab",
        "Name": "Администрации муниципальных образований"
      },
      {
        "SubItems": [
          {
            "QueueIsAvailable": true,
            "RecordIsAvailable": false,
            "Multiplier": null,
            "IntegrationId": null,
            "Id": "f9678291-04eb-82e6-242e-43c79376b359",
            "Name": "Выдача заключения (по окончании строительства, реконструкции объекта капитального строительства) о соответствии построенного, реконструированного объекта капитального строительства требованиям технических регламентов (норм и правил), иных нормативных правовых актов и проектной документации, в том числе требованиям энергетической эффективности и требованиям оснащенности приборами учета используемых энергетических ресурсов"
          }
        ],
        "Id": "3733adc8-6b1f-b121-3fa6-ee0f75f4a856",
        "Name": "Главное управление строительства Тюменской области"
      }
    ],
    "Id": "59704c40-5c1b-0a94-1cef-cb9be68f6375",
    "Name": "Общ ."
  },
  {
    "QueueIsAvailable": true,
    "RecordIsAvailable": false,
    "Multiplier": null,
    "IntegrationId": null,
    "Id": "62a02ed3-ebcc-2689-45bd-afd07e8fabd0",
    "Name": "Предварительная запись россрестр."
  }
]


GET /api/2/ticketregistration/available/servers/{menuLinkIds}

Возвращает список филиалов, в которых могут оказать услуги (по правам доступа, но не опираясь на график работы).

Заголовки

Token (опциональный) - идентификатор внешней системы

Authorization (опциональный) - идентификатор сессии (если передан данный идентификатор Token, то не используется)

Параметры

menuLinkIds - список идентификаторов элементов меню (услуг) через «,»

Формат ответа

ServerInfo[]

Пример запроса

GET /api/2/ticketregistration/available/servers/f25115a2-8897-e124-e90d-ec4fa98d8414 HTTP/1.1
Token: e13de302-bf6c-c5c4-d48f-b6d18d3b2d95

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 315
[
  {
    "Id": "78e721bb-c691-7d58-1db5-97882ad01310",
    "Name": "DEV-Водопроводная",
    "IsConnected": true,
    "WrongProtocol": false,
    "OrganizationName": "ГАУ ТО \"МФЦ\"",
    "OrganizationFullName": "ГАУ ТО \"МФЦ\"",
    "OrganizationAddress": "г. Тюмень, ул. Союзная, 82",
    "IntegrationId": "testApiId"
  }
]

GET /api/2/ticketregistration/{serverId}/schedule/days?menuLinkId={menuLinkId}&multiplier={multiplier}&ticketId={ticketId}

Возвращает дни, в которые доступна предварительная запись для указанной услуги.

Заголовки

Token (опциональный) - идентификатор внешней системы

Authorization (опциональный) - идентификатор сессии (если передан данный идентификатор Token, то не используется)

Параметры

serverId - идентификатор филиала из метода /api/1/config/servers

menuLinkId - идентификатор элемента меню (услуги), на который необходимо записаться

multiplier (опциональный) - значение множителя – количество дел по услуге, на которое необходимо записаться. Запрашивается у посетителя в соответствии с настройками в меню. По умолчанию – 1

ticketId (опциональный) - идентификатор талона. Необходимо указывать при регистрации мульти-талона

Формат ответа

[
  {
    "Year": int, // год
    "Months": [ // месяцы года
      {
        "Month": int, // номер месяца (1-12)
        "Days": [ // дни месяца
          {
              "Day": int, // день месяца (1-31)
              "IsFree": bool // свободен ли день для предварительной записи на указанную услугу
          }
        ]
      }
    ]
  }
]

Пример запроса

GET /api/2/ticketregistration/78e721bb-c691-7d58-1db5-97882ad01310/schedule/days?menuLinkId=f25115a2-8897-e124-e90d-ec4fa98d8414 HTTP/1.1
Authorization: ff93a3e5-fb6c-4191-af37-18dd2c56b3a5

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 1352
Развернуть
[
  {
    "Year": 2023,
    "Months": [
      {
        "Month": 10,
        "Days": [
          {
            "Day": 20,
            "IsFree": false
          },
          {
            "Day": 21,
            "IsFree": true
          },
          {
            "Day": 23,
            "IsFree": true
          },
          {
            "Day": 24,
            "IsFree": true
          },
          {
            "Day": 25,
            "IsFree": true
          },
          {
            "Day": 26,
            "IsFree": true
          },
          {
            "Day": 27,
            "IsFree": true
          },
          {
            "Day": 28,
            "IsFree": true
          },
          {
            "Day": 30,
            "IsFree": true
          },
          {
            "Day": 31,
            "IsFree": true
          }
        ]
      },
      {
        "Month": 11,
        "Days": [
          {
            "Day": 1,
            "IsFree": true
          },
          {
            "Day": 2,
            "IsFree": true
          },
          {
            "Day": 3,
            "IsFree": true
          },
          {
            "Day": 4,
            "IsFree": true
          },
          {
            "Day": 6,
            "IsFree": true
          },
          {
            "Day": 7,
            "IsFree": true
          },
          {
            "Day": 8,
            "IsFree": true
          },
          {
            "Day": 9,
            "IsFree": true
          },
          {
            "Day": 10,
            "IsFree": true
          },
          {
            "Day": 11,
            "IsFree": true
          },
          {
            "Day": 13,
            "IsFree": true
          },
          {
            "Day": 14,
            "IsFree": true
          },
          {
            "Day": 15,
            "IsFree": true
          },
          {
            "Day": 16,
            "IsFree": true
          },
          {
            "Day": 17,
            "IsFree": true
          },
          {
            "Day": 18,
            "IsFree": true
          },
          {
            "Day": 20,
            "IsFree": true
          },
          {
            "Day": 21,
            "IsFree": true
          },
          {
            "Day": 22,
            "IsFree": true
          },
          {
            "Day": 23,
            "IsFree": true
          },
          {
            "Day": 24,
            "IsFree": true
          },
          {
            "Day": 25,
            "IsFree": true
          },
          {
            "Day": 27,
            "IsFree": true
          },
          {
            "Day": 28,
            "IsFree": true
          },
          {
            "Day": 29,
            "IsFree": true
          },
          {
            "Day": 30,
            "IsFree": true
          }
        ]
      },
      {
        "Month": 12,
        "Days": [
          {
            "Day": 1,
            "IsFree": true
          },
          {
            "Day": 2,
            "IsFree": true
          },
          {
            "Day": 4,
            "IsFree": true
          },
          {
            "Day": 5,
            "IsFree": true
          },
          {
            "Day": 6,
            "IsFree": true
          },
          {
            "Day": 7,
            "IsFree": true
          },
          {
            "Day": 8,
            "IsFree": true
          },
          {
            "Day": 9,
            "IsFree": true
          },
          {
            "Day": 11,
            "IsFree": true
          },
          {
            "Day": 12,
            "IsFree": true
          },
          {
            "Day": 13,
            "IsFree": true
          },
          {
            "Day": 14,
            "IsFree": true
          },
          {
            "Day": 15,
            "IsFree": true
          },
          {
            "Day": 16,
            "IsFree": true
          },
          {
            "Day": 18,
            "IsFree": true
          }
        ]
      }
    ]
  }
]

POST /api/2/ticketregistration/{serverId}/schedule/days

Возвращает дни, в которые доступна предварительная запись для указанного маршрута.

Заголовки

Token (опциональный) - идентификатор внешней системы

Authorization (опциональный) - идентификатор сессии (если передан данный идентификатор Token, то не используется)

Параметры

serverId - идентификатор филиала из метода /api/1/config/servers

Route - объект типа RequestedRoute

TicketId (опциональный) - идентификатор талона. Необходимо указывать при регистрации мульти-талона

Формат данных запроса

{
  Route: RequestedRoute,
  TicketId?: Guid
}

Формат ответа

[
  {
    "Year": int, // год
    "Months": [ // месяцы года
      {
        "Month": int, // номер месяца (1-12)
        "Days": [ // дни месяца
          {
              "Day": int, // день месяца (1-31)
              "IsFree": bool // свободен ли день для предварительной записи на указанную услугу
          }
        ]
      }
    ]
  }
]

Пример запроса

POST /api/2/ticketregistration/78e721bb-c691-7d58-1db5-97882ad01310/schedule/days HTTP/1.1
Authorization: ff93a3e5-fb6c-4191-af37-18dd2c56b3a5
Content-Length: 191
Content-Type: application/json
{
  Route:[
    [
      {
        MenuLinkId:"f25115a2-8897-e124-e90d-ec4fa98d8414"
      },
      {
        MenuLinkId:"78e721bb-c691-7d58-1db5-97882ad01310"
      }
    ]
  ],
}

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 1352
Развернуть
[
  {
    "Year": 2023,
    "Months": [
      {
        "Month": 10,
        "Days": [
          {
            "Day": 20,
            "IsFree": false
          },
          {
            "Day": 21,
            "IsFree": true
          },
          {
            "Day": 23,
            "IsFree": true
          },
          {
            "Day": 24,
            "IsFree": true
          },
          {
            "Day": 25,
            "IsFree": true
          },
          {
            "Day": 26,
            "IsFree": true
          },
          {
            "Day": 27,
            "IsFree": true
          },
          {
            "Day": 28,
            "IsFree": true
          },
          {
            "Day": 30,
            "IsFree": true
          },
          {
            "Day": 31,
            "IsFree": true
          }
        ]
      },
      {
        "Month": 11,
        "Days": [
          {
            "Day": 1,
            "IsFree": true
          },
          {
            "Day": 2,
            "IsFree": true
          },
          {
            "Day": 3,
            "IsFree": true
          },
          {
            "Day": 4,
            "IsFree": true
          },
          {
            "Day": 6,
            "IsFree": true
          },
          {
            "Day": 7,
            "IsFree": true
          },
          {
            "Day": 8,
            "IsFree": true
          },
          {
            "Day": 9,
            "IsFree": true
          },
          {
            "Day": 10,
            "IsFree": true
          },
          {
            "Day": 11,
            "IsFree": true
          },
          {
            "Day": 13,
            "IsFree": true
          },
          {
            "Day": 14,
            "IsFree": true
          },
          {
            "Day": 15,
            "IsFree": true
          },
          {
            "Day": 16,
            "IsFree": true
          },
          {
            "Day": 17,
            "IsFree": true
          },
          {
            "Day": 18,
            "IsFree": true
          },
          {
            "Day": 20,
            "IsFree": true
          },
          {
            "Day": 21,
            "IsFree": true
          },
          {
            "Day": 22,
            "IsFree": true
          },
          {
            "Day": 23,
            "IsFree": true
          },
          {
            "Day": 24,
            "IsFree": true
          },
          {
            "Day": 25,
            "IsFree": true
          },
          {
            "Day": 27,
            "IsFree": true
          },
          {
            "Day": 28,
            "IsFree": true
          },
          {
            "Day": 29,
            "IsFree": true
          },
          {
            "Day": 30,
            "IsFree": true
          }
        ]
      },
      {
        "Month": 12,
        "Days": [
          {
            "Day": 1,
            "IsFree": true
          },
          {
            "Day": 2,
            "IsFree": true
          },
          {
            "Day": 4,
            "IsFree": true
          },
          {
            "Day": 5,
            "IsFree": true
          },
          {
            "Day": 6,
            "IsFree": true
          },
          {
            "Day": 7,
            "IsFree": true
          },
          {
            "Day": 8,
            "IsFree": true
          },
          {
            "Day": 9,
            "IsFree": true
          },
          {
            "Day": 11,
            "IsFree": true
          },
          {
            "Day": 12,
            "IsFree": true
          },
          {
            "Day": 13,
            "IsFree": true
          },
          {
            "Day": 14,
            "IsFree": true
          },
          {
            "Day": 15,
            "IsFree": true
          },
          {
            "Day": 16,
            "IsFree": true
          },
          {
            "Day": 18,
            "IsFree": true
          }
        ]
      }
    ]
  }
]

GET /api/2/ticketregistration/{serverId}/schedule/days/{date}?menuLinkId={menuLinkId}&multiplier={multiplier}&ticketId={ticketId}

Возвращает список временных точек (слотов), доступных для предварительной записи в указанную дату.

Заголовки

Token (опциональный) - идентификатор внешней системы

Authorization (опциональный) - идентификатор сессии (если передан данный идентификатор Token, то не используется)

Параметры

serverId - идентификатор филиала из метода /api/1/config/servers

date - дата предполагаемой предварительной записи в формате «дд.мм.гггг»

menuLinkId - идентификатор элемента меню (услуги), на который необходимо записаться

multiplier (опциональный) - значение множителя – количество дел по услуге, на которое необходимо записаться. Запрашивается у посетителя в соответствии с настройками в меню. По умолчанию – 1

ticketId (опциональный) - идентификатор талона. Необходимо указывать при регистрации мульти-талона

Формат ответа

[ // список слотов записи
  {
    "Id": string // идентификатор таймслота
    "Hour": int, // часы (0-23)
    "Minutes": int, // минуты (0-59)
    "IsFree": bool, // свободно ли данное время для записи на указанную услугу
  }
]

Пример запроса

GET /api/2/ticketregistration/78e721bb-c691-7d58-1db5-97882ad01310/schedule/days/18.12.2023?menuLinkId=f25115a2-8897-e124-e90d-ec4fa98d8414 HTTP/1.1
Authorization: ff93a3e5-fb6c-4191-af37-18dd2c56b3a5

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 2589
Развернуть
[
  {
    "Id": "2F1550143104E115",
    "Hour": 8,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "BD2775159036C414",
    "Hour": 8,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "AA4B8436965A3537",
    "Hour": 9,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "4C69CD7D07787C7C",
    "Hour": 9,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "471C505F1D0DE15E",
    "Hour": 9,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "E5C1BC068CD00D07",
    "Hour": 9,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "7A6E6237027FD336",
    "Hour": 10,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "18F9A7419FE81640",
    "Hour": 10,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "F51D8A04630C3B05",
    "Hour": 10,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "1CBE2A37B9AF9B36",
    "Hour": 10,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "5F37CC11EB267D10",
    "Hour": 11,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "2C67FC0CEF764D0D",
    "Hour": 11,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "35824308E793F209",
    "Hour": 11,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "832DA959623C1858",
    "Hour": 11,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "B7A7FB7047B64A71",
    "Hour": 12,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "7802364687138747",
    "Hour": 12,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "281416322606A733",
    "Hour": 12,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "F0B21F00EDA0AE01",
    "Hour": 12,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "5568A763797A1662",
    "Hour": 13,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "706FD73B4B7D663A",
    "Hour": 13,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "CC90ED3086825C31",
    "Hour": 13,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "27C1040A7ED3B50B",
    "Hour": 13,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "26FDBF7C4EEF0E7D",
    "Hour": 14,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "07CCE15970DE5058",
    "Hour": 14,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "BD202D503B329C51",
    "Hour": 14,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "E2DDBC2777CF0D26",
    "Hour": 14,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "19891F50BD9BAE51",
    "Hour": 15,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "4CEAC678FFF87779",
    "Hour": 15,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "0567CE42C7757F43",
    "Hour": 15,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "8979FC07586B4D06",
    "Hour": 15,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "578EB550B79C0451",
    "Hour": 16,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "0BA59436E4B72537",
    "Hour": 16,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "80229A317E302B30",
    "Hour": 16,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "FB13F657F6004756",
    "Hour": 16,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "3242E2102E515311",
    "Hour": 17,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "900BD54EBB18644F",
    "Hour": 17,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "C20CE05EF81F515F",
    "Hour": 17,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "A9A0A00EE0B3110F",
    "Hour": 17,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "A471DD3EFC626C3F",
    "Hour": 18,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "A83B432FCF28F22E",
    "Hour": 18,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "27CA9B3451D92A35",
    "Hour": 18,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "607C711CE56FC01D",
    "Hour": 18,
    "Minute": 45,
    "IsFree": true
  }
]

POST /api/2/ticketregistration/{serverId}/schedule/slots

Возвращает список временных точек (слотов), доступных для предварительной записи в указанную дату.

Заголовки

Token (опциональный) - идентификатор внешней системы

Authorization (опциональный) - идентификатор сессии (если передан данный идентификатор Token, то не используется)

Параметры

serverId - идентификатор филиала из метода /api/1/config/servers

Date - дата предполагаемой предварительной записи в формате «дд.мм.гггг»

Route - объект типа RequestedRoute

TicketId (опциональный) - идентификатор талона. Необходимо указывать при регистрации мульти-талона

Формат запроса

{
  Date: строка формата dd.mm.yyyy,
  Route: RequestedRoute,
  TicketId?: Guid
}

Формат ответа

[ // список слотов записи
  {
    "Id": string // идентификатор таймслота
    "Hour": int, // часы (0-23)
    "Minutes": int, // минуты (0-59)
    "IsFree": bool, // свободно ли данное время для записи на указанную услугу
  }
]

Пример запроса

POST /api/2/ticketregistration/78e721bb-c691-7d58-1db5-97882ad01310/schedule/slots HTTP/1.1
Authorization: ff93a3e5-fb6c-4191-af37-18dd2c56b3a5
Content-Length: 215
Content-Type: application/json
{
  Date:"18.12.2023",
  Route: [
    [
      {
        MenuLinkId:"f25115a2-8897-e124-e90d-ec4fa98d8414"
      },
      {
        MenuLinkId:"78e721bb-c691-7d58-1db5-97882ad01310"
      }
    ]
  ]
}

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 2589
Развернуть
[
  {
    "Id": "2F1550143104E115",
    "Hour": 8,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "BD2775159036C414",
    "Hour": 8,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "AA4B8436965A3537",
    "Hour": 9,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "4C69CD7D07787C7C",
    "Hour": 9,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "471C505F1D0DE15E",
    "Hour": 9,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "E5C1BC068CD00D07",
    "Hour": 9,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "7A6E6237027FD336",
    "Hour": 10,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "18F9A7419FE81640",
    "Hour": 10,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "F51D8A04630C3B05",
    "Hour": 10,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "1CBE2A37B9AF9B36",
    "Hour": 10,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "5F37CC11EB267D10",
    "Hour": 11,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "2C67FC0CEF764D0D",
    "Hour": 11,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "35824308E793F209",
    "Hour": 11,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "832DA959623C1858",
    "Hour": 11,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "B7A7FB7047B64A71",
    "Hour": 12,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "7802364687138747",
    "Hour": 12,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "281416322606A733",
    "Hour": 12,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "F0B21F00EDA0AE01",
    "Hour": 12,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "5568A763797A1662",
    "Hour": 13,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "706FD73B4B7D663A",
    "Hour": 13,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "CC90ED3086825C31",
    "Hour": 13,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "27C1040A7ED3B50B",
    "Hour": 13,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "26FDBF7C4EEF0E7D",
    "Hour": 14,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "07CCE15970DE5058",
    "Hour": 14,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "BD202D503B329C51",
    "Hour": 14,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "E2DDBC2777CF0D26",
    "Hour": 14,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "19891F50BD9BAE51",
    "Hour": 15,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "4CEAC678FFF87779",
    "Hour": 15,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "0567CE42C7757F43",
    "Hour": 15,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "8979FC07586B4D06",
    "Hour": 15,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "578EB550B79C0451",
    "Hour": 16,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "0BA59436E4B72537",
    "Hour": 16,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "80229A317E302B30",
    "Hour": 16,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "FB13F657F6004756",
    "Hour": 16,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "3242E2102E515311",
    "Hour": 17,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "900BD54EBB18644F",
    "Hour": 17,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "C20CE05EF81F515F",
    "Hour": 17,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "A9A0A00EE0B3110F",
    "Hour": 17,
    "Minute": 45,
    "IsFree": true
  },
  {
    "Id": "A471DD3EFC626C3F",
    "Hour": 18,
    "Minute": 0,
    "IsFree": true
  },
  {
    "Id": "A83B432FCF28F22E",
    "Hour": 18,
    "Minute": 15,
    "IsFree": true
  },
  {
    "Id": "27CA9B3451D92A35",
    "Hour": 18,
    "Minute": 30,
    "IsFree": true
  },
  {
    "Id": "607C711CE56FC01D",
    "Hour": 18,
    "Minute": 45,
    "IsFree": true
  }
]

POST /api/2/ticketregistration/ticket/book

Предварительная запись на получение услуги.

Заголовки

Authorization - идентификатор сессии

Content-Type - application/json

Параметры

ServerId - идентификатор филиала из метода /api/1/config/servers

TimeSlotId - идентификатор слота времени из метода /schedule/days/

MenuLinkId - дентификатор элемента меню (услуги), на который необходимо записаться

Multiplier (опциональный) - значение множителя – количество дел по услуге, на которое необходимо записаться. Запрашивается у посетителя в соответствии с настройками в меню. По умолчанию – 1.

TicketId (опциональный) - идентификатор талона. Необходимо указывать при регистрации мульти-талона

Формат ответа

ReservationInfo

Пример запроса

POST /api/2/ticketregistration/ticket/book HTTP/1.1
Authorization: ff93a3e5-fb6c-4191-af37-18dd2c56b3a5
Content-Length: 139
Content-Type: application/json
{
  ServerId:"78e721bb-c691-7d58-1db5-97882ad01310",
  TimeSlotId:"2F1550143104E115",
  MenuLinkId:"f25115a2-8897-e124-e90d-ec4fa98d8414"
}

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 422
{
  "TicketId": "3cd43946-a040-4699-9b5e-a8580c8faf8d",
  "Products": [
    {
      "Id": "8099e1cd-03ec-42ad-b6a4-a0956e78b96d",
      "Product": {
        "Id": "a64adadc-0727-8829-3d58-cdcb361108c4",
        "Name": "mfc38_Тест",
        "IntegrationId": null
      }
    }
  ],
  "ReservationId": "4a39dcf5-ea2e-48a6-a020-2fd7f70da824",
  "RequestedFields": [
    {
      "Required": true,
      "Mask": "+7(999) 999 99 99",
      "RegularExpression": "",
      "Id": "02a5d8fc-16a4-48a8-b389-9c145f544901",
      "Name": "Телефон"
    }
  ]
}

POST /api/2/ticketregistration/ticket/book/route

Предварительная запись на получение услуги.

Заголовки

Authorization - идентификатор сессии

Content-Type - application/json

Параметры

ServerId - идентификатор филиала из метода /api/1/config/servers

TimeSlotId - идентификатор слота времени из метода /schedule/days/

Route - объект типа RequestedRoute

TicketId (опциональный) - идентификатор талона. Необходимо указывать при регистрации мульти-талона

Формат ответа

ReservationInfo

Пример запроса

POST /api/2/ticketregistration/ticket/book HTTP/1.1
Authorization: ff93a3e5-fb6c-4191-af37-18dd2c56b3a5
Content-Length: 277
Content-Type: application/json
{
  ServerId:"78e721bb-c691-7d58-1db5-97882ad01310",
  TimeSlotId:"2F1550143104E115",
  Route:[
    [
      {
        MenuLinkId:"f25115a2-8897-e124-e90d-ec4fa98d8414"
      },
      {
        MenuLinkId:"78e721bb-c691-7d58-1db5-97882ad01310"
      }
    ]
  ]
}

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 422
{
  "TicketId": "3cd43946-a040-4699-9b5e-a8580c8faf8d",
  "Products": [
    {
      "Id": "8099e1cd-03ec-42ad-b6a4-a0956e78b96d",
      "Product": {
        "Id": "a64adadc-0727-8829-3d58-cdcb361108c4",
        "Name": "mfc38_Тест",
        "IntegrationId": null
      }
    }
  ],
  "ReservationId": "4a39dcf5-ea2e-48a6-a020-2fd7f70da824",
  "RequestedFields": [
    {
      "Required": true,
      "Mask": "+7(999) 999 99 99",
      "RegularExpression": "",
      "Id": "02a5d8fc-16a4-48a8-b389-9c145f544901",
      "Name": "Телефон"
    }
  ]
}

POST /api/2/ticketregistration/ticket/alive

Выдача талона в живую очередь.

Заголовки

Authorization - идентификатор сессии

Content-Type - application/json

Параметры

ServerId - идентификатор филиала из метода /api/1/config/servers

MenuLinkId - дентификатор элемента меню (услуги), на который необходимо записаться

Multiplier (опциональный) - значение множителя – количество дел по услуге, на которое необходимо записаться. Запрашивается у посетителя в соответствии с настройками в меню. По умолчанию – 1

TicketId (опциональный) - идентификатор талона. Необходимо указывать при регистрации мульти-талона

Формат ответа

ReservationInfo

Пример запроса

POST /api/2/ticketregistration/ticket/alive HTTP/1.1
Authorization: ff93a3e5-fb6c-4191-af37-18dd2c56b3a5
Content-Length: 106
Content-Type: application/json
{
  ServerId:"78e721bb-c691-7d58-1db5-97882ad01310",
  MenuLinkId:"cc03cf22-29bc-2199-681f-61fcf4e63b31"
}

Пример ответа

HTTP/1.1 200 OK
Content-Length: 422
{
  "TicketId": "acd43946-a040-4699-9b5e-a8580c8faf8d",
  "Products": [
    {
      "Id": "a099e1cd-03ec-42ad-b6a4-a0956e78b96d",
      "Product": {
        "Id": "a64adadc-0727-8829-3d58-cdcb361108c4",
        "Name": "mfc38_Тест",
        "IntegrationId": null
      }
    }
  ],
  "ReservationId": "aa39dcf5-ea2e-48a6-a020-2fd7f70da824",
  "RequestedFields": [
    {
      "Required": true,
      "Mask": "+7(999) 999 99 99",
      "RegularExpression": "",
      "Id": "02a5d8fc-16a4-48a8-b389-9c145f544901",
      "Name": "Телефон"
    }
  ]
}

POST /api/2/ticketregistration/ticket/alive/route

Выдача талона в живую очередь.

Заголовки

Authorization - идентификатор сессии

Content-Type - application/json

Параметры

ServerId - идентификатор филиала из метода /api/1/config/servers

Route - объект типа RequestedRoute

TicketId (опциональный) - идентификатор талона. Необходимо указывать при регистрации мульти-талона

Формат ответа

ReservationInfo

Пример запроса

POST /api/2/ticketregistration/ticket/alive HTTP/1.1
Authorization: ff93a3e5-fb6c-4191-af37-18dd2c56b3a5
Content-Length: 241
Content-Type: application/json
{
  ServerId:"78e721bb-c691-7d58-1db5-97882ad01310",
  Route:[
    [
      {
        MenuLinkId:"f25115a2-8897-e124-e90d-ec4fa98d8414"
      },
      {
        MenuLinkId:"78e721bb-c691-7d58-1db5-97882ad01310"
      }
    ]
  ]
}

Пример ответа

HTTP/1.1 200 OK
Content-Length: 422
{
  "TicketId": "acd43946-a040-4699-9b5e-a8580c8faf8d",
  "Products": [
    {
      "Id": "a099e1cd-03ec-42ad-b6a4-a0956e78b96d",
      "Product": {
        "Id": "a64adadc-0727-8829-3d58-cdcb361108c4",
        "Name": "mfc38_Тест",
        "IntegrationId": null
      }
    }
  ],
  "ReservationId": "aa39dcf5-ea2e-48a6-a020-2fd7f70da824",
  "RequestedFields": [
    {
      "Required": true,
      "Mask": "+7(999) 999 99 99",
      "RegularExpression": "",
      "Id": "02a5d8fc-16a4-48a8-b389-9c145f544901",
      "Name": "Телефон"
    }
  ]
}

POST /api/2/ticketregistration/fields/add

Добавляет дополнительные сведению к резерву из метода /ticket/alive или /ticket/book.

Заголовки

Authorization - идентификатор сессии

Content-Type - application/json

Параметры

ReservationId - идентификатор резерва из метода /ticket/alive или /ticket/book

DataFields - данные о посетителе. Запрашиваются в соответствии результата резерва ReservationInfo

Ответ Forbidden

Ответ, содержащий уточнение, какие поля нужно ввести (список может расширяться). Нужно запросить недостающие поля у пользователя, и выполнить запрос на добавление.

{
  ReservationId: Guid // идентификатор резерва
  RequestedFields: RequestedField[] // поля доп. сведений, которые нужно запросить у пользователя (список расширяется, у пользователя можно спросить только новые поля, но прислать нужно все)
}

Или может прийти стандартная структура ошибки

{
  UserMessage?: sting,
  Message": string
}

Пример запроса

POST /api/2/ticketregistration/fields/add HTTP/1.1
Authorization: ff93a3e5-fb6c-4191-af37-18dd2c56b3a5
Content-Length: 153
Content-Type: application/json
{
  ReservationId:"4a39dcf5-ea2e-48a6-a020-2fd7f70da824",
  DataFields:[
  {
    FieldId:"02a5d8fc-16a4-48a8-b389-9c145f544901",
    Value:"77777777777"
  }]
}

Пример ответа

HTTP/1.1 200 OK
Content-Length: 0

POST /api/2/ticketregistration/ticket/reservation/cancel

Отменяет резерв.

Заголовки

Authorization - идентификатор сессии

Content-Type - application/json

Параметры

ReservationId - идентификатор резерва (передается в теле запроса)

Пример запроса

POST /api/2/ticketregistration/ticket/reservation/cancel HTTP/1.1
Authorization: ff93a3e5-fb6c-4191-af37-18dd2c56b3a5
Content-Length: 55
Content-Type: application/json
{ReservationId:"9be16f28-cb36-4694-96ac-2e1651a901c9"}

Пример ответа

HTTP/1.1 200 OK
Content-Length: 0

POST /api/2/ticketregistration/session/confirm

Применяет все изменения в рамках сессии (в том числе подтверждает талоны с резервами и выполняет отмену талонов).

Заголовки

Authorization - идентификатор сессии

Формат ответа

TicketSummary[] // список измененных талонов

Пример запроса

POST /api/2/ticketregistration/session/confirm HTTP/1.1
Authorization: 681d200a-0053-4e90-8cc3-f5b60dfd99a1
Content-Length: 0

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 648
Развернуть
[
  {
    "Id": "7c959019-323b-4051-9f02-08a89c939877",
    "FullNumber": "П3",
    "PinCode": "533240",
    "State": 1,
    "Products": [
      {
        "State": 13,
        "StartTime": "2023-12-18T08:30:00",
        "Fields": [
          {
            "Id": "566ff62a-0c85-48e3-ac76-88cffc3fe201",
            "Value": "77777777777",
            "Field": {
              "Id": "02a5d8fc-16a4-48a8-b389-9c145f544901",
              "Name": "Телефон"
            }
          }
        ],
        "Id": "bdc271a9-ffcb-4991-af3a-0378f64078bc",
        "Product": {
          "Id": "a64adadc-0727-8829-3d58-cdcb361108c4",
          "Name": "mfc38_Тест",
          "IntegrationId": null
        }
      }
    ],
    "ActivationAvailability": {
      "State": 2,
      "ErrorMessage": "Талон записан не на сегодня",
      "ShowQuestionBeforeActivation": null
    },
    "ServerId": "78e721bb-c691-7d58-1db5-97882ad01310"
  }
]

POST /api/2/ticketregistration/ticket/cancel

Отменяет талон (в реальности отмена будет в момент вызова метода session/confirm).

Заголовки

Authorization - идентификатор сессии

Content-Type - application/json

Параметры

TicketId - идентификатор талона (передается в теле запроса)

Формат ответа

TicketSummary // талон, который будет отменен при сохранении транзакции

Пример запроса

POST /api/2/ticketregistration/ticket/cancel HTTP/1.1
Authorization: 536ab141-3963-4b55-b502-231e5f277a1f
Content-Length: 49
Content-Type: application/json
{TicketId:"5d70594a-617c-45be-8002-174d225e0725"}

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 646
Развернуть
{
  "Id": "80dae8bc-67a6-4a92-9640-5d415fc88641",
  "FullNumber": "П5",
  "PinCode": "837253",
  "State": 1,
  "Products": [
    {
      "State": 13,
      "StartTime": "2023-12-22T08:30:00",
      "Fields": [
        {
          "Id": "39741fea-bc5b-4ae3-a262-87a716161109",
          "Value": "77777777777",
          "Field": {
            "Id": "02a5d8fc-16a4-48a8-b389-9c145f544901",
            "Name": "Телефон"
          }
        }
      ],
      "Id": "5fbb1a60-809d-4a0d-8fe3-d38a351cfa70",
      "Product": {
        "Id": "a64adadc-0727-8829-3d58-cdcb361108c4",
        "Name": "mfc38_Тест",
        "IntegrationId": null
      }
    }
  ],
  "ActivationAvailability": {
    "State": 2,
    "ErrorMessage": "Талон записан не на сегодня",
    "ShowQuestionBeforeActivation": null
  },
  "ServerId": "78e721bb-c691-7d58-1db5-97882ad01310"
}

POST /api/2/ticketregistration/ticket/products/cancel

Отменяет услугу в талоне (в реальности отмена будет выполнена в момент вызова метода session/confirm).

Заголовки

Authorization - идентификатор сессии

Content-Type - application/json

Параметры

TicketProductId - TicketProductId идентификатор услуги в талоне (передается в теле запроса)

Формат ответа

TicketSummary // талон, в котором будет отменена услуга при сохранении транзакции

Пример запроса

POST /api/2/ticketregistration/ticket/products/cancel HTTP/1.1
Authorization: 536ab141-3963-4b55-b502-231e5f277a1f
Content-Length: 56
Content-Type: application/json
{TicketProductId:"f3aa2e9b-09d6-46f9-8de3-dde9df9a6951"}

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 646
Развернуть
{
  "Id": "a81da124-8bae-4cc4-ac17-a0a59db2cd05",
  "FullNumber": "П8",
  "PinCode": "558136",
  "State": 1,
  "Products": [
    {
      "State": 13,
      "StartTime": "2023-12-22T08:30:00",
      "Fields": [
        {
          "Id": "c14f55db-bdac-43b9-956d-af9e3e0b74ad",
          "Value": "77777777771",
          "Field": {
            "Id": "02a5d8fc-16a4-48a8-b389-9c145f544901",
            "Name": "Телефон"
          }
        }
      ],
      "Id": "f3aa2e9b-09d6-46f9-8de3-dde9df9a6951",
      "Product": {
        "Id": "a64adadc-0727-8829-3d58-cdcb361108c4",
        "Name": "mfc38_Тест",
        "IntegrationId": null
      }
    }
  ],
  "ActivationAvailability": {
    "State": 2,
    "ErrorMessage": "Талон записан не на сегодня",
    "ShowQuestionBeforeActivation": null
  },
  "ServerId": "78e721bb-c691-7d58-1db5-97882ad01310"
}

POST /api/2/ticketregistration/ticket/activate

Активирует талон.

Заголовки

Authorization - идентификатор сессии

Content-Type - application/json

Параметры

TicketId - идентификатор талона

InviteAsLive (опциональный) - True – согласен на вызов, раньше времени записи, по умолчанию false

DenyEarlyActivation (опциональный) - True – запретить раннюю активацию, по умолчанию false

Формат ответа

TicketSummary

Пример запроса

POST /api/2/ticketregistration/ticket/products/cancel HTTP/1.1
Authorization: 536ab141-3963-4b55-b502-231e5f277a1f
Content-Length: 56
Content-Type: application/json
{TicketId:"f3aa2e9b-09d6-46f9-8de3-dde9df9a6951"}

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 520
{
  "Id": "66147379-759e-4251-84d9-4f115e88e9ff",
  "FullNumber": "П22",
  "PinCode": "391141",
  "State": 1,
  "Products": [
    {
      "State": 2,
      "StartTime": "2023-10-24T21:45:00",
      "Fields": [],
      "Id": "a9dc316d-9dfa-4643-aa8e-b64c29788d97",
      "Product": {
        "Id": "7cb16dfc-7f4c-1603-b428-eba438cba3ce",
        "Name": "Тестовая услуга для МИС",
        "IntegrationId": null
      }
    }
  ],
  "ActivationAvailability": {
    "State": 5,
    "ErrorMessage": "Талон уже активирован",
    "ShowQuestionBeforeActivation": null
  },
  "ServerId": "78e721bb-c691-7d58-1db5-97882ad01310"
}

GET /api/2/ticketregistration/tickets?offset={offset}&limit={limit}

Возвращает список талонов для аутентифицированного пользователя, упорядоченных по времени создания.

Заголовки

Authorization - идентификатор сессии

Параметры

offset (опциональный) - смещение с начала списка

limit (опциональный) - максимальное количество возвращаемых талонов

Формат ответа

{
  AllCount: int // общее количество талонов пользователя,
  Items: TicketSummary[] // список запрошенных талонов пользователя
}

Пример запроса

GET /api/2/ticketregistration/tickets?limit=20 HTTP/1.1
Authorization: ad5a73c6-7b25-41ea-b328-656663b2ec06

Пример ответа

HTTP/1.1 200 OK
Content-Length: 585
Content-Type: application/json; charset=utf-8
{
  "Items": [
    {
      "Id": "63086f1e-030a-4721-bf1e-6273dda3d013",
      "FullNumber": "П1",
      "PinCode": "868561",
      "State": 1,
      "Products": [
        {
          "State": 13,
          "StartTime": "2023-10-25T08:00:00",
          "Fields": [],
          "Id": "3099889a-3be0-47fa-96cd-101f8a7e1451",
          "Product": {
            "Id": "8bfe3823-b54c-73e6-d8d5-772d8bce5200",
            "Name": "Внесудебное банкротство физических лиц",
            "IntegrationId": null
          }
        }
      ],
      "ActivationAvailability": {
        "State": 2,
        "ErrorMessage": "Талон записан не на сегодня",
        "ShowQuestionBeforeActivation": null
      },
      "ServerId": "5fe4b4c8-7851-0a8a-6466-0aba938b6aad"
    }
  ],
  "AllCount": 1
}

GET /api/2/ticketregistration/tickets/{ticketId}

Получение информации о талоне.

Заголовки

Token (опциональный) - идентификатор внешней системы

Authorization (опциональный) - идентификатор сессии (если передан данный идентификатор, Token не используется)

Параметры

ticketId - идентификатор талона предварительной записи

Формат ответа

TicketSummary

Пример запроса

GET /api/2/ticketregistration/tickets/63086f1e-030a-4721-bf1e-6273dda3d013 HTTP/1.1
Authorization: ad5a73c6-7b25-41ea-b328-656663b2ec06

Пример ответа

HTTP/1.1 200 OK
Content-Length: 705
Content-Type: application/json; charset=utf-8
{
  "Id": "63086f1e-030a-4721-bf1e-6273dda3d013",
  "FullNumber": "П1",
  "PinCode": "868561",
  "State": 1,
  "Products": [
    {
      "State": 13,
      "StartTime": "2023-10-25T08:00:00",
      "Fields": [
        {
          "Id": "b7048d52-0e12-4689-83cb-9698765ada64",
          "Value": "77777777771",
          "Field": {
            "Id": "1a41499f-238b-5bfb-31a1-727c26ef3431",
            "Name": "Фамилия"
          }
        }
      ],
      "Id": "3099889a-3be0-47fa-96cd-101f8a7e1451",
      "Product": {
        "Id": "8bfe3823-b54c-73e6-d8d5-772d8bce5200",
        "Name": "Внесудебное банкротство физических лиц",
        "IntegrationId": null
      }
    }
  ],
  "ActivationAvailability": {
    "State": 2,
    "ErrorMessage": "Талон записан не на сегодня",
    "ShowQuestionBeforeActivation": null
  },
  "ServerId": "5fe4b4c8-7851-0a8a-6466-0aba938b6aad"
}

GET /api/2/ticketregistration/{serverId}/tickets/ticketByPinCode/{pinCode}

Получение информации о талоне.

Заголовки

Token (опциональный) - идентификатор внешней системы

Authorization (опциональный) - идентификатор сессии (если передан данный идентификатор, Token не используется)

Параметры

serverId - идентификатор филиала, на котором будет искаться талон

pinCode - пин-код талона

Формат ответа

TicketSummary

Пример запроса

GET /api/2/ticketregistration/5fe4b4c8-7851-0a8a-6466-0aba938b6aad/tickets/ticketByPinCode/868561 HTTP/1.1
Authorization: ad5a73c6-7b25-41ea-b328-656663b2ec06

Пример ответа

HTTP/1.1 200 OK
Content-Length: 723
Content-Type: application/json; charset=utf-8
{
  "Id": "f4bd7163-2777-44e0-b9f9-e1a12e1928bf",
  "FullNumber": "M12",
  "PinCode": "884054",
  "State": 1,
  "Products": [
    {
      "State": 3,
      "StartTime": "2023-10-24T17:55:52.6552251",
      "Fields": [],
      "Id": "be790d63-f42f-4078-81f2-b05d196cd25e",
      "Product": {
        "Id": "7cb16dfc-7f4c-1603-b428-eba438cba3ce",
        "Name": "Тестовая услуга для МИС",
        "IntegrationId": null
      }
    },
    {
      "State": 13,
      "StartTime": "2023-10-24T22:15:00",
      "Fields": [],
      "Id": "e0988502-5b97-4d19-9021-e8b06bba8015",
      "Product": {
        "Id": "7cb16dfc-7f4c-1603-b428-eba438cba3ce",
        "Name": "Тестовая услуга для МИС",
        "IntegrationId": null
      }
    }
  ],
  "ActivationAvailability": {
    "State": 0,
    "ErrorMessage": null,
    "ShowQuestionBeforeActivation": false
  },
  "ServerId": "78e721bb-c691-7d58-1db5-97882ad01310"
}

GET /api/2/ticketregistration/tickets/{ticketId}/ticketpng?scale={scale}

Получение талона в виде изображения для печати.

Если талон привязан к пользователю, требуется передать Authorization пользователя, полученный в методе openSession.

Заголовки

Token (опциональный) - идентификатор внешней системы

Authorization (опциональный) - идентификатор сессии (если передан данный идентификатор, Token не используется)

Параметры

ticketId - идентификатор талона

scale (опциональный) - коэффициент масштабирования изображения от 0.01 до 30. По умолчанию 1 (96 dpi, для отображения на экране)

Формат ответа

изображение в формате PNG

Пример запроса

GET /api/2/ticketregistration/tickets/1d34af10-62cf-4315-a828-01dc8de3a53a/ticketpng HTTP/1.1
Authorization: 161e44c1-89a1-472a-aa1f-bd6b40297961

Пример ответа

../_images/311.png

Тип ServerInfo

{
  Id: Guid, // идентификатор филиала
  Name: string, // короткое название в конфигурации
  IsConnected: bool, // подключен ли филиал к центральному серверу
  WrongProtocol: bool, // подключен ли филиал к центральному серверу c некорректным номером протокола. Если true, то взаимодействовать с таким филиалом нельзя
  OrganizationName: string, // наименование организации
  OrganizationFullName: string, // полное наименование организации
  OrganizationAddress: string, // адрес организации
  IntegrationId?: string // идентификатор для интеграции
}


RequestedRoute

Пользовательский маршрут.

[
  [
    {
       LinkId:Guid, идентификатор из Тип MenuItem
       Multiplier?:byte  опциональный параметр, мультипликатор
    }
  ]
]

Тип Multiplier

Информация о том, нужно ли запросить у посетителя множитель (количество дел) при взятии талона на эту услугу.

{
  "Title": string, // заголовок поля для посетителя (обычно «Количество дел»)
  "Limit": int, // максимальное значение множителя, которое может указать посетитель
}

Если у услуги присутствует свойство Multiplier, то после выбора услуги нужно запросить у посетителя множитель («Количество дел»). Допустимые значения – от 1 до Limit включительно. Указанное посетителем значение нужно использовать в методах получения дней и точек (слотов) предварительной записи, а также в методах взятия талона как параметр multiplier.

Если у услуги свойство Multiplier – null, множитель у посетителя запрашивать не нужно.

Когда посетитель берет талон на услугу и указывает несколько дел, то создается мульти-талон с указанным количеством услуг. Все услуги в талоне идут непрерывно друг за другом.



Тип ReservationInfo

{
  ReservationId: Guid // идентификатор резерва
  TicketId: Guid, // идентификатор талона
  Products: ReservationProduct[], // зарезервированные услуги
  RequestedFields: RequestedField[] // поля доп. Сведений, который нужно запросить у пользователя
}

Тип ReservationProduct

{
  Id: Guid // идентификатор услуги в талоне
  Product: Product // Информации об услуге
}

Тип FieldInfo

{
  Id: Guid, // идентификатор поля
  Name: string, // название поля (для посетителя)
}

Тип RequestedField : FieldInfo

Поле дополнительных сведений о посетителе.

{
  Mask: string, // маска для ввода
  RegularExpression: string, // регулярное выражение, которому должно соответствовать вводимое посетителем значение поля
  Required: bool, // является ли поле обязательным для заполнения
}

Тип Product

{
  Id: Guid, // идентификатор услуги
  Name: string, // название услуги
  IntegrationId?: string // идентификатор услуги для интеграции
}

Тип TicketSummary

Талон.

{
  "Id": Guid, // идентификатор талона
  "FullNumber": string, // номер талона (префикс + номер)
  "PinCode": string, // пин-код талона в формате 000000
  "State": int, // состояние талона из перечисления TicketState
  "Products": [ // услуги в талоне
    {
      "Id": Guid, // идентификатор услуги в талоне
      "Product": Product,
      "State": int, // состояние услуги в талоне из перечисления TicketProductState
      "StartTime": string, // дата и время записи в формате «YYYY-MM-DDThh:mm:ss»,
      "Fields": DataFieldSummary[], // поля доп. сведений
    }
  ],
  "ServerId": Guid, // идентификатор филиала
  "ActivationAvailability": {
      "State": ActivationAvailabilityState,
      "ErrorMessage": string, // в случае, когда активация невозможна, здесь указана причина
     "ShowQuestionBeforeActivation": bool // нужно ли при активации спросить посетителя «Пригласить вас заранее, если будет возможность?»
  }
}

Тип DataFieldSummary

{
  Id: Guid,
  Value: string, // значение доп. сведение
  Field: FieldInfo // Информация о поле доп. сведений
}

Тип Stage

{
  Products: string // услуги в этапе (порядок не определен)
}

Тип StageProduct

{
  Product: Product,
  Priority:Priority
}

Перечисление Priority

0 – Низкий

1 – Нормальный

2 – Высокий


Перечисление TicketState

0 – Новый талон, еще создаваемый в терминале

1 – Талон, владелец которого ожидает в очереди хотя бы по одной из услуг

2 – Талон, владелец которого приглашен или обслуживается по одной из услуг в талоне

3 – Талон, владелец которого не ожидает в очереди ни по одной из услуг

4 – Мульти-талон, владелец которого обслужился по одной из услуг и еще не начал обслуживаться по остальным услугам у того же оператора (посетитель удерживается оператором, чтобы посетителя не вызвал кто-то другой)


Перечисление TicketProductState

0 – Зарезервирован

1 – Резерв отменен

2 – Предварительная запись

3 – В очереди

4 – Приглашен

5 – Обслуживается

6 – В персональной очереди

7 – Не явился

8 – Перенаправлен

9 – Обслужен (услуга оказана)

10 – Отменен

12 – Не явился, вызовут повторно

13 – Предварительная запись (не активирован)

14 – Отменен (не был активирован)

15 – Обслуживание еще недоступно

16 – Подтвержден

17 – Услуга не оказана


Перечисление ActivationAvailabilityState

0 – Можно активировать

1 – Нельзя активировать, так как это талон в живую очередь

2 – Нельзя активировать, так как это талон не на сегодняшний день

3 – Нельзя активировать, так как талон не подтвержден

4 – Нельзя активировать по причине того, что талон не требует активацию

5 – Нельзя активировать, талон уже был активирован

6 – Нельзя активировать, так как не наступило время, за которое его можно активировать

7 – Нельзя активировать, так как вышло время активации

8 – Талон отменен


Варианты использования

С авторизацией посетителя

В данном случае СУО будет знать о всех талонах посетителя, а также будет возможность получить список талонов посетителя методом /api/2/ticketregistration/tickets?offset={offset}&limit={limit}.

Предупреждение

Посетитель – это посетитель, а не сотрудник организации.

Без авторизации посетителя

В данном случае СУО не будет знать о всех талонах посетителя, не будет возможности получить список талонов. В этом случае системе нужно самой запоминать идентификаторы талонов для дальнейшего взаимодействия.

Изменение записи

  1. session/open – открываем сеанс

  2. ticket/cancel – отменяем талон

  3. {serverId}/menu – получаем меню, для выбора услуги

  4. {serverId}/schedule/days – получаем доступные дни для ПЗ

  5. {serverId}/schedule/days/{date} – получаем доступные слоты записи

  6. ticket/book – резервируем время записи

  7. если запрашивались доп. сведение добавляем их fields/add

  8. при необходимости повторяем шаги 3 – 7 (можно сначало выполнить шаги 3 – 6 несколько раз, а потом на каждый резерв выполнить fields/add, тем самым можно с агрегировать список запрашиваемых полей, и один раз запросить у пользователя)

  9. session/confirm – подтвердили отмену талона, и выдачу нового талона