Как сделать свой сервер для приема, обработки и передачи смс
Доброго времени суток, уважаемое хабросообщество! Недавно в универе мне была поставлена задача создать сервис смс-рассылки уведомлений старостами (деканатом и прочими) своим группам. Основные требования к сервису были следующими: — Сервис должен быть многопользовательским (старост более 1) с возможностью одновременной обработки запросов — Не должен быть привязан к online сервисам рассылки (дабы не утекли базы пользователей) — Должен быть достаточно легким и мобильным — Максимально малозатратным — Должен использовать только открытое программное обеспечение — Должен обеспечивать отправку уведомлений, даже если у отправляющей стороны нет доступа к Интернету и/или компьютеру. (т.е. не только отправлять, но и принимать входящие смс сообщения от старост + определять от кого конкретно они поступили и делать рассылку по их группам)
Как удалось это реализовать — смотрите под катом.
Список ингредиентов.Для того, чтобы приступить к организации сервиса, нам будет нужно собрать все необходимые железки.
- Компьютером у меня будет выступать нетбук ASUS EEEPC 701
- Мобильный телефон, используемый для отправки смс — Nokia 3110
- USB bluetooth адаптер — для связи компьютера и телефона
- Зарядки для мобильника и нетбука для постоянной поддержки рабочего состояния
- Подключение к Интернету. По LAN или Wi-Fi.
- Симкарта с тарифом МТС «Супер МТС». У них все смски по РО на любого ОПСОСа по 10 копеек.
- Зарегистрированный хостинг и какое-нибудь доменное имя.
В принципе, на этом можно и ограничиться. Но для более комфортной работы я бы посоветовал еще:
- Монитор
- Беспроводную клавиатуру
- Дополнительное охлаждения для нетбука (ибо при работе 24/7 собственного маленького кулера ему будет явно не достаточно)
Что касается охлаждения — сделать его совершенно элементарно. Возьмите старый 80 миллиметровый кулер, зачистите красный и черный проводки, идущие от него. Затем отрежьте половину от ненужного USB кабеля. Также зачистите на нем красный и черный провод. Смотайте провода от кулера и от USB вместе, заизолируйте и ваше охлаждение готово. Желательно разместить кулер под нетбуком на пластилиновых ножках, чтобы он громко не резонировал.
Собственно, вот как это выглядит:
Что касается зачистки проводов — я люблю сначала опалить их концы на керосиновой горелке, а потом ножом легко счистить остатки. Керосинку тоже покупать не стоит — ее можно сделать из обычной 60 Ваттной лампочки Ильича. Пробиваете верхушку цоколя, заливаете туда керосин, вставляете кусок старой тряпки вместо фитиля и готово. Вот как это выглядит:
Подготавливаем железо к работе.В виде операционной системы для нетбука я выбрал EasyPeasy — система для нетбуков, основанная на ядре Linux и модифицированная для слабых компьютеров. Скачать ее, установить на флешку, а затем на нетбук можно тут.
BluetoothПосле того, как операционная система заняла свое место, подключаем bluetooth-адаптер в свободный USB порт. Система должна распознать его автоматически. Включаем Nokia и спариваем телефон и компьютер.
Установка gnokiiНужно установить gnokii. Я уже и раньше ссылался на эту статью по его установке на Линукс. Думаю, разберетесь. После установки наберите в консоли что-то вроде echo «Привет, друг!» | gnokii --sendsms '+7номер_вашего_друга' и проверьте, отправилась ли смска.
Подготовка хостингаВозможно, Вам подойдет какой-либо другой способ организации многопользовательской работы, но я использовал возможности Joomla ACL (уровней доступа). Как это настроить — очень подробно описано в этой статье. Я лишь хочу заметить, что на выходе у Вас должен получиться сайт, где каждый из пользователей (те, кто будет отправлять смски) будет иметь свой личный кабинет, попасть в который он сможет введя номер своего мобильного телефона (в качестве логина, в формате 79XX XXX XX XX) и пятизначный цифровой код в качестве пароля. К примеру, как на сайте vamsms.ru
Подготавливаем программное обеспечение к работе.Внимание! Все программки я писал сам. Можете использовать их как вам хочется, только дайте обратную связь, если найдете какой-либо серьезный косяк.
Итак, наша задача состоит в том, чтобы научить наш сервер общаться с удаленным сайтом, собирать с него заявки на отправку и отправлять сообщения. Кроме того, сервер должен уметь принимать входящие сообщения (на Nokia, с которой смски отправляются), осознавать, что они отправлены старостами и также ставить в очередь на рассылку по той группе, к которой конкретная староста принадлежит. Плюс, все это нужно синхронизировать. Ну и вести логи, конечно.
Организация MySQL БДДля начала необходимо сделать БД, относящуюся к хостингу, на котором у Вы организовали сайт. Я назвал свою БД — pXXXX_sender (под XXX скрываются цифры моего пользователя на хостинге) Внутри этой БД нужно создать 3 таблицы. У меня они имеют следующую структуру:
starosti (идентификация и ареалы действий для старост) — number — group — course — facultet — pass
telephones (все телефоны в базе) — number — groups — course — facultet
on_demand (тут хранятся сообщения на отправку) — message — group — course — id_this_trans — date_log
Отлично, на этом с базами данных все.
Организация shell-скрипта на нетбуке (сервере).Теперь нужно сделать так, чтобы нетбук каждые 10 минут проверял: 1) Поступили ли новые сообщения с сайта? Если да, то отправляю их нужным группам. 2) Поступили новые входящие смски? Если да, то от старост ли они? Если нет, то просто удаляю их, если да, то определяю, за какую группу отвечает староста и делаю рассылку сообщения по той группе.
Привожу листинг shell-скрипта:
Кроме того, в папке со скриптом нужно создать файл cache_test_trig.txt со значением 1 (и в таблице on_demand сделать первую запись какую-нибудь)
Организация php-скриптов на удаленном хостинге.В личном кабинете пользователя в joomla должна быть форма следующего содержания:
Очевидно, данные из формы передаются в файл, лежащий в корневой директории хостинга handler.php
Вот его листинг:
Далее, для того, чтобы удаленный хостинг мог отвечать на запросы shell-скрипта, необходимо, чтобы в его корневой директории были расположены следующие файлы:
файл serv_mobile.php — отвечает за обработку сообщений, принятых мобильным телефоном Скрипт trigger.php, тоже лежит в корневой директории, создает папки на хостинге, содержащие файл с сообщением и файл с номерами, которым это сообщение будет рассылаться. Последний файл в корневой директории — файл terminate.php. Удаляет созданные ранее папки с сервера, когда сообщения уже разосланы. Подведение итогов.Прошу меня простить, если мой рассказ получился излишне сумбурным. Я правда старался максимально последовательно изложить тут свои мысли :) Удачной вам настройки, с радостью отвечу на вопросы в комментариях.