API для отправки SMS сообщений

В данном форуме описаны все API, поддерживаемые нашими услугами.

Re: API для отправки SMS сообщений

Сообщение af » 01 мар 2011, 21:11

sd писал(а):Добавилась возможность указывать время отправки SMS сообщений:

Все работает отлично! Только одно но... Если поставить дату прошедшего периода, то сообщение тоже встает в очередь и доставляется также, если бы оно было предназначено для немедленной отправки. Можно поставить проверку на корректность даты и времени возвращать сообщение об ошибке, как вариант. Валидность даты и времени можно и на своей стороне реализовать, но в вашем случае, думаю, будет не лишним такую проверку организовать, чтоб сервак не пыхтел, думая когда же отправить такую СМС.
af
 
Сообщения: 7
Зарегистрирован: 26 фев 2011, 01:03

Re: API для отправки SMS сообщений

Сообщение sd » 01 мар 2011, 21:23

Проверку на прошедшее время не делали по той причине, что ваше время и наше может немного или даже много отличаться... Это раз, ну а во-вторых, мало ли что случится... так хоть можно будет быть уверенным, что смс все равно доставится, хоть и позже.

P.S. Вместо windows-1251 указывайте cp1251 или вообще не прописывайте charset. :)
Аватара пользователя
sd
 
Сообщения: 5184
Зарегистрирован: 31 июл 2009, 13:11

Re: API для отправки SMS сообщений

Сообщение af » 02 мар 2011, 05:33

Вы правы на счет несоответствия настроек времени. Но тут еще нюанс возникает, даже не один:
1. Если, к примеру, я выбираю время отправки ориентируясь на свой часовой пояс , допустим Екатеринбург, 08:00 в Москве будет еще 06:00. Ваш сервер посчитает, что нужно отправить по Москве и отправит в 8:00 по МСК. А в Екатеринбурге будет уже 10:00. Нужно, наверное, в описании добавить, что это время Московское, чтобы разработчики могли делать поправку при передаче данных в обработчик.
2. Если я использую параметр when, то в случае, если поля не заполнены, будет возвращена ошибка. Есть ли какое-нибудь "дефолтное" значение, чтобы передать его для немедленной отправки? Допустим 0000-00-00 00:00 или любое другое значение.
af
 
Сообщения: 7
Зарегистрирован: 26 фев 2011, 01:03

Re: API для отправки SMS сообщений

Сообщение sd » 02 мар 2011, 10:05

1. В личном кабинете вы можете установить свой часовой пояс, и тогда скрипт принимаемые значения будет понимать именно как ваше время, а не московское. То есть, если вы указали 08:00, то именно в 08:00 по вашему времени и будет отправлено SMS сообщение. Это касается всего нашего API, а не только отправки сообщений. Часовой пояс устанавливается на форме, открывающейся при нажатии на карандаш справа от логина в личном кабинете. Описание API поправлено.

2. Вы можете использовать ключевое слово "now". Может быть еще быть научим скрипт принимать и такое значение: 0000-00-00 00:00:00.
Аватара пользователя
sd
 
Сообщения: 5184
Зарегистрирован: 31 июл 2009, 13:11

Re: API для отправки SMS сообщений

Сообщение etorkhov » 08 мар 2011, 13:05

Странная особенность - в 10:15 послал смс - оно дошло, но в статистике, в статусе доставка не отобразилась.
В результате вместо одного смс получил 4. Т.е с некоторым интервалом отправка повторялась.
Пришлось его удалить из списка - посмотрим, если доставка прекратится, то это глюк ваш, если нет - то провайдера.
etorkhov
 
Сообщения: 10
Зарегистрирован: 28 фев 2011, 05:23

Re: API для отправки SMS сообщений

Сообщение etorkhov » 08 мар 2011, 13:46

Скриптик для ленивых, для отправки sms из под linux.
1.Копируем в файл send_sms.sh
2.Меняем значения login,password в начале файла
3.Ставим права chmod u+x send_sms.sh
4.Если php установлен по другому пути нежели /usr/bin/php - корректируем 1ю строчку
Запуск:

./send_sms.sh 79991234567 С днем рождения, скрипт!

5.Если кодировка полученного сообщения отличается от ожидаемого - правим значение charset.

Код: Выделить всё
#!/usr/bin/php
<?php
$login="aaaaaaaa";   // логин в системе comtube
$password="12345678";   // пароль
$from="nagios";      // имя отправителя в каждом sms (не более 11симв)
$charset="utf-8";   // кодировка сообщения

if ( $argc <= 2 ) {
   print "Usage: $argv[0]  <номер получателя> текст сообщения\n";
   exit();
}

$to=$argv[1];
$message="";
for ( $i=2; $i < $argc; $i++ ) {
  if ( $message != '' ) {
    $message.=" ";
  }
  $message.=$argv[$i];
}

function BuildUrlParamsWithSignature($params, $password)
{
    ksort($params);
    $url = '';

    if (!is_array($params))
        return $url;

    foreach($params as $key => $value)
    {
        $url .= $key . "=" . urlencode($value) . "&";
    }
    $signature = md5($url . "&password=".urlencode($password));
    $url .= "signature=" . $signature;
    return $url;
}

$baseurl = "http://api.comtube.ru/scripts/sms_api/sendsms.php";

// Создаем массив и заполняем его параметрами
$params = array();
$params["username"] = $login;
$params["to"] = $to;
$params["message"] = $message;
$params["from"] = $from;
$params["charset"] = $charset;
$params["type"] = "html";

// Создаем подпись к параметрам
$urlparams = BuildUrlParamsWithSignature($params, $password);

// Формируем полный URL для обращения к серверу
$url = $baseurl . "?" . $urlparams;

//echo $url;
//exit;

// Инициализируем curl и отправляем запрос
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$data = curl_exec($ch);
curl_close($ch);

// Анализируем результат
$matches = array();
preg_match("/code:([0-9]+)<br>desc:(.*)<br>crcy:(.*)<br>tariff:([0-9.]+)<br>parts:([0-9]+)<br>sum:([0-9.,]+)<br>/", $data, $matches);

if (count($matches) > 0)
{
  $code = $matches[1];
  $desc =  $matches[2];
  $crcy = $matches[3];
  $tariff = $matches[4];
  $parts = $matches[5];
  $sum = $matches[6];

  if ($code != 200)
  {
    // При обработке запроса произошла ошибка
    echo "Failed to send sms, reason: " . $desc . " (" . $code . ")\n";
  }
  else
  {
    // Успешное выполнение запроса
    //echo "SMS sent successfully\n"; -- удалено, т.к. ответ читать некому.
  }
}
else
{
  // Получен неправильный ответ от сервера
  echo "Invalid result\n";
}

?>
etorkhov
 
Сообщения: 10
Зарегистрирован: 28 фев 2011, 05:23

Re: API для отправки SMS сообщений

Сообщение sd » 08 мар 2011, 14:07

Спасибо за скриптик для ленивых любителей линукса :)
Аватара пользователя
sd
 
Сообщения: 5184
Зарегистрирован: 31 июл 2009, 13:11

Re: API для отправки SMS сообщений

Сообщение etorkhov » 09 мар 2011, 01:44

Какая-то проблема с маленькой русской буковкой "з"
Например сообщение
Код: Выделить всё
Light-HTTP
192.168.2.16
CRITICAL
00:29:54 09-03-2011
В соединении отказано


в принятом сообщении в последней строке выглядит обрезанным, независимо от длины предшествующего текста.

Код: Выделить всё
В соединении отка


С чего бы это?
В статистике аналогично.
Раньше я заметил только отсутствие точки, что тоже странно, но "не очень-то и хотелось"
etorkhov
 
Сообщения: 10
Зарегистрирован: 28 фев 2011, 05:23

Re: API для отправки SMS сообщений

Сообщение sd » 09 мар 2011, 10:03

Вы отправляете сообщение с помощью вашего скрипта? Может проблема с кодировкой в шеле?
Аватара пользователя
sd
 
Сообщения: 5184
Зарегистрирован: 31 июл 2009, 13:11

Re: API для отправки SMS сообщений

Сообщение etorkhov » 09 мар 2011, 11:55

Да, с помощью его, только с модифицированной версией для приема текста сообщения, включая переводы строки.
Вот часть сформированного урла

Код: Выделить всё
http://api.comtube.ru/scripts/sms_api/sendsms.php?charset=utf-8&from=nagios&message=Light-HTTP%0A192.168.2.16%0ACRITICAL%0A00%3A29%3A54+09-03-2011%0A%D0%92+%D1%81%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8+%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%B0%D0%BD%D0%BE&to=...


По количеству символов - все на месте.
etorkhov
 
Сообщения: 10
Зарегистрирован: 28 фев 2011, 05:23

Пред.След.

Вернуться в API

Просмотр страницы «Кто сейчас на форуме COMTUBE»

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 39