Кешування рахунків
Кешування рахунків пидвищує швидкодію в отриманні рахунку для гостя. Expirenza віддає рахунок з "власного кеша", замість того щоб робити запити до POS.
Процес виглядає так:
Раз на 5 секунд необхідно відправляти інформацію про всі замовлення в стані New (нове) або Bill (надруковано пречек). Якщо сервер не отримує вебхук протягом 15 секунд - вважає замовлення неактуальними. Віддавати треба замовлення що є на столі, так і пусті замовлення, а також ті що змінились з моменту останнього оновлення.
Потребує реалізації linkedTo
та positionId
у getBill.
Після необхідно додати в versionInfo в implementedFeature
відповідний об'єкт реалізованого функціоналу - BILL_V2 та ORDERS_CACHE.
Restaurant ID
ORDERS_CACHE
Timestamp in UTC
2024-09-30T13:47:57Z
Request received and processed successfully
POST /callback/webhook HTTP/1.1
Host: api.shaketopay.com.ua
restoId: text
Content-Type: application/json
Accept: */*
Content-Length: 1791
{
"webhookType": "ORDERS_CACHE",
"eventTime": "2024-09-30T13:47:57Z",
"actualOrders": [
{
"orderId": "079D89A0-5BEF-4BCC-A279-2566D5FBAEAA",
"revision": 2
}
],
"changedOrders": [
{
"orderInfo": {
"billId": "A9D1D59E-DBE5-423F-82C8-95C14FEA97BD",
"orderNumber": "11.3",
"totalSum": 77.4,
"rawSum": 86,
"paidSum": 0,
"discountSum": 8.6,
"waiter": "TEST",
"waiterId": "1000004",
"tables": [
11
],
"discounts": {
"list": [
{
"id": "1002291",
"name": "Скидка 10% на чек",
"sum": 8.6,
"code": 6
}
]
},
"guests": [
{
"name": "Гість 1",
"id": "8436f6ff-6665-44de-a863-8be3352cb7d2",
"additionalInfo": {
"system": "syrve",
"comment": "some guest comment"
},
"dishes": [
{
"positionId": "4",
"name": "Combo salatov",
"count": 1,
"positionCount": 1,
"sum": 0,
"categoryId": -1,
"category": "Блюдо без категории",
"orderNumber": "11.3",
"type": "dish or combo or modifier",
"dishId": "1002281",
"rawSum": 0,
"price": 86,
"positionRawSum": 30,
"linkedTo": "4",
"additionalInfo": {
"system": "syrve",
"comment": "string",
"status": "added",
"productGroupExternalId": "for modifiers only"
}
}
]
}
],
"state": "NEW or BILL or CLOSED or DELETED",
"isDelivery": false,
"splitAvailable": true,
"version": 2,
"payments": [
{
"sum": 0,
"paymentTypeName": "string",
"paymentTypeKind": "Card",
"additionalInfo": {
"system": "syrve",
"isPrepay": true,
"isExternal": true,
"status": "new",
"externalId": "string",
"typeId": "string"
}
}
],
"orderType": "Common-в закладі,DeliveryByClient-самовивоз,DeliveryByCourier-доставка",
"additionalInfo": {
"system": "posName",
"tablesDetails": [
{
"externalId": "string",
"name": "string",
"fullName": "string",
"number": 21,
"seatingCapacity": 0,
"description": "string",
"isActive": true
}
],
"waiterDetails": {
"externalId": "string",
"name": "string",
"phone": "string",
"pinCode": "string"
}
},
"tableId": "1000051",
"created": "2024.09.30 13:47:57",
"banquetOrder": false,
"billAmountForTips": 123.35
}
}
]
}
Request received and processed successfully
No content
Команда ordersCacheUpdate
ordersCacheUpdate
Команда надсилається з сервера Expirenza в вебсокет, сервер надсилає перелік замовлень по яким треба обов'язково передати розгорнуту інформацію в при наступному виклику /calback/webhook (Той що ORDERS_CACHE
).
Відповідати на команду не потрібно.
Команда використовується для синхронізації з інтеграцією у випадку якщо сервер не отримав один або декілька вебхуків і ревізія замовлень які присилає інтеграція відрізняється від тих що є на сервері, сервер “просить” надіслати замовлення по яким є втрачені зміни ще раз.
Сервер надсилатиме повідомлення в такому форматі:
{
"operation":"ordersCacheUpdate",
"rID":"7e70fb9f257e459d8fc8dd609b7d23fc",
"orders":["14392","14386","14396","14400"]
}
Вебхук фінального статусу замовлення
Структура самого замовлення не відрізняється від ORDERS_CACHE
, відрізняється лише назва деяких полів.
Необхідно відправляти при отриманні фінального статуса по рахунку (Closed/Deleted) Якщо сервер не відповів 200, необхідно повторити відправку через деякий час ~1-5 хвилин.
Restaurant ID
BILL_CLOSED
2024-09-30T15:29:04.9036828Z
492fa768-2fb0-4b30-9f5a-db9c17db3fff
1
2024.09.30 18:28:59
2024.09.30 18:27:46
133264
140
Closed
140
0ab41df0-f4ae-4fbe-959f-ecaba7c85c85
Максимейко Наталія
true
2024.09.30 18:28:59
140
e6ad6ef3-bbdb-41c4-8fd3-dd0691142074
1865768
Common
Request received and processed successfully
POST /callback/webhook HTTP/1.1
Host: api.shaketopay.com.ua
restoId: text
Content-Type: application/json
Accept: */*
Content-Length: 1943
{
"webhookType": "BILL_CLOSED",
"eventTime": "2024-09-30T15:29:04.9036828Z",
"orderId": "492fa768-2fb0-4b30-9f5a-db9c17db3fff",
"tableNumber": 1,
"closeTime": "2024.09.30 18:28:59",
"openTime": "2024.09.30 18:27:46",
"orderNumber": 133264,
"resultSum": 140,
"orderStatus": "Closed",
"totalSum": 140,
"waiterId": "0ab41df0-f4ae-4fbe-959f-ecaba7c85c85",
"waiter": "Максимейко Наталія",
"discounts": {
"list": [
{
"id": "1002291",
"name": "Скидка 10% на чек",
"sum": 8.6,
"code": 6
}
]
},
"guests": [
{
"name": "Гість 0",
"id": "91ed5c34-85b2-4c54-a001-0f9e040d0004",
"dishes": [
{
"taxCategoryId": null,
"taxCategory": null,
"positionId": "127aaa1a-7fce-4ddc-95af-7af102eecc08",
"name": "Макаронс ",
"count": 1,
"sum": 70,
"price": 70,
"categoryId": "2e2e28fc-bbfd-ee15-018f-9687de9ed540",
"category": "Десерти Кебчук",
"orderNumber": 133264,
"type": "dish",
"dishId": "68591915-9a42-4fe8-84fa-a10a9fbbd6a2",
"linkedTo": null,
"rawSum": 70,
"additionalInfo": {
"system": "syrve",
"course": 1,
"comment": null,
"status": "Served",
"productGroupExternalId": null
}
}
]
}
],
"isBanquetOrder": false,
"isDelivery": false,
"bonusSum": 0,
"splitAvailable": false,
"rewardAvailable": true,
"billTime": "2024.09.30 18:28:59",
"paidSum": 140,
"discountSum": 0,
"tableId": "e6ad6ef3-bbdb-41c4-8fd3-dd0691142074",
"pricingTime": null,
"version": 1865768,
"payments": [
{
"paymentTypeName": "Готівка",
"sum": 140,
"paymentTypeKind": "Cash",
"additionalInfo": {
"system": "syrve",
"externalId": "5b28a833-ba81-41d9-83a2-2cef3189d882",
"status": "Processed",
"typeId": "09322f46-578a-d210-add7-eec222a08871",
"isPrepay": false,
"isExternal": false
}
}
],
"additionalInfo": {
"system": "syrve",
"tablesDetails": [
{
"externalId": "e6ad6ef3-bbdb-41c4-8fd3-dd0691142074",
"name": "",
"fullName": null,
"number": 1,
"seatingCapacity": 0,
"description": null,
"isActive": true
}
],
"waiterDetails": [
{
"externalId": "0ab41df0-f4ae-4fbe-959f-ecaba7c85c85",
"name": "Максимейко Наталія",
"phone": "+380997716858",
"pinCode": "АК00-00043"
}
]
},
"orderType": "Common"
}
Request received and processed successfully
No content
Last updated