Внезапно появилась задача сделать телеграм бота, который бы отсылал напоминания о предстоящих мероприятиях (дополнительные занятия, факультативы, семинары и так далее) в школьно-родительскую телеграм группу.
ТЗ
Есть группа, есть родители, есть их дети. Родителям в группу должно приходить напоминание, что, например, завтра произойдет Мероприятие «Х» с 14.00 до 15.00. Рассылка должна приходить ежедневно, в случае наличия таковых мероприятий на завтра. Мероприятия приходят от учителя.
Предварительные шаги
Из-за того, что данные могут приходить в разном формате и виде, было принято решение заносить их в расшаренный гугл календарь.
Это удобно по ряду причин:
- Унификация и систематизация данных
- Избегание дополнительного ручного труда при занесении или переносе данных — доступ к календарю есть с любого телефона.
Гугл календарь
Был создан дополнительный гугл календарь, к нему дан доступ жене — пока вносить будет она.
Телеграм бот для твоей шараги. Часть 4 (система расписания)
Так же из него получен Id, который понадобится в дальнейшем в скриптах:
Гугл скрипт взаимодействия бота с календарем — календарная часть
function searchDay() < const searchDay = new Date(); searchDay.setDate(searchDay.getDate() + 2); return searchDay; >function getCalendarEvents() < const today = new Date() const schoolCalendar = CalendarApp.getCalendarById(CAL_ID); const eventsForDay = schoolCalendar.getEvents(today, searchDay()); const eventsArr = []; const optionLocaleObject = < timeStyle: «short» >if (eventsForDay.length !== 0) < for (let i = 0; i < eventsForDay.length; i++) < let formatedDay = eventsForDay[i].getStartTime().toLocaleDateString(‘ru-RU’) let startTime = eventsForDay[i].getStartTime().toLocaleTimeString(‘ru-RU’, optionLocaleObject) let endTime = eventsForDay[i].getEndTime().toLocaleTimeString(‘ru-RU’, optionLocaleObject) let eventDescription = eventsForDay[i].getDescription() let eventTitle = eventsForDay[i].getTitle() eventsArr.push([eventTitle, formatedDay, startTime, endTime, eventDescription]) >> return eventsArr >
searchDay() возвращает дату — послезавтра.
getCalendarEvents() собирает в массив все данные из календаря за сегодня и завтра через schoolCalendar.getEvents(today, searchDay()); — получает все события, происходящие в заданном временном диапазоне. Этот метод возвращает события, которые начинаются в указанном временном диапазоне, заканчиваются в этом временном диапазоне или охватывают временной диапазон.
Скрипт — подготовка данных для телеграма
function filteredArrToText() < const filteredArr = getCalendarEvents(); const beautyArr = filteredArr.map(row =>[` «$» состоится $, начало в $ до $, детали: $`]) return (beautyArr.join(‘nn’)) > function eventsCheckerToSend() < const text = filteredArrToText() if (text.length !== 0) < // если длина текста не равна 0 — т.е. там есть что отправлять let messageText = ` Мероприятия на сегодня и завтра:n` sendMessage(GROUP_ID, (messageText + text)) // отправка сообшения >>
filteredArrToText() приводит массив данных в текст — для передачи в телеграм.
eventsCheckerToSend() вешается на триггер и если массив не пустой — каждый день отправляет текст в группу телеграма.
Выглядит это следующим образом:
Скрипт телеграм бота
Так как само написание телеграм бота рассматривалось на этом сайте много раз, ниже привожу код без дополнительных комментариев.
Общий код
// Установка вебХука в телеграме function setWebHook() < //выполняется единожды — установить вебХук const url = telegramUrl + «setWebhook?url=» + googleUrl; const response = UrlFetchApp.fetch(url).getContentText(); const textResponse = JSON.parse(response); console.log(textResponse) >// Удаление вебХука в телеграме function deleteWebHook() < //выполняется единожды — удалить установленный выше вебХук const url = telegramUrl + «deleteWebhook?url=» + googleUrl; const response = UrlFetchApp.fetch(url).getContentText(); const textResponse = JSON.parse(response); console.log(textResponse) >// основная функция, которая обрабатывает входящие данные от телеграма function doPost(e) < try < const main = JSON.parse(e.postData.contents); // получаем данные из телеграм бота // вытаскиваем все данные из contents const chatId = main.message.chat.id; const firstName = main.message.chat.first_name; const lastName = main.message.chat.last_name; const messageText = main.message.text; const arrayText = messageText.split(» «); // массив для последующей обработки команд const detailsArray = [chatId, firstName, lastName, messageText, arrayText]; //собираем все что выше массив const objToTransfer = Object.assign(<>, detailsArray); // делаем из массива объект для передачи analyseDetails(objToTransfer); > catch (error) < sendMessage(ADMIN_ID, error) >>
Back-end часть телеграм бота
function analyseDetails(objReceived) < // анализ того, что пришло со стороны телеграма const receivedCommand = objReceived[4][0].toLowerCase(); // «4»: [«/list», «», «» и тд] switch (receivedCommand) < //если пришла команда case ‘/start’: sendStartMessage(objReceived); break; case ‘/help’: sendStartMessage(objReceived); break; default: // если пришло что-то отличное от команды onModer(objReceived); break; >> function sendStartMessage(obj) < const userId = obj[0]; //Юзер id const startMessage = ` Привет! nn Я — бот, присылающий напоминания о предстоящих мероприятиях на сегодня и завтра.nn Весь календарь мероприятий доступен по ссылке $` sendMessage(userId, startMessage); > // если пришло что-то отличное от команды — отправить администратору бота function onModer(obj) < const userId = obj[0] const userName = obj[1] const userSurname = obj[2] const userMessage = obj[3] const text = `Пользователь $$ с ID $ послал на модерацию сообщение: $` sendMessage(ADMIN_ID, text) sendMessage(userId, ‘Ваше сообщение отправлено администратору бота’) >
Базовый метод отправки сообщения
function sendMessage(chatid, chatText) < const chatId = chatid; const text = chatText; // const chatId = 309144243; // const text = ‘Test text’; const payload = < «method»: «sendMessage», «chat_id»: String(chatId), «text»: text, «parse_mode»: ‘HTML’, «disable_web_page_preview»: true >; const data = < «method»: «post», «payload»: payload >; UrlFetchApp.fetch(telegramUrl, data); >
Ну и напоследок — отдельно объявленные глобальные переменные
// КАЛЕНДАРЬ// const DAYS_NUM = 2 const DAYS_WEEK = 7 const CAL_ID = ‘ID КАЛЕНДАРЯ’ // ТЕЛЕГРАМ // const botToken = ‘botToken, полученный от BotFather’; const telegramUrl = «https://api.telegram.org/bot» + botToken + «/»; const googleUrl const ADMIN_ID = ваш_ID; const GROUP_ID = -ID группы куда будет вещать бот;
Так же хочется обратить внимание, что Id группы в телеграме начинаются со знака минус «-«. Это просто — чтоб не пугаться
Для того, чтобы не путаться где и что, я обычно разношу это по разным блокам-файлам:
Источник: dmitriizhuk.ru
Как отправить сообщение в Телеграмме по таймеру?
Недавно в приложении Телеграм появилось новая функция, позволяющая отправлять сообщения по таймеру. Чтобы ей воспользоваться необходимо обновить свое устройство до последней версии. Загрузите его в App-Store для айфона либо в Google Play для Андроида.
Для чего нужны отложенные сообщения в Телеграмм, в чем их польза
Благодаря функции отложенного отправления, можно написать сообщение в любое время суток, а пользователь прочитает их только утром. К примеру, у вас появилась какая-то идея, но из-за позднего часа отправлять сообщение нежелательно. Вы устанавливайте таймер, и к утру оно будет доставлено получателю. Данные сообщения можно отправлять в групповых чатах либо личных. В Телеграм-каналах они тоже доступны, но в урезанном виде.
Пошаговая инструкция по отправке запланированного сообщения в Телеграмме
Определяемся с чатом, куда хотим отправить сообщение.
Пишем необходимое сообщение, затем зажимаем удерживаем кнопку отправки.
Перед вами появится окно в виде выпадающего меню. Здесь нужно нажать на “Отправить позже”.
Выбираем время отправки и жмем кнопку “Отправить”.
Сделано! Отправка сообщения запланирована. Теперь ваш собеседник получит его в установленное время.
Отложенное сообщение в Телеграмм с телефона
Для того, чтобы создать отложенное сообщение необходимо проделать следующее:
- заходим в Телеграм и выбираем получателя;
- вводим сообщение, которое необходимо отправить;
- чтобы отправить запланированное сообщение, нужно нажать на значок стрелки и удерживать до тех пор, пока не появится окошко с 2-мя опциями;
- жмем на позднюю отправку;
- всплывет окно, в котором потребуется ввести время и дату отправки. Определяемся с числом и жмем пункт “Отправить”.
Сделано! Сообщение будет доставлено получателю в установленное время.
Отложенное сообщение в Телеграмм с компьютера
Для отправки сообщения с компьютера необходимо сделать следующее:
- заходим в приложение, находим нужного получателя и пишем сообщение;
- для отправки сообщения необходимо кликнуть левой кнопкой мыши на иконку с изображением синей стрелки (ее можно увидеть в углу). Чтобы
- отправить отложенное сообщение, нужно сделать все тоже самое, только правой кнопкой;
- всплывет окно с 2-мя опциями;
- нажимаем на “Отправить позже”;
- вы увидите окно, где нужно указать дату и число отправки сообщения (задержка может быть до 1 года). Затем кликаем на “Запланировать”.
Как смотреть запланированный месседж в Телеграмм?
Как будет создано запланированное сообщение, перед вами появится страница, где можно увидеть все смс и посты. Чтобы перейти к ней нужно нажать на иконку календаря (выбираем чат, куда должно отправиться сообщение и нажимаем на календарь).
- копирование;
- редактирование;
- удаление;
- срочная отправка отложенных постов.
Все записи будут отправлены в запланированное время.
Отправка сообщения по времени с помощью бота
Когда появилась возможно отправлять запланированные сообщения через самое приложение, надобность в ботах отпала. Однако некоторые пользователи до сих пор ими пользуются, особенно когда ведут свой канал.
Самые известные боты: FleepBot и Controller Bot.
Для использования бота нужно:
- Зайти в приложение Телеграмм, вбить в поиск название бота и нажать “Старт”.
- Затем выбрать необходимый канал.
- Перед вами появится руководство по подключению бота.
Удаляем отложенное сообщение
Все запланированные сообщения можно редактировать и удалять. У ПК и телефона одинаковые функции.
Для редактирования сообщения нужно нажать на него и выбрать необходимое действие:
- редактировать;
- сделать копию;
- отправить немедленно;
- удалить;
- отредактировать время и дату.
Источник: tarifec.com
Чат-бот напоминатор – о важном не забудешь!
Друзья! Для вас отличная новость – мы разработали нового полезного чат-бота, который напоминает о важных делах:
Команды для бота:
Дальше бот попросит ввести дату напоминания:
Вам интересны интернет-маркетинг и продвижение бизнеса в интернете? Подписывайтесь на наш Telegram-канал!
Вводите дату в формате:
18.04.2019 00:00
//если не укажите год, то бот возьмет произвольно – текущий год, 2019.
- Бот спросит про повторения – выберите удобный для вас вариант (назначьте дату и время) или откажитесь от повторений напоминаний, если это не нужно.
Также рекомендуем прочитать статью: 40 лучших телеграм-каналов про бизнес.
Список напоминаний:
Подпишитесь на авторский телеграм-канал про предпринимательство в России.
Чтобы удалить напоминание бота в Телеграмм:
Бот сразу же удалит напоминание под номером 5)
Как это выглядит в действии:
Напоминатор в группах:
Бота можно добавлять в группы вот так:
Так бот-напоминатор напомнит о дедлайне задачи всем участникам группы. Пробуйте в своей работе или просто в жизни нового чат-бота – с ним вы ничего не упустите ☺
Источник: fireseo.ru