1-нұсқа. Кәсіпорынның жеке кілті арқылы қол жеткізу.
TGbot Cafe брондау журналының API-ы кәсіпорынның барлық қосылған залдарындағы бос емес уақыт аралықтарын қайтарады. Осы деректер арқылы сайт немесе басқа қолданба қолжетімділік күнтізбесін көрсете алады. Әдіс деректерді тек оқиды: бронь жасау, жазбаны өзгерту, төлем қабылдау және уақытты резервтеу қолдау таппайды. Жауапқа клиенттердің аттары мен телефондары, түсініктемелер, қызметтер, сомалар және құжаттардың ішкі нөмірлері кірмейді.
OpenAPI 3.0.3 келісімшартын жүктеу
Әдіс және қолжетімділік
| Параметр | Мәні |
|---|---|
| Әдіс | GET /api/v1/availability |
| Негізгі мекенжай | https://tgbotcafe.assistbot.ru |
| Авторизация | Authorization: Bearer және кәсіпорынның жеке кілті |
| Жауап пішімі | application/json |
| Шектеу | Бір IP үшін минутына 60 сұрау; шектеу басқа API сұрауларымен ортақ |
Кілтті кәсіпорын қосылғаннан кейін API әкімшісі береді. Оның пішімі — мына префикс: arma_avail_ және 64 оналтылық таңба. Бұл — TGbot Cafe-нің бөлек кілті; AssistBot хабарлама жіберу API токендері бұл әдіске жарамайды. Бір кілт тек бекітілген кәсіпорынның күнтізбесін ашады және әкімшілік кабинетке немесе төлем операцияларына қолжетімділік бермейді.
Сұрауды қолданбаңыздың серверінен HTTPS арқылы орындаңыз. Кілтті жабық серверлік баптауда сақтаңыз; оны HTML-де, браузерлік JavaScript ішінде немесе сұрау мекенжайында орналастырмаңыз. Кілт жария болып кетсе, әкімшіден оны қайтарып алып, жаңасын беруді сұраңыз. Кәсіпорын кілтпен анықталады: оны сұрау параметрлерімен ауыстыруға болмайды.
Сұрау параметрлері
| Өріс | Міндетті | Пішім |
|---|---|---|
from | Иә | Аралықтың басы: 2026-10-15T00:00:00+03:00 |
to | Иә | Аралықтың соңы: 2026-10-17T00:00:00+03:00 |
- Бүтін секундтары мен нақты уақыт белдеуі бар RFC3339 қажет: ығысу, мысалы,
+03:00, немесеZ. Ең үлкен ығысу —±14:00. Бөлшек секундтар, уақыты көрсетілмеген күн және белдеуі жоқ уақыт қабылданбайды. - Аралықтың пішімі:
[from, to): басы кіреді, соңы кірмейді. Соңы басынан кейін болуы керек, ұзақтығы 31 × 24 сағаттан, яғни 2 678 400 секундтан аспауы тиіс. - Тек мыналарға рұқсат етіледі:
fromжәнеto. Кәсіпорынды таңдау және залдар бойынша сүзу қолдау таппайды: жауапта кәсіпорынның барлық бапталған залдары болады. - Таңбаны
+мына түрде кодтаңыз:%2B. Ол үшін query құрастырушысын немесе мынаны пайдаланыңыз:--data-urlencode.
Қосылған кәсіпорынға арналған мысал. Айнымалы AVAILABILITY_KEY берілген кілтті қамтиды:
curl --fail-with-body --get 'https://tgbotcafe.assistbot.ru/api/v1/availability' \
--header "Authorization: Bearer ${AVAILABILITY_KEY}" \
--header 'Accept: application/json' \
--data-urlencode 'from=2026-10-15T00:00:00+03:00' \
--data-urlencode 'to=2026-10-17T00:00:00+03:00'
Жауап және мысал
Алты залы бар ойдан шығарылған кәсіпорынның мысалы. Басқа қосылымда залдар тізімі мен кодтары өзгеше болуы мүмкін. Бірінші жазба түн ортасынан өтеді:
{
"version": 1,
"source": "admin_calendar",
"timezone": "Europe/Moscow",
"from": "2026-10-15T00:00:00+03:00",
"to": "2026-10-17T00:00:00+03:00",
"generated_at": "2026-10-13T13:20:00+03:00",
"data_updated_at": "2026-10-13T12:45:00+03:00",
"freshness": "live",
"complete": false,
"incomplete_reasons": ["calendar_not_authoritative"],
"halls": [
{"hall_id": "armaloft", "name": "АрмаЛофт залы", "busy_intervals": [
{"starts_at": "2026-10-15T22:00:00+03:00", "ends_at": "2026-10-16T02:00:00+03:00"}
]},
{"hall_id": "mercury", "name": "Меркури залы", "busy_intervals": []},
{"hall_id": "airplane", "name": "Самолет залы", "busy_intervals": []},
{"hall_id": "rufer", "name": "Руфер залы", "busy_intervals": []},
{"hall_id": "pulka", "name": "Пулька залы", "busy_intervals": []},
{"hall_id": "boho", "name": "Бохо залы", "busy_intervals": []}
]
}
| Өріс | Мағынасы |
|---|---|
version, source | Нұсқа 1, дереккөз admin_calendar — әкімшілік кабинеттің күнтізбесі. |
timezone, from, to | Уақыт белдеуі Europe/Moscow. Күндер — тиісті күнге арналған Мәскеу ығысуы бар RFC3339 пішімінде: қазір +03:00, тарихи тұрғыдан ол өзгеше болуы мүмкін, мысалы, +04:00 2012 жылы. |
generated_at | Күнтізбенің келісілген күйін оқуды бастау уақыты. |
data_updated_at | Күнтізбеде сақталған жазбалардың немесе бапталған залдар сипаттамаларының соңғы өзгеруі, соның ішінде бас тартылған жазбалар мен сұраудан тыс күндер. Мәні мынадай болуы мүмкін: null. Бұл — ревизия нөмірі де, соңғы сыртқы синхрондау уақыты да емес; жазбаны жою мұндай жаңа белгі жасамайды. |
freshness | live — жауап кэшінсіз дерекқордың ағымдағы күйі. Бұл мәннің өзі сыртқы дереккөздердің толықтығын растамайды. |
complete, incomplete_reasons | Дереккөздің толықтығы. Мәні false болса, себебі — calendar_not_authoritative; ал мәні true болса, себептер массиві бос болады. |
halls[].hall_id, name | Залдың тұрақты ашық коды және ағымдағы атауы. Атауын өзгерту кодын өзгертпейді. |
busy_intervals[].starts_at, ends_at | Бос емес аралықтың басталуы мен аяқталуы, күні және уақыт белдеуімен бірге. |
Бос уақытты қалай анықтау керек
Мәні complete=false болғанда, бос емес аралықтың жоқтығы залдың бос екенін білдірмейді: броньдардың бір бөлігі әлі сыртқы дереккөзде болуы мүмкін. Белгілі бос емес уақытты белгілеуге болады, бірақ қалған сағаттардың бос екенін растауға болмайды. Бұл жағдайда тіпті HTTP 200 және бос массив те растау болып саналмайды.
Бос уақытты көрсетпес бұрын HTTP 200 мәнін, version=1, source=admin_calendar, freshness=live, complete=true және күтілетін залдар тізімінің толықтығын тексеріңіз. Қате немесе толық емес күнтізбе болса, «Қолжетімділік уақытша расталмады» деп көрсетіңіз; мұндай жауапты бос күнтізбемен алмастырмаңыз.
- Бос емес аралықтар реттелген; қиылысатын және іргелес аралықтар біріктірілген. Жазба мына мәнге дейін басталса да, шекаралары бастапқы күйінде қалады:
fromнемесе мына мәннен кейін аяқталса:to. - Жазба мына шарт орындалғанда қосылады:
starts_at < toжәнеends_at > from. Келесі жазба алдыңғысы аяқталған дәл сәтте басталуы мүмкін. - Бас тартылған жазбалар есепке алынбайды. Клиенттің келмеуі, төлемнің болмауы және тегін көрудің өзі уақытты босатпайды. Минуттар мен түнгі аралықтар сағатқа дейін дөңгелектелмей сақталады.
Әдіс жауаптарында мына директива болады: no-store мына жерден: Cache-Control, мысалы, no-store, private; тақырыпта қосымша рұқсат етілген директивалар болуы мүмкін. Жауаптарды расталған қолжетімділік ретінде кэштемеңіз. Барлық залдар үшін бір сұрау жеткілікті. Күнтізбені оқу таңдалған уақытты резервтемейді: жауаптан кейін басқа пайдаланушы жаңа жазба жасай алады. Әдіс сыртқы күнтізбені синхрондамайды және бронь жасаудың қолданыстағы процесін автоматты түрде ауыстырмайды.
Қателер
Авторизация, параметрлер және күнтізбені оқу қателері үшін қысқа JSON қайтарылады:
{"error":{"code":"calendar_unavailable"}}
| HTTP | Код / себеп | Әрекет |
|---|---|---|
| 401 | unauthorized: кілт жоқ, қате, қайтарып алынған немесе query ішінде берілген; кәсіпорын қосылымы белсенді емес. | Кілтті API әкімшісімен тексеріңіз. |
| 422 | invalid_range: күндер дұрыс емес, аралық бос, кері немесе тым үлкен. | Түзетіңіз: from және to. |
| 422 | unsupported_parameter: сұраудың артық параметрі. | Тек мынаны қалдырыңыз: from және to. |
| 503 | calendar_unavailable: дұрыс күнтізбені алу мүмкін емес. Ешбір қолжетімсіз зал бос уақыттың бос тізімімен алмастырылмайды. | Уақытша қолжетімсіз екенін көрсетіңіз. |
| 405 | Қолдау көрсетілмейтін әдіс; сервердің стандартты жауабы. | GET пайдаланыңыз. Жоғарыда сипатталған JSON пішіміне сенбеңіз. |
| 429 | Ортақ шектеу асып кетті; сервердің стандартты жауабы. | Мынада көрсетілген уақытты күтіңіз: Retry-After және сұраулар жиілігін азайтыңыз. |
Кез келген басқа жауап, соның ішінде 500, бос уақытты растамайды. 405 және 429 стандартты жауаптары үшін күнтізбе қатесінің пішімі кепілдендірілмейді. Сол авторизациямен және тақырыптармен, денесіз HEAD сұрауына рұқсат етіледі; ол үшін бөлек екінші API әдісі жоқ.