Массовая отправка сообщений
С помощью общего метода отправки сообщения POST /api/message
вы можете отправлять множество сообщений разным получателем. Для этого укажите в параметре to
список номеров телефонов, разделённых запятой ,
.
Максимальное количество сообщений в одном запросе – 300 000 шт.
Сообщения будут отправлены одновременно всем указанным получателям. Данный метод может не подойти, если вам необходима равномерная отправка по времени.
На этой странице приведены примеры массовой отправки 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 '{
"route": "sms",
"from": "<SENDER_NAME>",
"to": "+79993332211,+79993332212,+79993332213",
"text": "Только до конца февраля! Скидки на все категории товаров до 50%"
}'
# В 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([
'route' => 'sms',
'from' => '<SENDER_NAME>',
'to' => implode(',', ['+79993332211', '+79993332212', '+79993332213']),
'text' => 'Только до конца февраля! Скидки на все категории товаров до 50%'
]));
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({
route: 'sms',
from: '<SENDER_NAME>',
to: ['+79993332211', '+79993332212', '+79993332213'].join(','),
text: 'Только до конца февраля! Скидки на все категории товаров до 50%',
});
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 = {
'route': 'sms',
'from': '<SENDER_NAME>',
'to': ','.join(['+79993332211', '+79993332212', '+79993332213']),
'text': 'Только до конца февраля! Скидки на все категории товаров до 50%'
}
r = requests.post('https://cp.redsms.ru/api/message', headers=headers, data=json.dumps(data))
# print(r.status_code)
# print(r.text)
Пример тела ответа:
{
"items": [
{
"uuid": "21c2e4ce-c503-11ee-b60a-0242c0a86496",
"status": "created",
"status_time": 1707232773,
"to": "+79993332211"
},
{
"uuid": "21cb4b8c-c503-11ee-b364-0242c0a86496",
"status": "created",
"status_time": 1707232773,
"to": "+79993332212"
},
{
"uuid": "21cd3a96-c503-11ee-a723-0242c0a86496",
"status": "created",
"status_time": 1707232773,
"to": "+79993332213"
}
],
"errors": [],
"count": 3,
"success": true
}
Для получения статуса доставки сообщений используйте запросы GET /api/message/{uuid}
или Webhook.
Массовая отправка сообщений с уникальным текстом
Вы можете отправить уникальный текст сообщения разным получателям в одном запросе. Для этого после каждого номера телефона получателя укажите текст, добавив разделитель двоеточие :
.
Пример запроса для массовой отправки сообщений с уникальным текстом:
- 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 '{
"route": "sms",
"from": "<SENDER_NAME>",
"to" => "+79993332211:Вам начислено 50 бонусов,+79993332212:Вам начислено 23 бонуса,+79993332213:Вам начислено 68 бонусов"
}'
# В OSX вместо команды md5sum необ ходимо использовать команду md5
$login = '<USERNAME>';
$ts = 'ts-value-' . time();
$api_key = '<API_KEY>';
$secret = md5($ts . $api_key);
$messages = [
['to' => '+79993332211', 'text' => 'Вам начислено 50 бонусов'],
['to' => '+79993332212', 'text' => 'Вам начислено 23 бонуса'],
['to' => '+79993332213', 'text' => 'Вам начислено 68 бонусов'],
];
$toMessages = [];
foreach ($messages as $message) {
$toMessages[] = $message['to'] . ':' . $message['text'];
}
$to = implode(',', $toMessages);
$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([
'route' => 'sms',
'from' => '<SENDER_NAME>',
'to' => $to
]));
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');
const messages = [
{ to: '+79993332211', text: 'Вам начислено 50 бонусов' },
{ to: '+79993332212', text: 'Вам начислено 23 бонуса' },
{ to: '+79993332213', text: 'Вам начислено 68 бонусов' },
];
const to = messages
.map((acc, message) => `${message.to}:${message.text}`)
.join(',');
(new Promise((resolve, reject) => {
const body = JSON.stringify({
route: 'sms',
from: '<SENDER_NAME>',
to,
});
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()
messages = [
{'to': '+79993332211', 'text': 'Вам начислено 50 бонусов'},
{'to': '+79993332212', 'text': 'Вам начислено 23 бонуса'},
{'to': '+79993332213', 'text': 'Вам начислено 68 бонусов'},
]
to_messages = [f"{message['to']}:{message['text']}" for message in messages]
to = ','.join(to_messages)
headers = {
'login': login,
'ts': ts,
'secret': secret,
'Content-type': 'application/json',
}
data = {
'route': 'sms',
'from': '<SENDER_NAME>',
'to': to
}
r = requests.post('https://cp.redsms.ru/api/message', headers=headers, data=json.dumps(data))
# print(r.status_code)
# print(r.text)
В случае, если отправляемый текст содержит символы ,
или :
, вы можете указать другие разделители, используя параметры phoneDelimeter
и textDelimeter
:
- 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 '{
"route": "sms",
"from": "<SENDER_NAME>",
"phoneDelimeter": "|",
"textDelimeter": "=",
"to": "+79993332211=Ваш бонусный баланс: 53,20 ₽|+79993332212=Ваш бонусный баланс: 3,14 ₽|+79993332213=Ваш бонусный баланс: 109,05 ₽"
}'
# В OSX вместо команды md5sum необходимо использовать команду md5
$login = '<USERNAME>';
$ts = 'ts-value-' . time();
$api_key = '<API_KEY>';
$secret = md5($ts . $api_key);
$phoneDelimeter = '|';
$textDelimeter = '=';
$messages = [
['to' => '+79993332211', 'text' => 'Ваш бонусный баланс: 53,20 ₽'],
['to' => '+79993332212', 'text' => 'Ваш бонусный баланс: 3,14 ₽'],
['to' => '+79993332213', 'text' => 'Ваш бонусный баланс: 109,05 ₽'],
];
$toMessages = [];
foreach ($messages as $message) {
$toMessages[] = $message['to'] . $textDelimeter . $message['text'];
}
$to = implode($phoneDelimeter, $toMessages);
$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([
'route' => 'sms',
'from' => '<SENDER_NAME>',
'phoneDelimeter' => $phoneDelimeter,
'textDelimeter' => $textDelimeter,
'to' => $to
]));
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');
const phoneDelimeter = '|';
const textDelimeter = '=';
const messages = [
{ to: '+79993332211', text: 'Вам начислено 50 бонусов' },
{ to: '+79993332212', text: 'Вам начислено 23 бонуса' },
{ to: '+79993332213', text: 'Вам начислено 68 бонусов' },
];
const to = messages
.map((acc, message) => `${message.to}${textDelimeter}${message.text}`)
.join(phoneDelimeter);
(new Promise((resolve, reject) => {
const body = JSON.stringify({
route: 'sms',
from: '<SENDER_NAME>',
phoneDelimeter,
textDelimeter,
to,
});
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()
phone_delimiter = '|'
text_delimiter = '='
messages = [
{'to': '+79993332211', 'text': 'Ваш бонусный баланс: 53,20 ₽'},
{'to': '+79993332212', 'text': 'Ваш бонусный баланс: 3,14 ₽'},
{'to': '+79993332213', 'text': 'Ваш бонусный баланс: 109,05 ₽'},
]
to_messages = [f"{message['to']}{text_delimiter}{message['text']}" for message in messages]
to = phone_delimiter.join(to_messages)
headers = {
'login': login,
'ts': ts,
'secret': secret,
'Content-type': 'application/json',
}
data = {
'route': 'sms',
'from': '<SENDER_NAME>',
'phoneDelimeter': phone_delimiter,
'textDelimeter': text_delimeter,
'to': to
}
r = requests.post('https://cp.redsms.ru/api/message', headers=headers, data=json.dumps(data))
# print(r.status_code)
# print(r.text)