Sms

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку

Модули 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'
  1. <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. Таким образом у абонента может быть платная подписка на напоминания