diff --git a/src/main/java/kz/konturai/parser/controller/TargetingCampaignController.java b/src/main/java/kz/konturai/parser/controller/TargetingCampaignController.java index 87d4dcf..519dc9e 100644 --- a/src/main/java/kz/konturai/parser/controller/TargetingCampaignController.java +++ b/src/main/java/kz/konturai/parser/controller/TargetingCampaignController.java @@ -311,6 +311,16 @@ public class TargetingCampaignController { } catch (kz.konturai.parser.exception.FacebookTokenExpiredException e) { log.error("Facebook token expired: {}", e.getMessage()); return ResponseEntity.badRequest().body(Map.of("success", false, "error", "Токен Facebook истёк. Пожалуйста, обновите токен (facebook.page.token) в файле application.properties.")); + } catch (RuntimeException e) { + if (e.getMessage() != null && e.getMessage().contains("[Facebook] API Error")) { + log.error("Facebook API Error: {}", e.getMessage()); + if (e.getMessage().contains("publish_actions")) { + return ResponseEntity.badRequest().body(Map.of("success", false, "error", "Указан токен Пользователя, а не Страницы (User Token). Facebook запрещает публикацию через личные токены. Сгенерируйте именно Page Access Token.")); + } + return ResponseEntity.badRequest().body(Map.of("success", false, "error", "Ошибка со стороны Facebook API: " + e.getMessage())); + } + log.error("Failed to publish post: ", e); + return ResponseEntity.internalServerError().body(Map.of("success", false, "error", "Не удалось опубликовать пост")); } catch (Exception e) { log.error("Failed to publish post: ", e); return ResponseEntity.internalServerError().body(Map.of("success", false, "error", "Не удалось опубликовать пост")); diff --git a/src/main/java/kz/konturai/parser/service/MarketingStrategyV3Service.java b/src/main/java/kz/konturai/parser/service/MarketingStrategyV3Service.java index 3acd43c..96b37dc 100644 --- a/src/main/java/kz/konturai/parser/service/MarketingStrategyV3Service.java +++ b/src/main/java/kz/konturai/parser/service/MarketingStrategyV3Service.java @@ -1213,8 +1213,7 @@ public class MarketingStrategyV3Service { byte[] imageData = null; if (fbPost.getImageFilename() != null && !fbPost.getImageFilename().isEmpty()) { - try { - java.io.InputStream imageStream = minIOService.downloadFile(fbPost.getImageFilename()); + try (java.io.InputStream imageStream = minIOService.downloadFile(fbPost.getImageFilename())) { imageData = imageStream.readAllBytes(); } catch (Exception e) { log.warn("Failed to load image for post: {}", e.getMessage()); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3db5cd5..44495af 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -141,7 +141,7 @@ telegram.api.timeout=30000 facebook.app.id=1874060259875994 facebook.app.secret=1e096c34d375641b7c4d05fff64299ea facebook.page.id=918835061309575 -facebook.page.token=EAAaocqgT3JoBRBrVt5sFx4MzR7JAiNjNaFZAx33rfH7f8ZB8WZBkLqetc4gKuJARVgOE5NNBw3Ssz80M1vHbCQxTu0DMGAGivenia9xaMArLXj3yPRQt0ArEW5MBWc7jLpNEGQVmCrnEUSxc5hpHsKQHgLnfO0mUDZArmCei43whitMUreNewR9F2MyUGTNopuKhPayYBh4KxYsGQSW8NZAYxFl7ZAjE4li8k8KtFvAAIaRKTgSXhzTse9c4ixHeW3m0IZAHTdo6YB4ovLAJ4BpFe31 +facebook.page.token=EAAaocqgT3JoBREmL24hF03b8tcgq3S6P3IZAzvUWFdOAfLA9vBpMo9cS1Ai19bC0LXvCM9Q3g4DZBkCNUuetjjVaPBhgnU1iSIYRP9nH7o58R99nZCpBGgIUn4sQXIC4NDDIFZBF9lVLD1havkgQ5IEbHG6UcMK6LRk6ZAHYPHZBjTGkaLxUcxuloZB8TSBgfgn9LziwzJKgqPspDXIE9g1axZAC6dAZBzPDFIV82bTMHLC2zfZAIhQM16cNl0uT4d86O7pgyqZAG6VK7B0KiZA7TDjamJxU # Facebook Hot Leads Configuration facebook.leads.page-id=${FACEBOOK_LEADS_PAGE_ID:122096212527158660}