nousaibot Posted December 18, 2014 Posted December 18, 2014 (edited) Встала задача оповещять клиентов о балансе через SMS. В состав Ланбиллинга уже входит скрипт script_notify для рассылки оповещений по e-mail, ланбиллинг передает скрипту адрес почты, баланс, и тд. Говорил с разработчиками реализовать возможность передачи поля номер нет, если не использовать поле e-mail тоесть вписывать номер туда, но и тут есть свой минус оповещение будет приходить 12.00 боюсь не рады будут абоненты такой СМС. Есть возможность реализовать отдельный скрипт который сам будет цепляться к базе и рассылать оповещения, но сам реализовывать буду долго поскольку я больше копи-пастер чем программист. В качестве сервиса для рассылки хочу использовать https://my.atompark.com скрипт в прикрепленном фале, скрипт стандартный с сайта, разве что сообщение и номер будет получать в атрибутах, если нужны комментарии пишите. Хотел узнать у кого уже был опыт реализации, что использовали, грабли которые можно поймать, вообщем поделитесь опытом. Зарание спасибо) SMS.php Edited December 19, 2014 by nousaibot Вставить ник Quote
wed Posted December 18, 2014 Posted December 18, 2014 Мы решили этот вопрос использованием userside - он синхронизируется с ланбиллингом и из userside мы шлем смски. Вставить ник Quote
saaremaa Posted December 18, 2014 Posted December 18, 2014 Мой Вам совет. Допиливаете сами - кишки у Lanbillin простые. Кормили их ТП некоторое время - результат не получили. ТП кормили нас завтраками несколько кварталов, но ipv6 поддержка так и не разработана. Вставить ник Quote
s.lobanov Posted December 18, 2014 Posted December 18, 2014 Только лучше делать через php api, а не напрямую из базы. Структура БД у них вовсе не постоянная Вставить ник Quote
nousaibot Posted December 19, 2014 Author Posted December 19, 2014 Мой Вам совет. Допиливаете сами - кишки у Lanbillin простые. Кормили их ТП некоторое время - результат не получили. ТП кормили нас завтраками несколько кварталов, но ipv6 поддержка так и не разработана. Так я сам собственно и хочу, но знаний пока маловато, хотел узнать кто-то наверняка уже реализовал. Вставить ник Quote
saaremaa Posted December 19, 2014 Posted December 19, 2014 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 смс-гейта. Все просто. Вставить ник Quote
saaremaa Posted December 19, 2014 Posted December 19, 2014 Только лучше делать через php api, а не напрямую из базы. Структура БД у них вовсе не постоянная да, можно через SOAP PHP API. Работает не удобно. Уж лучше по-старинке темболее что обновлять эту "поделку" мы не собираемся будем сами допиливать что есть. Если данные дергаете часто очень рекомендую выгружать это в REDIS и оттуда таскать. :) Вставить ник Quote
grfmaniak Posted December 22, 2014 Posted December 22, 2014 Реализовали через стандартный скрипт оповещения. В качестве поля для хранения телефона для смс использовали поле "Факс" и при вызове скрипта смотрим, есть ли там номер, в нужном ли он формате и вообще, заказывал ли такую услугу абонент. Если все ок - шлем смс. Вставить ник Quote
nousaibot Posted December 22, 2014 Author Posted December 22, 2014 Реализовали через стандартный скрипт оповещения. В качестве поля для хранения телефона для смс использовали поле "Факс" и при вызове скрипта смотрим, есть ли там номер, в нужном ли он формате и вообще, заказывал ли такую услугу абонент. Если все ок - шлем смс. На сколько я понял стандартный скрипт не умеет отсылать смс, по крайней мере в версии 2,8. И переменной передаюшей поле факс в стандартном скрипте нет (если есть ткните пальцем) есть возможность пердавать поле e-mail тоесть вписывать номера туда. Реализовали через стандартный скрипт оповещения. В качестве поля для хранения телефона для смс использовали поле "Факс" и при вызове скрипта смотрим, есть ли там номер, в нужном ли он формате и вообще, заказывал ли такую услугу абонент. Если все ок - шлем смс. Если не в лом скинте скрипт, закоментив инфу которую нам знать не нужно. Вставить ник Quote
grfmaniak Posted December 22, 2014 Posted December 22, 2014 На сколько я понял стандартный скрипт не умеет отсылать смс, по крайней мере в версии 2,8. И переменной передаюшей поле факс в стандартном скрипте нет (если есть ткните пальцем) есть возможность пердавать поле e-mail тоесть вписывать номера туда. Естественно он этого не умеет. Но он вызывается когда надо и передает логин учетки абонента, а что еще-то надо? Остальное можно и самому в базе найти. Если не в лом скинте скрипт, закоментив инфу которую нам знать не нужно. все там элементарно: логин учетки передается, берем из базы соответсвующий этому логину uid и по нему смотрим в accounts поле fax. Если там номер телефона есть - формируем нужное сообщение и шлем емайлом на смс-емайл гейт провайдера типа sms.ru Вставить ник Quote
Andrei Posted December 22, 2014 Posted December 22, 2014 Конкретно СМС-ками не занимались. А вот уведки по 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 Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.