API Документація

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

Прикладний програмний інтерфейс (API) використовує JSON-RPC 2.0 протокол.

Перегляньте приклад інтерфейсу для бронювань створеного за допомогою API, а також ознайомтесь із вихідним кодом для цього рішення.

Авторизація

Методи API Simplybook вимагають авторизації. Для авторизації в API Simplybook Вам необхідно отримати ключ доступу — токен доступу. Щоб отримати токен доступу Вам необхідно викликати метод JSON-RPC getToken у сервісу http://user-api.simplybook.me/login передаючи туди Ваш особистий API-ключ. Ви можете скопіювати API-ключ в інтерфейсі адміністратора: перейдіть до 'Додаткових функцій', оберіть додаткову функцію API та перейдіть в інтерфейс її 'Налаштування'. Після цього необхідно ініціювати віддалений доступ до API Simplybook. Запит повинен містити наступні заголовки: 'X-Company-Login', 'X-Token'.

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

Ви можете використовувати javascript JSON-RPC-клієнтську бібліотеку та php JSON-RPC-клієнтську бібліотеку з наших прикладів для Вашої власної розробки.


Авторизація в 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
        )
    ));
    

Авторизаця API Користувача/Адміністратора (Адміністративні сервіси компанії)

Авторизація зі сторони клієнтського коду

Одержання токену-ключа.


    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

Зазвичай сторінка бронювання - це сторінка, на якій клієнти обирають необхідну їм послугу, працівника та час їх зустрічі. Потім клієнт вводить певну контактну інформацію та підтверджує бронювання. Більш складні рішення можуть включати заповнення різних додаткових полів, групові або багаторазові бронювання тощо. Давайте опишемо робочий процес створення найпростішої сторінки бронювання. А якщо вам будуть потрібні додаткові функції на Вашій сторінці, дивіться повний список методів API Simplybook.

Отже, перше, що Вам необхідно відобразити, - це перелік послуг та список працівників. Отримайте ці дані методами 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 . Він може використати ідентифікатор працівника як параметр і відображає наступну дату, коли вибраний працівник (або будь-який працівник компанії за замовчуванням) доступний для бронювання.{""|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. Тут потрібна інформація про бронювання, дані клієнта, такі як ім’я та телефон, а також додаткові параметри. Дивіться всі описи параметрів цього методу в списку функцій API . Відповідь методу book містить унікальний код та інші подробиці нового бронювання або список помилок, якщо такі виникли, тому Ви можете використовувати цю інформацію для відображення результату бронювання клієнта у зручний та зрозумілий спосіб


Використання секретного ключа API

У деяких випадках метод book може вимагати підтвердження, наприклад якщо Ви приймаєте платежі від клієнтів, то бронювання підтверджується лише пілся того, як платіж було одержано. Метод API Simplybook confirmBookng приймає booking-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

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

Потік коду функціоналу бронювання

Авторизація в API Simplybook за допомогою функції loginClient.getToken(companyLogin, apiKey);.


Перевірте чи додаткова функція Категорії послуг увімкнена за допомогою isPluginActivated('event_category') якщо так, тоді відобразіть список категорій getCategoriesList().


Отримайте список послуг (подій) та працівників (одиниць) за допомогою функцій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 має бути пустим, якщо вибрано опцію Будь-який працівник.


Якщо увімкнена функція Обрати будь-якого працівника і обрали опцію Будь-який працівник викликайте getAvailableUnits($eventId, $dateTime, $count), щоб отримати доступні $unitId


Якщо функція Додаткові питання умімкнена isPluginActivated('event_field') викликати функцію getAdditionalFields($eventId), щоб отримати список полів для заповнення клієнтом.


Викликати book($eventId, $unitId, $date, $time, $clientData, $additional, $count, $batchId), щоб забронювати.


Чому тисячі клієнтів обирають API від SimplyВook.me?

Чіткий і простий інтерфейс. Створити власну систему бронювання дуже просто

Ви можете легко підключити усі необхідні функції

Планування в режимі реального часу - Ваші клієнти можуть бронювати зустрічі де завгодно, коли завгодно

Наша програма надає Вам багато додаткових функцій. Натисніть тут щоб дізнатись більше про наші додаткові функції.

API

Нехай ваші клієнти бронюють послуги, не покидаючи Вашу програму!

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

Наш API надає Вам доступ до всіх даних бронювання, необхідних для створення та налаштовування можливостей бронювання для Вашої аудиторії клієнтів.

Надаючи клієнту доступ до Вашого розкладу, ми створюємо абсолютно новий рівень комерції. Ми вважаємо, що безпосереднє бронювання послуг у Вашому додатку чи веб-сайті дозволяє направити до Вас справжніх клієнтів, а не лише потенційних.