66 lines
2.5 KiB
Java
66 lines
2.5 KiB
Java
package de.jeyp91.whatsapp;
|
|
|
|
import de.jeyp91.tippligaforum.TippligaSQLConnector;
|
|
import org.apache.logging.log4j.LogManager;
|
|
import org.apache.logging.log4j.Logger;
|
|
import org.json.simple.JSONObject;
|
|
|
|
import java.net.URI;
|
|
import java.net.http.HttpClient;
|
|
import java.net.http.HttpRequest;
|
|
import java.net.http.HttpResponse;
|
|
import java.time.Duration;
|
|
import java.util.ArrayList;
|
|
|
|
public class WhatsAppNotifier {
|
|
private final String host = System.getenv("TLW_WHATSAPP_HOST");
|
|
private final String port = System.getenv("TLW_WHATSAPP_PORT");
|
|
private final String apiKey = System.getenv("TLW_WHATSAPP_API_KEY");
|
|
private static final Logger logger = LogManager.getLogger(WhatsAppNotifier.class);
|
|
private final HttpClient client;
|
|
private final OpenAIConnector openAIConnector = new OpenAIConnector();
|
|
|
|
public WhatsAppNotifier() {
|
|
client = HttpClient.newBuilder()
|
|
.connectTimeout(Duration.ofSeconds(10))
|
|
.build();
|
|
}
|
|
|
|
public void sendNotifications() {
|
|
ArrayList<WhatsAppReminder> reminders = TippligaSQLConnector.getInstance().getNextWhatsAppReminders(24);
|
|
reminders.addAll(TippligaSQLConnector.getInstance().getNextWhatsAppReminders(1));
|
|
reminders.forEach(reminder -> {
|
|
boolean success = sendMessage(reminder);
|
|
if (success) {
|
|
markReminderAsSent(reminder);
|
|
}
|
|
});
|
|
}
|
|
|
|
public boolean sendMessage(WhatsAppReminder reminder) {
|
|
String message = openAIConnector.getReminderMessage(reminder);
|
|
JSONObject body = new JSONObject();
|
|
body.put("number", reminder.phoneNumber().substring(2));
|
|
body.put("message", message);
|
|
HttpRequest req = HttpRequest.newBuilder()
|
|
.uri(URI.create(this.host + (this.port != null ? ":" + this.port : "") + "/send"))
|
|
.headers("Content-Type", "application/json")
|
|
.headers("x-api-key", apiKey)
|
|
.POST(HttpRequest.BodyPublishers.ofString(body.toJSONString()))
|
|
.build();
|
|
boolean success = false;
|
|
try {
|
|
client.send(req, HttpResponse.BodyHandlers.ofString()).body();
|
|
success = true;
|
|
} catch (Exception e) {
|
|
logger.error("Failed to send WhatsApp message: " + e.getMessage());
|
|
}
|
|
return success;
|
|
}
|
|
|
|
public void markReminderAsSent(WhatsAppReminder reminder) {
|
|
TippligaSQLConnector.getInstance().markWhatsAppReminderAsSent(reminder);
|
|
}
|
|
}
|
|
|