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

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

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

Запросы к 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, - Сообщение для пользователя
  Message: string  Сообщение для интеграторов
}

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

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

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/menus

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

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

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

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

http://enter.suo.club:82/api/1/config/menus

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

Развернуть
[
  {
    "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/menu?menuType={MenuType}

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

Заголовки

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

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

Параметры

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

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

MenuItem[]

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

GET /api/2/ticketregistration/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/schedule/days?menuLinkId={menuLinkId}&multiplier={multiplier}&ticketId={ticketId}

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

Заголовки

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

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

Параметры

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/schedule/days

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

Заголовки

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

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

Параметры

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/schedule/days/{date}?menuLinkId={menuLinkId}&multiplier={multiplier}&ticketId={ticketId}

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

Заголовки

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

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

Параметры

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

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

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

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

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

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

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

GET /api/2/ticketregistration/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/schedule/slots

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

Заголовки

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

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

Параметры

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

Параметры

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
{
  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

Параметры

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

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

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

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

ReservationInfo

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

POST /api/2/ticketregistration/ticket/book HTTP/1.1
Authorization: ff93a3e5-fb6c-4191-af37-18dd2c56b3a5
Content-Length: 226
Content-Type: application/json
{
  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

Параметры

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
{
  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

Параметры

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

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

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

ReservationInfo

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

POST /api/2/ticketregistration/ticket/alive HTTP/1.1
Authorization: ff93a3e5-fb6c-4191-af37-18dd2c56b3a5
Content-Length: 190
Content-Type: application/json
{
  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: string,
  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": null
  }
]

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": null
}

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

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

Заголовки

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

Content-Type - application/json

Параметры

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": null
}

POST /api/2/ticketregistration/ticket/activate

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

Заголовки

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": null
    }
  ],
  "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": null
}

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

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

Заголовки

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

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

Параметры

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

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

TicketSummary

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

GET /api/2/ticketregistration/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": null
}

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/312.png

Тип ServerInfo

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


Тип 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": // не используется
  "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 – Мbжно активировать

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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