Перейти к содержанию

Сервер записи в клинике

Сервер записи предназначен для передачи данных из 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]"
    }
}