PDA

Просмотр полной версии : [Include] smsru_api.inc - отправка SMS с помощью sms.ru API



Bib
18.01.2018, 00:20
Сервис SMS.ru позволяет производить рассылку смс и авторизацию по вызову с помощью API. Для того чтобы всем этим пользоваться был написан инклуд.

Авторизация по вызову:

Суть авторизации по вызову в том, что вы передаете в функцию RequestCall номер телефона игрока, и вам возвращается через колбек OnGetTelephone другой номер, на который игрок должен будет позвонить, чтобы подтвердить что это его номер(для него это будет бесплатно, т.к. трубка сбросится). Результат будет возвращен через колбек OnAnserCall.


Функция RequestCall(playerid, telephone[]) добавляет игрока, которого нужно авторизовать.
Колбек OnGetTelephone(playerid, telephone[]) вызывается для возвращения номера телефона, на который должен позвонить игрок.
Колбек OnAnswerCall(playerid, status_code) вызывается когда произошла ошибка или когда игрок прошел авторизацию.




#include <a_samp>
#include <smsru_apil>

main() {}

public OnPlayerConnect(playerid)
{
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Ваш номер телефона", "Введите ваш тел. номер.\nОн будет необходим для подтверждения некоторых действий", "Ок","");
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid==1)
{
RequestCall(playerid, inputtext);
}
}

public OnGetTelephone(playerid, telephone[])
{
new text[100];
format(text, sizeof(text), "Для подтверждения позвоните на номер %s", telephone);
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_MSGBOX, "Подтверждение телефона", text, "Ок","");
}

public OnAnswerCall(playerid, status_code)
{
if(status_code==SMSRU_TELEPHONE_CONFIRMED) ShowPlayerDialog(playerid, 2, DIALOG_STYLE_MSGBOX, "Статус", "Подтвердил", "Ок","");
else if(status_code==SMSRU_TIMEOUT) ShowPlayerDialog(playerid, 2, DIALOG_STYLE_MSGBOX, "Статус", "Время вышло(5 мин)", "Ок","");
else if(status_code==SMSRU_WRONG_TELEPHONE) ShowPlayerDialog(playerid, 2, DIALOG_STYLE_MSGBOX, "Статус", "Некорректный номер", "Ок","");
else
{
new text[50];
format(text, sizeof(text), "ошибка номер %i", status_code);
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_MSGBOX, "Статус", text, "Ок","");
}
}

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

Отправка СМС:

СМС отправляется с помощью функции SendSms(playerid, telephone[], message[]).
Стоимость отправки СМС указана здесь (https://sms.ru/price). Можно бесплатно отправлять 5 сообщений в день на свой номер.


Исходный код на GitHub (https://github.com/EmanOK/SMS.RU-API-for-SAMP) | Скачать на GitHub (https://github.com/EmanOK/SMS.RU-API-for-SAMP/releases)

Разработка прекращена

Bib
18.01.2018, 21:16
Обновил.
Сделал по-человечески парсинг ответа.
Оставил на время свой api_id в инклуде, чтобы могли попробовать его не регистрируясь на сайте

pawnoholic
18.01.2018, 22:05
По-человечески залейте исходники лучше на GitHub, ну или же хотя бы на pastebin.

Константу api_id лучше макросом сделать, чтобы его можно было в самом GM или FS изменить, без внесения правок в ваш инц.

Bib
19.01.2018, 19:00
На GitHub залил. Но делать константу макросом не вижу смысла. Если ты вдруг поменяешь api id, то тебе придется менять его в моде и в фильтрскриптах. И другие проблемы, например с format из-за макроса появятся.

У меня вопрос к модераторам и администрации портала. Название темы теперь никак не поменять? Нужно как в заголовке: "SMS.RU API"

Daniel_Cortez
19.01.2018, 19:17
У меня вопрос к модераторам и администрации портала. Название темы теперь никак не поменять? Нужно как в заголовке: "SMS.RU API"
Посмотрите на названия других тем в разделе - первым везде указывается название файла *.inc, затем опционально краткое описание. Как только определитесь с подходящим под эти критерии названием, буду рад помочь с переименованием.



Но делать константу макросом не вижу смысла. Если ты вдруг поменяешь api id, то тебе придется менять его в моде и в фильтрскриптах.
Правильно, лучше же заставить пользователя лезть в инклуд и заново редактировать константы с каждым новым релизом. Инклуды созданы для авторов, которым лень что-то менять, а не для пользователей, да и вообще удобство пользователя - это вчерашний день.



И другие проблемы, например с format из-за макроса появятся.
Например?

Bib
20.01.2018, 17:42
Посмотрите на названия других тем в разделе - первым везде указывается название файла *.inc, затем опционально краткое описание. Как только определитесь с подходящим под эти критерии названием, буду рад помочь с переименованием.
Сойдет smsru_api.inc - отправка сообщений игрокам с помощью SMS.RU API?
Ну и чтобы не обманывать никого заголовком, добавлю сейчас хотя бы функцию SendSms. На остальное времени пока что нет

Например?Всё нормально с format. Это я поспешил сделать странный вывод, толком не разобравшись :pardon:. В этом коммите (https://github.com/EmanOK/SMS.RU-API-for-SAMP/commit/072c9d191ef40405b9b679e4c40499a208babad0) хорошо видно ошибку. Я при автозамене с api_id на API_ID забыл про параметры api_id, они тоже заменились. А т.к. имена параметров чувствительны к регистру, то и появлялась ошибка.

Geebrox
20.01.2018, 18:42
SendSMS отправляет сообщение на любой номер? Внезависимости от оператора пользователя и региона? Или есть ограничение? Если есть, то укажи эти ограничение в теме, пожалуйста.

Bib
20.01.2018, 20:40
SendSMS отправляет сообщение на любой номер? Внезависимости от оператора пользователя и региона? Или есть ограничение? Если есть, то укажи эти ограничение в теме, пожалуйста.

Да, на любой. Все цены для каждой страны указаны здесь (https://sms.ru/price). Дорого конечно, но такие ценники вроде везде сейчас для точно доходящих смс. Лучше использовать для редких и важных задач, что-то типа отправки смс "верхушке" сервера о том что сервер дудосят и т.п. Если денег много, можно и коды подтверждения отправлять)
Если смотреть на тот же адванс, то они отправляют смс по непрямому каналу, судя по этой теме (https://forum.advance-rp.ru/threads/advance-rp-problemy-s-dostavkoj-sms-podtverzhdenij.1257553/page-2). Раньше это тоже можно было делать на sms.ru и смс стоила всего 4 копейки, но когда операторы начали бороться со спамом - сообщения редко стали доходить и тариф этот убрали.
Вместо отправки кода подтверждения по смс, лучше слать их сообщением в соц. сеть через ботов, чтобы наверняка и бесплатно(на каком-то сервере это сделали).

Daniel_Cortez
21.01.2018, 14:02
Сойдет smsru_api.inc - отправка сообщений игрокам с помощью SMS.RU API?
Переименовал, но "sms.ru" оставил прописными буквами; не вижу смысла писать название сайта капсом.


Всё нормально с format. Это я поспешил сделать странный вывод, толком не разобравшись :pardon:. В этом коммите (https://github.com/EmanOK/SMS.RU-API-for-SAMP/commit/072c9d191ef40405b9b679e4c40499a208babad0) хорошо видно ошибку. Я при автозамене с api_id на API_ID забыл про параметры api_id, они тоже заменились. А т.к. имена параметров чувствительны к регистру, то и появлялась ошибка.
Ок, но для настройки констант всё ещё нужно редактировать инклуд, это вы так и не исправили. Загляните в тему с рекомендациями по написанию кода (http://pro-pawn.ru/showthread.php?8347), там в пункте 19 показано, как можно сделать указание констант из пользовательского кода, перед подключением инклуда.
Настоятельно рекомендую там же обратить внимание на пункт 13, это относится к функции "SendSms".

На самом деле в инклуде ещё много недочётов. Если хотите, я могу высказать их, но только когда увижу что вы исправлете те изъяны, на которые я уже указал. Не хотелось бы распинаться почём зря, если вдруг окажется, что вы решили забросить свой код.