====== Услуга смс:транзит ====== ===== Общая информация ===== Услуга **смс:транзит** — это решение, которое позволяет владельцу сайта самостоятельно определить абсолютно все аспекты работы своей системы. Сама по себе услуга крайне проста, но в силу своей мощности и открытости требует от владельца самостоятельной реализации всех необходимых элементов на своей стороне. Предел возможностей услуги в данном случае ограничен только его техническими возможностями и фантазией. Используя **смс:транзит** как отправную точку, владелец получает все ресурсы для разработки своего собственного SMS-сервиса любой направленности, будь то система разграничения доступа, чат или служба распространения мобильного контента. Владелец сам решает, как обрабатывать приходящие ему сообщения и какой текст отправлять в ответ. **Услуга подключается индивидуально.** Для подачи заявки на подключение необходимо обратиться к менеджеру по ICQ 570342641 или на электронный адрес sales@smscoin.com. В письме необходимо указать следующие данные: * адрес сайта, на который планируется установить **смс:транзит**; * подробное описание прокета; * предполагаемый оборот (совокупную стоимость SMS-сообщений, которые будут отправлены на Ваш сервис его пользователями). В течение двух рабочих дней наш менеджер отправляет ответное письмо на указанный электронный адрес с разрешением на подключение данной услуги или отказом и дальнейшими указаниями для ее подключения. ===== Алгоритм работы ===== - Сетевой ресурс, использующий услугу **смс:транзит**, на этапе оплаты выводит инструкцию по отправке SMS. ((Внешний вид формы может различаться в зависимости от реализации)), которая включает в себя: * короткий номер, на который необходимо отправить SMS; * текст SMS-сообщения, состоящий из: * префикса; * идентификатора **смс:транзита** (ID смс:транзит); * дополнительных данных, определяемых владельцем сетевого ресурса. * стоимость SMS, которая в зависимости от страны может как включать, так и не включать НДС; * указание о дополнительных налогах и сборах, которые могут быть установлены в выбранной стране; * дополнительная информация: правила составления текста SMS, условия ответственности, информация о технической поддержке и пр. - Отправленное пользователем SMS через оператора (и агрегатора) поступает на наш сервер. Этому SMS-сообщению присваивается уникальный идентификатор сообщения **msgid**. - Согласно тексту SMS определяется соответствующий **смс:транзит** и проверяется: * статус оплаты принятого SMS оператором сотовой связи; * если **смс:транзит** использует **фиксированный тариф**, то проверяется соответствие стоимости принятого SMS и стоимости, установленной в настройках услуги - она не должна быть оплачена по меньшему тарифу (при этом по большему допускается). - Наш сервер с помощью HTTP-запроса вызывает обработчик по URL-адресу, указанному в настройках в поле **Result URL**, и передает ему необходимые [[#Реализация обработчика Result URL|данные]], которые владелец сервиса обрабатывает в соответствии с реализованной у него логикой. Если обработчик по URL-адресу оказывается недоступен (HTTP-статус обращения отличается от 200 OK), запрос будет повторен еще дважды. При этом, уже после первой неудачной попытки на технический электронный адрес владельца (см. настройки Профиля в Панели Управления) отправляется письмо с данными запроса, а пользователь получает заранее заготовленный для таких случаев ответ (см. параметр **Ответ** в настройках услуги). - Обработчик сообщений **Result URL** возвращает текст ответа, который через оператора сотовой связи (и через агрегатора) отправляется пользователю в виде ответного SMS-сообщения. - Для стран работающих с системой MT-биллинга наш сервер с помощью HTTP-запроса дополнительно вызывает обработчик статуса сообщения **Status URL** и передает ему [[#Реализация обработчика Status URL|данные]] о статусе сообщения. Владелец должен предоставлять услугу только если получен статус delivered. ===== Добавление услуги и настройка ===== Добавление услуги **смс:транзит** производится только по согласованию с менеджерами Финансового отдела. Настройка услуги производится в Панели Управления -> Услуги -> смс:транзит. После добавления услуги необходимо на сетевом ресурсе разместить клиентский код скрипта, взаимодействующий с нашим сервером и реализующий [[#Реализация услуги смс:транзит|соответствующую]] логику. Чтобы подключить к аккаунту новый **смс:транзит**, необходимо нажать "Добавить" и заполнить предлагаемую форму. При настройке параметров **смс:транзита** следует учитывать следующие особенности: - **Стоимость**\\ Выбирается тариф (по стране/оператору) равный или больший заданной стоимости. Если стоимость выше любого тарифа в одной или нескольких странах (операторах), то они исключаются из списка доступных (из [[#Тарифная сетка|тарифной сетки]]). Если стоимость превышает тарифы во всех странах, то выдается пустой список (пустая [[#Тарифная сетка|тарифная сетка]]). - **Result URL**\\ Адрес обработчика, начинающийся с <nowiki>http://</nowiki>, на который нашим сервером передаются [[#Данные, передаваемые на обработчик|данные]] согласно [[#Реализация услуги смс:транзит|реализации услуги **смс:транзит**]]. - **Status URL**\\ Адрес обработчика, начинающийся с <nowiki>http://</nowiki>, на который наш сервер передает статус SMS-сообщений (для стран, работающих по системе MT-биллинга). - **Секретный код**\\ Необходим для защиты данных, передаваемых на обработчики. Задается произвольным набором символов в кодировке UTF-8 длиной, не превышающей 32 символа. - **Ответ**\\ Если не задана строка в **Result URL**, здесь можно задать текст, который будет отправляться пользователю в ответном SMS-сообщении. Если не заданы оба параметра **Result URL** и **Ответ**, то пользователю будет отправлен текст по умолчанию:<code>"your sms processed/ vash sms obrabotan"</code> ==== Лимит отправленных SMS-сообщений ==== Для услуги **смс:транзит** реализована также возможность установки лимита на количество отправленных SMS-сообщений. SMS-сообщения, отправленные сверх лимита, будут рассматриваться как фродовые.\\ Существуют 2 вида лимитов: - По количеству SMS с одного и того же номера. - По сумме в USD. Можно использовать только один из них. Для каждого вида лимита имеется 2 параметра: - Ограничение в день. - Ограничение в месяц. Можно использовать оба параметра одновременно, либо только один из них. В случае превышения лимита пользователь получает SMS-сообщение <code>You exceeded limit of SMS!</code> Текст сообщения постоянный и не может быть изменен. Для включения лимита необходимо отправить запрос к Александру Бережному (alex@smscoin.com) письмо с описанием причины его включения, а также с указанием ID аккаунта клиента и ID услуги **смс:транзит**. ===== Реализация услуги смс:транзит ===== Для реализации услуги **смс:транзит** можно выделить как минимум три необходимые части: * [[#Реализация страницы, инициирующей процесс отправки SMS|Страница]] (одна или несколько, либо генерируемая динамически), предлагающая некоторую услугу и инициирующая процесс отправки SMS пользователем сайта. Например, выводящая инструкцию по отправке SMS. * [[#Реализация обработчика Result URL|Обработчик]], на который наш сервер передает данные каждого принятого нами SMS-сообщения. Адрес этого обработчика указывается в Панели Управления в настройках услуги в параметре **Result URL**. * [[#Реализация обработчика Status URL|Обработчик]], на который наш сервер передает статус принятого нами SMS-сообщения в системах MT-биллинга. Адрес этого обработчика также указывается в Панели Управления в настройках услуги в параметре **Status URL**. Далее подробно описаны детали реализации каждой из этих частей. ==== Реализация страницы, инициирующей процесс отправки SMS ==== Для того чтобы сообщение было ассоциировано с услугой, оно должно иметь вид <префикс> <идентификатор транзита> <текст сообщения> и быть отправлено на соответствующий короткий номер. Задача по предоставлению пользователю всей необходимой информации для отправки сообщения ложится на плечи владельца ресурса, т.е. аналогично реализации [[agregator:smscoin:smskey#Смс:ключ с удаленным обработчиком|**смс:ключа** с удаленным обработчиком]]. В услуге **смс:транзит** можно принимать сообщения как по всем тарифам, доступным в каждой из стран (динамическая тарификация), так и указать фиксированный тариф в настройках услуги. * **фиксированный тариф** - если в настройках услуги указана стоимость SMS-сообщения отличная от 0, услуга работает аналогично услуге [[agregator:smscoin:smskey|**смс:ключ**]]. * **динамическая тарификация** - если в настройках сервиса не указана стоимость отправляемого пользователем SMS-сообщения или указан ноль, услуга работает со всеми доступными в каждой стране тарифами. При таком использовании сервиса обработчик **Result URL** должен учитывать стоимость присланного пользователем сообщения. При этом стоит обращать внимание, что она варьируется от оператора к оператору и от страны к стране. Необходимо учесть также случай, когда пользователь физически не может отправить сообщение необходимой стоимости, поскольку в его стране подобный тариф не поддерживается. В большинстве стран для каждого тарифа существует свой номер для отправки сообщений, т.е. фактически стоимость сообщения определяется в зависимости от номера, на который оно послано. Но существуют также страны, в которых отправка происходит на один номер, а тарификация производится на основании префикса в тексте SMS-сообщения. ==== Реализация обработчика Result URL ==== Обработчик сообщений **Result URL** принимает следующие параметры: ^ Параметр ^ Тип ^ Описание ^ |country | char(2) |Двухбуквенный код страны | |shortcode | int |Номер, на который было отправлено сообщение | |provider | char(16) |Оператор сотовой связи | |prefix | char(16) |Префикс полученного сообщения | |cost_local | float |Стоимость полученного сообщения в местных денежных единицах | |cost_usd | float |Стоимость полученного сообщения в USD | |phone | char(32) |Номер, с которого было отправлено сообщение, включая код страны;\\ для некоторых стран вместо актуального номера передается некий уникальный идентификатор абонента в системе | |msgid | char(32) |Уникальный идентификатор принятого SMS-сообщения | |sid | int |Идентификатор используемого сервиса в нашей системе | |content | char(128) |Текст сообщения | |sign | char(32) |MD5-хэш строки, состоящей из соединенных через двойное двоеточие ("::") параметров\\ secret_code, country, shortcode, provider, prefix, cost_local, cost_usd, phone, msgid, sid и content (в указанном порядке),\\ где secret_code - секретный ключ Вашего смс:транзита | |billing | char(2) |Тип биллинга MO или MT | |mcc | int(3) |Мобильный код страны | |mnc | int(3) |Мобильный код оператора | |profit | float |Ваш процент от стоимости SMS в USD (параметр cost_usd) | Обработчик должен возвращать HTTP-статус 200 OK и строку ответа, которая будет отправлена пользователю. Ответы в формате текст@@@ссылка (например, example@@@http://example.com) при отправке пользователю автоматически преобразуются в WAP-ссылки (работает только в России, Украине, Казахстане, Израиле и Литве). Строка @@@ является зарезервированной, и не должна использоваться в обычных ответах. ==== Реализация обработчика **Status URL** ==== Обработчик статуса сообщения (Status URL) принимает следующие параметры: ^ Параметр ^ Тип ^ Описание ^ |msgid | char(32) |Уникальный идентификатор принятого SMS-сообщения. Совпадает с msgid в [[#Реализация обработчика Result URL|Result URL]] | |phone | char(32) |Номер, с которого было отправлено сообщение, включая код страны;\\ для некоторых стран вместо актуального номера передается некий уникальный идентификатор абонента в системе | |status | char(16) |Статус сообщения (см. ниже) | |sign | char(32) |MD5-хэш строки, состоящей из соединенных через двойное двоеточие ("::") параметров\\ secret_code, msgid, phone и status (в указанном порядке),\\ где secret_code - секретный ключ Вашего смс:транзита | === Статусы сообщений === Для стран, работающих с системой MO-биллинга (billing=MO в Result URL), сообщение считаться оплаченным, а скрипт подтверждения статуса вызывается только в случае присвоения сообщению статуса **fraud**, т. е. если оплата не была подтверждена (подробнее см. выше). Для стран, работающих с системой MT-биллинга (billing=MT в Result URL), сообщение не может считаться обработанным, пока не известен его статус. Статус сообщения может принимать следующие значения: ^ Статус ^ Описание ^ |delivered |Сообщение доставлено и оплачено | |rejected |Пользователь отказался от оплаты | |failed |Сообщение не было доставлено | |fraud |Оплата сообщения не подтверждена или была отменена.\\ Как правило, это происходит в результате попыток мошенничества со стороны абонента\\ либо в результате нарушения пользовательского соглашения владельцем сервиса. | | Дополнительно для Израиля || |unconfirmed |Пользователь не подтвердил оплату | |timeout |Ответ не был получен за отведенное сервером время | __**Замечание**__ К сожалению, даже после получения статуса delivered, он может быть изменен на другой! Это случается не часто, но иногда операторы сотовой связи преподносят нам подобного рода сюрпризы. ===== Тарифная сетка ===== Тарифную сетку для услуги **смс:транзит** можно получить по следующим адресам: Динамическая тарификация в формате XML: http://service.smscoin.com/xml2/transit/идентификатор транзита/all/ в формате JSON: http://service.smscoin.com/json/transit/идентификатор транзита/all/ Фиксированная (статическая) тарификация в формате XML: http://service.smscoin.com/xml2/transit/идентификатор транзита/ в формате JSON: http://service.smscoin.com/json/transit/идентификатор транзита/ ===== Готовые скрипты ===== ^ Ссылка ^ Описание ^ |[[http://smscoin.com/mediabank/examples/smstransit_php.zip]] |PHP-версия стандартного скрипта | |[[http://smscoin.com/mediabank/examples/smstransit_perl.zip]] |Perl версия стандартного скрипта | |[[http://smscoin.com/mediabank/examples/smstransit_aspx.zip]] |ASP.NET версия стандартного скрипта | |[[http://smscoin.com/mediabank/examples/smstransit_xml.zip]] |PHP-версия скрипта с тарифной сеткой в формате XML | |[[http://smscoin.com/mediabank/examples/smstransit_php.zip]] |PHP-версия скрипта с тарифной сеткой в формате JSON |