Перейти до

Напоминание на почту


Рекомендованные сообщения

Мое мнение: надо взять текущие скрипты, выбросить их и написать заново - чистенько и опрятненько. Шаманства с файлами, IMHO, только запутывают и мешают.

Ссылка на сообщение
Поделиться на других сайтах
  • Відповіді 131
  • Створено
  • Остання відповідь

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Это понятно, все мы пишем как умеем. Но где здесь хоть одно правило if-then о которых вы говорите что они не работают? Я, если честно, давно потерял нить обсуждения и перестал понимать что вообще про

Мое мнение: надо взять текущие скрипты, выбросить их и написать заново - чистенько и опрятненько. Шаманства с файлами, IMHO, только запутывают и мешают.

А мое мнение :

Я себе это представляю как скрипт, запускающийся, например, за 5-7 дней до снятия абонплаты, и отправляющий юзеру мыло о том, что после снятия абонки у него будет отрицательный баланс и он не сможет работать.

Что нужно просто написать скрипт, который будет отсылать мессагу в личный кабинет (Убиллинга) или, совсем накрайняк, на почту(а у Вас много абонов с забитой почтой ?).

От этого и отталкиваться.

Временные файлы - фтопку.

Авторизатор - фтопку (я с ним уже наигрался) - будет много должников - может и СТГ подвесить. Не зря писал Nightfly :

Новый потенциально опасный модуль «Массовая рассылка» для тех кто желает использовать встроеную механику сообщений stargazer для рассылки сообщений на авторизатор

Есть смысл написать очень простой скрипт, запускающийся числа 25, и проверяющий баланс. У кого меньше или равно абонплате - отправить сообщение в личный кабинет. Должен работать быстро и безболезненно.

Ссылка на сообщение
Поделиться на других сайтах

... написать скрипт, который будет отсылать мессагу в личный кабинет (Убиллинга)

Точнее модифицировать код "Личного кабинета" так чтобы он показывал сообщение о недостатке средств на счету перед снятием абонплаты.

или, совсем накрайняк, на почту(а у Вас много абонов с забитой почтой ?).

...

Есть смысл написать очень простой скрипт, запускающийся числа 25, и проверяющий баланс. У кого меньше или равно абонплате - отправить сообщение в личный кабинет. Должен работать быстро и безболезненно.

В почту. С этим и проблема. Тут с OnChange уже месяц возимся, а ты предлагаешь по базе бегать да еще и почту отправлять.

Ссылка на сообщение
Поделиться на других сайтах
Точнее модифицировать код "Личного кабинета" так чтобы он показывал сообщение о недостатке средств на счету перед снятием абонплаты.

Что-то типа такого, да? :)

 

uba.png

Ссылка на сообщение
Поделиться на других сайтах

В почту. С этим и проблема. Тут с OnChange уже месяц возимся, а ты предлагаешь по базе бегать да еще и почту отправлять.

 

Поставим вопрос так :

а) при каком действии должно отсылаться сообщение ?

-OnChange выполняется при очень многих - начиная от ресета пользователя и до малейших чихов (читаем изменение каждого из параметров)

б)

Точнее модифицировать код "Личного кабинета" так чтобы он показывал сообщение о недостатке средств на счету перед снятием абонплаты.

Не находите, что отсылать сообщение нужно перед, а OnChange выполнится уже после ?

в) Насколько ресурсоемко сделать 1 запрос, а потом по выборке сделать массовую рассылку 1 письмом с тучей копий по результатам выборки ? (при условии, что не нужно писать каждому его персональный баланс, хотя я думаю это тоже не так затратно по ресурсам)

г) Ну и все же я думаю нужно в OnChange делать разбор изменившегося параметра и уже по результату что-то выполнять.

На файловой базе у меня было примерно так:

#Если изменился тариф
if [ -n $param -a $param == "tariff" ] ; then {
/bin/echo -e "чего-то тут выполняем"
}

#Если изменилась userdata0
if [ -n $param -a $param == "userdata0" ] ; then {
/bin/echo -e "чего-то тут выполняем"
}

Ну и далее по тексту.

Ссылка на сообщение
Поделиться на других сайтах
Точнее модифицировать код "Личного кабинета" так чтобы он показывал сообщение о недостатке средств на счету перед снятием абонплаты.

Что-то типа такого, да? :P

Да, только баланс должен быть не минус - а то как бэ "поздно пить боржоми", ну или делать 2 мессаги :

  • У Вас отрицательный баланс, пожалуйста пополните Ваш счет для продолжения пользоваться услугой.
  • У Вас скоро закончатся средства на Вашем чсету, пожалуйста пополните Ваш счет для продолжения пользоваться услугой.

Ссылка на сообщение
Поделиться на других сайтах

Я предусмотрительный :P

 

Отображает всплывающие уведомления об окончании средств

Отображает вспрывающие напоминания об оплате в конце месяца

 

http://wiki.ubilling.net.ua/doku.php?id=ubagent

Ссылка на сообщение
Поделиться на других сайтах

В почту. С этим и проблема. Тут с OnChange уже месяц возимся, а ты предлагаешь по базе бегать да еще и почту отправлять.

В этой фразе я имел в виду что топикстартеру будет сложно реализовать предложенный алгоритм.

Поставим вопрос так :

а) при каком действии должно отсылаться сообщение ?

-OnChange выполняется при очень многих - начиная от ресета пользователя и до малейших чихов (читаем изменение каждого из параметров)

б)

Точнее модифицировать код "Личного кабинета" так чтобы он показывал сообщение о недостатке средств на счету перед снятием абонплаты.

Не находите, что отсылать сообщение нужно перед, а OnChange выполнится уже после ?

в) Насколько ресурсоемко сделать 1 запрос, а потом по выборке сделать массовую рассылку 1 письмом с тучей копий по результатам выборки ? (при условии, что не нужно писать каждому его персональный баланс, хотя я думаю это тоже не так затратно по ресурсам)

г) Ну и все же я думаю нужно в OnChange делать разбор изменившегося параметра и уже по результату что-то выполнять.

На файловой базе у меня было примерно так:

#Если изменился тариф
if [ -n $param -a $param == "tariff" ] ; then {
/bin/echo -e "чего-то тут выполняем"
}

#Если изменилась userdata0
if [ -n $param -a $param == "userdata0" ] ; then {
/bin/echo -e "чего-то тут выполняем"
}

Ну и далее по тексту.

При чем тут OnChange? Тут вообще либо задача крона (рассылка в почту) либо задача ЛК (отображение сообщения в ЛК).

Ссылка на сообщение
Поделиться на других сайтах
При чем тут OnChange?

Ну как то из :

Тут с OnChange уже месяц возимся

Я так вообще - да, в крон поставить и забыть.

Хотя, вон Nightfly, сделал все уже )

Ссылка на сообщение
Поделиться на других сайтах

ООО!

Сколько всего написале!

Зачем так всо усложнять? :-)

Нужно просто и информативно

Не нужно за ранее ничего только по факту!

если за ранее всех предупреждать то никаких ресурсов не хватит

у нас например многие ложат на инет по 5 10 30 рублей

с учётом того что стг настроен на ежедневное снятие абонки

вы представьте сколько нужно будет отправить месаг

ведь тема затронута мной в целях автоматизации абонентов

что бы как можно меньше задействовать админа

что бы все всё делали самостоятельно

в начале был задан вопрос

1) при изменении тарифа юзверь должен получать уведомление с какого тарифа на какой он переключился в программу авторизатор

2) при зачислении средств на счёт в программу авторизатор получал сообщение что средства в таком то размере зачислены (а то звонят и спрашивают когда придут средства хотя средства уже зачислены на счёт)

3) при блокировании и разблокировании доступа в инет тоже в тот же авторизатор юзверь получал сообщение что его лишили или разрешили инета'a

ну вот основные критерии что бы свести к минимуму работу админа занимающегося этой фигнёй вручную

 

СПАСИБО

А насчёт научить я научусь я же не тупой обучаться умею

:-)

Ссылка на сообщение
Поделиться на других сайтах

...

в начале был задан вопрос

1) при изменении тарифа юзверь должен получать уведомление с какого тарифа на какой он переключился в программу авторизатор

2) при зачислении средств на счёт в программу авторизатор получал сообщение что средства в таком то размере зачислены (а то звонят и спрашивают когда придут средства хотя средства уже зачислены на счёт)

3) при блокировании и разблокировании доступа в инет тоже в тот же авторизатор юзверь получал сообщение что его лишили или разрешили инета'a

...

От этого и будем "танцевать".

1 и 2 решаются через OnChange по параметрам tariff и cash. 3 решается через OnDisconnect, но тут есть моменты. Элементарно решается на POSIX sh. Если не забуду - вечером накатаю скриптец для OnChange. А может кто-то и опередит меня.

Ссылка на сообщение
Поделиться на других сайтах

Кусок кода OnChange (переменные оригинальные $1 - Логин, $3 - Старое значение, $4 - Новое значение

LANG=ru_RU.utf8 - Ваша локаль (Может быть en_US.utf8 или ru_UA.utf8 в общем смотрите сами echo $LANG)

##########		  Если изменился тариф (скорость абона) ############
#############################################################
if [ -n $param -a $param == "tariff" ] ; then {
LANG=ru_RU.utf8 /usr/sbin/sgconf set -s localhost -p 5555 -a admin -w password -u $1 -m "Ваша тариф изменен с $3 на $4"
}

##########		  Если добавили денег абоненту				 ############
#############################################################
if [ -n $param -a $param == "cash" ] ; then {
LANG=ru_RU.utf8 /usr/sbin/sgconf set -s localhost -p 5555 -a admin -w password -u $1 -m "Занесены средства на Ваш счет. На Вашем счету $4 грн"
}

##########		  Если разморозили абонента					 ############
#############################################################
if [ -n $param -a $param == "passive" -a $4 == "1" ] ; then {

LANG=ru_RU.utf8 /usr/sbin/sgconf set -s localhost -p 5555 -a admin -w password -u $1 -m "Учетная запись разморожена. Приятной работы."
}


При разблокировании посылать сообщения нет смысла. Так как disabled вызывается очень часто. При каждом ресете пользователя.

При блокировке же и при отключении посылать сообщения нет смысла - пользователь их не получит.

Ссылка на сообщение
Поделиться на других сайтах

Кусок кода OnChange (переменные оригинальные $1 - Логин, $3 - Старое значение, $4 - Новое значение

LANG=ru_RU.utf8 - Ваша локаль (Может быть en_US.utf8 или ru_UA.utf8 в общем смотрите сами echo $LANG)

##########		  Если изменился тариф (скорость абона) ############
#############################################################
if [ -n $param -a $param == "tariff" ] ; then {
LANG=ru_RU.utf8 /usr/sbin/sgconf set -s localhost -p 5555 -a admin -w password -u $1 -m "Ваша тариф изменен с $3 на $4"
}

##########		  Если добавили денег абоненту				 ############
#############################################################
if [ -n $param -a $param == "cash" ] ; then {
LANG=ru_RU.utf8 /usr/sbin/sgconf set -s localhost -p 5555 -a admin -w password -u $1 -m "Занесены средства на Ваш счет. На Вашем счету $4 грн"
}

##########		  Если разморозили абонента					 ############
#############################################################
if [ -n $param -a $param == "passive" -a $4 == "1" ] ; then {

LANG=ru_RU.utf8 /usr/sbin/sgconf set -s localhost -p 5555 -a admin -w password -u $1 -m "Учетная запись разморожена. Приятной работы."
}


При разблокировании посылать сообщения нет смысла. Так как disabled вызывается очень часто. При каждом ресете пользователя.

При блокировке же и при отключении посылать сообщения нет смысла - пользователь их не получит.

Пропущено описание param. Надо либо param=$2 либо использовать $2 вместо $param. И еще $param, $1 и $2 надо закавычивать.

И LANG не обязательно прописывать перед каждым вызовом. Можно в начале сделать export.

Ссылка на сообщение
Поделиться на других сайтах

Я ж написал "Кусок кода" - подразумевалось, что в начале скрипта идет инициалицация параметров.

login=$1
param=$2
oldValue=$3
newValue=$4

С остальным согласен, но ведь - это не готовый вариант , а подсказка к действию. ((:

Ссылка на сообщение
Поделиться на других сайтах

Я ж написал "Кусок кода" - подразумевалось, что в начале скрипта идет инициалицация параметров.

login=$1
param=$2
oldValue=$3
newValue=$4

С остальным согласен, но ведь - это не готовый вариант , а подсказка к действию. ((:

Наверное, ты невнимательно читал топик. Подсказки не помогают :)

Ссылка на сообщение
Поделиться на других сайтах

Что то вы меня совсем запутале!

Выкладываю свои текущие скрипты:

OnChange

#! /bin/sh
login=$1
param=$2
oldValue=$3
newValue=$4
#Записываем переменные по файлам для проверки потом можноо будет удалить этот код
echo $login >/etc/stargazer/tmp/login.ini
echo $param >/etc/stargazer/tmp/param.ini
echo $oldValue >/etc/stargazer/tmp/oldValue.ini
echo $newValue >/etc/stargazer/tmp/newValue.ini
#Вызываем процедуру отправки
./messages $login $param $oldValue $newValue
#Записываем в лог
echo "User: '$login'. Parameter $param changed from '$oldValue' to '$newValue'" >> /var/log/stg/users.chg.log

messages

#!/usr/bin/php
<?php
$login = $argv[1];
$param = $argv[2];
$oldValue = $argv[3];
$newValue = $argv[4];
$msg = '';
mysql_connect('localhost','stg','passwd');
mysql_select_db('stg');
putenv('LANG=ru_RU.UTF-8');
$query = mysql_query('select t.`Fee` as `Fee`, t.`name` as `TariffName`,u.`Email` as `Email`, u.`Credit` as `Credit` from `users` as u LEFT JOIN `tariffs` as t ON t.`name` = u.`Tariff` where u.`Login`="' . $login . '"');
$result = mysql_fetch_assoc($query);
if ($param == 'tariff')
    $msg = "Ваш тариф изменен с '$oldValue' на '$newValue'.n";
else if ($param == 'cash') {
    if ($oldValue < $newValue) {
		    $msg = "Ваш баланс увеличен на: ".($newValue - $oldValue)." руб., и теперь составляет $newValue руб.n";
    } else if ($newValue < 50) {
		    $msg = "Обратите внимание на вашем балансе осталось $newValue руб.!n";
    }
}
else if ($param == 'credit') {
    $msg = "Ваш кредитный лимит изменен с $oldValue руб. до $newValue руб.n";
}

else if ($param == 'disabled') {
    if ($newValue < $oldValue) {
		    $msg = "Доступ в интернет заблокирован.n";
    } if ($newValue > $oldValue) {
		    $msg = "Доступ в интернет открыт.n";
    }
}
if ($msg != '') {
    $msg = "$login, здравствуйте!nn$msgn C уважением, Администратор сети.";
//	    echo("sgconf set -s localhost -p 5555 -a admin -w passwd -u $login -m '$msg'");
    exec("sgconf set -s localhost -p 5555 -a admin -w passwd -u $login -m '$msg'");
//		   echo("$result[Email]");
    //if ($result['Email'] != "") {
    //    echo("mail($result['Email'], 'Billing system', $msg)");
    //}
}
?>

Ну и что тут не так и почему не работает?

Объясняю

Запускаю вручную ./OnChange login tariff admin tarif1

Сообщение приходит

подставляю другие параметры тоже приходит

меняю с вебморды ничего не приходит

с конфигуратора меняю аналогично не приходит

смотрю вывод параметров в файлы

#Записываем переменные по файлам для проверки потом можноо будет удалить этот код
echo $login >/etc/stargazer/tmp/login.ini
echo $param >/etc/stargazer/tmp/param.ini
echo $oldValue >/etc/stargazer/tmp/oldValue.ini
echo $newValue >/etc/stargazer/tmp/newValue.ini

предварительно их удалив и поочередно меняя параметры с морды проверяю наличие файлов - их просто нет они не создаются и параметры в них не записываются

аналогичное происходит и при использовании конфигуратора

что не так то?

или может я неправильно объяснил суть проблемы?

Огромное спасибо всем за помощь!

Ссылка на сообщение
Поделиться на других сайтах

#!/bin/sh
login=$1
param=$2
oldValue=$3
newValue=$4
SGCONF="../sgconf/sgconf"
HOST="localhost"
PORT="5558"
ADMIN_LOGIN="admin"
ADMIN_PASSWORD="123456"
msg=""
if [ "${param}" == "tariff" ]
then
msg="Ваш тариф изменен с '${oldValue}' на '${newValue}'."
else
if [ "${param}" == "cash" ]
then
	if [ $(echo "$oldValue < $newValue" | bc) -eq 1 ]
	then
		d=$( echo "$newValue - $oldValue" | bc )
		msg="Ваш баланс увеличен на ${d} денег. Текущее состояние баланса: ${newValue} денег."
	fi
fi
fi
if [ "${msg}" != "" ]
then
$SGCONF set -s $HOST -p $PORT -a $ADMIN_LOGIN -w $ADMIN_PASSWORD -u $login -m "${msg}"
fi

Я долго и нудно перед этим писал пост о том как все это работает, почему может не работать и что в этом случае делать. Я приводил какие-то доказательства работоспособности и всякие другие подобные мелочи. Но форум взял и покорявил мой пост. По этому я его удалил и забил писать заново. Вот скрипт. Разбирайтесь.

Ссылка на сообщение
Поделиться на других сайтах

1. Покажи вывод

ls -al /etc/stargazer

2. Есть ли в /etc/sudoers ?

User_Alias BILLING = www-data
BILLING ALL = NOPASSWD: ALL

3. В скрипте я бы указывал полный путь до sgconf

4. Стукните чтоле в аську. Дадите доступ - помогу разобраться.

Ссылка на сообщение
Поделиться на других сайтах

1. Покажи вывод

ls -al /etc/stargazer

2. Есть ли в /etc/sudoers ?

User_Alias BILLING = www-data
BILLING ALL = NOPASSWD: ALL

3. В скрипте я бы указывал полный путь до sgconf

4. Стукните чтоле в аську. Дадите доступ - помогу разобраться.

это всё есть и указано

Ссылка на сообщение
Поделиться на других сайтах

1. Покажи вывод

ls -al /etc/stargazer

2. Есть ли в /etc/sudoers ?

User_Alias BILLING = www-data
BILLING ALL = NOPASSWD: ALL

3. В скрипте я бы указывал полный путь до sgconf

4. Стукните чтоле в аську. Дадите доступ - помогу разобраться.

это всё есть и указано

Мой скрипт пробовал?

Ссылка на сообщение
Поделиться на других сайтах

1. Покажи вывод

ls -al /etc/stargazer

2. Есть ли в /etc/sudoers ?

User_Alias BILLING = www-data
BILLING ALL = NOPASSWD: ALL

3. В скрипте я бы указывал полный путь до sgconf

4. Стукните чтоле в аську. Дадите доступ - помогу разобраться.

это всё есть и указано

Мой скрипт пробовал?

Нет пока не пробовал

Времени щас ни на что катастрофически не хватает

Щас немного разгребу завалы и начну пробовать

Спасибо огромное за помощь всем!

Ссылка на сообщение
Поделиться на других сайтах

#!/bin/sh
login=$1
param=$2
oldValue=$3
newValue=$4
SGCONF="../sgconf/sgconf"
HOST="localhost"
PORT="5558"
ADMIN_LOGIN="admin"
ADMIN_PASSWORD="123456"
msg=""
if [ "${param}" == "tariff" ]
then
msg="Ваш тариф изменен с '${oldValue}' на '${newValue}'."
else
if [ "${param}" == "cash" ]
then
	if [ $(echo "$oldValue < $newValue" | bc) -eq 1 ]
	then
		d=$( echo "$newValue - $oldValue" | bc )
		msg="Ваш баланс увеличен на ${d} денег. Текущее состояние баланса: ${newValue} денег."
	fi
fi
fi
if [ "${msg}" != "" ]
then
$SGCONF set -s $HOST -p $PORT -a $ADMIN_LOGIN -w $ADMIN_PASSWORD -u $login -m "${msg}"
fi

Я долго и нудно перед этим писал пост о том как все это работает, почему может не работать и что в этом случае делать. Я приводил какие-то доказательства работоспособности и всякие другие подобные мелочи. Но форум взял и покорявил мой пост. По этому я его удалил и забил писать заново. Вот скрипт. Разбирайтесь.

Вот что выдаёт на ваш скрипт:

 

# ./OnChange test tariff a b

[: 33: tariff: unexpected operator

[: 33: tariff: unexpected operator

естественно не работает и из под морды

тоже самое на параметр cash

Ссылка на сообщение
Поделиться на других сайтах

#!/bin/sh
login=$1
param=$2
oldValue=$3
newValue=$4
SGCONF="../sgconf/sgconf"
HOST="localhost"
PORT="5558"
ADMIN_LOGIN="admin"
ADMIN_PASSWORD="123456"
msg=""
if [ "${param}" == "tariff" ]
then
msg="Ваш тариф изменен с '${oldValue}' на '${newValue}'."
else
if [ "${param}" == "cash" ]
then
	if [ $(echo "$oldValue < $newValue" | bc) -eq 1 ]
	then
		d=$( echo "$newValue - $oldValue" | bc )
		msg="Ваш баланс увеличен на ${d} денег. Текущее состояние баланса: ${newValue} денег."
	fi
fi
fi
if [ "${msg}" != "" ]
then
$SGCONF set -s $HOST -p $PORT -a $ADMIN_LOGIN -w $ADMIN_PASSWORD -u $login -m "${msg}"
fi

Я долго и нудно перед этим писал пост о том как все это работает, почему может не работать и что в этом случае делать. Я приводил какие-то доказательства работоспособности и всякие другие подобные мелочи. Но форум взял и покорявил мой пост. По этому я его удалил и забил писать заново. Вот скрипт. Разбирайтесь.

Вот что выдаёт на ваш скрипт:

 

# ./OnChange test tariff a b

[: 33: tariff: unexpected operator

[: 33: tariff: unexpected operator

естественно не работает и из под морды

тоже самое на параметр cash

эээ

У меня 33-я строка последняя. А судя по ошибке у вас в 33-й строке оператор [. Может вы чего-то лишнего наменяли?

 

Например кавычки удалили в первом if

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.


×
×
  • Створити нове...