
API разработка своего sms-сервер, использование GoIP для вашего проекта.
1. Установка (Initialization)
Связь этой системы использует чистый текст для передачи через транспортный уровень UDP. Пожалуйста, настройте механизм ретрансляции для уменьшения потерь пакетов между SMS-server и шлюзами GoIP.
Инициализация сервера SMS: установите идентификатор ID аутентификации и пароль для GOIP и сохраните список идентификаторов и паролей. Откройте UDP-порт и начните чтение.
Параметры GOIP: Включите "SMS Sender" на странице конфигурации, заполните адрес вашего SMS-сервера и port, идентификатор аутентификации и пароль (см. выше "Инициализация сервера SMS") для настройки).
2. Регистрация и Keepalive
Шаг |
Описание |
1.Register and |
GOIP будет отправлять пакет keepalive на сервер каждые 30 с. |
alive |
msi;iccid:$iccid; Variable: |
2.keep alive ack |
SMS server will verify the authentication id and password of the keepalive packet received. And send keepalive ack if the id and password are matched with the authentication list. Format: |
Пример:
GOIP отправляет keepalive с “req:10;id:goipid1;pass:password1; num:12345;signal:23;gsm_status:LOGIN;voip_status:LOGIN;” to SMS server. SMS server send the keepalive ack with “reg:10;status:0;” (if goipid1 and password1 is valid.)
3. Отправить SMS
Шаг |
Описание |
1. Запрос (BulkSMSRequest)
|
В начале SMS-сервер отправит массовый SMS-запрос в GOIP, включит в себя содержание и длину SMS в формате utf8. Содержание SMS должно быть ограничено 3000 байтами или менее. Формат: MSG $sendid $length $msg\n Переменная: $sendid: Integer, как идентификатор пакета сервера. Обратите внимание, что все сообщения, описанные ниже, должны использовать один и тот же "sendid", определенный здесь, если они принадлежат к одному и тому же массовому сеансу SMS. $length: целое число в формате utf8, как длина содержимого SMS $msg: SMS-контент в формате utf8 |
2. Подтверждение (BulkSMSConfirm BulkSMSReject) |
GOIP выполнит инициализацию для массового SMS при получении массового SMS-запроса. Обратите внимание, что другие сообщения этого массового SMS должны быть получены в 90-х годах после получения массового SMS-запроса. Или GOIP остановит сеанс и выпустит. |
|
(1) При успешной инициализации GOIP отправит на сервер подтверждение BulkRequest и запрос на аутентификацию Формат: PASSWORD $sendid\n Переменная: $sendid: Целое число, идентификатор сеанса массового SMS в BulkSMSRequest. |
|
(2) Если инициализация не удалась, GOIP отправит на сервер BulkSMSReject, включив сообщение об ошибке. Формат: ERROR $sendid $errormsg\n Переменная: $sendid: Целое число, идентификатор сеанса массового SMS в BulkSMSRequest. $errormsg: Строка, Сообщение об ошибке. Сейчас слишком много запросов на массовые SMS, полученные одновременно, является основной причиной сбоя. Обратите внимание, что GOIP поддерживает только 5 массовых SMS-сессий одновременно. Сервер должен остановить сеанс при получении bulkSMSЗапрос Отклонить. Затем повторите попытку позже. |
3.Проверка подлинности Запрос (AuthenticationRequest) |
SMS-сервер должен отправить Запрос аутентификации с паролем в GOIP. Формат: PASSWORD $sendid $password\n |
|
Переменная: $sendid: Целое число, идентификатор сеанса массового SMS в BulkSMSRequest. $password: Регистрационный пароль GOIP |
4.Аутентификация Подтверждение аутентификации. Выгрузка. (AuthenticationConfirm AuthenticationReject) |
GOIP проверит пароль в AuthenticationRequest и вернет результат на сервер. (1) При успешной аутентификации GOIP отправит на сервер подтверждение аутентификации. Формат: SEND $sendid\n Переменная: $sendid: Целое число, идентификатор сеанса массового SMS в BulkSMSRequest. (2) Если аутентификация не удалась, GOIP отправит AuthenticationReject на сервер и дождается следующего запроса AuthenticationRequest или endRequest Format: ERROR $sendid PASSWORD\n Переменная: $sendid: Целое число, идентификатор сеанса массового SMS в BulkSMSRequest. |
5.SubmitNumber Запрос (SubmitNumberRequest) |
GOIP нужно около 2-5 секунд, чтобы отправить SMS. Таким образом, чтобы избежать потери пакетов, СЕРВЕР SMS может отправлять SubmitNumberRequest в GOIP, чтобы получить статус отправки назначенного номера каждые последовательные секунды до успешной отправки SMS. И, GOIP сохраняет только статус отправки последних 10 номеров в этой группе Формат: SEND $sendid $telid $telnum\n Переменная: $sendid: Целое число, идентификатор сеанса массового SMS в BulkSMSRequest. $telid: Integer, уникальный порядковый номер SubmitNumberRequest, определенный сервером. $teinum: Строка, номер телефона |
6. Отправить Нумер Статус (SubmitNumberStatus) |
GOIP отправит SubmitNumberStatus на сервер при получении SubmitNumberRequest. (1) При успешной отправке SMS на назначенный номер GOIP отправит на сервер SubmitNumberStatus с OK. Формат: OK $sendid $telid\n Переменная: $sendid: Целое число, идентификатор сеанса массового SMS в BulkSMSЗапрос. |
|
$telid: Целое число, уникальный порядковый номер в SubmitNumberRequest.
(2) Если отправка не удалась, GOIP отправит submitNumberStatus с ошибкой на сервер. Формат: ERROR $sendid $telid errorstatus:$errorid\n Переменная: $sendid: Целое число, идентификатор сеанса массового SMS в BulkSMSRequest. $telid: Целое число, уникальный порядковый номер в SubmitNumberRequest. $errorid: Целое число, код ошибки. Обычно он равен 1.
(3) Если telid в SubmitNumberRequest отсутствует в списке, в котором сохранен последний номер отправки 10, GOIP сохранит telid в списке ожидания и отправит SubmitNumberStatus с WAIT. Формат: WAIT $sendid $telid\n Переменная: $sendid: Целое число, идентификатор сеанса массового SMS в BulkSMSRequest. $telid: Целое число, уникальный порядковый номер в SubmitNumberRequest. |
7.Отправить Нумер Запрос (SubmitNumberRequest) |
Обратите внимание, что SMS-сервер должен отправить следующий SubmitNumberRequest в GOIP после получения SubmitNumberStatus с OK или ERROR То же, что и 5 |
8. Отправить Номер Статус (SubmitNumberStatus) |
То же, что и 6 |
9. End Reqeust |
SMS-сервер может отправить EndRequest в GOIP, чтобы завершить массовый SMS-сеанс. Формат: DONE $sendid\n Переменная: $sendid: Целое число, идентификатор сеанса массового SMS в BulkSMSЗапрос. |
10.Конец (End) |
GOIP выпустит ресурс массового СЕАНСА SMS при получении EndRequest. И возврат EndConfirm на сервер Формат: DONE $sendid\n Переменная: $sendid: Целое число, идентификатор сеанса массового SMS в BulkSMSЗапрос. |
|
|
Пример:
Предположим: sendid: 11, СОДЕРЖАНИЕ SMS: hello, Goip password:password1, отправьте SMS на +8613800138000 и +8613800138001.
4. ПОЛУЧЕНИЕ SMS
Шаг |
Описание |
1.Отправка данных |
При получении SMS Goip будет ретранслировать SMS на Сервер. Гопивы |
из receiver SMS to Server |
Повторно отсыпь данных, если сервер не ответит в течение 3 секунд, большинство повторно отсылют 3 |
|
раз. Формат: |
|
RECEIVE:$recvid;id:$id;пароль:$пароль;srcnum:$srcnum;msg:$ |
|
msg |
|
Переменная: |
|
$recvid:int, считайте с уменьшением текущей отметки времени; |
|
$srcnum: Исходный номер мобильного телефона |
|
$msg: Содержание SMS, формат utf8 |
2. Server ACK |
Сервер SMS получит SMS и проверит идентификатор и пароль goip, а затем отправит ACK. |
Пример:
Assume: A Goip (id:goipid1, password:password1 ) received a SMS “just a test” from mobile “+8613513415667”. And it got a count 1270197307, then will send to SMS Server like this:
”RECEIVE:1270197307;id:goipid1;pass:password1;srcnum:+8613513415 667;msg:just a test”
Sms server check goip id and password, Saved the SMS data, and reply: ”RECEIVE 1270197307 OK”
5. Получение статуса GoIP и управление GSM-шлюзом.
5.1 Сервер отправляет команду to Get status of GoIP or control Goip
Сервер должен повторно отправить пакет несколько раз, когда не может получить ответ от goip.
5.1.1 Получение GSM номера.
Шаг |
Описание |
1.сервер отправляет команду для получения GSM номера |
Format: |
2. Goip ответ |
Goip return |
|
OK Format: get_gsm_num $sendid $gsmnum Error Format: ERROR $sendid $errmsg Variable: |
Пример:
server send
“get_gsm_num 879901 password1”
Goip send
“get_gsm_num 879901 13800138000”
5.1.2 Установить gsm номер
Шаг |
Описание |
1.сервер отправить |
Format: |
2.Возврат |
OK Format: set_gsm_num $sendid $gsmnum ok Error Format: ERROR $sendid $gsmnum $errmsg Variable: |
Пример:
server send
“set_gsm_num 879902 13800138001 password1”
Goip return
“set_gsm_num 879902 13800138001 ok”
5.1.3 Получить время истечения срока действия выходного канала
Шаг |
Описание |
1.сервер отправить |
Format: |
|
$sendid: integer, the id of server packet increase by 1; |
2.Возврат |
OK Format: get_exp_time $sendid $exptime Error Format: ERROR $sendid $errmsg Variable: |
5.1.4 Установка времени истечения срока действия выходного вызова канала Gsm-шлюза
Шаг |
Описание |
1.сервер отправить |
Format: |
2.Возврат |
OK Format: set_exp_time $sendid $exptime ok Error Format: ERROR $sendid $exptime $errmsg Variable: |
5.1.5 Получить времяотсутствия
Шаг |
Описание |
1.сервер отправить |
Format: |
2.Возврат |
OK Format: get_remain_time $sendid $remaintime Error Format: ERROR $sendid $errmsg Variable: |
5.1.6 Сброс времениоставшегосяотсутствиявызованавремяистечения срока действия
Шаг |
Описание |
1.сервер отправить |
Формат: |
2.Возврат |
OK Формат: reset_remain_time $sendid ok Формат ошибки: ERROR $sendid $errmsg Переменная: |
5.1.7 Получить статусканала
Шаг |
Описание |
1.сервер отправить |
Формат: Переменная: |
2.Возврат |
OK Формат: get_gsm_state $sendid $state Формат ошибки: ERROR $sendid $errmsg Переменная: |
5.1.8 Перезвонить
Шаг |
Описание |
1.сервер отправить |
Формат: Переменная: |
2.Возврат |
GoIP попытается отбросить текущий вызов. ФОРМАТ OK: svr_drop_call $sendid $ok Формат ошибки: ERROR $sendid $errmsg Переменная: |
5.1.9 Канал перезагрузки
Шаг |
Описание |
1.сервер отправить |
Формат: |
2.Возврат |
Goip попытается перезагрузить канал |
5.1.10 Перезагрузка GSM-VOIP шлюза GoIP
Шаг |
Описание |
1.сервер отправить |
Формат: Переменная: |
2.Возврат |
Goip попытается перезагрузиться |
5.1.11 Настройка переадресации звонков GSM шлюза
Шаг |
Описание |
1.сервер отправить |
Format: |
2.Возврат |
Goip will try to set call forward. OK Format: CFOK $sendid |
3. Возврат сервера |
Format: |
5.2 GoIP состояние отправки на сервер
When status of Goip changed or goip in a call, Goip sends state to server.
GoIP Server
5.2.1 Когда статус канала goip изменился, goip отправит статус на сервер.
|
Пример:
goip отправить на сервер:
STATE:7568;id:goip1;password:password1;gsm_remain_state:IDLE Server return:
STATE 7568 OK
5.2.2 Когда Goip в звонке, goip отправляет статус вызова на сервер。
Шаг |
Описание |
1.GoIP Отправить |
Format: |
на сервер |
Переменная: |
2.Возврат сервера |
ФОРМАТ OK: RECORD $recvid OK Формат ошибки: RECORD $recvid $errmsg Переменная: |
Пример:
goip отправить на сервер:
ЗАПИСЬ: RECORD:7565;id:goip2;password:password2;dir:2;num:10086 Server return:
RECORD 7565 OK
5.2.3 после каждого звонка, goip отправляет время остаться на сервер.
Шаг |
Описание |
1.Goip send remain tiem |
Формат: REMAIN:$recvid;id:$goipid;password:$password;gsm_remain_time:$time Переменная: |
2.Сервер Ответ |
ФорматOK: REMAIN $recvid OK Формат ошибки: REMAIN $recvid $errmsg Переменная:$recvid: то же самое, что и goip send. |
6. Отправить USSD
Его можно использовать для пополнения SIMS (Нам нужно пополнить SIM-карты, отправив EX: (*150*543164649761# Звонок. Для api просто отправьте USSD-команду "*150*543164649761#").
Шаг |
Описание |
1.сервер отправить |
Если сервер не может получить ответ клиента в течение 10 секунд, повторно отсыпьте |
ussd команда |
однократной команды. |
|
Общая USSD-команда: |
|
USSD $отправить $password $ussdcmd |
|
Команда «Выйти из USSD»: |
|
USSDEXIT $отправить $password |
|
Переменная: |
|
$ussdcmd: USSD команда |
2.Возврат |
Goip получил команду, отправить команду провайдеру, затем арендовать ответ на сервер. |
Пример:
Сервер отправляет в goip "USSD 111 пароль1 557*0112220248*10#"
Тогда goip renturn на сервер "USSD 111 Вы собираетесь перевести 10.00
EGP в 20112220248. Плата за услугу составляет 2% при минимальном размере 0,20 египетских фунтов.
Нажмите 1 для подтверждения или любую клавишу для отмены"
7. Работа с IMEI
7.1 Получить IMEI
Шаг |
Описание |
1.сервер отправить |
Формат: |
2.Возврат |
OK Формат: get_imei $sendid $imei Форматошибки: ERROR $sendid $errmsg Переменная: |
7.2 Установить IMEI
Шаг |
Описание |
1.сервер отправить |
Формат: |
2.Возврат |
OK Формат: set_imei $sendid $imei ok Формат ошибки: ERROR $sendid $errmsg Переменная: |
8. Интервал исходящего вызова
8.1 Получение исходящего интервала вызова
Шаг |
Описание |
1.сервер отправить |
Формат: |
|
Переменная: |
2.Возврат |
OK Формат: get_out_call_interval $sendid $interval Формат ошибки: ERROR $sendid $errmsg |
8.2 Установка исходящего интервала вызова
Шаг |
Описание |
1.сервер отправить |
Формат: |
2.Возврат |
Формат OK: set_out_call_interval $sendid $interval OK Формат ошибки: ERROR $sendid $errmsg |
9 включить/выключить модуль шлюза GoIP
9.1 включить/выключить определенный модуль
Шаг |
Описание |
1.сервер отправить |
Формат: |
2.Возврат |
Формат OK: module_ctl_i $sendid $ok Формат ошибки: ERROR $sendid $errmsg Переменная: |
9.2 включить/выключить все модули GSM-шлюза
Шаг |
Описание |
1.сервер отправить |
Format: |
2.Возврат |
Формат OK: module_ctl $sendid $ok Формат ошибки: ERROR $sendid $errmsg Переменная: |
10. Ячейки слотов
10.1 GoIP отправляет список ячеек на сервер
Шаг |
Описание |
1.goip отправляет список ячеек на сервер, когда goip читает ячейки. |
Формат: CELLS:$recvid;id:$id;пароль:$пароль;списки:$cell_list Переменная: |
2.Возврат сервера |
Формат OK: ЯЧЕЙКИ $recvid OK\n |
10.2 Задать ячейку
Шаг |
Описание |
1.сервер отправить |
Формат: |
команда на goip to set cell |
set_base_cell $Sendid $cell_id $password |
|
$cell_id: идентификатор ячейки |
|
$password: Регистрационный пароль GOIP; |
2.Возврат |
Формат OK: set_base_cell $sendid $cell_id ok Формат ошибки: ERROR $sendid $errmsg Переменная: |
10.3 Получить список ячеек
Шаг |
Описание |
1.команда отправки сервера |
Формат: |
2.Возврат |
GoIP получает команду,затем rtuen OK сообщение. GoIP получит список ячеек от оператора, затем goip отправит команду с информацией о списке ячеек на сервер.( команда в 10.1) |
10.4 Получить текущую ячейку
Шаг |
Описание |
1.сервер отправить |
Формат: |
2.Возврат |
Формат OK: CURCELL $sendid $curcellid Формат ошибки: ERROR $sendid $errmsg Переменная: |