Как создать бота для телеграмма для просмотра excel
Сегодня продолжение статьи о мониторинге цен с помощью гугл таблиц и создании бота в телеграм для отправки информации. В первой части мы настроили гугл-таблицы на сбор данных, а сегодня будем делать бота и программировать его (немножко).
3. Создаем нового бота в телеграм
Начинаем чат с BotFather командой " /start " и далее следуем подсказкам бота:
Отправляем команду " /newbot " и отвечаем, как мы хотим назвать наш бот и какой у него будет юзернейм. В ответ Телеграм пришлет ссылку на бота и токен для работы с ботом из других приложений. Этот токен фактически дает полные права на управление ботом, так что держите его в тайне.
Бот создан. С помощью Крестного Бота можно отредактировать его, добавив информацию, юзерпик и др. - оставлю это на ваше усмотрение :-)
Бот не может инициировать диалог, пользователь должен начать диалог сам и послать команду " /start ", а бот, получив эту команду, должен сохранить параметр chat_id , чтобы потом писать этому пользователю. Делать все это мы будем с помощью того же языка скриптов в гугл таблице. Возращаемся в нашу таблицу и запускаем редактор скриптов.
Для начала, сохраним значение токена, чтобы потом его можно было использовать. В редакторе скриптов идем в меню " Файл -> Свойства проекта "
И в закладке "Свойства скрипта" добавляем строку " OPENAPI_TOKEN " со значением токена, которое прислал Крестный Бот. Сохраняем.
В начале скрипта добавляем строки:
Создадим также новую функцию FetchMessages - она будет:
- Подключаться к серверу Телеграм по API
- Запрашивать список обновлений у бота
- Сохранять chat_id для новых пользователей
- Очищать список обновлений на сервере
Если бы мы писали этого бота, как полноценный продукт, нужно было бы проверить список chat_id на дубликаты, а также запрашивать от каждого пользователя свои ссылку (или ссылки), по которым он хочет получать оповещения. Но у нас больше образовательно-демонстрационный проект, поэтому эти моменты я пропущу.
Добавляем триггер на запрос обновлений каждый час, и можно приступать к следующей части.
Напишем еще несколько функций:
- Функция MakeChart - делает график из данных по ценам в виде картинки
- Функция SendPhoto - отправляет картинку с комментарием на указанный chat_id
- Функция SendMessage - с помощью функции MakeChart готовит картинку и для каждого chat_id с помощюу функции sendPhoto отправляет картинку в телеграм.
Добавляем вызов функции SendMessage в функцию GetPrice, чтобы она выполнялась после получения цен.
6. Тестируем
Вручную запустим функцию SendMessage - выберем ее на панели инструментов и нажмем запуск:
Друг предложил мне поработать над проектом для нашей кафедры. ТЗ пока не сформулировано, но точно известно, что это будет бот в телеге. Я хоть и питонист, но с ботами дел никогда не имел, поэтому пишу эту статью, как заметку, для себя и молодых перспективных ребят, чтоб у них было от чего оттолкнуться. Постараюсь писать максимально понятным и простым языком. Профессионалам тут особо делать не чего, хотя, может и придёт какая-нибудь идея.
Краткое описание бота
Наш бот будет создан на тематику Белого движения в гражданской войне в России (1917-1922) /сегодня разговор не о политике. Это просто пример/
По команде /start бот будет приветствие и посылать стикер;
Нажатие на первую кнопку выведет рандомную цитату из excel файла (такое извращение нужно для подготовки к будущему проекту)
Нажатие на кнопку "Литература" выдаст инлайновую клавиатуру (далее будет прояснение, для тех кто не понял что это) с названиями произведений белогвардейских авторов или о белогвардейцах.После нажатия клавиатура пропадёт (просто этим навыком, думаю, необходимо обладать), начнётся загрузка pdf файла и появится оповещение "Приятного чтения!"
Вот такой простенький бот у нас по выйдет.
Начало. Создание бота и добавление библиотек.
Для начала добавим библиотеку pyTelegramBotAPI обычным пипом в cmd.
А также загрузим простенькую библиотеку для работы с Excel. (ЧИТАЕТ ТОЛЬКО .xls. )
Время импортировать все необходимые библиотеки.
Далее нужно создать самого бота в телеграме. Для этого пройдёмся по следующим шагам:
Найти в поиске телеграма @BotFather
Написать ему команду /newbot
После этих шагов батя пришлёт нам ссылку на нашёго бота и его API.
Нужно скопировать всю строку, которая на скрине закрыта красным прямоугольником
Если коротко, то API — это контракт, который предоставляет программа. «Ко мне можно обращаться так и так, я обязуюсь делать то и это».
(Более подробная инфа тут API)
Кодим
Раз библиотеки уже добавили, значит создаём переменную, определяющую бота с помощью API.
Если кто не знает что такое декораторы, то есть достаточно подробная статья, рекомендую ознакомиться.
Коротко: Декораторы — это, по сути, просто своеобразные «обёртки», которые дают нам возможность делать что-либо до и после того, что сделает декорируемая функция, не изменяя её.
Пробежимся по коду
Ниже происходит создание клавиатуры
markup = types.ReplyKeyboardMarkup(resize_keyboard=True) , а точнее запись в переменную подстрочной клавиатуры. Параметр resize_keyboard=True подгоняет кнопки по высоте до возможного минимума. Также создаём две кнопочки и добавляем в клавиатуру:
Время дать возможность боту коммуницировать
Далее идёт строка с текстом. ВАЖНО текст должен совпадать с названием кнопки клавиатуры, которую указывали выше.
Создаём экселевский файлик, в первую колонку вписываем цитаты, сохраняем в формате .xls в папку, как делали со стикером.
Со спокойной душой вызываем на файл на чтение
rb = xlrd.open_workbook('citat/citat.xls', formatting_info=True), указываем лист с которого считываем инфу sheet = rb.sheet_by_index(0) индексы как у массива (первый элемент нулевой).
Вышло как-то так
Для литературы будем использовать инлайновую клавиатуру.
Определяем клавиатуру inMurkup = types.InlineKeyboardMarkup(row_width=1) параметр row_width=1 говорит о том, что на одной строке будет одна кнопка. Принцип кнопок создания такой же как и у обычной клавиатуры, но появляется параметр callback_data значения которого примет бот после нажатия на кнопку и поймёт что нужно сделать (далле это всё опишем).
Работа с callback_data
Первым делом вызываем декоратор обработки колбэка и подтверждаем, что он был получен @bot.callback_query_handler(func=lambda call: True) . Далее создаём функцию с конструкцией try-except (Что это? Чекай). Код хоть и приличный по объёму, но весь однотипный. Через if мы понимает какая "дата" пришла от кнопки, например
if call.data == 'book1': отвечает за первую кнопку с книгой про Колчака. Соответственно, командой
мы создаём переменную doc в которую "суём" pdf файл, который сохранили в папку "boo" заранее.
После леса из наших elif удалим инлайновую клавиатуру, дабы не мешалась. Действие необязательно, но мы же с вами тренируемся, поэтому пусть код будет здесь.
Уведомление призывается заклинанием
Параметр show_alert отвечает за вид оповещения (False — простое временное уведомление, True — уведомление с кнопкой "Ок")
1 — False, 2 — True
Завершаем эту ступень кода конструкцией проверки исключений (ошибок).
Именно этой командой и закончим наш код. Теперь бот постоянно проверяет не написал ли ему кто.
В итоге получился такой код:
Пара слов от автора
Если есть желание показать друзьям что наворотили, то запускайте код и всё будет работать, но если код остановить или выключить комп, то бот ничего выдавать не будет. Из этого выходит, что для полноценного бота просто необходим хостинг, что, как правило, платно.
Больше функций, параметров и всего прочего находится в документации. Справочник на русском. Библиотеки pyTelegramBotAPI и xlrd.
Огромное спасибо за прочтение статьи! Надеюсь она оказалась полезной. А если понравилась, то поднимай статью в рейтинге и оставляй комменты)
Это мой первый пост на этой площадке, целью которого является погружение в коммьюнити для обратной связи и полезных ремарок относительно этой статьи. Также буду рада, если эта статья станет полезной для начинающих свой путь в написании ботов людей :)
Далее речь пойдет о создании первого бота и написании скрипта в Apps Script. Поехали!
Создание телеграм-бота
Откуда вообще берутся боты в телеграме? Опытному пользователю можно пропустить это пункт, ну а новичкам настало время познакомится с @BOTFATHER
Находим отца всех ботов в поиске телеги и видим, что этот бот вообще из себя представляет.
После старта этого бота мы увидим список команд.
Здесь нам нужна команда /newbot, чтобы создать нашего первого бота.
Порядок действий незамысловатый: создаем бота помандой /newbot, даем ему вменяемое имя и задать ему username с обязательным окончанием bot. В результате получаем API токен нашего бота, который и будем дальше использовать.
Можете проверить работоспособность созданного бота перейдя по следующему URL:
выделенное жирным замените на апи своего бота
Запрос вернет примерно это:
Подключение гугл-таблицы
Переходим к гугл табличкам и создаем новый док.
Нам нужен пункт меню Инструменты/Tools -> Редактор скриптов/ Script editor.
Должно получиться вот это:
Затрем скрипт и напишем свой на языке JavaScript. Дополнительно в скрипте могут быть использованы инструменты гугла (классы, методы и т.п.), что мы далее и рассмотрим.
Начнем с объявления глобальных переменных. У нас их будет только две - API бота и App_link.
Напомню, что АПИ бота мы получили в диалоге с botfather.
Функция send() отправляет запрос для общения со строними приложениями, в нашем случае - с телегой. Подробнее в документации Class UrlFetchApp.
Далее нужно предусмотреть механизм запуска функции send() . Осуществим это из тела другой функции doPost():
Сначала сохраним скрипт и задеплоим проект. Кликаем на кнопку Deploy -> New deployment.
В результате откроется окно New deployment, где нужно кликнуть по шестеренке и выбрать Web app.
В поле Who has access выбираем Anyone, что позволит другим пользователям вносить правки в проект и деплоить без вашего участия.
И кликаем Deploy.
При первом запуске приложение попросит авторизации. Проделываем это упражнение.
Здесь нам нужен URL в самом конце. Копируем его по кнопке Copy и вставляем в качестве значения глобальной переменной App_link, значение для которой мы оставили изначально пустым.
Создадим функцию установки вебхука для получения обновлений от нашего бота.
Добавим следующий код к нашему скрипту:
function api_connector () < UrlFetchApp.fetch("https://api.telegram.org/bot"+API+"/setWebHook?url full-width ">
Если функция выполнилась без ошибок, идем проверять работу нашего бота непосредственно в телеге.
Бот умеет читать информацию из Excel файла с именами и номерами телефонов, и находить и показывать это в Телеграм-мессенджере.
Также бот умеет искать и показывать информацию:
- ФИО (ввести в телеграм только буквы)
- Номер телефона (ввести в телеграм только цифры)
- Номер сотового телефона (ввести в телеграм только цифры)
- Должность (ввести в телеграм только буквы, если не найдено в пункте (1))
- Адрес (ввести в телеграм буквы и цифры)
- Емайл (ввести в телеграм @)
Бот работает бесконечно
Лицензия: сохранять имя автора и сайт.
Код открыт, на языке Golang
Специальные предложения
Просмотры 1925
Загрузки 0
Рейтинг 5
Создание 17.11.21 08:00
Обновление 27.12.21 16:29
№ Публикации 1551020
Рубрики Боты
Кому Для всех
Тип файла Архив с данными
Конфигурация Не имеет значения
Операционная система Windows
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Да
См. также
Конфигурация для просмотра публичных телеграм каналов Промо
Просмотр и каталогизация в более удобном виде публичных телеграм каналов, групп и чатов.
1 стартмани
02.06.2018 24522 13 DO_WHILE_LOOP 7
Telegram бот для УТ 11
10 стартмани
16.03.2022 1429 1 Pira 3
Telegram. Пример реализации
Пример реализации основных возможностей работы с Telegram ботом из 1С. Файл с выгрузкой базы предназначен для ознакомления с основными возможностями. Файл с конфигурацией предназначен для использования программистами в качестве базы для настройки вашего чат бота.
5 стартмани
16.12.2021 2314 16 Pira 3
Механизм контроля работы приложений на вашем ПК с помощью Telegram бота
Данная разработка представляет собой конфигурацию для 1С 8.3, в которой реализованы механизмы работы с Telegram ботом и ОС Windows. А именно, выполняется отслеживание работы приложений на вашем ПК, с возможностью контроля их работы. При помощи Telegram можно смотреть список работающих приложений на вашем ПК, завершать работу, блокировать и разблокировать эти приложения.
До этого я долгое время занимался разработкой чат-ботов на php, но поскольку на 1С сижу тоже достаточно плотно - возникла идея, почему бы не написать небольшое расширение для интеграции 1С с популярным, а нынче даже разрешенным и всячески поощряемым к использованию мессенджером Телеграм.
Настройка веб-сервера выходит за рамки этой статьи. Скажу только, что при настройке вы можете использовать сертификат подписанные удостоверяющим центром (например я использую бесплатные сертификаты Let's Encrypt) или создать свой, самоподписанный сертификат. Во втором случае вам нужно будет дополнительно нажать кнопку "Сертификат. " и вставить в открывшееся окно открытый ключ вашего сертификата начиная с -----BEGIN CERTIFICATE----- и заканчивая -----END CERTIFICATE-----
На этом настройка модуля Боцман закончена и можно переходить к созданию ботов
Добавление бота
Добавление ботов происходит также в обработке "Настройка ботов" или через справочник "Боты Телеграм" в меню Боцман. Для добавления нового бота нажмите кнопку "Создать":
Поля Код, Наименование и Родитель - определяют как будет выглядеть ваш бот в справочнике ботов и не влияют на его работоспособность. Назначение остальных полей:
Закладка "Основное"
Токен - токен вашего бота, полученный при создании бота в Телеграм (см. предыдущую статью)
Секрет - случайная строка генерируется при создании бота и может быть перегенерирована нажатием на кнопку очистки поля. Используется для авторизации Телеграм при вызове вебхука.
Обработка - элемент справочника Внешние отчеты и обработки, содержащий обработку, обеспечивающую функционирование логики вашего бота. Будет рассмотрено подробнее в разделе "Программирование логики бота".
Режим отладки - при установленном флаге бот отправляет ошибки в чат из которого был вызван или пользователю, установленному как администратор бота (см. далее, поле Администратор)
Режим профилактики - при установленном флаге бот обрабатывает только команды в чате с администратором (см. далее), а остальным пользователям выдает стандартный ответ указанный в поле "Текст профилактики".
Текст профилактики - Текс, который бот будет выдавать пользователям не являющимся администратором при попытке взаимодействия с ботом, если бот находится в режиме профилактики. В тексте можно использовать символы замены >, которые будут заменены их значениями.
Закладка "Параметры"
Закладка "Словарь"
В некотором роде значения в этой таблице аналогичны закладке Параметры, но есть отличия. Значения используются при вызове функции __(Строка) в модуле Боцман. Могут использоваться для перевода или изменения строк, прописанных в коде. Если Строка не найдена в колонке "Строка", то функция __(Строка) вернет саму строку. Если найдена - вернет значение из колонки Перевод. Подробнее см. раздел "Методы модуля".
Закладка "Дополнительно", "Запрос контакта"
Благодарность за контакт - текст, который будет отправлен пользователю, после успешного получения контакта. Например: "Спасибо, теперь вы можете начать пользоваться нашим замечательным ботом". Рекомендация: Лишний раз не просить у пользователей контакт. Чаще всего это бывает нужно, если вы хотите связать работу вашего бота с каким-либо другим сервисом и иметь возможность объединить данные о пользователях с одним номером телефона в Телеграм и стороннем сервисе.
Закладка "Дополнительно", "Команда /name"
Обрабатывать команду /name автоматически - бот может автоматически обрабатывать команду /name в чатах с пользователями. Эта команда позволяет пользователю изменить имя регистрации (по умолчанию пользователь регистрируется с именем и фамилией указанными в настройках его мессенджера).
Запрос нового имени - текст отправляемый пользователю в ответ на команду /name. Например: "Введите новые имя и фамилию".
Закладка "Дополнительно", "Работа в группах"
Закладка "Дополнительно", "Прочие настройки"
Администратор - пользователь - администратор бота. В чат этому пользователю, при включенном режиме отладки, будут приходить ошибки, возникающие при работе бота и время выполнения запросов. В режиме профилактики пользователь, указанный как администратор, имеет возможность штатной работы с ботом, в то время как на все другие запросы бот будет отвечать текстом указанным для режима профилактики.
Обрабатывать команду /chatid - при установленном флаге, в ответ на команду /chatid бот вернет идентификатор чата в котором была введена эта команда. Иногда этот идентификатор нужен для настройки сторонних приложений. Если флаг снят - команда будет передана в вашу обработку.
Сообщать об изменении статуса - если флаг установлен бот будет сообщать администратору об изменении статуса в группах. Подключен, отключен, заблокирован и т.д.
Кастомная клавиатуры - максимальная ширина строки для кастомной клавиатуры (выводится вместо стандартной буквенно-цифровой).
Кнопки
Методы модуля
Методы описаны начиная с самых необходимых для быстрого старта и первый - это конечно:
Возвращает соответствие, содержащее ответ сервера Телеграм.
Возвращает соответствие, содержащее ответ сервера Телеграм.
Работа с файлами
90% потребностей вашего бота покрываются предыдущими двумя функциями, но раз уж мы работаем в 1С и вероятно будем использовать ботов для отправки отчетов вот еще несколько полезных функций для отправки и получения файлов:
Возвращает соответствие, содержащее ответ сервера Телеграм.
Возвращает соответствие, содержащее ответ сервера Телеграм.
- Сессия (обязательный) - содержит структуру сессии;
- ИдФайла (обязательный) - идентификатор файла, который нужно получить с сервера Телеграм.
Возвращает имя временного файла, полученного с сервера Телеграм.
Клавиатуры
Телеграм позволяет разработчику бота определять собственные клавиатуры. Клавиатуры делятся на кастомные и инлайн-клавиатуры. Кастомные клавитуры появляются вместо обычной буквенно-цифровой клавиатуры и позволяют нажатием кнопки быстро ввести типовой ответ:
КлавиатураТелеграм - возвращает кастомную клавиатуру. Используется для быстрого создания простых клавиатур. Параметры:
- Сессия (обязательный) - содержит структуру сессии;
- Кнопки (обязательный) - строка с текстом кнопок разделенных запятыми или массив элементов типа соответствие с полями:
- text - текст отображаемый на кнопке;
- request_contact - не обязательный. Истина, если нажатие указанной кнопки должно передавать боту контактные данные пользователя;
- request_location - не обязательный. Истина, если нажатие указанной кнопки должно передавать боту местоположение пользователя.
КастомнаяКлавиатураИзКнопок - возвращает кастомную клавиатуру. Используется для более гибкого создания кастомных клавиатур. Параметры:
- Сессия (обязательный) - содержит структуру сессии;
- Кнопки (обязательный) - основные кнопки клавиатуры. Могут быть автоматически отсортированы и будут расположены в строках по несколько кнопок, если общая длина текста не превышает заданную в настройках бота. Массив элементов типа соответствие с полями:
- text - текст отображаемый на кнопке;
- request_contact - не обязательный. Истина, если нажатие указанной кнопки должно передавать боту контактные данные пользователя;
- request_location - не обязательный. Истина, если нажатие указанной кнопки должно передавать боту местоположение пользователя.
УбратьКлавиатуруТелеграм - позволяет убрать кастомную клавиатуру на устройстве пользователя. Вызывается без параметров
- Сессия (обязательный) - содержит структуру сессии;
- Кнопки (обязательный) - основные кнопки клавиатуры. Могут быть автоматически отсортированы и будут расположены в строках по несколько кнопок, если общая длина текста не превышает заданную в настройках бота. Масси элементов типа соответствие с полями:
- text - текст отображаемый на кнопке;
- callback_data - данные, которые будут переданы в качестве параметра в вызов вашего бота при нажатии кнопки. Максимально 64 байта;
КнопкаКастомКлавиатуры - позволяет более удобно создать соответствие, определяющее кнопку для кастомной клавиатуры. Параметры:
Возвращает соответствие, которое можно использовать в качестве элемента массива кнопок при создании кастомной клавиатуры.
КнопкаКолбэка - позволяет более удобно создать соответствие, определяющее кнопку для инлайн-клавиатуры. Параметры:
- Текст (обязательный) - текст кнопки, который будет установлен в качестве поля text кнопки инлайн-клавиатуры;
- Данные (обязательный) - текст или двоичные данные, которые будут установлены в качестве поля callback_data кнопки инлайн-клавиатуры. Маскимально 64 байта;
Возвращает соответствие, которое можно использовать в качестве элемента массива кнопок при создании инлайн-клавиатуры.
ЗавершитьКолбэк - после того, как пользователь нажимает кнопку инлайн-клавиатуры, на кнопке отображается вращающееся колесико, показывающее пользователю, что процесс обработки вызова еще не завершен. После окончания обработки вызова инлайн-кнопки ваш бот должен вызвать эту функцию, для уведомления пользовательского клиента об окончании обработки. Параметры:
- Сессия (обязательный) - содержит структуру сессии;
- КолбэкИд (обязательный) - идентификатор вызова, который передается во входных параметрах вызова;
- Текст - текст, который может быть показан пользователю во всплывающем окне или строке уведомлений;
- ПоказыватьУведомление - если Истина - текст будет показан пользователю в строке уведомлений. В противном случае в виде всплывающего окна. По умолчанию: Ложь;
- АдресПерехода - можно указать адрес вида: t.me/your_bot?start=XXXX, позволяющий вызвать вашего бота с параметром. По умолчанию: Неопределено;
- ВремяКэширования - можно указать максимальное время в секундах, в течение которого результат запроса может быть кэширован на стороне пользователя. По умолчанию: 0;
Возвращает соответствие, содержащее ответ сервера Телеграм.
Функции для работы с сессией
Для хранения значений между вызовами вы можете использовать сессию, которая представляет из себя структуру 1С. Значения добавленные в сессию с помощью Сессия.Вставить() не сохраняются между вызовами. Сессия.Удалить() также имеет эффект только в течение текущего вызова. Для сохранения и удаления значений между вызовами используйте следующие функции:
ЗаписатьЗначениеВСессию - сохраняет переданное значение в сессии. Параметры:
- Сессия (обязательный) - содержит структуру сессии;
- ИмяПараметра (обязательный) - имя добавляемого или изменяемого параметра;
- Значение (обязательный) - сохраняемое значение.
Возвращает записанное значение.
УдалитьЗначениеИзСессии - удаляет значение из сессии. Параметры:
- Сессия (обязательный) - содержит структуру сессии;
- ИмяПараметра (обязательный) - имя удаляемого параметра;
УстановитьТекущуюКоманду - при обработке вам вероятно потребуется сохранять данные о текущей обрабатываемой команде или статусе вашего скрипта обработки. Это можно сделать и с помощью функции ЗаписатьЗначениеВСессию, но использование УстановитьТекущуюКоманду немного удобнее. Параметры:
- Сессия (обязательный) - содержит структуру сессии;
- Команда (обязательный) - имя команды;
Вызов этой функции полностью аналогичен вызову: ЗаписатьЗначениеВСессию(Сессия, "ТекущаяКоманда", Команда);
КомандаВыполнена - полностью аналогичен вызову: УдалитьЗначениеИзСессии(Сессия, "ТекущаяКоманда"). Парамеры:
- Сессия (обязательный) - содержит структуру сессии;
Заключение
Модули расширения также содержат некоторые не документированные здесь служебные функции. Вы можете использовать их в разработке вашего бота, но их работа не гарантируется в следующих релизах. Написано на 8.3.14.
Расширение Боцман покрывает основные потребности и сильно упрощает разработку и интеграцию чат-ботов в систему 1С:Предприятие.
Любые вопросы и предложения по доработке пишите в комментарии.
Обработка реализующая функциональность @echo_1c_bot приложена в архив вместе с расширением. Вы можете использовать ее в качестве шаблона для разработки своего бота. Также вы можете попробовать созданный с помощью Боцман
Читайте также: