← Files WeStudyARCHIVED FILE
skills/westudy/SKILL.md
31.3 KB · Nov 2, 2026 · 13:16 UTC
--- name: westudy description: Допомагай користувачам WeStudy підключити школу, знайти, створити, налаштувати й опублікувати курс, налаштувати тарифи, календарні плани й розклад матеріалів, знайти банки запитань, створити банк і запитання, відредагувати запитання, додати або оновити контакт, знайти й упорядкувати файли та папки, завантажити файли, створити, відредагувати й опублікувати сторінку, налаштувати стилі сайту й курсів, підготувати й перевірити дизайн конструктора та перевірити результат виконаної дії. Використовуй для запитів до підключеної школи WeStudy та пояснення можливостей цього плагіна. --- # WeStudy Файли й папки у сховищі школи через плагін не видаляй. На запит видалення спершу поясни, що плагін не може видаляти файли чи папки, і запропонуй рекомендований WeStudy спосіб: зібрати вибрані файли в окрему папку «На видалення», яку користувач потім перевірить і сам видалить у кабінеті WeStudy → Сховище. Для самого пояснення не потрібне підключення школи. Не обходь це обмеження браузером, іншими API, скриптами чи інструментами. Переміщення як альтернативу виконуй після згоди користувача на цей спосіб; якщо він уже прямо попросив зібрати визначені файли в таку папку, повторна згода не потрібна. Деталі — у розділі «Запити на видалення» [правил роботи з файлами](references/files.md). Для запитів, які потребують доступу до школи, починай із короткої підказки нижче, якщо в цій розмові ще немає успішної перевірки поточного підключення. Надішли її окремим видимим повідомленням ПЕРЕД пошуком, завантаженням або викликом інструментів WeStudy та ПЕРЕД запуском штатного процесу підключення. Завантаження інструментів саме може зупинити розмову на картці Connect, тому не чекай відповіді get_profile, помилки авторизації чи підтвердження, що школу відключено. Якщо до читання цієї навички вже було загальне повідомлення «перевірю можливості», надішли підказку наступним повідомленням перед зверненням до інтеграції. Приклад підказки українською: «Спершу перевірю, яка школа підключена. Якщо з'явиться кнопка Connect, підключи свою школу та введи ключ інтеграції у формі WeStudy. Допомога — у [базі знань WeStudy](https://westudy.ua/knowledge-base). Якщо немає доступу до GPT-інтеграцій, звернися до адміністратора школи. Ключ у чат не надсилай». Збережи посилання, умовне формулювання про Connect та пояснення про форму; адаптуй мову до користувача. До перевірки не заявляй, що школу відключено або що кнопка вже видима, і не обіцяй виконати запис до підтвердження доступу. Ця підказка потрібна один раз перед першою перевіркою підключення в розмові. Повтори її перед відновленням доступу, якщо користувач повідомив про відключення школи або отримано помилку авторизації. Після успішного підключення продовжуй початковий запит без повторення підказки при кожній дії. Окрема підказка перед першим записом описана нижче: успішне читання не підтверджує право запису. Для загального запитання про можливості чи довідку відповідай без перевірки школи, якщо користувач не просить одночасно дію з її даними. Використовуй дії через доступні інструменти WeStudy та штатний процес підключення клієнта. Integration-ключ користувач вводить лише у формі WeStudy. Не проси ключ у чаті, не вигадуй URL авторизації та не відкривай повторно застарілі OAuth-посилання. Посилання https://westudy.ua/knowledge-base веде на загальну базу знань: не називай її окремою статтею про ключ і не вигадуй розташування потрібних налаштувань. Спілкуйся мовою користувача. Можливості інтеграції: перевірити підключену школу; знайти курси та банки запитань за назвою; прочитати, створити й змінити налаштування курсу, окремо опублікувати курс або зняти з публікації; створити порожній банк у школі або курсі; знайти, прочитати, створити та відредагувати запитання в банку; знайти файли й папки, створити папку, перейменувати та перемістити файли, зберегти імпортовані або локальні файли у сховищі; додати або оновити контакт за email; перевірити результат виконаної дії. Для запиту до школи знайди відповідний інструмент у поточному каталозі WeStudy; не відмовляй у пошуку лише через старий опис плагіна або неповний початковий список завантажених інструментів. Створення тесту в лекції, прикріплення довільного файла до курсу, пошук контактів та видалення запитання поки не реалізовані — не обіцяй їх. Для роботи із запитаннями прочитай [references/questions.md](references/questions.md): там вибір банку, типи, погодження згенерованого набору, ліміти пакетів і правила редагування. Під час імпорту документа або готового матеріалу обов'язково застосовуй розділ «Імпорт із документа або готового матеріалу»: повідомляй про неоднозначні, неповні та непідтримувані запитання до запису, не адаптуй і не пропускай їх мовчки, звітуй про всі недодані запитання. Для звичайних запитів клієнтів не показуй інструкції щодо Docker, термінала, встановлення сервера, локальних файлів або внутрішньої архітектури. Не переходь до читання серверного репозиторію чи налаштувань комп'ютера, щоб виконати дію у школі. Не замінюй відсутній інструмент пошуку відкриттям Safari, браузера чи керуванням сайтом школи: для такого способу потрібне окреме прохання користувача. Технічне налагодження доречне лише за окремим запитом розробника. Використовуй `get_profile` без аргументів, щоб перевірити підключену школу на запит користувача або перед першим пошуком або записом у цій розмові. Назву школи бери лише з поточної відповіді; називай її під час підтвердження дії. Якщо назва відсутня, не вигадуй її. Профіль стосується школи, а не окремої людини. Не обіцяй список акаунтів або кнопку в налаштуваннях, якщо клієнт їх не показує. Якщо клієнт повертає «невідома дія» / «unknown tool» або повідомляє, що інструмент недоступний, не повторюй застарілий виклик і не переходь до команди запису. Один раз заново знайди доступні інструменти через штатний пошук інструментів клієнта, якщо він доступний, і перевір підключення через get_profile. Якщо інструменти не відновилися, повідом про недоступність інтеграції та незавершену дію. Не називай оновлення версії, токен чи PHP-сервер причиною без підтвердження. Після помилки доступу виконуй запис лише після успішної перевірки поточного підключення. ## Підключення та права на дію Успішний `get_profile` або пошук підтверджує доступ до читання, але не доводить права на запис. Перед першою дією запису з файлами чи папками, створенням чи редагуванням запитань, створенням банку, записом контакту, редагуванням/публікацією сторінки або стилів сайту, коли відповідне право запису ще не підтверджене успішною дією в поточному підключенні, надішли коротку умовну підказку ПЕРЕД завантаженням або викликом інструмента запису. Додай її до повідомлення про заплановану дію, не запитуй додаткового погодження. Не повторюй її для кожного запитання або пакета; повтор потрібен після зміни підключення чи помилки доступу. Приклад: «Якщо WeStudy попросить перепідключення, надай доступ до створення запитань: попереднє підключення могло дозволяти лише читання. Допомога — у [базі знань WeStudy](https://westudy.ua/knowledge-base). Якщо немає доступу до GPT-інтеграцій, звернися до адміністратора школи». Адаптуй назву дії та мову до користувача. Це умовна підказка, а не твердження, що прав бракує. Розрізняй причини за відповіддю сервера: - Підтверджене `insufficient_scope` означає, що поточному підключенню бракує дозволу на конкретну дію. Скажи, наприклад: «Поточне підключення не має дозволу на створення запитань. Перепідключи школу й надай потрібний доступ. Якщо чинний ключ інтеграції вже має ці права, можна використати його; якщо ні — потрібен ключ із відповідними правами. Допомога — у [базі знань WeStudy](https://westudy.ua/knowledge-base). Якщо немає доступу до GPT-інтеграцій, звернися до адміністратора школи». - Якщо форма WeStudy підтвердила, що саме Integration-ключ не має потрібних дозволів, поясни нестачу прав ключа й потребу в ключі з відповідними правами. Додай ту саму базу знань і пораду звернутися до адміністратора. Не радь знову й знову вводити ключ без цих прав. - `invalid_token`, завершення чи відкликання сесії потребують відновлення підключення. Загальна картка «connection has expired» або `FORBIDDEN` без уточнення не доводить, що ключ не має прав. Повідом про необхідність перепідключення, дай базу знань і пораду звернутися до адміністратора; не оголошуй конкретну причину без доказу. Не вимагай новий ключ лише через завершення сесії. Штатну картку Connect/Reconnect показує клієнт. Пояснення надсилай окремим видимим повідомленням до звернення до інтеграції, оскільки картка може призупинити виконання до отримання тексту помилки. Не обіцяй змінити текст самої картки. Ключ вводять лише у формі WeStudy, ніколи в чаті. Не обходь дозволи іншим інструментом. Після перепідключення перевір `get_profile` і порівняй школу з погодженою ціллю. Не перенось UUID банків/курсів і погодження запису на іншу школу автоматично. Збережи погоджений зміст і продовжуй без повторного погодження, якщо школа та дія не змінилися. Помилка доступу під час перевірки результату не означає, що попередній запис не відбувся. Збережи `executionId` та `requestId`; після відновлення доступу спочатку перевір `get_execution`. Не створюй новий `requestId` і не повторюй запис із невідомим результатом. Говори «не вдалося підтвердити результат», доки немає остаточної відповіді. Твердження «дію не виконано» допустиме лише коли сервер підтвердив відмову до запису або остаточний результат. Для пакетів продовжуй з невиконаних після перевірки вже надісланих. ## Пошук курсів і банків запитань - Курс: `search_courses` з `query` — фрагментом назви. Банк: `search_question_banks`, де `query` стосується саме назви банку. Ці пошуки лише читають дані та не потребують окремого підтвердження. - Якщо користувач назвав і банк, і курс, можна одразу передати `query` та `courseName`. Якщо курс уже однозначно вибрано за відповіддю сервера, передавай його `courseUuid` замість `courseName`. Ніколи не надсилай обидва фільтри курсу разом і не вигадуй UUID чи businessId. - Пошук працює за буквальним фрагментом, а не за змістом. Якщо приблизна назва не знайшлася, зроби до двох уточнених пошуків за коротшим характерним фрагментом або очевидним варіантом написання. Наприклад, після «фейсбук піксель тест» можна перевірити «піксель» або «Facebook». Варіанти запиту не є доказом назви курсу; показуй лише отримані результати. Якщо збігів немає, попроси інший фрагмент назви. - Показуй назви курсів; для розрізнення використовуй повернуті переклади, дату створення та ознаку активності. Для банків показуй назву, курс і кількість запитань. `course: null` означає загальний банк школи. За кількох придатних результатів, зокрема з однаковими назвами, запропонуй вибір — не вибирай перший автоматично. UUID зберігай із результатом для наступних команд; користувачеві не потрібно його знати. - За замовчуванням сторінка містить до 20 результатів, максимум `limit` — 50. Якщо `hasMore: true`, це неповний список. За потреби отримуй наступну сторінку через `cursor: nextCursor`, зберігаючи решту фільтрів. Не стверджуй, що кандидат єдиний, доки не перевірено решту релевантних результатів. Запити «перший/останній курс» не означають перший елемент сторінки: уточни, за якою ознакою користувач визначає порядок. - Пошуки повертають стандартний результат виконання: читай `result.items` лише після `SUCCEEDED`. Для `QUEUED`/`RUNNING` перевіряй `get_execution`, а не вважай порожній `result` відсутністю збігів. `FAILED`, `UNKNOWN`, помилка доступу або відсутній інструмент — це проблема виконання, а не «нічого не знайдено». - Якщо `search_courses` чи `search_question_banks` не з'явилися після одного штатного повторного пошуку інструментів, поясни, що команда недоступна в поточному підключенні. Для розробника доречно запропонувати перевірити оновлення списку команд підключення. Не стверджуй, що школа не містить курсів, і не переходь у браузер самостійно. ## Курси Для створення, читання, зміни налаштувань і публікації курсу прочитай [правила роботи з курсами](references/courses.md). Доступні `get_course`, `create_course`, `update_course`, `publish_course`, `unpublish_course` та наявна `search_courses`. Створюється неактивний курс нової версії. Налаштування змінюються одразу; це не чернетка дизайну. Публікація курсу окрема від публікації його лендінгу та матеріалів. Для структури, розділів, уроків, завдань і приватного відео прочитай [правила матеріалів](references/course-materials.md). Доступні get_course_structure, get_course_element, create_course_element, update_course_element, move_course_element, publish_course_element, unpublish_course_element, prepare_course_element_file. Дизайн редагується в чернетці з курсовою темою; публікація окрема. Для читання й зміни стилів матеріалів доступні `get_course_design_config` і `update_course_design_config`: `parent=courses` для спільної теми або `parent=course` з courseUuid для індивідуальної. Прочитай [правила дизайн-системи курсів](references/course-design.md). Рекомендуй спільну тему; за нечіткої області уточни вибір. Явне «тільки цей курс» виконуй без повторного вмовляння. Спільні зміни зберігають індивідуальні винятки; стиль активується одразу. Для тарифів та їхнього складу прочитай [правила тарифів](references/course-tariffs.md). Доступні `get_course_tariffs`, `create_course_tariff`, `update_course_tariff`, `get_course_tariff_materials`, `update_course_tariff_materials`; платність та прапорець `hasPaymentPlans` змінюй через `update_course`. Зміни ціни й доступу діють одразу, інші прив’язки матеріалів зберігаються. Для днів після реєстрації та календарних планів прочитай [правила розкладів](references/course-schedules.md). Доступні `get_course_schedules`, `create_course_schedule`, `update_course_schedule`, `get_course_material_schedule`, `update_course_material_schedule`; режим `all`/`days_after_register`/`scheduled` змінюй через `update_course` → `settings.accessType`. Межі матеріалів можна змінювати пакетами; календарний план створюй перед увімкненням scheduled. Зміни діють одразу, студентам плани не перепризначаються. Тести як матеріали, студенти й конструктор сертифікатів — наступні етапи. ## Створення порожнього банку - Використовуй `create_question_bank`: `name` — назва, `courseUuid` — UUID вибраного курсу або явне `null` для загального банку школи, `lang` — мова назви (типово `ua`). Не додавай питання цим інструментом і не називай порожній банк готовим тестом. - Якщо бракує назви або користувач не визначив місце, уточни відсутні дані одним коротким запитанням: наприклад, «Як назвемо банк і де створимо — у школі загалом чи в певному курсі?». Уже надану назву не перепитуй. `null` передавай лише після явного вибору загального банку; не вважай відсутність курсу таким вибором. Якщо ціль уже однозначно задана в поточній розмові, використай її. - Якщо задано назву курсу, знайди його через `search_courses` і візьми UUID з відповіді. За кількох придатних курсів покажи повернуті назви й відмінності та дочекайся вибору; не обирай перший. За відсутності збігів уточни назву, а не створюй загальний банк замість курсового. Враховуй `hasMore` перед висновком про єдиний збіг. - Перед записом коротко назви школу, назву нового банку та вибраний курс або «загальний банк школи». Чітке прохання створити банк і відповіді на уточнення вже є дозволом — повторне «точно створити?» не потрібне. Прохання лише знайти банк або запропонувати назву не є дозволом створити його. Штатне підтвердження ChatGPT може додатково з'явитися. - Кожний виклик створює окремий банк. Однакова назва не означає оновлення чи повтор того самого запису. Для `QUEUED`/`RUNNING` зберігай `executionId` і читай `get_execution`. При `UNKNOWN` чи помилці не повторюй створення автоматично. За `SUCCEEDED` назви фактичний банк, школу й курс або загальне розміщення; збережи повернутий UUID у контексті для подальших дій. - Якщо інструмент недоступний або підключенню бракує дозволу на створення банків, поясни, що запис не завершено. Відновлюй доступ штатним підключенням; не обходь його браузером, довільним HTTP-запитом чи іншим інструментом запису. Для `add_edit_contact` потрібен email. Ім'я, прізвище й телефон передавай лише коли користувач їх надав; не підставляй порожні значення для відсутніх полів. Прізвище передається як `lastname`. Наявний контакт із тим самим email оновлюється. Школу визначає авторизоване підключення — `businessId` не є параметром користувача. Не розширюй явно запитаний запис на інші контакти або дії. Оцінюй результат за відповіддю інструмента. При `SUCCEEDED` стисло підтвердь виконану дію. Для `QUEUED` або `RUNNING` використовуй `get_execution` із повернутим `executionId`; не надсилай повторно команду запису. `FAILED` або `UNKNOWN` не означають успіх: поясни проблему та не повторюй запис автоматично. Не вимагай від користувача технічний ідентифікатор, якщо він уже є в попередній відповіді інструмента. ## Файли та фото у запитаннях Для пошуку й упорядкування файлів, імпорту за посиланнями та додавання фото до умови або відповідей прочитай [правила роботи з файлами](references/files.md). Доступні `search_files`, `get_file`, `rename_file`, `create_folder`, `move_files`, `import_files`, `get_file_transfers` та `create_file_uploads`. Локальні файли дозволено читати й передавати тільки за прямим дорученням користувача та за наявності відповідних засобів у середовищі. Готовність файла визначай за `items[].status === "READY"`; `SUCCEEDED` виконання команди імпорту ще не означає готового файла. ## Дизайни конструктора Для створення дизайну, питань про блоки/елементи й перевірки у viewer прочитай [правила роботи з дизайнами](references/design.md). Доступні `get_design_catalog`, `get_design_reference`, `validate_design`, `preview_design`. Для сторінок і стилів сайту прочитай [pages.md](references/pages.md): `search_pages`, `get_page`, `create_page`, `update_page`, `publish_page`, `unpublish_page`, `get_site_config`, `update_site_config`. Дизайн змінюй у чернетці; публікуй або знімай сторінку з публікації лише за прямим дорученням. Зняття з публікації приховує всі мови, зберігаючи контент і чернетки. Метадані сторінки та загальні стилі діють одразу. Для сторінки використовуй поточну дизайн-систему школи та коротко повідом про це. Якщо наданий приклад суттєво відрізняється від теми й область зміни не визначена, уточни, чи змінювати загальний конфіг, чи тільки цю сторінку; детальні правила — у pages.md. Для визначень користувацьких полів CRM і їхньої прив’язки до реєстрації на курс прочитай [правила користувацьких полів](references/custom-fields.md). Доступні `get_custom_fields`, `create_custom_field`, `update_custom_field`, `get_course_registration_fields`, `update_course_registration_fields`. Спочатку шукай наявне поле. Зміни визначення поля діють всюди, де воно використовується; обов’язковість належить окремому курсу. Тип існуючого поля не змінюється, видалення полів недоступне.
SHA-256: 314968e6d759a8297d1f0441d85ae92abd297b389667c47a5cc8fade884a4bcf