Skip to content

Commit 595b2b5

Browse files
Merge pull request #116 from motech-implementations/sms-payload
Sms payload
2 parents 798b092 + 0d899ca commit 595b2b5

File tree

8 files changed

+443
-23
lines changed

8 files changed

+443
-23
lines changed

NMSReportingSuite/pom.xml

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -220,12 +220,12 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/ma
220220
<artifactId>mail</artifactId>
221221
<version>1.4.3</version>
222222
</dependency>
223-
<dependency>
224-
<groupId>junit</groupId>
225-
<artifactId>junit</artifactId>
226-
<version>3.8.1</version>
227-
<scope>test</scope>
228-
</dependency>
223+
<!-- <dependency>-->
224+
<!-- <groupId>junit</groupId>-->
225+
<!-- <artifactId>junit</artifactId>-->
226+
<!-- <version>3.8.1</version>-->
227+
<!-- <scope>test</scope>-->
228+
<!-- </dependency>-->
229229

230230
<dependency>
231231
<groupId>javax.activation</groupId>
@@ -329,6 +329,27 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/ma
329329
<version>4.3.6</version>
330330
</dependency>
331331

332+
<!--test-->
333+
<dependency>
334+
<groupId>org.powermock</groupId>
335+
<artifactId>powermock-module-junit4</artifactId>
336+
<version>2.0.9</version>
337+
<scope>test</scope>
338+
</dependency>
339+
<dependency>
340+
<groupId>org.powermock</groupId>
341+
<artifactId>powermock-api-mockito2</artifactId>
342+
<version>2.0.9</version>
343+
<scope>test</scope>
344+
</dependency>
345+
<dependency>
346+
<groupId>junit</groupId>
347+
<artifactId>junit</artifactId>
348+
<version>4.13.1</version>
349+
<scope>test</scope>
350+
</dependency>
351+
352+
332353
</dependencies>
333354

334355
<build>

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/SmsService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ public interface SmsService {
99

1010
String buildCertificateSMS(CourseCompletionDTO courseCompletionDTO, String message_content);
1111

12-
String buildOTPSMS(MACourseFirstCompletion maCourseFirstCompletion, String message_content);
12+
String buildOTPSMS(MACourseFirstCompletion maCourseFirstCompletion, String message_content, long languageId);
1313
}

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/impl/CertificateServiceImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ public String generateOTPForAshaCertificate(Long mobileNo) throws Exception {
425425
String messageContent = buildOTPMessage(languageId, otp);
426426

427427
MACourseCompletion maCourseCompletion = maCourseCompletionDao.getAshaByFLWId(maCourseFirstCompletion.getFlwId());
428-
return sendOTPMessage(maCourseCompletion, maCourseFirstCompletion, messageContent);
428+
return sendOTPMessage(maCourseCompletion, maCourseFirstCompletion, messageContent, languageId);
429429
}
430430

431431
private int generateRandomSixDigitOTP() {
@@ -450,8 +450,8 @@ private String buildOTPMessage(long languageId, int otp) {
450450
return messageTemplate.replace("<OTP>", String.valueOf(otp));
451451
}
452452

453-
private String sendOTPMessage(MACourseCompletion maCourseCompletion, MACourseFirstCompletion maCourseFirstCompletion, String messageContent) {
454-
String template = smsService.buildOTPSMS(maCourseFirstCompletion, messageContent);
453+
private String sendOTPMessage(MACourseCompletion maCourseCompletion, MACourseFirstCompletion maCourseFirstCompletion, String messageContent, long languageId) {
454+
String template = smsService.buildOTPSMS(maCourseFirstCompletion, messageContent, languageId);
455455
logger.info("SMS Template: {}", template);
456456
return smsService.sendSms(maCourseCompletion, template);
457457
}

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/impl/SmsServiceImpl.java

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,15 @@
1313
import org.apache.http.entity.StringEntity;
1414
import org.apache.http.impl.client.HttpClientBuilder;
1515
import org.apache.http.util.EntityUtils;
16+
import org.joda.time.DateTime;
1617
import org.slf4j.Logger;
1718
import org.slf4j.LoggerFactory;
1819
import org.springframework.beans.factory.annotation.Autowired;
1920
import org.springframework.context.annotation.PropertySource;
2021
import org.springframework.stereotype.Service;
2122

22-
import java.io.File;
23-
import java.io.IOException;
23+
import java.io.*;
24+
import java.net.URL;
2425
import java.nio.charset.StandardCharsets;
2526
import java.text.ParseException;
2627
import java.text.SimpleDateFormat;
@@ -40,6 +41,10 @@ public class SmsServiceImpl implements SmsService {
4041
@Autowired
4142
private FrontLineWorkersDao frontLineWorkersDao;
4243

44+
public void setMACourseCompletionDao(MACourseCompletionDao maCourseCompletionDao) {
45+
this.maCourseCompletionDao = maCourseCompletionDao;
46+
}
47+
4348

4449
private String sms_template_id = getProperty("sms.templateId.default");
4550
private String sms_entity_id = getProperty("sms.entityId.default");
@@ -119,10 +124,10 @@ public String buildCertificateSMS(CourseCompletionDTO courseCompletionDTO, Strin
119124
try {
120125
phoneNo = courseCompletionDTO.getMobileNumber();
121126
} catch (NullPointerException e) {
122-
LOGGER.info("Phone number does not exist for FLW ID: {}", courseCompletionDTO.getFlwId(), e);
127+
LOGGER.info("Phone number does not exist for FLW ID: {}", courseCompletionDTO.getFlwId());
123128
return null;
124129
} catch (Exception e) {
125-
LOGGER.error("Unexpected error while fetching phone number for FLW ID: {}", courseCompletionDTO.getFlwId(), e);
130+
LOGGER.error("Unexpected error while fetching phone number for FLW ID: {}", courseCompletionDTO.getFlwId());
126131
return null;
127132
}
128133

@@ -136,7 +141,7 @@ public String buildCertificateSMS(CourseCompletionDTO courseCompletionDTO, Strin
136141
StandardCharsets.UTF_8
137142
);
138143
} catch (IOException e) {
139-
LOGGER.error("Error reading SMS template file", e);
144+
LOGGER.error("Error reading SMS template file");
140145
return null;
141146
}
142147

@@ -149,23 +154,26 @@ public String buildCertificateSMS(CourseCompletionDTO courseCompletionDTO, Strin
149154

150155
// Replace placeholders in the template
151156
try {
157+
String messageType = retrieveAshaCourseCompletionMessageType(courseCompletionDTO.getLanguageId());
152158
template = template
153159
.replace("<phoneNumber>", String.valueOf(phoneNo))
154160
.replace("<senderId>", senderId)
155161
.replace("<messageContent>", messageContent)
156162
.replace("<notificationUrl>", callbackEndpoint)
157163
.replace("<smsTemplateId>", sms_template_id)
158164
.replace("<smsEntityId>", sms_entity_id)
159-
.replace("<smsTelemarketerId>", sms_telemarketer_id);
165+
.replace("<smsTelemarketerId>", sms_telemarketer_id)
166+
.replace("<correlationId>", DateTime.now().toString())
167+
.replace("<messageType>", messageType);
160168
} catch (Exception e) {
161-
LOGGER.error("Error replacing placeholders in SMS template", e);
169+
LOGGER.error("Error replacing placeholders in SMS template");
162170
return null;
163171
}
164172

165173
return template;
166174
}
167175

168-
public String buildOTPSMS(MACourseFirstCompletion maCourseFirstCompletion, String messageContent) {
176+
public String buildOTPSMS(MACourseFirstCompletion maCourseFirstCompletion, String messageContent, long languageId) {
169177
long phoneNumber;
170178
String template = null;
171179

@@ -175,7 +183,7 @@ public String buildOTPSMS(MACourseFirstCompletion maCourseFirstCompletion, Strin
175183
try {
176184
phoneNumber = maCourseCompletionDao.getAshaPhoneNo(maCourseFirstCompletion.getFlwId());
177185
} catch (NullPointerException e) {
178-
LOGGER.error("Phone number not found for FLW ID: {}", maCourseFirstCompletion.getFlwId(), e);
186+
LOGGER.error("Phone number not found for FLW ID: {}", maCourseFirstCompletion.getFlwId());
179187
return null;
180188
}
181189

@@ -189,22 +197,25 @@ public String buildOTPSMS(MACourseFirstCompletion maCourseFirstCompletion, Strin
189197
StandardCharsets.UTF_8
190198
);
191199
} catch (IOException e) {
192-
LOGGER.error("Error reading SMS template file.", e);
200+
LOGGER.error("Error reading SMS template file");
193201
return null;
194202
}
195203

196204
// Populate SMS template
197205
try {
198206
String callbackEndpoint = retrieveAshaSMSCallBackEndPoint("OTP");
207+
String messageType = retrieveAshaCourseCompletionMessageType(languageId);
199208
template = template.replace("<phoneNumber>", String.valueOf(phoneNumber))
200209
.replace("<senderId>", senderId)
201210
.replace("<messageContent>", messageContent)
202211
.replace("<notificationUrl>", callbackEndpoint)
203212
.replace("<smsTemplateId>", sms_template_id)
204213
.replace("<smsEntityId>", sms_entity_id)
205-
.replace("<smsTelemarketerId>", sms_telemarketer_id);
214+
.replace("<smsTelemarketerId>", sms_telemarketer_id)
215+
.replace("<correlationId>", DateTime.now().toString())
216+
.replace("<messageType>", messageType);
206217
} catch (Exception e) {
207-
LOGGER.error("Error populating SMS template.", e);
218+
LOGGER.error("Error populating SMS template.");
208219
return null;
209220
}
210221

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/utils/Global.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,14 @@ public static String retrieveAshaCourseCompletionOTPMessage(long languageId) {
212212
return message;
213213
}
214214

215+
public static String retrieveAshaCourseCompletionMessageType(long languageId) {
216+
String message = getProperty("sms.asha.default.message.type." + languageId);
217+
if (message == null) {
218+
message = getProperty("sms.asha.default.message.type");
219+
}
220+
return message;
221+
}
222+
215223
public static String retrieveAshaCertificateDownloadPageUrl() {
216224
return getProperty("sms.asha.certificate.download.url");
217225
}

NMSReportingSuite/src/main/resources/sms.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ sms.asha.default.message.10=Avinandan didi, aapana Mobile Akademy korse sampurna
2121
sms.asha.default.message.12=Abhinandan Baideu, apuni Mobile Academy r coursetu sampurna korile. Etia certificate paboloi ei SMS to aponalokar subcentreor meetingot dekhaok. No. \nMoHFW-KMA
2222
sms.asha.default.message.5=Obhinandan Didi! Apni safolyer songe mobile academir training course ti sompurno korechen. Ekhon certificate pawar jonno apnake ei SMS ti sub centre meeting e dyakhate hobe. ( SMS system Dara toiri kora reference sonkhya) \nMoHFW-KMA
2323

24+
sms.asha.default.message.type=0
25+
sms.asha.default.message.type.14=4
26+
2427
## OTP lifespan in seconds to download the certificate
2528
otplifespan=2592000
2629

NMSReportingSuite/src/main/resources/smsTemplate.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@
88
"message": "<messageContent>"
99
},
1010
"clientCorrelator": "<correlationId>",
11+
"messageType": "<messageType>",
1112
"receiptRequest": {
1213
"notifyURL": "<notificationUrl>",
1314
"callbackData": ""
1415
},
1516
"senderName": "",
16-
"category": ""
17+
"category": "",
18+
"templateId": "<smsTemplateId>",
19+
"entityId": "<smsEntityId>",
20+
"telemarketerId": "<smsTelemarketerId>"
1721
}
1822
}

0 commit comments

Comments
 (0)