Сегодня, проанализировав статистику скачиваний SMS-модуля, были приятно удивлены. Постараемся тоже кое-чем вас порадовать.
Нередко новые технологии вызывают у разработчиков (а особенно их руководства) ощущение, что на их освоение уйдёт немало времени, а эффект от их применения проявится очень нескоро. В этой статье я постараюсь продемонстрировать простоту внедрения возможностей SMS-модуля в код web-приложения. На ПРИМЕРЕ. Почему же у меня заела кнопка shift на слове ПРИМЕРЫ? Да потому что в базовую поставку модуля входит лишь то, что придумали сами разработчики (причём за малый промежуток времени, который дали им менеджеры).
Кстати, я даже сам не подозревал, насколько SMS-ки могут облегчать жизнь в некоторых ситуациях. Не буду рассказывать о каких-нибудь уведомлениях о новых заказах в магазине: это не так интересно – и уже реализовано в модуле.
Давайте разберем такую ситуацию. Вы программист, работаете в небольшом web-отделе, состоящем из 30 человек. У вас есть злобный начальник отдела, но, тем не менее, уважающий всякую оптимизацию. И тут вы вспоминаете, что в пятницу, задержавшись на работе и отвечая на последнее письмо, допивая при этом третью бутылочку пива, скачали SMS-модуль с сайта www.sms4b.ru. И как же, думаете Вы, угодить начальнику в период кризиса-то. И думаете, что а вот замечательно было бы создать простую систему SMS-оповещения (как в докторе Хаусе, только там были пейджеры) сотрудников отдела, всего лишь одним движением руки.
Ну что ж, цель мы себе поставили, а в реализации я вам помогу =).
Итак, создаем новую страничку, и подключаем header нашего сайта.
Далее нам нужно подключить SMS-модуль для того, чтобы мы могли пользоваться его функционалом. Делается это так.
if (!CModule::IncludeModule("sms4b"))
{
ShowError("Неустановлен модуль SMS4B");
return;
}
Все, теперь у нас в системе есть объект под названием $SMS4B. Ну, при желании, конечно, можно создать и свой – с отдельным именем. Через этот объект Вам будут доступны все методы классов модуля. Их описание можно найти в документации для разработчиков.
Теперь нам понадобится что-то наподобие такой формочки
<form action="#" method="post">
Сотрудники отдела
<select name="webDepartmentNumbers[]" multiple>
<option value="79037976101">Кирюхова Татьяна Николаевна (79037976101)</option>
<option value="79037335489">Иванов Николай Иванович (79037335489)</option>
<option value="79037465489">Петров Александр Константинович (79037465489)</option>
<option value="79044568955">Сидоров Виталий Александрович (79037575489)</option>
<option value="79037115489">Плющенко Клим Андреевич (79037115489)</option>
</select>
Текст сообщения
<textarea name = "messageText"></textarea>
Транслитерировать сообщение
<input type="checkbox" name="translitMess" value="Y" checked />
<input type="submit" name = "formSend" value="Отослать" />
</form>
Выглядеть будет примерно так
Как мы видим здесь у нас есть список номеров, поле для ввода текста сообщения и галочка автоматической транслитерации текста сообщения. Список номеров я сформировал вручную, но Вы можете сделать формирование списка из инфоблока или еще как-нибудь. Для обработки номеров для отправки также будет полезно посмотреть функцию parse_numbers(). Текст сообщения будет автоматически кодироваться в нужную кодировку для SMS-сервера. И еще одна функция будет для транслитерации сообщения. Весь обработчик формы будет на несколько строчек...
if (isset($_REQUEST["formSend"]))
{
$messageText = htmlspecialchars($_REQUEST["messageText"]);
#транслитерируем текст сообщения
if ($_REQUEST["translitMess"] == "Y")
{
$messageText = $SMS4B->Translit(htmlspecialchars($_REQUEST["messageText"]));
}
$errorNumbers = array();
#рассылаем по всем выбраным номерам
foreach($_REQUEST["webDepartmentNumbers"] as $arIndex)
{
if (!$SMS4B->SendSMS($messageText, $arIndex))
{
$errorNumbers[] = $arIndex;
}
}
}
Итак, здесь все должно быть понятно. Вызов $messageText = $SMS4B->Translit($_REQUEST["messageText"]); транслитерирует сообщение, которое мы отсылаем через форму. Вызов $SMS4B->SendSMS($messageText, $arIndex) отсылает SMS с текстом $messageText на номер $arIndex. Все! Можно еще написать обработчик ошибок, т.е. все вместе будет выглядеть вот так вот.
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("SMS-модуль и его возможности");
if (!CModule::IncludeModule("sms4b"))
{
ShowError("Неустановлен модуль SMS4B");
return;
}
?>
<form action="#" method="post">
<b>Сотрудники отдела</b>
<p>
<select name="webDepartmentNumbers[]" multiple>
<option value="79037976101">Кирюхова Татьяна Николаевна (79037976101)</option>
<option value="79037335489">Иванов Николай Иванович (79037335489)</option>
<option value="79037465489">Петров Александр Константинович (79037465489)</option>
<option value="79044568955">Сидоров Виталий Александрович (79037575489)</option>
<option value="79037115489">Плющенко Клим Андреевич (79037115489)</option>
</select>
</p>
<b>Текст сообщения</b>
<p>
<textarea name = "messageText"></textarea>
</p>
<b>Транслитерировать сообщение</b> <input type="checkbox" name="translitMess" value="Y" checked />
<p>
<input type="submit" name = "formSend" value="Отослать" />
</p>
</form>
<?
if (isset($_REQUEST["formSend"]))
{
$messageText = htmlspecialchars($_REQUEST["messageText"]);
#транслитерируем текст сообщения
if ($_REQUEST["translitMess"] == "Y")
{
$messageText = $SMS4B->Translit(htmlspecialchars($_REQUEST["messageText"]));
}
$errorNumbers = array();
#рассылаем по всем выбраным номерам
foreach($_REQUEST["webDepartmentNumbers"] as $arIndex)
{
if (!$SMS4B->SendSMS($messageText, $arIndex))
{
$errorNumbers[] = $arIndex;
}
}
}
if (count($errorNumbers) > 0 )
{
ShowError("Не отправлено на номера:");
foreach($errorNumbers as $arIndex)
{
ShowError($arIndex);
}
}
?>
Чувствую, если Ваш начальник прочтет эту статью, вы уже не отделаетесь от реализации чего-то подобного =).
Вы скажете что слишком дорого рассылать SMS-ки. А теперь давайте посчитаем. Пусть ЗП среднего начальника отдела 2000$. Т.е. в день зарабатывает около 90$, в час, соответственно, 11$. Сколько нужно времени чтобы обзвонить 30 человек? Ммм, да не меньше часа. Т.е. это 11$! А 30 SMS будет стоить Вам в самом худшем случае 42 рубля и 30 секунд для отправки. По-моему, совсем неплохо.
Итак, это был первый пример (how-to) по применению SMS-модуля. Думаю, в дальнейшем мы обсудим многие другие применения.
P.S. Данная статья подразумевает, что модуль на вашем сайте уже настроен в соответствии с описанием в документации. Дополнительно планируем провести небольшой вебинар по установке и настройке модуля.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».