SMS gateway

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
));