Возможности 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
Рассчитывается SHA256 хэш от конкатенации строк:
sha256 = sha(api_key + api_secret)
// sha256 хеш от склеенной строкиБерем первые 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 | да | Телефон клиента |
people_count | integer | нет | Количествово гостей, по умолчанию – 1 |
Данные о заказе
Параметры описывают данные о заказе: описание, тип заказа и доставки.
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
description | string | нет | Описание к заказу |
order_type | integer | нет | Тип заказа:0 – доставка (по умолчанию),1 – самовывоз |
delivery_time_type | integer | нет | Тип доставки по времени:0 – на ближайшее время,1 – к указанному времени |
delivery_time | time | нет | Время, к которому необходимо доставить заказ (указывается при delivery_time_type = 1 ) |
Данные о блюдах
Параметры описывают информацию о блюдах в заказе.
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
count | number | Да | Количества блюд |
course_id | uuid | Да | id блюда |
description | string | Нет | Комментарий к блюду |
Данные о скидке и стоимости заказа
Параметры описывают данные о размере скидки, стоимости заказа и способе оплаты.
Для расчета скидки суммируется стоимость всех блюд не исключений (исключение настраивается при добавлении блюда, подробнее по ссылке). При этом в первую очередь используется сумма скидки. Если она равна 0, в расчет берется процент скидки.
Стоимость заказа = Стоимость блюд - Сумма скидки + Стоимость доставки.
Стоимость доставки учитывается, если в настройках ресторана установлен флаг учета доставки в онлайн-заказах.
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
discount | integer | нет | Процент скидки |
discount_sum | number | нет | Сумма скидки |
delivery_price | number | нет | Стоимость доставки (может быть ниже, чем указана в настройках ресторана) |
amount_order | number | да | Итого к оплате |
payment_method | integer | нет | Метод оплаты:0 – курьеру при доставке (по умолчанию),1 – онлайн оплата. |
payment_type | integer | нет | Тип оплаты:0 – наличные (по умолчанию),1 – банковской картой. |
Описание параметров в ответе
Пример ответа от сервера:
{
"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 | Статус заказа |
date_time | date_time | Дата и время заказа |
description | string | Коментарий к заказу |
history | string | История заказа |
id | uuid | id заказа |
number | int | Номер заказа |
work_date | date | Рабочий день (относительно времени перехода дня ресторана) |
Данные об отказе
Параметр | Тип | Описание |
---|---|---|
cancellation_reason | string | Причина отказа |
cancellation_type | int | Тип отказа:0 – ресторан,1 – клиент |
is_cancellation_confirmed | bool | True, если отмена заказа подтверждена рестораном |
Данные о клиенте
Параметры описывают информацию о клиенте.
Параметр | Тип | Описание |
---|---|---|
contact | string | Контакт клиента |
people_count | int | Количество персон |
phone | string | Контактный телефон клиента |
address | string | Адрес доставки |
Данные о блюде
Параметры описывают информацию о блюдах в заказе.
Параметр | Тип | Описание |
---|---|---|
courses | array | Массив блюд |
id | uuid | id позиции в заказе |
course_id | uuid | id блюда |
count | numeric | Количество блюд в заказе |
course_price | numeric | Цена блюда |
Данные о курьере
Параметр | Тип | Описание |
---|---|---|
courier_name | string | Имя курьера |
courier_phone | string | Телефон курьера |
Данные об оплате
Параметры описывают спосбо оплаты, размер скидки и сумму чека.
Параметр | Тип | Описание |
---|---|---|
amount_order | numeric | Сумма к оплате |
delivery_price | numeric | Цена доставки |
discount | int | Процент скидки |
discount_sum | numeric | Сумма скидки |
discount_amount | numeric | Итоговая сумма скидки |
is_delivery_in_cash | bool | True, если сумма доставки учитывается в сумме к оплате |
is_payed | bool | Флаг оплаты заказа, true – заказ оплачен |
order_type | int | Тип заказа:0 – доставка;1 – самовывоз |
payment_method | int | Метод оплаты:0 – курьеру при доставке;1 – оплата онлайн |
payment_status | int | Статус оплаты:0 – без оплаты;1 – в ожидании;2 - оплачено |
payment_type | int | Способ оплаты:0 – наличные;1 – онлайн оплата |
course_amount | numeric | Итоговая стоимость блюда (кол-во * цена) |
is_exception | string | True, если на блюдо не влияет процент скидки |
Далее ресторан может принять заказ или отклонить.
Просмотр заказа
Вы можете просматривать информацию обо всех онлайн-заказах в ресторане.
curl "https://api.jowi.club/v3/orders/:id?api_key=api_key&sig=sig&restaurant_id=restaurant_id"
Для этого необходимо отправить запрос.
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 онлайн-заказа |
restaurant_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 | Статус заказа был изменен |