API выдачи талонов на филиале/автономном сервере СУО Enter 3.3.7.0 (и выше)¶
Общие сведения¶
API работает по протоколу HTTP на порту, сконфигурированном для службы центрального сервера СУО (по умолчанию 80).
Запросы к API выполняются через HTTP-методы GET/POST.
Тело ответа имеет формат JSON, кодировку UTF-8.
- Доступ к API возможен в двух случаях:
Запрос выполняется с HTTP-заголовком Token, в котором указывается токен вашей системы, выданный вам администратором центрального сервера СУО. Если токен некорректный, сервер вернет ответ с HTTP-статусом 401 Unauthorized.
Запрос (без заголовка 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 не найдена."
}
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
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
}
]
}
]
}
]
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
Пример ответа
Тип 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 – Услуга не оказана
Варианты использования¶
С авторизацией посетителя¶
В данном случае СУО будет знать о всех талонах посетителя, а также будет возможность получить список талонов посетителя методом /api/2/ticketregistration/tickets?offset={offset}&limit={limit}.
Предупреждение
Посетитель – это посетитель, а не сотрудник организации.
Без авторизации посетителя¶
В данном случае СУО не будет знать о всех талонах посетителя, не будет возможности получить список талонов, в этом случае системе нужно самой запоминать идентификаторы талонов для дальнейшего взаимодействия.
Изменение записи¶
session/open – открываем сеанс
ticket/cancel – отменяем талон
menu – получаем меню, для выбора услуги
schedule/days – получаем доступные дни для ПЗ
schedule/days/{date} – получаем доступные слоты записи
ticket/book – резервируем время записи
если запрашивались доп. сведения, добавляем их fields/add
при необходимости повторяем шаги 3 – 7 (можно сначала выполнить шаги 3 – 6 несколько раз, затем на каждый резерв выполнить fields/add, и тем самым агрегировать список запрашиваемых полей и один раз запросить у пользователя)
session/confirm – подтвердили отмену талона и выдачу нового талона