Как сделать рассылку в телеграмм боте java

Добавил пользователь Cypher
Обновлено: 05.10.2024

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. Что делать?

  1. Проверьте что прокси прописан в web.config
  2. Проверьте что прокси не просрочен
  3. Проверьте что бот в целом отвечает.на ваши команды в телеграм (если не отвечает)
  4. Попробуйте запустить заново бота /Controls/Stuff/StartTelegramBot (либо перезапустите пул приложения в IIS)
  5. Проверьте as_trace (коды TG и Exception). В нем пишутся ошибки и инициализация и завершение потока бота.
  6. Сделать as_print в процедуре и посмотреть попадает ли туда бот.
  7. Бот может остановиться если вы запущена локальная отладка (в этом случае возникает конфликт обновлений, поэтому необходимо отключать бота при локальном запуске - в web.config убирать токен).
  8. Бот может падать если выключается автоматически пул 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:

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

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

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

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

SQL-инструмент для создания личных кабинетов на сайте

Веб-платформа для создания личных кабинетов

Платформа Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки

Это быстрое внесение изменений

по ходу эксплуатации программы

Это современный интерфейс

полная адаптация под мобильные устройства

Веб-приложения на MS SQL. Партнерская программа для разработчиков и веб-студий

Вы можете разрабатывать самостоятельно или сотрудничать с нами в плане веб-разработки на платформе Falcon Space, используя только SQL и HTML.

Для работы понадобятся

  • Редактор кода, чтобы писать код. Если не знаете, какой выбрать — мы уже рассказывали. Если не умеете писать код, то вот инструкция, как его написать и запустить.
  • Node.js любой версии, выше 0.12. Нужно, чтобы библиотека для ботов заработала. Как установить Node.js.
  • Консоль. Или встроенный в систему вариант, или какой-нибудь другой.
  • VPN. Возможно но не факт, потому что Телеграм работает не везде.

Шаг 1. Регистрируем бота

Находим в поиске Телеграма бота @botFather — это главный инструмент для создания ботов. Набираем в нём /newbot .

Придумываем название и имя боту. Название — то, как он будет подписан в списке контактов. Имя — строка, по которой его можно будет найти. Обратите внимание, что имя должно оканчиваться на bot . В ответ мы получим токен — длинную последовательность символов, которая пригодится нам в будущем. Мы назвали бота echoKeksBot , но вам придётся придумать другое название, потому что это уже занято. Извините.

Создание бота

Шаг 2. Создаём проект

Создаем папку в любом месте и открываем её в консоли. Там пишем npm init -y — эта команда создаст файл package.json , который выглядит примерно так:

Содержимое файла package.json

Теперь установим node-telegram-bot-api — это библиотека для создания телеграм-ботов на Node.js. Введём команду:

Шаг 3. Запускаем бота

Тут всё просто, в консоли пишем node index.js , заходим к нашему боту в телеграм и начинаем с ним общаться. Не закрывайте консоль — бот работает только на вашем компьютере, и без консоли он не станет отвечать.

Запуск бота

Как видим, бот успешно отвечает. Но бот-повторяха — не интересно, усложним задачу. Пусть бот присылает нам картинку.

Шаг 4. Отсылаем картинку

Добавим картинку с Кексом в папку с проектом. Для отправки изображения используем метод .sendPhoto() — передадим в него id чата и путь до картинки. Получится такой код:

Запускаем бота, проверяем, работает:

Получаем от бота изображение с Кексом

Шаг 5. Добавим клавиатуру. И пёсика

Добавим фотографию милого пёсика в корень проекта. Теперь там две картинки.

Получаем от бота изображение с пёсиком

Чтобы отличить первые 2 кнопки, воспользуемся полем callback_data , где будем передавать тип кнопки. Для обработки нажатий добавим слушателя на событие callback_query , и в зависимости от значения query.data отправим нужную картинку к пользователю.

Не забудем про возможные ошибки и предложим пользователю попробовать снова, если он ввёл что-то не то. Перезапустим бота и проверим — всё работает. Главное — не закрывать консоль, иначе бот перестанет отвечать.

Полный файл с кодом: index.js.

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

Познакомьтесь с JavaScript бесплатно

На интерактивных тренажёрах. А вместе с JavaScript — бесплатное знакомство с HTML и CSS.


Вы можете отправлять рассылки в Telegram с текстом, картинкой, файлом и кнопкой перехода на свой ресурс или запуска цепочки для массового оповещения по всей базе или сегментированной группе подписчиков.

Разделы


Шаг 1. Выберите подключенного бота

Выберите подключенного бота из выпадающего списка — на аудиторию этого бота отправится рассылка.


Шаг 2. Сегментируйте аудиторию



Шаг 4. Добавьте кнопку

Вы можете добавить кнопку со ссылкой на ваш ресурс или с запуском цепочки. Разместить можно под текстом или любым другим элементом.


В первом поле напишите текст кнопки. Ограничение по длине — до 20 символов.


Клик по кнопке запустит переход по ссылке или триггерную цепочку.

Вы можете добавить до 13 кнопок. Если у вас более одной кнопки выберите порядок их размещени я — от 1 до 4 в ряд.

Шаг 5. Добавьте дополнительные элементы: картинку, файл


Поддерживаемые форматы файла: zip, pdf и gif.
Максимальный размер вложения может быть 5 мб.

Шаг 6. Предпросмотр

Элементы можно перемещать вниз и вверх, удалять и копировать. Для этого наведите на нужный блок — справа появятся кнопки.


Шаг 7. Выберите время отправки


Анализ рассылки


Эта статья — краткое руководство — как в среде Eclipse написать самый простой рабочий шаблон робота для телеграмма , который в последствии можно расширять и дописывать до полноценного бота.

Может быть полезно:

inaword 02.02.2016 08.12.2020

Базовые тесты для разработчика DApp


Пишем смарт-контракт Ethereum — это просто: Часть 11 — ICO, refund — возврат средств по softcap


Пишем смарт-контракт Ethereum — это просто: Часть 10 — ICO, исходники на Etherscan, типы эмиссии


Стандарт ERC223 и его отличия от ERC20

1 Комментарий

Огромное спасибо! Кратко и по делу:)

А если Eclipse закрыть, бот не будет работать? Как сделать, чтобы он всегда работал?

Бот будет работать все время пока ваша программу будет запущена. Естественно после закрытия Eclipse программа остановится.
Я запускаю программу бота на отдельном сервере, который у меня постоянно работает.

а как добавить виртуальную клавиатуру?

После добавления вирт клавиатуры, все появилось и все вроде работает, но
сыпет эксепшены:

Скорее всего вы запустили две копии робота.

А если у меня допустим такой сценарий — пользователь отправляет команду /старт
потом бот у него что-то спросит
а потом пользователь что-то еще ответит

как это реализовать?

Спасибо! Очень информативно! Вы не думали создать серию видео уроков написания на java? Думаю многим было бы полезно.

Уроков по Java очень много и много очень хороших и простых книг. Но если есть интересующие вас темы по каким-то слабо освещенным вопросам, то можно подумать…

1) No implementation for org.telegram.telegrambots.generics.BotSession was bound.
while locating org.telegram.telegrambots.generics.BotSession

1 error
at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1045)
at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1004)
at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1054)
at org.telegram.telegrambots.ApiContext.getInstance(ApiContext.java:25)
at org.telegram.telegrambots.TelegramBotsApi.registerBot(TelegramBotsApi.java:83)
at com.nastin.bot.SimpleBot.main(SimpleBot.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

Да действительно. Библиотеку разработчики изменили. Статью обновил.
В main добавьте самую первую строчку:

Спасибо еще раз! Благодаря Вашему вступительному уроку по созданию бота на джаве, мне удалось двинуться дальше. Хотел у Вас спросить такое: сдеть заложенна схема общения с ботом вопрос-ответ. Как можно сделать так, что бы бот через определленый промежуток времени присылал уведомления?

К сожалению с инлайн режимом не работал, но думаю ответ кроется в этой строчке:
update.getCallbackQuery().getData() — возвращает ответ.

А как сделать локализацию? Может подскажете?

Язык интерфейса меняется следующим образом:

Будьте добры напишите пожалуйте пример :

для сценария
погода — клик

response: current weather click Send /current, or weather for three days sends /weatherthree

respone:enter your location

Заранее огромное спасибо

Не работает( выдает ошибку в этой и еще некоторых строках
import org.telegram.telegrambots.TelegramApiException;

Какую ошибку выдаёт? Вариантов не много — либо библиотека другой версии, либо вы забыли подключить библиотеку.

Попробовал развернуть пример в NetBeans — работает! Только ссылка на гитхабовскую библиотеку уже битая.

У меня следующая задача: клиенты пишут боту вопросы, эти вопросы бот перефутболивает операторам (point-to-point), операторы отвечают боту, бот возвращает ответы к соответствующим клиентам.

Да,ссылка битая.Подскажите,а где вы тогда скачали библиотеку?

Добрый день, уважаемый автор.
Большое вам спасибо за небольшой, но крайне информативный урок.
Можете ещё подсказать куда копать в решении задачи написания собственного маленького клиента к телеграмму под android?
Интернет даёт ссылку на официальную библиотеку tdlib (Telegram Database Library) но я никак не могу найти ни одного достаточно простого примера её использования.

setOneTimeKeyboad(false); — тут пропущена буква r в слове Keyboard. должно быть:
setOneTimeKeyboard(false);
Вы скопировали текст из комментария. Там поправлю.

Насчет List и ArrayList — это стандартные коллекции из библиотеки Java. Добавьте импорты:

import java.util.List;
import java.util.ArrayList;

Добрый день, запускаю и получаю ошибку. Интернет через прокси, может в этом дело?

код
package test;

import org.telegram.telegrambots.exceptions.TelegramApiException;
import org.telegram.telegrambots.ApiContextInitializer;
import org.telegram.telegrambots.TelegramBotsApi;
import org.telegram.telegrambots.api.methods.send.SendMessage;
import org.telegram.telegrambots.api.objects.Message;
import org.telegram.telegrambots.api.objects.Update;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;

public class SimpleBot extends TelegramLongPollingBot

public static void main(String[] args) ApiContextInitializer.init();
TelegramBotsApi telegramBotsApi = new TelegramBotsApi();
try telegramBotsApi.registerBot(new SimpleBot());
> catch (TelegramApiException e) e.printStackTrace();
>
>

@Override
public String getBotUsername() return «———«;
>

@Override
public String getBotToken() return «—————————«;
>

private void sendMsg(Message message, String text) SendMessage sendMessage = new SendMessage();
sendMessage.enableMarkdown(true);
sendMessage.setChatId(message.getChatId().toString());
sendMessage.setReplyToMessageId(message.getMessageId());
sendMessage.setText(text);
try sendMessage(sendMessage);
> catch (TelegramApiException e) e.printStackTrace();
>
>

Точно скачали библиотеку по ссылке и добавили в проект?

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

Спасибо.
Статья агонь!

Здравствуйте как получить данные от пользователя в телеграмме
И как использовать хранилище

Я использую Ability и прокси. У меня нет теперь onReceiveUpdate. У меня есть такая штука где я подставляю инлайн клавиатуру и есть обработчик

Consumer action = upd -> responseHandler.replyToButtons(getChatId(upd), upd.getCallbackQuery().getData());

Читайте также: