Рассылка СМС-уведомлений силами UTM5

Предложения и запрос функционала
Fiendflug
Сообщения: 6
Зарегистрирован: Сб окт 08, 2011 18:13

Рассылка СМС-уведомлений силами UTM5

Сообщение Fiendflug »

Добрый день. Интересуют варианты реализации СМС рассылки (предупреждение о балансе, поздравление с праздниками, возможно и произвольные сообщения) силами UTM5. Кто реализовывал, подскажите "что почем" =) Спасибо.

Cramac
Сообщения: 451
Зарегистрирован: Сб июл 01, 2006 17:59

Сообщение Cramac »

ээээ, скрипт который берет из базы УТМ баланс и шлет смс через шлюз или еще как то?
Стоимость смс как найдете, до 1.2р за 1смс

JAO
Сообщения: 1153
Зарегистрирован: Вт дек 11, 2007 08:17

Сообщение JAO »

Еще на это дело лучше прикрутить соответствующий тариф (у сотового оператора), так как сообщений может быть немало.

Cramac
Сообщения: 451
Зарегистрирован: Сб июл 01, 2006 17:59

Сообщение Cramac »

ну это если через телефон с тарифом.
А так, можно найти кучу шлюзов для СМС, там уже ограничения другие.

Fiendflug
Сообщения: 6
Зарегистрирован: Сб окт 08, 2011 18:13

Сообщение Fiendflug »

А можно где найти пример скрипта?

Cramac
Сообщения: 451
Зарегистрирован: Сб июл 01, 2006 17:59

Сообщение Cramac »

это уже в конторе/шлюзе, будут примеры...либо через post/get запрос...либо еще как то

ronin
Сообщения: 74
Зарегистрирован: Чт фев 03, 2011 00:57

Сообщение ronin »

есть скрипт , для смс шлюза, работающий

Pei0t
Сообщения: 258
Зарегистрирован: Чт дек 13, 2007 20:48

Сообщение Pei0t »

ronin писал(а):есть скрипт , для смс шлюза, работающий
Поделитесь?

ronin
Сообщения: 74
Зарегистрирован: Чт фев 03, 2011 00:57

Сообщение ronin »

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

<?
$smshost="gate.mobilmoney.ru";
$smspage="sms.php";
$smslogin="*******";
$smspassword="******";
$thresholdbalance="35";
$message1="На Вашем счету ";
$message2="р.не забудьте пополнить счет интернета дог№";
// База utm.
$dbhostname="localhost";
$dbusername="root";
$dbpassword="";
$dbname="UTM5";

function sms_log&#40;$str&#41; &#123;
  $datenow=date&#40;"d&#58;m&#58;y G&#58;i&#58;s"&#41;;
  $file = fopen &#40;"/netup/utm5/log/sms.log","a+"&#41;;
  fputs&#40;$file,"$datenow $str\n"&#41;;
  fclose&#40;$file&#41;;
&#125;;

$html.='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 //EN" "http&#58;//www.w3.org/TR/html4/strict.dtd">';
$html.='<html>';
$html.=' <head>';
$html.='  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >';
$html.='  <title>SMS SENDER</title>';
$html.='  <link rel="stylesheet" type="text/css" href="style.css" title="style"/>';
$html.=' </head>';
$html.=' <body>';

function http_post&#40;$host,$page,$data&#41;// $host="www.ya.ru" $page="/post/test.php
&#123;
//открываем сокет к http&#58;//$host на 80-й порт с таймаутом в 30 секунд
$socket = fsockopen&#40;$host, 80, $errno, $errstr, 30&#41;;
 
//если fsockopen вернула false, то завершаем работу скрипта и выводим текст и номер ошибки
if&#40;!$socket&#41;die&#40;"$errstr&#40;$errno&#41;"&#41;;

//пишем в сокет метод, URI и протокол 
fwrite&#40;$socket, "POST ".$page." HTTP/1.1\r\n"&#41;;
//а также имя хоста
fwrite&#40;$socket, "Host&#58; ".$host."\r\n"&#41;;
 
//теперь отправляем заголовки
//Content-type должен быть applicaion/x-www-form-urlencoded
fwrite&#40;$socket,"Content-type&#58; application/x-www-form-urlencoded\r\n"&#41;;
//размер передаваемых данных передаем в заголовке Content-length
fwrite&#40;$socket,"Content-length&#58;".strlen&#40;$data&#41;."\r\n"&#41;;
//типы принимаемых данных. */* означает, что принимаем все типы данных
fwrite&#40;$socket,"Accept&#58;*/*\r\n"&#41;;
//представимся оперой
fwrite&#40;$socket,"User-agent&#58;Opera 10.00\r\n"&#41;;
fwrite&#40;$socket,"Connection&#58;Close\r\n"&#41;;
fwrite&#40;$socket,"\r\n"&#41;;
 
//теперь передаем данные
fwrite&#40;$socket,"$data\r\n"&#41;;
fwrite&#40;$socket,"\r\n"&#41;;
 
//теперь читаем и выводим ответ
$answer = '';
while&#40;!feof&#40;$socket&#41;&#41;&#123;
	$answer.= fgets&#40;$socket, 4096&#41;;
&#125;
////echo $answer;
 
//закрываем сокет
fclose&#40;$socket&#41;;
&#125;

/* Create connection */
mysql_connect&#40;$dbhostname,$dbusername,$dbpassword&#41; OR DIE&#40;"Не могу создать соединение "&#41;;
mysql_select_db&#40;$dbname&#41; or die&#40;mysql_error&#40;&#41;&#41;;

$xml.="<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n";
$xml.="<request method=\"SendSMSFull\">\r\n";
$xml.="<login>".$smslogin."</login>\r\n";
$xml.="<pwd>".$smspassword."</pwd>\r\n";

mysql_query&#40;"UPDATE accounts SET sms_sended='0' WHERE accounts.balance>'".$thresholdbalance."';"&#41;;

$smscnt=0;
$res=mysql_query&#40;"SELECT accounts.id, users.login, users.mobile_telephone, accounts.balance FROM users LEFT JOIN accounts ON accounts.id=users.basic_account WHERE users.web_page='1' AND accounts.balance<'".$thresholdbalance."' AND accounts.sms_sended!='1' AND users.is_deleted='0';"&#41;;

while &#40;$row=mysql_fetch_row&#40;$res&#41;&#41;
&#123;
        if&#40;!preg_match&#40;'/^\+7&#91;0-9&#93;&#123;10&#125;$/',$row&#91;2&#93;&#41;&#41;
		continue;
	$balance=round&#40;$row&#91;3&#93;,2&#41;;

	$xml.="	<originator num_message=\"".$smscnt."\">Ultra</originator>\r\n";
	$xml.="	<phone_to num_message=\"".$smscnt."\">".$row&#91;2&#93;."</phone_to>\r\n";
	$xml.="	<message num_message=\"".$smscnt."\">".$message1."".$balance."".$message2."".$row&#91;1&#93;."</message>\r\n";
    $xml.=" <sync num_message=\"".$smscnt."\">".date&#40;"ymd"&#41;.$row&#91;0&#93;."</sync>\r\n";
	mysql_query&#40;"UPDATE accounts SET sms_sended='1' WHERE id='".$row&#91;0&#93;."';"&#41;;
	$smscnt++;
	sms_log&#40;"$row&#91;1&#93;;$row&#91;2&#93;;$balance"&#41;;
&#125;
$xml.="</request>\r\n";

http_post&#40;$smshost,$smspage,$xml&#41;;//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$html.='<p>'.$xml.'</p>';
$html.=' </body>';
$html.='</html>';

mysql_close&#40;&#41;;

?>
Последний раз редактировалось ronin Пн апр 09, 2012 23:41, всего редактировалось 1 раз.

Pei0t
Сообщения: 258
Зарегистрирован: Чт дек 13, 2007 20:48

Сообщение Pei0t »

Спасибо, в двух словах принцип работы?

ronin
Сообщения: 74
Зарегистрирован: Чт фев 03, 2011 00:57

Сообщение ronin »

Проверяем у кого баланс больше $thresholdbalance, ставим ему sms_sended='0', т.е. еще не отправляли, затем у кого баланс меньше $thresholdbalance и web_page=1 и sms_sended не =1, им отправляем смс и ставим им sms_sended=1,

там строчка неправильная, $res=mysql_query("SELECT accounts.id, users.login, users.mobile_telephone, accounts.balance FROM users LEFT JOIN accounts ON accounts.id=users.basic_account WHERE users.web_page='1' AND accounts.balance<'".$thresholdbalance."' AND accounts.sms_sended!='1' AND users.is_deleted='0';");

ronin
Сообщения: 74
Зарегистрирован: Чт фев 03, 2011 00:57

Сообщение ronin »

В штатном ЛК в файле lang_ru.php и исправил

'mobile_telephone' => 'Мобильный телефон в формате +7**********',
'web_page' => 'SMS уведомление о приближение баланса к нулю(0-НЕТ,1-ДА)',
но это только работает в 008 up6, т.к. в предыдущих был глюк, и нельзя было редактировать

Pei0t
Сообщения: 258
Зарегистрирован: Чт дек 13, 2007 20:48

Сообщение Pei0t »

Ещё раз спасибо, а web_page в ЛК предусмотрена? И какой смысл несет?
Мы прост у себя задизейблили просмотр/редактирование пользовательских данных, щас не могу посмотреть.

ronin
Сообщения: 74
Зарегистрирован: Чт фев 03, 2011 00:57

Сообщение ronin »

да есть, просто рег данные, аська тоже есть, а смысл что бы пользователь мог включить/отключить смс оповещение
'SMS уведомление о приближение баланса к нулю(0-НЕТ,1-ДА)'

Pei0t
Сообщения: 258
Зарегистрирован: Чт дек 13, 2007 20:48

Сообщение Pei0t »

Тестирую скрипт, ругается на

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

</date>\r\n";
95 строку, в кодинге не силён(

UPD: почитал доку смсгейта, понял что можно и опустить эту строку, закомментил.

Скрипт выдаёт:

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

<?xml version="1.0" encoding="utf-8"?>
        <response method="ErrorSMS">
                <msg>Incorrect XML data!</msg>
        </response> %              


Версия utm 008u8

Закрыто