Merge remote-tracking branch 'refs/remotes/origin/release/0.0.2-RELEASE' into release/0.0.2-RELEASE

This commit is contained in:
2026-07-06 12:54:27 +02:00
3 changed files with 40 additions and 27 deletions

View File

@@ -0,0 +1,19 @@
package zw.qantra.tm.domain.dtos.sms;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SmsPopCampaignRequest {
private String name;
private String message;
private String sender_id;
@Builder.Default
private String contact_import_method = "manual";
private String manual_contacts;
}

View File

@@ -12,16 +12,12 @@ import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.mail.internet.MimeMessage; import jakarta.mail.internet.MimeMessage;
import zw.qantra.tm.domain.dtos.sms.SmsApiResponse; import zw.qantra.tm.domain.dtos.sms.SmsPopCampaignRequest;
import zw.qantra.tm.domain.dtos.sms.SmsBatchRequest;
import zw.qantra.tm.domain.dtos.sms.SmsMessage;
import zw.qantra.tm.rest.RestService; import zw.qantra.tm.rest.RestService;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@@ -32,10 +28,10 @@ public class NotificationService {
private final RestService restService; private final RestService restService;
private final JavaMailSender emailSender; private final JavaMailSender emailSender;
@Value("${zss.sms.api.url}") @Value("${sms-pop.url}")
private String smsApiUrl; private String smsPopUrl;
@Value("${zss.sms.api.auth}") @Value("${sms-pop.apikey}")
private String smsApiAuth; private String smsPopApiKey;
@Value("${sms.debug}") @Value("${sms.debug}")
private Boolean smsDebug; private Boolean smsDebug;
@@ -108,28 +104,25 @@ public class NotificationService {
return; return;
} }
try { try {
SmsMessage smsMessage = SmsMessage.builder() String phoneNumber = to;
.reference(UUID.randomUUID().toString()) if (phoneNumber.startsWith("+")) {
.message(message) phoneNumber = phoneNumber.substring(1);
.msisdn(to) }
.build();
SmsBatchRequest batchRequest = SmsBatchRequest.builder() SmsPopCampaignRequest campaignRequest = SmsPopCampaignRequest.builder()
.batchReference(UUID.randomUUID().toString()) .name("Velocity Payments")
.smsList(Collections.singletonList(smsMessage)) .message(message)
.sender_id("Velocity")
.contact_import_method("manual")
.manual_contacts(phoneNumber)
.build(); .build();
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.set("Authorization", smsApiAuth); headers.set("Authorization", "Bearer " + smsPopApiKey);
SmsApiResponse response = restService.postWithExternalAuth( restService.postAs(smsPopUrl, campaignRequest, headers, Object.class);
smsApiUrl,
batchRequest,
headers,
SmsApiResponse.class
);
logger.info("SMS sent to {} - Status: {}, Result: {}", to, response.getStatus(), response.getResult()); logger.info("SMS sent to {} via SMSPOP", to);
} catch (Exception e) { } catch (Exception e) {
logger.error("Failed to send SMS to {}: {}", to, e.getMessage(), e); logger.error("Failed to send SMS to {}: {}", to, e.getMessage(), e);
} }

View File

@@ -84,9 +84,10 @@ jobrunr.datasource.password=
app.reports.storage-path=/srv/data/reports app.reports.storage-path=/srv/data/reports
app.base-url=https://payapi.velocityafrica.net app.base-url=https://payapi.velocityafrica.net
zss.sms.api.url=https://secure.zss.co.zw/vportal/cnm/vsms/json/batch
zss.sms.api.auth=Basic UWFudHJhdGVjaDpVbUk3OUpwUDh3QTY=
sms.debug=false sms.debug=false
sms-pop.url=https://smspop.co.zw/api/campaigns
sms-pop.apikey=108|ypBpUtJGlPzelxJl2aySp672I9KKbyaQPtcxMPBrfb70be27
cloudflare-token=cfut_U0qhvhzAATLqHQa9lad7oRmBmPoJ6n9uIoCBbNOWc9884f18 cloudflare-token=cfut_U0qhvhzAATLqHQa9lad7oRmBmPoJ6n9uIoCBbNOWc9884f18
cloudflare-zone-id=378cea8e50c0d9a158816109b3b1fd8d cloudflare-zone-id=378cea8e50c0d9a158816109b3b1fd8d