Ваш особистий Telegram-асистент: Як за 15 хвилин створити бота для нотаток у Google Таблиці
Записувати витрати, ідеї чи короткі службові нотатки прямо в таблицю з телефону — це один із тих дрібних процесів, які майже всі ненавидять. Маленькі клітинки, незручний мобільний інтерфейс, ручне перемикання між колонками. У результаті облік відкладається “на потім”, а потім або забувається, або перетворюється на хаос.

Саме тут добре працює формат “бот-посередник”. Ви пишете повідомлення так, ніби кидаєте його другові в Telegram, а далі система сама витягує сенс, визначає категорію, суму і записує все в Google Таблицю. Для користувача це виглядає майже магічно: написали “Купив каву за 60 грн” — і запис уже в обліку. Але під капотом там не магія, а дуже приземлена автоматизація на Node.js, Telegram Bot API, OpenAI і Google Sheets API.
У чому тут реальна користь, а не просто “вау-ефект”
Цінність такого бота не в тому, що він “розмовляє з вами людською мовою”. Це приємний інтерфейс, але бізнес-користь глибша. Ви знімаєте тертя між думкою й фіксацією даних. Не відкриваєте таблицю, не думаєте, в яку колонку що ставити, не губите дрібні витрати й ідеї.
Такий сценарій добре підходить для:
- обліку особистих і командних витрат;
- збору ідей для контенту;
- швидких операційних нотаток;
- фіксації дрібних покупок, задач і спостережень у полі.
Якщо вам уже близька логіка інтеграції Google Sheets з Telegram та Slack, цей бот — природне продовження тієї ж ідеї: месенджер стає людським інтерфейсом до таблиці.
Як працює “магія” насправді
Пайплайн тут дуже простий:
- Telegram-бот отримує текстове повідомлення.
- Node.js-сервіс передає текст у модель.
- ШІ повертає структурований JSON: категорію, суму, опис.
- Скрипт дописує новий рядок у Google Sheets.
- Бот відповідає користувачу, що запис збережено.
Тут важливий не сам факт використання LLM, а спосіб її застосування. Ми не просимо модель “подумати красиво”. Ми ставимо вузьке завдання: повернути чисту структуру для таблиці. Саме тому такий підхід працює стабільніше й краще масштабується на реальні мікропроцеси.
Створили: BotFather, таблицю і доступ до Sheets API

Перший крок — створити бота через @BotFather і отримати токен. Другий — підготувати Google Таблицю, куди будуть летіти дані. Третій — увімкнути Google Sheets API і видати застосунку доступ.
Для тестового запуску це простіше, ніж здається. Але тут є одна чесна ремарка: Google quickstart для Node.js використовує спрощену модель автентифікації, яку сама Google рекомендує саме для тестового середовища. Для продакшн-сценарію краще окремо продумати, як ви зберігаєте ключі, токени й доступ до таблиць.
Написали: простий Node.js-скрипт, який з’єднує Telegram, OpenAI і Sheets
Нижче — компактний приклад, який показує саму ідею. Він слухає повідомлення, просить модель повернути JSON і додає рядок у таблицю.
import TelegramBot from "node-telegram-bot-api";
import OpenAI from "openai";
import { google } from "googleapis";
const bot = new TelegramBot(process.env.TELEGRAM_BOT_TOKEN, { polling: true });
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const auth = new google.auth.GoogleAuth({
keyFile: "./credentials.json",
scopes: ["https://www.googleapis.com/auth/spreadsheets"],
});
const sheets = google.sheets({ version: "v4", auth });
bot.on("message", async (msg) => {
try {
const text = msg.text || "";
const aiResponse = await openai.chat.completions.create({
model: "gpt-4o-mini",
response_format: { type: "json_object" },
messages: [
{
role: "system",
content:
"Перетвори повідомлення на JSON: {category, amount, description}. Якщо суми немає — amount = 0. Не додавай пояснень поза JSON.",
},
{
role: "user",
content: text,
},
],
temperature: 0.1,
});
const data = JSON.parse(aiResponse.choices[0].message.content);
await sheets.spreadsheets.values.append({
spreadsheetId: process.env.SPREADSHEET_ID,
range: "Лист1!A:D",
valueInputOption: "USER_ENTERED",
requestBody: {
values: [[new Date().toISOString(), data.category, data.amount, data.description]],
},
});
await bot.sendMessage(msg.chat.id, "✅ Записано в таблицю!");
} catch (error) {
console.error(error);
await bot.sendMessage(msg.chat.id, "Сталася помилка. Перевір логіку парсингу або доступ до таблиці.");
}
});Будьте обачні, використовуючи код.
Що тут важливо пояснити словами
Сильна сторона цього сценарію — не в коді як такому, а в промпті. Саме від нього залежить, чи бот поверне придатну структуру, а не “розумну відповідь у вільній формі”. Вам треба чітко сказати моделі:
- яку роль вона виконує;
- який формат має повернути;
- що робити, якщо суми немає;
- що не можна додавати текст поза JSON.
Це вже схоже не на чат, а на мікросервіс, який виконує вузьку NLP-задачу. За тим самим принципом, до речі, працюють і складніші сценарії на кшталт мікросервісів на Node.js для Google Workspace, тільки там замість особистих нотаток можуть бути вебхуки, листи, документи чи дані з кількох систем одразу.
Приклад промпту, який краще тримає структуру
Щоб бот поводився передбачувано, системне повідомлення краще робити не “дружнім”, а операційним. Наприклад так:
Ти асистент для обліку коротких нотаток у Google Sheets.
Поверни тільки JSON без пояснень.
Формат:
{
"category": "string",
"amount": number,
"description": "string"
}
Правила:
- якщо суми немає, став 0;
- якщо це ідея, category = "Ідеї";
- якщо це витрата на їжу, category = "Харчування";
- description має бути коротким і зрозумілим.Після такого промпту фраза на кшталт Обід 250 грн уже перетворюється не просто на текст, а на нормальний запис для таблиці.
Чим це краще за ручний ввід у Google Sheets

Бо ви не працюєте з таблицею напряму. Ви працюєте з інтерфейсом, який для людини природний: коротке повідомлення в чаті. А таблиця лишається системою зберігання, а не місцем, де ви мучитеся з дрібною рутиною.
Особливо це відчутно, коли потрібно швидко зафіксувати дані “на ходу”: покупку, думку, тему для статті, коротку задачу. У цьому місці Telegram-бот виграє не у складної CRM, а саме у незручного мобільного вводу.
Де тут межа і коли вже потрібен інший рівень
Такий бот ідеальний як легкий особистий або командний асистент. Але якщо сценарій стає складнішим — з історією користувачів, кількома таблицями, ролями, чергами, багатокроковою логікою, перевіркою дублювань або обробкою вкладень — тоді варто переходити до більш системної архітектури.
У такому випадку Telegram стає лише одним із каналів, а справжня логіка вже живе в окремому сервісі. Якщо далі вам треба не просто записувати нотатки, а будувати складніший автоматизований контур, варто дивитися в бік сценаріїв на кшталт голосового Telegram-бота для нотаток у Google Sheets або навіть більш важких пайплайнів, де LLM не просто парсить текст, а приймає участь у класифікації й маршрутизації даних.
А як щодо хостингу

Хороша новина в тому, що для такого бота не потрібен “дорогий DevOps”. Для старту вистачає простого середовища, яке може тримати Node.js-процес, environment variables і вихід у мережу. Для тестів або невеликих особистих сценаріїв підійдуть і легкі хмарні платформи. Але тут важливо формулювати чесно: не кожен сервіс дає повноцінний безстроковий free-план для постійно працюючого бота. Наприклад, у Render є безкоштовні web services для тестування, а Railway зараз більше про trial-модель із кредитами, ніж про “вічно безкоштовний” бекенд.
Тобто правильна думка тут така: бот не вимагає важкого хостингу, але перед запуском краще перевірити актуальні умови платформи, а не покладатися на старі поради з форумів.
Практичний підсумок
Уся сила цього сценарію в автономності. Ви один раз налаштовуєте бота — і далі він працює на вас 24/7. Не просить відкрити таблицю. Не змушує боротися з мобільним інтерфейсом. Не змушує кожного разу “зібратися”, щоб щось занести в облік.
І це хороший приклад того, як корисна автоматизація починається не з великого бюджету, а з маленького вузького сценарію, де є постійне тертя. Ви просто пишете повідомлення, а система вже сама розкладає його по поличках.
Останні статті

Автоматизація погодження документів у Google Drive: статуси, версії та журнал рішень
Файли final , final new і final v7_approved не показують погоджений документ. Автоматизація погодження документів керує станами, версіями й рішеннями. Для workflow доста…

Тестування AI-автоматизацій: як перевіряти prompts і не ламати результат після оновлення
Зміна в prompt може покращити JSON і зламати зміст. Модель повертає category , але губить примітку клієнта. Тому тестування AI автоматизацій має перевіряти формат і бізн…

Автоматизація комерційних пропозицій: як зібрати Google Docs, PDF і Gmail в один процес
У комерційній пропозиції більша частина роботи повторюється: підставити компанію, контакт, послуги, ціну, строк дії та менеджера. Тому автоматизація комерційних пропозиц…

Google Apps Script security: токени, права доступу і безпечні webhook-автоматизації
Google Apps Script security часто згадують тільки після того, як автоматизація вже працює. Таблиця приймає заявки, Web App отримує webhook-и, Telegram-бот відправляє пов…

OpenAI API cost control: як рахувати токени, ставити ліміти і не отримати несподіваний рахунок
OpenAI API cost control - це не страх перед LLM, а нормальна фінансова гігієна автоматизації. Якщо модель допомагає обробляти заявки, писати summary, класифікувати зверн…

Надійність автоматизації бізнес-процесів: черги, повтори і idempotency без великої інфраструктури
Надійність автоматизації бізнес-процесів починається не з Kubernetes, RabbitMQ або складної cloud-архітектури. У малому бізнесі вона часто починається з простішого питан…