Взаимодействие с телеграмом можно осуществлять как через обычные запросы по их АПИ, так и через модуль Telegraf, который реализует у себя всю нужную функциональность
Для начала работы от самого телеграма нам понадобится токен нашего бота и id чата
Чтобы получить id чата, нужно добавить в чат бота, который по полученному сообщению будет доставать id
Для генерации id бота нужно будет обратиться к @BotFather
2. Интеграция Telegraf
Первым делом нужно установить библиотеку, которая будет осуществлять взаимодействие с телегой
Контроллер тут нам не понадобится, так как мы будем пользоваться уже существующим
Добавляем в среду окружения полученные id
.env
Создадим интерфейс ITelegramOptions, который опишет ту конфигурацию, которую мы будем передавать в телеграф и ITelegramModuleAsyncOptions, который опишет те данные, которые должны будут принимать в себя опции для создания нашей собственной реализации интеграции модуля forRootAsync (как это работает в Typegoose)
src > telegram > telegram.interface.ts
Далее нам нужно сюда заинжектить ConfigService (инжектится он сюда, потому что мы подключим его через app.module.ts дальше), который предоставляет возможность взаимодействовать с .env
src > configs > telegram.config.ts
Далее создадим константу, по которой мы сможем получать опции для нашего модуля телеграма по всему приложению через инжект
src > telegram > telegram.constants.ts
Дальше в модуле мы должны описать две функции, которые мы будем использовать при внедрении данного модуля в app.module.ts:
forRootAsync() - создаст конфиг для подключения данного модуля
createAsyncOptionsProvider() - соберёт опции для подключения
src > telegram > telegram.module.ts
В сервисе уже реализуем работу с телеграмом через сам телеграф
src > telegram > telegram.service.ts
Далее нам нужно глобально подключить наш TelegramModule и добавить ему ConfigService, а так же для useFactory назначить функцию сборки конфига getTelegramConfig
src > app.module.ts
Далее подключаем TelegramModule в модуль для создания обзоров
src > review > review.module.ts
Далее нам нужно инжектнуть TelegramService в контроллер обзоров и тут же вызвать отправку сообщения через метод notify