This commit is contained in:
arys
2026-01-29 16:37:34 +05:00
parent 50dcdad58b
commit 337399158e
2 changed files with 17 additions and 52 deletions
@@ -2,12 +2,9 @@ package kz.konturai.parser.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@RestController
@RequestMapping("/api/facebook/webhook")
@@ -15,62 +12,31 @@ public class FacebookWebhookController {
private static final Logger logger = LoggerFactory.getLogger(FacebookWebhookController.class);
@Value("${facebook.verify.token}")
private String verifyToken;
private final ObjectMapper objectMapper;
public FacebookWebhookController() {
this.objectMapper = new ObjectMapper();
}
// ХАРДКОД ТОКЕНА (Чтобы точно заработало)
private final String VERIFY_TOKEN = "konturAI";
@GetMapping
public ResponseEntity<String> verifyWebhook(
@RequestParam("hub.mode") String mode,
@RequestParam("hub.verify_token") String token,
@RequestParam("hub.challenge") String challenge) {
@RequestParam(name = "hub.mode", required = false) String mode,
@RequestParam(name = "hub.verify_token", required = false) String token,
@RequestParam(name = "hub.challenge", required = false) String challenge) {
if ("subscribe".equals(mode) && verifyToken.equals(token)) {
logger.info(">>> WEBHOOK VERIFIED SUCCESSFULLY!");
logger.info(">>> GET запрос на верификацию: token={}, challenge={}", token, challenge);
// Если прислали тот же токен, что мы зашили в коде
if (VERIFY_TOKEN.equals(token)) {
// Фейсбук ждет В ТОЧНОСТИ этот challenge назад
return ResponseEntity.ok(challenge);
} else {
logger.error(">>> WEBHOOK VERIFICATION FAILED. Token mismatch.");
return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
logger.error(">>> ОШИБКА: Токены не совпали. Ждали: {}, Получили: {}", VERIFY_TOKEN, token);
return ResponseEntity.status(HttpStatus.FORBIDDEN).body("Error: Token mismatch");
}
}
@PostMapping
public ResponseEntity<Void> receiveEvent(@RequestBody String payload) {
try {
JsonNode root = objectMapper.readTree(payload);
if (root.has("entry")) {
for (JsonNode entry : root.get("entry")) {
if (entry.has("messaging")) {
for (JsonNode event : entry.get("messaging")) {
// Если это сообщение от юзера
if (event.has("message") && !event.get("message").has("is_echo")) {
String senderId = event.get("sender").get("id").asText();
String text = event.get("message").has("text") ?
event.get("message").get("text").asText() : "";
// === ВОТ ЭТОТ ID ТЕБЕ НУЖЕН ===
logger.info("============================================");
logger.info(">>> ПОЙМАН ID ТЕСТЕРА: " + senderId);
logger.info(">>> ТЕКСТ СООБЩЕНИЯ: " + text);
logger.info(">>> СКОПИРУЙ ЭТОТ ID В PostingTaskService!");
logger.info("============================================");
}
}
}
}
}
// Всегда возвращаем 200 OK, чтобы Фейсбук не слал повторы
return ResponseEntity.ok().build();
} catch (Exception e) {
logger.error("Error processing webhook", e);
return ResponseEntity.ok().build();
}
public ResponseEntity<Void> receiveEvent(@RequestBody(required = false) String payload) {
logger.info(">>> POST запрос получен: {}", payload);
return ResponseEntity.ok().build();
}
}
+1 -2
View File
@@ -128,8 +128,7 @@ telegram.api.timeout=30000
# ==========================================
facebook.api.timeout=30000
# ??? ????? ?????, ??????? ?? ???? ?? ????? FACEBOOK (??? ?? ?????????)
facebook.verify.token=my_test_secret_123
facebook.verify.token=konturAI
# ???? ?????? ??????? ????? ???????? (Page Access Token)
# ?????? ??? ? Meta Developers -> Messenger -> Settings -> Access Tokens (Generate Token)