Створення безпечного ШІ-асистента викладача на базі Google Workspace
Посилання також у чаті ↓ · ai-assistant-teachers.ordynski.com
Українські вчителі: ChatGPT 75%, Gemini 51% — з ним ми й працюємо.
Інститут цифровізації освіти НАПН (4 106 учителів, серп.–вер. 2025) · HEPI 2025 (1 041 студент) · Gallup × Walton 2025 · Gallup 2026 (2 069 учителів)
Бот — звичайний контакт у месенджері, який уже є в усіх.
Викладач пише боту в Telegram
Telegram сам надсилає повідомлення на наш вебхук
POST …/execБот відповідає в той самий чат
sendMessageАудиторія вже там: без застосунку, сайту й логіна. Бот — просто ще один контакт.
Telegram Bots FAQ (core.telegram.org/bots/faq) · Рейтинг × EUAM, 2 000 респондентів, 2025
JavaScript у хмарі Google — без сервера й без встановлення.
Приходить повідомлення від Telegram
doPost(e)Google запускає скрипт лише на цей час
Читає базу знань і розклад з Таблиці
SpreadsheetAppБезкоштовно з особистим Gmail. «Розгорнути → Вебдодаток» дає постійну адресу …/exec.
Apps Script quotas, consumer accounts (developers.google.com/apps-script/guides/services/quotas)
Сейф проєкту: значення, яких не видно в коді.
Токен бота й ключ Gemini кладемо у Властивості
Код читає їх лише під час роботи
prop_('GEMINI_API_KEY')Код можна показувати будь-кому
Скриншот, GitHub, студенти — секрети не потрапляють нікуди, бо їх немає в коді.
Apps Script quotas, consumer accounts (developers.google.com/apps-script/guides/services/quotas)
Модель ШІ від Google, яку викликаємо одним HTTP-запитом.
Збираємо SYSTEM_PROMPT + питання + розклад
Один запит до моделі, ключ — у заголовку
x-goog-api-keyОтримуємо текст відповіді
generateContentТой самий акаунт Google. На безкоштовному рівні запити можуть читати рецензенти — тому без персональних даних.
Gemini API rate limits (ai.google.dev/gemini-api/docs/rate-limits) · Gemini API Additional Terms (ai.google.dev/terms)
Одна Таблиця — і база знань, і розклад. Викладач редагує її без коду.
Аркуш «База знань»: тема → інформація
Аркуш «Розклад» для команди /rozklad
Окремий анонімний журнал: хеш замість id
Таблиці вміють усі: змінили дедлайн у рядку — бот відповідає вже по-новому. Лише загальні правила курсу, без персональних даних.
Коротка пам’ять і «черга» для одночасних запитів.
Telegram надіслав повтор? Пропускаємо
update_idРахуємо повідомлення кожної людини
5 / 10 хвОдночасні запити — по черзі
LockServiceБез них бот відповідав би двічі, а безкоштовний ліміт Gemini закінчився б за хвилини.
Без сервера: Google запускає doPost, лише коли прийшло повідомлення
Закон України «Про захист персональних даних».
Gemini API Additional Terms of Service · ai.google.dev/terms
const KEY = 'AIza…';const key = prop_('GEMINI_API_KEY');function doPost(e) {
// 1. секретний ключ в URL
if (e.parameter.k !== prop_('WEBHOOK_KEY'))
return ok_();
const update = JSON.parse(e.postData.contents);
// 2. повтори пропускаємо
if (seen_(update.update_id)) return ok_();
handleMessage_(update.message);
return ok_();
}const res = UrlFetchApp.fetch(url, {
method: 'post',
headers: { 'x-goog-api-key': prop_('GEMINI_API_KEY') },
payload: JSON.stringify({
systemInstruction: { parts: [{ text: SYSTEM_PROMPT }] },
contents: [{ role: 'user', parts: [{ text: question }] }],
}),
});
if (res.getResponseCode() === 429)
return 'Зараз мені пишуть дуже багато людей…';'Ти — асистент викладача
інформатики. Пояснюй код
крок за кроком, коротко.''Ти — асистент викладача
історії. Пояснюй події через
причини й наслідки і став
одне питання для перевірки.'Решта коду — однакова для будь-якого предмета.
| Тема | Інформація |
|---|---|
| Лабораторні й дедлайни | ЛР1 — до 15 вересня; ЛР2 — до 29 вересня; ЛР3 Цикли — до 13 жовтня… |
| Оцінювання | ЛР по 10 балів, дві модульні по 15, іспит 20; запізнення −2 бали/тиждень |
| Перездача | Кожну ЛР — один раз до кінця модуля |
| ШІ на навчанні | Можна для пояснень; код пишете самі й пояснюєте на захисті |
Аркуш «База знань» у вашій Google Таблиці. Змінили рядок — за ~5 хв бот відповідає по-новому. Без персональних даних студентів.
/rozkladfor i in range(3): print(i*i)/rozklad середа5 повідомлень за 10 хв · без персональних даних
Пишіть у чат, що бот відповів найцікавішого
Олександр Ординський · Senior Full-Stack розробник · 10 років у розробці