Files
ostandari/server/plugins/sms.js
T
2026-06-19 12:11:18 +03:30

74 lines
1.9 KiB
JavaScript

const axios = require("axios");
const SMS_API_KEY = "QkkNxhyXZ6GtEf1soOTtikomO3mA4LaNQDH8mol8huDIwh00";
module.exports.sms = async (phoneNumber, message) => {
const smsService = new SmsService(SMS_API_KEY);
return smsService.sendMessage(phoneNumber, message);
};
/** Sends login/verification OTP via sms.ir template (verify endpoint). */
module.exports.sendOtpSms = async (phoneNumber, otp) => {
const smsService = new SmsService(SMS_API_KEY);
return smsService.sendOTPSms(otp, phoneNumber);
};
class SmsService {
constructor(apiKey) {
this.API_URL = "https://api.sms.ir/v1";
this.OTP_PATTERN = "628767";
this.SMS_API_KEY = apiKey;
}
async sendMessage(phone, message) {
try {
const lineNumber = await this.getLineNumber();
const smsData = {
MessageTexts: [message],
LineNumber: `${lineNumber}`,
Mobiles: [phone],
};
const { data } = await axios.post(`${this.API_URL}/send/likeToLike`, smsData, {
headers: {
"X-API-KEY": this.SMS_API_KEY,
},
});
return data;
} catch (error) {
console.error("Error in sending SMS", error);
}
}
async getLineNumber() {
try {
const { data } = await axios.get(`${this.API_URL}/line`, {
headers: {
"X-API-KEY": this.SMS_API_KEY,
},
});
return data.data[1] ?? data.data[0];
} catch (error) {
console.error("Error in getting line number", error);
}
}
async sendOTPSms(otp, phone) {
const smsData = {
Parameters: [{ name: "code", value: `${otp}` }],
Mobile: phone,
TemplateId: this.OTP_PATTERN,
};
try {
const { data } = await axios.post(`${this.API_URL}/send/verify`, smsData, {
headers: {
"X-API-KEY": this.SMS_API_KEY,
"Content-Type": "application/json",
},
});
return data;
} catch (error) {
console.error("Error in sending OTP SMS", error);
}
}
}