Страница 2 из 8
Re: Dongle,SMS, не пишет в лог смс
Добавлено: 27 янв 2017, 11:20
skynetyar
Да,проверил так dongle ussd dongleID *100#
Все пришло нормально записалось!
Вот если кто использует может тоже отправку через скрипт (других способов не нашел) ,может подскажет что не так? приходит письмо с таблицей нарисованной ,но не заполнена данными..
Понимаю что что то с переменными не так в скрипте..
<?php
$file_name = '/var/log/asterisk/sms.txt';
if (filesize($file_name)>0) {
$fobj = fopen($file_name,"r+");
$text = fread($fobj, filesize($file_name));
$text1 = explode ("-%-", $text);
$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>";
$date = date("d.m.Y");
$time = date("H:i:s");
$to = "мыл@gmail.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@мыл.ру>\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..."; }
?>
Соответсвенно файл sms.txt содержит
Код: Выделить всё
2017-01-27 10:26:03 - D79206500000 - +79622088888: Тесто
Похоже на то что разделитеь -%- надо добавить в конфиг...
Re: Dongle,SMS, не пишет в лог смс
Добавлено: 27 янв 2017, 11:42
skynetyar
Да,немного изменил конфиг,добавил разделители % что бы скрипт мог разделить на блоки..
Код: Выделить всё
exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${SMS})
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} -%- ${DONGLENAME} -%- ${CALLERID(num)} -%- ${SMS} -%-' >> /var/log/asterisk/sms.txt)
exten => sms,n,Hangup()
Где то находил раньше ,сейчас не могу найти деление на донглы и отсылка на разные почтовые адреса в зависимости от донгла, вот тут уже заморочь конечно
Re: Dongle,SMS, не пишет в лог смс
Добавлено: 27 янв 2017, 12:10
april22
а где скрипт то ?!
Или он потом тыкается по крону ?
запускайте как AGI и передавайте скрипту ваши данные
${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}
${DONGLENAME}
${CALLERID(num)}
${SMS}
дальше скрипт разберет что и кому и куда
Re: Dongle,SMS, не пишет в лог смс
Добавлено: 27 янв 2017, 12:37
skynetyar
Да скрипт пускается по крону каждые 5 минут
sms.php
<?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 = "milo@gmail.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 <info@d.ru>\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..."; }
?>
А можно подробнее про AGI ?
Re: Dongle,SMS, не пишет в лог смс
Добавлено: 27 янв 2017, 12:56
skynetyar
Конечно это неудобно так то через php скрипт, можно ведь сразу отправлять с диалплана?
Что типа этого ?
Код: Выделить всё
exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms,2,System(echo "Subject: SMS received from ${CALLERID(num)}" > /var/log/asterisk/smsmail)
exten => sms,3,System(echo " " >> /var/log/asterisk/smsmail)
exten => sms,4,System(echo "${BASE64_DECODE(${SMS_BASE64})}" >> /var/log/asterisk/smsmail)
exten => sms,5,System(/usr/sbin/ssmtp xxxxxx@gmail.com < /var/log/asterisk/smsmail)
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}: ${BASE64_DECODE(${SMS_BASE64})}'
Re: Dongle,SMS, не пишет в лог смс
Добавлено: 27 янв 2017, 13:10
ded
Wapo писал(а):Код: Выделить всё
-- Executing [sms@from-pstn:1] Goto("Local/sms@from-pstn-00000005;1", "from-gsm.sms,1") in new stack
-- Goto (from-pstn,from-gsm.sms,1)
Ааааааа!!!! Помогите!!!!! Поколение КОПИПАСТА!!!!
Где глаза чтобы не увидеть точку и не исправить на запятую?????
Монитор у меня сел, контрастности нет, яркость на пределе, и глаза уже у меня не те, зоркость потерял. Я стар, я очень стар, я супер-стар.
skynetyar писал(а):А можно подробнее про AGI ?
http://asterisk.ru/knowledgebase/Asterisk+agi
Re: Dongle,SMS, не пишет в лог смс
Добавлено: 27 янв 2017, 13:24
skynetyar
Спасибо! Любопытно, уже читаю!
Но я сейчас решил посмотреть в сторону сразу диалплана, без скриптов!
Есть ли существенная разница между этими способами? ну нагрузка там и возможности может?
Мне показалось что диалпланом удобнее.
Вот пробую так
Код: Выделить всё
[from-gsm]
exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} on ${DONGLENAME})
exten => sms,2,System(echo "Subject: SMS received from ${CALLERID(num)}" > /var/log/asterisk/sms.txt)
exten => sms,3,System(echo " " >> /var/log/asterisk/sms.txt)
exten => sms,4,System(echo "${SMS}" >> /var/log/asterisk/sms.txt)
exten => sms,5,System(sendmail -f info@dot.ru -t adm6@gmail.com < /var/log/asterisk/sms.txt)
exten => sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENAME} - ${CALLERID(num)}: ${SMS}'
>> /var/log/asterisk/sms.txt)
exten => sms,n,Hangup()
exten => ussd,1,Verbose(Incoming USSD: ${USSD})
exten => ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} -%- ${DONGLENAME} -%- ${USSD} -%-' >> /var/log/asterisk/ussd.txt)
exten => ussd,n,Hangup()
[from-pstn-custom]
exten => sms,1,Goto(from-gsm,${EXTEN},1)
exten => ussd,1,Goto(from-gsm,${EXTEN},1)
Письмо приходит но ошибки в консоли что я где то потерял "}"
Код: Выделить всё
2017-01-27 13:20:27] WARNING[13152][C-00003421]: pbx_variables.c:659 pbx_substitute_variables_helper_full: Error in extension logic (missing '}')
[2017-01-27 13:20:27] WARNING[13152][C-00003421]: pbx_functions.c:460 func_args: Can't find trailing parenthesis for function 'CALLERID(nu'?
[2017-01-27 13:20:27] ERROR[13152][C-00003421]: func_callerid.c:1110 callerid_read: Unknown callerid data type 'nu'.
Re: Dongle,SMS, не пишет в лог смс
Добавлено: 27 янв 2017, 13:34
ded
Ну, послушайте, писать на форуме, что где-то потеряна "}" (типа - помогите найти где я ошибся!), как-то неприлично даже.
Re: Dongle,SMS, не пишет в лог смс
Добавлено: 27 янв 2017, 13:35
skynetyar
Да я не про это,это я найду..
Я про то что лучше все таки,скрипт или диалпаном?
И можно ли выше я вопрос писал в зависимости от dongle id посылать на разные почты, если использовать диалплан?
Re: Dongle,SMS, не пишет в лог смс
Добавлено: 27 янв 2017, 13:43
ded
AGI лучше, как посоветовал выше april22, просто Вы не освоили ещё, и некоторый страх или нежелание.
Если уж очень хочется в диал-плане, то используйте синтаксис
exten => sms/${DONGLENAME},1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms/${DONGLENAME},2,System(echo "Subject: SMS received from ${CALLERID(num)}" > /var/log/asterisk/smsmail)
и так далее.
Надо будет создать столько секций, сколько донглов, с индивидуальным указанием почты полевой.