nousaibot Posted December 18, 2014 (edited) · Report post Встала задача оповещять клиентов о балансе через SMS. В состав Ланбиллинга уже входит скрипт script_notify для рассылки оповещений по e-mail, ланбиллинг передает скрипту адрес почты, баланс, и тд. Говорил с разработчиками реализовать возможность передачи поля номер нет, если не использовать поле e-mail тоесть вписывать номер туда, но и тут есть свой минус оповещение будет приходить 12.00 боюсь не рады будут абоненты такой СМС. Есть возможность реализовать отдельный скрипт который сам будет цепляться к базе и рассылать оповещения, но сам реализовывать буду долго поскольку я больше копи-пастер чем программист. В качестве сервиса для рассылки хочу использовать https://my.atompark.com скрипт в прикрепленном фале, скрипт стандартный с сайта, разве что сообщение и номер будет получать в атрибутах, если нужны комментарии пишите. Хотел узнать у кого уже был опыт реализации, что использовали, грабли которые можно поймать, вообщем поделитесь опытом. Зарание спасибо) SMS.php Edited December 19, 2014 by nousaibot Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
wed Posted December 18, 2014 · Report post Мы решили этот вопрос использованием userside - он синхронизируется с ланбиллингом и из userside мы шлем смски. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
saaremaa Posted December 18, 2014 · Report post Мой Вам совет. Допиливаете сами - кишки у Lanbillin простые. Кормили их ТП некоторое время - результат не получили. ТП кормили нас завтраками несколько кварталов, но ipv6 поддержка так и не разработана. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted December 18, 2014 · Report post Только лучше делать через php api, а не напрямую из базы. Структура БД у них вовсе не постоянная Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nousaibot Posted December 19, 2014 · Report post Мой Вам совет. Допиливаете сами - кишки у Lanbillin простые. Кормили их ТП некоторое время - результат не получили. ТП кормили нас завтраками несколько кварталов, но ipv6 поддержка так и не разработана. Так я сам собственно и хочу, но знаний пока маловато, хотел узнать кто-то наверняка уже реализовал. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
saaremaa Posted December 19, 2014 · Report post 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 Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
saaremaa Posted December 19, 2014 · Report post Только лучше делать через php api, а не напрямую из базы. Структура БД у них вовсе не постоянная да, можно через SOAP PHP API. Работает не удобно. Уж лучше по-старинке темболее что обновлять эту "поделку" мы не собираемся будем сами допиливать что есть. Если данные дергаете часто очень рекомендую выгружать это в REDIS и оттуда таскать. :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
grfmaniak Posted December 22, 2014 · Report post Реализовали через стандартный скрипт оповещения. В качестве поля для хранения телефона для смс использовали поле "Факс" и при вызове скрипта смотрим, есть ли там номер, в нужном ли он формате и вообще, заказывал ли такую услугу абонент. Если все ок - шлем смс. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
nousaibot Posted December 22, 2014 · Report post Реализовали через стандартный скрипт оповещения. В качестве поля для хранения телефона для смс использовали поле "Факс" и при вызове скрипта смотрим, есть ли там номер, в нужном ли он формате и вообще, заказывал ли такую услугу абонент. Если все ок - шлем смс. На сколько я понял стандартный скрипт не умеет отсылать смс, по крайней мере в версии 2,8. И переменной передаюшей поле факс в стандартном скрипте нет (если есть ткните пальцем) есть возможность пердавать поле e-mail тоесть вписывать номера туда. Реализовали через стандартный скрипт оповещения. В качестве поля для хранения телефона для смс использовали поле "Факс" и при вызове скрипта смотрим, есть ли там номер, в нужном ли он формате и вообще, заказывал ли такую услугу абонент. Если все ок - шлем смс. Если не в лом скинте скрипт, закоментив инфу которую нам знать не нужно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
grfmaniak Posted December 22, 2014 · Report post На сколько я понял стандартный скрипт не умеет отсылать смс, по крайней мере в версии 2,8. И переменной передаюшей поле факс в стандартном скрипте нет (если есть ткните пальцем) есть возможность пердавать поле e-mail тоесть вписывать номера туда. Естественно он этого не умеет. Но он вызывается когда надо и передает логин учетки абонента, а что еще-то надо? Остальное можно и самому в базе найти. Если не в лом скинте скрипт, закоментив инфу которую нам знать не нужно. все там элементарно: логин учетки передается, берем из базы соответсвующий этому логину uid и по нему смотрим в accounts поле fax. Если там номер телефона есть - формируем нужное сообщение и шлем емайлом на смс-емайл гейт провайдера типа sms.ru Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Andrei Posted December 22, 2014 · Report post Конкретно СМС-ками не занимались. А вот уведки по 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 Ответить с цитированием Share this post Link to post Share on other sites More sharing options...