Sms: відмінності між версіями
Sv (обговорення | внесок) |
Sv (обговорення | внесок) |
||
(Не показано 13 проміжних версій цього користувача) | |||
Рядок 1: | Рядок 1: | ||
==Описание== | |||
Модули sms позволяют: | Модули sms позволяют: | ||
* отправить произвольное сообщение на телефон абонента | * отправить произвольное сообщение на телефон абонента | ||
Рядок 4: | Рядок 5: | ||
* отправить sms абонентам по заданному фильтру | * отправить sms абонентам по заданному фильтру | ||
* автоматически за несколько дней отправлять напоминания абонентам о скором списании абонплаты в случае, если после этого баланс станет отрицательным | * автоматически за несколько дней отправлять напоминания абонентам о скором списании абонплаты в случае, если после этого баланс станет отрицательным | ||
* отправить сообщение о пополнении счета | |||
Sms модулей несколько - в зависимости через какой сервис будет идти отправка sms: | Sms модулей несколько - в зависимости через какой сервис будет идти отправка sms: | ||
* turbosms - сервис turbosms.ua | * turbosms - сервис [https://turbosms.ua/ turbosms.ua] | ||
* lifesms - оператор Lifecell | * lifesms - оператор Lifecell | ||
==Технические детали== | |||
Каждая смс записывается в базу данных в соответствующую таблицу. Здесь есть небольшой нюанс. База данных turbosms - удаленная, принадлежит сервису turbosms.ua. Достаточно создать запись в этой базе и смс будет отправлена. | |||
База данных lifesms - локальная, это и есть база NoDeny. Поэтому чтобы отправить sms, недостаточно просто создать запись в таблице lifesms - нужно запустить модуль ядра lifesms, который сканирует данную таблицу и связывается с сервером Lifecell. | |||
==Напоминание о списаниях== | |||
Это модуль ядра remindsms. Он периодически вычисляет: приведет ли ближайшее списание абонплаты к отрицательному балансу и если так - записывает соответствующее сообщение в базу данных turbosms или lifesms. | |||
===Отправка смс о предстоящем списании только по подписке=== | |||
Можно отправлять смс о предстоящем списании только если у абонента подключена дополнительная услуга с тегом remindsms. Таким образом у абонента может быть платная подписка на напоминания. А может быть и бесплатная (стоимость 0.001 аналог нулевой стоимости), тогда абоненты сами смогут выбирать нужны ли им смс или нет. | |||
==Модули ядра== | |||
* Если вы ходите отправлять смс через lifesms, вам нужно запускать модуль ядра lifesms | |||
* Если вы хотите использовать напоминания о списаниях, вам нужно запускать модуль ядра remindsms. | |||
==Номер телефона== | ==Номер телефона== | ||
Номер телефона должен храниться в допполе с именем _adr_telefon дополнительных данных абонента. Это поле строковое и не фиксирует формат. То есть | Номер телефона должен храниться в допполе с именем _adr_telefon дополнительных данных абонента. Это поле строковое и не фиксирует формат. То есть сотрудник может внести номер как: 067-11-22-333 / 0931122333 / +38097112233 или несколько номеров через запятую. Смс провайдер скорее всего будет требовать фиксированный формат номера, поэтому в настройках биллинга в разделе sms присутствует параметр "Код, который корректирует номер телефона". В этом поле необходимо записать perl-код, который будет преобразовывать телефон в формат, понятный смс-провайдеру. К сожалению, perl-код несколько труден для понимания, поэтому приведем несколько примеров: | ||
<pre> | <pre> | ||
Рядок 28: | Рядок 41: | ||
length($phone) == 10 or return ''; | length($phone) == 10 or return ''; | ||
$phone =~ /^0/ or return ''; | $phone =~ /^0/ or return ''; | ||
return $phone; | return '+38'.$phone; | ||
</pre> | </pre> | ||
Построчно расшифруем | Допустим, в поле _adr_telefon задано 2 телефона абонента: ' +38(067)-123-44-55, 7888080' | ||
Построчно расшифруем код, преобразующий номер телефона, и результат после каждой строчки кода: | |||
<pre> | <pre> | ||
my $phone = $_; | my $phone = $_; # эту строчку не меняйте, в ней мы указываем, что телефон будет в переменной $phone | ||
$phone =~ s/^\s*//; | $phone =~ s/^\s*//; # убираем пробелы, которые оператор мог случайно ввести перед номером телефона | ||
$phone =~ s/^\+//; | # получаем '+38(067)-123-44-55, 7888080' | ||
$phone =~ s/^\+//; # убираем символ "плюс" перед номером телефона. Даже если в результате нам понадобится | |||
$phone =~ s/[^\d\-\(\)].*$//; | # префикс +380, оператор может ввести телефон как +380xxx, как 380xxx и как 0xxx. | ||
$phone =~ s/\D//g; | # получаем '38(067)-123-44-55, 7888080' | ||
$phone =~ s/^3?8//g; | $phone =~ s/[^\d\-\(\)].*$//; # удаляем 2й телефон. Получаем '38(067)-123-44-55' | ||
length($phone) == 10 or return ''; | $phone =~ s/\D//g; # удаляем не цифры. Получаем '380671234455' | ||
$phone =~ /^0/ or return ''; | $phone =~ s/^3?8//g; # удаляем 3 или 38. Получаем '0671234455' | ||
return $phone; | length($phone) == 10 or return ''; # если телефон состоит не из 10 цифр - считаем, что он некорректен | ||
$phone =~ /^0/ or return ''; # если телефон начинается не на ноль - некорректен | |||
return '+38'.$phone; # возвращаем '+380671234455' | |||
</pre> | </pre> | ||
Поточна версія на 10:54, 30 травня 2020
Описание
Модули sms позволяют:
- отправить произвольное сообщение на телефон абонента
- отправить пароль на телефон абонента
- отправить sms абонентам по заданному фильтру
- автоматически за несколько дней отправлять напоминания абонентам о скором списании абонплаты в случае, если после этого баланс станет отрицательным
- отправить сообщение о пополнении счета
Sms модулей несколько - в зависимости через какой сервис будет идти отправка sms:
- turbosms - сервис turbosms.ua
- lifesms - оператор Lifecell
Технические детали
Каждая смс записывается в базу данных в соответствующую таблицу. Здесь есть небольшой нюанс. База данных turbosms - удаленная, принадлежит сервису turbosms.ua. Достаточно создать запись в этой базе и смс будет отправлена.
База данных lifesms - локальная, это и есть база NoDeny. Поэтому чтобы отправить sms, недостаточно просто создать запись в таблице lifesms - нужно запустить модуль ядра lifesms, который сканирует данную таблицу и связывается с сервером Lifecell.
Напоминание о списаниях
Это модуль ядра remindsms. Он периодически вычисляет: приведет ли ближайшее списание абонплаты к отрицательному балансу и если так - записывает соответствующее сообщение в базу данных turbosms или lifesms.
Отправка смс о предстоящем списании только по подписке
Можно отправлять смс о предстоящем списании только если у абонента подключена дополнительная услуга с тегом remindsms. Таким образом у абонента может быть платная подписка на напоминания. А может быть и бесплатная (стоимость 0.001 аналог нулевой стоимости), тогда абоненты сами смогут выбирать нужны ли им смс или нет.
Модули ядра
- Если вы ходите отправлять смс через 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 '+38'.$phone;
Допустим, в поле _adr_telefon задано 2 телефона абонента: ' +38(067)-123-44-55, 7888080'
Построчно расшифруем код, преобразующий номер телефона, и результат после каждой строчки кода:
my $phone = $_; # эту строчку не меняйте, в ней мы указываем, что телефон будет в переменной $phone $phone =~ s/^\s*//; # убираем пробелы, которые оператор мог случайно ввести перед номером телефона # получаем '+38(067)-123-44-55, 7888080' $phone =~ s/^\+//; # убираем символ "плюс" перед номером телефона. Даже если в результате нам понадобится # префикс +380, оператор может ввести телефон как +380xxx, как 380xxx и как 0xxx. # получаем '38(067)-123-44-55, 7888080' $phone =~ s/[^\d\-\(\)].*$//; # удаляем 2й телефон. Получаем '38(067)-123-44-55' $phone =~ s/\D//g; # удаляем не цифры. Получаем '380671234455' $phone =~ s/^3?8//g; # удаляем 3 или 38. Получаем '0671234455' length($phone) == 10 or return ''; # если телефон состоит не из 10 цифр - считаем, что он некорректен $phone =~ /^0/ or return ''; # если телефон начинается не на ноль - некорректен return '+38'.$phone; # возвращаем '+380671234455'