Отправляем пуш уведомления в телеграм через Spring Boot

от автора

Допустим, вы хотите аутентифицировать пользователей через телеграм и после этого отправлять им уведомления. В Spring Boot приложении это сделать довольно просто ✨

Аутентификация

Подробно про аутентификацию писал в этой статье. Здесь кратко пробегусь по основным моментам.

Получаем собственный домен

Для аутентификации нам понадобится домен. Его можно получить через ngrok.

После получения домена, создайте файл с конфигурацией ngrok:

version: 2 authtoken: YOUR_NGROK_TOKEN tunnels:   httpbin:     proto: http     addr: 8080       hostname: needed-filly-suitable.ngrok-free.app

И docker-compose с контейнером ngrok:

services:   ngrok:     image: ngrok/ngrok:latest     command:       - "start"       - "--all"       - "--config"       - "/etc/ngrok.yml"     volumes:       - ./ngrok.yml:/etc/ngrok.yml     network_mode: host

После запуска контейнера, перейдите на http://localhost:4040 и проверьте, что домен доступен

Создаем телеграм бота

Далее, переходим в BotFather, создаем бота и привязываем к нему полученный домен

Виджет для авторизации

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

Копируем сгенерированный код и переходим в наше приложение.

Эндпоинт для аутентификации

В папку src/main/resources/static добавляем файл с нашим скриптом.

Далее создаем контроллер, который будет отдавать этот скрипт:

@RestController @RequestMapping("/tg") public class TelegramController {      @Value("classpath:static/telegram-auth-widget.html")     private Resource authWidget;      @GetMapping(value = "/auth/widget", produces = MediaType.TEXT_HTML_VALUE)     public ResponseEntity<Resource> getAuthWidget() {         return ResponseEntity.ok()                 .header(HttpHeaders.CONTENT_DISPOSITION, "inline")                 .body(authWidget);     } }

Переходим в браузер, аутентифицируемся и сохраняем полученное id

Отправка уведомлений

Для отправки уведомлений нам понадобится зависимость telegrambots-client.
В статьях по созданию тг ботов и в документации вы найдете и другие зависимости, но для односторонней отправки сообщений нам будет достаточно этой.

Создаем клиент, в который передадим токен бота и создаем метод для отправки сообщений:

private final TelegramClient tgClient = new OkHttpTelegramClient("YOUR_TELEGRAM_TOKEN");  @PostMapping(value = "/{userId}/notifications", consumes = MediaType.TEXT_PLAIN_VALUE) public void sendMessageToTelegram(@PathVariable Long userId,  @RequestBody String text) throws TelegramApiException {   SendMessage message = SendMessage.builder()             .chatId(userId)             .text(text)             .build();        tgClient.execute(message); }

Протестируем наше приложение:

Получаем уведомление:

👨‍💻 Джуниор


ссылка на оригинал статьи https://habr.com/ru/articles/871558/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *