SMS или short message system разрабатывалась еще в восьмидесятых, но реально пришла на смену пейджерам с появлением мобильных телефонов.
Получение
В настоящее время SMS широко используется при:
- оплате некоей услуги с таким же принципом как и платный звонок — договор создаётся между предоставляющим услугу лицом и телефонным оператором, а клиент платит обоим
- оповещении об выставленном счёте, о принятой оплате счёта или ином срочном и коротком оповещении
- общении из-за границы благодаря более дешёвому тарифу
- передаче точных данных, цифр, кодов
Я приведу пример как первые два пункта реализуются. Система состоит из трёх лиц.
Клиент, SMS-gateway, наша инфосистема. SMS-gateway — посредник между провайдером телекоммуникационных услуг и internet-систем.
В качестве реальных прибалтийских провайдеров есть — mobi и fortumo.
Стандартная операция происходит таким образом:
- Проводится кампания типа «Отправь сообщение на короткий номер 1311 со словом keyword чтобы принять участие в розыгрыше супер-приза — канцелярского карандаша с твёрдостью B!»
- Сообщение получает SMS-gateway и находит кто связан с ключевым словом keyword
- Выделенный сервер SMS-gateway вызывает по http URL нашей инфосистемы, который мы заранее договорились использовать. Кроме того в URL передаются GET параметры типа phonenumber, message.
- Наш скрипт обрабатывает эти данные и при необходимости ответа на SMS — отвечает в XML виде . Для того что-бы никто не вбил вручную данные в скрипт — ставится ограничение на IP.
Следует обратить однако внимание, что при таком Use-case речь идёт об инициативе со стороны клиента. Рассылки же со стороны нашей инфосистемы надо решать с немного иными подходами.
Отправка
Cardboardfish — очень простой сервис. Достаточно такого кода
$client = new Zend_Http_Client();
$client->setUri('http://sms1.cardboardfish.com:9001/HTTPSMS?');
$client->setParameterGet(array(
'S' => 'H',
'SA' => 'myservicename',
'UN' => 'mylogin',
'P' => 'mypassword',
'DA' => $mobile,
'M' => $txt
));
Clickatell чуть похуже
$client = new Zend_Http_Client();
$client->setUri('http://api.clickatell.com/http/sendmsg?');
$client->setParameterGet(array(
'user' => 'mylogin',
'password' => 'mypassword',
'api_id' => 'myapiid',
'to' => $mobile,
'text' => $txt
));