Допустим, вы хотите аутентифицировать пользователей через телеграм и после этого отправлять им уведомления. В 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); }
Протестируем наше приложение:

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

👨💻 Джуниор