{"id":339581,"date":"2022-10-12T15:00:08","date_gmt":"2022-10-12T15:00:08","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=339581"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=339581","title":{"rendered":"<span>\u0412\u044b\u043a\u0443\u0441\u0438, Telegram Premium \u2014 \u0431\u043e\u0442-\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 (Java, Spring, \u0432\u0435\u0431\u0445\u0443\u043a\u0438, ffmpeg)<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/7e6\/d44\/b8c\/7e6d44b8c3aac702025a059befc13cd8.jpg\" width=\"629\" height=\"364\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7e6\/d44\/b8c\/7e6d44b8c3aac702025a059befc13cd8.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<h4>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0435\u0440\u0438\u044f\u0445<\/h4>\n<p>\u042d\u0442\u043e \u0442\u0440\u0435\u0442\u044c\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0432 \u043c\u043e\u0435\u0439 \u0441\u0435\u0440\u0438\u0438 &#171;\u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445&#187; &#8212; <a href=\"https:\/\/habr.com\/ru\/post\/528694\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0435\u0440\u0432\u0430\u044f <\/a>\u0431\u044b\u043b\u0430 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u00ab\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443\u00bb Telegram-\u0431\u043e\u0442\u0443, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u043c\u0443 \u043e\u0442\u00a0<code>TelegramLongPollingBot<\/code>, <a href=\"https:\/\/habr.com\/ru\/post\/646017\/\" rel=\"noopener noreferrer nofollow\">\u0432\u0442\u043e\u0440\u0430\u044f <\/a>&#8212; \u0431\u043e\u0442\u0443 \u043d\u0430 \u0432\u0435\u0431\u0445\u0443\u043a\u0430\u0445 \u043d\u0430 Spring \u0441 \u0411\u0414 Redis \u0438 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430\u043c\u0438.<\/p>\n<h4>\u0414\u043b\u044f \u043a\u043e\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 Telegram-\u0431\u043e\u0442\u043e\u0432 \u043d\u0430 Java \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u0435\u0431\u0445\u0443\u043a\u043e\u0432 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u2014 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0434\u043b\u044f \u0432\u0430\u0441. \u0412 \u043d\u0435\u0439 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0438 \u0441 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u043e\u0442\u0430, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u0434\u043d\u0443 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u043a\u0430\u043a \u043c\u0430\u043d\u0443\u0430\u043b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043a\u0435\u043b\u0435\u0442\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u0431\u043e\u0442\u0430, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u043a \u0441\u0432\u043e\u0435\u0439 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0435.<\/p>\n<p>\u042f \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a \u0434\u043b\u044f \u0441\u0435\u0431\u044f, \u0430 \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u0434\u043b\u044f \u0443\u043c\u043d\u044b\u0445 \u2014 \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432\u044a\u0435\u0445\u0430\u0442\u044c \u0432 \u0442\u0435\u043c\u0443.<\/p>\n<h4>\u041f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f<\/h4>\n<p>\u0414\u0430\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043a\u0443\u043f\u0430\u0442\u0435\u043b\u044f\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 &#8212; \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u044d\u0442\u043e \u0431\u0438\u0437\u043d\u0435\u0441. \u0412\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u044e\u0449\u0443\u044e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0444\u0438\u0447\u0443, \u0430 \u043f\u043e\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0435\u0451 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430 \u0434\u0435\u043d\u044c\u0433\u0438 &#8212; \u043f\u043e\u0435\u0434\u0430\u043d\u0438\u0435 \u044d\u043a\u0441\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 Telegram Premium \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432, \u043d\u043e \u0437\u0430\u043f\u0440\u0435\u0442 \u043d\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0441\u0435\u0431\u0435 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0437\u0430 \u0434\u0435\u043d\u044c\u0433\u0438 &#8212; \u044d\u0442\u043e \u043d\u0438\u0437\u043a\u043e, Telegram.<\/p>\n<p>\u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043d\u0430\u0448 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448, \u0447\u0442\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u0443 \u043d\u0435\u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e <a href=\"https:\/\/t.me\/Voice4PremiumBot\" rel=\"noopener noreferrer nofollow\">Voice4PremiumBot<\/a>.<\/p>\n<h4>\u0427\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0435\u0441\u0442\u044c, \u0447\u0435\u0433\u043e \u043d\u0435\u0442<\/h4>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u043e:<\/p>\n<ul>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u0435\u043a\u0435\u043d\u0434\u0430 Telegram-\u0431\u043e\u0442\u0430 \u043d\u0430 \u0432\u0435\u0431\u0445\u0443\u043a\u0430\u0445 \u043d\u0430 Java 11 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Spring;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u0430\u0443\u0434\u0438\u043e;<\/p>\n<\/li>\n<li>\n<p>\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044e \u0444\u0430\u0439\u043b\u043e\u0432 .ogg \u0432 .mp3;<\/p>\n<\/li>\n<li>\n<p>\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e;<\/p>\n<\/li>\n<li>\n<p>\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0431\u043e\u0442\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <a href=\"https:\/\/ngrok.com\/\" rel=\"noopener noreferrer nofollow\">ngrok <\/a>\u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0435\u0431\u0430\u0433\u0430 \u0431\u043e\u0442\u0430 \u043d\u0430 \u0432\u0435\u0431\u0445\u0443\u043a\u0430\u0445;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Telegram \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u0440\u0438 \u0434\u0435\u0431\u0430\u0433\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435\u0442 \u043f\u0440\u043e:<\/p>\n<ul>\n<li>\n<p>\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 <a href=\"https:\/\/t.me\/BotFather\" rel=\"noopener noreferrer nofollow\">BotFather<\/a> (\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u043e\u0442\u0430 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0435\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u0445, \u0432\u043e\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u043f\u0430\u0432\u0448\u0438\u0439\u0441\u044f\u00a0<a href=\"https:\/\/botcreators.ru\/blog\/kak-sozdat-svoego-bota-v-botfather\/\" rel=\"noopener noreferrer nofollow\">\u043c\u0430\u043d\u0443\u0430\u043b<\/a>);<\/p>\n<\/li>\n<li>\n<p>\u0434\u0435\u043f\u043b\u043e\u0439 &#8212; \u0432 <a href=\"https:\/\/habr.com\/ru\/post\/646017\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430 Heroku, \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0443.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043b\u0435\u0436\u0438\u0442 \u043d\u0430\u00a0<a href=\"https:\/\/github.com\/taksebe-official\/voice4PremiumBot\" rel=\"noopener noreferrer nofollow\">GitHub<\/a>. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u0434\u0440\u0443\u0433 \u0435\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043b\u0438\u0447\u043a\u0443, \u0441 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c \u043f\u0440\u043e\u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e. <\/p>\n<h4>\u0411\u0438\u0437\u043d\u0435\u0441-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u043e\u0442\u0430<\/h4>\n<p>\u0411\u043e\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>\u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443-\u0441\u043f\u0440\u0430\u0432\u043a\u0443 \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \/start;<\/p>\n<\/li>\n<li>\n<p>\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0444\u0430\u0439\u043b\u044b \u0444\u043e\u0440\u043c\u0430\u0442\u0430 .mp3;<\/p>\n<\/li>\n<li>\n<p>\u043e\u043f\u043e\u0432\u0435\u0449\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0435\u0439 \u043e\u0448\u0438\u0431\u043a\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e &#8212; \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0431\u043e\u0442\u0443 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432 \u043e\u0442\u0432\u0435\u0442 \u0444\u0430\u0439\u043b .mp3 \u0441 \u0442\u0435\u043c \u0436\u0435 \u0430\u0443\u0434\u0438\u043e-\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c, \u043f\u0435\u0440\u0435\u0441\u043b\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e Telegram Premium \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0440\u0435\u0430\u043a\u0446\u0438\u044e. \u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043f\u043e\u0439\u043c\u0451\u0442, \u0447\u0442\u043e \u0444\u0430\u0439\u043b \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0438\u0437 \u0431\u043e\u0442\u0430 &#8212; \u043d\u0430 \u0444\u0430\u0439\u043b\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u043c\u0435\u0442\u043a\u0430 &#171;forwarded from &#8230;&#187;. \u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0438 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0442\u0440\u043e\u043b\u043b\u0438\u043d\u0433\u0430 &#8212; \u043d\u0430 \u0432\u0430\u0448 \u0432\u043a\u0443\u0441.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u044b\u043a\u0430\u0442\u044c &#8212;\u00a0<a href=\"https:\/\/t.me\/Voice4PremiumBot\" rel=\"noopener noreferrer nofollow\">Voice4PremiumBot<\/a>. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/0a0\/f32\/2c3\/0a0f322c3016548f8f52bccc5be18e53.jpg\" width=\"506\" height=\"583\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0a0\/f32\/2c3\/0a0f322c3016548f8f52bccc5be18e53.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<h4>\u0421\u043f\u043e\u0441\u043e\u0431\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u0437\u043b\u0435\u0442\u0435\u043b\u0438<\/h4>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0438\u043b\u0438\u0442\u044c \u0431\u043e\u0442\u0430 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0430 \u0441\u043a\u043e\u0440\u0443\u044e \u0440\u0443\u043a\u0443, \u0431\u0435\u0437 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432, \u043d\u043e Telegram \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e. \u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442 Telegram <code>fileId<\/code> \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u043d\u043e \u043a\u0430\u043a audio \u0438\u043b\u0438 document, \u0430 \u043d\u0435 voice &#8212; \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043a\u0430\u043a voice;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0444\u0430\u0439\u043b .ogg (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u043e\u0442 \u0436\u0435 <code>fileId<\/code>) \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u043d\u043e \u043a\u0430\u043a audio \u0438\u043b\u0438 document, \u0430 \u043d\u0435 voice &#8212; \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043a\u0430\u043a voice.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434, \u0447\u0442\u043e Telegram \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0439 \u0444\u0430\u0439\u043b .ogg \u043a\u0430\u043a \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 &#8212; \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 API, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 .ogg \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0444\u0430\u0439\u043b, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c Telegram Premium.<\/p>\n<p>\u041d\u0443 \u0447\u0442\u043e \u0436, \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<h4>\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/h4>\n<ul>\n<li>\n<p>\u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u043e\u0442\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0444\u0430\u0439\u043b\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 API Telegram;<\/p>\n<\/li>\n<li>\n<p>\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0438\u0436\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0443\u043d\u043a\u0442.<\/p>\n<h4>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438<\/h4>\n<p>\u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u00a0<a href=\"https:\/\/maven.apache.org\/\" rel=\"noopener noreferrer nofollow\">Apache Maven<\/a>. \u041d\u0443\u0436\u043d\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 &#8212; \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e Telegram Spring Boot,\u00a0<a href=\"https:\/\/projectlombok.org\/\" rel=\"noopener noreferrer nofollow\">Lombok<\/a> \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"https:\/\/github.com\/bramp\/ffmpeg-cli-wrapper\" rel=\"noopener noreferrer nofollow\">ffmpeg-cli-wrapper<\/a> \u0434\u043b\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0430\u0443\u0434\u0438\u043e-\u0444\u0430\u0439\u043b\u043e\u0432. <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439<\/p>\n<details class=\"spoiler\">\n<summary>pom.xml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?> &lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\"  xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"  xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\"> &lt;parent> &lt;groupId>org.springframework.boot&lt;\/groupId> &lt;artifactId>spring-boot-starter-parent&lt;\/artifactId> &lt;version>2.2.0.RELEASE&lt;\/version> &lt;relativePath\/> &lt;\/parent> &lt;modelVersion>4.0.0&lt;\/modelVersion>  &lt;groupId>ru.taksebe.telegram&lt;\/groupId> &lt;artifactId>premium-audio&lt;\/artifactId> &lt;version>1.0-SNAPSHOT&lt;\/version> &lt;name>premium-audio&lt;\/name> &lt;description>\u041d\u0430\u043a\u0430\u0436\u0438 \u043c\u0430\u0436\u043e\u0440\u0430 \u0441 \u043f\u0440\u0435\u043c\u0438\u0443\u043c\u043e\u043c!&lt;\/description> &lt;packaging>jar&lt;\/packaging>  &lt;properties> &lt;java.version>11&lt;\/java.version> &lt;slf4j.version>1.7.30&lt;\/slf4j.version> &lt;maven.compiler.source>${java.version}&lt;\/maven.compiler.source> &lt;maven.compiler.target>${java.version}&lt;\/maven.compiler.target> &lt;project.build.sourceEncoding>UTF-8&lt;\/project.build.sourceEncoding> &lt;project.reporting.outputEncoding>UTF-8&lt;\/project.reporting.outputEncoding> &lt;\/properties>  &lt;dependencies> &lt;dependency> &lt;groupId>org.springframework.boot&lt;\/groupId> &lt;artifactId>spring-boot-starter-web&lt;\/artifactId> &lt;\/dependency> &lt;dependency> &lt;groupId>org.telegram&lt;\/groupId> &lt;artifactId>telegrambots-spring-boot-starter&lt;\/artifactId> &lt;version>5.3.0&lt;\/version> &lt;\/dependency> &lt;dependency> &lt;groupId>org.projectlombok&lt;\/groupId> &lt;artifactId>lombok&lt;\/artifactId> &lt;version>1.18.20&lt;\/version> &lt;scope>compile&lt;\/scope> &lt;\/dependency> &lt;dependency> &lt;groupId>net.bramp.ffmpeg&lt;\/groupId> &lt;artifactId>ffmpeg&lt;\/artifactId> &lt;version>0.7.0&lt;\/version> &lt;\/dependency> &lt;\/dependencies>  &lt;build> &lt;plugins> &lt;plugin> &lt;groupId>org.springframework.boot&lt;\/groupId> &lt;artifactId>spring-boot-maven-plugin&lt;\/artifactId> &lt;executions> &lt;execution> &lt;goals> &lt;goal>build-info&lt;\/goal> &lt;\/goals> &lt;configuration> &lt;additionalProperties> &lt;encoding.source>${project.build.sourceEncoding}&lt;\/encoding.source> &lt;encoding.reporting>${project.reporting.outputEncoding}&lt;\/encoding.reporting> &lt;java.source>${maven.compiler.source}&lt;\/java.source> &lt;java.target>${maven.compiler.target}&lt;\/java.target> &lt;\/additionalProperties> &lt;\/configuration> &lt;\/execution> &lt;\/executions> &lt;\/plugin> &lt;\/plugins> &lt;\/build>  &lt;\/project><\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h4>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0431\u043e\u0442\u0430<\/h4>\n<p>\u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0444\u0430\u0439\u043b \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a application &#8212; \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e \u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 .yaml, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0443\u0434\u043e\u0431\u043d\u0435\u0435 .properties &#8212; \u043d\u0435 \u0441\u0443\u0442\u044c:<\/p>\n<details class=\"spoiler\">\n<summary>application.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"yaml\">telegram:   api-url: \"https:\/\/api.telegram.org\/\"   bot-name: \"\u0418\u043c\u044f \u0431\u043e\u0442\u0430 - \u043e\u0442 BotFather\"   bot-token: \"\u0422\u043e\u043a\u0435\u043d \u0431\u043e\u0442\u0430 - \u043e\u0442 BotFather\"   webhook-path: \"\u0410\u0434\u0440\u0435\u0441 \u0432\u0435\u0431\u0445\u0443\u043a\u0430 - \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0442 ngrok\" server:   port: \"\u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0435\u0431\u0430\u0433\u0430 \u0447\u0435\u0440\u0435\u0437 ngrok \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e 5000\" files:   incoming: \"\u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 - \u043d\u0443\u0436\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0442\u043e\u043c \u044d\u0442\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0445\"   outgoing: \"\u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 .mp3 - \u043d\u0443\u0436\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0442\u043e\u043c \u044d\u0442\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0445\" ffmpeg:   path: \"\u043f\u0443\u0442\u044c \u0434\u043e \u0444\u0430\u0439\u043b\u0430 ffmpeg (\u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 Linux) \u0438\u043b\u0438 ffmpeg.exe (\u0435\u0441\u043b\u0438 \u043f\u043e\u0434 Windows)\" schedule:   cron:     delete-temp-files: 0 *\/10 * ? * * \/\/\u043a\u0440\u043e\u043d \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 message:   start:     picture-file-id: \"Telegram-\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \/start\"     text: \"\u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \/start\"   too-big-voice:     text: \"\u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043b\u0438\u043d\u043d\u043e\u0433\u043e \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f (\u043b\u0438\u043c\u0438\u0442 - 10 \u043c\u0438\u043d\u0443\u0442)\"   illegal-message:     text: \"\u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u043b\u044e\u0431\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043a\u0440\u043e\u043c\u0435 \/start \u0438 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0445\"   wtf:     text: \"\u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u043e\u0442\u0430, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b:<\/p>\n<details class=\"spoiler\">\n<summary>TelegramConfig.java<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">import lombok.AccessLevel; import lombok.Getter; import lombok.experimental.FieldDefaults; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;  @Component @Getter @FieldDefaults(level = AccessLevel.PRIVATE) public class TelegramConfig {     @Value(\"${telegram.webhook-path}\")     String webhookPath;     @Value(\"${telegram.bot-name}\")     String botName;     @Value(\"${telegram.bot-token}\")     String botToken;     @Value(\"${message.too-big-voice.text}\")     String tooBigVoiceText;     @Value(\"${message.illegal-message.text}\")     String illegalMessageText;     @Value(\"${message.wtf.text}\")     String wtfText; }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0431\u043e\u0442\u0430. \u041e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043e\u0442\u0441\u0435\u043a\u0430\u0435\u0442 \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0443\u0441\u0442\u044b\u0435 \u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0445 \u0432 \u043a\u043b\u0430\u0441\u0441-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043b\u0430\u0441\u0441 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0438\u0445 \u0442\u0438\u043f\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043d\u0443\u0436\u043d\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043a\u0443 \u0438\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a:<\/p>\n<details class=\"spoiler\">\n<summary>WriteReadBot.java<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import lombok.experimental.FieldDefaults; import org.telegram.telegrambots.meta.api.methods.BotApiMethod; import org.telegram.telegrambots.meta.api.methods.send.SendMessage; import org.telegram.telegrambots.meta.api.methods.updates.SetWebhook; import org.telegram.telegrambots.meta.api.objects.Message; import org.telegram.telegrambots.meta.api.objects.Update; import org.telegram.telegrambots.starter.SpringWebhookBot; import ru.taksebe.telegram.premium.exceptions.TooBigVoiceMessageException;  import java.io.IOException;  @Getter @Setter @FieldDefaults(level = AccessLevel.PRIVATE) public class WriteReadBot extends SpringWebhookBot {     String botPath;     String botUsername;     String botToken;      String tooBigVoiceText;     String illegalMessageText;     String wtfText;      MessageHandler messageHandler;      public WriteReadBot(SetWebhook setWebhook, MessageHandler messageHandler) {         super(setWebhook);         this.messageHandler = messageHandler;     }      @Override     public BotApiMethod&lt;?> onWebhookUpdateReceived(Update update) {         try {             return handleUpdate(update);         } catch (TooBigVoiceMessageException e) {             return new SendMessage(update.getMessage().getChatId().toString(), this.tooBigVoiceText);         } catch (IllegalArgumentException e) {             return new SendMessage(update.getMessage().getChatId().toString(), this.illegalMessageText);         } catch (Exception e) {             return new SendMessage(update.getMessage().getChatId().toString(), this.wtfText);         }     }      private BotApiMethod&lt;?> handleUpdate(Update update) throws IOException {         if (update.hasCallbackQuery()) {             return null;         } else {             Message message = update.getMessage();             if (message != null) {                 return messageHandler.answerMessage(message);             }             return null;         }     } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0431\u0438\u043d \u0431\u043e\u0442\u0430, \u0438 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u0433\u043e \u0432 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0431\u043e\u0442\u0430 \u0438 \u0432\u0435\u0431\u0445\u0443\u043a\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>SpringConfig.java<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">import lombok.AllArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.telegram.telegrambots.meta.api.methods.updates.SetWebhook; import ru.taksebe.telegram.premium.telegram.MessageHandler; import ru.taksebe.telegram.premium.telegram.WriteReadBot;  @Configuration @AllArgsConstructor public class SpringConfig {     private final TelegramConfig telegramConfig;      @Bean     public SetWebhook setWebhookInstance() {         return SetWebhook.builder().url(telegramConfig.getWebhookPath()).build();     }      @Bean     public WriteReadBot springWebhookBot(SetWebhook setWebhook,                                          MessageHandler messageHandler) {         WriteReadBot bot = new WriteReadBot(setWebhook, messageHandler);          bot.setBotPath(telegramConfig.getWebhookPath());         bot.setBotUsername(telegramConfig.getBotName());         bot.setBotToken(telegramConfig.getBotToken());          bot.setTooBigVoiceText(telegramConfig.getTooBigVoiceText());         bot.setIllegalMessageText(telegramConfig.getIllegalMessageText());         bot.setWtfText(telegramConfig.getWtfText());          return bot;     } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0431\u0438\u043d \u0431\u043e\u0442\u0430, \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440:<\/p>\n<details class=\"spoiler\">\n<summary>WebhookController.java<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import org.telegram.telegrambots.meta.api.methods.BotApiMethod; import org.telegram.telegrambots.meta.api.objects.Update; import ru.taksebe.telegram.premium.telegram.WriteReadBot;  @RestController @AllArgsConstructor public class WebhookController {     private final WriteReadBot writeReadBot;      @PostMapping(\"\/premium\")     public BotApiMethod&lt;?> onUpdateReceived(@RequestBody Update update) {         return writeReadBot.onWebhookUpdateReceived(update);     } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0451 \u044d\u0442\u043e \u0432\u0435\u043b\u0438\u043a\u043e\u043b\u0435\u043f\u0438\u0435. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e <code>EnableScheduling<\/code> &#8212; \u043e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043d\u0430\u043c \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435:<\/p>\n<details class=\"spoiler\">\n<summary>PremiumAudioTelegramBotApplication.java<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling;  @SpringBootApplication @EnableScheduling public class PremiumAudioTelegramBotApplication {      public static void main(String[] args) {         SpringApplication.run(PremiumAudioTelegramBotApplication.class, args);     } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0411\u043e\u0442 \u0441\u043e\u0437\u0434\u0430\u043d, \u043d\u043e \u043e\u043d \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 &#8212; \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043d\u0435 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0430\u0443\u0434\u0438\u043e \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 Telegram.<\/p>\n<h4>\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/h4>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0431\u043e\u0442\u0443 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u043b\u0435\u0433\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 &#8212; \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>\/start<\/code> \u0438 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u0412 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043f\u0435\u0440\u0432\u0443\u044e \u0431\u043e\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0432 \u0432\u0438\u0434\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c, \u0430 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0443\u0445\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440.<\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043a \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e:<\/p>\n<ul>\n<li>\n<p>\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f &#8212; \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u0438\u043d\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u0435 10 \u043c\u0438\u043d\u0443\u0442 \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0443\u0445\u0438 &#8212; \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0432 <code>TelegramApiClient<\/code> \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432 \u043e\u0442\u0432\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b .ogg;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b .mp3 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 &#8212; \u043e\u043d &#171;\u043d\u0430\u043f\u043e\u043b\u043d\u0438\u0442&#187; \u0435\u0433\u043e \u0430\u0443\u0434\u0438\u043e \u0438\u0437 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0444\u0430\u0439\u043b .mp3 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0447\u0435\u0440\u0435\u0437 API Telegram \u0432 \u0432\u0438\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0431\u0430\u0439\u0442, \u0430 \u0445\u0443\u043b\u0438\u0433\u0430\u043d\u0441\u0442\u0432\u0430 \u0440\u0430\u0434\u0438 \u043c\u044b \u0435\u0449\u0451 \u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430, \u0434\u0435\u043b\u0430\u044f \u0435\u0433\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0438\u043c \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 Telegram:<\/p>\n<details class=\"spoiler\">\n<summary>MessageHandler.java<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">import lombok.AccessLevel; import lombok.experimental.FieldDefaults; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ByteArrayResource; import org.springframework.stereotype.Component; import org.telegram.telegrambots.meta.api.methods.BotApiMethod; import org.telegram.telegrambots.meta.api.objects.Message; import org.telegram.telegrambots.meta.api.objects.Voice; import ru.taksebe.telegram.premium.exceptions.TooBigVoiceMessageException; import ru.taksebe.telegram.premium.utils.Converter;  import java.io.File; import java.io.IOException; import java.nio.file.Files;  @Component @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) public class MessageHandler {     Converter converter;     TelegramApiClient telegramApiClient;     String tempFileNamePrefix;      public MessageHandler(Converter converter,                           TelegramApiClient telegramApiClient,                           @Value(\"${files.outgoing}\") String tempFileNamePrefix) {         this.converter = converter;         this.telegramApiClient = telegramApiClient;         this.tempFileNamePrefix = tempFileNamePrefix;     }      public BotApiMethod&lt;?> answerMessage(Message message) throws IOException {         if (message.hasVoice()) {             convertVoice(message);         } else if (message.getText() != null &amp;&amp; message.getText().equals(\"\/start\")) {             telegramApiClient.uploadStartPhoto(message.getChatId().toString());         } else {             throw new IllegalArgumentException();         }         return null;     }      private void convertVoice(Message message) throws IOException {         Voice voice = message.getVoice();          if (voice.getDuration() > 600) {             throw new TooBigVoiceMessageException();         }          File source = telegramApiClient.getVoiceFile(voice.getFileId());         File target = File.createTempFile(this.tempFileNamePrefix, \".mp3\");          try {             converter.convertOggToMp3(source.getAbsolutePath(), target.getAbsolutePath());         } catch (Exception e) {             throw new IOException();         }          telegramApiClient.uploadAudio(message.getChatId().toString(),                 new ByteArrayResource(Files.readAllBytes(target.toPath())) {                     @Override                     public String getFilename() {                         return \"Il\u0131\u0131III\u0131\u0131\u0131I\u0131\u0131\u0131\u0131\u0131\u0131IIIIll\u0131\u0131\u0131\u0131\u0131I\u0131\u0131\u0131\u0131\u0131\u0131.mp3\";                     }                 }         );     } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h4>\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0430\u0443\u0434\u0438\u043e<\/h4>\n<p>\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044e \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c ffmpeg &#8212; \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441 <a href=\"https:\/\/ffmpeg.org\/download.html\" rel=\"noopener noreferrer nofollow\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430<\/a> \u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0432 resources, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448 \u043a\u043b\u0430\u0441\u0441-\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u043c\u043e\u0433 \u0435\u0433\u043e \u043d\u0430\u0439\u0442\u0438.<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u0433\u043e &#8212; \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0432 \u0434\u0440\u0443\u0433\u043e\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"https:\/\/github.com\/bramp\/ffmpeg-cli-wrapper\" rel=\"noopener noreferrer nofollow\">ffmpeg-cli-wrapper<\/a> \u0438 \u043f\u0443\u0442\u044c \u0434\u043e \u0444\u0430\u0439\u043b\u0430 ffmpeg \u0438\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a:<\/p>\n<details class=\"spoiler\">\n<summary>Converter.java<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">import net.bramp.ffmpeg.FFmpeg; import net.bramp.ffmpeg.FFmpegExecutor; import net.bramp.ffmpeg.builder.FFmpegBuilder; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;  import java.io.File; import java.io.IOException;  @Component public class Converter {     private final FFmpeg ffmpeg;      public Converter(@Value(\"${ffmpeg.path}\") String ffmpegPath) throws IOException {         this.ffmpeg = new FFmpeg(new File(ffmpegPath).getPath());     }      public void convertOggToMp3(String inputPath, String targetPath) throws IOException {         FFmpegBuilder builder = new FFmpegBuilder()                 .setInput(inputPath)                 .overrideOutputFiles(true)                 .addOutput(targetPath)                 .setAudioCodec(\"libmp3lame\")                 .setAudioBitRate(32768)                 .done();          FFmpegExecutor executor = new FFmpegExecutor(this.ffmpeg);         executor.createJob(builder).run();          try {             executor.createTwoPassJob(builder).run();         } catch (IllegalArgumentException ignored) {\/\/\u043e\u0442\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0438 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0443\u044e \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0432\u0438\u0434\u0435\u043e\u0440\u044f\u0434\u0430 (\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043e)         }     } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h4>\u041e\u0431\u0449\u0430\u0435\u043c\u0441\u044f \u0441 API Telegram<\/h4>\n<p>API Telegram \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0432\u0438\u0434\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c (\u043c\u0435\u0442\u043e\u0434 <code>uploadStartPhoto(String chatId)<\/code>). \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438 \u0442\u0435\u043a\u0441\u0442 &#8212; \u0438\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b .ogg \u043f\u043e \u0435\u0433\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 (\u043c\u0435\u0442\u043e\u0434 <code>getVoiceFile(String fileId)<\/code>), \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u044f \u043d\u0443\u0436\u043d\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0430\u0443\u0434\u0438\u043e \u0432 \u0432\u0438\u0434\u0435 \u0444\u0430\u0439\u043b\u0430 .mp3 (\u043c\u0435\u0442\u043e\u0434 <code>uploadAudio(String chatId, ByteArrayResource value)<\/code>).<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0431\u043e\u0442\u0430, \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0432\u00a0\u0435\u043c\u0443\u00a0\u043d\u0443\u0436\u043d\u043e\u0435\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 &#8212; \u0434\u0430, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \/start \u0443 \u0432\u0430\u0441 \u0432 \u0438\u0442\u043e\u0433\u0435 \u0443\u043f\u0430\u0434\u0451\u0442, \u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u043f\u043e\u0434 \u0434\u0435\u0431\u0430\u0433\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 <code>Message<\/code> \u0438 \u043d\u0430\u0439\u0442\u0438 \u0432\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435 <code>photo<\/code> \u0432 \u043b\u044e\u0431\u043e\u043c \u0438\u0437 \u0442\u0440\u0451\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u043b\u0435 <code>fileId<\/code>.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e REST-\u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 Telegram:<\/p>\n<details class=\"spoiler\">\n<summary>TelegramApiClient.java<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">import lombok.AccessLevel; import lombok.experimental.FieldDefaults; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.io.ByteArrayResource; import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.StreamUtils; import org.springframework.web.client.RestTemplate; import org.telegram.telegrambots.meta.api.objects.ApiResponse; import ru.taksebe.telegram.premium.exceptions.TelegramFileNotFoundException; import ru.taksebe.telegram.premium.exceptions.TelegramFileUploadException;  import java.io.File; import java.io.FileOutputStream; import java.text.MessageFormat; import java.util.Objects;  @Service @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) public class TelegramApiClient {     String URL;     String botToken;      String startMessagePhotoFileId;     String startMessageText;      String tempFileNamePrefix;      RestTemplate restTemplate;      public TelegramApiClient(@Value(\"${telegram.api-url}\") String URL,                              @Value(\"${telegram.bot-token}\") String botToken,                              @Value(\"${message.start.picture-file-id}\") String startMessagePhotoFileId,                              @Value(\"${message.start.text}\") String startMessageText,                              @Value(\"${files.incoming}\") String tempFileNamePrefix) {         this.URL = URL;         this.botToken = botToken;         this.tempFileNamePrefix = tempFileNamePrefix;         this.startMessagePhotoFileId = startMessagePhotoFileId;         this.startMessageText = startMessageText;         this.restTemplate = new RestTemplate();     }      public void uploadStartPhoto(String chatId) {         LinkedMultiValueMap&lt;String, Object> map = new LinkedMultiValueMap&lt;>();         map.add(\"photo\", this.startMessagePhotoFileId);          HttpHeaders headers = new HttpHeaders();         headers.setContentType(MediaType.MULTIPART_FORM_DATA);          HttpEntity&lt;LinkedMultiValueMap&lt;String, Object>> requestEntity = new HttpEntity&lt;>(map, headers);          try {            restTemplate.exchange(                     MessageFormat.format(\"{0}bot{1}\/sendPhoto?chat_id={2}&amp;caption={3}\",                             URL, botToken, chatId, this.startMessageText),                     HttpMethod.POST,                     requestEntity,                     String.class);         } catch (Exception e) {             throw new TelegramFileUploadException();         }     }      public void uploadAudio(String chatId, ByteArrayResource value) {         LinkedMultiValueMap&lt;String, Object> map = new LinkedMultiValueMap&lt;>();         map.add(\"audio\", value);          HttpHeaders headers = new HttpHeaders();         headers.setContentType(MediaType.MULTIPART_FORM_DATA);          HttpEntity&lt;LinkedMultiValueMap&lt;String, Object>> requestEntity = new HttpEntity&lt;>(map, headers);          try {             restTemplate.exchange(                     MessageFormat.format(\"{0}bot{1}\/sendAudio?chat_id={2}\", URL, botToken, chatId),                     HttpMethod.POST,                     requestEntity,                     String.class);         } catch (Exception e) {             throw new TelegramFileUploadException();         }     }      public File getVoiceFile(String fileId) {         try {             return restTemplate.execute(                     Objects.requireNonNull(getVoiceTelegramFileUrl(fileId)),                     HttpMethod.GET,                     null,                     clientHttpResponse -> {                         File ret = File.createTempFile(this.tempFileNamePrefix, \".ogg\");                         StreamUtils.copy(clientHttpResponse.getBody(), new FileOutputStream(ret));                         return ret;                     });         } catch (Exception e) {             throw new TelegramFileNotFoundException();         }     }      private String getVoiceTelegramFileUrl(String fileId) {         try {             ResponseEntity&lt;ApiResponse&lt;org.telegram.telegrambots.meta.api.objects.File>> response = restTemplate.exchange(                     MessageFormat.format(\"{0}bot{1}\/getFile?file_id={2}\", URL, botToken, fileId),                     HttpMethod.GET,                     null,                     new ParameterizedTypeReference&lt;ApiResponse&lt;org.telegram.telegrambots.meta.api.objects.File>>() {                     }             );             return Objects.requireNonNull(response.getBody()).getResult().getFileUrl(this.botToken);         } catch (Exception e) {             throw new TelegramFileNotFoundException();         }     } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h4>\u0423\u0434\u0430\u043b\u044f\u0435\u043c \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/h4>\n<p>\u041f\u043e\u0431\u043e\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u043e\u0442\u0430 &#8212; \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b .ogg \u0438 .mp3, \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043a\u043e\u0439, \u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u044d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0440\u0435\u0434\u043a\u043e, \u0430 \u043d\u0430\u043c \u043e\u043d\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 &#8212; \u0442\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0438\u0445 \u043d\u0435 \u043f\u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c?<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e &#8212; \u0437\u0430 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 <code>EnableAsync<\/code> \u043d\u0430\u0434 \u043a\u043b\u0430\u0441\u0441\u043e\u043c \u0438 <code>Scheduled<\/code> \u043d\u0430\u0434 \u043c\u0435\u0442\u043e\u0434\u043e\u043c.<\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0441\u0442\u043e\u0439 &#8212; \u043c\u044b \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u043e\u0442\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u0435, \u0447\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0440\u0430\u043d\u0435\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0448\u0438\u0445 \u0430\u0443\u0434\u0438\u043e-\u0444\u0430\u0439\u043b\u043e\u0432, \u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u043c, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u0437\u0430\u043d\u044f\u0442\u044b \u0434\u0440\u0443\u0433\u043e\u0439 (\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0448\u0435\u0439 \u0436\u0435) \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439.<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 <code>deleteTempFiles()<\/code> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0432 cron-\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>application.yaml<\/code>, \u0441\u0435\u0439\u0447\u0430\u0441 &#8212; \u0440\u0430\u0437 \u0432 10 \u043c\u0438\u043d\u0443\u0442.<\/p>\n<details class=\"spoiler\">\n<summary>FileScheduler.java<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component;  import java.io.File; import java.io.IOException; import java.nio.file.FileSystemException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import java.util.Objects;  @EnableAsync @Component public class FileScheduler {     Logger logger = LoggerFactory.getLogger(FileScheduler.class);      private final String incomingTempFileNamePrefix;     private final String outgoingTempFileNamePrefix;      public FileScheduler(@Value(\"${files.incoming}\") String incomingTempFileNamePrefix,                          @Value(\"${files.outgoing}\") String outgoingTempFileNamePrefix) {         this.incomingTempFileNamePrefix = incomingTempFileNamePrefix;         this.outgoingTempFileNamePrefix = outgoingTempFileNamePrefix;     }      @Async     @Scheduled(cron = \"${schedule.cron.delete-temp-files}\")     public void deleteTempFiles() {         for (String path : getToDeletePathList()) {             try {                 Files.deleteIfExists(Path.of(path));             } catch (FileSystemException e) {                 logger.debug(e.getMessage());             } catch (IOException e) {                 logger.error(e.getMessage());             }         }     }      private List&lt;String> getToDeletePathList() {         File dir = new File(System.getProperty(\"java.io.tmpdir\"));          List&lt;String> tempFilePathList = new ArrayList&lt;>();          for (File file : Objects.requireNonNull(dir.listFiles())){             if (file.isFile() &amp;&amp; needToDelete(file.getName()))                 tempFilePathList.add(file.getAbsolutePath());         }          return tempFilePathList;     }      private boolean needToDelete(String fileName) {         return fileName.contains(this.incomingTempFileNamePrefix) || fileName.contains(this.outgoingTempFileNamePrefix);     } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h4>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h4>\n<p>\u041f\u043e \u043e\u043f\u044b\u0442\u0443, \u0434\u0435\u0431\u0430\u0433 Telegram-\u0431\u043e\u0442\u043e\u0432 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0449\u0435 \u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430 &#8212; \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u044b.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 REST-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0441\u0442\u0440\u043e\u043a\u0443 &#8212; \u0435\u0441\u043b\u0438 \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0437\u043b\u0435\u0442\u0435\u043b\u043e, \u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0430\u0434\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0433\u0434\u0435-\u0442\u043e \u0432 \u043a\u0438\u0448\u043a\u0430\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 Telegram.<\/p>\n<details class=\"spoiler\">\n<summary>TestController.java<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;  @RestController public class TestController {      @GetMapping(\"\/premium\/test\")     public String getTestMessage() {         return \"I believe I can fly\";     } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h4>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e<\/h4>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0432\u0435\u0431\u0445\u0443\u043a, \u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0435\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0443\u00a0<a href=\"https:\/\/ngrok.com\/\" rel=\"noopener noreferrer nofollow\"><u>ngrok<\/u><\/a>. \u0421\u043a\u0430\u0447\u0430\u0432 \u0438 \u043e\u0442\u043a\u0440\u044b\u0432 \u0435\u0433\u043e, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>ngrok http 5000<\/code> (\u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0440\u0442, \u0435\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c 5000 \u0432\u0430\u043c \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f):<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/163\/47e\/3b5\/16347e3b5b469fd19f645e7fe7ba672d.png\" width=\"500\" height=\"331\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/163\/47e\/3b5\/16347e3b5b469fd19f645e7fe7ba672d.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0430 2 \u0447\u0430\u0441\u0430 URL, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0432\u0435\u0431\u0445\u0443\u043a:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/550\/507\/84a\/55050784ac3879de9893588f685e5ae2.png\" width=\"484\" height=\"330\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/550\/507\/84a\/55050784ac3879de9893588f685e5ae2.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0432 <code>applicatiom.yaml<\/code> \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 <code>telegram.webhook-path<\/code>, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432 \u043a\u043e\u043d\u0446\u0435 <code>\/premium<\/code> (\u0442\u0430\u043a\u043e\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435).<\/p>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0432\u0435\u0431\u0445\u0443\u043a \u0432 Telegram, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432\u0438\u0434\u0430:<\/p>\n<p><code>https:\/\/api.telegram.org\/bot&lt;\u0442\u043e\u043a\u0435\u043d \u0431\u043e\u0442\u0430>\/setWebhook?url=&lt;URL \u043e\u0442 ngrok>\/premium<\/code><br \/>\u2026 \u0432\u0438\u0434\u0438\u043c \u043e\u0442\u0432\u0435\u0442:<\/p>\n<p><code>{\"ok\":true,\"result\":true,\"description\":\"Webhook was set\"}<\/code><br \/>\u2026 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0441\u0432\u043e\u0435\u0439 IDE.<\/p>\n<h4>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c<\/h4>\n<p>\u041b\u0443\u0447\u0448\u0435\u043c\u0443 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443, \u043a\u0438\u043d\u043e\u043c\u0430\u043d\u0443 \u0438 \u0434\u043e\u0431\u0440\u043e\u043c\u0443 \u0434\u0440\u0443\u0433\u0443 <a href=\"https:\/\/t.me\/desvvt\" rel=\"noopener noreferrer nofollow\">desvvt<\/a> \u0437\u0430 \u0441\u043e\u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u043e \u0438\u0434\u0435\u0438 \u0438 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/692826\/\"> https:\/\/habr.com\/ru\/post\/692826\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h4>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u0435\u0440\u0438\u044f\u0445<\/h4>\n<p>\u042d\u0442\u043e \u0442\u0440\u0435\u0442\u044c\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0432 \u043c\u043e\u0435\u0439 \u0441\u0435\u0440\u0438\u0438 &#171;\u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445&#187; &#8212; <a href=\"https:\/\/habr.com\/ru\/post\/528694\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0435\u0440\u0432\u0430\u044f <\/a>\u0431\u044b\u043b\u0430 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u00ab\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443\u00bb Telegram-\u0431\u043e\u0442\u0443, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u043c\u0443 \u043e\u0442\u00a0<code>TelegramLongPollingBot<\/code>, <a href=\"https:\/\/habr.com\/ru\/post\/646017\/\" rel=\"noopener noreferrer nofollow\">\u0432\u0442\u043e\u0440\u0430\u044f <\/a>&#8212; \u0431\u043e\u0442\u0443 \u043d\u0430 \u0432\u0435\u0431\u0445\u0443\u043a\u0430\u0445 \u043d\u0430 Spring \u0441 \u0411\u0414 Redis \u0438 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430\u043c\u0438.<\/p>\n<h4>\u0414\u043b\u044f \u043a\u043e\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 Telegram-\u0431\u043e\u0442\u043e\u0432 \u043d\u0430 Java \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u0435\u0431\u0445\u0443\u043a\u043e\u0432 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u2014 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0434\u043b\u044f \u0432\u0430\u0441. \u0412 \u043d\u0435\u0439 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0438 \u0441 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u043e\u0442\u0430, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u0434\u043d\u0443 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u043a\u0430\u043a \u043c\u0430\u043d\u0443\u0430\u043b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043a\u0435\u043b\u0435\u0442\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u0431\u043e\u0442\u0430, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u043a \u0441\u0432\u043e\u0435\u0439 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0435.<\/p>\n<p>\u042f \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a \u0434\u043b\u044f \u0441\u0435\u0431\u044f, \u0430 \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u0434\u043b\u044f \u0443\u043c\u043d\u044b\u0445 \u2014 \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432\u044a\u0435\u0445\u0430\u0442\u044c \u0432 \u0442\u0435\u043c\u0443.<\/p>\n<h4>\u041f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f<\/h4>\n<p>\u0414\u0430\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043a\u0443\u043f\u0430\u0442\u0435\u043b\u044f\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0438 &#8212; \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u044d\u0442\u043e \u0431\u0438\u0437\u043d\u0435\u0441. \u0412\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u044e\u0449\u0443\u044e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0444\u0438\u0447\u0443, \u0430 \u043f\u043e\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0435\u0451 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430 \u0434\u0435\u043d\u044c\u0433\u0438 &#8212; \u043f\u043e\u0435\u0434\u0430\u043d\u0438\u0435 \u044d\u043a\u0441\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 Telegram Premium \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432, \u043d\u043e \u0437\u0430\u043f\u0440\u0435\u0442 \u043d\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0441\u0435\u0431\u0435 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0437\u0430 \u0434\u0435\u043d\u044c\u0433\u0438 &#8212; \u044d\u0442\u043e \u043d\u0438\u0437\u043a\u043e, Telegram.<\/p>\n<p>\u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043d\u0430\u0448 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448, \u0447\u0442\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u0443 \u043d\u0435\u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e <a href=\"https:\/\/t.me\/Voice4PremiumBot\" rel=\"noopener noreferrer nofollow\">Voice4PremiumBot<\/a>.<\/p>\n<h4>\u0427\u0442\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0435\u0441\u0442\u044c, \u0447\u0435\u0433\u043e \u043d\u0435\u0442<\/h4>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u043e:<\/p>\n<ul>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u0435\u043a\u0435\u043d\u0434\u0430 Telegram-\u0431\u043e\u0442\u0430 \u043d\u0430 \u0432\u0435\u0431\u0445\u0443\u043a\u0430\u0445 \u043d\u0430 Java 11 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Spring;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u0430\u0443\u0434\u0438\u043e;<\/p>\n<\/li>\n<li>\n<p>\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044e \u0444\u0430\u0439\u043b\u043e\u0432 .ogg \u0432 .mp3;<\/p>\n<\/li>\n<li>\n<p>\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e;<\/p>\n<\/li>\n<li>\n<p>\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0431\u043e\u0442\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <a href=\"https:\/\/ngrok.com\/\" rel=\"noopener noreferrer nofollow\">ngrok <\/a>\u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0435\u0431\u0430\u0433\u0430 \u0431\u043e\u0442\u0430 \u043d\u0430 \u0432\u0435\u0431\u0445\u0443\u043a\u0430\u0445;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Telegram \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u0440\u0438 \u0434\u0435\u0431\u0430\u0433\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435\u0442 \u043f\u0440\u043e:<\/p>\n<ul>\n<li>\n<p>\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 <a href=\"https:\/\/t.me\/BotFather\" rel=\"noopener noreferrer nofollow\">BotFather<\/a> (\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u043e\u0442\u0430 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0435\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u0445, \u0432\u043e\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u043f\u0430\u0432\u0448\u0438\u0439\u0441\u044f\u00a0<a href=\"https:\/\/botcreators.ru\/blog\/kak-sozdat-svoego-bota-v-botfather\/\" rel=\"noopener noreferrer nofollow\">\u043c\u0430\u043d\u0443\u0430\u043b<\/a>);<\/p>\n<\/li>\n<li>\n<p>\u0434\u0435\u043f\u043b\u043e\u0439 &#8212; \u0432 <a href=\"https:\/\/habr.com\/ru\/post\/646017\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430 Heroku, \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0443.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043b\u0435\u0436\u0438\u0442 \u043d\u0430\u00a0<a href=\"https:\/\/github.com\/taksebe-official\/voice4PremiumBot\" rel=\"noopener noreferrer nofollow\">GitHub<\/a>. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u0434\u0440\u0443\u0433 \u0435\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043b\u0438\u0447\u043a\u0443, \u0441 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435\u043c \u043f\u0440\u043e\u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e. <\/p>\n<h4>\u0411\u0438\u0437\u043d\u0435\u0441-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u043e\u0442\u0430<\/h4>\n<p>\u0411\u043e\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>\u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443-\u0441\u043f\u0440\u0430\u0432\u043a\u0443 \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \/start;<\/p>\n<\/li>\n<li>\n<p>\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u0444\u0430\u0439\u043b\u044b \u0444\u043e\u0440\u043c\u0430\u0442\u0430 .mp3;<\/p>\n<\/li>\n<li>\n<p>\u043e\u043f\u043e\u0432\u0435\u0449\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0435\u0439 \u043e\u0448\u0438\u0431\u043a\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e &#8212; \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0431\u043e\u0442\u0443 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432 \u043e\u0442\u0432\u0435\u0442 \u0444\u0430\u0439\u043b .mp3 \u0441 \u0442\u0435\u043c \u0436\u0435 \u0430\u0443\u0434\u0438\u043e-\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c, \u043f\u0435\u0440\u0435\u0441\u043b\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e Telegram Premium \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0440\u0435\u0430\u043a\u0446\u0438\u044e. \u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043f\u043e\u0439\u043c\u0451\u0442, \u0447\u0442\u043e \u0444\u0430\u0439\u043b \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0438\u0437 \u0431\u043e\u0442\u0430 &#8212; \u043d\u0430 \u0444\u0430\u0439\u043b\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u043c\u0435\u0442\u043a\u0430 &#171;forwarded from &#8230;&#187;. \u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0438 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0442\u0440\u043e\u043b\u043b\u0438\u043d\u0433\u0430 &#8212; \u043d\u0430 \u0432\u0430\u0448 \u0432\u043a\u0443\u0441.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u044b\u043a\u0430\u0442\u044c &#8212;\u00a0<a href=\"https:\/\/t.me\/Voice4PremiumBot\" rel=\"noopener noreferrer nofollow\">Voice4PremiumBot<\/a>. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<h4>\u0421\u043f\u043e\u0441\u043e\u0431\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u0437\u043b\u0435\u0442\u0435\u043b\u0438<\/h4>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0437\u0430\u043f\u0438\u043b\u0438\u0442\u044c \u0431\u043e\u0442\u0430 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0430 \u0441\u043a\u043e\u0440\u0443\u044e \u0440\u0443\u043a\u0443, \u0431\u0435\u0437 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432, \u043d\u043e Telegram \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e. \u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442 Telegram <code>fileId<\/code> \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u043d\u043e \u043a\u0430\u043a audio \u0438\u043b\u0438 document, \u0430 \u043d\u0435 voice &#8212; \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043a\u0430\u043a voice;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0444\u0430\u0439\u043b .ogg (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u043e\u0442 \u0436\u0435 <code>fileId<\/code>) \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u043d\u043e \u043a\u0430\u043a audio \u0438\u043b\u0438 document, \u0430 \u043d\u0435 voice &#8212; \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043a\u0430\u043a voice.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434, \u0447\u0442\u043e Telegram \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0439 \u0444\u0430\u0439\u043b .ogg \u043a\u0430\u043a \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 &#8212; \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 API, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 .ogg \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0444\u0430\u0439\u043b, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c Telegram Premium.<\/p>\n<p>\u041d\u0443 \u0447\u0442\u043e \u0436, \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<h4>\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/h4>\n<ul>\n<li>\n<p>\u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u043e\u0442\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0444\u0430\u0439\u043b\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 API Telegram;<\/p>\n<\/li>\n<li>\n<p>\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0438\u0436\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0443\u043d\u043a\u0442.<\/p>\n<h4>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438<\/h4>\n<p>\u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u00a0<a href=\"https:\/\/maven.apache.org\/\" rel=\"noopener noreferrer nofollow\">Apache Maven<\/a>. \u041d\u0443\u0436\u043d\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 &#8212; \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e Telegram Spring Boot,\u00a0<a href=\"https:\/\/projectlombok.org\/\" rel=\"noopener noreferrer nofollow\">Lombok<\/a> \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"https:\/\/github.com\/bramp\/ffmpeg-cli-wrapper\" rel=\"noopener noreferrer nofollow\">ffmpeg-cli-wrapper<\/a> \u0434\u043b\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0430\u0443\u0434\u0438\u043e-\u0444\u0430\u0439\u043b\u043e\u0432. <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439<\/p>\n<details class=\"spoiler\">\n<summary>pom.xml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?> &lt;project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\"  xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"  xsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\"> &lt;parent> &lt;groupId>org.springframework.boot&lt;\/groupId> &lt;artifactId>spring-boot-starter-parent&lt;\/artifactId> &lt;version>2.2.0.RELEASE&lt;\/version> &lt;relativePath\/> &lt;\/parent> &lt;modelVersion>4.0.0&lt;\/modelVersion>  &lt;groupId>ru.taksebe.telegram&lt;\/groupId> &lt;artifactId>premium-audio&lt;\/artifactId> &lt;version>1.0-SNAPSHOT&lt;\/version> &lt;name>premium-audio&lt;\/name> &lt;description>\u041d\u0430\u043a\u0430\u0436\u0438 \u043c\u0430\u0436\u043e\u0440\u0430 \u0441 \u043f\u0440\u0435\u043c\u0438\u0443\u043c\u043e\u043c!&lt;\/description> &lt;packaging>jar&lt;\/packaging>  &lt;properties> &lt;java.version>11&lt;\/java.version> &lt;slf4j.version>1.7.30&lt;\/slf4j.version> &lt;maven.compiler.source>${java.version}&lt;\/maven.compiler.source> &lt;maven.compiler.target>${java.version}&lt;\/maven.compiler.target> &lt;project.build.sourceEncoding>UTF-8&lt;\/project.build.sourceEncoding> &lt;project.reporting.outputEncoding>UTF-8&lt;\/project.reporting.outputEncoding> &lt;\/properties>  &lt;dependencies> &lt;dependency> &lt;groupId>org.springframework.boot&lt;\/groupId> &lt;artifactId>spring-boot-starter-web&lt;\/artifactId> &lt;\/dependency> &lt;dependency> &lt;groupId>org.telegram&lt;\/groupId> &lt;artifactId>telegrambots-spring-boot-starter&lt;\/artifactId> &lt;version>5.3.0&lt;\/version> &lt;\/dependency> &lt;dependency> &lt;groupId>org.projectlombok&lt;\/groupId> &lt;artifactId>lombok&lt;\/artifactId> &lt;version>1.18.20&lt;\/version> &lt;scope>compile&lt;\/scope> &lt;\/dependency> &lt;dependency> &lt;groupId>net.bramp.ffmpeg&lt;\/groupId> &lt;artifactId>ffmpeg&lt;\/artifactId> &lt;version>0.7.0&lt;\/version> &lt;\/dependency> &lt;\/dependencies>  &lt;build> &lt;plugins> &lt;plugin> &lt;groupId>org.springframework.boot&lt;\/groupId> &lt;artifactId>spring-boot-maven-plugin&lt;\/artifactId> &lt;executions> &lt;execution> &lt;goals> &lt;goal>build-info&lt;\/goal> &lt;\/goals> &lt;configuration> &lt;additionalProperties> &lt;encoding.source>${project.build.sourceEncoding}&lt;\/encoding.source> &lt;encoding.reporting>${project.reporting.outputEncoding}&lt;\/encoding.reporting> &lt;java.source>${maven.compiler.source}&lt;\/java.source> &lt;java.target>${maven.compiler.target}&lt;\/java.target> &lt;\/additionalProperties> &lt;\/configuration> &lt;\/execution> &lt;\/executions> &lt;\/plugin> &lt;\/plugins> &lt;\/build>  &lt;\/project><\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h4>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0431\u043e\u0442\u0430<\/h4>\n<p>\u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0444\u0430\u0439\u043b \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a application &#8212; \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e \u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 .yaml, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u0443\u0434\u043e\u0431\u043d\u0435\u0435 .properties &#8212; \u043d\u0435 \u0441\u0443\u0442\u044c:<\/p>\n<details class=\"spoiler\">\n<summary>application.yaml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"yaml\">telegram:   api-url: \"https:\/\/api.telegram.org\/\"   bot-name: \"\u0418\u043c\u044f \u0431\u043e\u0442\u0430 - \u043e\u0442 BotFather\"   bot-token: \"\u0422\u043e\u043a\u0435\u043d \u0431\u043e\u0442\u0430 - \u043e\u0442 BotFather\"   webhook-path: \"\u0410\u0434\u0440\u0435\u0441 \u0432\u0435\u0431\u0445\u0443\u043a\u0430 - \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0442 ngrok\" server:   port: \"\u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0435\u0431\u0430\u0433\u0430 \u0447\u0435\u0440\u0435\u0437 ngrok \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e 5000\" files:   incoming: \"\u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 - \u043d\u0443\u0436\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0442\u043e\u043c \u044d\u0442\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0445\"   outgoing: \"\u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 .mp3 - \u043d\u0443\u0436\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0442\u043e\u043c \u044d\u0442\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0445\" ffmpeg:   path: \"\u043f\u0443\u0442\u044c \u0434\u043e \u0444\u0430\u0439\u043b\u0430 ffmpeg (\u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 Linux) \u0438\u043b\u0438 ffmpeg.exe (\u0435\u0441\u043b\u0438 \u043f\u043e\u0434 Windows)\" schedule:   cron:     delete-temp-files: 0 *\/10 * ? * * \/\/\u043a\u0440\u043e\u043d \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 message:   start:     picture-file-id: \"Telegram-\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \/start\"     text: \"\u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \/start\"   too-big-voice:     text: \"\u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043b\u0438\u043d\u043d\u043e\u0433\u043e \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f (\u043b\u0438\u043c\u0438\u0442 - 10 \u043c\u0438\u043d\u0443\u0442)\"   illegal-message:     text: \"\u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u043b\u044e\u0431\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043a\u0440\u043e\u043c\u0435 \/start \u0438 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0445\"   wtf:     text: \"\u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u043e\u0442\u0430, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b:<\/p>\n<details class=\"spoiler\">\n<summary>TelegramConfig.java<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">import lombok.AccessLevel; import lombok.Getter; import lombok.experimental.FieldDefaults; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;  @Component @Getter @FieldDefaults(level = AccessLevel.PRIVATE) public class TelegramConfig {     @Value(\"${telegram.webhook-path}\")     String webhookPath;     @Value(\"${telegram.bot-name}\")     String botName;     @Value(\"${telegram.bot-token}\")     String botToken;     @Value(\"${message.too-big-voice.text}\")     String tooBigVoiceText;     @Value(\"${message.illegal-message.text}\")     String illegalMessageText;     @Value(\"${message.wtf.text}\")     String wtfText; }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0431\u043e\u0442\u0430. \u041e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043e\u0442\u0441\u0435\u043a\u0430\u0435\u0442 \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0443\u0441\u0442\u044b\u0435 \u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0445 \u0432 \u043a\u043b\u0430\u0441\u0441-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043b\u0430\u0441\u0441 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0438\u0445 \u0442\u0438\u043f\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043d\u0443\u0436\u043d\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043a\u0443 \u0438\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a:<\/p>\n<details class=\"spoiler\">\n<summary>WriteReadBot.java<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"java\">import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import lombok.experimental.FieldDefaults; import org.telegram.telegrambots.meta.api.methods.BotApiMethod; import org.telegram.telegrambots.meta.api.methods.send.SendMessage; import org.telegram.telegrambots.meta.api.methods.updates.SetWebhook; import org.telegram.telegrambots.meta.api.objects.Message; import org.telegram.telegrambots.meta.api.objects.Update; import org.telegram.telegrambots.starter.SpringWebhookBot; import ru.taksebe.telegram.premium.exceptions.TooBigVoiceMessageException;  import java.io.IOException;  @Getter @Setter @FieldDefaults(level = AccessLevel.PRIVATE) public class WriteReadBot extends SpringWebhookBot {     String botPath;     String botUsername;     String botToken;      String tooBigVoiceText;     String illegalMessageText;     String wtfText;      MessageHandler messageHandler;      public WriteReadBot(SetWebhook setWebhook, MessageHandler messageHandler) {         super(setWebhook);         this.messageHandler = messageHandler;     }      @Override     public BotApiMethod&lt;?> onWebhookUpdateReceived(Update update) {         try {             return handleUpdate(update);         } catch (TooBigVoiceMessageException e) {             return new SendMessage(update.getMessage().getChatId().toString(), this.tooBigVoiceText);         } catch (IllegalArgumentException e) {             return new SendMessage(update.getMessage().getChatId().toString(), this.illegalMessageText);         } catch (Exception e) {             return new<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-339581","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/339581","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=339581"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/339581\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=339581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=339581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=339581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}