Сервер записи в клинике¶
Сервер записи предназначен для передачи данных из GBooking на сторону клиники.
Здесь представлена спецификация такого сервера. Вы можете реализовать его своими силами, однако, предварительно спросите, возможно, есть готовая реализация.
Сервер HTTP записи должен выполнять следующие действия:
- резервирование записи
- сохранение изменений записи
- отмена записи
Сервер должен принимать HTTP запросы в формате json-rpc 2.0
. Данные запроса передаются с использованием HTTP 1.1 POST в теле запроса.
Авторизация¶
В заголовке Authorization передается токен Basic авторизации, сформированный из пары логин/пароль соответствующей паре user/token, отправляемые к GBookingAPI в запросах на синхронизацию.
Строка Authorization должна быть сформирована следующим образом:
base64(user + ':' + token)
Резервирование записи¶
Запрос mis.reserve_appointment
.
Формат запроса:
Название | Required | Тип | Описание |
---|---|---|---|
business.id | обязательно | string | идентификатор бизнеса |
appointment | обязательно | AppointmentReserve | данные бизнеса для резервирования |
Тип AppointmentReserve:
Название | Required | Тип | Описание |
---|---|---|---|
resourceID | обязательно | string | идентификатор МИС работника |
taxonomyID | обязательно | string | идентификатор МИС услуги |
start | обязательно | string (Date) | дата начала записи |
end | обязательно | string (Date) | дата окончания записи |
Пример запроса:
{
"jsonrpc":"2.0",
"id":1,
"cred":{
"token":"[Token]",
"user":"[UserID]"
},
"method":"mis.reserve_appointment",
"params":{
"provider":"ident",
"business":{
"id":"[BusinessID]"
},
"appointment":{
"resourceID":"mis_res_123",
"taxonomyID":"mis_tax_123",
"start":"2016-12-28T15:00:00.000Z",
"end":"2016-12-28T15:30:00.000Z"
}
}
}
Пример ответа:
{
"jsonrpc":"2.0",
"id":1,
"result":{
"status":true,
"appointmentID":"[индекс из МИС]"
}
}
Пример ответа с ошибкой:
{
"jsonrpc":"2.0",
"id":1,
"result":{
"status":false,
"errorMessage":"[Error]"
}
}
В случае, если время, указанное в записи занято (есть пересечение переданного временного интервала с занятым), то необходимо вернуть ответ с ошибкой.
Резервирование лишь временное ограничение на запись на данное время к данному ресурсу (работнику, врачу). В случае, если клиент не завершит бронирование записи запросом на подтверждение необходимо удалить резерв. Время жизни должно быть ограничено не менее 5 минутами. Очистка резервов должна производиться на стороне клиники.
Обратите внимание, что если вы указали параметр isDefaultService для услуги в запросе mis.update_business
и имеет место запись на корневую услугу, то в этом запросе на резервирование и запросе на подтверждение записи будет использован идентификатор той дочерней услуги, которой была установлена эта опция. Если она была установлена нескольким услугам, в рамках одной категории, то может быть выбрана любая. Другими словами, необходимо указывать только одну услугу по умолчанию.
Подтверждение записи¶
Запрос mis.confirm_appointment
.
В случае включенной на виджете оплаты клиентом данные платежа будут переданы в поле payment.
Формат запроса:
Название | Required | Тип | Описание |
---|---|---|---|
business.id | обязательно | string | идентификатор бизнеса |
provider | обязательно | string | Обработчик данных запроса. Передавайте ident, если нет явного указания передавать другое. |
appointment | обязательно | AppointmentConfirm | данные на подтверждение записи |
client | обязательно | IncomingClient | данные клиента |
Тип AppointmentConfirm:
Название | Required | Тип | Описание |
---|---|---|---|
id | обязательно | string | идентификатор МИС клиники |
resourceID | обязательно | string | идентификатор МИС работника |
taxonomyID | обязательно | string | идентификатор МИС услуги |
comment | string | комментарий, данные клиента в виде строки (ФИО клиента, телефон клиента); разделитель - запятая | |
payment | Payment | данные по оплате |
Тип IncomingClient:
Название | Required | Тип | Описание |
---|---|---|---|
name | string | Имя пользователя | |
surname | string | Фамилия пользователя | |
middlename | string | Отчество пользователя | |
phone | обязательно | Phone[] | телефон пользователя |
Тип Phone:
Название | Required | Тип | Описание |
---|---|---|---|
country_code | обязательно | string | код страны |
area_code | обязательно | string | код области |
number | обязательно | string | номер |
Тип Payment:
Название | Required | Тип | Описание |
---|---|---|---|
status | обязательно | PaymentStatus | статус оплаты. Для online платежа принимает значение "YES_PAYED_ONLINE" |
type | обязательно | PaymentType | одно из возможных значений cash, card |
system | обязательно | PaymentSystem | одна из платежных систем |
payed | обязательно | boolean | была ли оплата |
externalInvoice | string | идентификатор транзакции в платежной системе | |
amount | number | сумма | |
issuedOn | string (Date) | Дата создания платежа | |
payedOn | string (Date) | Дата оплаты платежа |
Тип PaymentStatus:
- YES_PAYED_ONLINE
- YES_PAYED_FULL
- YES_PAYED_PART
- NO_PAYMENT
- NONE
Тип PaymentType:
- cash
- card
Тип PaymentSystem:
- Robokassa
- YandexMoney
- DeltaProcessing
Пример запроса:
{
"jsonrpc":"2.0",
"id":1,
"cred":{
"token":"[Token]",
"user":"[UserID]"
},
"method":"mis.confirm_appointment",
"params":{
"provider":"[Provider]",
"business":{
"id":"[BusinessID]"
},
"appointment":{
"id":"mis_app_id",
"resourceID":"mis_res_123",
"taxonomyID":"mis_tax_123",
"comment":"Василий Пупкин,+71110001010"
},
"client":{
"name":"Василий",
"surname":"Пупкин",
"phone":[
{
"country_code":"7",
"area_code":"000",
"number":"0300000"
}
]
},
"payment":{
"status":"YES_PAYED_ONLINE",
"type":"cash",
"system":"YandexMoney",
"payed":true,
"externalInvoice":"transaction_id",
"amount":124.23,
"issuedOn":"2016-12-28T15:00:00.000Z",
"payedOn":"2016-12-28T15:01:00.000Z"
}
}
}
Формат ответа:
Название | Required | Тип | Описание |
---|---|---|---|
status | обязательно | boolean | успешность выполнения запроса |
appointmentID | обязательно | string | идентификатор МИС записи |
clientID | string | идентификатор МИС клиента для поддержания ссылочной целостности клиентской базы (опционально) |
Пример ответа:
{
"jsonrpc":"2.0",
"id":1,
"result":{
"status":true,
"appointmentID":"mis_app_id",
"clientID":"mis_client_id"
}
}
Пример ответа с ошибкой:
{
"jsonrpc":"2.0",
"id":1,
"result":{
"status":false,
"errorMessage":"[Error]"
}
}
Удаление записи¶
Запрос mis.delete_appointment
.
Запрос на удаление записи выполняется только для подтвержденных записей.
Формат запроса:
Название | Required | Тип | Описание |
---|---|---|---|
business.id | обязательно | string | идентификатор бизнеса |
provider | обязательно | string | Обработчик данных запроса. Передавайте ident, если нет явного указания передавать другое. |
appointment.id | обязательно | string | идентификатор МИС записи |
Пример запроса:
{
"jsonrpc":"2.0",
"id":1,
"cred":{
"token":"[Token]",
"user":"[UserID]"
},
"method":"mis.delete_appointment",
"params":{
"provider":"[Provider]",
"business":{
"id":"[BusinessID]"
},
"appointment":{
"id":"mis_app_123"
}
}
}
Пример ответа:
{
"jsonrpc":"2.0",
"id":1,
"result":{
"status":true,
"appointmentID":"[индекс из МИС]"
}
}
Пример ответа с ошибкой:
{
"jsonrpc":"2.0",
"id":1,
"result":{
"status":false,
"errorMessage":"[Error]"
}
}
Изменение записи¶
Запрос mis.update_appointment
.
Данный запрос вызывается в случае, если на стороне GBooking запись была изменена. Если в записи на стороне GBooking был изменен клиент, то вызывается метод mis.change_appointment_client.
Данный запрос вызывается, когда произошли следующие изменения в записи:
- изменился работник
- изменилась услуга
- изменилось время начала
- изменилась длительность
Формат запроса:
Название | Required | Тип | Описание |
---|---|---|---|
business.id | обязательно | string | идентификатор бизнеса |
provider | обязательно | string | Обработчик данных запроса. Передавайте ident, если нет явного указания передавать другое. |
appointment | обязательно | AppointmentChange | данные записи |
Тип AppointmentChange:
Название | Required | Тип | Описание |
---|---|---|---|
id | обязательно | string | идентификатор МИС записи |
resourceID | обязательно | string | идентификатор МИС работника |
taxonomyID | обязательно | string | идентификатор МИС услуги |
start | обязательно | string (Date) | дата начала записи |
end | обязательно | string (Date) | дата окончания записи |
Пример запроса:
{
"jsonrpc":"2.0",
"id":1,
"cred":{
"token":"[Token]",
"user":"[UserID]"
},
"method":"mis.update_appointment",
"params":{
"provider":"ident",
"business":{
"id":"[BusinessID]"
},
"appointment":{
"id":"mis_app_id",
"resourceID":"mis_res_123",
"taxonomyID":"mis_tax_123",
"start":"2016-12-28 15:00:00.000Z",
"end":"2016-12-28 15:30:00.000Z"
}
}
}
Формат ответа:
{
"jsonrpc":"2.0",
"id":1,
"result":{
"status":true,
"appointmentID":"[индекс из МИС]"
}
}
Изменение клиента в записи¶
Запрос mis.change_appointment_client
.
Данный метод вызывается в случае изменения клиента в записи.
Формат запроса:
Название | Required | Тип | Описание |
---|---|---|---|
business.id | обязательно | string | идентификатор бизнеса |
provider | обязательно | string | Обработчик данных запроса. Передавайте ident, если нет явного указания передавать другое. |
appointment | обязательно | AppointmentClient | данные клиента в записи |
client | обязательно | IncomingClient | данные клиента |
Тип AppointmentClient:
Название | Required | Тип | Описание |
---|---|---|---|
id | обязательно | string | идентификатор МИС записи |
comment | string | комментарий, данные клиента в виде строки (ФИО клиента, телефон клиента); разделитель - запятая |
Тип IncomingClient:
Название | Required | Тип | Описание |
---|---|---|---|
name | string | Имя пользователя | |
surname | string | Фамилия пользователя | |
middlename | string | Отчество пользователя | |
phone | обязательно | Phone[] | телефон пользователя |
Пример запроса:
{
"jsonrpc":"2.0",
"id":1,
"cred":{
"token":"[Token]",
"user":"[UserID]"
},
"method":"mis.change_appointment_client",
"params":{
"provider":"[Provider]",
"business":{
"id":"[BusinessID]"
},
"appointment":{
"comment":"Василий Пупкин,+71110001010",
"id":"mis_app_id"
},
"client":{
"name":"Василий",
"surname":"Пупкин",
"phone":[
{
"country_code":"7",
"area_code":"000",
"number":"0300000"
}
]
}
}
}
Формат ответа:
Название | Required | Тип | Описание |
---|---|---|---|
status | обязательно | boolean | успешность выполнения запроса |
appointmentID | обязательно | string | идентификатор МИС записи |
clientID | string | идентификатор МИС клиента для поддержания ссылочной целостности клиентской базы (опционально) |
Пример ответа:
{
"jsonrpc":"2.0",
"id":1,
"result":{
"status":true,
"appointmentID":"mis_app_id",
"clientID":"mis_client_id"
}
}
Пример ответа с ошибкой:
{
"jsonrpc":"2.0",
"id":1,
"result":{
"status":false,
"errorMessage":"[Error]"
}
}