Интеграция c SMSPILOT поможет вам решить повседневные задачи по общению с клиентами, налаживанию коммуникаций с сотрудниками, а также задачи оптимизации различных технологических и бизнес-процессов.
С помощью простых HTTP-запросов вы можете отправлять команды нашим серверам:
API-ключ - это 64-символьная строка, которая служит для авторизации внешних приложений.
API-ключ можно скопировать из настроек: Личный кабинет → Настройки → API
Для тестирования можно использовать ключ эмулятор (реальной отправки SMS не происходит).
тестовый ключ
XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ
Для всех видов сообщений используется метод send. По умолчанию будет отправлена SMS.
Рекомендуется получать статусы в реальном времени (см. callback), или периодически проверять методом check.
https://smspilot.ru/api.php?send=test&to=79087964781&apikey=XYZ&format=json
удачный ответ
{"send":[
{"server_id":"9316849","phone":"79087964781","price":"1.31","status":"0"}
], "balance":"2935.50", "cost":"1.31", "server_packet_id":"9316849"}
ошибка
{"error": {"code": "111", "description": "Invalid phone", "description_ru": "Неправильный номер телефона"}}
Пример 1. Минимальный код, 79087964781 - замените на свой номер, а XYZ замените на свой API-ключ
<?php
echo file_get_contents('https://smspilot.ru/api.php?send=test&to=79087964781&apikey=XYZ&format=v');
// выведет 12345 - код SMS
// или текст ошибки - Invalid phone
// если указать &lang=ru ошибка вернется на русском языке - Неправильный номер телефона
Пример 2. Отправка SMS через шлюз SMSPILOT на чистом PHP (без CURL)
<?php
$phone = '79081234567'; // номер телефона в международном формате
$text = 'проверка'; // текст сообщения
$sender = 'INFORM'; // имя отправителя из списка https://smspilot.ru/my-sender.php
// !!! Замените API-ключ на свой https://smspilot.ru/my-settings.php
$apikey = 'XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ';
$url = 'https://smspilot.ru/api.php'
.'?send='.urlencode( $text )
.'&to='.urlencode( $phone )
.'&from='.$sender
.'&apikey='.$apikey
.'&format=json';
$json = file_get_contents( $url );
echo $json.'<br/>';
// {"send":[{"server_id":"10000","phone":"79081234567","price":"1.68","status":"0"}],"balance":"11908.50","cost":"1.68"}
// {"error":{"code": "400", "description": "User not found", "description_ru": "Пользователь не найден" }
$j = json_decode( $json );
if ( !isset($j->error)) {
echo 'SMS успешно отправлена server_id='.$j->send[0]->server_id;
} else {
trigger_error( $j->error->description_ru, E_USER_WARNING );
}
// проверить статус
// https://smspilot.ru/api.php?check=1234&apikey=XYZ&format=json
// {check: [{server_id: 1234,phone: "79081234567",status: 2}]}
Пример 3. API-2 Пакетная отправка персональных сообщений
<?php // Отправка нескольких SMS через SMSPILOT.RU (API-2)
// !!! Замените API-ключ на свой https://smspilot.ru/my-settings.php#api
$apikey = 'XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ';
$send = array(
'apikey' => $apikey,
'from' => 'INFORM',
'send' => array(
array('id' => 1, 'to' => '79087964781', 'text' => "Перенос\nстроки"),
array('id' => 2, 'to' => '79131437355', 'text' => 'Сообщение из двух частей, сообщение из двух частей, сообщение из двух частей'),
array('id' => 3, 'to' => '791122233322', 'text' => 'Неправильная длина номера телефона')
)
);
$result = file_get_contents('https://smspilot.ru/api2.php', false, stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => "Content-Type: application/json\r\n",
'content' => json_encode( $send ),
),
)));
echo '<pre>request data --
'.print_r( $send, true ).'
raw response --
'.$result.'
json_decode --
'.print_r( json_decode( $result ), true ).'
</pre>';
Пример 4. Используем библиотеку PHP для отправки SMS
<?php
include('smspilot.php');
sms('79081231212','Привет Мир!');
sms('79131231212','Ваш заказ отправлен!','example.com');
sms('79511231212,79511231213','Ваш сын получил 2 за поведение (отправлял смски во время урока)!','School');
— PHP разработчикам рекомендуем библиотеку PHP для отправки SMS или PHP класс для отправки SMS с примерами 2013-11-18
— Посмотрите примеры на GitHub
// Отправка SMS на чистом C#
using System;
using System.Net;
using System.IO;
using System.Web;
namespace smspilot
{
class Program
{
public static void Main(string[] args)
{
string send = "Привет мир!"; // текст SMS
string to = "79876543210"; // номер телефона в международном формате
// имя отправителя из списка https://smspilot.ru/my-sender.php
string _from = "";
// !!! Замените API-ключ на свой https://smspilot.ru/my-settings.php#api
string apikey = "XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ";
string url = "http://smspilot.ru/api.php" +
"?send="+Uri.EscapeUriString( send ) +
"&to=" + to +
"&from=" + _from +
"&apikey=" + apikey; // +
//"&charset=windows-1251";
HttpWebRequest myHttpWebRequest =
(HttpWebRequest)HttpWebRequest.Create( url );
// выполняем запрос
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
// выводим результат в консоль
StreamReader myStreamReader =
new StreamReader(myHttpWebResponse.GetResponseStream());
Console.WriteLine(myStreamReader.ReadToEnd());
Console.WriteLine("Нажмите любую клавишу для завершения.");
Console.ReadKey();
}
}
}
# -*- coding: utf-8 -*-
# Отправка SMS на чистом Python через sms-шлюз SMSPILOT.RU
import urllib
import json
phone = '79037672215' # номер телефона в международном формате
text = 'проверка'; # текст сообщения
sender = 'INFORM'; # имя отправителя из списка https://smspilot.ru/my-sender.php
# !!! Замените API-ключ на свой https://smspilot.ru/my-settings.php#api
apikey = 'XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ';
url = "http://smspilot.ru/api.php?send=%s&to=%s&from=%s&apikey=%s&format=json" % (text, phone, sender, apikey )
j = json.loads(urllib.urlopen(url).read())
if 'error' in j:
print 'Ошибка: %s' % j.description_ru
else:
print j
# {u'balance': u'11908.50', u'cost': u'1.68', u'send': [{u'status': u'0', u'phone': u'79037672215', u'server_id': u'10000', u'price': u'1.68'}]}
print 'ID: %s' % j['send'][0]['server_id']
# ID: 10000
— Спасибо Stanislav Sokolov (ratso) за Python класс на гитхабе https://github.com/ratso/pySMSPilot
require 'net/http'
require 'json'
uri = URI('http://smspilot.ru/api.php')
params = {
:send => 'проверка', # текст сообщения
:to => '79087964781', # номер телефона в международном формате
# !!! Замените API-ключ на свой https://smspilot.ru/my-settings.php#api
:apikey => 'XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ',
:format => 'json'
}
uri.query = URI.encode_www_form(params)
res = Net::HTTP.get_response(uri)
j = JSON.parse( res.body )
puts j
if ( j['error'] )
puts j['error']['description_ru']
else
puts j['send'][0]['server_id'] # id сообщения
end
— Спасибо разработчику Armen P. (edg3r) за Ruby пакет на гитхабе https://github.com/edg3r/smspilot
// отправка SMS на чистой Node
var http = require('http');
var querystring = require('querystring');
var phone = '79037672215'; // номер телефона
var text = 'проверка'; // текст
var from = ''; // имя отправителя из списка https://smspilot.ru/my-sender.php
// !!! Замените API-ключ на свой https://smspilot.ru/my-settings.php#api
var apikey = 'XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ';
var uri = [
'http://smspilot.ru/api.php',
'?send=', querystring.escape( text ),
'&to=', phone,
'&from=', from,
'&apikey=', apikey,
'&format=json'
].join('');
http.get(uri, function(res) {
var str = ''
res.on('data', function (chunk) {
str += chunk;
});
res.on('end', function () {
console.log('ответ сервера: '+str);
var parsedData = JSON.parse(str);
console.log('server_id='+parsedData.send[0].server_id);
});
}).on('error', function(err) {
console.log('ошибка сети '+err);
});
— Node.js разработчикм могут посмотреть устаревший модуль от corpix-а здесь SMS на Node.js
program delphi7_example01;
// Отправка SMS на Delphi через SMS-шлюз SMSPILOT.RU
// File - New - Other - Console Application
{$APPTYPE CONSOLE}
uses
IdHTTP;
var phone, text, sender, apikey, url, response, id: string;
var pos_13,pos_comma: integer;
var http: TIdHTTP;
begin
http := TIdHTTP.Create(nil);
phone := '79037672215'; // номер телефона в междлународном формате
text := 'проверка'; // текст сообщения
sender := ''; // имя отправителя из списка https://www.smspilot.ru/my-sender.php
// !!! Замените API-ключ на свой https://www.smspilot.ru/my-settings.php#api
apikey := 'XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ';
url := 'http://www.smspilot.ru/api.php';
url := url + '?send=' + http.URL.ParamsEncode( text );
url := url + '&to=' + http.URL.ParamsEncode( phone );
url := url + '&from=' + http.URL.ParamsEncode( sender );
url := url + '&apikey=' + http.URL.ParamsEncode( apikey );
url := url + '&charset=windows-1251';
writeln( url );
response := http.Get( url );
{
SUCCESS=SMS SENT 0.89/320.50
4566,79037672215,0.60,0
}
if pos('ERROR', response ) = 1 then
writeln( response )
else begin
pos_13 := pos(#13, response );
pos_comma := pos(',', response);
id := copy( response, pos_13, pos_comma - pos_13-1 );
writeln( 'id=' + id ); // получили ID сообщения
end;
writeln('Press [Enter]');
readln;
end.
— Delphi разработчики могут скачать проект SMS на Delphi 7, а также SMS на Delphi XE
Sub Кнопка1_Щелчок()
If SMS("79087964781", "Привет") Then MsgBox ("Сообщение отправлено") Else MsgBox SMSError()
End Sub
' Собственнно функция для отправки SMS http://www.smspilot.ru/apikey.php
Public Function SMS(Phone As String, Text As String) As Boolean
SMS = False
Set HttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "http://smspilot.ru/api.php"
URL = URL & "?send=" & URLEncode(Text)
URL = URL & "&to=" & Phone
' Своя подпись
' URL = URL & "&from="
' (!) Замените на свой API-ключ https://www.smspilot.ru/my-settings.php#api
URL = URL & "&apikey=XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ"
URL = URL & "&charset=windows-1251"
If HttpReq.Open("GET", URL, False) <> 0 Then
SMSError ("Connection error")
Exit Function
End If
If HttpReq.Send() <> 0 Then
SMSError ("Open URL " & URL & " error")
Exit Function
End If
If Left$(HttpReq.responseText, 7) <> "SUCCESS" Then
SMSError (HttpReq.responseText)
Exit Function
End If
SMS = True
SMSError ("")
End Function
' Функция для хранения последней ошибки
Public Function SMSError(Optional SetErr As String = "") As String
Static Err
If SetErr <> "" Then Err = SetErr
SMSError = Err
End Function
' Кодирование URL параметров http://ru.wikipedia.org/wiki/URL
Public Function URLEncode(StringVal As String, Optional SpaceAsPlus As Boolean = False) As String
Dim StringLen As Long: StringLen = Len(StringVal)
If StringLen > 0 Then
ReDim result(StringLen) As String
Dim i As Long, CharCode As Integer
Dim Char As String, Space As String
If SpaceAsPlus Then Space = "+" Else Space = "%20"
For i = 1 To StringLen
Char = Mid$(StringVal, i, 1)
CharCode = Asc(Char)
Select Case CharCode
Case 97 To 122, 65 To 90, 48 To 57, 45, 46, 95, 126
result(i) = Char
Case 32
result(i) = Space
Case 0 To 15
result(i) = "%0" & Hex(CharCode)
Case Else
result(i) = "%" & Hex(CharCode)
End Select
Next i
URLEncode = Join(result, "")
End If
End Function
//*******************************************************
Функция UTF8(Стр)
Длина=СтрДлина(Стр);
Итог="";
Для Н=1 По Длина Цикл
Знак=Сред(Стр,Н,1);
Код=КодСимв(Знак);
Если Код<128 Тогда
Итог=Итог+Знак;
Иначе
Если (Код>=КодСимв("А"))И(Код<=КодСимв("п")) Тогда
Итог=Итог+Симв(208)+Симв(144+Код-КодСимв("А"));
ИначеЕсли (Код>=КодСимв("р"))И(Код<=КодСимв("я")) Тогда
Итог=Итог+Симв(209)+Симв(128+Код-КодСимв("р"));
ИначеЕсли (Знак="ё") Тогда
Итог=Итог+Симв(209)+Симв(145);
ИначеЕсли (Знак="Ё") Тогда
Итог=Итог+Симв(208)+Симв(129);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Итог;
КонецФункции
//*******************************************************
Процедура ОтправитьСМС(Телефон,ТекстСМС)
//Телефон в формате +79ххххххххх
// (!) Замените на свой API-ключ https://www.smspilot.ru/my-settings.php#api
API = "XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ";
Если ЗагрузитьВнешнююКомпоненту("v7plus.dll")=0 Тогда
Сообщить("Не удалось обнаружить компоненту V7Plus.dll!");
КонецЕсли;
Попытка
Соединение = СоздатьОбъект("Addin.V7HttpReader");
Соединение.КоличествоПопытокАвторизации = 1;
Исключение
Сообщить("Не удалось создать объект Addin.V7HttpReader!");
КонецПопытки;
Адрес = "http://smspilot.ru/api.php?send=";
стр="";
СМС = UTF8(ТекстСМС);
Адрес = Адрес+СокрЛП(СМС)+"&to="+Прав(СокрЛП(Телефон),11)+"&apikey="+API;
Попытка
Соединение.ПолучитьКакСтроку(Адрес, Стр);
Сообщить("-+-============== Отправка СМС ================-+-");
Успешно = "SUCCESS=SMS SENT";
Если лев(стр,16)=Успешно Тогда
Сообщить("Сообщение на номер: "+Телефон);
Сообщить("С текстом: "+ТекстСМС);
Тхт=СокрЛП(СтрЗаменить(Стр,Успешно,""));
ЦенаСМС = Лев(Тхт,Найти(Тхт,"/")-1);
Тхт=СтрЗаменить(Тхт,ЦенаСМС+"/","");
ОстатокНаСчете = Лев(Тхт,Найти(Тхт,Симв(13))-1);
Сообщить("Успешно отправлено! Цена за СМС = "+ЦенаСМС+" руб.; Остаток на счету = "+ОстатокНаСчете+" руб.");
КонецЕсли;
Исключение
Сообщить("Неудачная попытка отправки СМС.");
КонецПопытки;
КонецПроцедуры
#!/usr/bin/perl -w
use Output;
use Socket;
$send = "Hello World!"; # текст сообщения
$to = "79087964781"; # номер телефона в международном формате
# !!! Замените API-ключ на свой https://smspilot.ru/my-settings.php#api
$apikey = "XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ";
$host="smspilot.ru";
$port="80";
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
$iaddr = inet_aton($host);
$paddr = sockaddr_in($port, $iaddr);
connect(SOCK, $paddr);
$send =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
send (SOCK, "GET /api.php?send=$send&to=$to&apikey=$apikey HTTP/1.0\nHOST:$host\n\n", 0);
@data=;
close(SOCK);
print $data;
— Perl разработчикам рекомендуем модуль Net::SMS::SMSPilot (Даниил Путилин, независимый разработчик)
Скрипт sendsms.sh для отправки SMS из консоли Linux (CentOS,Ubuntu,Debian,Fedora...)
#!/bin/bash
# Отправка SMS через шлюз SMSPILOT.RU на Bash
#
# ./sendsms.sh "test" "79087964781"
#
text=$1
phone=$2
# (!!!) Замените XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ
# на свой API-ключ: https://smspilot.ru/my-settings.php#api
apikey=XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ
curl -v --data-urlencode send="$text" --data-urlencode to="$phone" --data apikey="$apikey" http://smspilot.ru/api.php
# альтернативный вариант это запрос через wget, замените XYZ на свой API-ключ
# wget -q http://smspilot.ru/api.php?send=Hello&to=79087964781&apikey=XYZ"
Можно использовать консольную программу для отправки SMS (1С,C#,Delphi,VB...) или smspilot.vbs скприт для оболочки WSH VBS:
' SMS через SMSPILOT.RU
Phone = "79087964781"
' Для поддержки кириллицы нужен очень длинный скрипт, поэтому используем транслит
Text = "Otpravka SMS cherez SMSPILOT WSH VBS"
' (!!!) Замените на свой API-ключ https://www.smspilot.ru/my-settings.php#api
APIKEY = "XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ"
Set HttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "http://smspilot.ru/api.php"
URL = URL & "?send=" & Replace(Text," ", "%20")
URL = URL & "&to=" & Phone
' Своя подпись
' URL = URL & "&from=smspilot"
URL = URL & "&apikey=" & APIKEY
If HttpReq.Open("GET", URL, False) <> 0 Then
wscript.echo "Connection error"
ElseIf HttpReq.Send() <> 0 Then
wscript.echo "Open URL " & URL & " error"
Else
wscript.echo HttpReq.responseText
End If
С помощью
API-1 SMS можно отправлять одиночные SMS или одинаковые SMS на несколько номеров.
Для пакетной отправки персональных SMS используйте
API-2 SMS.
HLR (Home Location Register) - операторская база данных об абонентах сотовых сетей GSM. HLR-запросы нужны для проверки статуса и очистки баз данных от неактуальных номеров. Запросы позволяют установить состояние номера телефона клиента - активен или не обслуживается (так же возможно, но не гарантируется установление нахождения абонента в роуминге или в домашней сети, MCC/MNC код мобильного оператора).
HLRVIP отличается от HLR тем, что операторам которые плохо поддерживают HLR отправляется PING, а также шлюз пытается извлечь доп. параметры (например imsi)
Рекомендуется получать статусы в реальном времени (см. callback) или периодически проверять методом check.
https://smspilot.ru/api.php?send=HLR&to=79087964781&callback=https%3A%2F%2Fexample.com%2Fhlr-status.php&apikey=XYZ&format=v
или
https://smspilot.ru/api.php?send=HLRVIP&to=79087964781&callback=https%3A%2F%2Fexample.com%2Fhlr-status.php&apikey=XYZ&format=v
удачный ответ, код HLR-запроса
12345678
ошибка
Invalid number
после получения ответа от оператора, если абонент обслуживается, то наш сервер вызовет указанный скрипт
GET /hlr-status.php?server_id=12345678&phone=79087964781&status=2 HTTP/1.1
Host: example.com
если абонент не обслуживается, то status=-1
GET /hlr-status.php?server_id=12345678&phone=79087964781&status=-1&error=604&error_en=Undeliverable&error_ru=Невозможно%20доставить HTTP/1.1
Host: example.com
https://smspilot.ru/api.php?send=HLR&to=79087964781&apikey=XYZ&format=v
или
https://smspilot.ru/api.php?send=HLRVIP&to=79087964781&apikey=XYZ&format=v
удачный ответ, код HLR-запроса
12345678
ошибка
Invalid number
вызываем check до получения финального статуса или ошибки с двухминутной задержкой
https://smspilot.ru/api.php?check=12345678&apikey=XYZ&format=v
удачный ответ, код статуса
2
ошибка
Invalid IDs list
<?php
// send_hlr.php
// Асинхронно отправляем HLR-запрос оператору, чтобы выяснить обслуживается данный номер или уже нет
$phone = '79999999999'; // замените на свой телефон, можно перечислить до 500 через запятую
$callback = 'http://example.com/hlr_callback.php'; // замените на свой скрипт для приёма статуса запроса
$apikey = 'XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ'; // замените на свой API-ключ https://smspilot.ru/my-settings.php#api
$json = file_get_contents('http://smspilot.ru/api.php?send=HLR&to='.urlencode($phone).'&apikey='.$apikey.'&callback='.urlencode($callback).'&format=json');
$j = json_decode($json);
if (!isset($j->error)) {
echo 'HLR запрос успешно отправлен';
} else {
trigger_error($j->error->description_ru, E_USER_WARNING);
}
<?php
// hlr_callback.php
// Сюда приходит статус HLR-запроса
// Пишем данные в лог, поэтому создайте hlr.log в папке скрипта и дайте права на запись
file_put_contents( __DIR__ . '/hlr.log', "\r\n_GET = ".print_r( $_GET, true), FILE_APPEND );
<?php
// send_hlr.php
if (PHP_SAPI !== 'cli') {
echo '<pre>';
}
// Отправляем HLR-запрос оператору, чтобы выяснить обслуживается данный номер или уже нет
$phone = '79999999999'; // замените на свой телефон, можно перечислить до 500 через запятую
$apikey = 'XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ'; // замените на свой API-ключ https://smspilot.ru/my-settings.php#api
$url = 'http://smspilot.ru/api.php?send=HLR&to='.urlencode($phone).'&apikey='.$apikey.'&format=json';
echo 'HLR запрос: '.$url.PHP_EOL;
$json = file_get_contents($url);
echo $json.PHP_EOL;
$j = json_decode($json);
if (isset($j->error)) {
trigger_error($j->error->description_ru, E_USER_WARNING);
return;
}
$server_id = $j->send[0]->server_id;
echo 'HLR запрос успешно отправлен'.PHP_EOL;
echo 'Проверяем статус:'.PHP_EOL;
$st = [
-2 => 'ошибка', // финальный
-1 => 'не обcлуживается', // финальный
0 => 'запрос принят',
1 => 'запрос отправлен оператору',
2 => 'обслуживается' // финальный
];
ob_implicit_flush(); // небуферизированный вывод
$i = 0;
$is_finish = false;
do {
$i++;
sleep(10);
$url = 'http://smspilot.ru/api.php?check='.$server_id.'&apikey='.$apikey.'&format=json';
echo 'Попытка '.$i.': '.$url.PHP_EOL;
$json = file_get_contents($url);
echo $json.PHP_EOL;
$j = json_decode($json);
if (isset($j->error)) {
trigger_error($j->error->description_ru, E_USER_WARNING);
break;
}
$status = (int) $j->check[0]->status;
if ($status === -2 || $status === -1 || $status === 2) {
$is_finish = true;
}
echo $st[$status] . PHP_EOL;
} while ($i < 10 && !$is_finish);
echo $is_finish ? 'OK' : 'Не удалось проверить за отведенное время';
echo PHP_EOL;
if (PHP_SAPI !== 'cli') {
echo '</pre>';
}
С помощью API-1 HLR можно проверять один или несколько номеров.
Для пакетной проверки номеров удобнее API-2 HLR
PING-сообщения нужны для проверки телефон на доступность в реальном времени. Это скрытое Flash-сообщение, которое не отображается на экране телефона. Поддерживается всеми российскими оператороми, абоненты зарубженых операторов получают обычную SMS с текстом PING.
Рекомендуется получать статусы в реальном времени (см. callback), или периодически проверять методом check.
https://smspilot.ru/api.php?send=PING&to=79087964781&format=json&apikey=XYZ&fromat=v
удачный ответ, код PING-сообщения:
12345678
или ошибка
Invalid phone length
С помощью API-1 PING можно проверять один или несколько номеров.
Для пакетной проверки номеров удобнее API-2 PING
Для отправки голосовых уведомлений измените имя отправителя на GOLOS
https://smspilot.ru/api.php?send=test&to=79087964781&from=GOLOS&apikey=XYZ&format=v
удачный ответ, код сообщения
12345678
или текст ошибки
Invalid phone length
Для отправки кода FlashCall измените имя отправителя на FLASHCALL, а четырехзначный код передайте как send
https://smspilot.ru/api.php?send=1234&to=79087964781&from=FLASHCALL&apikey=XYZ&format=v
удачный ответ, код сообщения
12345678
или текст ошибки
Invalid phone length
Пусть клиенты напишут вам, а вы сможете программно обработать SMS, отправленные абонентами на общий сервисный номер
Как это работает:
1. Убедитесь, что ваш номер есть в белом списке контактов 2. Отправьте со своего телефона SMS с текстом Привет на номер +79533984570 3. Сообщение появится в личном кабинете, на странице Отчеты - Входящие
Можно указать адрес скрипта для получения входящих сообщений в реальном времени:
1. Укажите адрес скрипта на странице ЛК - Настройки - API Входящие 2. См. описание передаваемых параметров в документации API-1 или API-2
или периодически проверять наличие новых сообщений на сервере API-1 или API-2.
https://smspilot.ru/api.php?inbound=new&apikey=XYZ&format=json
{"inbound": [
{"id": "12345", "phone" : "79087964781", "num" : "79533984570", "text" : "Ура работает!", "created" : "2021-09-20 20:15", "seen ": "0"},
{"id": "12346", "phone" : "79087964782", "num" : "79533984570", "text" : "Дима Билан!", "created" : "2021-09-20 21:11", "seen": "0"}
]}
В обычном режиме отправленные SMS приходят абонентам от буквенных имен, на такие сообщения нельзя ответить. Для двухстороннего обмена:
1. Замените отправителя на 2WAY 2. Используйте сервисный шаблон, отмеченный как Опрос/голосование https://smspilot.ru/api.php?send=test&to=79087964781&from=2WAY&apikey=XYZ&format=v 3. SMS придет от сервисного номера, абонент сможет ответить.
В зависимости от настроек входящих вы сможете получить это сообщение в реальном времени или запросить список входящих через несколько минут.
https://smspilot.ru/api.php?inbound=new&apikey=XYZ&format=json
{"inbound": [
{"id": "12345", "phone" : "79087964781", "num" : "79533984570", "text" : "Ура работает!", "created" : "2021-09-20 20:15", "seen ": "0"},
{"id": "12346", "phone" : "79087964782", "num" : "79533984570", "text" : "Дима Билан!", "created" : "2021-09-20 21:11", "seen": "0"}
]}
Ответы также можно посмотреть в личном кабинете, на странице Отчеты - Входящие.
Код | Название | Финальный | Описание |
---|---|---|---|
-2 | Ошибка | Да | Ошибка, неправильные параметры запроса |
-1 | Не доставлено | Да | Сообщение не доставлено (не в сети, заблокирован, не взял трубку), PING - не в сети, HLR - не обслуживается (заблокирован) |
0 | Новое | Нет | Новое сообщение/запрос, ожидает обработки у нас на сервере |
1 | В очереди | Нет | Сообщение или запрос ожидают отправки на сервере оператора |
2 | Доставлено | Да | Доставлено, звонок совершен, PING - в сети, HLR - обслуживается |
3 | Отложено | Нет | Отложенная отправка, отправка сообщения/запроса запланирована на другое время |
Рекомендуется получать статусы в реальном времени (см. callback), или периодически проверять методом check через API-1 или API-2.
https://smspilot.ru/api.php?check=12345678&apikey=XYZ&format=v
удачный ответ
2
или ошибка
Invalid IDs list
Код | Текст (EN) | Текст (RU) |
---|---|---|
0 | Success | Нет ошибок |
1 | Unknown error %code | Низвестная ошибка %code |
10 | INPUT data is required | Нет входных данных |
11 | Unknown INPUT format | Неизвестный формат |
12 | XML structure is invalid %xmlerror | Ошибка XML %xmlerror |
13 | JSON structure is invalid | Ошибка JSON |
14 | Unknown action | Неизвестная команда |
100 | APIKEY is required | Не указан API-ключ (параметр apikey) |
101 | APIKEY is invalid | Неправильный API-ключ (см. настройки API в личном кабинете) |
102 | APIKEY not found | Такой API-ключ не найден в системе |
105 | User is blocked (balance) | Пользователь заблокирован из-за низкого баланса |
106 | User is blocked | Пользователь заблокирован за спам/ошибки |
107 | User is blocked (untrusted) | Пользователь заблокирован за недостоверные учетные данные / недоступна эл. почта / проблемы с телефоном |
108 | Phone is required | Не указан телефон |
110 | System error | Системная ошибка |
111 | Invalid phone | Неправильный номер телефона |
112 | No money | Нет денег |
113 | IP restriction | Недопустимый IP |
115 | Invalid sender | Неправильный отправитель |
120 | E-mail required | Не указан адрес электронной почты |
121 | Invalid email | Неправильный адрес электронной почты |
122 | User is blocked (disput) | Пользователь временно заблокирован (спорная ситуация) |
200 | Sender (from) is required | Не указан отправитель |
201 | Sender (from) is invalid | Неправильный формат отправителя |
204 | Sender (from) unregistered | Отправитель (from) не зарегистрирован, либо отключен |
210 | TO is required | Не указан получатель |
212 | Phone in black list | Телефон в черном списке |
213 | Unsupported operator | Оператор не поддерживается |
214 | Phone is dublicated | Дубликат получателя |
215 | Invalid phone length | Неправильная длина номера телефона |
216 | Phone prefix not allowed | Ограничение нумерации (см. настроки API в ЛК) |
220 | TEXT is required | Введите текст сообщения |
221 | TEXT too long | Текст сообщения слишком длинный |
222 | Unknown charset | Неизвестная кодировка |
223 | Antispam (use business account, templates or whitelist) | Защита от спама (подкл. как бизнес-клиент или исп. шаблоны или добавьте контакт в белый список) |
224 | Antispam (use other sender) | Защита от спама (используйте другое имя отправителя) |
225 | Antispam (sender not configured) | Защита от спама (имя не настроено для этого оператора) |
226 | Antispam (sender not configured, alt. channels disabled) | Имя отправителя не настроено (подключите платное имя отправителя или добавьте шаблон для отправки от общего имени) |
227 | Antispam (use survey-template only) | Для приглашения к опросу/голосованию нужен спец. шаблон, напишите в поддержку |
228 | Antispam (template only) | Добавьте сервисный шаблон |
229 | Service available for business clients only | Услуга доступна только бизнес-клиентам |
230 | ID is invalid | ID неправильный |
231 | PACKET_ID is invalid | PACKET_ID неправильный |
232 | Voice message error (use white list or business tariff) | Ошибка голосового сообщения (подкл. как бизнес-клиент или добавьте контакт в белый список) |
233 | Use cyrillic in voice message | Используйте только кириллицу в голосовых сообщениях |
240 | Invalid message list | Неправильный список сообщений |
243 | Daily limit | Превышение лимита на SMS в сутки |
247 | Filter | Фильтры |
248 | CyrLat filter | Кириллица и латиница в одном слове |
250 | Invalid SEND_DATETIME | Неправильное время отправки send_datetime |
260 | Invalid callback URL | Неправильный адрес скрипта callback |
261 | Invalid callback response | Неправильный ответ скрипта callback |
270 | Invalid ttl | Неправильное время жизни сообщения ttl |
275 | Invalid list fields | Неправильный список полей fields |
300 | SMS server_id is required | server_id не указан |
301 | SMS server_id is invalid | server_id неправильный |
302 | SMS not found | SMS не найдена |
303 | Invalid IDs list | Ошибка запроса |
304 | SERVER_PACKET_ID is invalid | server_packet_id неправильный |
400 | User not found | Пользователь не найден |
401 | Invalid login details | Не введен логин или пароль |
402 | Wrong password | Неправильный пароль |
500 | Invalid -since- format YYYY-MM-DD HH:II:SS | Неправильный формат параметра -since- YYYY-MM-DD HH:II:SS |
600 | Expired | Просрочено |
601 | Undeliverable | Невозможно доставить |
602 | Destination unreachable | Номер недоступен |
603 | Rejected | Отказано оператором |
604 | Cancelled | Отменено |
605 | The recipient has disabled such messages | Абонент запретил отправлять ему SMS |
630 | TEMPLATE is required | Введите шаблон |
631 | TEMPLATE too long | Шаблон слишком длинный |
632 | TEMPLATE exits | Такой шаблон уже есть |
633 | TEMPLATE callback is required | Нужен callback |
634 | TEMPLATE callback is invalid | Неправильный callback |
640 | Sender is required | Введите имя отправителя |
641 | Sender is invalid | Неправильное имя отправителя |
642 | Sender is added | Уже добавленное имя отправителя |
643 | Description is required | Введите название проекта, сайт, примеры сообщений |
644 | Callback is required (URL or email) | Нужен callback (URL или email) |
645 | Callback is invalid (URL or email) | Неправильный callback (URL или email) |
650 | Operator blocks HLR/PING | Оператора блокирует HLR/PING |
651 | PING is available only for Russian phones | PING доступен только для российских номеров |
660 | FLASHCALL requires 4-digits code | FLASHCALL нужен 4-значный код |
670 | Contact group name required | Введите название группы |
671 | Contact group name too long (max %maxlen) | Слишком длинное название (макс. %maxlen) |
672 | Contact group name has not changed | Ничего не изменилось |
673 | Contact group exists | Такая группа уже существует |
674 | Contact group description too long (max %maxlen) | Описание группы слишком длинное (макс %maxlen) |
680 | Contact phone required | Введите телефон контакта |
681 | Contact phone is invalid | Неправильный телефон контакта |
682 | Contact phone exists (%url) | Контакт с таким номером уже есть (%url) |
683 | Contact name is required | Введите ФИО контакта |
684 | Contact name too long (max %maxlen) | Слишком длинное ФИО контакта (макс. %maxlen) |
685 | Contact name exists (%url) | Контакт с таким именем уже существует (%url) |
686 | Contact email is invalid | Неправильный адрес эл. почты контакта (макс. %maxlen) |
687 | Contact email exists (%url) | Контакт с такой эл. почтой уже существует (%url) |
688 | Contact date of birth is invalid | Неправильная дата рождения |
689 | Contact gender error | Ошибка при указании пола контакта |
690 | Contact description too long (max %maxlen) | Слишком длинное описание контакта (макс. %maxlen) |
691 | Contact custom field error (%name) | Ошибка значения поля (%name) |
700 | Receiver name required | Не указано имя получателя |
701 | Receiver name too long (max %maxlen) | Слишком длинное имя получателя (максимум %maxlen) |
702 | Receiver email required | Не указан адрес электронной почты получателя |
703 | Invalid receiver email | Неправильный адрес электронной почты получателя |
704 | Sender name required | Не указано имя отправителя |
705 | Sender name too long (max %maxlen) | Слишком длинное имя отправителя(максимум %maxlen) |
706 | Sender email required | Не указан адрес электронной почты отправителя |
707 | Invalid sender email | Неправильный адрес электронной почты отправителя |
708 | Reply name too long (max %maxlen) | Слишком длинное имя для ответа |
709 | Invalid reply name | Неправильный адрес для ответа |
710 | Subject required | Не указана тема письма |
711 | Subject too long (max %maxlen) | Слишком длинная тема письма (максимум %maxlen) |
712 | Message required | Пустое сообщение |
713 | Message too long (max %maxlen) | Слишком длинное сообщение (максимум %maxlen) |
714 | HTML-message too long (max %maxlen) | Слишком длинное html-сообщение (максимум %maxlen) |
715 | Invalid cc email | Неправильный адрес электронной почты получателя копии |