Към съдържанието

Интеграция с Hype Custom: справочник за API ​

Ключ на адаптера: hype-custom (HC) Документация в Postman: https://documenter.getpostman.com/view/52109283/2sBXc8oNnL


Съдържание ​

  1. Общ преглед
  2. Архитектура
  3. Удостоверяване
  4. Базови URL адреси и ограничения
  5. Обработка на грешки
  6. Система от задачи
  7. Справочник за обектите
  8. Webhook адреси
  9. Управление на интеграции
  10. Управление на опашки
  11. Статуси на интеграцията и процеса на синхронизация
  12. Първоначална синхронизация
  13. Текуща синхронизация
  14. Кратък справочник

1. Общ преглед ​

Hype Custom е адаптер за двупосочна интеграция в Hype Exchange Service (HES). Тази облачна услуга синхронизира данни между Hype POS, инсталиран на място в ресторанта, и външни платформи.

Адаптерът hype-custom позволява на външна платформа да:

  • Получава категории, добавки, салони, маси и артикули от менюто на Hype POS
  • Изпраща заявки за поръчки от онлайн платформа към Hype POS
  • Синхронизира канали за доставка, видове плащане и статуси на поръчки между платформите
  • Управлява жизнения цикъл на поръчките: създаване, промяна на статус и проследяване на доставката

Какво е Hype? ​

Hype Software е ERP система за барове, ресторанти и кафенета. Вашата платформа се свързва с нея чрез HES, за да получава данни от каталога, да изпраща поръчки и да получава промени в статусите им.

Основни понятия ​

ПонятиеОписание
HESHype Exchange Service, облачната услуга на es.hype-software.com, през която минава комуникацията по интеграциите
АдаптерМодул в HES за конкретна платформа. hype-custom е адаптерът за произволни външни платформи
ИнтеграцияНастроена връзка между акаунт в Hype POS и акаунт във външна платформа
ЗадачаЕдиница работа, създадена от HES за изпълнение от платформата: създаване, промяна или извличане на обект
PipelineПодредена последователност от стъпки за първоначална синхронизация
Съпоставяне на стойностиВътрешни връзки в HES между идентификаторите на обекти в двете платформи, например артикул №5 в Hype е продукт №123 във вашата платформа
АкаунтЕдната страна на интеграцията: акаунт в Hype Server или във външната платформа

2. Архитектура ​

Мястото на Hype Custom в HES ​

text
Вашата платформа -> HES: извличане на задачи за синхронизация (GET)
Вашата платформа -> HES: отчитане на резултати от задачи (PUT)
Вашата платформа -> HES: изпращане на поръчки и промени (POST/PUT webhook)
HES -> Вашата платформа: чакащи задачи, отговори на заявки, статус на интеграцията

Начини на комуникация ​

Адаптерът hype-custom използва два начина на комуникация:

1. Периодично извличане на задачи (HES -> вашата платформа)

Когато Hype POS изпрати данни към HES, например нов артикул, HES създава задачи за вашата платформа. Тя периодично ги извлича, обработва ги и връща резултатите.

HES предоставя промените в каталога като задачи за вашата платформа
Вашата платформа --> GET /tasks/hype-custom/items --> HES връща чакащите задачи
Вашата платформа обработва задачите: създава/променя записи
Вашата платформа --> PUT /tasks/hype-custom/items --> Отчита резултатите в HES

2. Изпращане чрез webhook (вашата платформа -> HES)

Когато вашата платформа трябва да изпрати данни към Hype, например нова онлайн поръчка, тя ги изпраща директно към webhook адресите на HES.

Вашата платформа --> POST /webhook/hype-custom/orderRequests --> HES
  HES приема заявката с 204 и я доставя асинхронно
  Проверете дали поръчката се появява в Hype; 204 не потвърждава доставянето

3. Удостоверяване ​

Всички API заявки изискват Bearer токен в хедъра Authorization.

Authorization: Bearer <your_api_token>

Получаване на API токен ​

API токен се издава при създаване на интеграция между вашата платформа и клиент на Hype POS. Свържете се с поддръжката на Hype за настройване на интеграцията. Ще получите api_token, свързан с акаунта на вашата платформа в HES.

Грешка при удостоверяване ​

Ако токенът липсва или е невалиден, API връща:

HTTP/1.1 401 Unauthorized

Задължителни хедъри ​

Всички заявки трябва да включват:

Content-Type: application/json
Accept: application/json
Authorization: Bearer <your_api_token>

4. Базови URL адреси и ограничения ​

Среди ​

СредаБазов URL адрес
Разработкаhttps://es.dev.hype-software.com
Продукцияhttps://es.hype-software.com

Комуникацията е само по HTTPS. HTTP заявките се пренасочват с код 301 към съответния HTTPS адрес.

Ограничения на броя заявки ​

Ограниченията са за всеки API токен и зависят от групата адреси:

АдресиОграничение
/tasks/hype-custom/* и /webhook/hype-custom/*1000 заявки в минута
/api/hype-custom/* (интеграции и задания в опашката)60 заявки в минута

При надвишаване на ограничението API връща 429 Too Many Requests.

Хедър на отговораОписание
X-RateLimit-LimitМаксимален брой заявки в минута
X-RateLimit-RemainingОставащи заявки в текущия времеви прозорец

Тези хедъри се връщат при заявки в рамките на ограничението. Отговорът 429 не съдържа Retry-After или X-RateLimit-Reset, затова изчакайте преди нов опит (прозорецът е една минута), например с експоненциално нарастващо забавяне.


5. Обработка на грешки ​

Грешките при удостоверяване, маршрутизиране, ограничение на заявките и неочакваните сървърни грешки връщат HTTP кода и следното JSON тяло:

json
{
  "error": 1,
  "message": "Error description text"
}
КодЗначение
401Липсващ или невалиден Bearer токен
404Непознат обект в /tasks/hype-custom/{entity}, непознат entity_task_id или непозната интеграция
429Надвишен брой заявки
500Вътрешна грешка на сървъра. Връща се и при заявка за задания в опашката на интеграция извън вашия акаунт, както и при резултат от задача без entity_task_id

HES не валидира телата на заявките синхронно, затова тези адреси никога не връщат 422:

  • Webhook адресите (/webhook/hype-custom/{entity}) приемат всяко JSON тяло с 204 No Content и го обработват асинхронно. Невалидните данни водят до грешка по-късно; проверете заданията в опашката на интеграцията.
  • Webhook за неподдържан обект не връща 404: POST връща 500, а останалите методи връщат 200 с {"error": "Resource can't be found"}. Проверявайте името на обекта в адреса винаги когато webhook върне код, различен от 204.
  • Резултат от задача без status се отчита като неуспешен.

6. Система от задачи ​

Задачите са основният механизъм за синхронизиране на данни от Hype POS към вашата платформа. HES създава задачи, които платформата трябва да извлече, обработи и отчете.

Как работи ​

  1. HES създава задачи при промяна на обекти в Hype POS или при първоначална синхронизация
  2. Вашата платформа извлича чакащите задачи чрез GET /tasks/hype-custom/{entity}
  3. Вашата платформа обработва всяка задача: създава, променя или извлича записи в собствената си система
  4. Вашата платформа връща резултатите чрез PUT /tasks/hype-custom/{entity}

Структура на задачата ​

Всяка задача, върната от GET заявка, има следната структура:

json
{
  "id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
  "request": { ... },
  "status": 0,
  "meta": {
    "source_account": {
      "id": "a0fa1fe5-feda-4753-9f23-691343e3828c",
      "name": "Local",
      "platform_id": "4d410b0e-ee37-497e-8362-478a383d68ee",
      "platform_name": "Hype Server",
      "platform_key": "hype-server"
    }
  },
  "type": "POST"
}
ПолеТипОписание
idUUID низИдентификатор на задачата, необходим при отчитане на резултата
requestobject/arrayДанните на обекта за обработка. При GET задачи съдържа настройките на интеграцията за вашия акаунт или [], ако няма такива; не е нужно да ги обработвате.
statusintegerПри извличане винаги е 0, тоест нова и необработена задача
metaobjectsource_account описва акаунта в Hype Server, от който идва промяната: id, name, platform_id, platform_name, platform_key
typestringОперацията за изпълнение: GET изпраща всички записи от този тип от вашата система, POST създава запис, PUT променя запис

Значение на типовете задачи ​

ТипЗначениеВашето действие
GETHES иска всички записи от този тип от вашата платформаВърнете всички записи в отговора
POSTВ Hype е създаден нов обектСъздайте записа и го върнете с идентификатора от вашата платформа
PUTВ Hype е променен съществуващ обектПроменете записа и върнете обновената версия

В момента HES не изпраща DELETE задачи. Когато съпоставен запис бъде изтрит в Hype, получавате PUT задача за него с нулирани полета (празни низове или нули, например "name": ""). Проверявайте за този случай, преди да приложите PUT, и изтрийте записа, ако отразявате изтриванията.

Отчитане на резултатите от задачите ​

След обработката върнете резултатите с PUT заявка. Тялото е масив от резултати:

json
[
  {
    "entity_task_id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
    "response": { ... },
    "status": 201
  }
]
ПолеТипОписание
entity_task_idUUID низПолето id от първоначалната задача
responseobject/arrayРезултатът от обработката. Успешните задачи, различни от GET, трябва да включват id на обекта във вашата платформа. Успешните GET задачи връщат масив с всички записи от съответния тип.
statusintegerHTTP код за резултата: 200 означава обновен запис, 201 създаден, а 4xx/5xx грешка

Успешна PUT заявка връща 204 No Content.

При успешни задачи, различни от GET, върнете id от вашата платформа, когато сте създали или намерили реален обект. HES използва този id, за да съпостави обектите за последващата синхронизация.

При успешни GET задачи върнете JSON масив в response. Всеки елемент трябва да следва схемата на съответния обект и да съдържа постоянния му id във вашата платформа. При първоначалната синхронизация HES събира така статусите на поръчки, каналите за доставка и видовете плащане за ръчно съпоставяне в административния интерфейс на Hype Server след активиране. Връщайте празен масив само ако нямате записи от този тип.

Изключение за салони и маси: ако платформата ви не моделира разположението в обекта и не изисква съпоставяне на салони и маси, можете да отчетете успешните задачи за тях с празен обект в отговора:

json
[
  {
    "entity_task_id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
    "response": {},
    "status": 200
  }
]

Това позволява синхронизацията да продължи, но не създава връзка между идентификаторите на салона или масата. Ако използвате този вариант, не включвайте tableId при създаване на заявки за поръчки към Hype Server, защото HES няма да може да преобразува тази референция.


7. Справочник за обектите ​

7.1 Артикули ​

Артикулите са продаваните позиции от менюто на Hype POS: ястия, напитки и други.

Схема ​

ПолеТипЗадължителноОписание
idstring/integerДа, при PUT/отговорУникалният идентификатор на артикула във вашата платформа
namestringДаИме на артикула
categoryIdstring/integerДаИдентификатор на съпоставената категория във вашата платформа
pricenumberДаЦена на артикула
preparationTimeintegerНеВреме за приготвяне в минути. Задачите изпращат 0, когато в Hype няма стойност.
barCodestringНеБаркод
modifiersarrayНеСписък с идентификатори на модификатори; все още не се използва
supplementsarrayНеВинаги е празен ([]) в PUT задачите и липсва в POST задачите. Използвайте самостоятелния обект supplements.
quantityintegerНеВинаги е 1. Не означава наличност.
activebooleanДаДали артикулът е активен/видим

Забележка: задачите за артикули не съдържат данни за добавки. Добавките, връзките им и референциите към тях в поръчките идват от самостоятелния обект supplements.

API адреси ​

МетодURLОписание
GET/tasks/hype-custom/itemsИзвличане на чакащи задачи за артикули
PUT/tasks/hype-custom/itemsОтчитане на задачи за артикули

Пример: извличане на задачи за артикули ​

Заявка:

GET /tasks/hype-custom/items
Authorization: Bearer <token>
Content-Type: application/json
Accept: application/json

Отговор: 200 OK

json
[
  {
    "id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
    "request": {
      "name": "Маргарита 20",
      "categoryId": 31,
      "price": 4.33,
      "preparationTime": 20,
      "barCode": "812345679",
      "modifiers": [],
      "quantity": 1,
      "active": true
    },
    "status": 0,
    "meta": {
      "source_account": {
        "id": "a0fa1fe5-feda-4753-9f23-691343e3828c",
        "name": "Local",
        "platform_id": "4d410b0e-ee37-497e-8362-478a383d68ee",
        "platform_name": "Hype Server",
        "platform_key": "hype-server"
      }
    },
    "type": "POST"
  },
  {
    "id": "9a101f76-f1c8-47c2-a19f-439150bb58ab",
    "request": {
      "id": "87001",
      "name": "Coca Cola",
      "categoryId": 31,
      "price": 2.5,
      "preparationTime": 0,
      "barCode": "712345689",
      "modifiers": [],
      "supplements": [],
      "quantity": 1,
      "active": true
    },
    "status": 0,
    "meta": {
      "source_account": {
        "id": "a0fa1fe5-feda-4753-9f23-691343e3828c",
        "name": "Local",
        "platform_id": "4d410b0e-ee37-497e-8362-478a383d68ee",
        "platform_name": "Hype Server",
        "platform_key": "hype-server"
      }
    },
    "type": "PUT"
  }
]

Пример: отчитане на задачи за артикули ​

Заявка:

PUT /tasks/hype-custom/items
Authorization: Bearer <token>
Content-Type: application/json
Accept: application/json

Тяло:

json
[
  {
    "entity_task_id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
    "response": {
      "id": "87008",
      "name": "Маргарита 20",
      "categoryId": 31,
      "price": 4.33,
      "preparationTime": 20,
      "barCode": "812345679",
      "modifiers": [],
      "supplements": [],
      "quantity": 1,
      "active": true
    },
    "status": 201
  },
  {
    "entity_task_id": "9a101f76-f1c8-47c2-a19f-439150bb58ab",
    "response": {
      "id": "87001",
      "name": "Coca Cola",
      "categoryId": 31,
      "price": 2.5,
      "preparationTime": 0,
      "barCode": "712345689",
      "modifiers": [],
      "supplements": [],
      "quantity": 1,
      "active": true
    },
    "status": 200
  }
]

Отговор: 204 No Content


7.2 Категории ​

Категориите групират артикулите от менюто. Hype използва йерархия на две нива: основни категории и категории в менюто.

Схема ​

ПолеТипЗадължителноОписание
idstring/integerДа, при PUT/отговорУникален идентификатор във вашата платформа
namestringДаИме на категорията
orderintegerДаРед на подреждане

API адреси ​

МетодURLОписание
GET/tasks/hype-custom/categoriesИзвличане на чакащи задачи за категории
PUT/tasks/hype-custom/categoriesОтчитане на задачи за категории

Пример: извличане на задачи за категории ​

Заявка:

GET /tasks/hype-custom/categories
Authorization: Bearer <token>

Отговор: 200 OK

json
[
  {
    "id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
    "request": {
      "name": "Сандвичи",
      "order": 1
    },
    "status": 0,
    "meta": {
      "source_account": {
        "id": "a0fa1fe5-feda-4753-9f23-691343e3828c",
        "name": "Local",
        "platform_id": "4d410b0e-ee37-497e-8362-478a383d68ee",
        "platform_name": "Hype Server",
        "platform_key": "hype-server"
      }
    },
    "type": "POST"
  },
  {
    "id": "9a101f76-f1c8-47c2-a19f-439150bb58ab",
    "request": {
      "name": "Пици",
      "order": 2
    },
    "status": 0,
    "meta": {
      "source_account": {
        "id": "a0fa1fe5-feda-4753-9f23-691343e3828c",
        "name": "Local",
        "platform_id": "4d410b0e-ee37-497e-8362-478a383d68ee",
        "platform_name": "Hype Server",
        "platform_key": "hype-server"
      }
    },
    "type": "POST"
  },
  {
    "id": "9a101f76-f1c8-47c2-a19f-489150bb62b1",
    "request": {
      "id": 234,
      "name": "Бира",
      "order": 3
    },
    "status": 0,
    "meta": {
      "source_account": {
        "id": "a0fa1fe5-feda-4753-9f23-691343e3828c",
        "name": "Local",
        "platform_id": "4d410b0e-ee37-497e-8362-478a383d68ee",
        "platform_name": "Hype Server",
        "platform_key": "hype-server"
      }
    },
    "type": "PUT"
  }
]

Пример: отчитане на задачи за категории ​

Заявка:

PUT /tasks/hype-custom/categories
Authorization: Bearer <token>

Тяло:

json
[
  {
    "entity_task_id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
    "response": {
      "id": "3011",
      "name": "Сандвичи",
      "order": 1
    },
    "status": 201
  },
  {
    "entity_task_id": "9a101f76-f1c8-47c2-a19f-439150bb58ab",
    "response": {
      "id": "135",
      "name": "Пици",
      "order": 2
    },
    "status": 201
  }
]

Отговор: 204 No Content


7.3 Добавки ​

Всеки запис за добавка свързва добавка с един артикул и съдържа цената ѝ за този артикул. Добавките достигат до вашата платформа чрез собствени задачи; задачите за артикули не ги съдържат. Поръчките ги посочват по id в orderDetails.items[].supplements[].

Задачи за добавки се появяват при първоначалната синхронизация и всеки път, когато добавка бъде създадена или променена в Hype.

Схема ​

ПолеТипЗадължителноОписание
idstring/integerДа, при PUT/отговорУникален идентификатор на добавката в рамките на менюто във вашата платформа
articleIdstring/integerДаИдентификатор на свързания артикул във вашата платформа
pricenumberДаПродажна цена на добавката за този артикул
namestringНеИме на добавката. Задачите винаги го съдържат; съвпада със supplement.name.
supplementobjectДаВложени данни за добавката

Вложен обект: supplement ​

ПолеТипОписание
namestringИме на добавката

API адреси ​

МетодURLОписание
GET/tasks/hype-custom/supplementsИзвличане на чакащи задачи за добавки
PUT/tasks/hype-custom/supplementsОтчитане на задачи за добавки

Пример: извличане на задачи за добавки ​

Отговор: 200 OK

json
[
  {
    "id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
    "request": {
      "articleId": "item-101",
      "price": 2.5,
      "name": "Extra cheese",
      "supplement": {
        "name": "Extra cheese"
      }
    },
    "status": 0,
    "meta": {
      "source_account": {
        "id": "a0fa1fe5-feda-4753-9f23-691343e3828c",
        "name": "Local",
        "platform_id": "4d410b0e-ee37-497e-8362-478a383d68ee",
        "platform_name": "Hype Server",
        "platform_key": "hype-server"
      }
    },
    "type": "POST"
  }
]

Пример: отчитане на задачи за добавки ​

Тяло:

json
[
  {
    "entity_task_id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
    "response": {
      "id": "supplement-301",
      "articleId": "item-101",
      "price": 2.5,
      "supplement": {
        "name": "Extra cheese"
      }
    },
    "status": 201
  }
]

Отговор: 204 No Content


7.4 Салони ​

Салоните са помещения или зони в плана на обекта в Hype POS, например Main Hall, Garden или Bar Area.

Задачи за салони се появяват при първоначалната синхронизация и всеки път, когато салон бъде създаден или променен в Hype.

Схема ​

ПолеТипЗадължителноОписание
idstring/integerОбикновено, при PUT/отговорУникален идентификатор на салона във вашата платформа
namestringДаИме на салона
widthintegerДаШирина на плана
heightintegerДаВисочина на плана
orderintegerДаРед на подреждане

API адреси ​

МетодURLОписание
GET/tasks/hype-custom/saloonsИзвличане на чакащи задачи за салони
PUT/tasks/hype-custom/saloonsОтчитане на задачи за салони

Пример: извличане на задачи за салони ​

Отговор: 200 OK

json
[
  {
    "id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
    "request": {
      "name": "Main Hall",
      "width": 2400,
      "height": 1400,
      "order": 1
    },
    "status": 0,
    "meta": {
      "source_account": {
        "id": "a0fa1fe5-feda-4753-9f23-691343e3828c",
        "name": "Local",
        "platform_id": "4d410b0e-ee37-497e-8362-478a383d68ee",
        "platform_name": "Hype Server",
        "platform_key": "hype-server"
      }
    },
    "type": "POST"
  }
]

Пример: отчитане на задачи за салони ​

Тяло:

json
[
  {
    "entity_task_id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
    "response": {
      "id": "saloon-11",
      "name": "Main Hall",
      "width": 2400,
      "height": 1400,
      "order": 1
    },
    "status": 201
  }
]

Отговор: 204 No Content

Ако вашата платформа не съхранява салони, можете да отчетете успешна задача за салон с status: 200 и response: {}. Това позволява синхронизацията да продължи без създаване на връзка за салона.


7.5 Маси ​

Масите са реалните, невиртуални маси в плана на обекта. Те зависят от салоните, затова връзките между идентификаторите на салоните трябва да съществуват преди пълната обработка на задачите за маси.

Задачи за маси се появяват при първоначалната синхронизация и всеки път, когато маса бъде създадена или променена в Hype.

Схема ​

ПолеТипЗадължителноОписание
idstring/integerОбикновено, при PUT/отговорУникален идентификатор на масата във вашата платформа
namestringДаИме на масата
saloonIdstring/integerДаИдентификатор на салона във вашата платформа, вече преведен от HES, или 0, ако сте потвърдили салона с {}
xintegerДаКоордината X в плана на салона
yintegerДаКоордината Y в плана на салона
widthintegerДаШирина на масата в плана
heightintegerДаВисочина на масата в плана

Забележки:

  • Синхронизират се само невиртуални маси.
  • Данните включват позиция и размери, но не включват визуални стилове или settings.
  • Ако вашата платформа не съхранява маси, можете да отчетете успешните задачи с status: 200 и response: {}. Синхронизацията продължава без съпоставяне на масите; в този случай не изпращайте tableId в webhook заявките за поръчки.

API адреси ​

МетодURLОписание
GET/tasks/hype-custom/tablesИзвличане на чакащи задачи за маси
PUT/tasks/hype-custom/tablesОтчитане на задачи за маси

Пример: извличане на задачи за маси ​

Отговор: 200 OK

json
[
  {
    "id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
    "request": {
      "name": "T12",
      "saloonId": "saloon-11",
      "x": 320,
      "y": 180,
      "width": 96,
      "height": 96
    },
    "status": 0,
    "meta": {
      "source_account": {
        "id": "a0fa1fe5-feda-4753-9f23-691343e3828c",
        "name": "Local",
        "platform_id": "4d410b0e-ee37-497e-8362-478a383d68ee",
        "platform_name": "Hype Server",
        "platform_key": "hype-server"
      }
    },
    "type": "POST"
  }
]

Пример: отчитане на задачи за маси ​

Тяло:

json
[
  {
    "entity_task_id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
    "response": {
      "id": "table-88",
      "name": "T12",
      "saloonId": "saloon-11",
      "x": 320,
      "y": 180,
      "width": 96,
      "height": 96
    },
    "status": 201
  }
]

Отговор: 204 No Content


7.6 Заявки за поръчки ​

Заявките за поръчки са входящите поръчки от вашата платформа към Hype POS. Това е най-сложният обект и съдържа вложени данни за плащане, доставка, клиент и поръчани артикули.

Схема ​

ПолеТипЗадължителноОписание
idstring/integerДаУникален идентификатор на поръчката във вашата платформа
tableIdstring/integerНеИдентификатор на масата във вашата платформа. Ако е подаден, трябва вече да е съпоставен чрез самостоятелната синхронизация на tables.
discountnumberНеОбща сума на отстъпката
tipnumberНеБрутна сума на бакшиша. Изпраща се към Hype Server като надбавка на ниво поръчка. Липсващ tip се приема за 0.
paymentTypesarrayДаИзползвани начини на плащане, описани по-долу
orderCommentstringНеОбщ коментар към поръчката
deliveryChannelobjectДаДанни за начина на доставка, описани по-долу. Полето id трябва да е съпоставено при настройката. Без deliveryChannel HES пак връща 204, но не може да достави поръчката до Hype.
statusobjectДаТекущ статус на поръчката, описан по-долу
clientDetailsobjectНеДанни за клиента, описани по-долу
orderDetailsobjectДаПоръчани артикули, описани по-долу
totalnumberДаОбща сума след отстъпки, включително доставка и бакшиш
subTotalnumberДаМеждинна сума преди отстъпки и доставка

Вложен обект: paymentTypes[] ​

ПолеТипОписание
idstring/integerИдентификатор на вида плащане, съпоставен при настройката на интеграцията
namestringИме на вида плащане
amountnumberСума, платена с този метод
statusstringСтатус на плащането. Използвайте "completed" за вече получена сума и "pending" за избран, но неплатен метод. Hype Server третира всяка друга стойност като неплатена.

Hype Server прилага paymentTypes[].status, когато поръчката бъде прикачена към сметка на маса (приета). Дотогава, докато поръчката е нова, webhook за промяна заменя paymentTypes, така че промените в плащанията преди приемането се отразяват. Промени на статуса на плащане след прикачването се игнорират.

Вложен обект: deliveryChannel ​

ПолеТипОписание
idstring/integerИдентификатор на канала за доставка, съпоставен при настройката на интеграцията
namestringИме на канала
deliveryPricenumberТакса за доставка

Вложен обект: status ​

ПолеТипОписание
idstring/integerИдентификатор на статуса, съпоставен при настройката на интеграцията
namestringИме на статуса, например „Нова“ или „Приета“

Вложен обект: clientDetails ​

ПолеТипОписание
firstNamestringСобствено име на клиента
lastNamestringФамилия на клиента
phonestringТелефонен номер
citystringГрад
postCodestringПощенски код
addressstringАдрес
formattedstringПълен форматиран адрес

Вложен обект: orderDetails ​

ПолеТипОписание
itemsarrayМасив от поръчани артикули, описан по-долу

Забележка: използвайте orderDetails.items както при създаване, така и при промяна на поръчка.

Вложен обект: orderDetails.items[] ​

ПолеТипОписание
idstring/integerИдентификатор на артикула, съпоставен при първоначалната синхронизация на артикулите
namestringИме на артикула
modifierIdsarrayМасив с идентификатори на модификатори; все още не се поддържа
supplementsarrayНезадължителни добавки със задължителен id, незадължителна единична price и незадължително quantity, по подразбиране 1. Идентификаторите се съпоставят чрез синхронизацията на supplements в рамките на менюто.
commentstringКоментар към артикула
quantityintegerПоръчано количество
orderPricenumberЕдинична цена към момента на поръчката

Вложен обект: orderDetails.items[].supplements[] ​

ПолеТипОписание
idstring/integerИдентификатор на добавката във вашата платформа
pricenumberНезадължителна единична цена на добавката за този поръчан артикул
quantityintegerНезадължително количество на добавката за този артикул. Ако липсва, се приема 1.

Забележка: supplements[].price е единична цена, а не обща сума на реда. За общата сума на добавката към артикула изчислете price * quantity.

API адреси ​

Адреси за задачи, чрез които получавате промени по поръчки от Hype:

МетодURLОписание
GET/tasks/hype-custom/orderRequestsИзвличане на чакащи задачи за поръчки
PUT/tasks/hype-custom/orderRequestsОтчитане на задачи за поръчки

Webhook адреси за изпращане на поръчки към Hype:

МетодURLОписание
POST/webhook/hype-custom/orderRequestsСъздаване на нова заявка за поръчка
PUT/webhook/hype-custom/orderRequestsПромяна на съществуваща заявка за поръчка

Пример: създаване чрез webhook за заявки за поръчки ​

Заявка:

POST /webhook/hype-custom/orderRequests
Authorization: Bearer <token>
Content-Type: application/json

Тяло:

json
{
  "id": 1,
  "tableId": 42,
  "discount": 3.45,
  "tip": 2.5,
  "paymentTypes": [
    {
      "id": 1,
      "name": "Stripe",
      "amount": 12.75,
      "status": "completed"
    }
  ],
  "orderComment": "Коментар към поръчката",
  "deliveryChannel": {
    "id": 1,
    "name": "За плажа",
    "deliveryPrice": 2.5
  },
  "status": {
    "id": 1,
    "name": "Нова"
  },
  "clientDetails": {
    "firstName": "Иван",
    "lastName": "Иванов",
    "phone": "+12345",
    "city": "Бургас",
    "postCode": "8000",
    "address": "кв. Възраждане, 111",
    "formatted": "Бургас, 8000, кв. Възраждане, 111"
  },
  "orderDetails": {
    "items": [
      {
        "id": 255653,
        "name": "Маргарита 20",
        "modifierIds": [],
        "supplements": [
          {
            "id": 3,
            "price": 2.0,
            "quantity": 1
          }
        ],
        "comment": "Да няма нищо зелено, като рукола зелени маслини или чушки",
        "quantity": 2,
        "orderPrice": 4.33
      }
    ]
  },
  "total": 12.75,
  "subTotal": 8.67
}

Отговор: 204 No Content

Пример: промяна чрез webhook за заявки за поръчки ​

Използвайте тази заявка, за да замените текущите данни на чакаща заявка за поръчка. Изпратете същата структура като при създаване, докато поръчката още е нова и не е свързана или приета в Hype.

Заявка:

PUT /webhook/hype-custom/orderRequests
Authorization: Bearer <token>
Content-Type: application/json

Тяло:

json
{
  "id": 1,
  "tableId": 42,
  "discount": 3.45,
  "tip": 2.5,
  "paymentTypes": [
    {
      "id": 1,
      "name": "Stripe",
      "amount": 12.75,
      "status": "completed"
    }
  ],
  "orderComment": "Коментар към поръчката",
  "deliveryChannel": {
    "id": 1,
    "name": "За плажа",
    "deliveryPrice": 2.5
  },
  "status": {
    "id": 2,
    "name": "Приета"
  },
  "clientDetails": {
    "firstName": "Иван",
    "lastName": "Иванов",
    "phone": "+12345",
    "city": "Бургас",
    "postCode": "8000",
    "address": "кв. Възраждане, 118",
    "formatted": "Бургас, 8000, кв. Възраждане, 118"
  },
  "orderDetails": {
    "items": [
      {
        "id": 255653,
        "name": "Маргарита 20",
        "modifierIds": [],
        "supplements": [
          {
            "id": 3,
            "price": 2.0,
            "quantity": 1
          }
        ],
        "comment": "Да няма нищо зелено, като рукола, зелени маслини или чушки",
        "quantity": 2,
        "orderPrice": 4.33
      }
    ]
  },
  "total": 12.75,
  "subTotal": 8.67
}

Отговор: 204 No Content

Забележки:

  • PUT /webhook/hype-custom/orderRequests приема същите полета като webhook заявката за създаване: tableId, paymentTypes, deliveryChannel, clientDetails, orderDetails.items, tip, сумите и status.
  • В текущия процес на Hype Server тези пълни промени се прилагат, докато заявката за поръчка е нова и още не е свързана със сметка на маса.
  • След свързване или приемане на поръчката в Hype обработката на PUT се основава на статуса. За последващи промени разчитайте на полето status.

Пример: извличане на задачи за поръчки от Hype ​

Когато Hype POS промени статуса на поръчка, например на „Приета“, HES създава задача от тип PUT за вашата платформа.

Заявка:

GET /tasks/hype-custom/orderRequests
Authorization: Bearer <token>

Отговор: 200 OK

json
[
  {
    "id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
    "request": {
      "id": 1,
      "status": {
        "id": 2,
        "name": "Приета"
      }
    },
    "status": 0,
    "meta": {
      "source_account": {
        "id": "a0fa1fe5-feda-4753-9f23-691343e3828c",
        "name": "Local",
        "platform_id": "4d410b0e-ee37-497e-8362-478a383d68ee",
        "platform_name": "Hype Server",
        "platform_key": "hype-server"
      }
    },
    "type": "PUT"
  }
]

Забележки:

  • Hype обновява съпоставения status на поръчката. Други полета може да са запазени от по-рано съхранени данни; те не са актуално състояние на цялата поръчка. Примерът показва само нужните на обработчика id и status.
  • Използвайте външното поле status в резултата, за да отчетете обработката, например 200 при успех.

Пример: отчитане на задачи за заявки за поръчки ​

Заявка:

PUT /tasks/hype-custom/orderRequests
Authorization: Bearer <token>

Тяло:

json
[
  {
    "entity_task_id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
    "response": {
      "id": 1,
      "status": {
        "id": 2,
        "name": "Приета"
      }
    },
    "status": 200
  }
]

Отговор: 204 No Content


7.7 Канали за доставка ​

Каналите за доставка описват как се изпълняват поръчките, например консумация на място, вземане или доставка до плажа. Те се синхронизират само при първоначална настройка, за да може HES да съпостави идентификаторите на начините за доставка между платформите.

Тези стойности не се съпоставят автоматично. След като интеграцията стане активна, каналите за доставка, видовете плащане и статусите на поръчки трябва да се съпоставят ръчно в административния интерфейс на Hype Server.

Схема ​

ПолеТипЗадължителноОписание
idstring/integerДаИдентификатор на канала за доставка във вашата платформа
namestringДаИме на канала
deliveryPricenumberНеТакса за доставка по подразбиране

API адреси ​

Адреси за задачи:

МетодURLОписание
GET/tasks/hype-custom/orderDeliveryChannelsИзвличане на чакащи задачи за канали за доставка
PUT/tasks/hype-custom/orderDeliveryChannelsОтчитане на задачи за канали за доставка

Webhook адреси:

МетодURLОписание
POST/webhook/hype-custom/orderDeliveryChannelsСъздаване на канал за доставка
PUT/webhook/hype-custom/orderDeliveryChannelsПромяна на канал за доставка

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

Отговор: 200 OK

json
[
  {
    "id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
    "request": [],
    "status": 0,
    "meta": {
      "source_account": {
        "id": "a0fa1fe5-feda-4753-9f23-691343e3828c",
        "name": "Local",
        "platform_id": "4d410b0e-ee37-497e-8362-478a383d68ee",
        "platform_name": "Hype Server",
        "platform_key": "hype-server"
      }
    },
    "type": "GET"
  }
]

Задача от тип GET означава, че HES иска всички канали за доставка от вашата платформа.

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

Тяло:

json
[
  {
    "entity_task_id": "9a101f76-f1c8-47c2-a19f-259150bb62e0",
    "response": [
      {
        "id": 1,
        "name": "Takeaway"
      },
      {
        "id": 2,
        "name": "Delivery"
      }
    ],
    "status": 200
  }
]

Отговор: 204 No Content

Пример: създаване чрез webhook за канали за доставка ​

Заявка:

POST /webhook/hype-custom/orderDeliveryChannels
Authorization: Bearer <token>
Content-Type: application/json

Тяло:

json
{
  "id": 1,
  "name": "За плажа",
  "deliveryPrice": 2.5
}

Отговор: 204 No Content

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

Тяло:

json
{
  "id": 1,
  "name": "За плажа",
  "deliveryPrice": 2.2
}

Отговор: 204 No Content


7.8 Видове плащане ​

Видовете плащане описват как плащат клиентите, например Stripe, в брой или PayPal. Синхронизират се само при първоначална настройка за съпоставяне на идентификаторите.

Схема ​

ПолеТипЗадължителноОписание
idstring/integerДаИдентификатор на вида плащане във вашата платформа
namestringДаИме на вида плащане

API адреси ​

Адреси за задачи:

МетодURLОписание
GET/tasks/hype-custom/orderPaymentTypesИзвличане на чакащи задачи за видове плащане
PUT/tasks/hype-custom/orderPaymentTypesОтчитане на задачи за видове плащане

Webhook адреси:

МетодURLОписание
POST/webhook/hype-custom/orderPaymentTypesСъздаване на вид плащане
PUT/webhook/hype-custom/orderPaymentTypesПромяна на вид плащане

Пример: създаване чрез webhook за видове плащане ​

Тяло:

json
{
  "id": 1,
  "name": "Stripe"
}

Отговор: 204 No Content

Пример: промяна чрез webhook за видове плащане ​

Тяло:

json
{
  "id": 1,
  "name": "Stripe 2"
}

Отговор: 204 No Content


7.9 Статуси на заявки за поръчки ​

Статусите определят жизнения цикъл на поръчката, например „Нова“, „Приета“, „Приготвя се“ и „Доставена“. Синхронизират се само при първоначална настройка за съпоставяне на идентификаторите.

Схема ​

ПолеТипЗадължителноОписание
idstring/integerДаИдентификатор на статуса във вашата платформа
namestringДаИме на статуса

API адреси ​

Адреси за задачи:

МетодURLОписание
GET/tasks/hype-custom/orderRequestStatusИзвличане на чакащи задачи за статуси
PUT/tasks/hype-custom/orderRequestStatusОтчитане на задачи за статуси

Webhook адреси:

МетодURLОписание
POST/webhook/hype-custom/orderRequestStatusСъздаване на статус
PUT/webhook/hype-custom/orderRequestStatusПромяна на статус

Пример: създаване чрез webhook за статуси на заявки за поръчки ​

Тяло:

json
{
  "id": 1,
  "name": "Нова"
}

Отговор: 204 No Content

Пример: промяна чрез webhook за статуси на заявки за поръчки ​

Тяло:

json
{
  "id": 1,
  "name": "Изчакваща"
}

Отговор: 204 No Content


8. Webhook адреси ​

Всички webhook адреси използват еднакъв шаблон с името на обекта като параметър в пътя:

POST /webhook/hype-custom/:entity    -- Create an entity
PUT  /webhook/hype-custom/:entity    -- Update an entity
Стойност на :entityТип обект
orderRequestsЗаявки за поръчки
orderDeliveryChannelsКанали за доставка
orderPaymentTypesВидове плащане
orderRequestStatusСтатуси на заявки за поръчки

Забележки:

  • Всички webhook адреси връщат 204 No Content при успех
  • Артикули, категории, добавки, салони и маси се прехвърлят от Hype към вашата платформа чрез системата от задачи. Не ги изпращайте чрез hype-custom webhooks: webhook адресът приема данни за items, categories и supplements с 204, но HES не ги препраща към Hype
  • Заявките за поръчки се обменят двупосочно: вашата платформа ги изпраща чрез webhooks, а Hype връща промени чрез задачи
  • Канали за доставка, видове плащане и статуси се изпращат чрез webhooks основно при първоначална синхронизация

9. Управление на интеграции ​

Тези адреси позволяват да проверите състоянието на интеграциите си с клиенти на Hype POS.

Получаване на всички интеграции ​

GET /api/hype-custom/integrations
Authorization: Bearer <token>

Отговор:

json
[
  {
    "id": "9b57a2e7-48e3-4173-9bcd-11a831a6f111",
    "status": "syncing"
  }
]

Получаване на подробности за интеграция ​

Отговорът по подразбиране съдържа id и status. Заявете include=accountOne,pipeline за разширения пример по-долу или include=pipeline за напредъка на синхронизацията. Ако няма процес, полето pipeline се пропуска.

GET /api/hype-custom/integrations/:integrationId?include=accountOne,pipeline
Authorization: Bearer <token>

Отговор:

json
{
  "id": "9b57a2e7-48e3-4173-9bcd-11a831a6f111",
  "status": "syncing",
  "accountOne": {
    "id": "9a583928-13d9-4a0f-bb7f-c02b847a927c",
    "name": "demo.hype-software.com",
    "status": "active",
    "api_token": "9a583928-0e98-418a-940c-6650faf12163",
    "foreign_account_id": "157",
    "client_id": 157,
    "settings": [],
    "platform": {
      "id": "4d410b0e-ee37-497e-8362-478a383d68ee",
      "name": "Hype Server",
      "key": "hype-server",
      "prefix": "HS"
    }
  },
  "pipeline": {
    "id": "9b57a2e7-dd9b-428f-be5a-3173b77aebad",
    "status": "processing",
    "progress": {
      "step": 6,
      "from": 11,
      "task_id": "9b57a3a2-6cf6-4c06-9037-cea260069b6f"
    },
    "message": null
  }
}

Полета в подробностите за интеграцията ​

ПолеОписание
idUUID на интеграцията
statusТекущ статус; вижте статуси на интеграцията и синхронизацията
accountOneСвързаният с интеграцията акаунт в Hype Server
accountOne.platformМетаданни за платформата; за тази страна винаги е Hype Server
pipelineПоследният процес, заявен с include=pipeline; полето се пропуска, ако няма такъв
pipeline.progress.stepНомер на текущата стъпка, започващ от 1. След като процесът е synced, остава на индекса на последната стъпка, тоест from - 1.
pipeline.progress.fromОбщ брой стъпки; 11 при стандартна hype-custom интеграция
pipeline.progress.task_idUUID на EntityTask, която се обработва в текущата стъпка
pipeline.statusСтатус на процеса: "pending", "processing", "synced", "failed", "stopped"
pipeline.messageСъобщение при грешка; в останалите случаи е null

10. Управление на опашки ​

Заданията в опашката са вътрешни единици работа в HES, които създават задачи за синхронизация. Ако свързаните обекти още не са синхронизирани, заданията могат да завършат с грешка или да бъдат отложени.

Получаване на заданията в опашката ​

GET /api/hype-custom/integrations/:integrationId/queue-jobs
Authorization: Bearer <token>

Отговор:

json
[
  {
    "id": "1f6cc4e9-222f-4ee1-95fd-517e9b28dde8",
    "entity": "CategoryEntity",
    "request_method": "POST",
    "payload": {
      "id": 53,
      "name": "TEST 4",
      "color": "#674AEF",
      "order": 9007199254740991,
      "createdAt": "2024-04-15T12:15:37.013Z",
      "updatedAt": "2024-04-15T12:15:57.000Z",
      "mainCategoryId": null
    },
    "source": {
      "id": "9a583928-13d9-4a0f-bb7f-c02b847a927c",
      "name": "demo.hype-software.com"
    },
    "status": "failed",
    "error_msg": "The entity with name TEST 4, which the platform is attempting to update, has not yet been fully synchronized between the two platforms."
  },
  {
    "id": "5de7fd5e-9fb0-4e19-9c01-8763a90094a3",
    "entity": "OrderRequestStatusEntity",
    "request_method": "POST",
    "payload": {
      "id": 1,
      "translationKey": "NEW",
      "src_status": {}
    },
    "source": {
      "id": "9a583928-13d9-4a0f-bb7f-c02b847a927c",
      "name": "hype-fe.stage.scalewest.com"
    },
    "status": "pending",
    "error_msg": null
  }
]

Полета на заданието в опашката ​

ПолеТипОписание
idUUIDИдентификатор на заданието
entitystringИме на класа на обекта, например "CategoryEntity" или "OrderRequestStatusEntity"
request_methodstringHTTP метод от първоначалния webhook: POST, PUT, DELETE
payloadobjectОригиналните данни за обекта от платформата източник
sourceobjectАкаунтът източник, изпратил данните
statusstring"failed" или "pending"
error_msgstring/nullКонтекст на грешката, когато статусът е "failed"

Честа причина за грешка ​

Заданията завършват с грешка, когато сочат към несинхронизирани обекти. Например заявка за поръчка може да съдържа артикул, за който още няма връзка между идентификаторите. HES спира временно опашката и опитва отново след синхронизирането на липсващия обект.

Изтриване на задания от опашката ​

DELETE /api/hype-custom/integrations/:integrationId/queue-jobs/:jobId
Authorization: Bearer <token>
ПараметърЗадължителенОписание
:integrationIdДаUUID на интеграцията
:jobIdНеUUID на конкретно задание. Ако липсва, се изтриват всички задания в опашката.

11. Статуси на интеграцията и процеса на синхронизация ​

Статуси на интеграцията ​

СтатусОписание
inactiveИнтеграцията съществува, но синхронизацията не е започнала
syncingПървоначалната синхронизация се изпълнява
activeПървоначалната синхронизация е завършила; преди обмен на поръчки все още е нужно ръчно съпоставяне на статуси, канали и плащания в административния интерфейс на Hype Server
abortedПроцесът е завършил с грешка или е прекъснат ръчно
errorИнтеграцията е в състояние на грешка
text
Създаване на интеграция -> inactive -> syncing -> active
                                         |
                                         +-> aborted при грешка или прекъсване

След active завършете описаното по-долу ръчно съпоставяне, преди да разрешите поръчки. failed е статус на процеса; при неуспешен процес статусът на интеграцията става aborted.

Статуси на процеса на синхронизация ​

СтатусОписание
pendingПроцесът е създаден, но още не е започнал
processingСтъпките се изпълняват
syncedВсички стъпки са завършили успешно
failedСтъпка е завършила с грешка и процесът е спрян
stoppedПроцесът е спрян ръчно

12. Първоначална синхронизация ​

При създаване на интеграция HES изпълнява pipeline, строго подредена последователност от стъпки за синхронизиране на обектите между Hype POS и вашата платформа. Стъпките идват от конфигурациите на двата адаптера и се ограничават до типовете обекти, включени в шаблона на интеграцията.

Стъпки на процеса: общо 11 ​

Стандартната hype-custom интеграция има 11 стъпки, изпълнявани в следния ред:

Фаза 1: събиране на данните от Hype, стъпки 1-8

HES извлича обекти от Hype. Стъпки 1-5 създават задачи за вашата платформа, а стъпки 6-8 съхраняват стойностите от Hype за ръчно съпоставяне. Стандартните настройки за статуси, канали и плащания не предвиждат автоматично създаване на записи в другата платформа.

СтъпкаОбектКакво се случва
1КатегорииHES извлича категориите от Hype POS и създава POST задачи. Вие ги извличате, създавате в системата си и връщате собствените си идентификатори.
2СалониHES извлича салоните от Hype POS и създава POST задачи за вашата платформа.
3МасиHES извлича невиртуалните маси от Hype POS и създава POST задачи. Масите сочат към салоните от стъпка 2.
4АртикулиHES извлича артикулите от менюто и създава POST задачи. Те сочат към категориите от стъпка 1. Задачите за артикули не съдържат данни за добавки.
5ДобавкиHES извлича добавките в рамките на менюто и създава POST задачи. Получените връзки се използват при посочване на добавки в поръчки.
6Статуси на заявки за поръчкиHES съхранява статусите от Hype като варианти за ръчно съпоставяне след активиране.
7Канали за доставкаHES съхранява каналите от Hype като варианти за ръчно съпоставяне след активиране.
8Видове плащанеHES съхранява видовете плащане от Hype като варианти за ръчно съпоставяне след активиране.

Фаза 2: събиране на стойностите от вашата платформа, стъпки 9-11

HES заявява стойностите от вашата платформа чрез GET задачи и ги съхранява като другата страна на ръчното съпоставяне. Това не свързва стойностите автоматично и не ги създава в Hype POS.

СтъпкаОбектКакво се случва
9Статуси на заявки за поръчкиОтговорете на GET задачата за orderRequestStatus с масив от вашите статуси и постоянните им идентификатори. HES ги съхранява за ръчно съпоставяне.
10Канали за доставкаОтговорете на GET задачата за orderDeliveryChannels с масив от вашите канали и постоянните им идентификатори. HES ги съхранява за ръчно съпоставяне.
11Видове плащанеОтговорете на GET задачата за orderPaymentTypes с масив от вашите видове плащане и постоянните им идентификатори. HES ги съхранява за ръчно съпоставяне.

Защо редът е важен ​

  • Категории преди артикули, стъпки 1 и 4: артикулите сочат към категории чрез categoryId. Връзката за категорията трябва да съществува, за да може HES да преобразува тези референции.
  • Артикули преди добавки, стъпки 4 и 5: добавките сочат към артикули чрез articleId, затова артикулите трябва да бъдат синхронизирани първи.
  • Салони преди маси, стъпки 2 и 3: масите сочат към салони чрез saloonId. Връзката за салона е нужна за преобразуване на местоположението на масата.
  • Двете страни преди ръчно съпоставяне: стъпки 6-8 събират статусите, каналите и плащанията от Hype, а стъпки 9-11 събират вашите. И двата набора трябва да са налични, преди човек да ги свърже в административния интерфейс.

Преминаване към следваща стъпка ​

Процесът изпълнява една стъпка наведнъж. От гледна точка на вашата платформа:

  1. Извличайте задачи от всеки включен /tasks/hype-custom/{entity} адрес.
  2. Обработвайте всяка задача според type и изпращайте резултата чрез PUT /tasks/hype-custom/{entity}.
  3. Връщайте постоянни идентификатори за записите, които създавате или съпоставяте. HES записва резултатите и създава връзките между идентификаторите.
  4. HES преминава напред едва след завършване на цялата работа по текущата стъпка. Следете напредъка чрез GET /api/hype-custom/integrations/{id}?include=pipeline.
  5. След завършване на всички стъпки процесът става synced, а интеграцията active. Завършете описаното по-долу ръчно съпоставяне преди изпращане на поръчки.

Процесът чака без ограничение във времето. Ако платформата ви спре да извлича задачи или да връща резултати, синхронизацията може да остане в processing. Ако нямате чакащи задачи, но напредъкът е спрял, свържете се с поддръжката на Hype с идентификатора на интеграцията и съобщението на процеса.

Вашите задължения при първоначална синхронизация ​

  1. Извличайте често задачи за всички типове обекти. Процесът преминава последователно през тях: първо /tasks/hype-custom/categories, после /tasks/hype-custom/saloons, /tasks/hype-custom/tables, /tasks/hype-custom/items, /tasks/hype-custom/supplements и т.н.

  2. Обработвайте всяка задача своевременно. Следващата стъпка започва едва след обработка на изходния отговор и успешно отчитане с PUT на всички задачи от текущата стъпка.

  3. Включвайте id от вашата платформа, когато обектът съществува. HES използва тези идентификатори за двупосочно преобразуване при обработка на поръчки. Единственото поддържано потвърждение без обект за Hype Custom е за салони и маси, когато платформата не моделира план на обекта. Ако върнете response: {}, не посочвайте маси в последващите поръчки.

  4. При GET задачи, стъпки 9-11, върнете всички записи от съответния тип в тялото на отговора. Те са нужни като варианти за ръчното съпоставяне след активиране.

  5. Следете напредъка чрез GET /api/hype-custom/integrations/:id?include=pipeline: проверявайте pipeline.progress.step и pipeline.progress.from.

Ръчно съпоставяне след активиране ​

След като процесът стане synced, а интеграцията active, отворете интеграцията в административния интерфейс на Hype Server. Съпоставете и запазете съответстващите стойности за:

  • статуси на заявки за поръчки
  • канали за доставка
  • видове плащане

Обхванете всяка стойност, използвана в поръчки или промени на статуси. Процесът събира записите, но не ги съпоставя автоматично, дори когато имената съвпадат. Ако липсва необходима стойност, коригирайте изходните записи или отговорите от първоначалната синхронизация и ги обновете преди съпоставянето.

Не разрешавайте реални поръчки, преди връзките да са запазени и тестова поръчка да е достигнала Hype с върната промяна на статуса към вашата платформа. Преглеждайте съпоставянията при добавяне на нови стойности.

Грешки и възстановяване на синхронизацията ​

Няма отмяна на предишните промени. При грешка вече синхронизираните обекти остават. Процесът просто спира.

При грешка:

  • Неуспешната EntityTask се маркира като ERROR със съобщението за грешка
  • Процесът става failed, а полето message съдържа грешката
  • Интеграцията става aborted

Пауза при липсващи зависимости: при текуща синхронизация след първоначалния процес, ако задание срещне несъпоставена референция, например поръчка с още несинхронизиран артикул, опашката на интеграцията спира за 60 секунди и опитва отново. Така се обработват случаи, при които свързани обекти пристигат в разменен ред.

Възстановяване от поддръжката на Hype:

  • Повторно стартиране на целия процес на синхронизация

13. Текуща синхронизация ​

Започнете нормален обмен на поръчки след завършване на първоначалната синхронизация, статус active, запазено ръчно съпоставяне в административния интерфейс на Hype Server и успешна проверка на целия път на поръчката.

Hype -> вашата платформа: промени по обекти ​

text
1. Промяна в каталога става достъпна чрез HES като задача от тип PUT.
2. Вашата платформа извлича: GET /tasks/hype-custom/items.
3. Прилага промяната и запазва съществуващия идентификатор на записа.
4. Отчита резултата: PUT /tasks/hype-custom/items (status: 200).

Вашата платформа -> Hype: нова поръчка ​

text
1. Клиент прави поръчка във вашата платформа.
2. Изпратете POST /webhook/hype-custom/orderRequests със съпоставени ID.
3. HES връща 204 и доставя поръчката асинхронно.
4. Проверете дали поръчката се появява в Hype.
5. Извличайте GET /tasks/hype-custom/orderRequests за промени на статуса.
6. Прилагайте всяка промяна във вашата платформа.
7. Отчитайте резултата чрез PUT /tasks/hype-custom/orderRequests.

14. Кратък справочник ​

Всички API адреси ​

#МетодURLОписание
1GET/tasks/hype-custom/itemsИзвличане на чакащи задачи за артикули
2PUT/tasks/hype-custom/itemsОтчитане на задачи за артикули
3GET/tasks/hype-custom/categoriesИзвличане на чакащи задачи за категории
4PUT/tasks/hype-custom/categoriesОтчитане на задачи за категории
5GET/tasks/hype-custom/supplementsИзвличане на чакащи задачи за добавки
6PUT/tasks/hype-custom/supplementsОтчитане на задачи за добавки
7GET/tasks/hype-custom/saloonsИзвличане на чакащи задачи за салони
8PUT/tasks/hype-custom/saloonsОтчитане на задачи за салони
9GET/tasks/hype-custom/tablesИзвличане на чакащи задачи за маси
10PUT/tasks/hype-custom/tablesОтчитане на задачи за маси
11GET/tasks/hype-custom/orderRequestsИзвличане на чакащи задачи за поръчки
12PUT/tasks/hype-custom/orderRequestsОтчитане на задачи за поръчки
13GET/tasks/hype-custom/orderDeliveryChannelsИзвличане на чакащи задачи за канали за доставка
14PUT/tasks/hype-custom/orderDeliveryChannelsОтчитане на задачи за канали за доставка
15GET/tasks/hype-custom/orderPaymentTypesИзвличане на чакащи задачи за видове плащане
16PUT/tasks/hype-custom/orderPaymentTypesОтчитане на задачи за видове плащане
17GET/tasks/hype-custom/orderRequestStatusИзвличане на чакащи задачи за статуси на поръчки
18PUT/tasks/hype-custom/orderRequestStatusОтчитане на задачи за статуси на поръчки
19POST/webhook/hype-custom/orderRequestsСъздаване на заявка за поръчка
20PUT/webhook/hype-custom/orderRequestsПромяна на заявка за поръчка
21POST/webhook/hype-custom/orderDeliveryChannelsСъздаване на канал за доставка
22PUT/webhook/hype-custom/orderDeliveryChannelsПромяна на канал за доставка
23POST/webhook/hype-custom/orderPaymentTypesСъздаване на вид плащане
24PUT/webhook/hype-custom/orderPaymentTypesПромяна на вид плащане
25POST/webhook/hype-custom/orderRequestStatusСъздаване на статус на поръчка
26PUT/webhook/hype-custom/orderRequestStatusПромяна на статус на поръчка
27GET/api/hype-custom/integrationsСписък с всички интеграции
28GET/api/hype-custom/integrations/:idПодробности за интеграция
29GET/api/hype-custom/integrations/:id/queue-jobsСписък със задания в опашката
30DELETE/api/hype-custom/integrations/:id/queue-jobs/:jobIdИзтриване на задания от опашката

Обобщение на типовете обекти ​

ОбектПосокаСегмент в адреса за задачиСегмент в webhook адреса
АртикулиHype -> външната платформаitems--
КатегорииHype -> външната платформаcategories--
ДобавкиHype -> външната платформаsupplements--
СалониHype -> външната платформаsaloons--
МасиHype -> външната платформаtables--
Заявки за поръчкиДвупосочноorderRequestsorderRequests
Канали за доставкаДвупосочно при първоначална синхронизацияorderDeliveryChannelsorderDeliveryChannels
Видове плащанеДвупосочно при първоначална синхронизацияorderPaymentTypesorderPaymentTypes
Статуси на поръчкиДвупосочно при първоначална синхронизацияorderRequestStatusorderRequestStatus

Документът се поддържа в хранилището на Hype Exchange Service и е справочник за клиенти, които разработват интеграция с адаптера hype-custom.

API на Hype Exchange Service