Биллинговая система Nodeny
25 Ноября 2024, 13:56:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2
  Печать  
Автор Тема: Модуль TurboSMS смс о предстоящем списании средств не отправляет.  (Прочитано 11478 раз)
elvin
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 48


Просмотр профиля
« : 29 Января 2019, 13:44:14 »

Добрый день!
Помогите, пожалуйста, разобраться...
Модуль TurboSMS, вроде как настроен, выставил для проверки тег remindsms на одной услуге для проверки отправки, отправка смс высталвена с 9 до 21, за 3 дня до окончания услуги.
Снятие денег со счета посуточное. Модуль включен.
Если отправлять SMS  клиенту с логин/пароль, sms отправляется, обычный текст тоже отправляется и доставляется.
А вот о списании не приходят СМС, как можно выяснить почему?
Во вложении скриншоты о настройке.
Записан
elvin
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 48


Просмотр профиля
« Ответ #1 : 29 Января 2019, 13:47:08 »

так же вопрос что за поле SMS через TurboSMS?
Если кликаю, ничего не открывается, должно что-то отображать?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #2 : 30 Января 2019, 22:41:08 »

так же вопрос что за поле SMS через TurboSMS?
Если кликаю, ничего не открывается, должно что-то отображать?
Должно отобразиться окно с вводом номера телефона и текста сообщения. Но мой бок - недавно я делал изменения по проверке номеров телефонов (переносил их в веб-интерфейс) и забыл в одном месте это изменить. Пофиксил. Обновись до 556 ревизии
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #3 : 30 Января 2019, 22:50:34 »

Помогите, пожалуйста, разобраться...
Запусти в режиме отладки модуль remindsms:

Код:
perl nokernel.pl -m=remindsms -v

сперва он выполнит sql-запрос, который должен вернуть список абонентов, которым планируется отсылка sms. Он будет примерно таким:

Код:
SELECT v.id, v.uid, s.price, u.balance, u.discount, d._adr_telefon, s.param AS srv_param, DATE(FROM_UNIXTIME(v.tm_end)) AS date  FROM users_services v JOIN users u ON v.uid=u.id JOIN services s ON v.next_service_id=s.service_id JOIN data0 d ON v.uid=d.uid WHERE v.tm_end>0 AND v.tm_end<(UNIX_TIMESTAMP()+'86400') AND v.next_service_id>0 AND s.price>0 AND u.balance<s.price*(1-u.discount/100) AND block_if_limit>0 AND u.state='on' AND d._adr_telefon<>'' AND v.tags NOT LIKE '%,expire_sms,%' AND NOT EXISTS (SELECT id FROM v_services WHERE uid=u.id AND price<0) AND NOT EXISTS (SELECT id FROM pays WHERE mid=u.id AND category=202 AND reason='turbosms')

у тебя может быть слегка иным. Главное посмотри сразу после него на следующую строку:

Код:
Строк: xx. Время выполнения sql: yy сек

если xx = 0 - значит под условия не попал ни один абонент - что-то не так настроено. Можно привести этот запрос и мы вместе начнем разбирать его по кусочками что же в нем не попадает под условия, но этот будет долго. Можно самому в консоли sql выполнять его постепенно удаляя условие после каждого AND. Например:

Код:
SELECT v.id, v.uid, s.price, u.balance, u.discount, d._adr_telefon, s.param AS srv_param, DATE(FROM_UNIXTIME(v.tm_end)) AS date  FROM users_services v JOIN users u ON v.uid=u.id JOIN services s ON v.next_service_id=s.service_id JOIN data0 d ON v.uid=d.uid WHERE v.tm_end>0 AND v.tm_end<(UNIX_TIMESTAMP()+'86400') AND v.next_service_id>0 AND s.price>0 AND u.balance<s.price*(1-u.discount/100) AND block_if_limit>0 AND u.state='on' AND d._adr_telefon<>'' AND v.tags NOT LIKE '%,expire_sms,%' AND NOT EXISTS (SELECT id FROM v_services WHERE uid=u.id AND price<0);
здесь я удалил  AND NOT EXISTS (SELECT id FROM pays WHERE mid=u.id AND category=202 AND reason='turbosms') - это запись говорящая о том, что есть платеж, блокирующий отправку смс.

Кроме того можешь обратить внимание на комментарии в remindsms:

Код:
        "WHERE v.tm_end>0 ".                            # услуга имеет срок действия,
            "AND v.tm_end<(UNIX_TIMESTAMP()+?) ".       # скоро заканчивается,
            "AND v.next_service_id>0 ".                 # установлена следующая,
            "AND s.price>0 ".                           # ее стоимость > 0 (т.е не бонус, а снятие),
            "AND u.balance<s.price*(1-u.discount/100) ".# баланс меньше стоимости следующей услуги,
            "AND block_if_limit>0 ".                    # включена блокировка при балансе ниже лимита,
            "AND u.state='on' ".                        # в данный момент доступ включен,
            "AND d._adr_telefon<>'' ".                  # у клиента есть телефон,
            "AND v.tags NOT LIKE '%,expire_sms,%' ".    # нет тега expire_sms (означает, что sms уже отсылалось)
           "AND NOT EXISTS (SELECT id FROM v_services WHERE uid=u.id AND price<0) ". # не подключена бонусная услуга
           "AND NOT EXISTS (SELECT id FROM pays WHERE mid=u.id AND category=202 AND reason='turbosms')"; # нет блокировки отсылки sms

Записан
elvin
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 48


Просмотр профиля
« Ответ #4 : 31 Января 2019, 15:32:12 »

Спасибо, попробую!
Записан
elvin
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 48


Просмотр профиля
« Ответ #5 : 31 Января 2019, 15:53:38 »


Запусти в режиме отладки модуль remindsms:

Код:
perl nokernel.pl -m=remindsms -v

[/quote]

Только запустил, смс пришла, но на тестовой учетке это был последний день.

Я так понимаю модуль не запустился?
Но при добавлении баланса до 3-х дней, и повторном запуске модуля
Строк: 0. Время выполнения sql: 0.4647 сек, при том что баланс потом опять убрал, ответ по строкам такой же.
Или смс раз в какой-то период?
И тут самый вкус вопроса, будет ли при суточной тарификации за 3-и дня отрпавлять смс, или все таки за сутки только?
Записан
elvin
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 48


Просмотр профиля
« Ответ #6 : 04 Февраля 2019, 12:55:27 »

еще вопрос, процесс какой-то должен быть постоянно запущен? например "remindsms"?
и я  так понял при суточном тарифе, смс отправляется максимум только за сутки, возможно сделать как-то за несколько суток, за трое например?
Записан
dimonous
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 34


Просмотр профиля
« Ответ #7 : 13 Марта 2019, 12:10:41 »

"remindsms" периодически запускается ядром, если в настройках включена опция "запускать вместе с ядром". Кулдаун отсылки обеспечивается добавлением тега "expire_sms" в users_services.
Записан
dimonous
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 34


Просмотр профиля
« Ответ #8 : 13 Марта 2019, 12:15:39 »

Прошу помощи с модулем. Не могу понять причину поведения:


You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SET number='+38063', sign='', message=NULL, send_time=NOW()' at line 1

{
  'sql' => 'INSERT INTO  SET number=?, sign=?, message=?, send_time=NOW()',
  'param' => [
    '+38063',
    '',
    undef
  ]
};

 INSERT INTO  SET number='+38063', sign='', message=NULL, send_time=NOW()

end

Таблица прописана в логине модуля turbosms.
Версию 561 поставил.
модуль turbosms скачан из личного кабинета.

# cat updateturbosms.log | grep sms
--- Модуль turbosms ---
{ file=>'cfg/RU/tune.cfg',hook=>'sms' }
{ file=>'cfg/UA/tune.cfg',hook=>'sms' }
Файл create.kernel.turbosms.pm
Файл create.nod.turbosms.pm
Файл create.turbo_sms.pl
Файл create.kernel.remindsms.pm
Файл create.kernel.turbosms.cfg
Файл create.kernel.remindsms.cfg
Файл create.multisms.pl
Патчим web/users.pl модулями turbosms
Патчим cfg/RU/tune.cfg модулями turbosms
Патчим cfg/UA/tune.cfg модулями turbosms
Патчим web/lang/UA.pl модулями turbosms
Патчим web/main.pl модулями turbosms
Патчим cfg/web_plugins.list модулями turbosms
Записан
dimonous
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 34


Просмотр профиля
« Ответ #9 : 13 Марта 2019, 12:21:50 »

Еще подробностей:
Записан
Cell
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1407



Просмотр профиля
« Ответ #10 : 13 Марта 2019, 12:23:08 »

Цитировать
INSERT INTO  SET number='+38063', sign='', message=NULL, send_time=NOW()
Ошибка синтаксиса.
правильно писать так

INSERT INTO  tablename SET .........
Записан
dimonous
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 34


Просмотр профиля
« Ответ #11 : 13 Марта 2019, 12:28:03 »

конечно ошибка!
имя таблицы должно прилетать отсюда:

$sms_db->do(
"INSERT INTO $db_table SET number=?, sign=?, message=?, send_time=NOW()",
$phone, $cur_sms_sign, $message

которая берется из:
my $db_params = nod::sms::db_param( nod::sms::provider_params($config->{smsmod}) );
my $db_table = $db_params->{table};

что вот здесь:
cat _sms.pm
my $params = {
enabled => ${"cfg::$smsmod"."_enabled"},
table => ${"cfg::$smsmod"."_db_table"} || $provider->{sms_tbl} || ${"cfg::$smsmod"."_db_login"},
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #12 : 13 Марта 2019, 13:54:38 »

Я вижу, что у тебя пропатченный модуль sms.pm. Может там что-то некорректно изменено. Для турбосмс имя таблицы берется таким же как логин подключения к базе турбосмс
Записан
dimonous
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 34


Просмотр профиля
« Ответ #13 : 13 Марта 2019, 15:17:23 »

Удалил _sms.pm и _remindsms.pm, перезапустил биллинг и смс заработали. Спасибо!
Записан
dimonous
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 34


Просмотр профиля
« Ответ #14 : 13 Мая 2019, 13:23:08 »

Нашел баг.

При рассылке с несколькими подписями подпись не подставляется. Причина - в ошибке в SQL запросе.
Вместо:
SELECT v.id, v.uid, s.price, u.balance, u.discount, d._adr_telefon, s.param AS srv_param, DATE(FROM_UNIXTIME(v.tm_end)) AS date, _sms
выполняется:
SELECT v.id, v.uid, s.price, u.balance, u.discount, d._adr_telefon, s.param AS srv_param, DATE(FROM_UNIXTIME(v.tm_end)) AS date_sms

Вот патч:

[root@my nodeny]# svn diff  kernel/remindsms.pm
Index: kernel/remindsms.pm
===================================================================
--- kernel/remindsms.pm (revision 572)
+++ kernel/remindsms.pm (working copy)
@@ -72,7 +72,7 @@

     if( $dopfield )
     {
-        $sql_select .= $dopfield;
+        $sql_select .= ",$dopfield";
         %dopsignes = %{$db_params->{dopsignes}};
     }

Записан
Страниц: [1] 2
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!