API Выдачи талонов v2

СТАРОЕ

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

API работает по протоколу HTTP на порту, сконфигурированом для службы центрального сервера СУО (по умолчанию 82). Запросы к 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: 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"
}
]

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
  }
]

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
          }
        ]
      },
      {
        "Month": 11,
        "Days": [
          {
            "Day": 1,
            "IsFree": true
          },
          {
            "Day": 2,
            "IsFree": true
          }
        ]
      },
      {
        "Month": 12,
        "Days": [
          {
            "Day": 1,
            "IsFree": true
          },
          {
            "Day": 2,
            "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
  }
]

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/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/fields/add

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

Заголовки

Authorization - Идентификатор сессии
Content-Type - application/json

Параметры

ReservationId - идентификатор резерва из метода /ticket/alive или /ticket/book
DataFields - данные о посетителе. Запрашиваются в соответствии результата резерва ReservationInfo

Ответ Forbidden

  1. Ответ содержащий уточнение, какие поля нужно ввести (список может расширится)

Нужно запросить недостающие поля у пользователя, и выполнить запрос на добавления

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

{
    "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": "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 - идентификатор услуги в талоне (передаётся в теле запроса)

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

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

Тип ServerInfo

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

Тип MenuItem

Базовый тип элемента меню. Такой элемент меню может быть категорией или услугой.

{
   "Id": "Guid",
   "Name": "string"
}

Тип ProductOrRouteMenuItem : MenuItem

Тип элемента меню – услуга.

{
  "QueueIsAvailable": "bool",   // Можно ли брать талон живой очереди
  "RecordIsAvailable": "bool",  // Можно ли брать талон предварительной записи
  "Multiplier": "Multiplier",   // Информация о том, нужно ли запросить у посетителя множитель (количество дел) при взятии талона на эту услугу
  "IntegrationId": "string"     // Идентификатор элемента меню из настроек внешней системы
}

Тип CategoryMenuItem : MenuItem

Тип элемента меню – категория. Категория содержит другие элементы меню: услуги, маршруты и дочерние категории.

{
  "SubItems": "MenuItem": []  // Список вложенных категорий и услуг
}

Тип Multiplier

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

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

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

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

0 – услуги на которые можно получит талон в живую очередь 1 – услуги на которые можно записаться 2 – услуги на которые можно либо записаться, либо получить талон в живую очередь

Тип 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"  // Информация о поле доп. сведений
}

Перечисление 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 – Талон отменён

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

С авторизацией посетителя В данном случае СУО будет знать о всех талонах посетителя, а также будет возможность получить список талонов посетителя методом GET /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 – подтвердили отмену талона, и выдачу нового талона