API propojení a integrace

Načtení objednávky z externího API souboru


Aplikace KASA FIK nabízí možnost importu již přednastavených objednávek/faktur ze stávajícího informačního systému pomocí stáhnutí JSON dokumentu. Prodejce tak může načíst předpřipravenou objednávku s položkami, číslem účtenky i poznámkami. Používá se v mobilním a sanitárním prodeji, prodeji z eshopu a jiných situacích, kdy dochází jen k dokončení tržby na zařízení a objednávka byla připravena předem.

Funkce bude ukončena na nahrazena Online API pro zasíláni a dotazy na objednávky pomocí API

Nastavení

  1. V Nastavení – Expert nastavení – Importní URL pro objednávky zadejte URL adresu k Vašemu rozhraní na serveru
  2. Daná URL adresa musí vrátit platný dokument JSON ve formátu popsaném níže
  3. Adresa je například: https://www.mujserver.cz/hledat.php
  4. Aplikace připojí parametr „search“ s volbou, kterou zadá uživatel. to znamená že bude voláno např. https://www.mujserver.cz/hledat.php?search=220001

Používání

  1. V aplikaci, v rozhraní KLASIK
  2. Vlevo nahoře klepněte na šipku menu
  3. Zvolte „Vyhledat položky z objednávky“
  4. Zadejte číslo objednávky, které se použije k vyhledání dané objednáky na serveru
  5. Pokud se objednávka nelezne, dojde k vyplnění položek

Popis formátu 

Formát JSON platné odpovědi

{
  "invoice_number": 20130001, // optional, will be generated if not provided
  "note": "strestt", // optional
  "items": [
    {
      "plu": "203", // optional
      "note": "Item optional note" // optional
      "name": "Item number 203",
      "price_without_vat": 112.0,
      "quantity": 1.0,
      "vat_rate": 1.21
    }
  ]
}

Formát JSON prázdné odpovědi pokud server nic nenalezl

Pokud uživatel zadá neplatný kód faktury, měl by server vrátit chybu 404 - Not found v hlavičce a odpověd v těle by měla obsahovat null

null

Propojení na informačním systémem (web integrace)

Aplikace KASA FIK umožňuje dynamicky integrovat webové aplikace zákazníka pomocí integrovaného tlačítka nebo funkční klávesy. Propojení je ideální pro přenos objednávek z eshopu nebo účetních systémů přímo do aplikace.

Funkce je dostupná pouze s licencí PREMIUM

custom-button.gif

Princip funkce - workflow

Ukázková stránka

Vytvořili jsme ukázkovou stránku, ve které můžete vidět funkce, které lze využít při práci v aplikaci a návrtatu hodnot.

Příklad poskytnutých parametrů v URL:

partner_code=XXXXX&utm_source=app-com.eetterminal.pos&utm_medium=app&utm_campaign=fik-integration&app_flavor=fik&app_version=1.181-beta12-debug&app_version_code=181&app_lang=cs&shop_id=848428671200000&cash_register_id=2044577243700000&shift_id=5132358187320000
Query String poskytnutý při volání URL

Specifikace integrace

Aplikace načte uživatetem přednastavené URL, které obohatí o Query String s dalšími parametry. Rozšíří Javascript funkce o interface window.FikApiInterface který obsahuje metody použitelné k propojení nativní Android aplikace s webovou.

if (window.FikApiInterface){
    window.FikApiInterface.logError('heyho'); // log error message to android console
    window.FikApiInterface.logInfo('heyho'); // log info message to android console
    window.FikApiInterface.setTitle(document.title); // sets title of the window
    window.FikApiInterface.showToast('heyho'); // shows small toast notification
    // window.FikApiInterface.finish(); // Will close the window without any result
    // window.FikApiInterface.finishWithReceipt(JSON.stringify(obj)); // return back to the app with receipt data
} else {
  // Not loaded within Fik Webapp container
}

Návrat účtenky do aplikace

Zavolejte metodu window.FikApiInterface.finishWithReceipt(JSON.stringify(obj)) s následujícim JSON objektem:

{
  "invoice_number": 20130001, // optional, will be generated if not provided
  "note": "strestt", // optional
  "items": [
    {
      "plu": "203", // optional
      "note": "Item optional note" // optional
      "name": "Item number 203",
      "price_without_vat": 112.0,
      "quantity": 1.0,
      "vat_rate": 1.21
    }
  ]
}

Poznámky k poskytovanému objektu:

Nastavení expirace a vliv na cache (expire)

Webová integrace respektuje správné nastavení cache hlavičky pro ukládání do paměti prohlížeče. Nastavíte-li správné Expire v HTTP hlavičce, bude se respektovat.

Aplikace má také podporu pro ukládání databází a Webstorage.

Webhook Integrace API

Webhooky umožňují zasílání dat z pokladny/backoffice pomocí HTTP volání informovat o každé události (např. vystavení účtenky, založení zákazníka). Zpracováním webhooků si můžete měnit chování stránky nebo aplikace a rozšiřovat je o nové funkce.

Webhooky lze nastavit v Backoffice v Nastavení - Systém - Webhooky. Zadejte https:// adresu kam systém má zasílat data. Nastavení uložte tlačítkem Uložit. Pak následně může trvat nějaký čas, než systém začne automaticky data zasílat. Nové nastavení může trvat až 1-2 hodiny, než se projeví nastavení skrz  systémy.

Screenshot-from-2020-10-19-12-50-48.png

Formát zasílaných dat

Příklad zaslaného objektu `orders`

{
  "_t": "orders",
  "_v": 1541274974010,
  "conversion_rate": 1,
  "currency": "CZK",
  "dine_in": false,
  "id": 3317888960569993,
  "id_c": 100000,
  "id_cash_register": 3173505578999348,
  "id_employee": 1,
  "id_employee_served": 1,
  "id_park_location": 3227505427363220,
  "id_shift": 3317259000928416,
  "id_shop": 3173505578310000,
  "order_serial_number": 103,
  "total_credits": 0,
  "total_discounts_tax_excl": 0,
  "total_discounts_tax_incl": 0,
  "total_paid_real": 3331000,
  "total_paid_tax_excl": 3331000,
  "total_paid_tax_incl": 3331000,
  "total_points": 0,
  "total_products": 32,
  "total_profit_tax_excl": 0,
  "total_profit_tax_incl": 0,
  "total_shipping_tax_excl": 0,
  "total_shipping_tax_incl": 0,
  "total_tax_eco": 0,
  "total_tax_gst": 0,
  "total_tax_luxury": 0,
  "total_tax_pst": 0,
  "total_tax_service": 0,
  "total_tip": 0,
  "total_wrapping_tax_excl": 0,
  "total_wrapping_tax_incl": 0
}

 

REST API

Data z pokladen jsou pravidelně synchronizována do cloudu a zpřístupněna přes REST API.

API je v současné době poskytováno v omezeném režimu. Do budoucna plánujeme expiraci autorizačního tokenu. Pokud chcete získávat kontinuáně data a synchronizovat systémy doporučujeme používat Webhooky. Jedná se o efektivnější způsob.

Autorizace požadavku

Autorizace probíhá pomocí API Tokenu, který naleznete v Backoffice - Nastavení - Systém.

Autorizační klíč je v HTTP hlavičce Authorization: A|xxxxx

curl -XGET 'https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/products' \
 -H 'Authorization: A|kLgT.........' \
 -H 'Content-Type: application/json'

POST přííklad:

curl -XPOST 'https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/reports/generic/order_history' \
 -H 'Authorization: A|kLgT.........' \
 -H 'Content-Type: application/json' \
 --data-raw '{"date_start":1639436400000,"date_end":1642028399999,"timezone":"Europe/Prague","id_cash_register":953221254382092,"id_shop":492696696397774}' \

Konvence

Společné pole

Funkce pro práci s id

Id je číslo složené z času, id tabulky a náhodného suffixu. Příklad výpočtu:

// Javascript
const EPOCH = 1440000000000;

// Vrati objekt s datem a id tabulky
function getDateFromId(id) {
  return {
    dt: new Date((id / 32768) + EPOCH),
    tableId: (id / 512) & 0x3f
  }
}

// Generuje id pro konkretni tabulku - pouzijte 0 pro referenci
exports.getRandomRowId = function (tableId) {
    let ts = new Date().getTime() - EPOCH;
    let randid = Math.floor(Math.random() * 511);
    ts = (ts * 64);
    ts = ts + tableId;
    let t = (ts * 512) + (randid % 512);
    while (t % 10 !== 0) {
        t = t + 2; // Resi chybu s 53bit number v Javascriptu
    }
    return t;
}

// C# 
const long EPOCH = 1440000000000; // Matches the JavaScript EPOCH value

public static long GetRandomRowId(int tableId) {
   long ts = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - EPOCH;
   int randid = new Random().Next(512); // Generates a random number between 0 and 511
   ts = (ts * 64);
   ts = ts + tableId;
   long t = (ts * 512) + (randid % 512);

   t = t - (t % 10);
   return t;
 }

Seznam endpointů

Následující endpointy podporují metody GET (získání seznamů dat json array) i POST (vytvoření nebo aktualizace jednoho objektu). Metoda POST podporuje i zaslání více objektů v JSON Array. Lze využít pro dávkové aktualizace více objektů.

Base URL: https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/

Základní princip stránkování

API vrací výsledky v stránkách (pages). Každá odpověď obsahuje maximálně limit záznamů. Pro získání dalších záznamů použijte parametr id_start.

Stránkování je založeno na ID záznamu (BigInt), nikoliv na čase. ID je Unix timestamp v milisekundách jako BigInt, takže vyšší ID = novější záznam.

Parametry stránkování

Parametr Typ Popis Výchozí hodnota
limit integer Maximální počet záznamů na stránku (1-400) 100
id_start string ID posledního zobrazeného záznamu pro další stránku 0
direction string forward (vzestupně) nebo backward (sestupně) backward pro tabulky orders, transactions, shifts
version_start integer Filtruje záznamy s verzí _v >= hodnota 0 (bez filtru)

Směry stránkování

Backward (výchozí pro orders, transactions, shifts)

Vrací nejnovější záznamy první (sestupně podle data vytvoření).

GET /data/orders?limit=100
→ vrací 100 nejnovějších objednávek

Forward

Vrací nejstarší záznamy první (vzestupně podle data vvoření).

GET /data/orders?limit=100&direction=forward
→ vrací 100 nejstarších objednávek

Jak na stránkování v praxi

cURL

# První stránka
curl "/data/orders?limit=400&direction=forward" \
  -H "Authorization: Bearer $TOKEN"

# Další stránka (použijte ID posledního záznamu z předchozí odpovědi)
curl "/data/orders?limit=400&id_start=11154058202189370&direction=forward" \
  -H "Authorization: Bearer $TOKEN"

Filtrování podle verze

Parametr version_start umožňuje získat pouze záznamy aktualizované po určitém čase:

GET /data/orders?version_start=1780600680635
→ vrací pouze objednávky s _v >= 1780600680635 (timestamp v ms)

Příklad kompletního cyklu

Máte 1500 objednávek, limit = 400:

Stránka id_start Vrácených Kód
1 0 400 last_id = 11154058202189370
2 11154058202189370 400 last_id = 11139738857705400
3 11139738857705400 400 last_id = 11131523820818290
4 11131523820818290 300 ← poslední stránka (300 < 400)

Důležitá upozornění

  1. ID jako stringid v odpovědi je BigInt, může být velmi velké číslo. Při předávání jako id_start ho převeďte na string, aby nedošlo ke ztrátě přesnosti.

  2. Nikdy neměňte pořadí: Pokud stránkujete forward, pokračujte vždy forward. Míchání směrů může vést k přeskočeným nebo duplicitním záznamům.

  3. Timestamp-based ID: ID objednávek je založeno na timestampu. Novější objednávky mají vyšší ID. To znamená, že:

    • direction=backward: první objednávka = nejnovější
    • direction=forward: první objednávka = nejstarší
  4. Limit 2000: Přestože můžete nastavit limit až do 400, DynamoDB dotaz má interně limit 2000 záznamů na jedno volání. Pro větší datasety použijte stránkování.

  5. Nikdy neskipujte stránky: Vždy iterujte sekvenčně. Přeskočení na "další stránku" bez procházení předchozích může vést ke ztrátě dat.

Chybové stavy

Kód Popis Řešení
400 Neplatný id_start Ověřte, že id_start je platné ID nebo 0
429 Rate limit Snižte frekvenci požadavků
500 Interní chyba Opakujte požadavek

GET products

Vrací JSON Array se seznamem produktů. Položky které jsou smazané, mají nastaveno _visible = false

CURL příklad

curl 'https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/products' \
-H 'Authorization: A|......'
Odpověď
[
  {
    "unit": 0,
    "date_updated": 1641499263724,
    "attributes_bitmask": 8208,
    "__price_matrix_model": {
      "date_starts": 1640070857424,
      "unit_price_base_tax_incl": 550,
      "unit_price_regular_tax_excl": 454546,
      "unit_price_c_tax_excl": 0,
      "credits_deduct": 0,
      "hour_bitmask": 0,
      "points_deduct": 0,
      "reduction_amount_a_tax_excl": 0,
      "id_exec_rule": 0,
      "id_product": 6555921856010421,
      "unit_price_b_tax_excl": 0,
      "dow_bitmask": 0,
      "price_bitmask": 0,
      "unit_price_base_tax_excl": 454.5455,
      "id_shop": 0,
      "currency": "CZK",
      "unit_price_a_tax_excl": 454546,
      "id": 6555922259744395,
      "id_warehouse": 953221254427235,
      "_t": "product_price_matrix",
      "_v": 1641499263728
    },
    "condition_type": 0,
    "name": "Cesta",
    "id_category": 5723345161520367,
    "node_sort": -6680027574804497000,
    "inventory_management": false,
    "id": 6555921856010421,
    "id_shop": 0,
    "color": 0,
    "visible": true,
    "tax_pst_rate": 1.21,
    "item_type": 0,
    "icon_code": 0,
    "quantity_minimal": 1,
    "quantity_multiple": 1,
    "id_c": 111111,
    "_t": "products",
    "_v": 1641499263746
  }
]

GET product/{id}

Vrací jednotlivý produkt podle ID objektu. Pro ceny volejte get-price-by-product-id/

https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/products/{id}
Odpověď
{
  "unit": 0,
  "pgx": "111:products",
  "description_short": "Vydařená kombinace rumu a griotky",
  "date_updated": 1647012279153,
  "attributes_bitmask": 8240,
  "sale_group_type": 0,
  "condition_type": 1,
  "name": "Čert",
  "id_tax_rules_group": 0,
  "id_category": 6783340285035904,
  "node_sort": 3752073357922477000,
  "accounting_group": 600000,
  "warranty_length": 0,
  "inventory_management": true,
  "inventory_type": 0,
  "id": 6783372795320333,
  "id_shop": 0,
  "tax_eco": 1,
  "color": 0,
  "visible": true,
  "_d": 0,
  "tax_luxury": 1,
  "tax_pst_rate": 1.21,
  "item_type": 0,
  "additional_shipping_cost": 0,
  "icon_code": 0,
  "warranty_type": 0,
  "_t": "products",
  "quantity_minimal": 1,
  "_v": 1681918519463,
  "quantity_multiple": 1,
  "id_c": 111111,
  "id_exec_rule": 0
}

POST product

Vytvoří nový produkt. Použijte id produktu 0 pro nový objekt, nebo id existujícího produktu pro aktualizaci objektu. Pro informace o formátu objektu se podívejte do definice zod, viz níže.

Poznámky:

curl 'https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/products' \
  -H 'Accept: application/json' \
  -H 'Authorization: A|....' \
  -H 'Content-Type: application/json' \
  -d '{
    "deleted": 0,
    "id": 0, // Zero or omit to create new record
    "_t": "products",
    "image_dimension": null,
    "notes_quick": "Sample quick notes",
    "quantity_multiple": 1,
    "quantity_minimal": 1,
    "additional_shipping_cost": 0,
    "date_updated": 1678886400000,  // Example timestamp (replace as needed)
    "inventory_management": false,
    "color": 0,
    "item_type": 0,
    "id_category": 0,
    "tax_luxury": 1.000,
    "ean13": "1234567890123",
    "id_tax_rules_group": 0,
    "name_alternative": "Alt Product Name",
    "sku": "PROD-SKU-001",
    "tax_eco": 1.000000,
    "barcode": "9876543210987",
    "height": 10.5,
    "visible": true,
    "image_url": "https://example.com/image.jpg",
    "warranty_length": 12,
    "condition_type": 0,
    "tax_pst_rate": 1.000,
    "upc": "012345678901",
    "weight": 1.2,
    "icon_code": 0,
    "details_url": "https://example.com/details",
    "warranty_type": 0,
    "tags": "sample,product",
    "description_short": "Short product description",
    "unit": 0,
    "id_exec_rule": 0,
    "depth": 5.0,
    "sale_group_type": 0,
    "id_global_product_code": null,
    "accounting_group": 600000,
    "name": "Sample Product Name",
    "width": 7.8,
    "node_sort": 0,
    "attributes_bitmask": 0,
    "inventory_type": 0,
    "internal_extra": "Internal notes",
    "id_shop": 0
  }'

GET get-price-by-product-id/{id_product}

Vrací ceny pro konkrétní produkt v ceníku podle id produktu.

https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/products/get-price-by-product-id/{id_product}


GET product_price_matrix

Ceny k produktům. Je nutné napárovat pomocí id_product

https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/product_price_matrix
Odpověď
[
  {
    "currency": "CZK",
    "unit_price_base_tax_excl": 30,
    "id_warehouse": 4438373662962620,
    "_d": 1,
    "dow_bitmask": 0,
    "credits_deduct": 0,
    "hour_bitmask": 0,
    "unit_price_base_tax_incl": 30,
    "id_product": 4438453021022482,
    "unit_price_regular_tax_excl": 30000,
    "points_deduct": 0,
    "date_starts": 1575450836824,
    "price_bitmask": 0,
    "_t": "product_price_matrix",
    "unit_price_a_tax_excl": 30000,
    "_v": 1633950008092,
    "id": 4438454091814580,
    "reduction_amount_a_tax_excl": 0,
    "id_shop": 0,
    "id_c": 1141932
   }
  ]

GET categories

Seznam kategorií v hiearchické struktuře

https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/categories
Odpověď
[
  {
    "visible": true,
    "_d": 0,
    "name": "Cakes >",
    "category_bitmask": 0,
    "icon_code": 5,
    "node_sort": 5000000,
    "id_category_sort_after": 0,
    "_t": "categories",
    "_v": 1672597351272,
    "id_category_parent": 0,
    "id": 1,
    "id_shop": 0,
    "color": 17,
    "id_c": 111111,
    "children": [
      {
        "visible": false,
        "name": "test",
        "category_bitmask": 0,
        "margin_minimal_rate": null,
        "icon_code": 4,
        "node_sort": 5000000,
        "id_category_sort_after": 0,
        "_t": "categories",
        "_v": 1640029337604,
        "id_category_parent": 1,
        "id": 1067887041152062,
        "id_shop": 0,
        "margin": null,
        "color": 5,
        "tags": null,
        "id_c": 111111,
        "children": []
      }
    ]
  }
]

GET shops

Seznam poboček (shops)

https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/shops
Odpověď
[
  {
    "visible": true,
    "currency": "CZK",
    "_d": 0,
    "name": "Shop 83",
    "location_name": "City 44",
    "_t": "shops",
    "_v": 1677240349376,
    "id": 492696696391111,
    "bitmask": 0,
    "id_c": 111111
  }
]

GET cash_registers

Seznam poboček. Více o struktuře a závislosti na obchodech v manuálu zde.

https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/cash_registers
Odpověď
[
  {
    "visible": true,
    "name": "Point of Sale 233",
    "location_name": "Brno",
    "_t": "cash_registers",
    "_v": 1640802641284,
    "cash_register_type": 11,
    "id": 49269669639111,
    "id_shop": 492696696397774,
    "bitmask": 0,
    "id_c": 11111
  }
]

GET customers

Seznam zákazníků

curl 'https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/customers' \
 -H 'Authorization: A|ADq
Odpověď
[
  {
    "customer_type": 0,
    "credit_account": null,
    "internal_extra": null,
    "price_group": "A",
    "zip_code": "40801",
    "date_updated": null,
    "email": null,
    "city": "RUMBURK",
    "bank_account": null,
    "date_birthday": null,
    "company": "Test s.r.o.",
    "geohash": null,
    "firstname": null,
    "company_ico": "3332650",
    "id": 3665795354036044,
    "color": 0,
    "bitmask": 0,
    "tags": "csv-import-91",
    "barcode": null,
    "visible": true,
    "id_discount_group": null,
    "lastname": null,
    "company_dic": "CZ33333",
    "internal_json": null,
    "_t": "customers",
    "_v": 1551875000154,
    "date_expires": null,
    "phone_number": null,
    "note_internal": null,
    "country_code": "CZ",
    "note_external": null,
    "id_c": "11111",
    "street": "17.8"
  }
]

GET customer/{id}

Jednotlivý záznam pro zákazníka podle ID.

https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/customers/{id}
curl 'https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/customers/12344566' \
 -H 'Authorization: A|ADqsEX...

GET orders

Vrací seznam účtenek (JSON Array), seřazené od nejnovějších po nejstarší.

Poznámky:

Parametry

https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/orders?version_start=0&id_start={id_order}

GET orders/latest/{id_cash_register}

Posledních 40 orders z konkrétní pokladny podle id_cash_register. Metoda nepodporuje stránkování. Doporučujeme na získávání aktuálních objednávek v pravidelných intervalech pro systémy, které chtějí získávat online přehled o uskutečnených pohybech.

Query string parametry:

https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/orders/latest/{id_cash_register}?id_payment={id_payment}
Odpověď
[
  {
    "total_discounts_tax_excl": 0,
    "currency": "CZK",
    "pgx": "1141932:orders:4438373662917304",
    "total_points": 0,
    "id_employee": 0,
    "date_closed": 1642005467495,
    "total_credits": 0,
    "id_payment": 222,
    "total_paid_tax_excl": 50000,
    "total_shipping_tax_excl": 0,
    "total_tax_service": 0,
    "total_paid_real": 50000,
    "conversion_rate": 1,
    "_u_dyn": 1642005490213,
    "total_discounts_tax_incl": 0,
    "geohash": "u2ugrgc",
    "date_collected": 1642005467495,
    "total_tip": 0,
    "id_cash_register": 4438373662917304,
    "id": 6619285123010267,
    "dine_in": true,
    "id_shop": 4438373662924485,
    "total_products": 1,
    "total_tax_gst": 0,
    "total_profit_tax_excl": 0,
    "order_serial_number": 130,
    "summary": "1x Pure bar",
    "id_park_location": 0,
    "total_wrapping_tax_incl": 0,
    "_d": 0,
    "total_tax_eco": 0,
    "total_tax_pst": 0,
    "total_shipping_tax_incl": 0,
    "id_employee_served": 0,
    "date_paid": 1642005467185,
    "id_shift": 6618245790277082,
    "total_profit_tax_incl": 0,
    "date_tax_reported": 1642005467495,
    "_t": "orders",
    "total_paid_tax_incl": 50000,
    "_v": 1642005467521,
    "total_wrapping_tax_excl": 0,
    "total_tax_luxury": 0,
    "invoice_number": 202012274,
    "id_c": 1141932
   }
  ]

GET order/{id_cash_register}/{id_order}

Umožní získat účtenku/doklad včetně položek v poli __order_details

https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/orders_details/{id_cash_register}/{id_order}
{
  "total_discounts_tax_excl": 0,
  "currency": "CZK",
  "pgx": "1173665:orders:7694791899251239",
  "total_points": 0,
  "id_employee": 1,
  "date_closed": 1684414596504,
  "total_credits": 0,
  "id_payment": 222,
  "total_paid_tax_excl": 56522,
  "total_shipping_tax_excl": 0,
  "total_tax_service": 0,
  "date_fiscalized": 0,
  "total_paid_real": 65000,
  "conversion_rate": 1,
  "total_discounts_tax_incl": 0,
  "date_collected": 1684414596504,
  "total_tip": 0,
  "id_cash_register": 7694791899251000,
  "id": 8008974168592088,
  "dine_in": true,
  "id_shop": 7694791899258554,
  "total_products": 2,
  "total_tax_gst": 0,
  "total_profit_tax_excl": 0,
  "order_serial_number": 320,
  "id_park_location": 0,
  "total_wrapping_tax_incl": 0,
  "_d": 0,
  "total_tax_eco": 0,
  "total_tax_pst": 8478,
  "total_shipping_tax_incl": 0,
  "id_employee_served": 1,
  "date_paid": 1684414596504,
  "id_shift": 7962837799869694,
  "total_profit_tax_incl": 0,
  "date_tax_reported": 1684414596504,
  "_t": "orders",
  "total_paid_tax_incl": 65000,
  "_v": 1684414596517,
  "total_wrapping_tax_excl": 0,
  "total_tax_luxury": 0,
  "invoice_number": 202305288,
  "id_c": 11111,
  "date_canceled": null,
  "__order_details": [
    {
      "product_item_type": 0,
      "currency": "CZK",
      "pgx": "1173665:order_details:7694791899251239",
      "total_points": 0,
      "id_warehouse": 0,
      "id_employee": 1,
      "date_updated": 1684414596517,
      "total_credits": 0,
      "id_payment": 222,
      "id_product": 7833117185743150,
      "_u_dyn": 1684414622686,
      "reduction_amount_tax_incl": 0,
      "id_category": 7694792007615808,
      "id_order": 8008974168592088,
      "product_name_alternative": ":;en:Cappuccino",
      "product_price_billed_tax_incl": 35000,
      "id_order_details_parent": 1,
      "id_cash_register": 7694791899251000,
      "id": 8008976796814560,
      "id_shop": 7694791899258554,
      "product_quantity": 1,
      "product_bitmask": 0,
      "product_name": "Cappuccino",
      "_d": 0,
      "total_tax_eco": 0,
      "total_tax_pst": 4565,
      "reduction_amount_tax_excl": 0,
      "product_price_billed_tax_excl": 30435,
      "product_unit": 0,
      "product_price_original_tax_excl": 30435,
      "tax_pst_rate": 1.15,
      "date_paid": 1684414596517,
      "id_shift": 7962837799869694,
      "_t": "order_details",
      "_v": 1684414596517,
      "order_number": 320,
      "total_tax_luxury": 0,
      "reduction_percent": 0,
      "id_c": 11111,
      "date_voided": null,
      "date_canceled": null
    }
  ]
}

GET order_details

Vrací položky účtenek. Jedná se  o child kolekci objektu orders.

https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/order_details?version_start=0&id_start={id_order_details}

POST warehouse_status

Aktuální stav skladu. Je nutné zaslat JSON request s id_warehouse který určuje ID skladu, pro který chcete report.

curl 'https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/reports/generic/warehouse_status' \
  -H 'Accept: application/json' \
  -H 'Authorization: A|....' \
  -H 'Content-Type: application/json' \
  --data-raw '{"id_warehouse":953221250000000}'
Odpověď
{
  "data": [
    {
      "id_c": 111111,
      "id_warehouse": 953221254427235,
      "wname": "WAREHOUSE MAIN 21",
      "id_product": 5128991459121170,
      "pname": "Aperol",
      "cname": null,
      "id_category": 4933809643652539,
      "barcode": null,
      "ean13": null,
      "unit": 0,
      "qty_cnt": 1,
      "qty_sum": 3,
      "qty_avg": 3,
      "date_updated": 1641489385000,
      "pp_avg": 10000,
      "pp_unit": 10000
    },
    {
      "id_c": 111111,
      "id_warehouse": 953221254427235,
      "wname": "WAREHOUSE MAIN 21",
      "id_product": 4305305643161675,
      "pname": "01.Vstup 8225",
      "cname": "ACesty",
      "id_category": 5723345161520367,
      "barcode": null,
      "ean13": null,
      "unit": 0,
      "qty_cnt": 1,
      "qty_sum": 6,
      "qty_avg": 6,
      "date_updated": 1642004221000,
      "pp_avg": 100000,
      "pp_unit": 100000
    }
  ],
  "source": "query"
}

POST customers

Slouží k vytvoření nebo aktualizaci objektu zákazníka podle primárního klíče - pokud vytváříte objekt. neposkytujte ID objektu, bude automaticky vytvořeno. Schéma entity je popsána v zod níže.

curl 'https://m6vadtaz1h.execute-api.eu-west-1.amazonaws.com/prod/data/customers' \
  -H 'Accept: application/json' \
  -H 'Authorization: A|....' \
  -H 'Content-Type: application/json' \
  --data-raw '{...}'

Zasílání objednávek do pokladny

Připravujeme propojení pro zasílání externích objednávek do pokladního systému přes API. Kontaktujre prosím podpora@kasafik.cz pro více informací.

Vazby - Mermaid

Schema vazeb ve formátu Mermaid

mermaid-diagram-2025-04-16-152933.png

erDiagram
    Customer {
        bigint id PK
    }

    Orders {
        bigint id PK
        bigint id_customer FK
        bigint id_address_invoice FK
        bigint id_address_delivery FK
        bigint id_cash_register FK
        bigint id_shift FK
        bigint id_employee FK
        bigint id_employee_served FK
        bigint id_shop FK
        bigint id_park_location FK
        bigint id_shipping FK
        bigint id_superseded FK
    }

    OrderDetails {
        bigint id PK
        bigint id_order FK
        bigint id_customer FK
        bigint id_product FK
        bigint id_shift FK
        bigint id_employee FK
        bigint id_shop FK
        bigint id_warehouse FK
        bigint id_cash_register FK
        bigint id_category FK
    }

    Employees {
        bigint id PK
    }

    StockHistory {
        bigint id PK
        bigint id_employee FK
        bigint id_shop FK
        bigint id_stockup FK
        bigint id_warehouse FK
        bigint id_cash_register FK
        bigint id_order FK
        bigint id_record FK
    }

    Transactions {
        bigint id PK
        bigint id_customer FK
        bigint id_order FK
        bigint id_shift FK
        bigint id_employee FK
        bigint id_shop FK
    }

    Stockup {
        bigint id PK
        bigint id_cash_register FK
        bigint id_employee FK
        bigint id_shop FK
        bigint id_warehouse FK
    }

    Warehouses {
        bigint id PK
    }

    Products {
        bigint id PK
        bigint id_category FK
        bigint id_shop FK
        bigint id_exec_rule FK
        bigint id_tax_rules_group FK
        bigint id_global_product_code FK
    }

    ProductPriceMatrix {
        bigint id PK
        bigint id_product FK
        bigint id_exec_rule FK
        bigint id_shop FK
        bigint id_warehouse FK
    }

    Customer ||--o{ Orders : places
    Orders ||--o{ OrderDetails : contains
    Customer ||--o{ OrderDetails : "is associated with"
    Employees ||--o{ Orders : "manages"
    Employees ||--o{ OrderDetails : "fulfills"
    Warehouses ||--o{ OrderDetails : "stores"
    Products ||--o{ OrderDetails : "includes"
    StockHistory ||--o{ Employees : "managed by"
    StockHistory ||--o{ Warehouses : "stored in"
    StockHistory ||--o{ Products : "deducts"
    Transactions ||--o{ Customer : "initiated by"
    Transactions ||--o{ Orders : "related to"
    Transactions ||--o{ Employees : "processed by"
    Stockup ||--o{ Employees : "performed by"
    ProductPriceMatrix ||--o{ Products : "defines price for"
    Orders ||--o{ Warehouses : "related to"
    Products ||--o{ Warehouses : "related to"
    Products ||--o{ ProductPriceMatrix : "related to"
    Products ||--o{ Transactions : "bought with"
    Orders ||--o{ Transactions : "related to"
    StockHistory }o--|| Orders : "concerns"
    Warehouses ||--o{ Stockup : "associated with"
    Stockup ||--o{ StockHistory : "tracks"
    Employees ||--o{ StockHistory : "managed by"
    Orders ||--o{ StockHistory : "related to"
    Warehouses ||--o{ StockHistory : "related to"
    Employees ||--o{ Transactions : "related to"
    Employees ||--o{ Orders : "related to"

 Definice objektu - zod schema

const NOT_DELETED = 0;

const bigintOrNumber = z.union([
    z.number().refine(value => !isNaN(value), {
        message: 'Expected a valid number',
    }),
    z.bigint(),
]);

const BaseSchema = z.object({
    id: z.number(),
    _v: z.number().min(0).default(() => new Date().getTime()),
    _d: z.number().min(0).default(NOT_DELETED),
    date_created: z.number().default(() => new Date().getTime())
});

const CustomerSchema = BaseSchema.extend({
    id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(2))),
    _t: z.literal("customers"),
    firstname: z.string().nullable().optional(),
    customer_type: z.number().int().min(0).default(0), // Assuming customerType should be non-negative integer
    date_updated: z.number().default(() => new Date().getTime()), // Defaults to current date
    color: z.number().int().min(0).default(0), // Assuming color should be non-negative integer
    id_discount_group: bigintOrNumber.optional(),
    zip_code: z.string().nullable().optional(),
    date_birthday: z.number().nullable().optional(),
    geohash: z.string().nullable().optional(),
    company: z.string().nullable(), // Can be null
    company_ico: z.string().nullable().optional(),
    company_dic: z.string().nullable().optional(),
    street: z.string().nullable().optional(),
    city: z.string().nullable().optional(),
    bank_account: z.string().nullable().optional(),
    credit_account: z.string().nullable().optional(),
    internal_json: z.string().nullable().optional(),
    bitmask: z.number().int().min(0).default(0), // Assuming bitmask should be non-negative integer
    barcode: z.string().nullable().optional(),
    email: z.string().email().nullable().optional(), // Assuming email should be a valid email format
    visible: z.boolean().default(true), // Assuming default visibility is true
    lastname: z.string().nullable().optional(),
    tags: z.string().nullable().optional(),
    country_code: z.string().min(2).max(2).default('CZ'), // Assuming country code is always 2 characters
    price_group: z.enum(['A', 'B', 'C']).default('A'),
    note_external: z.string().nullable().optional(),
    note_internal: z.string().nullable().optional(),
    phone_number: z.string().nullable().optional(),
    date_expires: z.number().nullable().optional(),
    internal_extra: z.string().nullable().optional(),
    price_discount: z.number().int().default(0) // Assuming price discount is an integer
});

const OrdersSchema = BaseSchema.extend({
    id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(7))),
    _t: z.literal("orders"),
    id_address_invoice: bigintOrNumber.optional(),
    id_canceled_order: bigintOrNumber.optional(),
    id_customer: bigintOrNumber.optional(),
    total_points: z.number().default(0),
    total_credits: z.number().default(0),
    total_profit_tax_incl: z.number().default(0),
    total_tax_gst: z.number().default(0),
    dine_in: z.boolean().default(false), // boolean, default to false
    id_tax_report: bigintOrNumber.optional(),
    short_code: z.string().nullable().optional(), // string or null
    date_closed: z.number().nullable().optional(), // number (Date) or null
    date_paid: z.number().nullable().optional(), // number (Date) or null
    total_shipping_tax_incl: z.number().default(0),
    geohash: z.string().nullable().optional(), // string or null
    id_shop: bigintOrNumber,
    total_profit_tax_excl: z.number().default(0),
    total_tax_service: z.number().default(0),
    invoice_number: z.number().nullable().optional(),
    total_discounts_tax_incl: z.number().default(0),
    order_serial_number: z.number().nullable().optional(),
    id_address_delivery: bigintOrNumber.optional(),
    total_shipping_tax_excl: z.number().default(0),
    total_tax_pst: z.number().default(0),
    total_tax_luxury: z.number().default(0),
    date_canceled: z.number().nullable().optional(), // number (Date) or null
    id_cash_register: bigintOrNumber,
    total_paid_real: z.number().default(0),
    id_shift: bigintOrNumber,
    total_paid_tax_incl: z.number().default(0),
    total_people_seated: z.number().nullable().optional(), // short
    total_tip: z.number().default(0),
    total_discounts_tax_excl: z.number().default(0),
    date_fiscalized: z.number().nullable().optional(), // number (Date) or null
    note: z.string().nullable().optional(), // string or null
    total_paid_tax_excl: z.number().default(0),
    total_wrapping_tax_incl: z.number().default(0),
    id_shipping: bigintOrNumber.optional(),
    id_superseded: bigintOrNumber.optional(),
    total_wrapping_tax_excl: z.number().default(0),
    id_employee: bigintOrNumber,
    currency: z.string().nullable(), // string or null
    conversion_rate: z.number().default(1.0), // number, default to 1.0
    coupon_code: z.string().nullable().optional(), // string or null
    coupon_source: z.string().nullable().optional(), // string or null
    id_payment: z.number().default(0),
    date_tax_reported: z.number().nullable().optional(), // number (Date) or null
    total_tax_eco: z.number().default(0),
    shipping_number: z.string().nullable().optional(), // string or null
    customer_zip: z.string().nullable().optional(), // string or null
    date_loc_acq: z.number().nullable().optional(), // number (Date) or null
    id_employee_served: bigintOrNumber,
    total_products: z.number().default(0),
    id_park_location: bigintOrNumber,
    date_collected: z.number().nullable().optional(), // number (Date) or null
    date_due_pay: z.number().nullable().optional(), // number (Date) or null
    date_emailed: z.number().nullable().optional(), // number (Date) or null
    summary: z.string().nullable().optional(), // string or null
    tags: z.string().nullable().optional(), // string or null
});

// Create a Zod schema for OrderDetails
const OrderDetailsSchema = BaseSchema.extend({
    id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(6))),
    _t: z.literal("order_details"),
    id_payment: z.number().int().default(0), // Default value from TransactionsModel
    id_customer: bigintOrNumber.optional(),
    total_points: z.number().min(0).default(0), // Always whole number, no fractional
    total_credits: z.number().default(0), // We have an issue, in Orders this is int and here double
    id_order: bigintOrNumber,
    date_paid: z.number().nullable().optional(),
    id_shop: bigintOrNumber,
    product_barcode: z.string().nullable().optional(),
    total_tax_pst: z.number().int().default(0), // TODO pro prodej poukazu -100Kc je negativni dan
    total_tax_luxury: z.number().int().min(0).default(0),
    date_canceled: z.number().nullable().optional(),
    id_cash_register: bigintOrNumber,
    product_name: z.string().default("Unknown"),
    product_unit: z.number().int().min(0).default(0),
    tags: z.string().nullable().optional(),
    id_shift: bigintOrNumber,
    product_price_original_tax_excl: z.number().int().default(0),
    id_product: bigintOrNumber,
    product_purchase_price_tax_excl: z.number().nullable().optional(), // Integer or null
    product_attribute_id: z.number().nullable().optional(),
    date_timing_started: z.number().nullable().optional(),
    note: z.string().nullable().optional(),
    date_updated: z.number().nullable().optional(),
    product_upc: z.string().nullable().optional(),
    date_item_printed: z.number().nullable().optional(),
    id_category: bigintOrNumber,
    order_number: z.number().int().min(0).default(0),
    reduction_amount_tax_incl: z.number().int().default(0),
    product_quantity: z.number().default(0), // Assuming whole number as per the comment
    total_weight: z.number().nullable().optional(), // Double or null
    id_employee: bigintOrNumber,
    reference_code: z.string().nullable().optional(),
    currency: z.string().min(3).max(3), // Assuming currency is a 3-character code
    product_price_billed_tax_excl: z.number().int().default(0),
    product_name_alternative: z.string().default(""),
    tax_pst_rate: z.number().default(1.000),
    product_price_billed_tax_incl: z.number().int().default(0),
    reduction_percent: z.number().int().min(0).default(0),
    product_ean13: z.string().nullable().optional(),
    total_tax_eco: z.number().int().default(0),
    product_bitmask: z.number().int().min(0).default(0),
    id_order_details_parent: bigintOrNumber.optional(),
    id_warehouse: bigintOrNumber,
    date_collected: z.number().nullable().optional(),
    date_voided: z.number().nullable().optional(),
    reduction_amount_tax_excl: z.number().int().default(0),
    product_item_type: z.number().int().min(0).default(0),
});

const EmployeesSchema = BaseSchema.extend({
    id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(4))),
    _t: z.literal("employees"),
    salt: z.string().nullable().optional(),
    visible: z.boolean().default(true),
    pin_require: z.boolean().default(false),
    perm_inventory_bitmask: z.number().int().default(0),
    pin_hash: z.string().nullable().optional(),
    pass_hash: z.string().nullable().optional(),
    perm_cloud_bitmask: z.number().int().default(0),
    tags: z.string().nullable().optional(),
    perm_bitmask: z.number().int().default(0),
    name: z.string(),
    phone_number: z.string().nullable().optional(),
    date_expires: z.number().nullable().optional(), // Stored as milliseconds since epoch (UNIX timestamp)
    barcode: z.string().nullable().optional(),
    visible_cash_register: z.boolean().default(true),
    otp_hash: z.string().nullable().optional(),
    email: z.string().nullable().optional(),
});

const StockHistorySchema = BaseSchema.extend({
    id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(16))),
    _t: z.literal("stock_history"),
    id_employee: bigintOrNumber,
    id_shop: bigintOrNumber,
    id_stockup: bigintOrNumber.optional().nullable(),
    id_warehouse: bigintOrNumber,
    note: z.string().nullable().optional(),
    id_record: bigintOrNumber,
    date_stocked: z.number().nullable().optional(), // Date as timestamp
    quanity: z.number().default(0.0),
    id_cash_register: bigintOrNumber,
    id_supplier: bigintOrNumber.optional().nullable(),
    stock_type: z.number().int(),
    id_order: bigintOrNumber.optional().nullable(),
    stock_history_type: z.number().int(),
    supplier_sku: z.string().nullable().optional(),
    product_purchase_unit_price_tax_excl: z.number().int().nullable().optional(),

});

const TransactionsSchema = BaseSchema.extend({
    id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(22))),
    _t: z.literal("transactions"),
    note: z.string().nullable().optional(),
    transaction_code: z.string().nullable().optional(),
    id_customer: bigintOrNumber.optional(),
    transaction_type: z.number().int(),
    id_cash_register: bigintOrNumber.default(BigInt(0)),
    id_order: bigintOrNumber.optional(),
    id_shift: bigintOrNumber.default(BigInt(0)),
    payment_type: z.number().int().min(0),
    total_amount: z.number().int().default(0),
    id_employee: bigintOrNumber,
    id_shop: bigintOrNumber,
    reference_code: z.string().nullable().optional(),
});

const StockupSchema = BaseSchema.extend({
    id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(18))),
    _t: z.literal("stockup"),
    note: z.string().nullable().optional(),
    total_product_purchase_unit_price_tax_excl: z.number().int().nullable().optional(),
    date_stocked: z.number().nullable().optional(), // Assuming timestamp as milliseconds
    id_cash_register: z.number().int(),
    id_supplier: z.number().int().nullable().optional(),
    stock_history_type: z.number().int(),
    id_employee: z.number().int(),
    id_shop: z.number().int(),
    id_warehouse: z.number().int(),
    invoice_number: z.string().nullable().optional(),
});

const WarehousesSchema = BaseSchema.extend({
    id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(25))),
    _t: z.literal("warehouses"),
    shared: z.boolean().default(false),
    visible: z.boolean().default(true),
    warehouse_bitmask: z.number().int().default(0),
    name: z.string(),
});

const ProductsSchema = BaseSchema.extend({
    id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(11))),
    _t: z.literal("products"),
    image_dimension: z.number().int().nullable().optional(),
    notes_quick: z.string().nullable().optional(),
    quantity_multiple: z.number().default(1),
    quantity_minimal: z.number().default(1),
    additional_shipping_cost: z.number().default(0),
    date_updated: z.number(), // Date as timestamp (milliseconds)
    inventory_management: z.boolean().default(false),
    color: z.number().int().default(0),
    item_type: z.number().int().default(0),
    id_category: bigintOrNumber.default(BigInt(0)),
    tax_luxury: z.number().default(1.000),
    ean13: z.string().nullable().optional(),
    id_tax_rules_group: bigintOrNumber.nullable().default(BigInt(0)),
    name_alternative: z.string().nullable().optional(),
    sku: z.string().nullable().optional(),
    tax_eco: z.number().default(1.000000),
    barcode: z.string().nullable().optional(),
    height: z.number().nullable().optional(),
    visible: z.boolean().default(true),
    image_url: z.string().nullable().optional(),
    warranty_length: z.number().int().default(0),
    condition_type: z.number().int().default(0),
    tax_pst_rate: z.number().default(1.000),
    upc: z.string().nullable().optional(),
    weight: z.number().nullable().optional(), // Stored as alcoholTax in Java
    icon_code: z.number().int().default(0),
    details_url: z.string().nullable().optional(),
    warranty_type: z.number().int().default(0),
    tags: z.string().nullable().optional(),
    description_short: z.string().nullable().optional(),
    unit: z.number().int().default(0),
    id_exec_rule: bigintOrNumber.default(BigInt(0)),
    depth: z.number().nullable().optional(),
    sale_group_type: z.number().int().default(0),
    id_global_product_code: bigintOrNumber.nullable().optional(),
    accounting_group: z.number().int().default(600000),
    name: z.string(),
    width: z.number().nullable().optional(),
    node_sort: bigintOrNumber.default(BigInt(0)),
    attributes_bitmask: z.number().int().default(0),
    inventory_type: z.number().int().default(0),
    internal_extra: z.string().nullable().optional(),
    id_shop: bigintOrNumber.default(BigInt(0))
});

const ProductPriceMatrixSchema = BaseSchema.extend({
    id: z.bigint().default(BigInt(dbhelpers.getRandomRowId(12))),
    _t: z.literal("product_price_matrix"),
    unit_price_base_tax_excl: z.number().nullable().optional(), // decimal value 19.95
    unit_price_base_tax_incl: z.number().nullable().optional(), // decimal value 22.99
    date_starts: z.number(), // Date as timestamp (milliseconds)
    unit_price_regular_tax_excl: z.number().int().default(0),
    unit_price_c_tax_excl: z.number().int().nullable().optional(),
    points_deduct: z.number().default(0.0),
    credits_deduct: z.number().default(0.0),
    hour_bitmask: z.number().int().default(0),
    reduction_amount_a_tax_excl: z.number().int().default(0),
    id_product: bigintOrNumber,
    id_exec_rule: bigintOrNumber.default(BigInt(0)),
    unit_price_b_tax_excl: z.number().int().nullable().optional(),
    price_bitmask: z.number().int().default(0),
    dow_bitmask: z.number().int().default(0),
    id_shop: bigintOrNumber.default(BigInt(0)),
    currency: z.string(),
    date_expires: z.number().nullable().optional(), // Date as timestamp (milliseconds)
    unit_price_a_tax_excl: z.number().int().nullable().optional(),
    id_warehouse: bigintOrNumber.default(BigInt(0)),
});

Propojení Foodora **

Propojení WhatsApp

Vyvolávání připravených objednávek pro vytížené provozy

IMG_20240509_155305_291.jpg

Naše samoobslužné kiosky a pokladny jsou vybaveny funkcí, která zákazníkům umožňuje zaregistrovat své mobilní číslo pro příjem oznámení o stavu objednávky prostřednictvím aplikace WhatsApp. Tato funkce poskytuje rychlé a efektivní upozornění, jakmile je objednávka připravena k vyzvednutí, a zároveň otevírá další komunikační kanál pro marketingové aktivity.

V dnešním rychlém a neustále se měnícím světě je důležité, aby se podniky v oblasti pohostinství a maloobchodu přizpůsobily očekáváním moderních zákazníků, kteří hledají pohodlí, rychlost a efektivitu. Vyvolávání připravených objednávek prostřednictvím automatizovaných systémů je v tomto ohledu revolučním krokem, který posouvá zákaznický servis na novou úroveň.

Pro vytížené provozy, jako jsou restaurace s rychlým občerstvením, kavárny a maloobchody, je klíčové zvládnout špičky návštěvnosti bez zbytečných prodlev a s maximální efektivitou. Vyvolávání objednávek přes moderní komunikační kanály jako WhatsApp umožňuje zákazníkům přijímat real-time aktualizace o stavu jejich objednávky přímo na jejich telefon, což znamená, že mohou svůj čas plánovat efektivněji a bez zbytečného čekání.

Tato služba nejenže zvyšuje spokojenost zákazníků, ale také snižuje fronty a zatížení personálu během rušných období, což vede k hladšímu chodu provozu a umožňuje zaměstnancům soustředit se na další klíčové úkoly. Automatizace tohoto procesu prostřednictvím pokladního systému je intuitivní, snadno integrovatelná a představuje značnou úsporu času a zdrojů.

Předtím, než začnete, ujistěte se, že máte

Účet WhatsApp Business (WABA) potřebuje platné, věnované telefonní číslo podniku.

Požadavky

Registrovaná čísla je možné stále používat pro běžné účely, jako jsou telefonáty a textové zprávy.

Registrace telefonních čísel

Postup také naleznete v origiálním manuálu WhatsApp na stránkách Facebook/Meta.

Pokud jste při dokončování kroků v dokumentu Začínáme nezaregistrovali číslo, vraťte se na nástěnku aplikace, přejděte na panel WhatsApp > API Setup. Posuňte se dolů k Kroku 5: Přidání telefonního čísla, klikněte na tlačítko Add phone number a dokončete proces.

Jako součást procesu registrace vám Meta pošlem hlasovou nebo SMS zprávu obsahující ověřovací kód na vaše telefonní číslo, abychom ověřili, že jste jeho majitelem.

Všimněte si, že můžete také zaregistrovat číslo pomocí správce WhatsApp. Podívejte se na článek v centru nápovědy Jak připojit vaše telefonní číslo k vašemu účtu WhatsApp Business, kde se dozvíte, jak na to.

Screenshot from 2024-05-10 07-41-46.png

Integrace WhatsApp API s pokladním systémem

Nastavení pravidel pro odesílání zpráv

Testování

Nastaven tisku QR kódu na účtence

V QR tiskové patiččce vložte : https://wa.me/420530335060?text=Ahoj+Moje+objednavka+je+{order_number}

66cab328988fbe6b267a6ccf269b59c7.png

Odkazy

Propojení Wolt + Wolt Retail

 

Úprava nabídky po aktivaci synchronizace s Wolt

Synchronizace s Vzdálenou Správou

Po zapnutí funkce synchronizace ve Vzdálené správě dojde k následujícím změnám:

Po Aktivaci Synchronizace

Pokyny pro Odblokování iPadu

Toto jsou kroky a důležité informace týkající se změn ve správě vaší nabídky po aktivaci synchronizace s Backoffice KASA FIK. Pro hladký přechod a efektivní správu vaší nabídky doporučujeme důkladně se seznámit s novým postupem a zajistit, že všechny relevantní osoby ve vašem týmu jsou řádně informovány a vyškoleny.

Propojení Better Hotel

Tento dokument poskytuje podrobný přehled o integraci pokladního systému KASA FIK a samoobslužných kiosků s rezervačním systémem Better Hotel. Tato integrace umožňuje hotelům zefektivnit procesy odbavení hostů, správy rezervací a účtování výdajů, čímž se zvyšuje efektivita provozu a zlepšuje zákaznická zkušenost.

Přehled Integrace

Integrace mezi KASA FIK a Better Hotel přináší následující klíčové funkce:

  1. Vyhledání rezervace:

    • Hosté mohou snadno vyhledat své rezervace pomocí samoobslužných kiosků nebo pokladny zadáním čísla rezervace nebo jiného identifikátoru (např. jméno hosta, email).
  2. Správa karty hostů:

    • Personál a hosté mohou přistupovat k informacím o hostech, jako je číslo pokoje, jméno hosta, email nebo telefon, což umožňuje rychlé a přesné poskytování služeb.
  3. Účtování konzumace:

    • Útraty z restaurace nebo baru mohou být přímo připsány na hotelový účet hosta prostřednictvím pokladního systému KASA FIK, což zjednodušuje proces placení a závěrečné vyúčtování.
  4. Self-Checkout:

    • Hosté mají možnost provést self-checkout prostřednictvím kiosků, kde mohou zkontrolovat svůj účet, provést platbu a dokončit proces odhlášení bez nutnosti čekání na recepci.

Výhody Integrace

Implementace

Propojení Aktion.eu - stravovací systém

Tento dokument poskytuje podrobné informace o integraci pokladního systému KASA FIK se stravovacím systémem Aktion. Tato integrace přináší efektivní řešení pro řízení stravování ve firmách, šetří náklady na provoz jídelen a zrychluje proces odbavení strávníků.

image.png

Přehled stravovacího systému Aktion

Systém Aktion nabízí komplexní řešení pro objednávání a vyúčtování stravy ve firemních jídelnách. Mezi hlavní funkce patří:

Výhody Integrace KASA FIK s Aktion

image.png

Implementační Kroky

  1. Analýza Potřeb:

    • Vyhodnocení stávajících procesů a určení požadovaných funkcí integrace.
  2. Příprava a Testování:

    • Instalace a konfigurace potřebného softwaru a hardwaru.
    • Provádění testů propojení a ověření správnosti datové výměny.
  3. Konfigurace API:

    • Nastavení API klíčů a přístupových bodů pro bezpečnou komunikaci mezi KASA FIK a Aktion.
    • Zajištění správného nastavení parametrů pro objednávání a vyúčtování.
  4. Školení Personálu:

    • Poskytnutí školení pro personál o používání integrovaného systému, včetně nových funkcí a postupů.
  5. Zahájení Provozu:

    • Po úspěšném testování a školení uvedení systému do ostrého provozu.
    • Monitorování činnosti a řešení případných problémů.

Objednávání a Platby

Export a Vyúčtování

Propojení s Automaty

Nastavení přístupů v aplikaci KASA FIK Pokladna

V Nastavení - Expert nastavení - Aktion zadejte přístupové údaje pro lokální server Aktion.

Screenshot_20250611_213151.png

Screenshot_20250611_213319.png

Doplnění kreditu (Deposit)

Založte si novou položku, která bude mít typ a zvolte "Vyžádat zadáníá ceny" nebo pokud chcete fixní cenu zadejte cenu v ceníku.

Při prodeji přidejte tuto položku na účet, systém Vás vyzve na zadání hodnoty. Při platbě kartou nebo hotově se následně přičte deposit na účet zákazníka.

Propojení Shoptet

KASA FIK pokladna a vyzvedávací kiosky jsou schopny spolupracovat se systémem Shoptet. Při každé operaci Shoptet odešle e-mail na centrální adresu, kde jej zpracujeme v systému KASA FIK.

Nastavení informačních emailů v Shoptet

Návod Shoptet na webu https://podpora.shoptet.cz/informacni-e-maily/

Nastavení informačních e-mailů naleznete v administraci v Nastavení → Emaily → Automatické zasílání. Nastavte nového příjemce pro šablonu: Oznámení o objednávce e-shopu

Do příjemce, kopie uveďte email shoptet@e.kasafik.cz

email je shoptet (zavináč) e.kasafik (tečka) cz  - v emailu je písmeno e!

Screenshot from 2025-01-17 09-45-00.png

image.png

Povolení exportů stavu objednávek

V Nastavení → Administrace - Zabezpečení exportů zadejte nového partnera KASA FIK s.r.o.

image.png

Následně v administraci Shoptet - Objednávky → Exporty zvolte typ exportu CSV a přiřaďte partnera KASA FIK s.r.o. Zašlete nám odkaz k exportu a propojení. Více o nastavení exportů pomocí permanentního odkazu naleznete v manuálu Shoptet objednávky.

image.png

Povolení exportů stavu skladů

Backoffice lze propojit se sklady v Shoptet systému. Je nutné povolit export data poskytnout odkaz pro export dat. V Produkty → Sklad → Export vygenerujte odkaz pro stahování stavu skladů.

Screenshot from 2025-08-01 09-34-00.png

Převod ze skladů v Shoptet na KASA FIK

V Adminsitraci Shoptet v Nastavení → Produkty → Sklady → Přidat si přidejte nový sklad (například Prodejna Brno), To vám umožní v administraci Shoptetu převádět produkty na sklad v pokladně.

Screenshot from 2025-08-01 09-40-21.png

Propojení Qerko**

MultiSport - partnerská zóna

MultiSport je benefitní program, který umožňuje držitelům karet (zaměstnancům firem) vstup do široké sítě sportovních a relaxačních zařízení. Pro vás jako partnera MultiSport znamená zapojení do programu možnost oslovit nové zákazníky a zvýšit návštěvnost. Integrace s KASA FIK celý proces odbavení těchto zákazníků výrazně zjednodušuje.

Jak propojení KASA FIK a MultiSport funguje?

Integrace umožňuje vaší pokladně KASA FIK komunikovat se systémem MultiSport za účelem:

  1. Načtení identifikátoru: Rychlé načtení čísla MultiSport karty nebo ID z pokladní aplikace (obvykle pomocí čtečky čárových/QR kódů).
  2. Validace vstupu: Ověření platnosti karty pro daný den a zařízení přímo v systému MultiSport.
  3. Zaznamenání vstupu: Automatické zaúčtování a zaznamenání vstupu v pokladně KASA FIK a odeslání informace o využití vstupu do systému MultiSport.
  4. Řešení doplatků: V případě, že je k MultiSport vstupu vyžadován doplatek (dle typu karty nebo aktivity), systém vás na něj upozorní a umožní jeho zaúčtování.

Nastavení propojení MultiSport

V Nastavení - Expert nastavení - zvolte Multisport a zadejte své přihlašovácí údaje do Multisport Partnerského portálu ve formátu uživatelksé_jmeno:heslo (odděleno dvojtečkou)

Slevomat - aktivace voucherů

Tento návod vám ukáže, jak nastavit vaši pokladnu KASA FIK, abyste mohli rychle a pohodlně ověřovat a uplatňovat Slevomat vouchery přímo při prodeji, bez nutnosti chodit do Slevomat Partnerského rozhraní na počítači.

Co budete potřebovat:

  1. Být partnerem Slevomatu: Musíte mít se Slevomatem uzavřenou smlouvu.
  2. Váš unikátní Slevomat API Token: Toto je speciální kód, který slouží k propojení vaší pokladny se Slevomatem. Tento token získáte přímo od Slevomatu. Kontaktujte svého obchodního zástupce Slevomatu nebo jejich zákaznickou podporu a požádejte o "API token pro Partner API". Bez tohoto tokenu propojení nebude fungovat.
  3. Internetové připojení: Pokladna potřebuje být připojená k internetu, aby mohla komunikovat se Slevomatem.

Kroky k nastavení v KASA FIK:

Krok 1: Získejte svůj Slevomat API Token

Krok 2: Vložte Token do nastavení KASA FIK

Screenshot from 2025-06-06 22-00-08.png

Krok 3: Nastavte si tlačítko pro rychlé použití (Doporučeno)

Jak používat Slevomat vouchery při prodeji:

  1. Zákazník vám předá Slevomat voucher.
  2. Na pokladně KASA FIK stiskněte tlačítko, které jste si pro Slevomat nastavili (nebo najděte funkci v menu).
  3. KASA FIK vás vyzve k zadání kódu voucheru. Opište kód přesně z voucheru zákazníka.
  4. KASA FIK se přes internet spojí se Slevomatem a ověří platnost voucheru.
  5. Na obrazovce pokladny se zobrazí informace o voucheru (např. název akce) a hlavně, zda je platný k použití.
  6. Pokud je voucher platný, KASA FIK ho po vašem potvrzení uplatní v systému Slevomatu. Klepněte na tlačítko Použít voucher
  7. Pokladna potvrdí, že voucher byl úspěšně uplatněn.
  8. Nyní můžete dokončit prodej v KASA FIK, případně odečíst hodnotu voucheru od celkové částky účtenky (záleží na tom, jak máte nastavené produkty v KASA FIK a jak KASA FIK zpracovává informace ze Slevomatu).

Pozor, uplatnění voucheru je nutné provést ve 2 krocích. Napřed dojde k ověření a následně uplatnění pomocí tlačítka Použít voucher. Pokud obsluha provede pouze ověření, nedojde k deaktivaci voucheru v systému Slevomat.

image.png

image.png

Formátování kódu voucheru

Systém akceptuje vouchery v jakémkoliv formátu. Nerozlišuje velká a malá písmena a podporuje zadávání s číslicemi i s pomlčkami nebo bez nich.

Zasílání emailů

Pokud je vyplněn email na zasílání přehledů pro účetní, systém automaticky odešle každž požadavek na ověření voucheru na email.

Co když se objeví chyba?

Pokud KASA FIK hlásí, že voucher nelze použít, může to být z různých důvodů, které vám pokladna obvykle ukáže (např. voucher už byl použitý, nebyl zaplacený, propadla mu platnost, neexistuje atd.).

Základní řešení problémů:

Důležité upozornění:

Ticketstream - validace vstupů na kiosku a pokladně

KASA FIK Pokladna vám umožní rychle a spolehlivě ověřovat platnost vstupenek prodaných přes Ticketstream. Tuto funkci využijete především při kontrole vstupu na akce, sportoviště, koncerty nebo v kioskovém režimu.

Co potřebujete k propojení:

  1. Partnerství s Ticketstreamem: Musíte mít s Ticketstreamem smlouvu a prodávat přes ně vstupenky.
  2. Váš Ticketstream Autorizační Token: Toto je speciální kód, který propojí vaši KASA FIK pokladnu se systémem Ticketstream. Token získáte přímo od společnosti Ticketstream. Kontaktujte je a vyžádejte si ho. Bez něj propojení nebude fungovat.
  3. Aplikaci KASA FIK Pokladna: Ujistěte se, že ji máte nainstalovanou a funkční.
  4. Stabilní internetové připojení: KASA FIK potřebuje internet pro online ověření a stahování dat o vstupenkách.
  5. Čtečka čárových/QR kódů: Zařízení pro skenování kódů ze vstupenek, připojené k pokladně nebo kiosku.

Nastavení propojení v KASA FIK (jednorázové):

  1. Získejte Token od Ticketstreamu: Než začnete v KASA FIK, ujistěte se, že máte od Ticketstreamu připravený váš Autorizační Token.
  2. Otevřete KASA FIK Pokladna.
  3. Přejděte do Nastavení.
  4. Vyberte Expertní nastavení.
  5. Klepněte na položku Ticketstream.
  6. Do zobrazeného pole zadejte Autorizační Token, který jste získali od Ticketstreamu.

Screenshot from 2025-06-07 06-30-22.png

Nastavení způsobu validace (Pokladna / Kiosek):

Po vložení tokenu je propojení aktivní. Nyní si nastavte, jak budete validaci spouštět:

Jak používat validaci vstupenek při vstupu:

  1. Návštěvník vám předloží vstupenku (vytištěnou nebo v telefonu).
  2. Pokud používáte běžnou pokladnu: Stiskněte nastavenou funkční klávesu pro validaci Ticketstream.
  3. Pokud používáte Kiosek: Kiosek je připraven a čeká na skenování.
  4. Pomocí čtečky naskenujte čárový kód nebo QR kód ze vstupenky.
  5. KASA FIK se přes internet spojí se systémem Ticketstream a ověří platnost vstupenky.
  6. Na obrazovce KASA FIK se okamžitě zobrazí výsledek:
    • Vstupenka je platná: Zobrazí se potvrzení (případně detaily jako typ vstupenky, zóna). Návštěvníka můžete pustit.
    • Vstupenka je neplatná: Zobrazí se důvod (např. již použitá, neexistuje, neplatná pro daný den atd.). Návštěvníka byste neměli pustit.
  7. KASA FIK zároveň uplatní vstupenku v systému Ticketstream, aby ji nebylo možné použít znovu.

Důležité funkce a poznámky:

Co když se objeví chyba?

Pokud KASA FIK hlásí problém s validací, zkontrolujte:

Potřebujete pomoct?

Propojení Helios

Pokladna nabízí možnost propojit s ERP systémem Helios pomocí SQL napojení na databázi. Vzhledem ke specifickým požadavkům je nutné specifikovat:

KASA FIK využívá pomocný KASA FIK Helios Connector, který se napojít na SQL Server a provádí výměnu pomocí tabulek nebo uložených procedůr.

Propojení QR Ticket - validace vstupů na kiosku a pokladně

qrticket_logo.png

KASA FIK Pokladna vám umožní rychle a spolehlivě ověřovat platnost vstupenek prodaných přes QR Ticket. Tuto funkci využijete především při kontrole vstupu na akce, sportoviště, koncerty nebo v kioskovém režimu.

Co potřebujete k propojení

Nastavení propojení

  1. Získejte token od QR Ticket: Než začnete v KASA FIK, ujistěte se, že máte od QR Ticket připravený váš autorizační token.

  2. Otevřete KASA FIK Pokladna.

  3. Přejděte do Nastavení.

  4. Vyberte Expertní nastavení.

  5. Klepněte na položku QR Ticket.

  6. Do zobrazeného pole zadejte váš autorizační token a kód akce - odděleno dvojtečkou. Napříkad:

qrk7x0IMALhRrw7s3VlVY6xKXtyxxxxxxx:QFIFXXX

Screenshot from 2026-03-06 12-03-04.png

image.png

Nastavení způsobu validace (pokladna / kiosek)

Po vložení tokenu je propojení aktivní. Nyní si nastavte, jak budete validaci spouštět:

Screenshot from 2026-03-06 12-05-58.png

Jak používat validaci vstupenek při vstupu

  1. Návštěvník vám předloží vstupenku (vytištěnou nebo v telefonu).

  2. Pokud používáte běžnou pokladnu: Stiskněte nastavenou funkční klávesu pro validaci QR Ticket.
    Pokud používáte kiosek: Kiosek je připraven a čeká na skenování.

  3. Pomocí čtečky naskenujte čárový kód nebo QR kód ze vstupenky.

  4. KASA FIK se přes internet spojí se systémem QR Ticket a ověří platnost vstupenky.

  5. Na obrazovce KASA FIK se okamžitě zobrazí výsledek:

    • Vstupenka je platná: Zobrazí se potvrzení (případně detaily jako typ vstupenky, zóna). Návštěvníka můžete pustit.

    • Vstupenka je neplatná: Zobrazí se důvod (např. již použitá, neexistuje, neplatná pro daný den). Návštěvníka byste neměli pustit.

  6. KASA FIK zároveň uplatní vstupenku v systému QR Ticket, aby ji nebylo možné použít znovu.

Co když se objeví chyba?

Pokud KASA FIK hlásí problém s validací, zkontrolujte:

Potřebujete pomoct?

KASA FIK MCP Server

Co je to MCP server pro Pokladnu?

MCP (Model Context Protocol) je otevřený protokol, který umožňuje AI nástrojům (jako je Claude Desktop, ChatGPT nebo OpenAI Codex) komunikovat přímo s vašimi daty v KASA FIK.

Díky MCP serveru nemusíte otevírat dashboard, exportovat CSV ani ručně kopírovat čísla. Stačí se zeptat přirozeným jazykem a AI odpoví na základě živých dat z vaší provozovny.


K čemu se MCP server hodí?

Tržby a vše kolem prodeje teď vyřídíte přímo v AI chatu. Místo ručního proklikávání prostě napište třeba "Ukaž mi, jaké byly mé tržby za včerejšek a které produkty se prodávaly nejvíce" – a AI vám výsledek přehledně zobrazí.

Díky MCP serveru můžete:

V beta verzi je k dispozici pouze čtení dat. Zápisové operace (tvorba slev, úprava zásob, refundace) zatím nejsou podporovány.


Kolik za propojení s AI zaplatíte?

Samotné napojení AI na KASA FIK je v beta verzi zdarma. MCP volání nejsou aktuálně omezena ani počítána do žádných limitů.

Po ukončení beta verze a ostrém release bude toto propojení zpoplatněno jako prémiový add-on. O přesných podmínkách vás budeme včas informovat.


Jak propojím KASA FIK s AI?

Oproti jiným integracím zde nemusíte složitě generovat API klíče ručně. Stačí si vygenerovat token v Backoffice KASA FIK, zadat adresu MCP serveru do vašeho AI nástroje a propojení je hotové.

Níže najdete konkrétní postup pro váš AI nástroj.


Krok 1: Získání přístupového tokenu

  1. Přihlaste se do Backoffice KASA FIK
  2. Přejděte do sekce Nastavení → MCP servery (nebo použijte přímý odkaz z vašeho uvítacího emailu)
  3. Klikněte na Vytvořit nový token
  4. Token si pojmenujte (např. "Claude pro provozovnu Hlavní")
  5. Zkopírujte vygenerovaný token – po opuštění stránky už ho nebude možné znovu zobrazit

Podrobný návod krok za krokem najdete v samostatné příručce Správa MCP tokenů v Backoffice.


Krok 2: Propojení s vaším AI nástrojem

Vyberte níže váš AI nástroj.


Jak propojím KASA FIK s ChatGPT (OpenAI)

  1. Otevřete ChatGPT a vlevo dole klikněte na své jméno, poté na Nastavení
  2. V levém seznamu klikněte na Aplikace → Rozšířené nastavení
  3. Aktivujte Režim vývojáře kliknutím na posuvník – nechte ho zapnutý i po dokončení nastavení
  4. Klikněte na tlačítko Vytvořit aplikaci
  5. Do pole Název zadejte například "KASA FIK"
  6. Do pole URL serveru MCP vložte adresu: https://api.kasafik.cz/mcp/v1/
  7. Klikněte na Vytvořit
  8. Zobrazí se formulář pro autorizaci – vložte svůj token z Backoffice a potvrďte

Poznámka: Režim vývojáře musí zůstat zapnutý, jinak propojení přestane fungovat. Pokud vám to nevyhovuje, doporučujeme použít Claude Desktop.


Jak propojím KASA FIK s Claude Desktop (Anthropic)

  1. Otevřete Claude Desktop
  2. V levém postranním panelu klikněte na Customize
  3. Vlevo vyberte Connectors a kliknutím na tlačítko plus přidejte Add custom connector
  4. Do pole Name zadejte například "KASA FIK"
  5. Do pole Remote MCP server URL vložte adresu: https://api.kasafik.cz/mcp/v1/
  6. Potvrďte kliknutím na Add
  7. Zobrazí se formulář pro autorizaci – vložte svůj token z Backoffice a potvrďte
  8. Vrátíte se zpět do Claude, kde můžete případně upravit jednotlivá oprávnění

Jak propojím KASA FIK s OpenAI Codex

  1. Otevřete Codex
  2. Vlevo dole klikněte na Nastavení → Nastavení
  3. V levém postranním panelu klikněte na MCP servery a pak na Přidat server
  4. Do pole Název napište například "KASA FIK"
  5. Klikněte na Streamovatelné HTTP
  6. Do pole URL vložte adresu: https://api.kasafik.cz/mcp/v1/
  7. Klikněte na Uložit
  8. V seznamu připojených serverů klikněte na Ověřit se
  9. Zobrazí se formulář pro autorizaci – vložte svůj token z Backoffice a potvrďte

Krok 3: První dotaz

Po úspěšném propojení můžete začít pokládat dotazy. Zkuste například:

AI odpovídá česky (pokud se zeptáte česky) a data zobrazuje přehledně jako tabulku nebo seznam.


Jak zruším propojení s AI v KASA FIK?

Propojení zrušíte ve dvou krocích:

V KASA FIK Backoffice:

  1. Přejděte do Nastavení → MCP servery
  2. U příslušného tokenu klikněte na Zrušit přístup nebo token smažte

Ve vašem AI nástroji:


Jak bezpečně pracovat s AI?

Zkontrolujte výsledek. Jako každý nástroj, i AI se občas splete. Vždy si ověřte důležité údaje.

Sdílejte jen to, co je potřeba. Do chatu zadávejte pouze dotazy, které AI potřebuje k danému úkolu. Citlivá data (hesla, čísla karet, osobní údaje zákazníků) tam nepatří. Počítejte s tím, že data procházejí přes poskytovatele AI.

Používejte oficiální zdroje. Claude Desktop stahujte z webu Anthropic, ChatGPT z webu OpenAI. Připojujte jen služby, kterým důvěřujete.

Ponechte si poslední slovo. U důležitých akcí (byť je v beta verzi nemůžete provádět) si nejdřív nechte od AI navrhnout, co chce udělat – a potvrďte to, až si ověříte, že je vše v pořádku.

Co AI v účtu smí (a co ne):

Autorizace přes token. Žádná hesla, AI dostane jen omezený přístupový token, který v Backoffice můžete kdykoliv zneplatnit.


Omezení beta verze


Časté dotazy

Musím mít v ChatGPT trvale zapnutý režim vývojáře? Ano, režim vývojáře musí zůstat zapnutý, jinak propojení s KASA FIK přestane fungovat. Pokud vám to nevyhovuje, vyzkoušejte Codex (také od OpenAI a funguje se stejným předplatným) nebo Claude Desktop – tam toto omezení není.

Mohu použít jiné AI než Claude, OpenCode, ChatGPT nebo Codex? Teoreticky ano, pokud podporují MCP protokol.

Může MCP server používat více zaměstnanců? Ano, ale každý potřebuje vlastní token. Tokeny nesdílejte – v logu vidíme, kdo co dotazoval.

Co když zapomenu token? Token nelze znovu zobrazit. Pokud ho ztratíte, vytvořte v Backoffice nový a starý zrušte.


Podpora a zpětná vazba

Jste mezi prvními uživateli MCP v České republice. Vaše zkušenosti jsou pro nás klíčové.

Technické problémy: podpora@kasafik.cz