elvin
Пользователь
Карма: 0
Offline
Сообщений: 48
|
|
« : 29 Января 2019, 13:44:14 » |
|
Добрый день! Помогите, пожалуйста, разобраться... Модуль TurboSMS, вроде как настроен, выставил для проверки тег remindsms на одной услуге для проверки отправки, отправка смс высталвена с 9 до 21, за 3 дня до окончания услуги. Снятие денег со счета посуточное. Модуль включен. Если отправлять SMS клиенту с логин/пароль, sms отправляется, обычный текст тоже отправляется и доставляется. А вот о списании не приходят СМС, как можно выяснить почему? Во вложении скриншоты о настройке.
|
|
|
Записан
|
|
|
|
elvin
Пользователь
Карма: 0
Offline
Сообщений: 48
|
|
« Ответ #1 : 29 Января 2019, 13:47:08 » |
|
так же вопрос что за поле SMS через TurboSMS? Если кликаю, ничего не открывается, должно что-то отображать?
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #2 : 30 Января 2019, 22:41:08 » |
|
так же вопрос что за поле SMS через TurboSMS? Если кликаю, ничего не открывается, должно что-то отображать?
Должно отобразиться окно с вводом номера телефона и текста сообщения. Но мой бок - недавно я делал изменения по проверке номеров телефонов (переносил их в веб-интерфейс) и забыл в одном месте это изменить. Пофиксил. Обновись до 556 ревизии
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #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
Сообщений: 48
|
|
« Ответ #4 : 31 Января 2019, 15:32:12 » |
|
Спасибо, попробую!
|
|
|
Записан
|
|
|
|
elvin
Пользователь
Карма: 0
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
Сообщений: 48
|
|
« Ответ #6 : 04 Февраля 2019, 12:55:27 » |
|
еще вопрос, процесс какой-то должен быть постоянно запущен? например "remindsms"? и я так понял при суточном тарифе, смс отправляется максимум только за сутки, возможно сделать как-то за несколько суток, за трое например?
|
|
|
Записан
|
|
|
|
dimonous
Пользователь
Карма: 0
Offline
Сообщений: 34
|
|
« Ответ #7 : 13 Марта 2019, 12:10:41 » |
|
"remindsms" периодически запускается ядром, если в настройках включена опция "запускать вместе с ядром". Кулдаун отсылки обеспечивается добавлением тега "expire_sms" в users_services.
|
|
|
Записан
|
|
|
|
dimonous
Пользователь
Карма: 0
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
Сообщений: 34
|
|
« Ответ #9 : 13 Марта 2019, 12:21:50 » |
|
Еще подробностей:
|
|
|
Записан
|
|
|
|
Cell
NoDeny
Спец
Карма: 52
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
Сообщений: 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
|
|
« Ответ #12 : 13 Марта 2019, 13:54:38 » |
|
Я вижу, что у тебя пропатченный модуль sms.pm. Может там что-то некорректно изменено. Для турбосмс имя таблицы берется таким же как логин подключения к базе турбосмс
|
|
|
Записан
|
|
|
|
dimonous
Пользователь
Карма: 0
Offline
Сообщений: 34
|
|
« Ответ #13 : 13 Марта 2019, 15:17:23 » |
|
Удалил _sms.pm и _remindsms.pm, перезапустил биллинг и смс заработали. Спасибо!
|
|
|
Записан
|
|
|
|
dimonous
Пользователь
Карма: 0
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}}; }
|
|
|
Записан
|
|
|
|
|