Как стать автором
Обновить

Работа с смс агрегаторами – борьба со спамом и укорачивание текстов смс

Предисловие.
Возможно я решил написать об очевидном, но когда сам столкнулся с проблемой, то пришлось потратить некоторое количество мозгочасов на придумывание решения.
Итак, к делу.
Ранее мы работали по следующей схеме: обработчик смс (скрипт, вызываемый по http платформой смс агрегатора, информирующий о входящем смс) получал некий текст смс, состоящей из нашего префикса, выданного агрегатором+идентификатора пользователя (либо партнера в партнерской программе)+опциональные данные. Этот способ предельно прост в реализации. Получив текст смс, проверяем префикс (если не наш, то шлем ответное сообщение о соответствующей ошибке), затем разбираем текст сообщения в соответствии с нашим шаблоном (например + в качестве разделителя). Получив ID пользователя, мы уже можем зачислить деньги на его счет, посмотреть ID партнера, на которого он записан и т.д.

Проблема.
Все бы не плохо, пока не проявились два больших недостатка:
1. Автоинкремент неумолимо растет, и ID пользователей уже доросли до 6-7 цифр. А ведь еще иногда приходится добавлять дополнительные параметры, и в итоге получаем текст смс в 15-20 символов. И это еще при том, что вам повезло получить «красивый» префикс у вашего агрегатора. Многих пользователей могут отпугнуть такие длинные и сложные тексты смс.
2. Спам префиксов. Спам во всех своих проявлениях является болезнью и одной из главных проблем интернет. А спам префиксов чреват серьезными штрафными санкциями со стороны вашего агрегатора.
Решение.
В результате было выработано решение, которое устраняло обе проблемы разом. Создавая, впрочем, ряд мелких проблем :-)

Итак, новая схема.
Обработчик смс более не зачисляет денег на счет пользователя, партнера и т.д. Теперь он выполняет всего две фунции:
1. Записывает данные о пришедшей смс во временную таблицу. Туда пишем все данные: уникальный SMS_ID, оператор, стоимость, текст, дату, страну и т.д., плюс добавляем сгенерированный на эту смс уникальный код.
2. Выдаем этот самый сгенерированный код ответной смской пользователю.

Далее — пользователь вводит код в формочку на сайте. Формочка вызывает скрипт, который собирает всю нужную информацию (ID пользователя, партнерский ID, например из куки или из базы, если сайт подразумевает регистрацию пользователя) и ищет в таблице временных смс запись с указанным кодом. Если нашел — вызываем метод, зачисляющий смс на счет пользователю средства (или производящий какие либо другие действия, например дает доступ к закрытому разделу сайта и т.д.). Все нужные данные у нас уже есть, и кроме нашего префикса в тексте смс пользователю больше ничего не надо писать. Ну и далее удаляем запись об этой смске из таблицы временных смс. Удаление смс из временной таблицы и запись в зачисленные желательно объединить в транзакцию, во избежание лишних проблем.

Таким образом мы достигаем двух целей: максимально короткие тексты смс и полностью лишения возможности спамеров получить их нечестно заработанных денежки.
Спамить префикс более просто не будет иметь смысла, так как смс будет засчитываться на счет партнеру-спамеру только после ввода кода пользователем на сайте, чего впринципе произойти не может :-)

Недостатки.
Теперь о недостатках. Первый из них вылез буквально через несколько часов теста, но был признан незначительным, и мы не стали тратить время на поиск решения. А дело вот в чем — среднестатистическое время, проходящее с момента регистрации смс в статистике агрегатора до ввода пользователем кода на сайте — от 3 до 5 минут. Т.е. смска, отправленная в 23:59 будет зарегистрирована в статистике агрегатора текущим днем, а в нашей статистике — уже следующим, т.к. пользователь может ввести код уже допустим в 00:01. Отсюда появляются некоторые незначительные расхождение в статистики агрегатора и нашей.

Вторая, такая же незначительная проблема — «повисшие» смс. По какой-то причине пользователь не ввел код смс в форму на сайте. Смс осталась «висеть» во временной таблице, так никому и не зачислившись. Решить проблему можно очень просто, достаточно всего лишь ввести понятие «срок действия кода», и по истечению этого срока зачислять смски, допустим нулевому пользователю.

Проблема третья. Более важная, но увы, в рамках данных условий, не решаемая. «Повисшие» смс невозможно идентифицировать, в том плане, на какой сервис или от какого пользователя или партнера они были отправлены. А эта информация иногда крайне важна при решении каких либо конфликтных ситуаций.

На этом все. Надеюсь, что я не зря потратил время на написание статьи, и кто то благодаря ей сэкономит пару часиков своего драгоценного времени.

P.S. Ввиду того, что большинство участников смс бизнеса прибегают к не очень красивым способам получения смс от пользователей, сразу скажу, что мы занимаемся только совершенно легальным бизнесом в этом сфере. Во избежание, так сказать, предвзятого отношения к автору статьи :-)
P.P.S. Назвать организацию, в которой работаю, как вы понимаете, не могу по причине информационной безопасности и коммерческой тайны :-)
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.