Онлайн сервис заказа такси. Часть 45. Внедрение GSM шлюза для СМС. Часть III
Заказанный мной GSM шлюз приехал спустя 2 недели, 15 Ноября. Еще до того, как я получил его, нашел на Авито объявление, где человек предлагал воспользоваться арендой шлюза. Попросил программиста установить SMS Server (родное ПО для работы с СМС), оплатил человеку аренду на неделю (если мне не изменяет память, 400 ₽) и начал тестировать.
Пока почитал документацию, разобрался что к чему, в общем, ушло около 4 часов, после чего коннект был получен. Дальше, был занят другими делами и было немного не до этого. 15 Ноября заказ приехал:
Дальше была уже довольно специфичная задача — подружить его вместе с моей инфраструктурой. Но была проблема еще в том, что родной софт немного не подходил нам и пришлось его переписать. Данную задачу выполнил Роман (основной разработчик всей моей инфраструктуры). Ниже цитирую его сообщение о том, что было переделано.
За отправку отвечал файл dosend.php. Исходя из описания «заводского» метода отправки смс через goip
Отправка мне «Privet»
https://000.00.000.000/goip/en/dosend.php?USERNAME=______&PASSWORD=__________&smsprovider=1&smsnum=79061234567&method=2&Memo=Privet
.. было решено изучить, что происходит в файле dosend.php. В нем оказалось много сложно-понимаемого кода, но изучить принцип отправки смс удалось (+ помогло описание взаимодействия API самого оборудования через сокет — http://www.dbltek.com/pdf/goip_sms_Interface_en.pdf)
Сам файл очень сильно заточен под отправку СМС через браузер и отправку сообщения сразу на несколько номеров. В качестве вывода информации он использует обычный вывод в браузер логов, что нам не подходит, т. к. необходимо выводить результат в формате JSON.
Было понятно, что такая отправка СМС через этот API не подходит под наши требования и было решено разработать свой скрипт отправки, после детального изучение протокола, по-которому работает устройство.
(Если сильно необходимо – можем описать протокол API, то бишь что и как отправлять на шлюз через сокеты.
Алгоритм отправки смс-сообщения
1. Авторизация пользователя от имени которого будет отправляться СМС сообщение (User & password параметры запроса). Если пары логин/пароль не найдены, то ошибка.
2. Проверка входных параметров (номер телефона и сообщение). Фильтрация номера от символов и пробелов.
3. Формирование стека провайдеров (сим-карт) с которых могут отправляться СМС сообщения. Условие поиска: alive = 1, gcm_Status != ‘LOGOUT’. В схему базы данных goip в таблицу goip добавлены столбцы last_error_message, last_error_repeat_count. К условию получения провайдеров добавлен дополнительное условие поиска — last_error_message IS NULL or last_error_repeat_count < 3. Это значит, что если с верхней сим-карты было получено три раза подряд одна и таже ошибка (например errorstatus:50), тогда при следующем формировании стека, такая сим-ка не будет добавлена.
4. отправка СМС сообщение по протоколу через сокет. Ожидание статуса DONE у отправленного сообщения или ошибка.
5. если ошибка, то мы сохраняем ошибку для текущего провайдера из стека в бд (в поле last_error_message и увеличение last_error_repeat_count на 1, если предыдущая ошибка в last_error_message такая же как и текущая ошибка )
5a. попытка отправить сообщение со следующего провайдера из стека, если возникла ошибка. Максимальное число попыток смены сим-карты — 3. далее через SMSC
Собственно использование нового dosend_new.php
https://000.00.000.000/goip/en/dosend_new3.php?user=root&password=J1MGiSMK2EFQ0k&phone=[номер_телефона]&message=[сообщение]
.
Поскольку было много других задач, то настройка GSM шлюза к общей инфраструктуре затянулась и все было реализовано лишь к середине декабря, то есть через месяц после того, как приехала посылка. И казалось бы, вот она победа! Но радоваться было рано. На деле оказалось все не так уж просто.
Безлимитная Yota.
Естественно, сразу было куплено 8 сим-карт Yota и подключена опция «Безлимитные СМС»
Оказалось, что СМС не такие уж и безлимитные. Довольно быстро ситуация дошла до такой
Это далеко не все сим-карты. Всего, в экспериментах полегло около 50 сим-карт. Приняли участие сим-карты с начальным балансом от 100 до 300 ₽, с разного объема пополнениями. Использовались разные алгоритмы, начиная от распределения отправки СМС последовательно между каналами, до отправки всех СМС через один канал до ее блокировки. В итоге, в самом лучшем случае удавалось добиться стоимости СМС в 20 коп (максимум 2500 СМС с одной сим-карты, с начальным балансом в 490 ₽), а в худшем 370 СМС при балансе в 250 ₽. Но больше всего меня бесило время отправки СМС — оно составляло в большинстве случаев около 10 секунд, а это очень много для активационных СМС!
В конце Декабря я уехал в родителям и забрал с собой GSM шлюз.
Поскольку я родителей провел 1.5 месяца, то было достаточно времени поэкспериментировать. В итоге, самые лучшие результаты показали сим-карты от Beeline. В общей сложности было куплено 300 сим-карт. Самым оптимальным оказался местный тариф «Все за 300»
— стартовый баланс 50 ₽.
— кол-во СМС по тарифу 300 шт., по всей России.
— кол-во отправляемых СМС — около 320 шт.
— стоимость сим-карты — 30 ₽.
Итого, с сим-карты стоимостью в 30 ₽, я отправлял по 320 СМС. Себестоимость 1 СМС получается 9.3 коп.
А с учетом того, что я потом эти сим-карты продавал по 10 ₽, а значит, они мне обходились по 20 ₽, имеем себестоимость 1 СМС в 6.25 коп. Фактическая стоимость была чуть выше, порядка 7 коп. за СМС (там ряд разнообразных причин).
Вернувшись в Феврале в Москву, я забрал с собой порядка 170 сим-карт. Но тут меня ждало разочарование: как всегда, на сайте Билайна все запутано и оказалось, что СМС пакет в 300 штук действует не по всей России, а только в домашнем регионе. Ну, вы понимаете, это означало, что каждая СМС платная и в итоге с каждой сим-карты могло уходит не более 30 СМС.
Изучив вновь местные тарифы, решил вновь попробовать Beeline.
Купил сперва тестовые 20 сим-карт с тарифом «Все за 500», с балансом 50 ₽ и опять что-то пошло не так … Прочитал внимательно и оказалось, что условия немного другие:
Раньше ведь СМС пакет был по всей России или я путаю? Ну да ладно, не критично, ведь у нас есть другие тарифы: «Все за 800» (500 СМС), «Все за 1200» (800 СМС), «Все за 1800» (3000 СМС). Забегая сразу скажу, что пробовал тариф «Совсем все», с абоненткой в 6.000 ₽ (правда, не Московский, а другого региона, где он стоит 2.500 ₽), отправилось в итоге около 5 тыс. СМС, после чего сим-карту заблокировали. Итого, стоимость 1 СМС 50 коп, что совершенно не интересно.
И ведь Вот оно! Счастье! Покупаем, скажем, рублей за 150 оптом симки «Все за 1800» и шлем по 3 тыс. СМС, получив стоимость в 5 коп!
Хрена с два.
Максимум что у меня получалось — порядка 450 СМС с одной сим-карты. Все. Далее она блокируется. При чем на ней положительный баланс, но отправка СМС блокируется. Прием тоже. То есть вы не можете зайти в личный кабинет на сайте Beeline, так как вам должен прийти СМС с паролем, а он не приходит!)
IMEI? Знаю. Менял. При чем даже пробовал настройку, чтобы каждый час менялся IMEI. Без толку. Единственное что я не попробовал — перекидывать симки между разными БС оператора. Обязательно попробую.
В итоге, оптимальным остается «Все за 800».
Со стартовым балансом в 50 ₽ я не нашел, только 100 ₽. Отправляется с них около 400 СМС и имеем стоимость в … 25 коп., что очень дорого. Да, можно купить их по 70 ₽, но все равно, получаем стоимость 1 СМС в 17 коп, что весьма дорого.
Почему не Tele2?
Допустим, тариф «Оранжевый» + опация «День СМС» и себестоимость 1 СМС должна получиться в 15 коп. Да все дело в том, что я не могу использовать сим-карты данного оператора. В Москве им не выделили человеческие частоты и с ними не способно работать оборудование, не поддерживающее 3G, а GSM шлюз не поддерживает 3G.
У МТС и Мегафон ничего интересного тоже не нашел.
В любом случае, эксперименты с подбором оптимального тарифа продолжаются и есть мысли по этому поводу.
Нафига вся эта возня с GSM шлюзом?
К сожалению, ни у одного СМС провайдера я не увидел адекватные условия. Прямые каналы работают отлично, но когда у вас 1.5-2 тыс. СМС в сутки — это довольно серьезные расходы. А при использовании «непрямых каналов» я сталкивался с большими задержками (активационные СМС должны доставляться в течении 5 секунд) плюс постоянные проблемы со статусами отправленных СМС (а они очень нужны, чтобы в случае чего, отправить СМС повторно.