Отправка каскадных сообщений
Каскадные сообщения – это последовательность каналов отправки, каждый из которых срабатывает в зависимости от статуса сообщения, полученном на предыдущем этапе.
В большинстве случаев переотправка сообщения по другому каналу происходит, если на предыдущем был получен «отрицательный» статус, такой как undelivered
или timeout
. Исключением являются каналы hlr
и ping
, которые инициируют отправку сообщения по очередному каналу в случае «положительного» статуса delivered
.
Для отправки каскадного сообщения используйте стандартный метод отправки сообщения POST /api/message
с последовательностью каналов, разделённых запятой ,
в параметре route
.
Вы можете изменять параметры отдельного канала, например, текст или время ожидания статуса. Для этого используйте о бщие параметры с префиксом [route]_
, где [route]
– название канала.
Примеры использования каскадных сообщений
Предварительная проверка активности абонента перед отправкой SMS
Чтобы не отправлять SMS абоненту не в сети, можно предварительно проверить его активность, используя HLR-запрос, который будет стоить значительно меньше.
В случае, если HLR-запрос будет иметь статус delivered
(абонент в сети), автоматически будет отправлено SMS.
Пример отправки SMS с предварительной проверкой HLR:
- cURL
- PHP
- Node.js
- Python
curl -X POST "https://cp.redsms.ru/api/message" \
-H "login: <USERNAME>" \
-H "ts: ts-value-42" \
-H "secret: $(echo -n 'ts-value-42<API_KEY>' | md5sum | awk '{print $1}')" \
-H "Content-type: application/json" \
-d '{
"to": "+79993332211",
"route": "hlr,sms",
"hlr_validity": 500,
"sms_from": "<SMS_SENDER_NAME>",
"sms_text": "Ваш заказ А-381 отправлен, отслеживайте статус в приложении"
}'
# В OSX вместо команды md5sum необходимо использовать команду md5
$login = '<USERNAME>';
$ts = 'ts-value-' . time();
$api_key = '<API_KEY>';
$secret = md5($ts . $api_key);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://cp.redsms.ru/api/message');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'login: ' . $login,
'ts: ' . $ts,
'secret: ' . $secret,
'Content-type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'to' => '+79993332211',
'route' => 'hlr,sms',
'hlr_validity' => 500,
'sms_from' => '<SMS_SENDER_NAME>',
'sms_text' => 'Ваш заказ А-381 отправлен, отслеживайте статус в приложении'
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
$response_data = json_decode($response);
// print_r($info['http_code']);
// print_r($response_data);
const https = require('https');
const crypto = require('crypto');
const login = '<USERNAME>';
const ts = `ts-value-${Date.now()}`;
const apiKey = '<API_KEY>';
const secret = crypto.createHash('md5').update(ts + apiKey).digest('hex');
(new Promise((resolve, reject) => {
const body = JSON.stringify({
to: '+79993332211',
route: 'hlr,sms',
hlr_validity: 500,
sms_from: '<SMS_SENDER_NAME>',
sms_text: 'Ваш заказ А-381 отправлен, отслеживайте статус в приложении',
});
const request = https.request(
{
method: 'POST',
host: 'cp.redsms.ru',
path: '/api/message',
headers: {
login,
ts,
secret,
'Content-Length': Buffer.byteLength(body),
'Content-Type': 'application/json',
},
},
(response) => {
const buffers = [];
response.on('error', reject);
response.on('data', (buffer) => buffers.push(buffer));
response.on('end', () => {
const responseBody = Buffer.concat(buffers).toString();
const responseData = JSON.parse(responseBody);
if (response.statusCode !== 200) {
return reject(responseData);
}
resolve(responseData);
));
},
);
request.write(body);
request.end();
}))
.then(console.log)
.catch(console.error);
import hashlib
import json
import requests
import time
login = '<USERNAME>'
ts = unicode(time.time())
api_key = '<API_KEY>'
secret = hashlib.md5((ts + api_key).encode()).hexdigest()
headers = {
'login': login,
'ts': ts,
'secret': secret,
'Content-type': 'application/json',
}
data = {
'to': '+79993332211',
'route': 'hlr,sms',
'hlr_validity': 500,
'sms_from': '<SMS_SENDER_NAME>',
'sms_text': 'Ваш заказ А-381 отправлен, отслеживайте статус в приложении'
}
r = requests.post('https://cp.redsms.ru/api/message', headers=headers, data=json.dumps(data))
# print(r.status_code)
# print(r.text)
Отправка маркетингового сообщения клиенту по одному из доступных каналов
В случае отправки маркетинговых сообщений отсутствует необходимость оперативной доставки, поэтому можно не указывать параметры _validity
, используя значение по умолчанию – 24 часа.
В примере ниже мы будем пытаться доставить сообщение клиенту в Viber, а в случае, если приложение не установлено – отправим SMS. Мы также укажем для SMS более короткий текст в целях экономии.
- cURL
- PHP
- Node.js
- Python
curl -X POST "https://cp.redsms.ru/api/message" \
-H "login: <USERNAME>" \
-H "ts: ts-value-42" \
-H "secret: $(echo -n 'ts-value-42<API_KEY>' | md5sum | awk '{print $1}')" \
-H "Content-type: application/json" \
-d '{
"to": "+79993332211",
"route": "viber,sms",
"viber_from": "<VIBER_SENDER_NAME>",
"viber_imageUrl": "https://loremflickr.com/400/400",
"viber_text": "Только до конца марта – скидки на все категории товаров. Успейте купить дешевле",
"viber_btnText": "Получить скидку",
"viber_btnUrl": "https://your-site.ru/sales",
"sms_from": "<SMS_SENDER_NAME>",
"sms_text": "Скидки на все категории до 31.03"
}'
# В OSX вместо команды md5sum необходимо использовать команду md5
$login = '<USERNAME>';
$ts = 'ts-value-' . time();
$api_key = '<API_KEY>';
$secret = md5($ts . $api_key);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://cp.redsms.ru/api/message');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'login: ' . $login,
'ts: ' . $ts,
'secret: ' . $secret,
'Content-type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'to' => '+79993332211',
'route' => 'viber,sms',
'viber_from' => '<VIBER_SENDER_NAME>',
'viber_imageUrl' => 'https://loremflickr.com/400/400',
'viber_text' => 'Только до конца марта – скидки на все к атегории товаров. Успейте купить дешевле',
'viber_btnText' => 'Получить скидку',
'viber_btnUrl' => 'https://your-site.ru/sales',
'sms_from' => '<SMS_SENDER_NAME>',
'sms_text' => 'Скидки на все категории до 31.03'
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
$response_data = json_decode($response);
// print_r($info['http_code']);
// print_r($response_data);
const https = require('https');
const crypto = require('crypto');
const login = '<USERNAME>';
const ts = `ts-value-${Date.now()}`;
const apiKey = '<API_KEY>';
const secret = crypto.createHash('md5').update(ts + apiKey).digest('hex');
(new Promise((resolve, reject) => {
const body = JSON.stringify({
to: '+79993332211',
route: 'viber,sms',
viber_from: '<VIBER_SENDER_NAME>',
viber_imageUrl: 'https://loremflickr.com/400/400',
viber_text: 'Только до конца марта – скидки на все категории товаров. Успейте купить дешевле',
viber_btnText: 'Получить скидку',
viber_btnUrl: 'https://your-site.ru/sales',
sms_from: '<SMS_SENDER_NAME>',
sms_text: 'Скидки на все категории до 31.03',
});
const request = https.request(
{
method: 'POST',
host: 'cp.redsms.ru',
path: '/api/message',
headers: {
login,
ts,
secret,
'Content-Length': Buffer.byteLength(body),
'Content-Type': 'application/json',
},
},
(response) => {
const buffers = [];
response.on('error', reject);
response.on('data', (buffer) => buffers.push(buffer));
response.on('end', () => {
const responseBody = Buffer.concat(buffers).toString();
const responseData = JSON.parse(responseBody);
if (response.statusCode !== 200) {
return reject(responseData);
}
resolve(responseData);
));
},
);
request.write(body);
request.end();
}))
.then(console.log)
.catch(console.error);