API документация

Используйте наш API интерфейс для создания Вашего собственного приложения бронирования. С его помощью Вы можете реализовать любое решение от простейшего виджета до сложной многофункциональной системы, отвечающей специфике Вашей компании

Интерфейс программирования приложений (API) SimplyBook.me использует протокол JSON-RPC 2.0.

Ознакомтесь с примером интерфейса бронирования на основе API и прочитайте исходный код этого решения.

Авторизация

Использование методов SimplyBook.me API требует аутентификации. Чтобы авторизоваться в SimplyBook.me API, Вам необходимо получить ключ доступа — access-token. Для того, чтобы получить access-token, Вам необходимо вызвать метод JSON-RPC getToken в сервисе https://user-api.simplybook.me/login, передав Ваш личный API-ключ. Вы можете скопировать Ваш API-ключ в интерфейсе администратора: перейдите в раздел 'Дополнения' и выберите 'Настройки' дополнения API. Затем Вам нужно установить удалённый доступ к SimplyBook.me API. Ваш запрос должен содержать следующие заголовки: 'X-Company-Login', 'X-Token'.

Получение access-token может проводиться как на стороне клиента, так и с Вашего сервера, что является более безопасным решением.

Используйте библиотеку javascript JSON-RPC-client и библиотеку php JSON-RPC-client из наших примеров, чтобы разработать собственное решение.


Авторизация в Client API (Company public service)

Код процедуры авторизации с клиентской стороны

Получение токена


    var loginClient = new JSONRpcClient({
        'url': 'https://user-api.simplybook.me' + '/login',
        'onerror': function (error) {},
    });
    var token = loginClient.getToken( YOUR_COMPANY_LOGIN, YOUR_API_KEY);
    

Инициализация JSON-RPC-клиента


    this.client = new JSONRpcClient({
        'url': 'https://user-api.simplybook.me',
        'headers': {
            'X-Company-Login': YOUR_COMPANY_LOGIN,
            'X-Token': token
        },
        'onerror': function (error) {}
    });
    

Код авторизации на стороне сервера

Получение токена


    $loginClient = new JsonRpcClient('https://user-api.simplybook.me' . '/login/');
    $token = $loginClient->getToken(YOUR_COMPANY_LOGIN, YOUR_API_KEY);
    

Инициализация JSON-RPC-клиента


    $client = new JsonRpcClient( 'https://user-api.simplybook.me' . '/', array(
        'headers' => array(
            'X-Company-Login: ' .  YOUR_COMPANY_LOGIN,
            'X-Token: ' . $token
        )
    ));
    

Авторизация в User/Admin API (Company administration service)

Код процедуры авторизации с клиентской стороны

Получение токена


    var loginClient = new JSONRpcClient({
        'url': {$api_url} + '/login',
        'onerror': function (error) {},
    });
    var token = loginClient.getUserToken( YOUR_COMPANY_LOGIN,  YOUR_USER_LOGIN,  YOUR_USER_PASSWORD);
    

Инициализация JSON-RPC-клиента


    this.client = new JSONRpcClient({
        'url': 'https://user-api.simplybook.me' + '/admin/',
        'headers': {
            'X-Company-Login': YOUR_COMPANY_LOGIN,
            'X-User-Token': token
        },
        'onerror': function (error) {}
    });
    

Код авторизации на стороне сервера

Получение токена


    $loginClient = new JsonRpcClient('https://user-api.simplybook.me' . '/login/');
    $token = $loginClient->getUserToken({YOUR_COMPANY_LOGIN, YOUR_USER_LOGIN, YOUR_USER_PASSWORD);
    

Инициализация JSON-RPC-клиента


    $client = new JsonRpcClient('https://user-api.simplybook.me' . '/admin/', array(
        'headers' => array(
            'X-Company-Login: ' . YOUR_COMPANY_LOGIN,
            'X-User-Token: ' . $token
        )
    ));
    

Получение данных с сервера SimplyBook.me

Страница бронирования обычно предлагает клиентам выбор необходимого сервиса, сотрудника, а также дату и время встречи. Затем клиент вводит контактную информацию и подтверждает бронь. Более сложные решения могут включать заполнение дополнительных полей, бронирование для группы или бронирование нескольких сервисов и т.д. Ниже описан процесс создания простейшей страницы бронирования. Поэтому, если Вам необходимо добавить дополнительные функции на Вашу страницу, Вы можете посмотреть полный перечень методов SimplyBook.me API здесь.

Первым делом Вам нужно показать список сервисов и список сотрудников. Эти данные Вы можете получить с помощью методов getEventList и getUnitList. Оба метода возвращают список с полной информацией о каждом элементе в нём, так что Вы можете выбирать, как представить сервисы и сотрудников на Вашей странице. Чтобы выбрать некоторых сотрудников, используйте свойство unit_map Вашего списка сервисов, т.к. оно содержит информацию о сотрудниках, которые могут выполнять выбранный сервис.

Пример кода для получения списка сервисов


    $services = $client->getEventList();
    // returns array(array(
    //     'id' => 1, - service id
    //     'name' => 'Service 1', - service's name
    //     'description' => 'Describe your service...', - service description
    //     'duration' => 60, - service duration
    //     'hide_duration' => 0, - Hide duration to clients flag,
    //     'picture' => null, - file name of picture or null
    //     'picture_path' => '/uploads/apidemo/event__picture/small/', - full path to picture,
    //     'position' => 1 - service position
    //     'is_active' => 1, - the service is activated
    //     'is_public' => 1, - the service is allowed to book by clients
    // ), ...)
    

Пример кода для получения списка сотрудников


    $services = $client->getUnitList();
    // returns array(array(
    //    'id' => 1, - performer id
    //    'name' => 'Provider 1', - performer name
    //    'phone' => '111111111', - perfomer phone number
    //    'description' => 'Describe your performer...', - performer description
    //    'email' => 'test@gmail.com', - perfomer email,
    //    'is_active' => 1, - the performer is activated
    //    'is_visible' => 1, - the perfomer is visible for clients,
    //    'picture' => null, - file name of picture or null,
    //    'picure_path' => '/uploads/apidemo/unit_group__picture/small/', - full path to picture
    //    'position' => 1, - performer position
    //    'qty' => 1, performer quantity
    // ), ...)
    

Следующий шаг клиента - выбор даты и времени сервиса. В примере использования API мы применили выбор дат Bootstrap, Вы можете также работать с ним или выбрать любой другой календарь. Чтобы задать первый день календаря, используйте метод getFirstWorkingDay. Он может получать в качестве параметра id сострудника и возвращать следующую дату, когда выбранный сотрудник (или любой сотрудник компании по умолчанию) доступен для бронирования сервисов с ним.{""|t} Чтобы показать слоты времени для выбранной даты, Вам нужны методы getWorkCalendar и getStartTimeMatrix. Первый метод возвращает информацию о начале и конце рабочего дня, и о выходных днях. Второй метод возвращает список слотов времены, доступных для бронирования в выбранную дату.

Пример кода для получения информации о рабочих днях


    $year = 2020;
    $month = 3; // March
    $performerId = 1; // Can be null
    $workDaysInfo = $client->getWorkCalendar($year, $month, $performerId);
    // returns array(
    //     '2020-03-01' => array('from' => '09:00:00', 'to' => '18:00:00', 'is_day_off' => 0),
    //     '2020-03-02' => array('from' => '09:00:00', 'to' => '18:00:00', 'is_day_off' => 0),
    //     ...
    //);
    

Пример кода для получения матрицы доступных слотов


    $dateFrom = '2020-03-03';
    $dateTo = '2020-03-04';
    $serviceId = 1;
    $performerId = 1;
    $qty = 1;
    $availableTime = $client->getStartTimeMatrix($dateFrom, $dateTo, $serviceId, $performerId, $qty);
    // returns array(
    //     '2015-03-03' => array('09:00:00', '09:30:00', '10:00:00', ....),
    //     '2015-03-04' => array('09:00:00', '09:30:00', '10:00:00', ....),
    //);
    

Еще один полезный метод, который может Вам пригодиться, - это calculateEndTime. Поскольку каждый сервис может иметь свою длительность и расписание сотрудников компании может отличаться в разные дни, с использованием этого метода Вы можете показать клиенту правильные дату и время окончания забронированного им сервиса.

Пример кода для расчета времени окончания события


    $startDateTime = '2020-03-03 09:00:00';
    $serviceId = 1;
    $performerId = 1;
    $availableTime = $client->calculateEndTime($startDateTime, $serviceId, $performerId);
    // returns '2020-03-03 10:00:00'
    

Когда клиент нажимает кнопку подтверждения брони, Вы должны вызвать метод book. Это основная функция, которая выполняет все необходимые проверки и регистрирует новое событие в системе SimplyBook.me. Она получает информацию о бронировании, данных клиента, таких как имя и телефон, а также в неё передаются некоторые дополнительные праметры. Вы можете посмотреть описания всех параметров этой функции в списке функций API. Метод book возвращает уникальный код и другие детали нового забронированного события или список ошибок, если возникли проблемы в процессе бронирования, поэтому Вы можете показать клиенту результат в удобной и интуитивно-понятной форме.


Использование секретного ключа API

В некоторых случаях метод book может потребовать подтверждение, например, если Вы принимаете платежи от клиентов, событие может быть забронировано только после поступления платежа. Метод SimplyBook.me API confirmBookng получает id бронирования и секретную подпись в качестве параметров (еще один метод, требующий подписи - это cancelBookng). Для генерации подписи используйте Ваш секретный API-ключ. В примере ниже показано, как это сделать. Вы можете взять секретный ключ в интерфейсе администратора в разделе 'Настройки' дополнения API в секции 'Дополнения'.

Пример кода для бронирования сервиса и подтверждения брони с использованием секретного ключа API


    $additionalFields = array(
	'6740d3bce747107ddb9a789cbb78abf3' => 'value1',
	'b0657bafaec7a2c9800b923f959f8163' => 'value2'
    );

    $clientData = array(
        'name' => 'Client name',
        'email' => 'client@email.com',
        'phone' => '+13152108338'
    );

    $bookingsInfo = $client->book($eventId, $unitId, $date, $time, $clientData, $additionalFields);

    if ($bookingsInfo->require_confirm) {
       foreach ($bookingsInfo->bookings as $booking) {
           $sign = md5($booking->id . $booking->hash . YOUR_API_SECRET_KEY);
           $result = $client->confirmBooking($booking->id, $sign);
           echo '<br>Confirm result</b><br />';
           var_dump($result);
        }
    }
    

Пример кода для получения дополнительных полей


    $fields = $client->getAdditionalFields($eventId);
    // returns - array(array(
    //		'name' => 'b0657bafaec7a2c9800b923f959f8163', - field name
    //		'title' => 'Test digits', - field title
    //		'type' => 'digits', - field type
    //		'values' => null, - available values for select field type
    //		'default' => null, - default value for field
    //		'is_null' => null, - is filed nullable
    //		'on_main_page' => 1,
    //		'pos' => 1, - field position
    //		'value' => null
    // )), ...)
    

Дополнения системы SimplyBook.me

Если для работы Вашей компании требуются специальные функции, Вы можете активировать наши дополнения. Полный перечень дополнений с их детальным описанием доступен в Вашем интерфейсе администратора в разделе 'Дополнения'. После того как необходимые дополнения активированы, соответствующие методы API станут доступны и Вы сможете использовать их в Вашем коде.

Порядок вызова функций бронирования

Авторизация в SimplyBook.me API с помощью функции loginClient.getToken(companyLogin, apiKey);


Проверка, активировано ли дополнение 'Категории сервисов', с помощью метода isPluginActivated('event_category'). Если да, то отобразить список категорий методом getCategoriesList().


Получить перечень сервисов (events) и сотрудников (units) с помощью методов getEventList() и getUnitList(). Если массив 'unit_map' доступен для сервиса, это означает, что сервис может выполняться только данными исполнителями.


Если активировано дополнение 'Любой сотрудник' isPluginActivated('any_unit') и не задано специальной длительности для пары сервис-сотрудник в массиве 'unit_map', тогда пользователь может выбрать исполнителя Любой сотрудник или выбрать исполнителя самостоятельно. Но выбор исполнителя пользователем должен быть невозможен, если активирован getCompanyParam('any_unit__hide_other_units').


Получить доступные слоты времени с помощью метода getStartTimeMatrix ($from as current date, $to as current date, $eventId, $unitId, $count as selected participants value )$unitId для заданной даты. $unitId должно быть null если выбрана опция Любой сотрудник.


Если дополнение 'Любой сотрудник' активировано и выбран исполнитель Любой сотрудник, вызвать метод getAvailableUnits($eventId, $dateTime, $count), чтобы получить $unitId доступного сотрудника.


Если активировано дополнение 'Дополнительные поля' (метод isPluginActivated('event_field')), вызвать функцию getAdditionalFields($eventId) чтобы получить перечень полей, которые должен заполнить клиент.


Вызов метода book($eventId, $unitId, $date, $time, $clientData, $additional, $count, $batchId), чтобы создать бронирование.


Почему тысячи пользователей выбирают SimplyBook.me API?

Ясный и простой интерфейс. Беспроблемная разработка собственного сервиса бронирования

Вы легко можете встроить весь необходимый Вам функционал

Бронирование в реальном времени - Ваши клиенты могут записываться к Вам где угодно, когда угодно 24/7

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

API

Дайте возможность Вашим клиентам бронировать сервисы, не покидая Ваше приложение!

Сделайте Ваш сайт или приложение более соответствующим Вашим требованиям, привлекательным и прибыльным, предоставляя услуги для местных компаний. Наш API позволит Вам добавить кнопку 'Забронировать' на Вашу страницу, чтобы Ваши клиенты могли круглосуточно записываться на сервисы в реальном времени.

Наш API даёт доступ ко всем регистрационным данным, которые Вам нужны для разработки и внедрения системы бронирования для Вашей клиентской аудитории.

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