Отложенные сообщения telegram bot api
Falcon Space - это платформа для создания веб-решений с управлением через SQL. Все создается и управляется на SQL. Телеграм бот управляется полностью 1 хранимой процедурой на SQL!
2. В web.config / AppSettings настраиваем следующие параметры:
3. В таблице as_users добавляем 2 поля:
4. Создаем хранимую процедуру такого вида (в разделе Системный SQL / Telegram Bot):
- SELECT 1 - Result и Msg
- SELECT 2 - набор команд для telegram (актуально если SELECT1.Result=1). Type, Text, ChatID, replyMessageID, DisableNotification, Channel, ButtonsJSON, parseMode
5. Проверяем, что работает бот. Подписываемся на него в telegram и выполняем /start (при этом мы получим отклик Привет. ). Если нет отклика, значит бот не запущен. Попробуйте его перезапустить в разделе Системный SQL (Старт телеграм бот).
6. Чтобы подписать пользователя на некие действия, необходимо сначала чтобы он указал свой телеграм в профиле (поле as_users.telegram). Затем он должен сделать любую команду в телеграме, отправив боту к примеру /start
Хранение привязки чата к пользователю системы
Использование бота
- В телеграм находим бота (например, наш бот FalconSpaceBot)
- Пишем ему /start для инициализации (осуществляется привязка вашего пользователя к чату).
- Выполняем различные команды, например /getupdates - если команда прописана в чате, то она будет обработана и выдан ответ.
Включение/выключение бота
Бот включается при запуске всего веб приложения (Global.asax/app_start).
Чтобы его выключить в вручную можно из-под админа использовать команду (перейти на URL) /Controls/Stuff/StopTelegramBot
Для включения - /Controls/Stuff/StartTelegramBot
Детали реализации бота
Howto по Telegram боту
Не работает бот Telegram. Что делать?
- Проверьте что прокси прописан в web.config
- Проверьте что прокси не просрочен
- Проверьте что бот в целом отвечает.на ваши команды в телеграм (если не отвечает)
- Попробуйте запустить заново бота /Controls/Stuff/StartTelegramBot (либо перезапустите пул приложения в IIS)
- Проверьте as_trace (коды TG и Exception). В нем пишутся ошибки и инициализация и завершение потока бота.
- Сделать as_print в процедуре и посмотреть попадает ли туда бот.
- Бот может остановиться если вы запущена локальная отладка (в этом случае возникает конфликт обновлений, поэтому необходимо отключать бота при локальном запуске - в web.config убирать токен).
- Бот может падать если выключается автоматически пул IIS. Необходимо его настроить так, чтобы он не отключался при простое.
Для этого используем Внешнее действие (в формах и др элементах) с кодом telegram.
У пользователя должны быть корректно проставлены поля telegram (заносится сначала вручную для пользователя его логин) и telegramChatID(проставляется автоматически при первом обращении юзера к боту через Телеграм) в as_users. Также можно указать имя в виде '@username' - тогда отправка будет по логину телеграма (если он есть в tg_settings).
buttonsJSON задает настройки кнопок.
ВАЖНО! Необходима реализация процедуры tg_getChatID:
Для этого используем символ "-" и chatID в параметре to
Примечание: бот необязательно должен быть администратором группы.
Для этого используем Внешнее действие (в формах и др элементах) с кодом telegram.
Бот должен быть добавлен администратором в канал при этом.
ВАЖНО! Необходима реализация процедуры tg_getChatID
Как сделать рассылку пользователям при сохранении формы.
Как работать с кнопками Телеграм
Кнопки могут быть либо Inline (в чате при ответе), либо Reply(внизу под чатом).
Кнопки передаются в виде JSON в параметре SELECT 2 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 используем этот код следующим образом:
Для этого используется параметр paseMode='html' (это значение используется по умолчанию).
Есть альтернативные способы разметки - default, markdown, markdownv2.
Как быстро подписать пользователя на телеграм бота
Пользователь переходит на бота и нажимает там кнопку Запустить. При этом ваша команда /start должна учитывать что в этом случае придет она как /start 1
Т.е. используем left () для определения команды start, а не точное соответствие.
Многоступенчатые команды в боте
Для этого используются следующие поля в tg_settings:
- currentCommand - текущая рабочая команда (в рамках которой пользователь вводит данные).
- currentCommandStep - текущий шаг в команде (для определения какой текст вывести в рамках команды).
- currentCommandData - здесь накапливаются данные по выполнению команды.
Пример кода такой команды:
В примере указан полный код процедуры бота с обработкой start, меню и бизнес-логикой ступенчатой команды. Также в коде есть пример как использовать Эмоджи в боте.
Хоть и с большим запозданием, публикую шпаргалку по telegram bot api, может, будет полезна.
Прикладываю официальную документацию, и готовый набор методов для работы с telegram. Обработку тестировал на 8.3.15.1747.
В тексте я буду давать ссылки на вторую документацию т.к. для ее просмотра не нужны премудрости для обхода блокировок.
В клиенте telegram ищем бота BotFather
Далее отправляем ему команды
/start
/newbot
Представление имени моего бота
unikalnoe_imya_bot
После этого бот выдаст нам данные для подключения, а именно токен вида 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
Скринами
Соединение
В документации написано:
Код создания соединения :
Прокси
Есть огромное количество сайтов предоставляющий список таких бесплатных прокси, я использую getMe
Я специально буду повторять блоки кода, дабы Вы копировали сразу рабочий вариант, конечно это все нужно обернуть в функции и процедуры
Метод getMe вернет в теле ответа JSON структуру
"ok":true - Означает, что авторизация прошла успешно и Ваш токен валидный.
Short polling - это классическая схема, когда отправляя запрос мы сразу получаем результат его выполнения.
т.е. вы заводите РС с обработанными update_id и каждый раз анализируете - обработан полученный id или нет. Можно завести константу с последним обработанным update_id и сравнивать ее на < или > с полученным
Для работы в такой схеме необходимо договориться с сервером - какой таймаут считать допустимым, для этого у метода
Для переключения режима обмена на вебхуки существует метод InlineKeyboardMarkup
Загрузка полученных файлов
Для этого существует GET-метод
Ответ сервиса getFile
При этом запросе сервер ответит, что все Ок
Показ привью отправленной ссылки можно отключить с помощью параметра disable_web_page_preview
Для этого нужно к запросу добавить строку &disable_web_page_preview=true
Кнопки (клавиатуры)
У метода sendMessage есть еще один очень интересный параметр - reply_markup, который отвечает за быстрые ответы.
Кнопка - это объект InlineKeyboardButton, у которого только одно обязательное поле - text
Есть еще ряд полей, основное из которых - callback_data. Это данные, которые будут отправлены после нажатия кнопки пользователем. Сюда можно записывать идентификаторы из 1С (документа или справочника), числа и т.д. для последующей обработки.
Второй полезный параметр - url, в котором указывается ссылка, которая будет открыта при нажатии на кнопку
Пример JSON-описания клавиатуры
KeyboardButton с основным полем text, данный объект можно не использовать и сразу формировать массив строк.
Еще один важный параметр клавиатуры, но не обязательным, является resize_keyboard, который отвечает за "авто высоту" кнопок.
По умолчанию данный параметр установлен в false и клавиатура растягивается на высоту основной клавиатуры, что выглядит громоздко (см. скрин в примере).
Еще один опциональный параметр - one_time_keyboard, который при установке в true скрывает клавиатуру после нажатия кнопки.
ReplyKeyboardHide - Своего рода команда управления видимостью для клавиатуры
Отправка контактов
Метод похож на sendMessage за исключением нескольких обязательных полей:
phone_number - строковое представление телефонного номера
first_name - Имя контакта
Отправка документов (файлов)
За отправку файлов отвечает POST-метод
Со строковыми значениями вопросов не возникает - делаем СтрЗаменить и все, но есть еще и содержимое файла, которое нужно в итоговый запрос подсунуть.
Для решения этой проблемы у 1С есть метод ОбъединитьФайлы, который объединяет переданный в него массив файлов в один.
Разделим шаблон на части - певая это текст до %СодержимоеФайла%, а вторая это текст после %СодержимоеФайла%. Запишем эти 2 текста в файлы и используем ОбъединитьФайлы подсунув между текстовиками отправляемый файл.
Описание
Когда в Telegram появились каналы, поначалу я к ним относился как к неудачной попытке клонировать Twitter. Сразу появились тупые канальчики с тупыми картиночками, что только усугубляло положение дел. Однако сейчас, спустя больше месяца [этот текст был написан в 2015 – прим. авт.], моё мнение изменилось на диаметрально противоположное. Призванные заменить списки рассылки (ими вообще кто-то пользовался?), каналы дали возможность получать огромное количество контента, которым можно делиться, который можно сохранять.
В Bot FAQ есть интересная фраза: “Мы будем внимательно смотреть на то, как люди пользуются ботами и развивать их в том направлении”. С учетом того, что многие боты занимались именно рассылкой информации, каналы - это очень логичный и правильный шаг в развитии автоматизированных средств.
С точки зрения программиста, каналы решают сразу несколько ключевых проблем:
Лично я заметил, что некоторые паблики и группы ВКонтакте стали дублировать свои записи в каналы Telegram. Сегодня мы научимся делать то же самое без помощи каких-либо конструкторов или сторонних веб-сайтов. Чтобы не сильно заморачиваться, будем постить только ссылку на пост, превью к ней и так даст необходимый минимум информации о посте.
Получаем записи
Во-первых, не забудьте сделать нужного бота администратором канала, иначе фокус не удастся. Во-вторых, обратите внимание, что в импортах появилась библиотека eventlet , она поможет нам избежать проблем при получении записей из ВК. В-третьих, в указанный txt-файл будем записывать номер верхнего поста на момент проверки, я решил не заморачиваться с созданием key-value хранилищ, ради одного числа-то. В-четвёртых, в качестве параметра BASE_POST_URL указываем ссылку на любой пост из нашей группы без последнего числа.
Иногда ВК начинает дурить и не возвращает список постов за приемлемое время. В этом случае, нам нужно отвалиться по таймауту и пропустить проверку. Можно, конечно, попробовать ещё раз, но мы люди не настойчивые :)
Суть простая: получилось - возвращаем объект с постами. Не получилось - возвращаем None. Теперь перейдем непосредственно к парсингу. Алгоритм будет такой:
По поводу п.8: дополнительно предусмотрим в нашей программе два режима: в первом режиме скрипт постоянно работает, засыпая после каждой итерации на 4 минуты; во втором режиме скрипт просто завершает работу, что позволяет ставить его в планировщик cron. В определении режима нам поможет константная переменная SINGLE_RUN, которую надо не забыть указать где-нибудь вверху.
Осталось дело за малым - написать логику запуска всего процесса и инициализировать логгер, который будет писать в текстовый файлик обо всех событиях в жизни бота:
Перед запуском бота, создадим вручную файл last_known_id.txt и впишем в него один из последних числовых ID, в моём случае это было чудесное число 1893. После включения бота, в зависимости от значения SINGLE_RUN, он будет либо постоянно работать, проверяя каждые 4 минуты на наличие новых постов, либо завершится после окончания первой проверки. Для себя я выбрал второй вариант, добавив скрипт в cron.
На сегодня всё, теперь вы можете легко и просто настроить автопостинг записей практически из любой группы ВК в свой канал.
Я, как автор Телеграм-канала со стажем, прекрасно знаю всю боль своих коллег. Запланировать пост, согласовать рекламу, скинуть цены, получить фидбек от подписчиков, очистить чат от спама… Это лишь малая часть работы админов.
И для каждой задачи приходится искать свой инструмент, проверять его работу, и понимать, что он никуда не годится. А если годится, то через пару месяцев он просто перестаёт работать.
Поэтому, если хочешь сделать что-то хорошо, сделай это сам. Админ одного из самых крупных каналов в Телеграм сделал @fleepbot.
@fleepbot — бот для отложенного постинга с функцией конструкторов ботов обратной связи, модерации и прочего.
Зачем нужен автопостинг
Для авторов небольших каналов, возможно, хватит стандартной отложки. А вот владельцам крупных площадок или даже нескольких этого явно не хватает. Вот, к примеру, как выглядит план постов стандартными средствами Телеграм.
Ориентироваться в этой ленте сложнее с каждым новым постом. А быстро понять, когда и какой пост выходит, практически невозможно. Кстати, Telegram на Windows не умеет редактировать отложенные посты. Придётся создавать новый.
Другой вариант — воспользоваться веб-сервисами для постинга. Этот вариант уже значительно удобнее и лучше.
Сразу же понятно, когда и какой пост выходит. Можно легко отредактировать или перенести любую публикацию.
И, казалось бы, вопрос решён, но нет. При общении с коллегами я часто замечаю, что они почему-то не любят веб-сервисы. Им хочется работать, не покидая привычного мессенджера. И это понятно. Телеграм — всё под рукой, а вот компьютер — нет.
Здесь на помощь приходят боты для автопостинга. К примеру, знаменитый @ControllerBot, который кажется почти идеальным. Но он часто падает, посты выходят не по расписанию, а иногда даже дублируются.
И странно, что все им продолжают пользоваться. Поэтому я и решил показать, что есть альтернативы.
Настройка @fleepbot
Настройка @fleepbot немного отличается от конечной цели: создание бота для постинга или создание бота для обратной связи. В любом случае первым шагом будет нажатие кнопки «Создать бота»:
Затем нужно выбрать тип создаваемого бота. @fleepbot вкратце объясняет разницу между ними, а я расскажу о них в следующем разделе.
На следующем шаге следует стандартная рутина по созданию и привязке бота через @BotFather. Описывать эти шаги я не буду. Во-первых, в сети и так полно инструкций на эту тему. Во-вторых, в боте и так всё чётко расписано.
В итоге вы получаете своего бота для постинга или обратной связи. Не забудьте добавить его в админы канала.
Бот для постинга
Этот бот решает три самые больные темы для админов Телеграм-каналов:
- Красивые отложенные публикации, добавление реакций, кнопок и альбомов, удобный контент-план;
- Статистика ваших доходов и расходов;
- Создание и хранение рекламных креативов.
Создание поста
Для создания нового поста нажимаем «Создать пост». И далее процесс ничем не отличается от аналогичного в других ботах-отложках. Отправляете нужный текст с форматированием, выбираете время публикации, и готово.
Но именно здесь зарылись основные отличия. Перед публикацией поста @fleepbot предложит множество вариантов для него.
Большинство кнопок понятны. Это редактирование поста, добавление реакций и кнопок, управление предпросмотром, изменение вёрстки, закрепление поста, удаление по таймеру, публикация со звуком или без.
Но есть и новые.
Редактирование опубликованных постов работает по аналогичному принципу.
Контент-план
Про этот раздел рассказывать подробно не имеет смысла. Всё просто: перед вами календарь с возможностью просмотра всех запланированных публикаций на выбранную дату.
Реклама выделена денежкой, что круто. При нажатии на отложенный пост можно быстро перейти к его редактированию.
Статистика
Это такой раздел с мини-бухгалтерией и общей статистикой для админов.
В самом начале отображается краткая статистика по приросту канала и стоимости подписчика. Средняя цена считается как прирост/расход. Если канал не вырос, то средняя цена не показывается.
Ниже — число запланированных публикаций с разделением на обычные и рекламные посты.
А ещё ниже — статистика по доходу с постов, среднему чеку, дополнительным доходам и расходам. В итоге рассчитывается чистая прибыль.
В самом конце — статистика по активности авторов канала.
Доходы считаются автоматически для рекламных постов. Вручную можно внести остальные доходы, дополнительные доходы и расходы.
Всю статистику можно посмотреть за определённый день или период.
Креативы
Для меня этот раздел не очень актуален, а вот админы, к примеру, образовательных каналов любят такое. Ну и для рекламы удобно.
Креатив — это, по сути, шаблон публикации для канала или рекламы. Это может быть текст, картинка, видео, гифка, стикер или уже готовая публикация из другого источника.
Можно быстро создать такую «заглушку», а в будущем использовать её.
Бот обратной связи
Бот обратной связи поможет получить фидбек от подписчиков или автоматизировать общение с рекламодателями. Для этого у него есть три крутые фишки:
- Приём и обработка обратной связи;
- Создание прайсов и наглядных инструкций;
- Рассылки по подписчикам и клиентам.
При первом запуске бота нужно будет произвести небольшую настройку. Какую именно, — зависит от целей бота. Поэтому рассказывать подробно я не буду.
Кнопка «Кнопки» добавляет кнопки. Если вы хотите сделать бота для общения с рекламодателями, на кнопки можно настроить получение прайсов для каналов.
Стоимость @fleepbot начинается от 199 рублей — при оплате за месяц, или 154 рублей — при оплате на год.
За эти деньги снимаются любые ограничения для бота-отложки и бота-фидбека.
@fleepbot точно подойдёт тем авторам, которые любят вести все дела в любимом мессенджере. Бот объединяет в себе самые необходимые инструменты для ведения канала и общения с подписчиками и рекламодателями.
При этом я рассказал про самую первую версию бота. В будущем в нём появится бот для модерации чатов, веб-версия и многое другое. И что самое интересное, всё это уже будет включено в ваш тарифный план.
А ещё топовая техподдержка помогает решить любые вопросы 24/7 со средним временем ответа равным одной минуте. Ребята в индивидуальном порядке помогут человеческим языком без ссылок на тупые гайды, которые обычно никто, кроме создателей, не читает.
Читайте также: