Jump to content
Калькуляторы

lanbilling sms оповещение клиентов Кто как реализовал оповещение клиентов о балансе?

Встала задача оповещять клиентов о балансе через SMS.

В состав Ланбиллинга уже входит скрипт script_notify для рассылки оповещений по e-mail, ланбиллинг передает скрипту адрес почты, баланс, и тд. Говорил с разработчиками реализовать возможность передачи поля номер нет, если не использовать поле e-mail тоесть вписывать номер туда, но и тут есть свой минус оповещение будет приходить 12.00 боюсь не рады будут абоненты такой СМС.

Есть возможность реализовать отдельный скрипт который сам будет цепляться к базе и рассылать оповещения, но сам реализовывать буду долго поскольку я больше копи-пастер чем программист.

В качестве сервиса для рассылки хочу использовать https://my.atompark.com скрипт в прикрепленном фале, скрипт стандартный с сайта, разве что сообщение и номер будет получать в атрибутах, если нужны комментарии пишите.

Хотел узнать у кого уже был опыт реализации, что использовали, грабли которые можно поймать, вообщем поделитесь опытом.

Зарание спасибо)

SMS.php

Edited by nousaibot

Share this post


Link to post
Share on other sites

Мы решили этот вопрос использованием userside - он синхронизируется с ланбиллингом и из userside мы шлем смски.

Share this post


Link to post
Share on other sites

Мой Вам совет. Допиливаете сами - кишки у Lanbillin простые. Кормили их ТП некоторое время - результат не получили. ТП кормили нас завтраками несколько кварталов, но ipv6 поддержка так и не разработана.

Share this post


Link to post
Share on other sites

Только лучше делать через php api, а не напрямую из базы. Структура БД у них вовсе не постоянная

Share this post


Link to post
Share on other sites

Мой Вам совет. Допиливаете сами - кишки у Lanbillin простые. Кормили их ТП некоторое время - результат не получили. ТП кормили нас завтраками несколько кварталов, но ipv6 поддержка так и не разработана.

 

Так я сам собственно и хочу, но знаний пока маловато, хотел узнать кто-то наверняка уже реализовал.

Share this post


Link to post
Share on other sites

nousaibot, мы не реализовывали, но я могу подсказать. в их личном кабинете есть описания структуры БД.

Вас должны интересовать таблицы:

agreements - Договоры пользователей (лицевые счета)

accounts - Пользователи АСР

связи по ключам там так же описаны

В конечном итоге должно получиться что-то наподобие (ниже рабочий запрос на выгрузку базы о абонентах):

SELECT DISTINCT 
agreements.number AS DOGOVOR,
agreements_ext.closed_on AS CLOSED,
vgroups.login AS LOGIN,
tarifs.descr as  TARIFS,
ROUND(agreements.balance,2) AS BALANCE,
ROUND(agreements.credit,2) AS CREDIT,
vgroups.blocked AS BLOCK_STATE,
accounts.name AS FIO, 
accounts.phone AS PHONE,
accounts.mobile AS MOBILE,
CONCAT(address_area.short,' ',address_area.name) AS RAION,
CONCAT(address_city.short,' ',address_city.name) AS GOROD ,
CONCAT(address_settl.short,' ',address_settl.name )AS SELO ,
CONCAT(address_street.short,' ',address_street.name)AS ULICA ,
address_building.name AS BUILDING ,
address_flat.name AS KV 

FROM accounts
LEFT JOIN accounts_addr ON accounts.uid = accounts_addr.uid
LEFT JOIN address_area ON accounts_addr.area = address_area.record_id
LEFT JOIN address_city ON accounts_addr.city = address_city.record_id
LEFT JOIN address_settl ON accounts_addr.settl = address_settl.record_id
LEFT JOIN address_street ON accounts_addr.street = address_street.record_id
LEFT JOIN address_building ON accounts_addr.building = address_building.record_id
LEFT JOIN address_flat ON accounts_addr.flat = address_flat.record_id
LEFT JOIN agreements ON accounts.uid = agreements.uid
LEFT JOIN vgroups ON agreements.uid = vgroups.uid
LEFT JOIN agreements_ext ON agreements_ext.agrm_id = agreements.agrm_id
LEFT JOIN tarifs on vgroups.tar_id = tarifs.tar_id


WHERE 	accounts.archive LIKE (0) AND
accounts.template LIKE (0) AND 
vgroups.id LIKE(1) AND
LENGTH(vgroups.login) < 10 AND
LENGTH(agreements.number)>7 AND
LENGTH(accounts.name)>1 AND 
( address_settl.name IS NOT NULL OR 
  address_city.name IS NOT NULL)
ORDER BY agreements.number ASC

 

Для "умников" что запрос не оптимален по производительности → напишите как надо. ;)

 

Язык программирования на Ваш выбор. Мне Python нравится, например. Получаете эту таблицу, выдергиваете из нее значения и передаете API смс-гейта. Все просто.

Share this post


Link to post
Share on other sites

Только лучше делать через php api, а не напрямую из базы. Структура БД у них вовсе не постоянная

да, можно через SOAP PHP API. Работает не удобно. Уж лучше по-старинке темболее что обновлять эту "поделку" мы не собираемся будем сами допиливать что есть.

Если данные дергаете часто очень рекомендую выгружать это в REDIS и оттуда таскать. :)

Share this post


Link to post
Share on other sites

Реализовали через стандартный скрипт оповещения. В качестве поля для хранения телефона для смс использовали поле "Факс" и при вызове скрипта смотрим, есть ли там номер, в нужном ли он формате и вообще, заказывал ли такую услугу абонент. Если все ок - шлем смс.

Share this post


Link to post
Share on other sites

Реализовали через стандартный скрипт оповещения. В качестве поля для хранения телефона для смс использовали поле "Факс" и при вызове скрипта смотрим, есть ли там номер, в нужном ли он формате и вообще, заказывал ли такую услугу абонент. Если все ок - шлем смс.

На сколько я понял стандартный скрипт не умеет отсылать смс, по крайней мере в версии 2,8. И переменной передаюшей поле факс в стандартном скрипте нет (если есть ткните пальцем) есть возможность пердавать поле e-mail тоесть вписывать номера туда.

 

Реализовали через стандартный скрипт оповещения. В качестве поля для хранения телефона для смс использовали поле "Факс" и при вызове скрипта смотрим, есть ли там номер, в нужном ли он формате и вообще, заказывал ли такую услугу абонент. Если все ок - шлем смс.

Если не в лом скинте скрипт, закоментив инфу которую нам знать не нужно.

Share this post


Link to post
Share on other sites

На сколько я понял стандартный скрипт не умеет отсылать смс, по крайней мере в версии 2,8. И переменной передаюшей поле факс в стандартном скрипте нет (если есть ткните пальцем) есть возможность пердавать поле e-mail тоесть вписывать номера туда.

 

Естественно он этого не умеет. Но он вызывается когда надо и передает логин учетки абонента, а что еще-то надо? Остальное можно и самому в базе найти.

 

Если не в лом скинте скрипт, закоментив инфу которую нам знать не нужно.

 

все там элементарно: логин учетки передается, берем из базы соответсвующий этому логину uid и по нему смотрим в accounts поле fax. Если там номер телефона есть - формируем нужное сообщение и шлем емайлом на смс-емайл гейт провайдера типа sms.ru

Share this post


Link to post
Share on other sites

Конкретно СМС-ками не занимались. А вот уведки по e-mail о приближающемся к нулю балансе делали.

В my_script_notify :

TO_SENT_FILENAME="/usr/local/billing/scripts/to_sent.txt"
echo $1 " " $2 " " $3 " " $4  >> $TO_SENT_FILENAME

 

И потом по крону запускаем my_send_notify_to_user

#!/bin/sh
TO_SENT_FILENAME="/usr/local/billing/scripts/to_sent.txt"
ALREADY_SENT_FILENAME="/usr/local/billing/scripts/already_sent.txt"

awk '{a= "echo Баланс вашей учетной записи  " $1 " менее " $4 " рублей и составляет "
$2 " рублей. \r  Не забудьте пополнить лицевой счет. \r  Справки по телефону UU-YY-YY и в личном каби
нете http://billing.YYYYYY.ru/client \r  С уважением, служба технической поддержки ООО YYYYY-Интерне
т." ; system(a " | mail -a \"Content-Type: text/plain; charset=utf-8\" -a \"Reply-To: <root@YYYYY.r
u>\"  -a \"From: <root@YYYYYY.ru>\" -s \"Warning from YYYY-Internet\"  "$3 ) }' $TO_SENT_FILENAME
echo "=======" >> $ALREADY_SENT_FILENAME
date >> $ALREADY_SENT_FILENAME
cat $TO_SENT_FILENAME >> $ALREADY_SENT_FILENAME
rm -rf $TO_SENT_FILENAME

exit 0

 

У части ОПСОСов есть шлюзы e-mail_to_SMS. Например на МТС у нас можно отправить СМС, отправив e-mail на адрес вида 7912хххyyyzzzz@sms.ural.mts.ru

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this