API SMSPILOT

Интеграция c SMSPILOT поможет вам решить повседневные задачи по общению с клиентами, налаживанию коммуникаций с сотрудниками, а также задачи оптимизации различных технологических и бизнес-процессов.

С помощью простых HTTP-запросов вы можете отправлять команды нашим серверам:

  • SMS-шлюз SMSPILOT - это сервер отправки SMS. Вам не нужно покупать gsm-модем. Ваш программист может добавить отправку SMS на сайт, интернет-магазин, Android-приложение или в программу для Windows.
  • Чекер номеров - сервер для проверки телефонных номеров: HLR-запросы - доступен / недоступен, PING - в сети / не в сети
  • VOIP шлюз - сервер голосовых сообщений и сигналов. Робот позвонит и озвучит нужный текст.

Полная документация

Быстрый старт

  1. API SMS Отправка SMS
  2. API HLR Обслуживается или нет (чекер номеров)
  3. API PING В сети или нет
  4. API VOICE VoiceSMS, голосовые уведомления (звонки)
  5. API FLASHCALL Код как посление цифры номера входящего звонка
  6. API SMS2WEB Прием входящих SMS
  7. API 2WAY Двухсторонний обмен сообщениям
  8. Статусы
  9. Ошибки
 

API-ключ

API-ключ - это 64-символьная строка, которая служит для авторизации внешних приложений.
API-ключ можно скопировать из настроек: Личный кабинетНастройкиAPI
Для тестирования можно использовать ключ эмулятор (реальной отправки SMS не происходит).

тестовый ключ
XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ

API SMS (отправка SMS)

Для всех видов сообщений используется метод send. По умолчанию будет отправлена SMS.

Рекомендуется получать статусы в реальном времени (см. callback), или периодически проверять методом check.

HTTP
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": "Неправильный номер телефона"}}
PHP

Пример 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

C# .Net
// Отправка 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();

		}
	}
}
Python
# -*- 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

Ruby
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

Node.js
// отправка 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

Delphi
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

VBA (Excel)
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
1C v7.7
//*******************************************************
Функция 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);

			Сообщить("Успешно отправлено! Цена за СМС = "+ЦенаСМС+" руб.; Остаток на счету = "+ОстатокНаСчете+" руб.");
		КонецЕсли;
	Исключение
		Сообщить("Неудачная попытка отправки СМС.");
	КонецПопытки;
КонецПроцедуры
Perl
#!/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 (Даниил Путилин, независимый разработчик)

Bash

Скрипт 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"
Консоль Windows

Можно использовать консольную программу для отправки 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.

 

API HLR (Обслуживается или нет)

HLR (Home Location Register) - операторская база данных об абонентах сотовых сетей GSM. HLR-запросы нужны для проверки статуса и очистки баз данных от неактуальных номеров. Запросы позволяют установить состояние номера телефона клиента - активен или не обслуживается (так же возможно, но не гарантируется установление нахождения абонента в роуминге или в домашней сети, MCC/MNC код мобильного оператора).

HLRVIP отличается от HLR тем, что операторам которые плохо поддерживают HLR отправляется PING, а также шлюз пытается извлечь доп. параметры (например imsi)

Рекомендуется получать статусы в реальном времени (см. callback) или периодически проверять методом check.

HTTP Асинхронно
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
HTTP Синхронно
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 Асинхронный
<?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 Синхронный
<?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

 

API PING (абонент в сети или нет)

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

API VOICE (Голосовые уведомления, звонки)

Для отправки голосовых уведомлений измените имя отправителя на GOLOS

https://smspilot.ru/api.php?send=test&to=79087964781&from=GOLOS&apikey=XYZ&format=v

удачный ответ, код сообщения

12345678

или текст ошибки

Invalid phone length
  1. Рекомендуется получать статусы в реальном времени (см. callback), или периодически проверять методом check.
  2. С помощью API-1 VOICE можно отправить голосовое сообщение на один или несколько номеров.
  3. Для отправки персональных голосовых сообщений используйте API-2 VOICE

API FLASHCALL (Код как последние цифры номера входящего звонка)

Для отправки кода FlashCall измените имя отправителя на FLASHCALL, а четырехзначный код передайте как send

https://smspilot.ru/api.php?send=1234&to=79087964781&from=FLASHCALL&apikey=XYZ&format=v

удачный ответ, код сообщения

12345678

или текст ошибки

Invalid phone length
  1. Рекомендуется получать статусы в реальном времени (см. callback), или периодически проверять методом check.
  2. С помощью API-1 FLASHCALL установить тестовый режим или узнать стоимость.
  3. Как это работает?

API SMS2WEB (Прием входящих SMS)

Пусть клиенты напишут вам, а вы сможете программно обработать 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"}
]}

API 2WAY (Двухсторонний обмен сообщениями)

В обычном режиме отправленные 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)
0SuccessНет ошибок
1Unknown error %codeНизвестная ошибка %code
10INPUT data is requiredНет входных данных
11Unknown INPUT formatНеизвестный формат
12XML structure is invalid %xmlerrorОшибка XML %xmlerror
13JSON structure is invalidОшибка JSON
14Unknown actionНеизвестная команда
100APIKEY is requiredНе указан API-ключ (параметр apikey)
101APIKEY is invalidНеправильный API-ключ (см. настройки API в личном кабинете)
102APIKEY not foundТакой API-ключ не найден в системе
105User is blocked (balance)Пользователь заблокирован из-за низкого баланса
106User is blockedПользователь заблокирован за спам/ошибки
107User is blocked (untrusted)Пользователь заблокирован за недостоверные учетные данные / недоступна эл. почта / проблемы с телефоном
108Phone is requiredНе указан телефон
110System errorСистемная ошибка
111Invalid phoneНеправильный номер телефона
112No moneyНет денег
113IP restrictionНедопустимый IP
115Invalid senderНеправильный отправитель
120E-mail requiredНе указан адрес электронной почты
121Invalid emailНеправильный адрес электронной почты
122User is blocked (disput)Пользователь временно заблокирован (спорная ситуация)
200Sender (from) is requiredНе указан отправитель
201Sender (from) is invalidНеправильный формат отправителя
204Sender (from) unregisteredОтправитель (from) не зарегистрирован, либо отключен
210TO is requiredНе указан получатель
212Phone in black listТелефон в черном списке
213Unsupported operatorОператор не поддерживается
214Phone is dublicatedДубликат получателя
215Invalid phone lengthНеправильная длина номера телефона
216Phone prefix not allowedОграничение нумерации (см. настроки API в ЛК)
220TEXT is requiredВведите текст сообщения
221TEXT too longТекст сообщения слишком длинный
222Unknown charsetНеизвестная кодировка
223Antispam (use business account, templates or whitelist)Защита от спама (подкл. как бизнес-клиент или исп. шаблоны или добавьте контакт в белый список)
224Antispam (use other sender)Защита от спама (используйте другое имя отправителя)
225Antispam (sender not configured)Защита от спама (имя не настроено для этого оператора)
226Antispam (sender not configured, alt. channels disabled)Имя отправителя не настроено (подключите платное имя отправителя или добавьте шаблон для отправки от общего имени)
227Antispam (use survey-template only)Для приглашения к опросу/голосованию нужен спец. шаблон, напишите в поддержку
228Antispam (template only)Добавьте сервисный шаблон
229Service available for business clients onlyУслуга доступна только бизнес-клиентам
230ID is invalidID неправильный
231PACKET_ID is invalidPACKET_ID неправильный
240Invalid message listНеправильный список сообщений
243Daily limitПревышение лимита на SMS в сутки
247FilterФильтры
248CyrLat filterКириллица и латиница в одном слове
250Invalid SEND_DATETIMEНеправильное время отправки send_datetime
260Invalid callback URLНеправильный адрес скрипта callback
261Invalid callback responseНеправильный ответ скрипта callback
270Invalid ttlНеправильное время жизни сообщения ttl
275Invalid list fieldsНеправильный список полей fields
300SMS server_id is requiredserver_id не указан
301SMS server_id is invalidserver_id неправильный
302SMS server_id not foundSMS не найдена
303Invalid IDs listОшибка запроса
304SERVER_PACKET_ID is invalidserver_packet_id неправильный
400User not foundПользователь не найден
401Invalid login detailsНе введен логин или пароль
402Wrong passwordНеправильный пароль
500Invalid -since- format YYYY-MM-DD HH:II:SSНеправильный формат параметра -since- YYYY-MM-DD HH:II:SS
600ExpiredПросрочено
601UndeliverableНевозможно доставить
602Destination unreachableНомер недоступен
603RejectedОтказано оператором
604CancelledОтменено
605The recipient has disabled such messagesАбонент запретил отправлять ему SMS
630TEMPLATE is requiredВведите шаблон
631TEMPLATE too longШаблон слишком длинный
632TEMPLATE exitsТакой шаблон уже есть
633TEMPLATE callback is requiredНужен callback
634TEMPLATE callback is invalidНеправильный callback
640Sender is requiredВведите имя отправителя
641Sender is invalidНеправильное имя отправителя
642Sender is addedУже добавленное имя отправителя
643Description is requiredВведите название проекта, сайт, примеры сообщений
644Callback is required (URL or email)Нужен callback (URL или email)
645Callback is invalid (URL or email)Неправильный callback (URL или email)
650Operator blocks HLRОператора блокирует HLR
660FLASHCALL requires 4-digits codeFLASHCALL нужен 4-значный код
670Contact group name requiredВведите название группы
671Contact group name too long (max %maxlen)Слишком длинное название (макс. %maxlen)
672Contact group name has not changedНичего не изменилось
673Contact group existsТакая группа уже существует
674Contact group description too long (max %maxlen)Описание группы слишком длинное (макс %maxlen)
680Contact phone requiredВведите телефон контакта
681Contact phone is invalidНеправильный телефон контакта
682Contact phone exists (%url)Контакт с таким номером уже есть (%url)
683Contact name is requiredВведите ФИО контакта
684Contact name too long (max %maxlen)Слишком длинное ФИО контакта (макс. %maxlen)
685Contact name exists (%url)Контакт с таким именем уже существует (%url)
686Contact email is invalidНеправильный адрес эл. почты контакта (макс. %maxlen)
687Contact email exists (%url)Контакт с такой эл. почтой уже существует (%url)
688Contact date of birth is invalidНеправильная дата рождения
689Contact gender errorОшибка при указании пола контакта
690Contact description too long (max %maxlen)Слишком длинное описание контакта (макс. %maxlen)
691Contact custom field error (%name)Ошибка значения поля (%name)
700Receiver name requiredНе указано имя получателя
701Receiver name too long (max %maxlen)Слишком длинное имя получателя (максимум %maxlen)
702Receiver email requiredНе указан адрес электронной почты получателя
703Invalid receiver emailНеправильный адрес электронной почты получателя
704Sender name requiredНе указано имя отправителя
705Sender name too long (max %maxlen)Слишком длинное имя отправителя(максимум %maxlen)
706Sender email requiredНе указан адрес электронной почты отправителя
707Invalid sender emailНеправильный адрес электронной почты отправителя
708Reply name too long (max %maxlen)Слишком длинное имя для ответа
709Invalid reply nameНеправильный адрес для ответа
710Subject requiredНе указана тема письма
711Subject too long (max %maxlen)Слишком длинная тема письма (максимум %maxlen)
712Message requiredПустое сообщение
713Message too long (max %maxlen)Слишком длинное сообщение (максимум %maxlen)
714HTML-message too long (max %maxlen)Слишком длинное html-сообщение (максимум %maxlen)
715Invalid cc emailНеправильный адрес электронной почты получателя копии