Ubuntu + Asterisk + FreePBX + Huawei E1750 — прием смс и пересылка их на e-mail.
В одной из предыдущих статей — Ubuntu 11.04 + Asterisk 1.8.6 + FreePBX 2.9 + настройка Sipnet + модем Huawei E1750. – Часть 3. – (Подключение модема Huawei E1750 к FreePBX.) — я рассказал как настроить модем Huawei E1750 для работы с Asterisk для совершения входящих и исходящих звонков. А сейчас я расскажу как принимать смс и пересылать их на нужный e-mail.
Для приёма смс нам понадобиться изменить конфиг файл:
Добавим в него следующие строки:
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 для применения изменений:
Теперь все входящие смс будут сохранятся в текстовый файл — /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 https://192.168.1.1/sms.php |
Теперь все полученные смс будут пересылаться на наш почтовый аккаунт. Сами письма будут выглядеть так:
Валентин
21.10.2011Большое спасибо! работает!!!! но как то долго обработка проходит файла.
admin
26.10.2011Возможно из-за каких-то настроек Sendmail долго обрабатывается.
Goodie
22.10.2011OK!
А как-нить мона отправлять пришедшие смс-ки ПРЯМО НА extension?
(в роли экстенжна — софт-телефоны или IP-телефоны, зарегистрированные на астере по SIP или IAX2)
admin
26.10.2011Согласен что было бы удобнее отправлять сразу на Softphone, но я на данный момент как это реализовать не знаю.
Вячеслав
24.10.2011Спасибо за инструкцию, очень помогла.
Ставил ubuntu на vmware, модем был huawei e1780 – всё заработало : звук, смс.
Осталось настроить под себя freepbx.
Спасибо еще раз
klistrod
27.10.2011еще бы сделать пересылку в Jabber сделать!!)
admin
28.10.2011Jabber`ом не пользуюсь, поэтому в этом вопросе помочь не смогу.
klistrod
27.10.2011// отправлять будем используя встроенную функцию mail()
функцию надо доставлять или она уже стоит?
// отправитель письма
$headers .= «From: SMS Gate \r\n»;
вместо домена your-domain.org возможно прописать локальный адрес например 192.168.1.2?
admin
28.10.2011Функция mail() встроена в php так что если PHP установлен больше ничего не надо.
Вместо домена your-domain.org указать можно что угодно это просто адрес отправителя, то есть письма будут приходить якобы с этого адреса.
klistrod
27.10.2011точнее хотел спросить как правильно Sendmail настраиваеть?
admin
28.10.2011У меня отлично работает и настройками по умолчанию. Если нужно что-то особенное это уже другой вопрос.
Absint
27.10.2011а куда php файл кидать-то?? в какую папку?
admin
28.10.2011Кидать в любую удобную директорию веб сервера. По умолчанию директория Apache — /var/www Если закинуть файл туда то он будет доступен по адресу — https://vash-ip-ili-domen/sms.php (если конечно созданный файл назовете sms.php).
Валентин
01.11.2011Дружище, а как бы еще и смс рассылки организовать? на сколько мне известно обзвон можно как то сделать через call файлы. А заставить смс рассылать? не актуально?
klistrod
09.11.2011А вообще отправку смс можно как нибудь сделать?
Константин
18.02.2012Мужики подскажите пожалуйста что поправить в данном скрипте, при условии, что вместо datacard используется dongle ?
А то сделал все как написано, но выдает: «Oshibka pri otpravke» когда проверяю по ссылке https://192.168.X.X/sms.php.
Использую:
1. Asterisk 1.8.6.0+FreePBX 2.9.0.9;
2. chan_dongle: Huawei 3G Dongle Channel Driver, Version 1.1, Revision 10
СПАСИБО!!
Константин
18.02.2012а да,
3. Ubuntu 11.10 (GNU/Linux 3.0.0-15-generic i686)
Константин
19.02.2012«Oshibka pri otpravke» скорее всего возникает из-за того, что я использую в качестве smtp-релея SSMTP, а в примере скорее всего используется связка с SENDMAIL.
Может быть такое? Как поправить?
Почта с командной строки уходит и приходит на ура.
(ПС: /etc/php5/apache2/php.ini поправил вписав туда sendmail_path = /usr/sbin/ssmtp -t, но все равно не работает отправка почты с PHP скрипта)
noname
23.03.2012А не проще ли сразу с диалплана отправлять?
exten => sms,n,System(ssmtp maio@sms.mtslife.ru < /var/log/asterisk/sms.txt)
Евгений
10.05.2012Я не силен в скриптах. Не подскажите как можно организовать отправку файла на сетевую папку?
Валентин
25.06.2012Вопрос такой, скрипт работает отлично, но теперь такой вопрос, внутренняя память для приема смс на симке заполнилась, как бы сделать так что бы ее (память на симке) скрипт проверял и удалял все с симки?
Дмитрий
10.07.2012Привет! Воспользовался скриптом. Письмо приходит пустое, просто таблица без сообщений. Файл с смс затирает.
sashasaturn
02.04.2013Спасибо за статью, у Вас интересный блог.
Прием смс можно реализовать более удобно — /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}’| mail -s ‘ATC SMS’ mygmailaccount@gmail.com)Прием смс можно реализовать более удобно — /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}’| mail -s ‘ATC SMS’ mygmailaccount@gmail.com)
exten => sms,n,Hangup()Прием смс можно реализовать более удобно — /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}’| mail -s ‘ATC SMS’ mygmailaccount@gmail.com)
exten => sms,n,Hangup()
exten => sms,n,Hangup()
и смс сразу уйдет на почту. Использую ubuntu + postfix
Денис
11.06.2016exten => 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}’| mail -s ‘ATC SMS’ mygmailaccount@gmail.com)
exten => sms,n,Hangup()
заработало сразу. на почту приходят в течении сек. СПАСИБО
Алекей
28.09.2017Вопрос.
Можно ли подобный сбор входящих смс и последующую отправку их на почту организовать с симок, установленных в GoIP-шлюзе? Через веб-интерфейс шлюза можно прочитать входящие смс, но это только для одноразовых манипуляций. На постоянной основе такой способ крайне неудобен.
СМС-сервер GoIP — так же неудобен, т.к. там я не нашел функции пересылки на почту.
Спасибо.