Кнопка с ответом в Телеграм канале

Содержание

В первой части мы сделали гороскоп на Python, который выдаёт нам прогноз на день по знаку зодиака. Сегодня пойдём дальше: теперь этот же генератор гороскопов будет встроен в Телеграм в виде бота.

Да. То, что обычно на курсах продают за 50 тысяч рублей, мы вам сейчас расскажем за 15 минут бесплатно.

Как всё будет работать

В этом проекте три звена: наш компьютер с Python, сервер Телеграма и Телеграм-клиент.

На компьютере работает интерпретатор Python, а внутри интерпретатора крутится наша программа на Python. Она отвечает за весь контент: в неё заложены все шаблоны текста, вся логика, всё поведение.

Внутри программы на Python работает библиотека, которая отвечает за общение с сервером Телеграма. В библиотеку мы вшили секретный ключ, чтобы сервер Телеграма понимал, что наша программа связана с определённым ботом.

Когда клиент с Телеграмом запрашивает у бота гороскоп, запрос приходит на сервер, а сервер отправляет его на наш компьютер. Запрос обрабатывается программой на Python, ответ идёт на сервер Телеграма, сервер отдаёт ответ клиенту. Изи:

ФИШКИ ТЕЛЕГРАММ / Кнопка в закрепе канала

Телеграм-бот на Python

Обратите внимание, что работать наш бот будет только тогда, когда включён компьютер и на нём запущена программа на Python. Если компьютер выключится, пропадёт интернет или вы отключите интерпретатор, то бот работать перестанет: запросы будут приходить, но никто на них не ответит. В одной из следующих частей мы сделаем так, чтобы это всё работало на удалённом сервере и было всегда доступно.

Что будем делать

Если записать пошагово наш план, то он будет выглядеть так:

  1. Регистрируем бота в Телеграме.
  2. Устанавливаем Python-библиотеку для работы с Телеграмом.
  3. Добавляем библиотеку в программу с гороскопом и учим программу реагировать на сообщения в чате.
  4. Пишем там же код, который покажет кнопки для выбора знаков зодиака.
  5. Сделаем так, чтобы по кнопкам появлялся гороскоп для этого знака.

Теперь по очереди разберём каждый пункт.

1. Регистрация нового бота

Нажимаем Start и пишем команду /newbot. Нас по очереди спросят про название бота и его никнейм (мы придумали только с третьей попытки, потому что остальные были заняты):

2. Установка библиотеки

Есть два основных способа работать с телеграмом в Python: через библиотеку telebot и с помощью Webhook. Мы будем использовать библиотеку — так проще и быстрее.

Чтобы её установить, запускаем командную строку от имени администратора (если у вас Windows) и пишем команду pip install pytelegrambotapi

Подключаем библиотеку и получаем сообщения

Чтобы программа на Python умела управлять Телеграм-ботами, нужно в самое начало кода добавить строки:

import telebot;
bot = telebot.TeleBot(‘токен’);
Программа-гороскоп
# Подключаем модуль случайных чисел import random # Заготовка для первого предложения first = [«Сегодня — идеальный день для новых начинаний.»,»Оптимальный день для того, чтобы решиться на смелый поступок!»,»Будьте осторожны, сегодня звёзды могут повлиять на ваше финансовое состояние.»,»Лучшее время для того, чтобы начать новые отношения или разобраться со старыми.»,»Плодотворный день для того, чтобы разобраться с накопившимися делами.»] second = [«Но помните, что даже в этом случае нужно не забывать про»,»Если поедете за город, заранее подумайте про»,»Те, кто сегодня нацелен выполнить множество дел, должны помнить про»,»Если у вас упадок сил, обратите внимание на»,»Помните, что мысли материальны, а значит вам в течение дня нужно постоянно думать про»] second_add = [«отношения с друзьями и близкими.»,»работу и деловые вопросы, которые могут так некстати помешать планам.»,»себя и своё здоровье, иначе к вечеру возможен полный раздрай.»,»бытовые вопросы — особенно те, которые вы не доделали вчера.»,»отдых, чтобы не превратить себя в загнанную лошадь в конце месяца.»] third = [«Злые языки могут говорить вам обратное, но сегодня их слушать не нужно.»,»Знайте, что успех благоволит только настойчивым, поэтому посвятите этот день воспитанию духа.»,»Даже если вы не сможете уменьшить влияние ретроградного Меркурия, то хотя бы доведите дела до конца.»,»Не нужно бояться одиноких встреч — сегодня то самое время, когда они значат многое.»,»Если встретите незнакомца на пути — проявите участие, и тогда эта встреча посулит вам приятные хлопоты.»] # выводим знаки зодиака print(«1 — Овен») print(«2 — Телец») print(«3 — Близнецы») print(«4 — Рак») print(«5 — Лев») print(«6 — Дева») print(«7 — Весы») print(«8 — Скорпион») print(«9 — Стрелец») print(«10 — Козерог») print(«11 — Водолей») print(«12 — Рыбы») # Спрашиваем у пользователя про его знак zodiac = int(input(«Введите число с номером знака зодиака: «.format(blue=»33[96m», endcolor=»33[0m»))) # Если число введено верно — выдаём гороскоп if 0 < zodiac < 13: print(random.choice(first), random.choice(second), random.choice(second_add), random.choice(third)) else: print(«Вы ошиблись с числом, запустите программу ещё раз»)

Еще по теме:  Как устроиться курьером в Телеграмме

Теперь научим бота реагировать на слово «Привет». Для этого добавим после строчек с импортом новый метод и сразу пропишем в нём реакцию на нужное слово. Если не знаете, что такое метод и зачем он нужен, — читайте статью про ООП.

И последнее, что нам осталось сделать до запуска, — добавить после метода такую строчку:

Она скажет программе, чтобы она непрерывно спрашивала у бота, не пришли ли ему какие-то новые сообщения. Запускаем программу и проверяем, как работает наш бот.

Добавляем кнопки

Чтобы пользователям нашего бота было удобно, покажем им сразу все знаки зодиака в виде кнопок. А потом сделаем так, что когда на них нажимаешь — появляется гороскоп для этого знака на сегодня.

Добавляем код с кнопками в раздел, который реагирует на «Привет»:

# Готовим кнопки keyboard = types.InlineKeyboardMarkup() # По очереди готовим текст и обработчик для каждого знака зодиака key_oven = types.InlineKeyboardButton(text=’Овен’, callback_data=’zodiac’) # И добавляем кнопку на экран keyboard.add(key_oven) key_telec = types.InlineKeyboardButton(text=’Телец’, callback_data=’zodiac’) keyboard.add(key_telec) key_bliznecy = types.InlineKeyboardButton(text=’Близнецы’, callback_data=’zodiac’) keyboard.add(key_bliznecy) key_rak = types.InlineKeyboardButton(text=’Рак’, callback_data=’zodiac’) keyboard.add(key_rak) key_lev = types.InlineKeyboardButton(text=’Лев’, callback_data=’zodiac’) keyboard.add(key_lev) key_deva = types.InlineKeyboardButton(text=’Дева’, callback_data=’zodiac’) keyboard.add(key_deva) key_vesy = types.InlineKeyboardButton(text=’Весы’, callback_data=’zodiac’) keyboard.add(key_vesy) key_scorpion = types.InlineKeyboardButton(text=’Скорпион’, callback_data=’zodiac’) keyboard.add(key_scorpion) key_strelec = types.InlineKeyboardButton(text=’Стрелец’, callback_data=’zodiac’) keyboard.add(key_strelec) key_kozerog = types.InlineKeyboardButton(text=’Козерог’, callback_data=’zodiac’) keyboard.add(key_kozerog) key_vodoley = types.InlineKeyboardButton(text=’Водолей’, callback_data=’zodiac’) keyboard.add(key_vodoley) key_ryby = types.InlineKeyboardButton(text=’Рыбы’, callback_data=’zodiac’) keyboard.add(key_ryby) # Показываем все кнопки сразу и пишем сообщение о выборе bot.send_message(message.from_user.id, text=’Выбери свой знак зодиака’, reply_markup=keyboard)

Добавляем обработчик кнопок

Скорее всего, вы заметили, что в каждой кнопке у нас написано callback_data=’zodiac’ . Это значит, что при нажатии на любую кнопку у нас будет вызываться один и тот же метод, который отвечает за гороскоп. Если вы хотите сделать честный гороскоп, придётся в каждой кнопке прописать своё название обработчика, а потом задать его поведение, тоже для каждой кнопки.

Давайте сделаем обработчик кнопок, который будет реагировать на ‘zodiac’ и выдавать случайный текст, как в исходной программе. Для этого добавим новый метод в программу:

Убираем лишнее

Теперь у нас есть готовый бот, и нам осталось только убрать лишний код, который раньше отвечал за вывод знаков зодиака в консоли. После чистки получаем готовую программу:

Как видно, большую часть кода занимает тупое перечисление всех знаков зодиака. Мы могли бы автоматизировать это через циклы, но на улице такая хорошая погода, что мы это отложим.

Что дальше

Впереди — безграничные возможности:

  • можно сделать индивидуальный гороскоп для каждого знака;
  • научить бота новым командам;
  • присылать свежий гороскоп каждое утро;
  • наладить непрерывную работу на веб-сервере.

Напишите в комментариях, что бы вы хотели от такого бота? Что должен уметь идеальный бот с гороскопом?

Источник: thecode.media

Телеграм боты и отправка сообщений в Telegram в веб-платформе Falcon Space

Бот — это собеседник в телеграм, который отвечает по определенным алгоритмам вам в телеграм.

Вы пишете ему «привет», он обрабатывает эту команду по своим внутренним алгоритмам и выдает ответ в виде сообщения, картинки, документа и т.д.

Если вы уже подписаны на бота (т.е. уже связывались с ним ранее), то бот может вам слать сам сообщения: важные уведомления с сайта, дайджест новостей, напоминание о днях рождения и т.д.

Для бизнеса боты можно применять следующим образом:

  • уведомление пользователей с вашего сервиса
  • аналог email рассылки контента, но через бота
  • обработка типовых обращений от клиентов (эти дурацкие псевдоинтеллектуальные боты, которые всех нервируют).
  • выполнение части функций сервиса, например подача заявки, или подтверждение некоего действия.

Чтобы создать бота необходимо использовать определенный сервис, который будет отвечать за алгоритмы команд вашего бота.

Есть сервисы без необходимости программирования — т.е. бизнес-логика бота задается визуально через настройки. Если вы ищете управление ботом без программирования, то здесь найдете сравнение подобных сервисов.

Наш случай — это создание бота с управлением через процедуру SQL (на базе платформы Falcon Space). Т.е. процедура SQL определяет как обработать команды и что выдать человеку.

Как настроить бота Telegram на базе Falcon Space

Создаем Бота в Telegram на базе веб-платформы Falcon Space.

Falcon Space — это платформа для создания веб-решений с управлением через SQL. Все создается и управляется на SQL. Телеграм бот управляется полностью 1 хранимой процедурой на SQL!

На основе Falcon Space вы можете создать систему личных кабинетов на сайте со встроенным телеграм ботом.

1. Находим бота BotFather -> команда /newbot -> даем ему описание, имя (заканчивается на Bot) и картинку . В итоге получаем token

Еще по теме:  Форматировать код в Телеграм

2. В web.config / AppSettings настраиваем следующие параметры:

    1. proxyUrl — указываем прокси для Телеграма в таком виде http://45.89.19.84:11498 (если прокси не нужен, то просто оставляем пустыми поля)
    2. proxyUser, proxyPassword — указываем пользователя и пароль прокси.
    3. telegramToken — указываем токен, который мы получили при создании бота в Телеграм (в botFather).
    4. telegramOnlyTextMessages — если 1, то в обработку бота будут попадать только текстовые сообщения.

    3. В таблице as_users добавляем 2 поля:

    IF COL_LENGTH( ‘as_users’, ‘telegram’) IS NULL BEGIN ALTER TABLE as_users ADD telegram nvarchar ( 128 ) NULL END IF COL_LENGTH( ‘as_users’, ‘telegramChatID’) IS NULL BEGIN ALTER TABLE as_users ADD telegramChatID int NULL END

    4. Создаем хранимую процедуру такого вида (в разделе Системный SQL / Telegram Bot):

    • SELECT 1 — Result и Msg
    • SELECT 2 — набор команд для telegram (актуально если SELECT1.Result=1). Type, Text, ChatID, replyMessageID, DisableNotification, Channel, ButtonsJSON, parseMode
    • SELECT 3 — внешние действия, которые могут быть вызваны по команде от телеграм бота.

    5. Проверяем, что работает бот. Подписываемся на него в telegram и выполняем /start (при этом мы получим отклик Привет. ). Если нет отклика, значит бот не запущен. Попробуйте его перезапустить в разделе Системный SQL (Старт телеграм бот).

    6. Чтобы подписать пользователя на некие действия, необходимо сначала чтобы он указал свой телеграм в профиле (поле as_users.telegram). Затем он должен сделать любую команду в телеграме, отправив боту к примеру /start

    Хранение привязки чата к пользователю системы

    В as_users есть 2 поля: telegram и telegramChatID. При первом обращении, система через хранимую процедуру обновит поле telegramChatID для соответствующего пользователя с заданным telegram. После этого он сможет получать сообщения от telegram.

    1. Для прокси можно использовать IPv4 и IPv6
    2. Прокси можно купить здесь — https://proxy.market/
    3. В as_users добавлены 2 поля telegram и telegramChatID, а также добавлена хранимая процедура [as_user_getUser] (проверьте, что они есть в вашей базе).
    4. Чтобы работало внешнее действие типа telegram в системе должна быть хранимая процедура as_user_getUser

    Использование бота

    • В телеграм находим бота (например, наш бот FalconSpaceBot)
    • Пишем ему /start для инициализации (осуществляется привязка вашего пользователя к чату).
    • Выполняем различные команды, например /getupdates — если команда прописана в чате, то она будет обработана и выдан ответ.

    Включение/выключение бота

    Бот включается при запуске всего веб приложения (Global.asax/app_start).

    Чтобы его выключить вручную, можно из-под админа использовать команду (перейти на URL) /Controls/Stuff/StopTelegramBot

    Для включения — /Controls/Stuff/StartTelegramBot

    Детали реализации бота

    Реализован в виде отдельного потока, который крутится бесконечно и ожидает приема от бота обновлений. Если есть обновление, то запускает для него процедуру обработки этого обновления (сообщения в нем)

    • Для перевода строки в сообщении бота используйте Char(10);

    Howto по Telegram боту

    Не работает бот Telegram. Что делать?

    1. Проверьте что прокси прописан в web.config
    2. Проверьте что прокси не просрочен
    3. Проверьте что бот в целом отвечает на ваши команды в телеграм (если не отвечает)
    4. Попробуйте запустить заново бота /Controls/Stuff/StartTelegramBot (либо перезапустите пул приложения в IIS)
    5. Проверьте as_trace (коды TG и Exception). В нем пишутся ошибки и инициализация и завершение потока бота.
    6. Сделать as_print в процедуре и посмотреть попадает ли туда бот.
    7. Бот может остановиться если у вас запущена локальная отладка (в этом случае возникает конфликт обновлений, поэтому необходимо отключать бота при локальном запуске — в web.config убирать токен).
    8. Бот может падать, если выключается автоматически пул IIS. Необходимо его настроить так, чтобы он не отключался при простое.
    9. Если ничего не помогает, перезагрузите пул, сайт в IIS. Проверьте, что пингуется сервера API сервис Телеграма api.telegram.org .

    Как отправить сообщение пользователю в Телеграм

    Для этого используем Внешнее действие (в формах и других элементах) с кодом telegram.

    select ‘telegram’ type, ‘admin’ [to], ‘Некий текст сообщения’ [text], » buttonsJSON, » parseMode

    Также сообщение можно отправлять через уведомления (если включено Немедленное уведомление).

    buttonsJSON задает настройки кнопок.

    parseMode задает формат обработки сообщений (по умолчанию html. Возможные значения html, default, markdown, markdownv2).

    ВАЖНО! Необходима реализация процедуры tg_getChatID:

    Как отправить сообщение в закрытый чат

    Для этого используем символ «-» и chatID в параметре to

    select ‘telegram’ type, ‘text 1’ text, ‘-340984421’ [to]

    Передается chatID. Для групп это отрицательное число, которое можно получить либо экспортом сообщений группы в JSON (и там можно будет найти chat_id), либо через запрос вида:

    https://api.telegram.org/bot11111111:22222222/getUpdates

    Примечание: бот необязательно должен быть администратором группы.

    Как отправить сообщение пользователю по chatID

    Для этого используем символ «#» и chatID в параметре to

    select ‘telegram’ type, ‘text 1’ text, ‘-340984421’ [to]

    Как отправить сообщение в канал Телеграм

    Для этого используем Внешнее действие (в формах и других элементах) с кодом telegram.

    select ‘telegram’ type, » [to], ‘falconspace’ channel, ‘Некий текст сообщения’ [text]

    Еще по теме:  Как увеличить глобальный поиск в Телеграм

    Бот должен быть добавлен администратором в канал при этом.

    ВАЖНО! Необходима реализация процедуры tg_getChatID

    Как сделать рассылку пользователям при сохранении формы.

    Указываем всех пользователей в SELECT 2 + связываем с настройками показа данного сообщения (т.е. показываем тем, кто разрешил отправку на этот тип уведомлений. Поля настроек могут меняться). Пример:

    Как работать с кнопками Телеграм

    Кнопки могут быть либо Inline (в чате при ответе), либо Reply(внизу под чатом).

    Кнопки передаются в виде JSON в параметре SELECT 2 ButtonsJSON:

    SELECT ‘ < «oneTimeKeyboard»: true, «resizeKeyboard»: true, «inlineButtons»: [ [ , , ], [ , , ] ], «replyButtons»: [ [ , , ], [ , , ] ] > ‘ ButtonsJSON

    Для Inline кнопок указываем:

    • Text — название кнопки.
    • CallbackData — данные для передачи в процедуру
    • Url — если указан, то кнопка будет открывать указанный адрес. ВАЖНО! Вводите корректный URL, иначе будет исключение и вся исходная команда не будет работать.

    Для reply кнопок команда используется в поле text. Также для них есть 2 настройки:

    • ResizeKeyboard — Requests clients to resize the keyboard.
    • OneTimeKeyboard — Requests clients to hide the keyboard as soon as it’s been used.

    В процедуру для онлайн кнопок будет передаваться как команда поле callbackData, а для reply кнопок — поле text.

    Дополнительная информация о кнопках Телеграм:

    Использование Эмоджи в сообщениях

    Выбираем символ, на страницу символа берем его код UTF16 LE

    В SQL используем этот код следующим образом:

    CAST(0x3DD801DE AS NVARCHAR(MAX))

    Как блокировать телеграм аккаунты в боте

    Указываем в начале процедуры action следующий код

    В итоге бот ничего не будет отвечать клиенту.

    Также вы можете настроить хранение статуса блокирования как отдельный столбец в таблице tg_settings.

    Как выводить html теги в сообщениях

    Для этого используется параметр paseMode=’html’ (это значение используется по умолчанию).

    Есть альтернативные способы разметки — default, markdown, markdownv2.

    ВАЖНО. В html режиме отправка сообщения в телеграм поддерживает только эти теги b, strong, i, em, u, ins, s, strike, a, code, pre. Если будут запрещенные теги, то сообщение не отправится. Детали — https://core.telegram.org/bots/api#html-style

    Как быстро подписать пользователя на телеграм бота

    Для этого даем ему ссылку вида: https://t.me/FalconSpaceBot?start=1, где FalconSpaceBot — это имя вашего бота.

    Пользователь переходит на бота и нажимает там кнопку Запустить. При этом ваша команда /start должна учитывать что в этом случае придет она как /start 1

    Т.е. используем left () для определения команды start, а не точное соответствие.

    Логирование команд боту от пользователей

    В начале процедуры action установите сохранение в trace. В дальнейшем можно анализировать все сообщения через страницу диагностики /diag

    Многоступенчатые команды в боте

    Для этого используются следующие поля в tg_settings:

    1. currentCommand — текущая рабочая команда (в рамках которой пользователь вводит данные).
    2. currentCommandStep — текущий шаг в команде (для определения какой текст вывести в рамках команды).
    3. currentCommandData — здесь накапливаются данные по выполнению команды.

    Пример кода такой команды:

    В примере указан полный код процедуры бота с обработкой start, меню и бизнес-логикой ступенчатой команды. Также в коде есть пример как использовать Эмоджи в боте.

    Ошибки при работе с ботом

    Ошибка Error converting data type bigint to int. | command /start

    В этом случае необходимо изменить тип данных для этих полей с int на bigint: tg_settings.chatID и as_users.telegramChatID

    ALTER TABLE as_users ALTER COLUMN telegramChatID bigint NULL ALTER TABLE tg_settings ALTER COLUMN chatID bigint NULL

    Не работают inline кнопки

    Если они не отображаются, то проверьте, что не указаны reply кнопки (они вместе с inline кнопками не используются) и режим в команде IsReplyButtons=0

    Если используются URL, то проверьте что указан корректный URL для кнопок.

    Если кнопки есть, но при клике не реагируют, то проверьте, что в appsettings (в MVC версии — в web.config) установлен параметр telegramOnlyTextMessages = 0:

    Falcon Space — функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space

    Google поиск по нашей документации

    • Руководства
    • Основа Falcon Space
    • Основные компоненты
    • Возможности
    • Коммуникация с пользователемНастройка уведомлений для личного кабинета на сайтеHOWTO. Как настроить чат помощи для пользователейВнедрение чата в личный кабинет пользователяРабота с комментариями к объектамТелеграм боты и отправка сообщений в Telegram в веб-платформе Falcon SpaceКак создать чат бот ВКонтакте. VK бот для обработки сообщений в группе.Как сделать push уведомлениеКак отправить Email, SMS или уведомление пользователюКак отправлять SMS с сайта через smsc.ruОтправка email с шаблоном письмаКак сделать ежедневную отправку отчета по проекту в групповой чат Telegram?Настройки почты для отправки сообщений с сайтаВидеочат. Интеграция с Vox ImplantБазовая интеграция с Jitsi Meet (звонки с видео)Отправка СМС через targetsms.ruКак сделать механизм отправки различных писем по шаблону с возможностью редактирования перед отправкой
    • Дизайн, стилизация
    • Лендинги
    • Универсальный API
    • Примеры интеграций
    • Каталоги
    • Навигация
    • Документы
    • Дополнительные компоненты
    • Продвижение, SEO
    • Системные моменты
    • Системное администрирование
    • HOWTO
    • Таблицы
    • Формы
    • Загрузка файлов, картинок
    • Работа с SQL
    • HOWTO JS
    • HOWTO Верстка
    • Решение проблем

    Источник: falconspace.ru

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...