Что такое Telegram бот и зачем он нужен?
Telegram боты – это сторонние приложения, работающие внутри Telegram. Они автоматизируют задачи, предоставляют информацию, развлекают или интегрируются с другими сервисами. Бот может рассылать уведомления, отвечать на вопросы, управлять задачами, собирать данные и многое другое. Например, бот может уведомлять о новых лидах в CRM системе, полученных из рекламной кампании, или отправлять ежедневный отчет по расходам в Google Ads.
Google Apps Script: краткий обзор и возможности
Google Apps Script (GAS) – это облачный язык сценариев, основанный на JavaScript, который позволяет автоматизировать задачи в Google Workspace (Sheets, Docs, Forms, Calendar, Gmail и т.д.). Он интегрируется с различными сервисами Google и сторонними API. GAS выполняется на серверах Google, что избавляет от необходимости развертывания собственных серверов. Это делает его удобным инструментом для создания небольших и средних приложений, включая Telegram ботов.
Преимущества использования Google Apps Script для создания Telegram ботов
Использование Google Apps Script для разработки Telegram ботов имеет ряд преимуществ:
Простота разработки: GAS использует JavaScript, знакомый многим разработчикам.
Бесплатный хостинг: Скрипты выполняются на серверах Google, не требуя затрат на инфраструктуру.
Интеграция с Google Workspace: Легко интегрировать бота с другими сервисами Google (Sheets, Docs, Calendar и т.д.).
Быстрая разработка и развертывание: Создание и запуск бота занимает минимум времени.
Подготовка к созданию бота
Создание нового скрипта в Google Apps Script
Откройте script.google.com.
Нажмите "Новый проект".
Дайте проекту осмысленное имя (например, "TelegramBot").
Получение токена Telegram бота у BotFather
В Telegram найдите пользователя @BotFather.
Начните с ним чат и отправьте команду /newbot.
Следуйте инструкциям BotFather, чтобы задать имя и имя пользователя для вашего бота.
BotFather предоставит вам токен бота. Сохраните его – он понадобится для связи с Telegram API.
Настройка доступа к Telegram API
В GAS не требуется дополнительная настройка доступа к Telegram API. Все запросы будут отправляться через функцию UrlFetchApp.fetch(). Необходимо лишь добавить токен бота в URL запроса.
Создание базового Telegram бота на Google Apps Script
Написание функции `doPost(e)` для обработки входящих сообщений
Функция doPost(e) обрабатывает входящие HTTP POST запросы, которые Telegram отправляет боту при получении нового сообщения. Аргумент e содержит информацию о запросе.
/**
* Обрабатывает входящие POST запросы от Telegram.
* @param {Object} e Объект события, содержащий данные запроса.
*/
function doPost(e: GoogleAppsScript.Events.DoPost) {
// Ваш код обработки сообщений будет здесь
}
Получение текста сообщения от пользователя
Данные о сообщении находятся в параметре e.postData.contents. Необходимо распарсить JSON, чтобы получить текст сообщения.
function doPost(e: GoogleAppsScript.Events.DoPost) {
const contents = JSON.parse(e.postData.contents);
const text = contents.message.text;
Logger.log(text);
}
Отправка ответного сообщения пользователю
Для отправки сообщения используйте метод sendMessage Telegram Bot API. Необходимо указать chat_id пользователя и текст сообщения.
/**
* Отправляет сообщение в Telegram.
* @param {string} text Текст сообщения.
* @param {string} chatId ID чата, куда нужно отправить сообщение.
*/
function sendMessage(text: string, chatId: string) {
const telegramUrl = 'https://api.telegram.org/bot' + YOUR_TELEGRAM_BOT_TOKEN + '/sendMessage';
const payload = {
'method': 'post',
'chat_id': chatId,
'text': text,
};
const options: GoogleAppsScript.URL_Fetch.URLFetchRequestOptions = {
'method': 'post',
'payload': payload,
};
UrlFetchApp.fetch(telegramUrl, options);
}
function doPost(e: GoogleAppsScript.Events.DoPost) {
const contents = JSON.parse(e.postData.contents);
const text = contents.message.text;
const chatId = contents.message.chat.id;
sendMessage('Вы написали: ' + text, chatId);
}Замените YOUR_TELEGRAM_BOT_TOKEN на ваш токен бота.
Развертывание скрипта как веб-приложения
В редакторе GAS выберите "Развернуть" -> "Новое развертывание".
Выберите тип "Веб-приложение".
В поле "Кто имеет доступ" выберите "Все пользователи".
Нажмите "Развернуть".
Скопируйте URL веб-приложения. Этот URL нужно указать в Telegram, чтобы бот получал сообщения.
В Telegram отправьте запрос к API, чтобы установить webhook для бота: https://api.telegram.org/bot<YOUR_TELEGRAM_BOT_TOKEN>/setWebhook?url=<YOUR_WEB_APP_URL>. Замените <YOUR_TELEGRAM_BOT_TOKEN> на токен вашего бота и <YOUR_WEB_APP_URL> на URL вашего веб-приложения. Убедитесь, что URL веб-приложения начинается с https://.
Развитие функциональности бота
Обработка команд (/start, /help и т.д.)
Чтобы обрабатывать команды, необходимо проверить, начинается ли текст сообщения с символа /. Если да, то выделить команду и выполнить соответствующие действия.
function doPost(e: GoogleAppsScript.Events.DoPost) {
const contents = JSON.parse(e.postData.contents);
const text = contents.message.text;
const chatId = contents.message.chat.id;
if (text.startsWith('/start')) {
sendMessage('Привет! Я ваш бот.', chatId);
} else if (text.startsWith('/help')) {
sendMessage('Я могу отвечать на ваши вопросы.', chatId);
} else {
sendMessage('Вы написали: ' + text, chatId);
}
}
Использование клавиатуры (InlineKeyboardMarkup и ReplyKeyboardMarkup)
InlineKeyboardMarkup позволяет добавлять кнопки непосредственно под сообщением. ReplyKeyboardMarkup заменяет стандартную клавиатуру пользователя.
Пример InlineKeyboardMarkup:
function sendMessageWithKeyboard(text: string, chatId: string) {
const telegramUrl = 'https://api.telegram.org/bot' + YOUR_TELEGRAM_BOT_TOKEN + '/sendMessage';
const payload = {
'method': 'post',
'chat_id': chatId,
'text': text,
'reply_markup': JSON.stringify({
'inline_keyboard': [
[{
'text': 'Кнопка 1',
'callback_data': 'button1'
}],
[{
'text': 'Кнопка 2',
'callback_data': 'button2'
}]
]
})
};
const options: GoogleAppsScript.URL_Fetch.URLFetchRequestOptions = {
'method': 'post',
'payload': payload,
};
UrlFetchApp.fetch(telegramUrl, options);
}
Отправка различных типов контента (фото, видео, документы)
Telegram Bot API предоставляет методы для отправки различных типов контента: sendPhoto, sendVideo, sendDocument и т.д. Необходимо указать URL файла или загрузить файл непосредственно в запросе.
Интеграция с Google Sheets и другими сервисами Google
GAS позволяет легко интегрировать бота с другими сервисами Google. Например, можно записывать данные из сообщений в Google Sheets или получать информацию из Google Calendar.
Пример записи данных в Google Sheets:
/**
* Записывает данные в Google Sheets.
* @param {string} data Данные для записи.
*/
function writeToSheet(data: string) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('Лист1');
sheet.appendRow([data, new Date()]);
}
function doPost(e: GoogleAppsScript.Events.DoPost) {
const contents = JSON.parse(e.postData.contents);
const text = contents.message.text;
const chatId = contents.message.chat.id;
writeToSheet(text);
sendMessage('Данные записаны в Google Sheets.', chatId);
}
Практические примеры и советы
Пример бота для уведомлений о событиях в Google Calendar
Бот может получать информацию о предстоящих событиях из Google Calendar и отправлять уведомления пользователю.
Пример бота для сбора обратной связи через Google Forms
Бот может отправлять ссылку на Google Form и собирать ответы пользователей.
Советы по отладке и оптимизации кода
Используйте Logger.log() для вывода информации в журнал выполнения скрипта.
Используйте отладчик GAS для пошагового выполнения кода.
Оптимизируйте код для уменьшения времени выполнения.
Безопасность и обработка ошибок
Не храните токен бота в открытом виде в коде. Используйте PropertiesService для хранения конфиденциальных данных.
Обрабатывайте возможные ошибки при выполнении запросов к Telegram API. Используйте try...catch блоки.
Валидируйте данные, полученные от пользователя, чтобы предотвратить нежелательные действия.