- Створіть продукт
- Завантажте файли в Telegram і зареєструйте їх
- Створіть кроки
- Налаштуйте, коли надсилається кожен крок
- Увімкніть продукт
Перед початком
Знадобиться:- API-токен — див. Авторизація.
- ID бота — зі Список ботів.
- Токен бота з @BotFather — лише для завантаження файлів зі скрипта. API його ніколи не повертає (лише
token_hint). - Ви запустили бота — Telegram-акаунт, прив’язаний до вашого користувача Zenedu (власника API-токена), має хоча б раз натиснути Start у боті. Ендпоінти файлів перевіряють файл, надсилаючи його в цей чат, і інакше повертають
409. - Для файлів понад 50 МБ — або
api_idіapi_hashз my.telegram.org, щоб завантажувати їх зі скрипта, або людина, яка один раз надішле кожен такий файл боту. Див. Завантажте файли.
PRODUCT_ID, OFFER_ID, …):
1. Створіть продукт
data.id як PRODUCT_ID. platform має бути bot — кроки є лише в продуктів для бота. Новий продукт вимкнений, ви ввімкнете його на кроці 5, коли контент буде готовий.
2. Завантажте файли
Вкладення кроків зберігаються на серверах Telegram. API не приймає завантаження файлів — він приймає Telegramfile_id файлу, завантаженого цим ботом. Файли прикріплюються до кроків у два етапи: завантажте файл у Telegram, потім зареєструйте його через Зареєструвати або запросити файл, щоб отримати ID для telegram_file_ids.
Завантажити файл у Telegram можна трьома способами. Обирайте за розміром файлу й тим, що у вас є:
Щоб відео відтворювалися як відео, вони мають бути в MPEG4 (
.mp4, наприклад відео H.264 зі звуком AAC). Інші формати Telegram може зберегти як document, і реєстрація такого файлу як video завершиться помилкою type_mismatch.
- Bot API (до 50 МБ)
- MTProto (до 2 ГБ)
- Надіслати боту (до 2 ГБ)
Надішліть файл через Bot API у свій чат із ботом, візьміть його Для зображень використовуйте
file_id і видаліть повідомлення:sendPhoto, для PDF та інших файлів — sendDocument. Для відео передавайте width, height, duration і supports_streaming, інакше Telegram може зберегти файл як document, і реєстрація його як video завершиться помилкою type_mismatch.У документів підписники бачать ім’я завантаженого файлу. Використовуйте зрозуміле ім’я: -F "document=@sheet.pdf;filename=Coloring page.pdf".file_id:
data.id кожного файлу, наприклад як VIDEO_FILE_ID і IMAGE_FILE_ID.
API перевіряє файл: надсилає його у ваш чат і одразу видаляє повідомлення, тому в чаті може щось промайнути.
Зареєстровані файли залишаються в Список Telegram-файлів, доки ви їх не прикріпите. Файли прив’язані до користувача: ви бачите й прикріплюєте лише свої. Непотрібний файл видаляється через Видалити Telegram-файл.
3. Створіть кроки
Кроки створюються через Створити крок продукту. Кожен новий крок додається в кінець продукту. Усі типи кроків:
Урок із відео та зображенням:
data.id (тут як LESSON_STEP_ID): ID кроків знадобляться для кнопок і sending_time.
Текст
text — це HTML, такий самий, як видає редактор в особистому кабінеті. <p> і <br> перетворюються на переноси рядків. Теги форматування передаються в Telegram: <b>/<strong>, <i>/<em>, <u>, <s>, <a href="…">, <code>, <pre>, <blockquote>, <tg-spoiler>. Інші теги видаляються, а їхній текст залишається — наприклад, списки (<ul>, <li>) перетворюються на звичайні рядки.
Обмеження довжини:
- 4096 символів — звичайне повідомлення.
- 1024 символи — коли в кроку є вкладення і
settings.attach_fileдорівнюєtrue(текст надсилається як підпис до медіа). Зattach_file: false(за замовчуванням) текст іде окремим повідомленням після медіа, і діє ліміт 4096. - 300 символів —
pollіquiz(запитання).
Вкладення
telegram_file_ids приймає ID з кроку 2. Кілька вкладень надсилаються разом альбомом. Переданий набір замінює вкладення кроку; щоб прибрати один файл, використовуйте Видалити вкладення кроку.
Запитання
subtype — одне з text, number, email, phone, name. Відповідь перевіряється за ним; за неправильного формату підписник отримує question_error_message і може спробувати ще раз. Якщо його не задати, використовується стандартне повідомлення мовою бота. save_profile: true зберігає відповідь name, email або phone у профіль підписника.
Опитування та квізи
- 2–12 варіантів, кожен до 100 символів.
- У
quizмає бути рівно одинis_correct: true, інакше422options. quiz_explanation(до 200 символів) показується після відповіді.- У
pollнемає правильної відповіді.
Завдання
task_autocheck: true— завдання приймається під час здачі, і курс одразу йде далі.task_autocheck: false— завдання чекає на перевірку в Список завдань; курс продовжиться після того, як ви приймете його.
4. Налаштуйте, коли надсилається кожен крок
У кожного кроку єsending_time. Крок планується, коли надіслано попередній; перший крок — коли підписник отримує доступ до продукту. Коли саме, вирішує sending_time.option:
Задайте його під час створення кроку або пізніше через Оновити час надсилання:
На підписника чекає лише
stop. З будь-яким іншим варіантом наступний крок планується одразу після надсилання попереднього — навіть якщо підписник ще не відповів на запитання й не здав завдання. Якщо в усіх кроків immediately, увесь курс прийде одразу.Чекати на підписника: stop
Що вважається дією на попередньому кроці:
У
message і lesson власної дії немає — додайте їм кнопку:
- створюйте кроки по одному: після кожного
messageчиlessonдодайте йому кнопку, потім створіть наступний крок зіstop; або - створіть усі кроки з
immediately, додайте кнопки, потім переключіть кроки 2…N наstopчерез Оновити час надсилання.
Через час: duration
delay_type — seconds, minutes, hours або days.
Після текстового question є один виняток: якщо підписник відповідає до закінчення затримки, відлік починається заново з моменту відповіді. Відповіді на опитування й квізи та здані завдання на затримку не впливають.
Щоб повідомлення не приходили вночі чи у вихідні, додайте вікно надсилання (delay_limit, див. нижче).
У заданий час доби: time
- З
delay_timeбереться лише час доби, дата ігнорується. Передавайте його зі зміщенням — див. Часовий пояс. delay_number— через скільки днів після надсилання попереднього кроку:0— того самого дня в цей час або наступного дня, якщо цей час уже минув;1— наступного дня; і так далі.delay_limit.weekdaysобмежує дні: у недозволений день крок переноситься на найближчий дозволений день у той самий час.time_fromіtime_toдля цього варіанта ігноруються.
time з delay_number: 1 на кожному уроці.
У дату: date
delay_at зі зміщенням — див. Часовий пояс.
- Під час збереження активного кроку
delay_atмає бути в майбутньому, інакше422sending_time— «Change the sending time to a date in the future». - Підписник, який дійшов до кроку після цієї дати, отримує його одразу. З
skip_past_date: trueкрок натомість пропускається, і підписник переходить до наступного.
Вікно надсилання: delay_limit
Обмежує duration певними годинами й днями (для time застосовуються лише дні):
time_fromіtime_to— хвилини від півночі в часовому поясі проєкту:540— це 09:00,1260— 21:00. Враховуються лише цілі години:570(09:30) працює як 09:00.time_fromбільше заtime_to— нічне вікно, наприклад1320–360(22:00–06:00).time_from, що дорівнюєtime_to, означає будь-який час доби; тоді діють лишеweekdays.weekdays:mon,tue,wed,thu,fri,sat,sun— хоча б один.- Якщо крок випадає за межі вікна, він переноситься на найближчий момент, коли вікно відкрите в дозволений день.
- Вікно «будь-який час у всі сім днів» рівнозначне відсутності вікна й не зберігається.
Не надсилати автоматично: never
Крок у курсі пропускається: підписники не отримують його після попереднього кроку, і наступний крок іде одразу за попереднім. Це значення за замовчуванням, якщо sending_time не передано.
Часовий пояс
Розклад рахується в часовому поясі вашого проєкту (в особистому кабінеті: Налаштування → Проєкт → Основне → Часовий пояс; якщо не задано — UTC): час доби дляtime, а також години й дні delay_limit.
delay_at і delay_time — значення дати й часу. Значення без зміщення читається як UTC, тому передавайте зміщення часового поясу проєкту — наприклад, 10:00:00+02:00 для 10:00 за Києвом узимку. Для time час доби залишається фіксованим у часовому поясі проєкту цілий рік.
5. Увімкніть продукт
Що потрібно пам’ятати
- Мова стандартних текстів. Кнопка завдання, її повідомлення та стандартні помилки запитань створюються мовою бота. Відповіді API й повідомлення про помилки завжди англійською.
- Файли прив’язані до користувача. Файли, зареєстровані з одним API-токеном, не можна прикріпити токеном іншого користувача.