Платная массовая отправка смс черезе смс-шлюз SMSPILOT в вопросах и ответах:
Сервис SMSPILOT даёт возможность отправки коротких сообщений на мобильные телефоны через интернет. Выкупая большие объёмы смс трафика у операторов и других провайдеров мы предоставляем услуги смс рассылок дешевле чем в среднем по рынку.
Прочитайте небольшую статью о том, что такое массовая SMS рассылка.
Наши основные преимущества:
- нет платы за установку;
- нет скрытых платежей;
- нет срока годности;
- нет ежемесячных обязательств;
- бесплатный динамический ID отправителя;
- очень хорошая скорость доставки.
- отчеты о доставке;
- HTTP API;
- простота программирования;
- бесплатное перепрограммирование смс-уведомлений на наш шлюз (PHP).
SMS Пилот надёжно летает с января 2010.
Да, заключается письменный договор и предоставляются закрывающие документы для бухгалтерии.
Для заключения договора и оплаты первого счета:
Да.
Чуть позже будет пошаговое описание, начните с регистрации
Абонентской платы нет. Тариф только улучшается. Покупая однократно большой объём вы получаете постоянную скидку на будущее.
Пример:
Зависит от нагрузки, в штатном режиме составляет 100 смс/сек
Значение SenderID (отправитель, from) высвечивается у абонента в качестве отправителя SMS.
64-символьный код, нужен для подключения внешних программ и сайтов к серверу SMS Пилот.
Да.
Да.
Исходники или данные из базы в кодировке отличной от UTF-8.
Добавьте строку перед подключением библиотеки:
define('SMSPILOT_CHARSET', 'WINDOWS-1251');
include('smspilot.php')
.....
Неверный формат отправителя (параметр from) см. http://www.smspilot.ru/faq.php#q8
Да, выборочно, особенное внимание уделяется новым отправителям.
Требования к содержанию:
http://www.smspilot.ru/pravda.php
1-й этап выявления нарушений - это автоматические фильтры,
2-й - выборочная ручная проверка сообщений помеченных роботом.
Ручную пост-модерацию осуществляет администратор в единственном лице и с единственной целью оградить абонентов от нежелательных сообщений в будущем (спам, мошенничество, оскорбление личности и т.п.)
SMS-сообщения хранятся на сервере 40 дней.
Да. Отправьте список IP администратору http://www.smspilot.ru/support.php
Copy Source | Copy HTML- <?php // скрипт send.php массовая отправка с сохранением server_id и статуса
- /* создайте БД mypilot, и в ней таблицу:
CREATE TABLE `sms_out` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`server_id` int(10) unsigned NOT NULL,
`phone` varchar(15) NOT NULL,
`message` text NOT NULL,
`zone` tinyint(3) unsigned NOT NULL,
`status` tinyint(4) NOT NULL,
PRIMARY KEY (`id`),
KEY `server_id` (`server_id`),
KEY `status` (`status`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
*/
- include('smspilot.class.php');
- mysql_connect('localhost','root','');
- mysql_select_db('mypilot');
- $message = 'hello';
- $phones = array(
- '79087964781',
- '7908111111'
- );
- $sms = new SMSPilot('XYZ');
- $sms->send($phones,$message);
- foreach( $phones as $phone) {
- $status = $sms->statusByPhone( $phone );
- $sql = "INSERT INTO sms_out SET server_id=$status[id],phone='$phone',message='$message',zone='$status[zone]', status='$status[status]'";
- mysql_query( $sql );
- }
- // конец скрипта send.php
- ?>
- <?php // скрипт check.php проверка статусов, лучше настроить крон
- include('smspilot.class.php');
- mysql_connect('localhost','root','');
- mysql_select_db('mypilot');
- $sql = "SELECT server_id FROM sms_out WHERE status=0 OR status=1";
- $result = mysql_query( $sql );
- $ids = array();
- while( $r = mysql_fetch_assoc($result) )
- $ids[] = $r['server_id'];
- $sms = new SMSPilot('XYZ');
- $sms->check( $ids );
- foreach( $sms->status as $s) {
- $sql = "UPDATE sms_out SET status='$s[status]' WHERE server_id='$s[id]'";
- mysql_query( $sql );
- }
- // конец скрипта check.php
- ?>
- <?php //скрипт status.php вывод всех текущих статусов
- include('smspilot.class.php');
- mysql_connect('localhost','root','');
- mysql_select_db('mypilot');
- $sql = 'SELECT * FROM sms_out ORDER BY id DESC';
- $result = mysql_query( $sql );
- echo '<table><tr><th>ID</th><th>SERVER_ID</th><th>PHONE</th><th>MESSAGE</th><th>ZONE</th><th>STATUS</th></tr>';
- while( $r = mysql_fetch_assoc( $result ) )
- echo '<tr><td>'.$r['id'].'</td><td>'.$r['server_id'].'</td><td>'.$r['phone'].'</td><td>'.$r['message'].'</td><td>'.$r['zone'].'</td><td>'.$r['status'].'</td></tr>';
- echo '</table>';
- // конец скрипта status.php
- ?>
http://search.cpan.org/~dadis/Net-SMS-SMSPilot-0.05/lib/Net/SMS/SMSPilot.pm
или
#!/usr/bin/perl -w use Output; use Socket; $send = "Hello World!";
$to = "79087964781";
$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=<SOCK>;
close(SOCK); print $data;
Copy Source | Copy HTML
- ' Процедура для демонстрации использования
- 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=smspilot"
- ' (!) Замените на свой 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
Copy Source | Copy HTML- // sockets version HTTP/POST
- function http_post( $url, $data ) {
- $eol = "\r\n";
- $post = '';
- if (is_array($data)) {
- foreach( $data as $k => $v)
- $post .= $k.'='.urlencode($v).'&';
- $post = substr($post, 0,-1);
- $content_type = 'application/x-www-form-urlencoded';
- } else {
- $post = $data;
- if (strpos($post, '<?xml') === 0)
- $content_type = 'text/xml';
- else if (strpos($post, '{') === 0)
- $content_type = 'application/json';
- else
- $content_type = 'text/html';
- }
- if ((($u = parse_url($url)) === false) || !isset($u['host'])) return false;
- if (!isset($u['scheme'])) $u['scheme'] = 'http';
- $request = 'POST '.(isset($u['path']) ? $u['path'] : '/').((isset($u['query'])) ? '?'.$u['query'] : '' ).' HTTP/1.1'.$eol
- .'Host: '.$u['host'].$eol
- .'Content-Type: '.$content_type.$eol
- .'Content-Length: '.mb_strlen($post, 'latin1').$eol
- .'Connection: close'.$eol.$eol
- .$post;
- $host = ($u['scheme'] == 'https') ? 'ssl://'.$u['host'] : $u['host'];
- if (isset($u['port']))
- $port = $u['port'];
- else
- $port = ($u['scheme'] == 'https') ? 443 : 80;
- $fp = @fsockopen( $host, $port, $errno, $errstr, 10);
- if ($fp) {
- $content = '';
- $content_length = false;
- $chunked = false;
- fwrite($fp, $request);
- // read headers
- while ($line = fgets($fp)) {
- if (preg_match('~Content-Length: (\d+)~i', $line, $matches)) {
- $content_length = (int) $matches[1];
- } else if (preg_match('~Transfer-Encoding: chunked~i', $line)) {
- $chunked = true;
- } else if ($line == "\r\n") {
- break;
- }
- }
- // read content
- if ($content_length !== false) {
- $_size = 4096;
- do {
- $_data = fread($fp, $_size );
- $content .= $_data;
- $_size = min($content_length-strlen($content), 4096);
- } while( $_size > 0 );
- } else if ($chunked) {
- while ( $chunk_length = hexdec(trim(fgets($fp))) ) {
- $chunk = '';
- $read_length = 0;
- while ( $read_length < $chunk_length ) {
- $chunk .= fread($fp, $chunk_length - $read_length);
- $read_length = strlen($chunk);
- }
- $content .= $chunk;
- fgets($fp);
- }
- } else {
- while(!feof($fp)) $content .= fread($fp, 4096);
- }
- fclose($fp);
- // echo $content;
- return $content;
- } else {
- return false;
- }
- }
Отправьте письмо на info@smspilot.ru
В Windows максимальная длина командной строки равна 8191 символам.
HTTP-сервер настроен на обработку 16384 символов в GET-запросе.
Рекомендуем пакеты по 500 номеров.
90% что такие сообщения уже доставлены.
Несоответствие связано с тем, что SMS может иметь 10-15 состояний, а у нас поддерживается 5 значений статуса, поэтому система отображает "ближайший по смыслу".
Окончательный статус устанавливается в течение 24 часов.