Виджет — бұл бот хабарламасына тікелей ендірілген интерактивті компонент: көшіру түймесі бар промокод, кері санақ таймері, тапсырыс мәртебесін бақылаушы, викторина немесе күн мен уақытты таңдауға арналған күнтізбе. Тұтынушы виджетпен әрекеттескенде, бот сол хабарламаны орнында жаңартады — жаңа хабарламалар жібермейді немесе «өңделген» белгісін көрсетпейді.

Виджетті жіберудің екі жолы бар:
- Дайын шаблон — Калькулятордағы бір жол. Орналасуы мен функционалдығы әлдеқашан іске асырылған.
- Теңшелетін виджет — өз HTML кодыңызды жазыңыз (немесе Mavi-ден жасатуды сұраңыз) және бот ағыны блоктары арқылы әрекеттесуді өңдеңіз.
Виджеттер қайда жұмыс істейді
| Мессенджер | Тек Telegram |
| Чат түрі | Тек тұтынушы мен бот арасындағы жеке чаттар |
| Қолдау көрсетілмейді | Топтар, арналар, Telegram Business |
| Telegram қолданбасы | Telegram-ның жаңартылған нұсқасы қажет. Ескі нұсқалар «Қолдау көрсетілмейтін хабарлама» ескертуін және жазуын көрсетеді |
| Алға жіберу | Виджеттерді алға жіберуге немесе көшіруге болмайды |
Виджеттер мәтіндік енгізу өрістерін немесе пернетақталарды қолдамайды. Тұтынушылар тек түрту арқылы әрекеттесе алады. Тұтынушылардың мәтін енгізуі қажет болса, кәдімгі бот сұрағын немесе Web App қолданыңыз.
Виджеттер басқару панеліндегі ботты тексеру терезесінде көрсетілмейді, себебі ол Telegram емес. Виджеттерді тікелей Telegram-да ботыңызға хабарлама жіберу арқылы тексеріңіз.
Дайын шаблондар
Барлық шаблондар бір функция арқылы жіберіледі:
tg_send_widget(platform_id, template, params, caption)
| Параметр | Сипаттама |
|---|---|
platform_id |
Алушының ID-і. Ағымдағы тұтынушы үшін platform_id айнымалысын пайдаланыңыз |
template |
Шаблон атауы: promo, timer, order_status, faq, quiz, calendar
|
params |
Шаблон параметрлерін қамтитын сөздік |
caption |
Виджеттің астында көрсетілетін мәтін. Тұтынушылар оны чат тізімінде, хабарландыруларда және Telegram-ның ескі нұсқаларында да көреді, сондықтан ол өздігінен мағыналы болуы керек |
Функция Telegram API жауабын қайтарады. Жіберілген хабарламаның ID-і response['result']['message_id'] мекенжайында қолжетімді. Кейінірек виджетті жаңартуды жоспарласаңыз, оны сақтаңыз.
Егер функция Telegram жауабының орнына мәтінді қайтарса, қате орын алды: белгісіз шаблон, жарамсыз немесе жоқ параметр немесе виджет өлшем шегінен асып кетті. Қате мәтіні не дұрыс емес екенін түсіндіреді.
Параметрлерді қалай құру керек
Сөздік жасаңыз және әр параметрді бөлек жолға тағайындаңыз:
p = {}
p["code"] = "WIDGET10"
p["title"] = "Сіздің промокодыңыз"
p["note"] = "Кез келген тапсырысқа 10% жеңілдік"
w = tg_send_widget(platform_id, "promo", p, "Сіздің промокодыңыз WIDGET10 — 10% жеңілдік")
Кодты блоктың Калькулятор өрісіне енгізіңіз. Скриншотта тұтынушы «order widget» деген сөз тіркесін жібергенде тапсырыс мәртебесі виджетін жіберетін Бастапқы шарт блогы көрсетілген.

Виджетті жіберетін блокта әдетте жауап өрісін #{none} мәніне орнатасыз. Блок бөлек мәтіндік хабарлама жібермейді, себебі виджеттің жазуы хабарлама мәтіні ретінде қызмет етеді.
Тіл
Шаблондарға кірістірілген интерфейс мәтіні кіреді, мысалы, түйме белгілері, ай және апта күндерінің атаулары, «Уақыт бітті» және басқа хабарламалар.
Mavibot-та әдепкі тіл — ағылшын (en).
Басқа тілді пайдалану үшін lang параметрін көрсетіңіз:
p["lang"] = "kk"
Қолдау көрсетілетін тілдер:
ru, en, de, es, fr, pt, tr, uk, kk, ms, th, ar.
Өзіңіз беретін мәтіндер — тақырыптар, сұрақтар, қадамдар және жазулар — дәл енгізілгендей көрсетіледі және автоматты түрде аударылмайды.
Промокод — promo
Бір түртумен көшіретін түймесі бар промокодты көрсетеді.

| Параметр | Сипаттама |
|---|---|
code |
Промокод. Міндетті |
title |
Кодтың үстінде көрсетілетін мәтін |
note |
Кодтың астында көрсетілетін мәтін, мысалы, жарамдылық мерзімі |
button |
Түйме белгісі. Әдепкі: «Промокодты көшіру» |
used_text |
Код пайдаланылған деп белгіленгенде көрсетілетін мәтін |
p = {}
p["code"] = "WIDGET10"
p["title"] = "Сіздің промокодыңыз"
p["note"] = "Кез келген тапсырысқа 10% жеңілдік"
p["button"] = "Кодты көшіру"
w = tg_send_widget(platform_id, "promo", p, "Сіздің промокодыңыз WIDGET10 — 10% жеңілдік")
client.promo_widget_id = w['result']['message_id']
Кодты пайдаланылған деп белгілеу үшін, бұл кодты сызып тастайды және түймені алып тастайды:
p = {}
p["used"] = 1
t = tg_edit_widget_data(platform_id, client.promo_widget_id, p)
Кері санақ таймері — timer
Белгіленген күн мен уақытқа дейінгі кері санақты көрсетеді.
Кері санақ тұтынушының құрылғысында жүреді. Бот таймерді жаңартуға қатыспайды.

| Параметр | Сипаттама |
|---|---|
until |
Мақсатты күн мен уақыт "DD.MM.YYYY HH:MM" форматында, жобаның уақыт белдеуінде |
seconds |
Немесе виджет жіберілген сәттен бастап секунд саны |
title |
Таймер тақырыбы. Әдепкі: «Ұсыныс аяқталуға» |
done |
Кері санақ аяқталғанда көрсетілетін мәтін |
text |
Кері санақтың астында көрсетілетін мәтін |
button, url
|
Түйме белгісі және межелі URL (https:// ғана) |
hide_button |
Кері санақ аяқталғанда түймені жасыру үшін 1 мәніне орнатыңыз |
until немесе seconds параметрлерінің бірін беру керек.
p = {}
p["seconds"] = 7200
p["title"] = "Ұсыныс аяқталуға"
p["button"] = "Веб-сайтқа кіру"
p["url"] = "https://salebot.pro"
w = tg_send_widget(platform_id, "timer", p, "Ұсыныс 2 сағаттан кейін аяқталады")
Кері санақ нөлге жеткенде, ботқа ешқандай хабарлама немесе кері шақыру жіберілмейді. Егер бот ұсыныс мерзімі аяқталғанда әрекет жасауы қажет болса, бот ағынында кәдімгі таймер қосылымын пайдаланыңыз.
Тапсырыс мәртебесі — order_status
Ағымдағы кезең бөлектелген тапсырыс кезеңдерінің тізімін көрсетеді.
Бот кезеңді орнында жаңарта алады, сондықтан тұтынушы әрқашан бірдей хабарламаны көреді.

| Параметр | Сипаттама |
|---|---|
title |
Виджет тақырыбы |
steps |
Кезеңдер тізімі, 1-ден 12-ге дейін. Әдепкі: қабылданды, дайындалуда, курьерге берілді, жолда, жеткізілді |
step |
Ағымдағы кезең нөмірі, 1-ден бастап |
text |
Кезеңдердің астында көрсетілетін мәтін |
Виджетті жіберу:
p = {}
p["title"] = "Тапсырыс мәртебесі"
p["steps"] = ["Қабылданды", "Дайындалуда", "Жеткізілді"]
p["step"] = 1
p["text"] = "Тапсырысыңыз қабылданды және дайындалуда"
w = tg_send_widget(platform_id, "order_status", p, "Сіздің тапсырысыңыз")
client.order_widget_id = w['result']['message_id']
Келесі кезеңге кез келген басқа блоктан өтіңіз, мысалы, мәміле кезеңі өзгергенде, менеджер команда жібергенде немесе таймер іске қосылғанда:
p = {}
p["step"] = 2
p["text"] = "Тапсырысыңыз дайындалуда және жақын арада курьерге беріледі"
t = tg_edit_widget_data(platform_id, client.order_widget_id, p)

Виджеттің астындағы жазу кезең жаңартылғанда өзгермейді. «Мәртебе: Қабылданды» сияқты емес, «Сіздің тапсырысыңыз» сияқты бейтарап жазу қолданыңыз.
Жиі қойылатын сұрақтар — faq
Сұрақтар тізімін көрсетеді. Тұтынушылар жауапты ашу үшін сұрақты түрте алады.

| Параметр | Сипаттама |
|---|---|
title |
Виджет тақырыбы |
items |
Сұрақ-жауап жұптарының тізімі. Міндетті |
p = {}
p["title"] = "Жиі қойылатын сұрақтар"
p["items"] = [["Қалай төлеуге болады?", "Картамен төлей аласыз. Төлем сілтемесі осы чатқа жіберіледі."], ["Жеткізу қанша уақыт алады?", "Жеткізу әдетте жергілікті жерде 1–2 күн, ал бүкіл ел бойынша 3–7 күн алады."], ["Тауарды қайтаруға бола ма?", "Иә, 14 күн ішінде."]]
w = tg_send_widget(platform_id, "faq", p, "Жиі қойылатын сұрақтарға жауаптар")
Мәтін қарапайым мәтін ретінде көрсетіледі. HTML тегтері және басқа белгілеу өңделмейді.
Викторина және сауалнама — quiz
Бір уақытта бір сұрақты көрсететін, бірнеше жауап нұсқалары бар сұрақтарды көрсетеді.
Егер дұрыс жауаптар көрсетілсе, виджет викторина ретінде жұмыс істейді және ұпай есептейді. Дұрыс жауаптарсыз ол сауалнама ретінде жұмыс істейді.

| Параметр | Сипаттама |
|---|---|
title |
Сұрақтардың үстінде көрсетілетін тақырып |
questions |
Сұрақтар тізімі. Міндетті |
retry |
Соңында «Қайталау» түймесін көрсету үшін 1 мәніне орнатыңыз |
callback |
widget_quiz_finished орнына теңшелетін кері шақыру мәтіні |
Әр сұрақ келесілерді қамтитын сөздік болып табылады:
-
q— сұрақ мәтіні -
options— жауап нұсқалары -
correct— дұрыс жауап, 1-негізделген индексі немесе нақты мәтіні арқылы көрсетіледі
p = {}
p["title"] = "Викторина: Біліміңізді тексеріңіз"
p["retry"] = 1
p["questions"] = [{"q": "2 + 2 нешеге тең?", "options": ["3", "4", "5"], "correct": 2}, {"q": "Францияның астанасы қай қала?", "options": ["Лондон", "Париж", "Берлин"], "correct": "Париж"}]
w = tg_send_widget(platform_id, "quiz", p, "Осы екі сұрақтан тұратын викторинаға қатысыңыз!")
Ұпайсыз сауалнама жасау үшін әр сұрақтан correct параметрін алып тастаңыз.
Дұрыс жауаптар платформа арқылы тексеріледі және тұтынушының құрылғысына жіберілмейді.
Бот ағыны не қабылдайды
Жеке сұрақтарға жауаптар сөйлесуге жіберілмейді.
Тұтынушы соңғы сұраққа жауап бергенде, бот widget_quiz_finished кері шақыруын алады және келесі айнымалылар толтырылады:
| Айнымалы | Мән |
|---|---|
widget_quiz_score |
Дұрыс жауаптар саны; сауалнамалар үшін бос |
widget_quiz_total |
Сұрақтардың жалпы саны |
widget_quiz_answers |
Таңдалған нұсқалардың индекстері, мысалы, [2,2]
|
Нәтижені өңдеу үшін викторинаны жіберген блоктан қосылым жасаңыз немесе widget_quiz_finished шарты бар Бастапқы шарт блогын пайдаланыңыз.
Мысал жауап:
Сіздің нәтижеңіз: #{widget_quiz_score} / #{widget_quiz_total} дұрыс жауап

Күнтізбе — calendar
Тұтынушылар күнді, содан кейін уақыт аралығын таңдай алатын айлық күнтізбені көрсетеді.
Ол «Артқа» және «Келесі» навигациясын қоса алғанда, күн мен уақыт түймелерінің бірнеше бетін алмастырады.

Күнтізбе үш режимді қолдайды.
Теңшелетін күндер мен уақыттар
Қолжетімді уақыттар әрқашан slots параметрі арқылы беріледі.
Әр күні бірдей уақыт аралықтары — уақыттар тізімін және күн ауқымын беріңіз:
p = {}
p["title"] = "Күн мен уақытты таңдаңыз"
p["name"] = "Кеңес"
p["days"] = 10
p["slots"] = ["10:00", "12:00", "15:00"]
w = tg_send_widget(platform_id, "calendar", p, "Күн мен уақытты таңдаңыз")
Нақты күндер үшін әртүрлі уақыт аралықтары — күндерді уақыт тізімдеріне салыстыратын сөздік беріңіз. Қолжетімді күндер сөздік кілттерінен алынады:
p = {}
p["slots"] = {"20.11.2026": ["10:00", "12:00"], "21.11.2026": ["15:00"]}
w = tg_send_widget(platform_id, "calendar", p, "Күн мен уақытты таңдаңыз")
| Параметр | Сипаттама |
|---|---|
slots |
Қолжетімді уақыттар, тізім немесе күн бойынша топталған сөздік ретінде |
days |
Бүгіннен бастап қолжетімді күндер саны |
date_from, date_to
|
Немесе `"DD.MM.YYYY"" форматындағы күн ауқымының шекаралары |
dates |
Немесе нақты күндер тізімі |
weekdays_off |
Қолжетімсіз апта күндері: 1 = дүйсенбі, 7 = жексенбі |
title |
Күнтізбе торының астында көрсетілетін кеңес |
name |
Таңдалатын нысанның немесе қызметтің атауы; таңдаудан кейін көрсетіледі |
change |
Таңдаудан кейін «Басқа уақытты таңдау» түймесін көрсету үшін 1 мәніне орнатыңыз |
callback |
widget_calendar_selected орнына теңшелетін кері шақыру мәтіні |
Тек қана күн
Егер тұтынушыға тек күнді таңдау қажет болса, slots параметрін бермеңіз.
p = {}
p["days"] = 45
p["weekdays_off"] = [7]
w = tg_send_widget(platform_id, "calendar", p, "Күнді таңдаңыз")
Онлайн брондау
Филиал мен қызметті көрсетіңіз, сонда күнтізбе Қызметтер модулінен қолжетімді күндер мен уақыт ұяшықтарын автоматты түрде алады.
cal = {}
cal["company_id"] = comp_id
cal["service_ids"] = serv_id
cal["days_limit"] = 30
cal["name"] = serv_title
w = tg_send_widget(platform_id, "calendar", cal, serv_title)
| Параметр | Сипаттама |
|---|---|
company_id |
Филиал идентификаторы |
service_ids |
Қызмет немесе қызметтер тізімі |
employee_id |
Қызметкер идентификаторы; егер көрсетілмесе, кез келген қолжетімді қызметкер пайдаланылады |
days_limit |
Қолжетімділікті іздеу үшін алдағы күндер саны. Әдепкі: 14 |
people_count |
Топтық қызмет үшін қажетті орындар саны |
auto_booking |
Платформа брондауды автоматты түрде жасауы үшін 1 мәнін орнатыңыз |
Бұл параметрлер get_dates_for_booking және get_slots_for_booking функцияларында қолданылатындармен бірдей.
Бот ағыны не қабылдайды
Жеке күн таңдаулары сөйлесуге жіберілмейді.
Тұтынушы уақыт ұяшығын немесе күнтізбеде уақыт ұяшықтары болмаса, күнді таңдағанда, бот widget_calendar_selected кері шақыруын алады және келесі айнымалылар толтырылады:
| Айнымалы | Мән |
|---|---|
widget_date |
DD.MM.YYYY форматындағы таңдалған күн |
widget_time |
HH:MM форматындағы таңдалған уақыт; тек күн ғана бар күнтізбелер үшін бос |
widget_message_id |
Виджеті бар хабарламаның идентификаторы |

Күн мен уақыт форматтары create_booking және modify_booking_time функциялары қабылдайтындармен бірдей.
Күнтізбе арқылы онлайн брондау: толық мысал
Виджет күн таңдауды, уақыт ұяшықтарын және навигацияны өңдейді, бұл қажетті бот блоктарының санын азайтады.
1-блок. Қызметті таңдау
"Қызметке жазылу" шартымен Бастапқы шарт блогын пайдаланыңыз.
Жауап: "Қызметті таңдаңыз:"
Түймелер өрісін #{srv_buttons} мәніне орнатыңыз.
comp_id = 8
srv_data = get_services_for_booking(comp_id)
srv_kb = tools_make_button_str_checker(srv_data, 'title', 1)
srv_buttons = srv_kb['buttons']
srv_checker = srv_kb['checker']
2-блок. Күнтізбе
Жауап: #{none}.
1-блокты 2-блокқа #{srv_checker} шартымен қосыңыз.
serv_id = tools_check_user_input(srv_data, question, 'title', 'id')
serv_title = tools_check_user_input(srv_data, question, 'title', 'title')
cal = {}
cal["company_id"] = comp_id
cal["service_ids"] = serv_id
cal["days_limit"] = 30
cal["name"] = serv_title
cal_sent = tg_send_widget(platform_id, "calendar", cal, serv_title)
3-блок. Брондауды жасау
Жауап: #{none}.
2-блокты 3-блокқа widget_calendar_selected шартымен Дәл сәйкестік режимінде қосыңыз.
booking_date = widget_date
booking_time = widget_time
booking_result = create_booking(comp_id, serv_id, booking_date, booking_time, '')
booking_ok = booking_result['status']
4-блок. Брондау расталды
3-блокты 4-блокқа booking_ok == True айнымалы шартымен бір секундтық кідіріспен қосыңыз.
Жауап:
Сіздің жазылуыңыз расталды: #{serv_title}, #{booking_date} сағат #{booking_time}. Кездескенше!
5-блок. Уақыт ұяшығы енді қолжетімсіз
Жауап: #{none}.
3-блокты 5-блокқа booking_ok != True айнымалы шартымен бір секундтық кідіріспен қосыңыз.
Бұл блок бар күнтізбені қалпына келтіреді, бұл тұтынушыға басқа уақытты таңдауға мүмкіндік береді және қате туралы хабарламаны көрсетеді.
fix = {}
fix["reset"] = 1
fix["error"] = "Бұл уақыт ұяшығы жаңа ғана брондалды. Басқасын таңдаңыз."
t = tg_edit_widget_data(platform_id, widget_message_id, fix)
5-блоктан 3-блокқа widget_calendar_selected шартымен тағы бір қосылым қосыңыз.
Тұтынушы енді сол күнтізбеде басқа уақытты таңдай алады.
Қарапайым нұсқа: автоматты брондау
Күнтізбе параметрлеріне келесі параметрді қосыңыз:
cal["auto_booking"] = 1
Платформа тұтынушы уақытты таңдаған кезде брондауды бірден жасайды.
Егер таңдалған уақыт ұяшығы қолжетімсіз болса, виджет қатені тікелей көрсетеді.
widget_calendar_selected кері шақыруы тек сәтті брондаудан кейін, widget_booking_id айнымалысымен бірге жіберіледі.
Бұл тәсілде 3 және 5 блоктар қажет емес.
Егер алдын ала төлем немесе кездесуді растау алдында арнайы тексерулер қажет болса, бот ағыны арқылы брондауды (бірінші тәсіл) пайдаланыңыз.
Жіберілген виджетті жаңарту
Виджет деректерін жаңарту үшін келесі функцияны пайдаланыңыз:
tg_edit_widget_data(platform_id, message_id, data)
| Параметр | Сипаттама |
|---|---|
message_id |
Виджет хабарламасының идентификаторы, оны жіберу кезінде сақталған немесе өзара әрекеттесуден кейін widget_message_id мәнінен алынған |
data |
Жаңа мәндерді қамтитын сөздік |
Тек виджет деректерін жаңартуға болады. Жіберілген виджеттің орналасуын өзгерту мүмкін емес. Басқа орналасуды пайдалану үшін жаңа виджет жіберіңіз.
Жаңартулар қалай қолданылады:
-
Промокод, таймер, тапсырыс мәртебесі, FAQ: жаңа деректер алдыңғы жаңартуды толығымен ауыстырады. Жетіспейтін өрістер виджет жіберілген кезде берілген бастапқы мәндерге оралады. Сондықтан бастапқы деректерден ерекшеленетін әрбір өрісті қосыңыз, мысалы,
stepжәнеtextекеуін де. - Викторина және күнтізбе: жаңа деректер виджеттің ағымдағы күйіне қолданылады.
Арнайы жаңарту параметрлері:
| Үлгі | Деректер | Нәтиже |
|---|---|---|
promo |
{"used": 1} |
Промокодты пайдаланылған деп белгілейді |
timer |
{"seconds": 600} немесе {"until": "…"}
|
Кері санақты қайта бастайды |
calendar |
{"reset": 1, "error": "message"} |
Таңдауды тазартады, күнтізбені қайта ашады және хабарламаны көрсетеді |
Арнайы виджеттер
Дайын үлгілер жеткіліксіз болғанда — мысалы, сатып алу себеті бар өнім каталогы, жұлдызды бағалау немесе баға калькуляторы қажет болса — арнайы HTML виджетін жасауға болады.

Ол қалай жұмыс істейді
- Виджетті стильдері мен JavaScript кодын қамтитын бір HTML файлы ретінде жасаңыз.
- Кодты жобаның Файлдар бөлімінде
.txtфайлы ретінде сақтаңыз және файл URL мекенжайын көшіріңіз. Сақтау жүйесі.htmlфайлдарын қабылдамайды. - Бот блогы URL мекенжайын пайдаланып виджетті жібереді және оның бастапқы деректерін береді.
- Тұтынушы виджетпен өзара әрекеттескенде, бот виджет кодында анықталған мәтінді қамтитын кері шақыруды алады.
- Өңдеуші блок жаңа деректерді есептейді және оны виджетке қайта жібереді, ол өз интерфейсін жаңартады.
Арнайы виджетті жіберу
tg_send_widget_file(platform_id, url, data, caption)
Мысал:
st = {}
st["rating"] = 0
w = tg_send_widget_file(platform_id, "https://files.mavibot.ai/…/rating.txt", st, "Тапсырысыңызды бағалаңыз — жұлдызды түртіңіз")
data параметрі виджетті көрсету үшін пайдаланылатын бастапқы күйді қамтитын сөздік болып табылады.
Өзара әрекеттесулерді өңдеу
Тұтынушы арнайы виджетпен өзара әрекеттескенде, бот кері шақыруды алады.
Келесі айнымалылар да толтырылады:
| Айнымалы | Мән |
|---|---|
widget_data |
Виджет жіберген сұрау мәтіні, мысалы, rate:4
|
widget_message_id |
Өзара әрекеттесу болған хабарламаның идентификаторы |
widget_query_id |
Сұрау идентификаторы |
Триггер блогын пайдаланып өңдеушіні жасаңыз және Тек кері шақыруда триггер параметрін қосыңыз.
Шарт виджет сұрау мәтініне сәйкес келуі керек.
Бұл блок түрі тұтынушының бот ағынындағы ағымдағы орнына қарамастан жұмыс істейді және оларды ағымдағы қадамнан алып кетпейді.
Маңызды: Арнайы виджет өзара әрекеттесулерін өңдеу үшін Бастапқы шарт блогын пайдаланбаңыз. Виджет чатта қалады және тұтынушы онымен кез келген уақытта өзара әрекеттесе алады — тіпті сауалнаманы толтыру, кездесуге жазылу немесе төлем жасау кезінде де. Бастапқы шарт блогы тұтынушыны өңдеушіге қайта бағыттайды және олардың ағымдағы қадамын үзеді.
Бағалау өңдеушісінің мысалы:
Шарт (тұрақты өрнек):
^rate:[1-5]$
Калькулятор:
local a = splitter(widget_data, ":")
client.widget_rating = a[1]
st = {}
st["rating"] = client.widget_rating
t = tg_edit_widget_data(platform_id, widget_message_id, st)
Арнайы виджет деректері жаңарту кезінде толығымен ауыстырылады. Тек өзгерген өрісті емес, әрқашан толық күйді жіберіңіз.
Деректер көлемінің шегі 1024 байт.
Үлкен, статикалық деректер жиынтығын (мысалы, өнім каталогтарын) виджет кодының ішінде сақтаңыз және виджет деректері арқылы тек өзгеретін мәндерді жіберіңіз.
Виджет сұрауына жауап беру
Әдепкі бойынша, виджет бірден бос жауап алады, ал жаңартылған деректер бөлек виджет жаңартуы арқылы келеді.
Егер виджет өз сұрауына тікелей жауап алуы қажет болса, сұрау мәтіні ? белгісінен басталуы керек, мысалы:
?price
Бұл жағдайда өңдеуші блок 15 секунд ішінде келесі функцияны шақыруы керек:
tg_answer_widget_query(data)
Әйтпесе, виджет уақыт аяқталды қатесін көрсетеді.
Жауап көлемінің шегі 1024 байт.
Кодқа қойылатын талаптар
-
Бір файл: стильдерді
<style>ішіне, ал JavaScript-ті<script>ішіне қосыңыз. Сыртқы скрипттер, стильдер, қаріптер және суреттер жүктеле алмайды. Суреттерdata:URL немесе SVG көмегімен ендірілуі керек. - Көлем шектеулері: қысу алдында максимум 32 КБ және қысудан кейін 4 КБ.
-
Енгізу өрістері жоқ:
input,select,textareaжәнеformэлементтері жойылады. Интерактивті басқару элементтері ретінде тек<button>элементтері қолдау көрсетіледі. -
Желі сұраулары жоқ:
fetchжәне осыған ұқсас API жұмыс істемейді. Ботпен байланысудың жалғыз жолы —TelegramWidget.request("text"), сұрау көлемі 1–64 байт. - Ішкі айналдыру жоқ: виджеттің максималды биіктігі 600 пиксель. Одан жоғары кез келген нәрсе қиылады. Карусель жасау үшін айналдыруды қолданудың орнына карталар қатарын жылжытыңыз.
-
Элементтерге қол жеткізу:
document.getElementByIdпайдаланыңыз. Элементтерге олардың ID негізінде жаһандық айнымалылар ретінде қол жеткізу жұмыс істемейді. -
Telegram тақырыбы: виджет ашық және қараңғы тақырыптарда дұрыс көрінуі үшін
var(--tg-theme-text-color)сияқты Telegram тақырып айнымалыларын пайдаланыңыз. -
Виджет деректері: деректерді
TelegramWidget.chatDataмәнінен оқыңыз жәнеchatDataChangedоқиғасы болғанда виджетті қайта сызыңыз. -
Сұраулар:
requestфункциясын тікелей пайдаланушы өзара әрекеттесу өңдеушісінің ішінде шақырыңыз. Бір өзара әрекеттесуге тек бір сұрауға рұқсат етіледі.
Виджет кодтау қателерін көрсетпейді. Қолдау көрсетілмейтін элементтер үнсіз жойылады, ал JavaScript қатесі бос виджетке әкелуі мүмкін. Өзгерістер енгізгеннен кейін виджетті әрқашан Telegram-да сынап көріңіз.
Ең қарапайым арнайы виджет мысалы
Төмендегі мысал өнімді, ботқа сұрау жіберетін түймені және виджет деректеріне негізделген себет санауышын көрсетеді.
<style>
body{margin:0;padding:14px}
.h{color:var(--tg-theme-hint-color);font-size:.85em}
button{width:100%;margin-top:8px}
</style>
<b>Маргарита · $10</b>
<div class="h" id="c"></div>
<button id="add">Себетке қосу</button>
<div class="h" id="e"></div>
<script>
var W=window.TelegramWidget,$=function(i){return document.getElementById(i)},busy=0;
function draw(){
var s={};
try{s=JSON.parse(W.chatData)||{}}catch(e){}
$('c').textContent='Себетте: '+(s.count||0)
}
$('add').onclick=function(){
if(busy)return;
busy=1;
$('e').textContent='';
W.request('cart_add').then(
function(){busy=0},
function(x){
busy=0;
$('e').textContent='Қате: '+x.code
}
)
};
W.onEvent('chatDataChanged',draw);
draw();
</script>
Mavi және Виджеттер
Mavi виджеттермен толық бот ағындарын автоматты түрде жасай алады.
Қажет нәрсені қарапайым тілмен сипаттаңыз.
Мысалы:
- «Тұтынушы 'order' жібергенде, үш кезеңнен тұратын тапсырыс күйі виджетін көрсетіңіз. Олар 'ready' жібергенде, тапсырысты екінші кезеңге жылжытыңыз.»
- «Қызметті брондау ағынын жасаңыз: тұтынушылар түймелер арқылы қызметті таңдайды, содан кейін күнтізбе виджеті арқылы күн мен уақытты таңдайды.»
- «Тапсырыстар үшін жұлдызды бағалау виджетін жасаңыз және таңдалған бағаны клиент айнымалысына сақтаңыз.»
Mavi дайын шаблондарды автоматты түрде конфигурациялайды.
Арнайы виджеттер үшін Mavi кодты жазады және тексереді, виджет файлын жобаға сақтайды және виджетті жіберу мен тұтынушы әрекеттерін өңдеу үшін қажетті блоктарды жасайды.
Анықтама
Функциялар
| Функция | Сипаттама |
|---|---|
tg_send_widget(platform_id, template, params, caption) |
Дайын виджет шаблонын жібереді |
tg_send_widget_file(platform_id, url, data, caption) |
Файлдан арнайы виджет жібереді |
tg_edit_widget_data(platform_id, message_id, data) |
Бар виджеттегі деректерді жаңартады |
tg_answer_widget_query(data) |
? белгісімен басталатын арнайы виджет сұрауына жауап береді |
Қоңыраулар мен Айнымалылар
| Оқиға | Қоңырау | Айнымалылар |
|---|---|---|
| Викторина аяқталды | widget_quiz_finished |
widget_quiz_score, widget_quiz_total, widget_quiz_answers
|
| Күнтізбеде күн мен уақыт таңдалды | widget_calendar_selected |
widget_date, widget_time; сонымен қатар auto_booking қосылғанда widget_booking_id
|
| Арнайы виджетпен әрекеттесу | Виджет кодында анықталған сұрау мәтіні |
widget_data, widget_message_id, widget_query_id
|
Егер ботыңызда бірнеше викторина немесе күнтізбе болса, оларды бот ағынының шарттарында ажырату үшін әр виджетке callback параметрі арқылы бірегей қоңырау тағайындаңыз.
Шектеулер
- Виджеттер тек тұтынушы мен бот арасындағы жеке Telegram чаттарында жұмыс істейді.
- Әр тұтынушы үшін тек соңғы бес викторина мен күнтізбе сақталады. Ескілері әрекеттесуді тоқтатады.
- Бот ағынындағы барлық клиент айнымалыларын тазалау бұрын жіберілген викториналар мен күнтізбелерді өшіреді.
- Виджет деректері 1024 байтпен шектелген.
- Арнайы виджеттерден келетін сұраулар 64 байтпен шектелген.
-
tg_answer_widget_queryқажет ететін арнайы виджет сұрауларына 15 секунд ішінде жауап беру керек.
Ақаулықтарды жою
| Мәселе | Себеп / Шешім |
|---|---|
Виджет жіберілмеді және айнымалыда Unknown parameter… бар |
Шаблон қолдау көрсетілмейтін параметр алды. Қате хабары рұқсат етілген параметрлерді тізімдейді |
| Күнтізбе күн таңдаудан кейін уақыт ұяшықтарын көрсетпей тоқтайды |
slots параметрі берілмеді |
| Виджетпен әрекеттесуден кейін бот ағымдағы қадамдағы түймелерге жауап беруді тоқтатады | Әрекеттесу өңдеушісі Start Condition блогын пайдаланады. Оны Condition бар Non-State Block-пен ауыстырыңыз |
| Арнайы виджет бос көрінеді | Виджет кодында қате бар. Жиі кездесетін себеп — document.getElementById қолданбай элементке ID арқылы қатынау |
| Telegram «Unsupported message» көрсетеді | Тұтынушы Telegram-ның ескірген нұсқасын пайдаланып жатыр |
Bad Request: chat not found |
Виджет Telegram-нан тыс жерден, мысалы, ботты тексеру терезесінен жіберілді |