Биллинговая система Nodeny

Главная категория => Nodeny Plus => Тема начата: elvin от 29 Января 2019, 13:44:14



Название: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: elvin от 29 Января 2019, 13:44:14
Добрый день!
Помогите, пожалуйста, разобраться...
Модуль TurboSMS, вроде как настроен, выставил для проверки тег remindsms на одной услуге для проверки отправки, отправка смс высталвена с 9 до 21, за 3 дня до окончания услуги.
Снятие денег со счета посуточное. Модуль включен.
Если отправлять SMS  клиенту с логин/пароль, sms отправляется, обычный текст тоже отправляется и доставляется.
А вот о списании не приходят СМС, как можно выяснить почему?
Во вложении скриншоты о настройке.


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: elvin от 29 Января 2019, 13:47:08
так же вопрос что за поле SMS через TurboSMS?
Если кликаю, ничего не открывается, должно что-то отображать?


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: Efendy от 30 Января 2019, 22:41:08
так же вопрос что за поле SMS через TurboSMS?
Если кликаю, ничего не открывается, должно что-то отображать?
Должно отобразиться окно с вводом номера телефона и текста сообщения. Но мой бок - недавно я делал изменения по проверке номеров телефонов (переносил их в веб-интерфейс) и забыл в одном месте это изменить. Пофиксил. Обновись до 556 ревизии


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: Efendy от 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



Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: elvin от 31 Января 2019, 15:32:12
Спасибо, попробую!


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: elvin от 31 Января 2019, 15:53:38

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

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

[/quote]

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

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


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: elvin от 04 Февраля 2019, 12:55:27
еще вопрос, процесс какой-то должен быть постоянно запущен? например "remindsms"?
и я  так понял при суточном тарифе, смс отправляется максимум только за сутки, возможно сделать как-то за несколько суток, за трое например?


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: dimonous от 13 Марта 2019, 12:10:41
"remindsms" периодически запускается ядром, если в настройках включена опция "запускать вместе с ядром". Кулдаун отсылки обеспечивается добавлением тега "expire_sms" в users_services.


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: dimonous от 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


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: dimonous от 13 Марта 2019, 12:21:50
Еще подробностей:


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: Cell от 13 Марта 2019, 12:23:08
Цитировать
INSERT INTO  SET number='+38063', sign='', message=NULL, send_time=NOW()
Ошибка синтаксиса.
правильно писать так

INSERT INTO  tablename SET .........


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: dimonous от 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"},


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: Efendy от 13 Марта 2019, 13:54:38
Я вижу, что у тебя пропатченный модуль sms.pm. Может там что-то некорректно изменено. Для турбосмс имя таблицы берется таким же как логин подключения к базе турбосмс


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: dimonous от 13 Марта 2019, 15:17:23
Удалил _sms.pm и _remindsms.pm, перезапустил биллинг и смс заработали. Спасибо!


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: dimonous от 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}};
     }



Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: Efendy от 13 Мая 2019, 14:14:57
ок, исправлю


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: Jovani от 30 Марта 2020, 22:49:36
подскажите почему может не работать

Код:
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()+'259200') 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') AND EXISTS (SELECT 1 FROM users_services WHERE uid=u.id AND tags LIKE '%,remindsms,%') 

Если убрать, то уже есть условия для отправки
Код:
 AND EXISTS (SELECT 1 FROM users_services WHERE uid=u.id AND tags LIKE '%,remindsms,%')

тег указан в услугах.


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: Efendy от 01 Апреля 2020, 13:23:54
Код:
AND EXISTS (SELECT 1 FROM users_services WHERE uid=u.id AND tags LIKE '%,remindsms,%')
присутствие этого фрагмента говорит о включенном параметре "Отправлять смс только если у абонента будет подключена услуга с тегом remindsms". Этот параметр нужен для того, чтобы ты создал услугу, например, "подписка на смс-ки" и подключил только тем абонам, которым надо отправлять смс. Либо они сами подключат, если услуга платная


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: k291 от 02 Апреля 2021, 18:39:10
Имеем несколько групп с разными названиями.
Задача: каждой группе, отправлять СМС со своей подписью.
Что сделал:
1) доп.поле, скрин ниже
2) обект, скрин ниже
3) настроил модуль turbosms, скрин ниже
Результат:
а) смс автоматически не отправляются. Если нажать отправку вручную, то подпись берется из "Настройки-turbosms, поле "Подпись в sms. ..." ".
б) если удалить все значения в полях "Настройки-turbosms, "Значение поля → подпись" ", то смс автоматически отправляются, но с одинаковой подписью, из поля "Подпись в sms. ...".
Подскажите, что не так


Название: Re: Модуль TurboSMS смс о предстоящем списании средств не отправляет.
Отправлено: Efendy от 05 Апреля 2021, 23:40:05
В разделе "Объекты" колонка "ключ" - это значение, которое содержится в таблице допданных, а колонка "значение" - то, как она будет отображена. Часто они совпадают. Это не обязательно, иногда есть смысл указывать какой-то код вместо полного названия, учитывая, что название (отображаемое значение) может меняться. В твоем случае как раз не совпадает. В поле хранится значение "1" - отображается как "Сеть 2". Но модуль отправки смс видит "1". Поэтому в таблице подписей в первой колонке в твоем случае должны стоять цифры. Имя допполя также замени на _net_name_sms

Чтобы смс отправлялись автоматически, нужно запустить модуль ядра remindsms. Первый раз можно с ключем -v, тогда вся инфа будет идти в консоль и по комментариям или ошибкам будет понятно, что происходит.