NAV Navbar
shell

Возможности Jowi

С помощью API-интерфейса вы можете подключиться напрямую к системе Jowi. Вам доступно:

Регистрация разработчика

Чтобы использовать все возможности Jowi API, необходимо зарегистрироваться в личном кабинете разработчика. Подробнее о том, как это сделать.

После этого разработчику необходимо перевести свое приложение в боевой режим, а ресторану – подключить приложение в своем личном кабинете.

Технический протокол

Запросы к API выполняются по защищенному HTTPS протоколу, используя URL https://api.jowi.club/.

Формат передачи данных – json.

В заголовках запросов должно присутствовать следующее:

Content-Type: application/json

В случае успешного выполнения запроса ответ от сервера будет иметь вид:

{"status": 1, … }

В случае ошибки:

{"status": 0, "error": 27, "message": "Описание ошибки"}

Авторизация

Для отправки запросов к API необходимо отправлять дополнительные параметры авторизации. Эти данные можно взять в кабинете разработчика по адресу https://dev.jowi.club.

Параметр Описание
api_key api_key приложения – доступен в личном кабинете разработчика
sig Подпись, удостоверяющая валидность клиента

Алгоритм формирования подписи sig

  1. Рассчитывается SHA256 ­хэш от конкатенации строк:

    sha256 = sha(api_key + api_secret) // sha256 хеш от склеенной строки

  2. Берем первые 10 и последние 5 символов от полученного хэша

    sig = sha256[0, 10] + sha256[-5, 5] // первые 10 и последние 5 символов от полученного хэша

Список заведений

Используя API-интерфейс, вы можете загружать на свой сайт или приложение список заведений Jowi, а также информацию по ним:

curl "https://api.jowi.club/v010/restaurants?api_key=api_key&sig=sig"

api_key и sig замените на свои значения.

HTTP Request

GET https://api.jowi.club/v010/restaurants

В заголовках запросов должно присутствовать следующее:

Content-Type: application/json

Пример ответа от сервера:

{
  "status": 1,
  "restaurants": [
    {
      "id": "9260ccb9-c212-43a1-b0d3-b84bab6196ed",
      "title": "Привет Мир",
      "phone_numbers": "000-000-000-00",
      "website": "http://jowi.club",
      "work_time": null,
      "restaurant_type": "Bar",
      "live_music": true,
      "wi_fi_zone": true,
      "smoking_zone": true,
      "non_smoking_zone": true,
      "veggie_dishes": true,
      "open_halls": true,
      "room_for_children": true,
      "currency_of_payment": "UZS",
      "payment_by_card": true,
      "average_amount_bill": 40000,
      "address": "ул. Абдуллы Каххара, Ташкент, Дом № 35",
      "facebook_page": null,
      "twitter_page": null,
      "description": null,
      "longitude": 69.27178,
      "latitude": 41.2998,
      "country": "Uzbekistan",
      "city": "Tashkent",
      "online_order": true,
      "online_reserve": true,
      "delivery_price": 0,
      "delivery_time": "00:00:00",
      "work_timetable": [
        {
          "day_code": 1,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 2
        },
        {
          "day_code": 1,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 1
        },
        {
          "day_code": 1,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 0
        },
        {
          "day_code": 2,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 1
        },
        {
          "day_code": 2,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 0
        },
        {
          "day_code": 2,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 2
        },
        {
          "day_code": 3,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 2
        },
        {
          "day_code": 3,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 0
        },
        {
          "day_code": 3,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 1
        },
        {
          "day_code": 4,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 1
        },
        {
          "day_code": 4,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 0
        },
        {
          "day_code": 4,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 2
        },
        {
          "day_code": 5,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 1
        },
        {
          "day_code": 5,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 0
        },
        {
          "day_code": 5,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 2
        },
        {
          "day_code": 6,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 0
        },
        {
          "day_code": 6,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 2
        },
        {
          "day_code": 6,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 1
        },
        {
          "day_code": 7,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 2
        },
        {
          "day_code": 7,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 1
        },
        {
          "day_code": 7,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 0
        }
      ],
      "images": [
        {
          "url": "https://s3.amazonaws.com/cdn.jowi.club/mobile_menu/development/restaurant-description/restaurant_description_pictures/88782930-2baf-43b1-bb22-fb16cd8557e7/large.png?1450165135",
          "description": null,
          "order": 0
        },
        {
          "url": "https://s3.amazonaws.com/cdn.jowi.club/mobile_menu/development/restaurant-description/restaurant_description_pictures/58128ca5-32ca-4103-8f4f-bc39488fe89d/large.jpg?1450172744",
          "description": null,
          "order": 1
        }
      ]
    }
  ]
}

Описание параметров в ответе от сервера

Параметр Тип Описание
id uuid ID заведения в системе JOWI
title string Название заведения
phone_numbers string Номер телефона заведения
website string Сайт ресторана
restaurant_type string Тип заведения
live_music bool Наличие живой музыки
wi_fi_zone bool Wi-Fi в ресторане
smoking_zone bool Зона или зал для курящих
non_smoking_zone bool Зона или зал для некурящих
veggie_dishes bool Вегетарианские блюда в меню ресторана
open_halls bool Летняя веранда
room_for_children bool Детская площадка
currency_of_payment string Валюта оплаты
payment_by_card string Возможность оплаты банковской картой
average_amount_bill numeric Сумма среднего счета
address string Адрес ресторана
facebook_page string Ссылка на страницу на facebook.com
twitter_page string Ссылка на профиль в twitter.com
description string Описание ресторана
longitude decimal Координата longitude
latitude decimal Координата latitude
country string Страна
city string Город
online_reserve bool Возможность онлайн-бронирования столиков
delivery_price numeric Сумма доставки по умолчанию
delivery_time time Среднее время доставки
work_timetable array Режим работы ресторана:
day_code: День недели (пн - 1, вт - 2)
open_time: Время открытия
close_time: Время закрытия
day_off: Выходной или рабочий
timetable_code int Тип режима работы:
0 - Режим работы заведения,
1 - Режим работы ON-LINE заказа,
2 - Режим работы ON-LINE бронирования
images array Изображения заведения

Меню заведения

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

curl "https://api.jowi.club/v010/restaurants/:id?api_key=api_key&sig=sig"

api_key и sig замените на свои значения.

HTTP Request

GET https://api.jowi.club/v010/restaurants/:id

В заголовках запросов должно присутствовать следующее:

Content-Type: application/json

Пример ответа от сервера:

{
  "status": 1,
  "categories": [
    {
      "title": "Кофе",
      "courses": 
      [
        {
          "id": "31367464-80c4-47e0-b87f-f95d9348a3ae",
          "title": "Американо",
          "price": 90,
          "price_for_online_order": 90,
          "is_exception": false,
          "online_order": true,
          "is_vegetarian": false,
          "cooking_time": null,
          "caloric_content": null,
          "description": "Мы готовим Американо из отборных зёрен арабики",
          "image_url": "https://s3.amazonaws.com/cdn.jowi.club/mobile_menu/production/course-description/
          course_informations/8a5a469a-ab5c-456d-9003-5d0d24ace357/large.jpg?1458284334",
          "count_left": 2
        },
      ]
    },
    {
      "title": "Сэндвичи",
      "courses": [
        {
          "id": "0d233380-bdb6-4183-9918-2127871664fc",
          "title": "Сэндвич с беконом",
          "price": 75,
          "price_for_online_order": 75,
          "is_exception": false,
          "online_order": true,
          "is_vegetarian": false,
          "cooking_time": null,
          "caloric_content": null,
          "description": "Для приготовления этого сэндвича мы используем белый хлеб, бекон, копченая курица, салат латук, помидоры, красный болгарский перец, оливковое масло, базилик",
          "image_url": "https://s3.amazonaws.com/cdn.jowi.club/mobile_menu/production/course-description/course_informations/f6fcd3ad-d8d6-44eb-bf45-a3877e0e91f7/large.jpg?1458283839",
          "count_left": 2
        },
      ]
    }
  ]
}

Описание параметров в ответе от сервера

Параметр Тип Описание
title string Название категории
courses array Блюда в этой категории
id uuid id блюда
title string Название блюда
price numeric Цена блюда
price_for_online_order numeric Цена блюда для онлайн-заказа
is_exception bool Блюдо исключение: на него не считается налог на блюдо, налог на счет, обслуживание и скидка на счет
online_order bool Возможность онлайн заказа
is_vegetarian bool Вегетарианское блюдо
cooking_time string Время готовки
caloric_content string Калорийность
description string Описание блюда
image_url string Ссылка на изображение
count_left numeric Количество оставшихся блюд:
-1 – неограниченное количество,
0 – блюдо закончилось,
больше 0 – сколько блюд осталось.

Список залов

Если в заведении есть разделение по залам, вы можете загрузить список залов.

curl "https://api.jowi.club/v010/halls?api_key=api_key&sig=sig&restaurant_id=restaurant_id"

api_key и sig замените на свои значения.

HTTP Request

GET https://api.jowi.club/v010/halls

В заголовках запросов должно присутствовать следующее:

Content-Type: application/json

Пример ответа от сервера:

{
  "status": 1,
  "halls": [
    {
      "id": "637bd044-ecdd-11e5-adb0-af881482d4fa",
      "title": "Большой зал"
    }
  ]
}

Описание параметров в ответе от сервера

Параметр Тип Описание
halls array Список залов в ресторане
id uuid id зала в системе
title string Название зала

Список столов

В Jowi на схеме зала ресторан может разместить столики и настроить их свойства. С помощью API вы можете отображать информацию по залам и столам за выбранную дату:

curl "https://api.jowi.club/v010/halls/:hall_id?api_key=api_key&sig=sig&restaurant_id=restaurant_id"

api_key и sig замените на свои значения. Вместо restaurant_id требуется поставить id ресторана.

HTTP Request

GET https://api.jowi.club/v010/halls/:hall_id

В заголовках запросов должно присутствовать следующее:

Content-Type: application/json

Пример ответа от сервера:

{
    "status": 1,
    "hall_id": "637bd044-ecdd-11e5-adb0-af881482d4fa",
    "title": "Большой зал",
    "date": "2016-03-18",
    "plain": {
        "scene": {
            "width": "980",
            "height": "840",
            "item": [
                {
                    "type": "1",
                    "picture": "tables/table1.png",
                    "x": "80",
                    "y": "80",
                    "angle": "0",
                    "num_id": "4",
                    "id": "7edd6fa4-ecde-11e5-9b00-3b6437b5ccb5",
                    "number": "1",
                    "percent": "20",
                    "deposit": "0",
                    "time_price": "0",
                    "time_minimum": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "100",
                    "y": "40",
                    "angle": "0",
                    "num_id": "4",
                    "slot": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "160",
                    "y": "100",
                    "angle": "0",
                    "num_id": "4",
                    "slot": "1"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "100",
                    "y": "160",
                    "angle": "0",
                    "num_id": "4",
                    "slot": "2"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "40",
                    "y": "100",
                    "angle": "0",
                    "num_id": "4",
                    "slot": "3"
                },
                {
                    "type": "1",
                    "picture": "tables/table1.png",
                    "x": "300",
                    "y": "80",
                    "angle": "0",
                    "num_id": "5",
                    "id": "7edfd1d6-ecde-11e5-b186-27ad5a4a9974",
                    "number": "2",
                    "percent": "0",
                    "deposit": "0",
                    "time_price": "0",
                    "time_minimum": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "320",
                    "y": "40",
                    "angle": "0",
                    "num_id": "5",
                    "slot": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "380",
                    "y": "100",
                    "angle": "0",
                    "num_id": "5",
                    "slot": "1"
                },
                {
                    "type": "1",
                    "picture": "tables/table1.png",
                    "x": "500",
                    "y": "80",
                    "angle": "0",
                    "num_id": "6",
                    "id": "7ee23462-ecde-11e5-95a6-63e904933dcc",
                    "number": "3",
                    "percent": "0",
                    "deposit": "0",
                    "time_price": "0",
                    "time_minimum": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "520",
                    "y": "40",
                    "angle": "0",
                    "num_id": "6",
                    "slot": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "580",
                    "y": "100",
                    "angle": "0",
                    "num_id": "6",
                    "slot": "1"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "520",
                    "y": "160",
                    "angle": "0",
                    "num_id": "6",
                    "slot": "2"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "460",
                    "y": "100",
                    "angle": "0",
                    "num_id": "6",
                    "slot": "3"
                },
            ]
        }
    },
    "reserved_times": [
        {
            "table_id": "7ee23462-ecde-11e5-95a6-63e904933dcc",
            "date_time": "2016-03-22 17:00:00"
        }
    ]
}

Описание параметров в ответе от сервера

Параметр Тип Описание
hall_id uuid id зала
title string Название зала
date date Дата, формат “yyyy-mm-dd”
plain json Схема зала
scene string Параметры зала
width int Ширина схемы в пикселях
height int Высота схемы в пикселях
item array Список столов и стульев
type int Тип объекта: 1- стол, 2 - стул
x int Координата по оси X
y int Координата по оси Y
id uuid id стола в системе
num-_id int id стола в зале
angle int Ротация – под каким углом развернут стол
number string Номер столика
percent int Процент обслуживания стола
deposit numeric Размер депозита за стол
time_price numeric Стоимость стола на время
time_minimum int Минимальное время, на которое можно забронировать столик
slot int Позиция стула относительно стола по часовой стрелке
reserved_times array Массив забронированных столов – какие столы на какое время заказаны

Бронирование

С помощью API вы можете подключить возможность онлайн бронирования столов в ресторане через сайт или приложение.

HTTP Request

POST https://api.jowi.club/v010/reserves

Пример запроса на сервер


{
  "api_key": "",
  "sig": "",
  "restaurant_id": "c86f8e63-51c8-4207-9228-83942d128ce5",
  "table_id": "7ee23462-ecde-11e5-95a6-63e904933dcc",
  "contact_information": "9889-3885",
  "people_count": 3,
  "date_time": "2016-03-22 19:00:00",
  "description": "Nisi integer platea in socii",
  "for_whom": "Ivan"
}

В заголовках запросов должно присутствовать следующее:

Content-Type: application/json

Пример ответа от сервера:

{
    "status": 1,
    "reserv": {
        "id": "2f9a50fd-8c46-485b-89ae-ed7bd523bd15",
        "status": 0,
        "number": 114,
        "table_id": "7ee23462-ecde-11e5-95a6-63e904933dcc",
        "restaurant_id": "c86f8e63-51c8-4207-9228-83942d128ce5",
        "contact_information": "9889-3885",
        "description": "Nisi integer platea in socii",
        "people_count": 3,
        "for_whom": "Ivan"
    }
}

Описание параметров в ответе от сервера

Параметр Тип Обязательный Описание
api_key string да Ваш api-key из личного кабинета разработчика
sig string да Ваша цифровая подпись
restaurant_id string да id ресторана
table_id string да id стола
contact_information string да Контактная информация клиента
people_count integer нет Количество гостей, по умолчанию – 1
date_time string да Дата и время бронирования
description string нет Описание к брони
for_whom string нет На кого бронь – имя клиента

WEBHOOK

Пример ответа от сервера:

{
  "reserv_id": "2f9a50fd-8c46-485b-89ae-ed7bd523bd15",
  "status": 0,
  "number": 114
}

Изменения о бронировании будут отправлены по HTTP POST на указанный адрес в кабинете разработчика. В ответ на POST запрос должен вернуться ответ "OK" в текстовом формате. Сервер отправляет POST запрос 5 раз, пока не получит правильный ответ.

Статус бронирования

В системе имеются следующие статусы бронирования:

Статус Описание
0 Новое
3 Отменено рестораном
6 Принято
10 Выполнено

Информация о бронировании

Для получения подробной информации о бронировании необходимо отправить POST запрос.

Пример ответа от сервера:

{
    "status": 1,
    "reserv": {
        "id": "2f9a50fd-8c46-485b-89ae-ed7bd523bd15",
        "status": 0,
        "number": 114,
        "table_id": "7ee23462-ecde-11e5-95a6-63e904933dcc",
        "restaurant_id": "c86f8e63-51c8-4207-9228-83942d128ce5",
        "contact_information": "9889-3885",
        "description": "Nisi integer platea in socii",
        "people_count": 3,
        "for_whom": "Ivan"
    }
}

HTTP Request

GET https://api.jowi.club/v010/reserves/:id

В заголовках запросов должно присутствовать следующее:

Content-Type: application/json

Оплата счетов

С помощью API вы можете настроить оплату счета по QR-коду. Для получение данных о счете необходимо отправить прочитанный с QR-кода uuid счета.

Формат данных в QR-коде имеет вид:

jowi:64b0da31-c814-4ff6-8586-f7a7bd4c4676

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

Для получения счета необходимо отправить запрос:

curl "https://api.jowi.club/v010/bills/:qr_code?api_key=api_key&sig=sig"

api_key и sig замените на свои значения.

HTTP Request

GET https://api.jowi.club/v010/bills/:qr_code

В заголовках запросов должно присутствовать следующее:

Content-Type: application/json

Описание параметров в ответе от сервера

Пример ответа от сервера:

{
  "status": 1,
  "bill": {
    "id": "0956f284-de75-11e7-addf-0fd78be0004c",
    "restaurant_id": "",
    "restaurant_title": "",
    "number": "B120",
    "waiter_first_name": "",
    "table_number": "20",
    "courses_amount": 62496,
    "service": 10,
    "discount": 20,
    "people_count": 2,
    "amount": 56246.4,
    "discount_sum": 0,
    "open_date": "2017-12-01 13:13:10",
    "close_date": "2017-12-01 14:11:16",
    "bill_type_code": 2,
    "discount_amount": 12499.2,
    "service_amount": 6249.6,
    "bill_courses": [
      {
        "title": "Кортофель",
        "course_count": 1,
        "courses_sum_price": 2499,
        "course_amount": 2499,
        "course_sale": 2499,
        "discount": 0
      },
      {
        "title": "Суп 0,33",
        "course_count": 1,
        "courses_sum_price": 21999,
        "course_amount": 21999,
        "course_sale": 21999,
        "discount": 0
      },
      {
        "title": "Мясо",
        "course_count": 2,
        "courses_sum_price": 37998,
        "course_amount": 37998,
        "course_sale": 18999,
        "discount": 0
      }
    ]
  },
  "metadata": {
  }
}
Параметр Тип Описание
id uuid id счета
restaurant_id uuid id ресторана
restaurant_title string Название ресторана
number string Номер счета
waiter_first_name string Имя официанта
table_number string Номер стола
courses_amount numeric Сумма блюд
service int Процент обслуживания
discount int Процент скидки
people_count int Количество гостей
amount numeric Сумма счета к оплате
discount_sum numeric Сумма скидки
open_date datetime Дата открытия счета
close_date datetime Дата закрытия счета
bill_type_code int Тип счета:
0 - открытый
1 - закрытый
2 - оплачен
3 - долговой
4 - удален
6 - неоплата
discount_amount numeric Cумма скидки
service_amount numeric Cумма обсуживания
bill_courses array Список блюд в счете (массив)
title string Название блюда
course_count int Количество блюд
course_sum_price numeric Цена за единицу блюда без акций
course_amount numeric Сумма блюда с учетом количества, скидки и налога
course_sale numeric Цена за единицу блюда
discount int Процент скидки
bill_tables array Список столов по времени (массив)
table_number string Название стола
time_price numeric Цена за единицу времени
time_minimum int Минимальное время в минутах
time_start time Время начала отсчета
time_end time Время окончания
time_amount numeric Итого прошло времени в минутах
amount numeric Итоговая цена
metadata json Метаданные внешнего сервиса, указанные владельцем ресторана

Оплата счета

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

HTTP Request

POST https://api.jowi.club/v010/bills/

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

{
  "api_key": "",
  "sig": "",
  "bill_id": "0497a6f4-2d77-11e6-9d9a-2357bc4febd3",
  "restaurant_id": "4689a273-bd0a-492e-a935-f86d6f4ea3ff",
  "pay_token": "9d7f78a102fa967e0cc6defdb2d2e4e7f39415a58b97ef0d426038c5f4bc40cf"
}

api_key и sig замените на свои значения.

В заголовках запросов должно присутствовать следующее:

Content-Type: application/json

Описание параметров в запросе на сервер

Параметр Тип Обязательный Описание
api_key string да Ваш api-key из личного кабинета разработчика
sig string да Ваша цифровая подпись
restaurant_id string да id ресторана
pay_token string да Подпись к оплате (смотрите ниже)
date_time string нет Время вашего сервера, по умолчанию - текущее время сервера
bill_id string да id счета
service_data string нет Ваши дополнительные параметры

После успешной оплаты счета ресторан получит уведомление об оплате счета.

Пример ответа от сервера:

{
  "status": 1,
  "pay_bill": {
    "restaurant_id": "0956f284-de75-11e7-addf-0fd78be0004c",
    "bill_id": "5afc6373-42c3-4a50-bd87-149e2ba34050",
    "work_date": "2017-04-11",
    "amount": "1500.00",
    "bill_number": "A1"
  }
    "service_data": "..."
}

Описание параметров в ответе от сервера

Параметр Тип Описание
id uuid id счета
restaurant_id uuid id ресторана
bill_id uuid id счета
work_date date Дата счета относительно смены
amount numeric Сумма счета к оплате
bill_number string Номер счета

Информация по оплатам

Чтобы получить подробную информацию по всем оплатам в ресторане, необходимо отправить запрос:

curl "https://api.jowi.club/v010/bills?api_key=api_key&sig=sig&from_date=2017-01-15&to_date=2017-01-15"

api_key и sig замените на свои значения.

HTTP Request

GET https://api.jowi.club/v010/bills/

В заголовках запросов должно присутствовать следующее:

Content-Type: application/json

Описание параметрв в запросе на сервер

Параметр Тип Обязательный Описание
api_key string да Ваш api-key из личного кабинета разработчика
sig string да Ваша цифровая подпись
from_date string да Дата от, формат "yyyy-mm-dd"
to_date string да Дата до, формат "yyyy-mm-dd"

В ответ вы получите информацию по всем оплатам за выбранный период относительно date_time, который был указан при оплате счета.

Пример ответа от сервера:

{
  "status": 1,
  "transactions_sum": [
    {
      "restaurant_id": "",
      "sum": 6100
    },
    {
      "restaurant_id": "",
      "sum": 2265.5
    }
  ]
}

Описание параметров в ответе от сервера

Параметр Тип Описание
restaurant_id uuid id ресторана
sum numeric Сумма оплат в заведении за период

Онлайн-заказы

Jowi API позволяет подключить функцию онлайн-заказов на вашем сайте или приложении и передавать информацию о них сразу в ресторан. Таким образом клиенты смогут заказать доставку блюд, а заведение – приступить к их приготовлению без промедлений.

Логика работы

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

После создания нового заказа ресторан начинает его обработку. Заведение может принять заказ или отклонить. Ниже представлена таблица статусов онлайн заказов.

Статусы заказов

Код статуса Описание
0 Новый заказ
1 Заказ принят в работу
2 Заказ отменен
3 Заказ отправлен клиенту
4 Заказ доставлен

Создание заказа

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

HTTP Request

Пример запроса для отправки:

{
  "api_key": "",
  "sig": "",
  "restaurant_id": "3a96abba-e8be-4753-86b5-7cc57c4d49c4",
  "order": {
    "address": null,
    "amount_order": "206500",
    "description": null,
    "order_type": 0,
    "payment_method": 0,
    "payment_type": 0,
    "people_count": 2,
    "contact": "Василий"
    "phone": "12 345-67-89",
    "courses": [
      {
        "count": "1",
        "course_id": "82faa070-b246-4989-acaf-3365c7d6169c",
        "description": null
      },
      {
        "count": "1",
        "course_id": "ded70cb2-a96d-436b-8ef6-8917156ee82f",
        "description": null
      },
      {
        "count": "1",
        "course_id": "2ce0af23-51a9-46eb-ac58-a64a7a82afcb",
        "description": null
      }
    ]
  }
}

POST https://api.jowi.club/v3/orders

В заголовках запросов должно присутствовать следующее:

Content-Type: application/json

Описание параметров в запросе на сервер

Параметр Тип Обязательный Описание
restaurant_id string да id ресторана
address string да Адрес доставки
contact string да Контактная информация о клиенте
phone string да Телефон клиента
description string нет Описание к заказу
people_count integer нет Количествово гостей, по умолчанию – 1
order_type integer нет Тип заказа:
0 – доставка (по умолчанию),
1 – самовывоз
amount_order number да Итого к оплате
payment_method integer нет Метод оплаты
payment_type integer нет Тип оплаты

Описание параметров в ответе

Пример ответа от сервера:

{
  "status": 1,
  "order": {
    "address": null,
    "amount_order": "2065.0",
    "cancellation_reason": null,
    "cancellation_type": 0,
    "contact": "Василий",
    "courier_name": null,
    "courier_phone": null,
    "date_time": "2019-02-02T13:16:10+00:00",
    "delivery_price": "400.0",
    "description": null,
    "discount": 0,
    "discount_amount": "0.0",
    "discount_sum": "0.0",
    "history": "[{\"id\":\"482822ac-b851-4260-b158-330dd9564490\",\"before_status\":0,\"status\":1,\"date_time\":\"2019-02-02 13:16:11 +0000\"}]",
    "id": "0b1e1a04-a21b-4ecd-b815-a260ec5aa749",
    "is_cancellation_confirmed": false,
    "is_delivery_in_cash": true,
    "is_payed": false,
    "number": 252,
    "order_type": 0,
    "payment_method": 0,
    "payment_status": 0,
    "payment_type": 0,
    "people_count": 2,
    "phone": null,
    "restaurant_id": "abf41f4b-3ae1-4813-8e10-8f620a70d1b2",
    "status": 1,
    "work_date": "2019-02-02",
    "courses": [
      {
        "count": "1.0",
        "course_amount": "785.0",
        "course_id": "82faa070-b246-4989-acaf-3365c7d6169c",
        "course_price": "785.0",
        "description": null,
        "id": "3387694f-4c80-4795-bf9c-8b381ebe88e5",
        "is_exception": false
      },
      {
        "count": "1.0",
        "course_amount": "440.0",
        "course_id": "ded70cb2-a96d-436b-8ef6-8917156ee82f",
        "course_price": "440.0",
        "description": null,
        "id": "c1298996-e44b-4002-ab7c-56321d31de69",
        "is_exception": false
      },
      {
        "count": "1.0",
        "course_amount": "440.0",
        "course_id": "2ce0af23-51a9-46eb-ac58-a64a7a82afcb",
        "course_price": "440.0",
        "description": null,
        "id": "3d4e11a7-d13b-44a2-b756-48d1d934015f",
        "is_exception": false
      }
    ]
  }
}

После отправки запроса в ответе от сервера придет полная информация об онлайн-заказе. В случаях если сумма заказа не будет совпадать с суммой, рассчитанной сервером, вернется сообщение с кодом ошибки и информацией об онлайн-заказе с правильной суммой. В этом случае заказ создан не будет.

Параметр Тип Описание
status int Статус заказа
amount_order numeric Сумма к оплате
cancellation_reason string Причина отказа
cancellation_type int Тип отказа
contact string Контакт клиента
courier_name string Имя курьера
courier_phone string Телефон курьера
date_time date_time Дата и время заказа
delivery_price numeric Цена доставки
description string Коментарий к заказу
discount int Процент скидки
discount_sum numeric Сумма скидки
discount_amount numeric Итоговая сумма скидки
history string История заказа
id uuid id заказа
is_cancellation_confirmed bool True, если отмена заказа подтверждена рестораном
is_delivery_in_cash bool True, если сумма доставки учитывается в сумме к оплате
is_payed bool Флаг оплаты заказа, true – заказ оплачен
number int Номер заказа
order_type int Тип заказа:
0 – доставка;1 – самовывоз
payment_method int Метод оплаты:
0 – курьеру при доставке;
1 – оплата онлайн
payment_status int Статус оплаты:
0 – без оплаты;
1 – в ожидании;
2 - оплачено
payment_type int Способ оплаты:
0 – наличные;
1 – онлайн оплата
people_count int Количество персон
phone string Контактный телефон клиента
work_date date Рабочий день (относительно времени перехода дня ресторана)
courses array Массив блюд
id uuid id позиции в заказе
course_id uuid id блюда
count numeric Количество блюд в заказе
course_price numeric Цена блюда
course_amount numeric Итоговая стоимость блюда (кол-во * цена)
is_exception string True, если на блюдо не влияет процент скидки

Далее ресторан может принять заказ или отклонить.

Просмотр заказа

Вы можете просматривать информацию обо всех онлайн-заказах в ресторане.

curl "https://api.jowi.club/v3/orders/:id?api_key=api_key&sig=sig"

Для этого необходимо отправить запрос.

HTTP Request

GET https://api.jowi.club/v3/orders/:id

Пример ответа от сервера:

{
  "status": 1,
  "order": {
    "address": null,
    "amount_order": "2065.0",
    "cancellation_reason": null,
    "cancellation_type": 0,
    "contact": "Василий",
    "courier_name": null,
    "courier_phone": null,
    "date_time": "2019-02-02T13:16:10+00:00",
    "delivery_price": "400.0",
    "description": null,
    "discount": 0,
    "discount_amount": "0.0",
    "discount_sum": "0.0",
    "history": "[{\"id\":\"482822ac-b851-4260-b158-330dd9564490\",\"before_status\":0,\"status\":1,\"date_time\":\"2019-02-02 13:16:11 +0000\"}]",
    "id": "0b1e1a04-a21b-4ecd-b815-a260ec5aa749",
    "is_cancellation_confirmed": false,
    "is_delivery_in_cash": true,
    "is_payed": false,
    "number": 252,
    "order_type": 0,
    "payment_method": 0,
    "payment_status": 0,
    "payment_type": 0,
    "people_count": 2,
    "phone": null,
    "restaurant_id": "abf41f4b-3ae1-4813-8e10-8f620a70d1b2",
    "status": 1,
    "work_date": "2019-02-02",
    "courses": [
      {
        "count": "1.0",
        "course_amount": "785.0",
        "course_id": "82faa070-b246-4989-acaf-3365c7d6169c",
        "course_price": "785.0",
        "description": null,
        "id": "3387694f-4c80-4795-bf9c-8b381ebe88e5",
        "is_exception": false
      },
      {
        "count": "1.0",
        "course_amount": "440.0",
        "course_id": "ded70cb2-a96d-436b-8ef6-8917156ee82f",
        "course_price": "440.0",
        "description": null,
        "id": "c1298996-e44b-4002-ab7c-56321d31de69",
        "is_exception": false
      },
      {
        "count": "1.0",
        "course_amount": "440.0",
        "course_id": "2ce0af23-51a9-46eb-ac58-a64a7a82afcb",
        "course_price": "440.0",
        "description": null,
        "id": "3d4e11a7-d13b-44a2-b756-48d1d934015f",
        "is_exception": false
      }
    ]
  }
}

В заголовках запросов должно присутствовать следующее:

Content-Type: application/json

Описание параметров в запросе на сервер

Параметр Тип Обязательный Описание
id string да id онлайн-заказа

В ответ на запрос сервер вернет информацию о заказе в таком же виде, как и при создании онлайн-заказа.

Отказ от заказа

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

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

{
  "api_key": "",
  "sig": "",
  "cancellation_reason": "Клиент передумал"
}

HTTP Request

POST https://api.jowi.club/v3/orders/:id/cancel

Пример ответа от сервера:

{
  "status": 1,
  "order": {
    "address": null,
    "amount_order": "2065.0",
    "cancellation_reason": null,
    "cancellation_type": 0,
    "contact": "Василий",
    "courier_name": null,
    "courier_phone": null,
    "date_time": "2019-02-02T13:16:10+00:00",
    "delivery_price": "400.0",
    "description": null,
    "discount": 0,
    "discount_amount": "0.0",
    "discount_sum": "0.0",
    "history": "[{\"id\":\"482822ac-b851-4260-b158-330dd9564490\",\"before_status\":0,\"status\":1,\"date_time\":\"2019-02-02 13:16:11 +0000\"}]",
    "id": "0b1e1a04-a21b-4ecd-b815-a260ec5aa749",
    "is_cancellation_confirmed": false,
    "is_delivery_in_cash": true,
    "is_payed": false,
    "number": 252,
    "order_type": 0,
    "payment_method": 0,
    "payment_status": 0,
    "payment_type": 0,
    "people_count": 2,
    "phone": null,
    "restaurant_id": "abf41f4b-3ae1-4813-8e10-8f620a70d1b2",
    "status": 1,
    "work_date": "2019-02-02",
    "courses": [
      {
        "count": "1.0",
        "course_amount": "785.0",
        "course_id": "82faa070-b246-4989-acaf-3365c7d6169c",
        "course_price": "785.0",
        "description": null,
        "id": "3387694f-4c80-4795-bf9c-8b381ebe88e5",
        "is_exception": false
      },
      {
        "count": "1.0",
        "course_amount": "440.0",
        "course_id": "ded70cb2-a96d-436b-8ef6-8917156ee82f",
        "course_price": "440.0",
        "description": null,
        "id": "c1298996-e44b-4002-ab7c-56321d31de69",
        "is_exception": false
      },
      {
        "count": "1.0",
        "course_amount": "440.0",
        "course_id": "2ce0af23-51a9-46eb-ac58-a64a7a82afcb",
        "course_price": "440.0",
        "description": null,
        "id": "3d4e11a7-d13b-44a2-b756-48d1d934015f",
        "is_exception": false
      }
    ]
  }
}

В заголовках запросов должно присутствовать следующее:

Content-Type: application/json

Описание параметров в запросе на сервер

Параметр Тип Обязательный Описание
cancellation_reason string да Причина отказа в заказе

В ответ на запрос сервер вернет информацию о заказе в таком же виде, как и при создании онлайн-заказа.

WEBHOOK

При изменении статуса заказа сервер возвращает webhook с новой информацией по заказу.

Пример webhook'а от сервера:

{
 "status": 1,
 "type": "order",
 "data":
{ order_id: "5fd4e7ec-0074-11ea-9b30-cbd6b559817a", number: 12, status: 1, restaurant_id: "72d4e7ec-2374-123a-9b43-1236b559817a", courier_name: "", courier_phone: "", amount: 1200 }

}

Описание параметров в ответе от сервера

Параметр Описание
status Статус операции (1 – успешно)
type Тип оповещения (order - доставка)
order_id id заказа
number Номер заказа
status Статус заказа
restaurant_id id ресторана
amount Стоимость онлайн-заказа

Стоп-лист

Получайте информацию о блюдах, которые добавлены в стоп-лист.

Пример ответа от сервера

{
  "status": 1,
  "course_counts": [
    { "id": "029faa78-63ca-453b-b83c-ce290a339e71", "count_left": "0.0", "title": "Блюдо 001" },
    { "id": "6a5239d5-80f5-4d66-a85a-1c2129c29bd6", "count_left": "30.0", "title": "Блюдо 002" },
    { "id": "ba3f4825-4ef9-46d6-99e9-05ac2f55b2da", "count_left": "0.0", "title": "Блюдо 004" },
    { "id": "c99a1258-cabc-4b68-9940-de0a9f1ebf26", "count_left": "90.0", "title": "Блюдо 003" }
  ]
}

HTTP Request

GET https://api.jowi.club/v3/course_counts?api_key=api_key&sig=sig&restaurant_id=id

В заголовках запросов должно присутствовать следующее:

Content-Type: application/json

Описание параметров в ответе от сервера

Параметр Тип Описание
id uuid id блюда
title string Название блюда
count_left numeric Количество оставшихся блюд

Errors

Описание кодов ошибок, которые могут возникнуть при работе с API v010 и v3.

Error Code Meaning
1 api_key пустой
2 sig пустой
3 sig неверный
4 restaurant_id пустой
5 api_key не найден в системе
6 restaurant не найден
8 restaurant не найден
7 В ресторане отключены онлайн-заказы
10 На локальном терминале не включен прием заказов, свяжитесь с рестораном
17 Устройство заблокировано
18 Отказано в доступе
19 Сессия устарела
20 Невалидные параметры
21 date_time пустой
22 phone пустой
23 order не найден
24 order id пустой
25 Онлайн-заказы и бронирование отключены
26 Клиент заблокирован
27 restaurant не активирован
28 date_time пустой
29 На локальном терминале не включен прием заказов, свяжитесь с рестораном
30 Сумма заказа не равна сумме оплаты
31 Неправильная сумма заказа
32 hall_id пустой
33 hall plain не найден
34 table_id пустой
35 contact_information пустой
36 date_time пустой
37 date_time формат неправильный
38 people_count равна 0
39 В ресторане онлайн-бронирования не включены
40 table не найден
41 Ошибка сервера
43 reserv_id пустой
44 table_reserv не найден
50 E-mail пустой
53 device_name пустой
54 device_id пустой
55 client не найден
58 facebook_id неправильный
57 password_not неправильный
59 facebook_token ошибка при проверке
60 authentication_token пустой
61 authentication_token не найден
72 Ошибка сервера
73 client не сохранен
74 E-mail уже существует
75 E-mail не обновлен
81 first_name пустой
82 last_name пустой
83 phone пустой
86 client уже существует
87 Клиент существует в ресторане
88 Клиента не существует в ресторане
90 bill_id пустой
91 amount пустой
92 Счет не найден
93 Счет уже оплачен
94 Сумма счета не равна сумме оплаты
95 Cчет не закрыт в ресторане
96 Tокен оплаты не правильный
101 Невалидный uuid
211 Ресторан не найден
230 Статус заказа был изменен