unix 2012-02-26 18-23-11
Как принимать смс и пересылать их на нужный e-mail.
Для приёма смс нам понадобиться изменить конфиг файл:
root@computer:$ sudo nano /etc/asterisk/extensions_custom.conf
Добавим в него следующие строки:
exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${SMS})
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} -%- ${DATACARD} -%- ${CALLERID(num)} -%- ${SMS} -%-' >> /var/log/asterisk/sms.txt)
exten => sms,n,Hangup()
Перезапустим Asterisk для применения изменений:
root@computer:$ sudo service asterisk restart
Теперь все входящие смс будут сохранятся в текстовый файл — /var/log/asterisk/sms.txt, а его мы будем обрабатывать PHP скриптом для пересылки сообщений на нужный e-mail.
Вот сам скрипт:
<?php
// путь до файла с смс
$file_name = '/var/log/asterisk/sms.txt';
// если размер файла больше 0 переходим к его обрботке
if (filesize($file_name)>0) {
// открываем файл для чтения и записи
$fobj = fopen($file_name,"r+");
$text = fread($fobj, filesize($file_name));
// в файл смс записываются в следуюшем формате
// дата и время -%- datacard -%- номер отправителя -%- текст смс
// формат и разделитель можно сменить в конфиг файле
// преобразовываем содержимое в массив используя -%- как разделитель
$text1 = explode("-%-", $text);
// делим массив а части по 4 элемента
$array = array_chunk($text1, 4);
// рисуем таблицу в которой будут выводится наши смс
$mes1 = "<table border='1' bordercolor='#000000' cellspacing='0' cellpadding='2'>";
$mes2 = "<tr align='center' valign='middle
'><td width='160'>Дата и время сообщения</td><td width='140'>Номер отправителя</td><td width='230'>Сообщение</td></tr>";
for ($i = 0; $i <= count($array)-2; $i++)
{
$sms = $array[$i];
$sms1[] = "<tr valign='middle
'><td align='center'>".$sms[0]."</td><td align='center'>".$sms[2]."</td><td align='left'>".$sms[3]."</td></tr>";
}
for ($mes3 = '', $j = 0; $j <= count($sms1); $j++)
{
$mes3 = $mes3.$sms1[$j];
}
$mes4 = "</table>";
// Теперь перейдем к отправке
// отправлять будем используя встроенную функцию mail()
// получаем текущую дату
$date = date("d.m.Y");
// получаем текущее время
$time = date("H:i:s");
// адрес куда будем отправлять письмо
$to = "your-mail@your-domen.com";
// тема письма
$subject = "New SMS Message(s) - ".$date." - ".$time;
// текст письма
$message = $mes1.$mes2.$mes3.$mes4;
// дополнительные заголовки письма
// кодировка письма
$headers = "Content-type: text/html; charset=utf-8 \r\n";
// отправитель письма
$headers .= "From: SMS Gate <sms@your-domain.org>\r\n";
// отправляем письмо, если отправка прошла успешно
// выводим сообщение иочищаем файл с смс
if (mail($to, $subject, $message, $headers)) {
echo "Soobshenie ojidaet otpravki";
ftruncate ($fobj, 0);
} else {
// если ошибка выводим это сообщение
echo "Oshibka pri otpravke";
}
// закрываем файл
fclose($file_name);
}
// если файл пустой выводим это сообщение
else { echo "Sms soobshenii net..."; }
?>
Далее ставим скрипт на авто исполнение в Cron например каждые 5 минут. Вот команда которую надо добавить в Cron, которой будем вызывать наш скрипт(где вместо 192.168.1.1 — ваш ip или домен):
wget -O /dev/null -q http://192.168.1.1/sms.php