Sms: відмінності між версіями

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку
 
(Не показано 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


Модуль ядра remindsms периодически вычисляет: приведет ли ближайшее списание абонплаты к отрицательному балансу и если так - записывает соответствующее сообщение в базу данных turbosms или lifesms. Обратите внимание: база данных turbosms - удаленная, принадлежит сервису turbosms.ua. Достаточно создать запись в этой базе и смс будет отправлена. База данных lifesms - локальная, это и есть база NoDeny. Поэтому чтобы отправить sms, недостаточно просто создать запись в таблице lifesms - нужно запустить модуль ядра lifesms, который сканирует данные таблицу и связывается с сервером Lifecell.
==Технические детали==


Каждая смс записывается в базу данных в соответствующую таблицу. Здесь есть небольшой нюанс. База данных turbosms - удаленная, принадлежит сервису turbosms.ua. Достаточно создать запись в этой базе и смс будет отправлена.


Подытожим: если вы используете модуль lifesms, вам нужно запускать модуль ядра lifesms,  при этом, если вы хотите использовать напоминания - дополнительно еще и модуль remindsms.
База данных 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-код несколько труден для понимания, поэтому приведем несколько примеров:
Номер телефона должен храниться в допполе с именем _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 = $_;                 # эту строчку не меняйте, в ней мы указываем, что телефон будет в переменной $phone
my $phone = $_;                     # эту строчку не меняйте, в ней мы указываем, что телефон будет в переменной $phone
$phone =~ s/^\s*//;             # убираем пробелы, которые оператор мог случайно ввести перед номером телефона
$phone =~ s/^\s*//;                 # убираем пробелы, которые оператор мог случайно ввести перед номером телефона
$phone =~ s/^\+//;               # убираем символ "плюс" перед номером телефона. Даже если в результате нам понадобится
                                    # получаем '+38(067)-123-44-55, 7888080'
                                              # префикс +380, оператор может ввести телефон как +380xxx, как 380xxx и как 0xxx
$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>
    $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. Таким образом у абонента может быть платная подписка на напоминания

Поточна версія на 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'