Files
serverMontime/scripts/test-sms.mjs
T

60 lines
1.7 KiB
JavaScript
Raw Normal View History

import 'dotenv/config';
const username = process.env.SMS_USERNAME;
const password = process.env.SMS_PASSWORD ?? process.env.SMS_API_KEY;
const sender = process.env.SMS_SENDER;
if (!username || !password || !sender) {
console.error('Set SMS_USERNAME, SMS_PASSWORD (or SMS_API_KEY), and SMS_SENDER in .env');
process.exit(1);
}
const targets = process.argv.slice(2).length
? process.argv.slice(2)
: ['09397439581'];
function escapeXml(value) {
return String(value)
.replace(/&/g, '&')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&apos;');
}
const text = 'کد ورود منتایم: 123456';
for (const mobile of targets) {
const soapBody = `<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<SendSMS xmlns="http://tempuri.org/">
<username>${escapeXml(username)}</username>
<password>${escapeXml(password)}</password>
<text>${escapeXml(text)}</text>
<mobileno>${escapeXml(mobile)}</mobileno>
<pnlno>${escapeXml(sender)}</pnlno>
</SendSMS>
</soap:Body>
</soap:Envelope>`;
const res = await fetch('https://webservice.0098sms.com/service.asmx', {
method: 'POST',
headers: {
'Content-Type': 'text/xml; charset=utf-8',
SOAPAction: 'http://tempuri.org/SendSMS',
},
body: soapBody,
signal: AbortSignal.timeout(20_000),
});
const body = await res.text();
const match = body.match(/<SendSMSResult[^>]*>([^<]*)<\/SendSMSResult>/i);
const code = match?.[1]?.trim() ?? '?';
console.log(`mobile=${mobile} http=${res.status} RESULT=${code}`);
if (code !== '0') {
console.log(body.slice(0, 400));
}
}