Sms: відмінності між версіями
Sv (обговорення | внесок) Немає опису редагування |
Sv (обговорення | внесок) |
||
Рядок 20: | Рядок 20: | ||
<pre> | <pre> | ||
my $phone = $_; | |||
$phone =~ s/^\s*//; | |||
$phone =~ s/^\+//; | |||
$phone =~ s/[^\d\-\(\)].*$//; | |||
$phone =~ s/\D//g; | |||
$phone =~ s/^3?8//g; | |||
length($phone) == 10 or return ''; | |||
$phone =~ /^0/ or return ''; | |||
return $phone; | |||
</pre> | |||
Построчно расшифруем этот код: | |||
<pre> | <pre> | ||
my $phone = $_; # эту строчку не меняйте, в ней мы указываем, что телефон будет в переменной $phone | |||
$phone =~ s/^\s*//; # убираем пробелы, которые оператор мог случайно ввести перед номером телефона | |||
$phone =~ s/^\+//; # убираем символ "плюс" перед номером телефона. Даже если в результате нам понадобится | |||
# префикс +380, оператор может ввести телефон как +380xxx, как 380xxx и как 0xxx | |||
$phone =~ s/[^\d\-\(\)].*$//; | |||
$phone =~ s/\D//g; | |||
$phone =~ s/^3?8//g; | |||
length($phone) == 10 or return ''; | |||
$phone =~ /^0/ or return ''; | |||
return $phone; | |||
</pre> | |||
$phone =~ s/^\s*//; # удаляем стартовые пробелы '+38(067)-123-44-55, 7888080' | |||
$phone =~ s/^\+//; # удаляем стартовый + '38(067)-123-44-55, 7888080' | |||
$phone =~ s/[^\d\-\(\)].*$//; # удаляем 2й телефон '38(067)-123-44-55' | |||
$phone =~ s/\D//g; # удаляем не цифры '380671234455' | |||
#<HOOK>phone_extract_start | |||
if( $cfg::sms_phone_extractor eq 'ua' ) | |||
{ | |||
$phone =~ s/^3?8//g; # удаляем 3 или 38 '0671234455' | |||
length($phone) == 10 or return ''; | |||
$phone =~ /^0/ or return ''; | |||
==Отправка смс о предстоящем списании только по подписке== | ==Отправка смс о предстоящем списании только по подписке== | ||
Можно отправлять смс о предстоящем списании только если у абонента подключена дополнительная услуга с тегом remindsms. Таким образом у абонента может быть платная подписка на напоминания | Можно отправлять смс о предстоящем списании только если у абонента подключена дополнительная услуга с тегом remindsms. Таким образом у абонента может быть платная подписка на напоминания |
Версія за 11:54, 9 січня 2019
Модули sms позволяют:
- отправить произвольное сообщение на телефон абонента
- отправить пароль на телефон абонента
- отправить sms абонентам по заданному фильтру
- автоматически за несколько дней отправлять напоминания абонентам о скором списании абонплаты в случае, если после этого баланс станет отрицательным
Sms модулей несколько - в зависимости через какой сервис будет идти отправка sms:
- turbosms - сервис turbosms.ua
- lifesms - оператор Lifecell
Модуль ядра remindsms периодически вычисляет: приведет ли ближайшее списание абонплаты к отрицательному балансу и если так - записывает соответствующее сообщение в базу данных turbosms или lifesms. Обратите внимание: база данных turbosms - удаленная, принадлежит сервису turbosms.ua. Достаточно создать запись в этой базе и смс будет отправлена. База данных lifesms - локальная, это и есть база NoDeny. Поэтому чтобы отправить sms, недостаточно просто создать запись в таблице lifesms - нужно запустить модуль ядра lifesms, который сканирует данные таблицу и связывается с сервером Lifecell.
Подытожим: если вы используете модуль lifesms, вам нужно запускать модуль ядра lifesms, при этом, если вы хотите использовать напоминания - дополнительно еще и модуль remindsms.
Номер телефона
Номер телефона должен храниться в допполе с именем _adr_telefon дополнительных данных абонента. Это поле строковое и не фиксирует формат. То есть оператор может внести номер как: 067-11-22-333/0931122333/+38097112233 или несколько номеров через запятую. Смс провайдер скорее всего будет требовать фиксированный формат номера, поэтому в настройках биллинга в разделе sms присутствует параметр "Код, который корректирует номер телефона". В этом поле необходимо записать perl-код, который будет преобразовывать телефон в формат, понятный смс-провайдеру. К сожалению, perl-код несколько труден для понимания, поэтому приведем несколько примеров:
my $phone = $_; $phone =~ s/^\s*//; $phone =~ s/^\+//; $phone =~ s/[^\d\-\(\)].*$//; $phone =~ s/\D//g; $phone =~ s/^3?8//g; length($phone) == 10 or return ''; $phone =~ /^0/ or return ''; return $phone;
Построчно расшифруем этот код:
my $phone = $_; # эту строчку не меняйте, в ней мы указываем, что телефон будет в переменной $phone $phone =~ s/^\s*//; # убираем пробелы, которые оператор мог случайно ввести перед номером телефона $phone =~ s/^\+//; # убираем символ "плюс" перед номером телефона. Даже если в результате нам понадобится # префикс +380, оператор может ввести телефон как +380xxx, как 380xxx и как 0xxx $phone =~ s/[^\d\-\(\)].*$//; $phone =~ s/\D//g; $phone =~ s/^3?8//g; length($phone) == 10 or return ''; $phone =~ /^0/ or return ''; return $phone;
$phone =~ s/^\s*//; # удаляем стартовые пробелы '+38(067)-123-44-55, 7888080' $phone =~ s/^\+//; # удаляем стартовый + '38(067)-123-44-55, 7888080' $phone =~ s/[^\d\-\(\)].*$//; # удаляем 2й телефон '38(067)-123-44-55' $phone =~ s/\D//g; # удаляем не цифры '380671234455'
- <HOOK>phone_extract_start
if( $cfg::sms_phone_extractor eq 'ua' ) { $phone =~ s/^3?8//g; # удаляем 3 или 38 '0671234455' length($phone) == 10 or return ; $phone =~ /^0/ or return ;
Отправка смс о предстоящем списании только по подписке
Можно отправлять смс о предстоящем списании только если у абонента подключена дополнительная услуга с тегом remindsms. Таким образом у абонента может быть платная подписка на напоминания