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

Callback механизм

Callback механизм предназначен для обновления данных на стороне GBooking в реальном времени.

Он поддерживает следующие операции:

  • изменение расписания работника
  • обновление расписания работника
  • создание, изменение и удаление записи

Запросы необходимо выполнять асинхронно основной транзакции.

Изменение расписания работника

Запрос mis.patch_resource_timetable.

Данный запрос берет текущее расписание работника и применяет временные отрезки, указанные самом запросе.

Формат запроса:

Название Required Тип Описание
business.id обязательно string идентификатор бизнеса
provider обязательно string Обработчик данных запроса. Передавайте ident, если нет явного указания передавать другое.
resource обязательно

Тип ResourceTimetable:

Название Required Тип Описание
id обязательно string идентификатор МИС врача
timetable обязательно Timetable список слотов врача

Тип Timetable:

Название Required Тип Описание
start обязательно string (Date)
end обязательно string (Date)
type string (ON|OFF) включить/выключить время расписания (по умолчанию ON)

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

{
    "jsonrpc":"2.0",
    "id":1,
    "cred":{
        "token":"[Token]",
        "user":"[UserID]"
    },
    "method":"mis.patch_resource_timetable",
    "params":{
        "provider":"[Provider]",
        "business":{
            "id":"[BusinessID]"
        },
        "resource":{
            "id":"extra_res_id",
            "timetable":[
                {
                    "start":"2016-10-21 09:00:00.000Z",
                    "end":"2016-10-21 10:00:00.000Z",
                    "type":"ON"
                }
            ]
        }
    }
}

Пример успешного ответа:

{
    "jsonrpc":"2.0",
    "result":true
}

Пример ответа с ошибкой:

{
    "jsonrpc":"2.0",
    "id":7,
    "error":{
        "code":-10000,
        "message":"Unknown error occurred"
    }
}

Обработчик этого запроса после добавления новых временных интервалов оптимизирует внутреннее представление расписания таким образом, чтобы пересекающиеся временные интервалы вычитались друг из друга, если они имеют разные типы ON и OFF, а примыкающие и имеющие одинаковый тип объединялись в один. Таким образом, можно не бояться линейного роста данных от количества входных данных.

Данный запрос может быть использован и в случае создания, изменения, удаления записи на стороне МИС, если вы не желаете передавать на сторону GBooking свои записи через методы mis.reserve_appointment, mis.update_appointment, mis.cancel_appointment_by_business. Тогда запись на стороне клиники будет отображаться как занятое время на стороне GBooking.

Создание записи

Запрос mis.reserve_appointment.

Формат запроса:

Название Required Тип Описание
business.id обязательно string идентификатор бизнеса
provider обязательно string Обработчик данных запроса. Передавайте ident, если нет явного указания передавать другое.
appointment обязательно Appointment данные записи

Тип Appointment:

Название Required Тип Описание
active обязательно boolean является эта запись активной или отмененной
id обязательно string идентификатор МИС записи
start обязательно string (Date ISO8601) время начала записи
duration обязательно number продолжительность записи
price обязательно Price цена записи
client обязательно Client данные клиента
source обязательно string источник записи (MIS_SCHEDULE_SYNC)
taxonomy.id обязательно string идентификатор МИС услуги, отделения
resource.id обязательно string идентификатор МИС врача

Тип Price:

Название Required Тип Описание
amount обязательно number Значение цены с учетом скидки
currency обязательно Currency
originalAmount обязательно number Значение цены без учета скидки

Тип Client:

Название Required Тип Описание
id обязательно string идентификатор клиента. Нужен для поддержания ссылочной целостности клиентской базы
name string Имя пользователя
surname string Фамилия пользователя
middlename string Отчество пользователя
phone обязательно Phone телефон пользователя

Тип Phone:

Название Required Тип Описание
country_code обязательно string код страны
area_code обязательно string код области
number обязательно string номер

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

{
    "jsonrpc":"2.0",
    "id":1,
    "cred":{
        "token":"[Token]",
        "user":"[UserID]"
    },
    "method":"mis.reserve_appointment",
    "params":{
        "provider":"[Provider]",
        "business":{
            "id":"4000000003543"
        },
        "appointment":{
            "active":true,
            "id":"mis_appointment_id",
            "start":"2017-01-26T15:45:00.000Z",
            "duration":135,
            "price":{
                "amount":1500,
                "currency":"RUB",
                "originalAmount":1500
            }
        },
        "source":"MIS_SCHEDULE_SYNC",
        "taxonomy":{
            "id":"mis_extra_id"
        },
        "resource":{
            "id":"mis_extra_id"
        },
        "client":{
            "id":"mis_client_id",
            "name":"Василий",
            "surname":"Пупкин",
            "phone":[
                {
                    "country_code":"7",
                    "area_code":"000",
                    "number":"0300000"
                }
            ]
        }
    }
}

Пример успешного ответа:

{
    "jsonrpc":"2.0",
    "result":true
}

Пример ответа с ошибкой:

{
    "jsonrpc":"2.0",
    "id":7,
    "error":{
        "code":-10000,
        "message":"Unknown error occurred"
    }
}

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

Запрос mis.update_appointment.

Формат запроса:

Название Required Тип Описание
business.id обязательно string идентификатор бизнеса
provider обязательно string Обработчик данных запроса. Передавайте ident, если нет явного указания передавать другое.
appointment обязательно Appointment данные записи

Тип Appointment описан выше.

В типе Appointment в данном методе обязательным полем является только поле id, остальные — опциональные.

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

{
    "jsonrpc":"2.0",
    "id":17,
    "cred":{
        "token":"[Token]",
        "user":"[UserID]"
    },
    "method":"mis.update_appointment",
    "params":{
        "provider": "ident",
        "business":{
            "id":"[BusinessID]"
        },
        "appointment":{
            "id":"app1",
            "start":"2017-02-26 12:55:00.000Z"
        }
    }
}

Пример успешного ответа:

{
    "jsonrpc":"2.0",
    "result":true
}

Пример ответа с ошибкой:

{
    "jsonrpc":"2.0",
    "id":7,
    "error":{
        "code":-10000,
        "message":"Unknown error occurred"
    }
}

Удаление записи

Запрос mis.cancel_appointment_by_business.

Формат запроса:

Название Required Тип Описание
business.id обязательно string идентификатор бизнеса
provider обязательно string Обработчик данных запроса. Передавайте ident, если нет явного указания передавать другое.
appointment.id обязательно string идентификатор МИС записи

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

{
    "jsonrpc":"2.0",
    "id":1,
    "cred":{
        "token":"[Token]",
        "user":"[UserID]"
    },
    "method":"mis.cancel_appointment_by_business",
    "params":{
        "provider":"[Provider]",
        "business":{
            "id":"12345"
        },
        "appointment":{
            "id":"mis_appointment_id"
        }
    }
}

Пример успешного ответа:

{
    "jsonrpc":"2.0",
    "result":true
}

Пример ответа с ошибкой:

{
    "jsonrpc":"2.0",
    "id":7,
    "error":{
        "code":-10000,
        "message":"Unknown error occurred"
    }
}

Перевод записи в состояние не подтверждено

Запрос mis.set_appointment_tentative.

Формат запроса:

Название Required Тип Описание
business.id обязательно string идентификатор бизнеса
provider обязательно string Обработчик данных запроса. Передавайте ident, если нет явного указания передавать другое.
appointment.id обязательно string идентификатор МИС записи

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

{
    "jsonrpc":"2.0",
    "id":1,
    "cred":{
        "token":"[Token]",
        "user":"[UserID]"
    },
    "method":"mis.set_appointment_tentative",
    "params":{
        "business":{
            "id":"4000000003543"
        },
        "appointment":{
            "id":"mis_appointment_id"
        }
    }
}

В случае успешного ответа запись будет переведена в состояние TENTATIVE, скрыта из бэкофиса. Если в течении 5 минут не придёт запрос на создание записи с таким же mis_appointment_id - запись будет удалена.

Пример успешного ответа:

{
    "jsonrpc":"2.0",
    "result":true
}

Пример ответа с ошибкой:

{
    "jsonrpc":"2.0",
    "id":7,
    "error":{
        "code":-10000,
        "message":"Unknown error occurred"
    }
}

Изменение статуса доставки записи

Запрос mis.set_appointment_delivery_status.

В случае, если запись поступает в МИС асинхронно, необходимо обновить статус доставки при обновлении ее на платформе, предоставляющей доступ к записи.

Формат запроса:

Название Required Тип Описание
business.id обязательно string идентификатор бизнеса
provider обязательно string Обработчик данных запроса. Передавайте ident, если нет явного указания передавать другое.
appointment обязательно AppointmentDelivery

Тип AppointmentDelivery:

Название Required Тип Описание
id обязательно string идентификатор МИС записи
exchangeID string новый идентификатор записи, в случае, если необходимо изменить его
deliveryStatus DeliveryStatus статус доставки записи в рабочий инстанс МИС

Тип DeliveryStatus:

  • RESERVED_DELIVERED — в случае доставки записи как резерва
  • CONFIRMED_DELIVERED - в случае успешной доставки подтвержденной записи
  • NOT_DELIVERED - в случае, если запись не была доставлена ни в каком виде

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

{
    "jsonrpc":"2.0",
    "id":1,
    "cred":{
        "token":"[Token]",
        "user":"[UserID]"
    },
    "method":"mis.set_appointment_delivery_status",
    "params":{
        "business":{
            "id":"[BusinessID]"
        },
        "appointment":{
            "id":"mis_appointment_id",
            "exchangeID":"new_mis_appointment_id",
            "deliveryStatus":"CONFIRMED_DELIVERED"
        }
    }
}

Пример успешного ответа:

{
    "jsonrpc":"2.0",
    "result":true
}

Пример ответа с ошибкой:

{
    "jsonrpc":"2.0",
    "id":7,
    "error":{
        "code":-10000,
        "message":"Unknown error occurred"
    }
}

Примеры callback запросов

Удаление сотрудника из филиала, из сети

Запрос mis.update_resource.

Должен быть указан либо идентификатор сети, либо идентификатор бизнеса.

resource.status может принимать значения ACTIVE, INACTIVE.

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

{
    "jsonrpc":"2.0",
    "id":1,
    "cred":{
        "token":"[Token]",
        "user":"[UserID]"
    },
    "method":"mis.update_resource",
    "params":{
        "business":{
            "id":"[BusinessID]"
        },
        "network":{
            "id":"[NetworkID]"
        },
        "resource":{
            "id":"mis_extra_id",
            "status":"INACTIVE"
        }
    }
}

Пример успешного ответа:

{
    "jsonrpc":"2.0",
    "result":true
}

Пример ответа с ошибкой:

{
    "jsonrpc":"2.0",
    "id":7,
    "error":{
        "code":-10000,
        "message":"Unknown error occurred"
    }
}

У сотрудника удалена специальность на филиале, на сети

Запрос mis.update_resource.

Должен быть указан либо идентификатор сети, либо идентификатор бизнеса.

В массив resource.taxonomies передаются операции добавления, удаления такстономий.

  • Добавление таксономии: {$add:"mis_tax_id"}
  • Удаление таксономии: {$remove:"mis_tax_id"}

В случае, если в качестве элементов массива указаны строки, то устанавливается переданный массив. Если же передано хотя бы одно действие, то массив обрабатывается как массив действий (строковый идентификатор будет интерпретироваться как операция добавления).

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

{
    "jsonrpc":"2.0",
    "id":1,
    "cred":{
        "token":"[Token]",
        "user":"[UserID]"
    },
    "method":"mis.update_resource",
    "params":{
        "business":{
            "id":"[BusinessID]"
        },
        "network":{
            "id":"[NetworkID]"
        },
        "resource":{
            "id":"mis_extra_id",
            "taxonomies":[
                "tax1",
                {
                    "$add":"mis_tax_id2"
                },
                {
                    "$remove":"mis_tax_id3"
                }
            ]
        }
    }
}

Пример успешного ответа:

{
    "jsonrpc":"2.0",
    "result":true
}

Пример ответа с ошибкой:

{
    "jsonrpc":"2.0",
    "id":7,
    "error":{
        "code":-10000,
        "message":"Unknown error occurred"
    }
}