Skip to content

Commit

Permalink
Merge pull request #7 from asosnoviy/feature/gitter
Browse files Browse the repository at this point in the history
Отправка сообщения в gitter
  • Loading branch information
nixel2007 authored Feb 18, 2017
2 parents ae030c5 + 83fc3c1 commit 28831e5
Show file tree
Hide file tree
Showing 4 changed files with 317 additions and 16 deletions.
11 changes: 6 additions & 5 deletions packagedef
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@

Описание.Имя("messenger")
.Версия("1.0.2")
.ВключитьФайл("readme.md")
.ВключитьФайл("src")
.ВключитьФайл("lib.config")
.ИсполняемыйФайл("src/Мессенджер.os");
.Версия("1.1.0")
.ЗависитОт("json")
.ВключитьФайл("readme.md")
.ВключитьФайл("src")
.ВключитьФайл("lib.config")
.ИсполняемыйФайл("src/Мессенджер.os");

24 changes: 20 additions & 4 deletions readme.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#Отправка сообщений используя разные транспорты
# Отправка сообщений используя разные транспорты

## Введение

## Установка
Для использования необходимо выполнить инициализацию параметров транспорта.
Для использования необходимо выполнить инициализацию параметров транспорта, используя соответствующий метод класса и параметры авторизации (см. ниже).

## Использование

Expand All @@ -13,9 +13,25 @@
Перед отправкой сообщений необходимо у созданного объекта вызвать метод 'ИнициализацияSLACK' куда передать данные авторизации.

### Для SMS
На данный момент поддерживается отправка сообщений через операторов SMS-Bliss и Infobip.
На данный момент поддерживается отправка сообщений через операторов SMS-Bliss, Infobip и sms4b.
Для использования необходимо заключить договор с соответствующим оператором.
- SMS-Bliss: https://smsbliss.ru/
- Infobip: http://www.infobip.com.ru/
- sms4b: https://www.sms4b.ru/

Перед отправкой сообщений необходимо у созданного объекта вызвать метод 'ИнициализацияSMS' куда передать код оператора "SMSBliss" ,"infobip" или "sms4b" и данные авторизации.

### Для Gitter
Необходимо получить токен авторизации https://developer.gitter.im/apps
Имя комнаты указывается полностью ИмяОрганизации/ИмяРепозитория
например для `https://gitter.im/asosnoviy/Lobby` имя комнаты `asosnoviy/Lobby`
Перед отправкой сообщений необходимо у созданного объекта вызвать метод 'ИнициализацияGitter' куда передать токен.

####№ Пример:
```
ИмяКомнаты = "organization/repo";
Мессенджер = Новый Мессенджер();
Мессенджер.ИнициализацияGitter(ТокенПользователя);
Мессенджер.ОтправитьСообщение(Мессенджер.ДоступныеПротоколы().gitter, ИмяКомнаты, "Всем привет!" );
```

Перед отправкой сообщений необходимо у созданного объекта вызвать метод 'ИнициализацияSMS' куда передать код оператора "SMSBliss" или "infobip" и данные авторизации.
153 changes: 146 additions & 7 deletions src/Мессенджер.os
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@
// (с) BIA Technologies, LLC
//
///////////////////////////////////////////////////////////////////////////////////////////////
#Использовать json

Перем АвторизацияSLACK;
Перем АвторизацияSMS;
Перем АвторизацияGitter Экспорт;

Перем ПараметрыДоступныеОператорыSMS;
Перем ПараметрыДоступныеПротоколы;
Expand All @@ -30,6 +32,19 @@

КонецПроцедуры

Процедура ОтправитьСообщениеGitter(Комната, Сообщение) Экспорт

IdКомнаты = АвторизацияGitter.Комнаты[Комната];
Если IdКомнаты = Неопределено Тогда

ВызватьИсключение "Комната не найдена в списке комнат пользователя";

Иначе
ОтправитьСообщениеВКомнатуGitter(IdКомнаты, Сообщение);
КонецЕсли;

КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////

Процедура ОтправитьСообщение(Протокол, Адресат, Сообщение, ТемаСообщения = "", ТипСообщения = "") Экспорт
Expand All @@ -41,7 +56,11 @@
ИначеЕсли Протокол = ДоступныеПротоколы().sms Тогда

ОтправитьСообщениеОператоруSMS(Адресат, Сообщение);

ИначеЕсли Протокол = ДоступныеПротоколы().gitter Тогда

ОтправитьСообщениеGitter(Адресат, Сообщение);

Иначе

ВызватьИсключение "Неизвестный протокол отправки: " + Протокол;
Expand All @@ -67,10 +86,8 @@
Адресат,
Сообщение,
АвторизацияSMS.Подпись);

HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");
HTTPЗапрос.АдресРесурса = АвторизацияSMS.URL;

HTTPЗапрос = Новый HTTPЗапрос(АвторизацияSMS.URL, АвторизацияSMS.Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);

HTTP = Новый HTTPСоединение(ИмяСервера);
Expand Down Expand Up @@ -104,9 +121,48 @@

КонецПроцедуры

Процедура ОтправитьСообщениеВКомнатуGitter(IdКомнаты, ТекстСообщения) Экспорт

Если АвторизацияGitter = Неопределено Тогда

ВызватьИсключение "Необходимо выполнить инициализацию комнат Gitter";

КонецЕсли;

ИмяСервера = "https://api.gitter.im";

Прокси = Новый ИнтернетПрокси(Истина);

URL = "/v1/rooms/"
+ IdКомнаты
+ "/chatMessages";

Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Accept", "application/json");
Заголовки.Вставить("Authorization", " Bearer " + АвторизацияGitter.Токен);

HTTPЗапрос = Новый HTTPЗапрос(URL, Заголовки);

ТекстТела = "{""text"":""%1""}";
ТелоЗапроса = СтрШаблон(ТекстТела, ТекстСообщения);

HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);

HTTP = Новый HTTPСоединение(ИмяСервера);
ОтветHTTP = HTTP.ОтправитьДляОбработки(HTTPЗапрос);

КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////
// Инициализация
///////////////////////////////////////////////////////////////////////////////////////////////
Процедура ИнициализацияGitter(Токен) Экспорт

Комнаты = ПолучитьСписокКомнатGitter(Токен);
АвторизацияGitter = Новый Структура("Токен, Комнаты", Токен, Комнаты);

КонецПроцедуры

Процедура ИнициализацияSLACK(Логин, Ключ)Экспорт

Expand All @@ -118,15 +174,35 @@

Если КодОператора = ДоступныеОператорыSMS().smsbliss Тогда

Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");

АвторизацияSMS = Новый Структура("ШаблонТелаЗапроса, Логин, Пароль, Подпись", ПолучитьШаблонТелаЗапросаSMSBliss(), Логин, Пароль, Подпись);
АвторизацияSMS.Вставить("ИмяСервера", "json.gate.smsbliss.ru");
АвторизацияSMS.Вставить("URL", "send");
АвторизацияSMS.Вставить("Заголовки", Заголовки);

ИначеЕсли КодОператора = ДоступныеОператорыSMS().infobip Тогда

Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");

АвторизацияSMS = Новый Структура("ШаблонТелаЗапроса, Логин, Пароль, Подпись", ПолучитьШаблонТелаЗапросаInfobip(), Логин, Пароль, Подпись);
АвторизацияSMS.Вставить("ИмяСервера", "api.infobip.com");
АвторизацияSMS.Вставить("URL", "api/v3/sendsms/json");
АвторизацияSMS.Вставить("Заголовки", Заголовки);

ИначеЕсли КодОператора = ДоступныеОператорыSMS().sms4b Тогда

Заголовки = Новый Соответствие;
Заголовки.Вставить("Accept-Encoding", "gzip,deflate");
Заголовки.Вставить("Content-Type", "text/xml;charset=UTF-8");
Заголовки.Вставить("SOAPAction", "SMS4B/SendSMS");

АвторизацияSMS = Новый Структура("ШаблонТелаЗапроса, Логин, Пароль, Подпись", ПолучитьШаблонТелаЗапросаSms4b(), Логин, Пароль, Подпись);
АвторизацияSMS.Вставить("ИмяСервера", "https://sms4b.ru");
АвторизацияSMS.Вставить("URL", "ws/sms.asmx");
АвторизацияSMS.Вставить("Заголовки", Заголовки);

Иначе

Expand Down Expand Up @@ -208,25 +284,43 @@

КонецФункции

Функция ПолучитьШаблонТелаЗапросаSms4b()

Возврат
"<soapenv:Envelope xmlns:soapenv=" + Символ(34) + "http://schemas.xmlsoap.org/soap/envelope/" + Символ(34) + " xmlns:sms="+Символ(34)+"SMS4B"+Символ(34)+">
|<soapenv:Header/>
|<soapenv:Body>
|<sms:SendSMS>
|<sms:Login>%1</sms:Login>
|<sms:Password>%2</sms:Password>
|<sms:Source>%5</sms:Source>
|<sms:Phone>%3</sms:Phone>
|<sms:Text>%4</sms:Text>
|</sms:SendSMS>
|</soapenv:Body>
|</soapenv:Envelope>";

КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////

Функция ДоступныеОператорыSMS()Экспорт

Если ПараметрыДоступныеОператорыSMS = Неопределено Тогда

ПараметрыДоступныеОператорыSMS = Новый Структура("smsbliss, infobip", "smsbliss", "infobip");
ПараметрыДоступныеОператорыSMS = Новый Структура("smsbliss, infobip, sms4b", "smsbliss", "infobip", "sms4b");

КонецЕсли;

Возврат ПараметрыДоступныеОператорыSMS;

КонецФункции

Функция ДоступныеПротоколы()Экспорт
Функция ДоступныеПротоколы() Экспорт

Если ПараметрыДоступныеПротоколы = Неопределено Тогда

ПараметрыДоступныеПротоколы = Новый Структура("slack, sms", "slack", "sms")
ПараметрыДоступныеПротоколы = Новый Структура("slack, sms, gitter", "slack", "sms", "gitter")

КонецЕсли;

Expand All @@ -236,7 +330,52 @@

///////////////////////////////////////////////////////////////////////////////////////////////

Функция ПолучитьСписокКомнатGitter(Токен)

СписокКомнат = Новый Соответствие();

ИмяСервера = "https://api.gitter.im";

Прокси = Новый ИнтернетПрокси(ИСТИНА);

URL = "v1/rooms?access_token="
+ Токен ;

HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.АдресРесурса = URL;

HTTP = Новый HTTPСоединение(ИмяСервера);
Ответ = HTTP.Получить(HTTPЗапрос);

json = Новый ПарсерJSON();
UnJason = json.ПрочитатьJSON(Ответ.ПолучитьТелоКакСтроку());

Если Ответ.КодСостояния = 200 И ТипЗнч(UnJason) = Тип("Массив") Тогда

Для Каждого Комната Из UnJason Цикл

СписокКомнат.Вставить(Комната.Получить("name"),Комната.Получить("id"));

КонецЦикла;

ИначеЕсли ТипЗнч(UnJason) = Тип("Соответствие") И UnJason["error"] = "Unauthorized" Тогда

ВызватьИсключение "Ошибка авторизации";

Иначе

ВызватьИсключение "Ошибка получения списка комнат";

КонецЕсли;

Возврат СписокКомнат;

КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////

АвторизацияSLACK = Неопределено;
АвторизацияSMS = Неопределено;
АвторизацияGitter = Неопределено;
ПараметрыДоступныеОператорыSMS = Неопределено;
ПараметрыДоступныеПротоколы = Неопределено;
Loading

0 comments on commit 28831e5

Please sign in to comment.