Пример работы с SMS шлюзом на языке TypeScript
Отправка смс
Получения статуса отправленной смс
Получение цены отправки
Получение баланса
Отправка смс:
import * as http from "http";
import * as querystring from "querystring";
import * as libxmljs from "libxmljs";
interface IPhone {
id: string;
val: string;
vars: string;
}
interface IMessageId {
val: string;
}
interface IEnumMessage {
[index: string]: IMessage;
}
interface IMessage {
status: string;
code: string;
message: string;
}
class EpochtaApiv2 {
gatewayhost: string;
gatewaypath: string;
login: string;
password: string;
debug: boolean;
/**
*
* @param {string} login -
* @param {string} password
* @param {boolean} debug
*/
constructor(login: string, password: string, debug: boolean = true) {
this.gatewayhost = 'api.atompark.com';
this.gatewaypath = '/members/sms/xml.php';
this.debug = debug;
this.login = login;
this.password = password;
}
/**
* Отправка смс
* @param {string} sender
* @param {string} message
* @param {Array<IPhone>} numbers
* @param {string} sentdate
* @param {Function} callback -
* @param {Function} error_callback -
*/
sendSms(sender: string, message: string, numbers: Array<IPhone>, sentdate: string, callback: Function, error_callback: Function) : boolean {
let xml = `<?xml version="1.0" encoding="UTF-8"?>
<SMS>
<operations>
<operation></operation>
</operations>
<authentification>
<username></username>
<password></password>
</authentification>
<message>
<sender></sender>
<text></text>
</message>
<numbers>
</numbers>
</SMS>`;
let xmlDoc = libxmljs.parseXmlString( xml );
xmlDoc.get( "//operation" ).text("SEND");
xmlDoc.get( "//username" ).text(this.login);
xmlDoc.get( "//password" ).text(this.password);
xmlDoc.get( "//sender" ).text(sender);
xmlDoc.get( "//text" ).text(message);
let xml_numbers = xmlDoc.get( "//numbers" ),
node: any;
if (typeof sentdate !== 'undefined') {
node = libxmljs
.Element(xmlDoc, 'sentdate')
.text(sentdate);
xmlDoc.root().addChild(node);
}
for (var i=0; i < numbers.length; i++) {
node = libxmljs
.Element(xmlDoc, 'number')
.text(numbers[i].val);
if (typeof numbers[i].id !== 'undefined') {
node.attr({messageID: numbers[i].id})
}
if (typeof numbers[i].vars !== 'undefined') {
node.attr({variables: numbers[i].vars})
}
xml_numbers.addChild(node);
}
return this.request(xmlDoc.toString(), callback, error_callback);
}
/**
* Расчет стоимости отправки смс
* @param {String} sender
* @param {String} message
* @param {Array} numbers
* ([
* {val: "380933630001", id:"msg1", vars:"var1;var2;var3;"},
* {val: "380933630002", id:"msg2"}
* ])
* @param {String} sentdat - (2012-05-01 00:20:00)
* @param {Function} callback -
* @param {Function} error_callback -
* @returns {Boolean}
*/
getPrice(sender: string, message: string, numbers: Array<IPhone>, sentdate: string, callback: Function, error_callback: Function) : boolean {
let xml = `<?xml version="1.0" encoding="UTF-8"?>
<SMS>
<operations>
<operation></operation>
</operations>
<authentification>
<username></username>
<password></password>
</authentification>
<message>
<sender></sender>
<text></text>
</message>
<numbers>
</numbers>
</SMS>`;
let xmlDoc = libxmljs.parseXmlString( xml );
xmlDoc.get( "//operation" ).text("GETPRICE");
xmlDoc.get( "//username" ).text(this.login);
xmlDoc.get( "//password" ).text(this.password);
xmlDoc.get( "//sender" ).text(sender);
xmlDoc.get( "//text" ).text(message);
let xml_numbers = xmlDoc.get( "//numbers" ),
node: any;
if (typeof sentdate !== 'undefined') {
node = libxmljs
.Element(xmlDoc, 'sentdate')
.text(sentdate);
xmlDoc.root().addChild(node);
}
for (var i=0; i < numbers.length; i++) {
node = libxmljs
.Element(xmlDoc, 'number')
.text(numbers[i].val);
if (typeof numbers[i].id !== 'undefined') {
node.attr({messageID: numbers[i].id})
}
if (typeof numbers[i].vars !== 'undefined') {
node.attr({variables: numbers[i].vars})
}
xml_numbers.addChild(node);
}
return this.request(xmlDoc.toString(), callback, error_callback);
}
/**
* Получения статуса отправленной смс
* @param {Array} id_list - (['msg1', 'msg2'])
* @param {Function} callback -
* @param {Function} error_callback -
* @returns {Boolean}
*/
getStatus(id_list: Array<IMessageId>, callback: Function, error_callback: Function) {
let xml = `<?xml version="1.0" encoding="UTF-8"?>
<SMS>
<operations>
<operation>GETSTATUS</operation>
</operations>
<authentification>
<username></username>
<password></password>
</authentification>
<statistics>
</statistics>
</SMS>`;
let xmlDoc = libxmljs.parseXmlString( xml );
xmlDoc.get( "//username" ).text(this.login);
xmlDoc.get( "//password" ).text(this.password);
var statistics = xmlDoc.get( "//statistics" );
let node: any;
for (var i=0; i < id_list.length; i++) {
node = libxmljs
.Element(xmlDoc, 'messageid')
.text(id_list[i].val);
statistics.addChild(node);
}
return this.request(xmlDoc.toString(), callback, error_callback);
}
/**
* Получение баланса
* @param {Function} callback -
* @param {Function} error_callback -
* @returns {Boolean}
*/
getBalance(callback: Function, error_callback: Function): boolean {
let xml = `<?xml version="1.0" encoding="UTF-8"?>
<SMS>
<operations>
<operation>BALANCE</operation>
</operations>
<authentification>
<username></username>
<password></password>
</authentification>
</SMS>`;
let xmlDoc = libxmljs.parseXmlString( xml );
xmlDoc.get( "//username" ).text(this.login);
xmlDoc.get( "//password" ).text(this.password);
return this.request(xmlDoc.toString(), callback, error_callback);
}
/**
* Получение стоимости одного кредита
* @param {Function} callback -
* @param {Function} error_callback -
* @returns {Boolean}
*/
getCreditPrice (callback: Function, error_callback: Function): boolean {
let xml = `<?xml version="1.0" encoding="UTF-8"?>
<SMS>
<operations>
<operation>CREDITPRICE</operation>
</operations>
<authentification>
<username></username>
<password></password>
</authentification>
</SMS>`;
let xmlDoc = libxmljs.parseXmlString( xml );
xmlDoc.get( "//username" ).text(this.login);
xmlDoc.get( "//password" ).text(this.password);
return this.request(xmlDoc.toString(), callback, error_callback);
}
/**
*
* @param {XMLDocument} xml
* @param {string} type
* @param {Function} callback
* @param {Function} error_callback
*/
request(xml: string, callback: Function, error_callback: Function): boolean {
if (this.debug) {
console.log({data: xml });
return true;
}
const _this = this;
let postData = querystring.stringify({XML: xml});
let options = <any> {
hostname: this.gatewayhost,
port: 443,
path: this.gatewaypath,
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': postData.length
}
};
var req = http.request(options, (res) => {
if (res.statusCode == 200) {
res.on('data', (d) => {
let xmlDoc = libxmljs.parseXmlString( d );
let code = parseInt(xmlDoc.get('//status'));
if (code >= 0) { // OK
callback(xmlDoc);
} else {
error_callback(xmlDoc)
}
});
} else {
error_callback({error: "uknown", result: 'false'})
}
});
req.on('error', (e) => {
error_callback({error: "uknown", message: e+'', result: 'false'})
});
req.write(postData);
req.end();
return true;
}
/**
*
* @param {string} status
*/
error_handler(status: string): IMessage {
let messages: IEnumMessage;
messages = {
'-1': <IMessage>{ 'status': '-1', 'code' : 'AUTH_FAILED', 'message': 'Неправильний логін та/або пароль' },
'-2': <IMessage>{ 'status': '-2', 'code' : 'XML_ERROR', 'message': 'Неправильний формат XML' },
'-3': <IMessage>{ 'status': '-3', 'code' : 'NOT_ENOUGH_CREDITS', 'message': 'Недостатньо кредитів на акаунті користувача' },
'-4': <IMessage>{ 'status': '-4', 'code' : 'NO_RECIPIENTS', 'message': 'Немає вірних номерів отримувачів' },
'-7': <IMessage>{ 'status': '-7', 'code' : 'BAD_SENDER_NAME', 'message': 'Помилка в імені відправника' },
}
if (typeof messages[status] !== 'undefined') {
return messages[status];
}
return <IMessage>{'status': status, 'message': 'Unknow error'};
}
}
var api2 = new EpochtaApiv2('your login', 'your password', false);
// api2.getBalance((res: any) => {console.log(res.toString())}, (res: any) => {console.log(res.toString())});
// api2.sendSms("smSender", "test text", [{val: "380933630000", id: "1213123", vars: ""}], "", (res: any) => {console.log(res.toString())}, (res: any) => {console.log(res.toString())});
// api2.getPrice("smSender", "test text", [{val: "380933630000", id: "1213123", vars: ""}], "", (res: any) => {console.log(res.toString())}, (res: any) => {console.log(res.toString())});
// api2.getStatus([{val: "msg1123"}, {val: "msg2333"}], (res: any) => {console.log(res.toString())}, (res: any) => {console.log(res.toString())});
// api2.getCreditPrice((res: any) => {console.log(res.toString())}, (res: any) => {console.log(res.toString())});
По запросу предоставляется необходимое количество дополнительных смс для тестирования сервиса массовых смс-уведомлений ePochta SMS.
Есть вопрос?
- 8 (800) 555-09-63
- Бесплатно по России
Новости:
- 2020-11-23
- ePochta объявляет старт Черной Пятницы: Спеццена на рассылку в WhatsApp
- 2020-11-18
- С 1 декабря 2020 года оператор МТС повышает стоимость СМС
- 2020-05-04
- Вебинар: СМС маркетинг. Что писать в тексте СМС рассылок?
- 2020-04-28
- Операторы повышают цены СМС рассылки по прямому каналу в РФ
- 2019-12-21
- Украинские операторы повышают цену СМС


7 (495) 649-62-48
Украинский
Казахский
English
Italiano
