1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-01-26 05:37:27 +02:00

YAX: тесты для Telegram API

This commit is contained in:
Anton 2024-02-07 21:40:07 +03:00
parent 9e27f8eafa
commit e5971481c7
2 changed files with 601 additions and 469 deletions

View File

@ -21,7 +21,6 @@
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
#Область ПрограммныйИнтерфейс
#Область ДанныеИНастройка
@ -35,8 +34,8 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция ПолучитьИнформациюБота(Знач Токен) Экспорт
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/getMe");
Возврат Ответ;
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/getMe");
Возврат Ответ;
КонецФункции
@ -49,8 +48,8 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция ПолучитьОбновления(Знач Токен) Экспорт
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/getUpdates");
Возврат Ответ;
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/getUpdates");
Возврат Ответ;
КонецФункции
@ -64,11 +63,11 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция УстановитьWebhook(Знач Токен, Знач URL) Экспорт
Параметры_ = Новый Структура;
Параметры_.Вставить("url", URL);
Параметры_ = Новый Структура;
Параметры_.Вставить("url", URL);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/setWebHook", Параметры_);
Возврат Ответ;
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/setWebHook", Параметры_);
Возврат Ответ;
КонецФункции
@ -104,83 +103,80 @@
Функция ОбработатьДанные(Знач Запрос) Экспорт
// BSLLS:DuplicateStringLiteral-off
Message = "message";
From = "from";
Chat = "chat";
Id_ = "id";
Username = "username";
MessageId = "message_id";
Message = "message";
From = "from";
Chat = "chat";
Id_ = "id";
Username = "username";
MessageId = "message_id";
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Запрос.ПолучитьТелоКакСтроку());
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Запрос.ПолучитьТелоКакСтроку());
СтруктураПараметровВходная = ПрочитатьJSON(ЧтениеJSON);
СтруктураПараметровВыходная = Новый Структура;
СтруктураПараметровВходная = ПрочитатьJSON(ЧтениеJSON);
СтруктураПараметровВыходная = Новый Структура;
Если СтруктураПараметровВходная.Свойство(Message) Тогда
Если СтруктураПараметровВходная.Свойство(Message) Тогда
СтруктураСообщения = СтруктураПараметровВходная[Message];
СтруктураПользователя = СтруктураСообщения[From];
СтруктураЧата = СтруктураСообщения[Chat];
СтруктураСообщения = СтруктураПараметровВходная[Message];
СтруктураПользователя = СтруктураСообщения[From];
СтруктураЧата = СтруктураСообщения[Chat];
СтруктураПараметровВыходная.Вставить("Вид" , "Сообщение");
СтруктураПараметровВыходная.Вставить("Никнейм" , СтруктураПользователя[Username]);
СтруктураПараметровВыходная.Вставить("IDПользователя" , СтруктураПользователя[Id_]);
СтруктураПараметровВыходная.Вставить("IDСообщения" , СтруктураСообщения[MessageId]);
СтруктураПараметровВыходная.Вставить("IDЧата" , СтруктураЧата[Id_]);
СтруктураПараметровВыходная.Вставить("Сообщение" , СтруктураСообщения["text"]);
СтруктураПараметровВыходная.Вставить("Дата"
, Дата(1970, 1, 1, 1, 0, 0) + СтруктураСообщения["date"]);
СтруктураПараметровВыходная.Вставить("Вид", "Сообщение");
СтруктураПараметровВыходная.Вставить("Никнейм", СтруктураПользователя[Username]);
СтруктураПараметровВыходная.Вставить("IDПользователя", СтруктураПользователя[Id_]);
СтруктураПараметровВыходная.Вставить("IDСообщения", СтруктураСообщения[MessageId]);
СтруктураПараметровВыходная.Вставить("IDЧата", СтруктураЧата[Id_]);
СтруктураПараметровВыходная.Вставить("Сообщение", СтруктураСообщения["text"]);
СтруктураПараметровВыходная.Вставить("Дата", Дата(1970, 1, 1, 1, 0, 0) + СтруктураСообщения["date"]);
СтруктураПараметровВыходная.Вставить("БотОтключен" , Ложь);
СтруктураПараметровВыходная.Вставить("БотОтключен", Ложь);
ИначеЕсли СтруктураПараметровВходная.Свойство("my_chat_member") Тогда
ИначеЕсли СтруктураПараметровВходная.Свойство("my_chat_member") Тогда
СтруктураСообщения = СтруктураПараметровВходная["my_chat_member"];
СтруктураПользователя = СтруктураСообщения[From];
СтруктураЧата = СтруктураСообщения[Chat];
СтруктураСообщения = СтруктураПараметровВходная["my_chat_member"];
СтруктураПользователя = СтруктураСообщения[From];
СтруктураЧата = СтруктураСообщения[Chat];
СтруктураПараметровВыходная.Вставить("Вид" , "Запуск/Остановка");
СтруктураПараметровВыходная.Вставить("Никнейм" , СтруктураПользователя[Username]);
СтруктураПараметровВыходная.Вставить("IDПользователя" , СтруктураПользователя[Id_]);
СтруктураПараметровВыходная.Вставить("IDСообщения" , "");
СтруктураПараметровВыходная.Вставить("IDЧата" , СтруктураЧата[Id_]);
СтруктураПараметровВыходная.Вставить("Сообщение" , СтруктураСообщения["new_chat_member"]["status"]);
СтруктураПараметровВыходная.Вставить("Дата"
, Дата(1970, 1, 1, 1, 0, 0) + СтруктураСообщения["date"]);
СтруктураПараметровВыходная.Вставить("Вид", "Запуск/Остановка");
СтруктураПараметровВыходная.Вставить("Никнейм", СтруктураПользователя[Username]);
СтруктураПараметровВыходная.Вставить("IDПользователя", СтруктураПользователя[Id_]);
СтруктураПараметровВыходная.Вставить("IDСообщения", "");
СтруктураПараметровВыходная.Вставить("IDЧата", СтруктураЧата[Id_]);
СтруктураПараметровВыходная.Вставить("Сообщение", СтруктураСообщения["new_chat_member"]["status"]);
СтруктураПараметровВыходная.Вставить("Дата", Дата(1970, 1, 1, 1, 0, 0) + СтруктураСообщения["date"]);
СтруктураПараметровВыходная.Вставить("БотОтключен"
, ?(СтруктураСообщения["new_chat_member"]["status"] = "kicked", Истина, Ложь));
СтруктураПараметровВыходная.Вставить("БотОтключен", ?(СтруктураСообщения["new_chat_member"]["status"]
= "kicked", Истина, Ложь));
ИначеЕсли СтруктураПараметровВходная.Свойство("callback_query") Тогда
ИначеЕсли СтруктураПараметровВходная.Свойство("callback_query") Тогда
СтруктураСообщения = СтруктураПараметровВходная["callback_query"];
СтруктураПользователя = СтруктураСообщения[From];
СтруктураСообщения = СтруктураПараметровВходная["callback_query"];
СтруктураПользователя = СтруктураСообщения[From];
СтруктураПараметровВыходная.Вставить("Вид" , "Кнопка под сообщением");
СтруктураПараметровВыходная.Вставить("Никнейм" , СтруктураПользователя[Username]);
СтруктураПараметровВыходная.Вставить("IDПользователя" , СтруктураПользователя[Id_]);
СтруктураПараметровВыходная.Вставить("IDСообщения" , СтруктураСообщения[Message][MessageId]);
СтруктураПараметровВыходная.Вставить("IDЧата" , СтруктураСообщения[Message][Chat][Id_]);
СтруктураПараметровВыходная.Вставить("Сообщение" , СтруктураСообщения["data"]);
СтруктураПараметровВыходная.Вставить("БотОтключен" , Ложь);
СтруктураПараметровВыходная.Вставить("Дата"
, Дата(1970, 1, 1, 1, 0, 0) + СтруктураСообщения[Message]["date"]);
СтруктураПараметровВыходная.Вставить("Вид", "Кнопка под сообщением");
СтруктураПараметровВыходная.Вставить("Никнейм", СтруктураПользователя[Username]);
СтруктураПараметровВыходная.Вставить("IDПользователя", СтруктураПользователя[Id_]);
СтруктураПараметровВыходная.Вставить("IDСообщения", СтруктураСообщения[Message][MessageId]);
СтруктураПараметровВыходная.Вставить("IDЧата", СтруктураСообщения[Message][Chat][Id_]);
СтруктураПараметровВыходная.Вставить("Сообщение", СтруктураСообщения["data"]);
СтруктураПараметровВыходная.Вставить("БотОтключен", Ложь);
СтруктураПараметровВыходная.Вставить("Дата", Дата(1970, 1, 1, 1, 0, 0) + СтруктураСообщения[Message]["date"]);
Иначе
Иначе
СтруктураПараметровВыходная.Вставить("Вид" , "");
СтруктураПараметровВыходная.Вставить("Никнейм" , "");
СтруктураПараметровВыходная.Вставить("IDПользователя" , "");
СтруктураПараметровВыходная.Вставить("IDСообщения" , "");
СтруктураПараметровВыходная.Вставить("IDЧата" , "");
СтруктураПараметровВыходная.Вставить("Сообщение" , "");
СтруктураПараметровВыходная.Вставить("Дата" , ТекущаяДатаСеанса());
СтруктураПараметровВыходная.Вставить("БотОтключен" , Ложь);
СтруктураПараметровВыходная.Вставить("Вид", "");
СтруктураПараметровВыходная.Вставить("Никнейм", "");
СтруктураПараметровВыходная.Вставить("IDПользователя", "");
СтруктураПараметровВыходная.Вставить("IDСообщения", "");
СтруктураПараметровВыходная.Вставить("IDЧата", "");
СтруктураПараметровВыходная.Вставить("Сообщение", "");
СтруктураПараметровВыходная.Вставить("Дата", ТекущаяДатаСеанса());
СтруктураПараметровВыходная.Вставить("БотОтключен", Ложь);
КонецЕсли;
КонецЕсли;
Возврат СтруктураПараметровВыходная;
Возврат СтруктураПараметровВыходная;
// BSLLS:DuplicateStringLiteral-on
КонецФункции
@ -201,18 +197,18 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция ОтправитьТекстовоеСообщение(Знач Токен, Знач IDЧата, Знач Текст, Знач Клавиатура = "") Экспорт
OPI_Инструменты.ЗаменитьСпецСимволы(Текст);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
OPI_Инструменты.ЗаменитьСпецСимволы(Текст);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode" , "Markdown");
Параметры_.Вставить("text" , Текст);
Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("reply_markup" , Клавиатура);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
Параметры_.Вставить("text", Текст);
Параметры_.Вставить("chat_id", IDЧата);
Параметры_.Вставить("reply_markup", Клавиатура);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/sendMessage", Параметры_);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/sendMessage", Параметры_);
Возврат Ответ;
Возврат Ответ;
КонецФункции
@ -229,7 +225,7 @@
// Строка, Произвольный, HTTPОтвет - Ответ сервера Telegram
Функция ОтправитьКартинку(Знач Токен, Знач IDЧата, Знач Текст, Знач Картинка, Знач Клавиатура = "") Экспорт
Возврат ОтправитьФайл(Токен, IDЧата, Текст, Картинка, "photo", Клавиатура);
Возврат ОтправитьФайл(Токен, IDЧата, Текст, Картинка, "photo", Клавиатура);
КонецФункции
@ -246,7 +242,7 @@
// Строка, Произвольный, HTTPОтвет - Ответ сервера Telegram
Функция ОтправитьВидео(Знач Токен, Знач IDЧата, Знач Текст, Знач Видео, Знач Клавиатура = "") Экспорт
Возврат ОтправитьФайл(Токен, IDЧата, Текст, Видео, "video", Клавиатура);
Возврат ОтправитьФайл(Токен, IDЧата, Текст, Видео, "video", Клавиатура);
КонецФункции
@ -263,7 +259,7 @@
// Строка, Произвольный, HTTPОтвет - Ответ сервера Telegram
Функция ОтправитьАудио(Знач Токен, Знач IDЧата, Знач Текст, Знач Аудио, Знач Клавиатура = "") Экспорт
Возврат ОтправитьФайл(Токен, IDЧата, Текст, Аудио, "audio", Клавиатура);
Возврат ОтправитьФайл(Токен, IDЧата, Текст, Аудио, "audio", Клавиатура);
КонецФункции
@ -280,7 +276,7 @@
// Строка, Произвольный, HTTPОтвет - Ответ сервера Telegram
Функция ОтправитьДокумент(Знач Токен, Знач IDЧата, Знач Текст, Знач Документ, Знач Клавиатура = "") Экспорт
Возврат ОтправитьФайл(Токен, IDЧата, Текст, Документ, "document", Клавиатура);
Возврат ОтправитьФайл(Токен, IDЧата, Текст, Документ, "document", Клавиатура);
КонецФункции
@ -297,7 +293,7 @@
// Строка, Произвольный, HTTPОтвет - Ответ сервера Telegram
Функция ОтправитьГифку(Знач Токен, Знач IDЧата, Знач Текст, Знач Гифка, Знач Клавиатура = "") Экспорт
Возврат ОтправитьФайл(Токен, IDЧата, Текст, Гифка, "animation", Клавиатура);
Возврат ОтправитьФайл(Токен, IDЧата, Текст, Гифка, "animation", Клавиатура);
КонецФункции
@ -314,68 +310,62 @@
//
// Возвращаемое значение:
// Произвольный, HTTPОтвет - Ответ сервера Telegram
Функция ОтправитьМедиагруппу(Знач Токен
, Знач IDЧата
, Знач Текст
, Знач СоответствиеФайлов
, Знач Клавиатура = "") Экспорт
Функция ОтправитьМедиагруппу(Знач Токен, Знач IDЧата, Знач Текст, Знач СоответствиеФайлов, Знач Клавиатура = "") Экспорт
// СоответствиеФайлов
// Ключ - Файл, Значение - Тип
// Типы: audio, document, photo, video
// Нельзя замешивать разные типы!
OPI_Инструменты.ЗаменитьСпецсимволы(Текст);
OPI_Инструменты.ЗаменитьСпецсимволы(Текст);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
СтруктураФайлов = Новый Структура;
Медиа = Новый Массив;
Счетчик = 0;
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
СтруктураФайлов = Новый Структура;
Медиа = Новый Массив;
Счетчик = 0;
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode" , "Markdown");
Параметры_.Вставить("caption" , Текст);
Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("reply_markup" , Клавиатура);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
Параметры_.Вставить("caption", Текст);
Параметры_.Вставить("chat_id", IDЧата);
Параметры_.Вставить("reply_markup", Клавиатура);
Для Каждого ТекущийФайл Из СоответствиеФайлов Цикл
Для Каждого ТекущийФайл Из СоответствиеФайлов Цикл
Если Не ТипЗнч(ТекущийФайл.Ключ) = Тип("ДвоичныеДанные") Тогда
ДД = Новый ДвоичныеДанные(ТекущийФайл.Ключ);
ЭтотФайл = Новый Файл(ТекущийФайл.Ключ);
ИмяМедиа = ТекущийФайл.Значение
+ Строка(Счетчик)
+ ?(ТекущийФайл.Значение = "document", ЭтотФайл.Расширение, "");
ПолноеИмяМедиа = СтрЗаменить(ИмяМедиа, ".", "___");
Иначе
ДД = ТекущийФайл.Ключ;
ИмяМедиа = ТекущийФайл.Значение + Строка(Счетчик);
ПолноеИмяМедиа = ИмяМедиа;
КонецЕсли;
Если Не ТипЗнч(ТекущийФайл.Ключ) = Тип("ДвоичныеДанные") Тогда
ДД = Новый ДвоичныеДанные(ТекущийФайл.Ключ);
ЭтотФайл = Новый Файл(ТекущийФайл.Ключ);
ИмяМедиа = ТекущийФайл.Значение + Строка(Счетчик) + ?(ТекущийФайл.Значение = "document",
ЭтотФайл.Расширение, "");
ПолноеИмяМедиа = СтрЗаменить(ИмяМедиа, ".", "___");
Иначе
ДД = ТекущийФайл.Ключ;
ИмяМедиа = ТекущийФайл.Значение + Строка(Счетчик);
ПолноеИмяМедиа = ИмяМедиа;
КонецЕсли;
СтруктураФайлов.Вставить(ПолноеИмяМедиа , ДД);
СтруктураФайлов.Вставить(ПолноеИмяМедиа, ДД);
СтруктураМедиа = Новый Структура;
СтруктураМедиа.Вставить("type" , ТекущийФайл.Значение);
СтруктураМедиа.Вставить("media", "attach://" + ИмяМедиа);
СтруктураМедиа = Новый Структура;
СтруктураМедиа.Вставить("type", ТекущийФайл.Значение);
СтруктураМедиа.Вставить("media", "attach://" + ИмяМедиа);
Если Счетчик = 0 Тогда
СтруктураМедиа.Вставить("caption", Текст);
КонецЕсли;
Если Счетчик = 0 Тогда
СтруктураМедиа.Вставить("caption", Текст);
КонецЕсли;
Медиа.Добавить(СтруктураМедиа);
Медиа.Добавить(СтруктураМедиа);
Счетчик = Счетчик + 1;
Счетчик = Счетчик + 1;
КонецЦикла;
КонецЦикла;
Параметры_.Вставить("media", OPI_Инструменты.JSONСтрокой(Медиа));
Параметры_.Вставить("media", OPI_Инструменты.JSONСтрокой(Медиа));
Ответ = OPI_Инструменты.PostMultipart("api.telegram.org/bot"
+ Токен
+ "/sendMediaGroup", Параметры_, СтруктураФайлов, "mixed");
Ответ = OPI_Инструменты.PostMultipart("api.telegram.org/bot" + Токен + "/sendMediaGroup", Параметры_,
СтруктураФайлов, "mixed");
Возврат Ответ;
Возврат Ответ;
КонецФункции
@ -392,18 +382,18 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция ОтправитьМестоположение(Знач Токен, Знач IDЧата, Знач Широта, Знач Долгота, Знач Клавиатура = "") Экспорт
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode" , "Markdown");
Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("latitude" , OPI_Инструменты.ЧислоВСтроку(Широта));
Параметры_.Вставить("longitude" , OPI_Инструменты.ЧислоВСтроку(Долгота));
Параметры_.Вставить("reply_markup" , Клавиатура);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
Параметры_.Вставить("chat_id", IDЧата);
Параметры_.Вставить("latitude", OPI_Инструменты.ЧислоВСтроку(Широта));
Параметры_.Вставить("longitude", OPI_Инструменты.ЧислоВСтроку(Долгота));
Параметры_.Вставить("reply_markup", Клавиатура);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/sendLocation", Параметры_);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/sendLocation", Параметры_);
Возврат Ответ;
Возврат Ответ;
КонецФункции
@ -421,19 +411,19 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция ОтправитьКонтакт(Знач Токен, Знач IDЧата, Знач Имя, Знач Фамилия, Знач Телефон, Знач Клавиатура = "") Экспорт
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode" , "Markdown");
Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("first_name" , Имя);
Параметры_.Вставить("last_name" , Фамилия);
Параметры_.Вставить("phone_number" , Строка(Телефон));
Параметры_.Вставить("reply_markup" , Клавиатура);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
Параметры_.Вставить("chat_id", IDЧата);
Параметры_.Вставить("first_name", Имя);
Параметры_.Вставить("last_name", Фамилия);
Параметры_.Вставить("phone_number", Строка(Телефон));
Параметры_.Вставить("reply_markup", Клавиатура);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/sendContact", Параметры_);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/sendContact", Параметры_);
Возврат Ответ;
Возврат Ответ;
КонецФункции
@ -450,22 +440,22 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция ОтправитьОпрос(Знач Токен, Знач IDЧата, Знач Вопрос, Знач МассивОтветов, Знач Анонимный = Истина) Экспорт
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Ответы = OPI_Инструменты.JSONСтрокой(МассивОтветов);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Ответы = OPI_Инструменты.JSONСтрокой(МассивОтветов);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode" , "Markdown");
Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("question" , Вопрос);
Параметры_.Вставить("options" , Ответы);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
Параметры_.Вставить("chat_id", IDЧата);
Параметры_.Вставить("question", Вопрос);
Параметры_.Вставить("options", Ответы);
Если Не Анонимный Тогда
Параметры_.Вставить("is_anonymous", Ложь);
КонецЕсли;
Если Не Анонимный Тогда
Параметры_.Вставить("is_anonymous", Ложь);
КонецЕсли;
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/sendPoll", Параметры_);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/sendPoll", Параметры_);
Возврат Ответ;
Возврат Ответ;
КонецФункции
@ -481,18 +471,18 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция ПереслатьСообщение(Знач Токен, Знач IDОригинала, Знач ОткудаID, Знач КудаID) Экспорт
IDОригинала = OPI_Инструменты.ЧислоВСтроку(IDОригинала);
ОткудаID = OPI_Инструменты.ЧислоВСтроку(ОткудаID);
КудаID = OPI_Инструменты.ЧислоВСтроку(КудаID);
IDОригинала = OPI_Инструменты.ЧислоВСтроку(IDОригинала);
ОткудаID = OPI_Инструменты.ЧислоВСтроку(ОткудаID);
КудаID = OPI_Инструменты.ЧислоВСтроку(КудаID);
Параметры_ = Новый Структура;
Параметры_.Вставить("chat_id" , КудаID);
Параметры_.Вставить("from_chat_id" , ОткудаID);
Параметры_.Вставить("message_id" , IDОригинала);
Параметры_ = Новый Структура;
Параметры_.Вставить("chat_id", КудаID);
Параметры_.Вставить("from_chat_id", ОткудаID);
Параметры_.Вставить("message_id", IDОригинала);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/forwardMessage", Параметры_);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/forwardMessage", Параметры_);
Возврат Ответ;
Возврат Ответ;
КонецФункции
@ -511,17 +501,17 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция Бан(Знач Токен, Знач IDЧата, Знач IDПользователя) Экспорт
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
IDПользователя = OPI_Инструменты.ЧислоВСтроку(IDПользователя);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
IDПользователя = OPI_Инструменты.ЧислоВСтроку(IDПользователя);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode" , "Markdown");
Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("user_id" , IDПользователя);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
Параметры_.Вставить("chat_id", IDЧата);
Параметры_.Вставить("user_id", IDПользователя);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/banChatMember", Параметры_);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/banChatMember", Параметры_);
Возврат Ответ;
Возврат Ответ;
КонецФункции
@ -536,18 +526,18 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция Разбан(Знач Токен, Знач IDЧата, Знач IDПользователя) Экспорт
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
IDПользователя = OPI_Инструменты.ЧислоВСтроку(IDПользователя);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
IDПользователя = OPI_Инструменты.ЧислоВСтроку(IDПользователя);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode" , "Markdown");
Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("user_id" , IDПользователя);
Параметры_.Вставить("only_if_banned" , Истина);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
Параметры_.Вставить("chat_id", IDЧата);
Параметры_.Вставить("user_id", IDПользователя);
Параметры_.Вставить("only_if_banned", Истина);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/unbanChatMember", Параметры_);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/unbanChatMember", Параметры_);
Возврат Ответ;
Возврат Ответ;
КонецФункции
@ -562,28 +552,25 @@
//
// Возвращаемое значение:
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция СоздатьСсылкуПриглашение(Знач Токен
, Знач IDЧата
, Знач Заголовок = ""
, Знач ДатаИстечения = ""
, Знач ЛимитПользователей = 0) Экспорт
Функция СоздатьСсылкуПриглашение(Знач Токен, Знач IDЧата, Знач Заголовок = "", Знач ДатаИстечения = "",
Знач ЛимитПользователей = 0) Экспорт
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("name" , Заголовок);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
Параметры_.Вставить("chat_id", IDЧата);
Параметры_.Вставить("name", Заголовок);
Если ЗначениеЗаполнено(ДатаИстечения) Тогда
Параметры_.Вставить("expire_date", Формат(ДатаИстечения - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0"));
КонецЕсли;
Если ЗначениеЗаполнено(ДатаИстечения) Тогда
Параметры_.Вставить("expire_date", Формат(ДатаИстечения - Дата(1970, 1, 1, 1, 0, 0), "ЧГ=0"));
КонецЕсли;
Параметры_.Вставить("member_limit", ЛимитПользователей);
Параметры_.Вставить("member_limit", ЛимитПользователей);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/createChatInviteLink", Параметры_);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/createChatInviteLink", Параметры_);
Возврат Ответ;
Возврат Ответ;
КонецФункции
@ -598,18 +585,18 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция ЗакрепитьСообщение(Знач Токен, Знач IDЧата, Знач IDСообщения) Экспорт
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
IDСообщения = OPI_Инструменты.ЧислоВСтроку(IDСообщения);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
IDСообщения = OPI_Инструменты.ЧислоВСтроку(IDСообщения);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode" , "Markdown");
Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("message_id" , IDСообщения);
Параметры_.Вставить("disable_notification" , Истина);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
Параметры_.Вставить("chat_id", IDЧата);
Параметры_.Вставить("message_id", IDСообщения);
Параметры_.Вставить("disable_notification", Истина);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/pinChatMessage", Параметры_);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/pinChatMessage", Параметры_);
Возврат Ответ;
Возврат Ответ;
КонецФункции
@ -624,17 +611,17 @@
// ДвоичныеДанные, Неопределено, Произвольный - Ответ сервера Telegram
Функция ОткрепитьСообщение(Знач Токен, Знач IDЧата, Знач IDСообщения) Экспорт
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
IDСообщения = OPI_Инструменты.ЧислоВСтроку(IDСообщения);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
IDСообщения = OPI_Инструменты.ЧислоВСтроку(IDСообщения);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode" , "Markdown");
Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("message_id" , IDСообщения);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
Параметры_.Вставить("chat_id", IDЧата);
Параметры_.Вставить("message_id", IDСообщения);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/unpinChatMessage", Параметры_);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/unpinChatMessage", Параметры_);
Возврат Ответ;
Возврат Ответ;
КонецФункции
@ -648,15 +635,15 @@
// ДвоичныеДанные, Неопределено, Произвольный - Получить число участников
Функция ПолучитьЧислоУчастников(Знач Токен, Знач IDЧата) Экспорт
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
Параметры_.Вставить("chat_id" , IDЧата);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
Параметры_.Вставить("chat_id", IDЧата);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/getChatMemberCount", Параметры_);
Ответ = OPI_Инструменты.Get("api.telegram.org/bot" + Токен + "/getChatMemberCount", Параметры_);
Возврат Ответ;
Возврат Ответ;
КонецФункции
@ -674,56 +661,55 @@
// Соответствие из Строка - Обработанные данные с признаком достоверности
Функция ОбработатьДанныеTMA(Знач СтрокаДанных, Знач Токен) Экспорт
СтрокаДанных = РаскодироватьСтроку(СтрокаДанных, СпособКодированияСтроки.КодировкаURL);
СтруктураДанных = OPI_Инструменты.ПараметрыЗапросаВСоответствие(СтрокаДанных);
Ключ = "WebAppData";
Хэш = "";
СтрокаДанных = РаскодироватьСтроку(СтрокаДанных, СпособКодированияСтроки.КодировкаURL);
СтруктураДанных = OPI_Инструменты.ПараметрыЗапросаВСоответствие(СтрокаДанных);
Ключ = "WebAppData";
Хэш = "";
Результат = OPI_Криптография.HMACSHA256(ПолучитьДвоичныеДанныеИзСтроки(Ключ)
, ПолучитьДвоичныеДанныеИзСтроки(Токен));
Результат = OPI_Криптография.HMACSHA256(ПолучитьДвоичныеДанныеИзСтроки(Ключ), ПолучитьДвоичныеДанныеИзСтроки(Токен));
ТЗнач = Новый ТаблицаЗначений;
ТЗнач.Колонки.Добавить("Ключ");
ТЗнач.Колонки.Добавить("Значение");
ТЗнач = Новый ТаблицаЗначений;
ТЗнач.Колонки.Добавить("Ключ");
ТЗнач.Колонки.Добавить("Значение");
Для Каждого Данные Из СтруктураДанных Цикл
Для Каждого Данные Из СтруктураДанных Цикл
НоваяСтрока = ТЗнач.Добавить();
НоваяСтрока.Ключ = Данные.Ключ;
НоваяСтрока.Значение = Данные.Значение;
НоваяСтрока = ТЗнач.Добавить();
НоваяСтрока.Ключ = Данные.Ключ;
НоваяСтрока.Значение = Данные.Значение;
КонецЦикла;
КонецЦикла;
ТЗнач.Сортировать("Ключ");
ТЗнач.Сортировать("Ключ");
СоответствиеВозврата = Новый Соответствие;
DCS = "";
СоответствиеВозврата = Новый Соответствие;
DCS = "";
Для Каждого СтрокаТЗ Из ТЗнач Цикл
Для Каждого СтрокаТЗ Из ТЗнач Цикл
Если СтрокаТЗ.Ключ <> "hash" Тогда
DCS = DCS + СтрокаТЗ.Ключ + "=" + СтрокаТЗ.Значение + Символы.ПС;
СоответствиеВозврата.Вставить(СтрокаТЗ.Ключ, СтрокаТЗ.Значение);
Иначе
Хэш = СтрокаТЗ.Значение;
КонецЕсли;
Если СтрокаТЗ.Ключ <> "hash" Тогда
DCS = DCS + СтрокаТЗ.Ключ + "=" + СтрокаТЗ.Значение + Символы.ПС;
СоответствиеВозврата.Вставить(СтрокаТЗ.Ключ, СтрокаТЗ.Значение);
Иначе
Хэш = СтрокаТЗ.Значение;
КонецЕсли;
КонецЦикла;
КонецЦикла;
DCS = Лев(DCS, СтрДлина(DCS) - 1);
Подпись = OPI_Криптография.HMACSHA256(Результат, ПолучитьДвоичныеДанныеИзСтроки(DCS));
DCS = Лев(DCS, СтрДлина(DCS) - 1);
Подпись = OPI_Криптография.HMACSHA256(Результат, ПолучитьДвоичныеДанныеИзСтроки(DCS));
Финал = ПолучитьHexСтрокуИзДвоичныхДанных(Подпись);
Финал = ПолучитьHexСтрокуИзДвоичныхДанных(Подпись);
Если Финал = вРег(Хэш) Тогда
Ответ = Истина;
Иначе
Ответ = Ложь;
КонецЕсли;
Если Финал = вРег(Хэш) Тогда
Ответ = Истина;
Иначе
Ответ = Ложь;
КонецЕсли;
СоответствиеВозврата.Вставить("passed", Ответ);
СоответствиеВозврата.Вставить("passed", Ответ);
Возврат СоответствиеВозврата;
Возврат СоответствиеВозврата;
КонецФункции
@ -740,47 +726,45 @@
//
// Возвращаемое значение:
// Строка - JSON клавиатуры
Функция СформироватьКлавиатуруПоМассивуКнопок(Знач МассивКнопок
, Знач ПодСообщением = Ложь
, Знач ОднаПодОдной = Истина) Экспорт
Функция СформироватьКлавиатуруПоМассивуКнопок(Знач МассивКнопок, Знач ПодСообщением = Ложь, Знач ОднаПодОдной = Истина) Экспорт
Если ОднаПодОдной Тогда
Если ОднаПодОдной Тогда
Строки = Новый Массив;
Строки = Новый Массив;
Для Каждого Кнопка Из МассивКнопок Цикл
Кнопки = Новый Массив;
Кнопка = OPI_Инструменты.ЧислоВСтроку(Кнопка);
Кнопки.Добавить(Новый Структура("text,callback_data", Кнопка, Кнопка));
Строки.Добавить(Кнопки);
КонецЦикла;
Для Каждого Кнопка Из МассивКнопок Цикл
Кнопки = Новый Массив;
Кнопка = OPI_Инструменты.ЧислоВСтроку(Кнопка);
Кнопки.Добавить(Новый Структура("text,callback_data", Кнопка, Кнопка));
Строки.Добавить(Кнопки);
КонецЦикла;
Иначе
Иначе
Строки = Новый Массив;
Кнопки = Новый Массив;
Строки = Новый Массив;
Кнопки = Новый Массив;
Для Каждого Кнопка Из МассивКнопок Цикл
Кнопка = OPI_Инструменты.ЧислоВСтроку(Кнопка);
Кнопки.Добавить(Новый Структура("text,callback_data", Кнопка, Кнопка));
КонецЦикла;
Для Каждого Кнопка Из МассивКнопок Цикл
Кнопка = OPI_Инструменты.ЧислоВСтроку(Кнопка);
Кнопки.Добавить(Новый Структура("text,callback_data", Кнопка, Кнопка));
КонецЦикла;
Строки.Добавить(Кнопки);
КонецЕсли;
Строки.Добавить(Кнопки);
КонецЕсли;
Если ПодСообщением Тогда
СтруктураПараметра = Новый Структура("inline_keyboard,rows", Строки, 1);
Иначе
СтруктураПараметра = Новый Структура("keyboard,resize_keyboard", Строки, Истина);
КонецЕсли;
Если ПодСообщением Тогда
СтруктураПараметра = Новый Структура("inline_keyboard,rows", Строки, 1);
Иначе
СтруктураПараметра = Новый Структура("keyboard,resize_keyboard", Строки, Истина);
КонецЕсли;
ЗаписьJSON = Новый ЗаписьJSON;
ПЗJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, , , ЭкранированиеСимволовJSON.СимволыВнеASCII);
ЗаписьJSON.УстановитьСтроку(ПЗJSON);
ЗаписьJSON = Новый ЗаписьJSON;
ПЗJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, , , ЭкранированиеСимволовJSON.СимволыВнеASCII);
ЗаписьJSON.УстановитьСтроку(ПЗJSON);
ЗаписатьJSON(ЗаписьJSON, СтруктураПараметра);
ЗаписатьJSON(ЗаписьJSON, СтруктураПараметра);
Возврат ЗаписьJSON.Закрыть();
Возврат ЗаписьJSON.Закрыть();
КонецФункции
@ -794,46 +778,44 @@
Расширение = "";
Если Вид = "photo" Тогда
Метод = "/sendPhoto";
ИначеЕсли Вид = "video" Тогда
Метод = "/sendVideo";
ИначеЕсли Вид = "audio" Тогда
Метод = "/sendAudio";
ИначеЕсли Вид = "document" Тогда
Метод = "/sendDocument";
ИначеЕсли Вид = "animation" Тогда
Метод = "/sendAnimation";
Если Вид = "photo" Тогда
Метод = "/sendPhoto";
ИначеЕсли Вид = "video" Тогда
Метод = "/sendVideo";
ИначеЕсли Вид = "audio" Тогда
Метод = "/sendAudio";
ИначеЕсли Вид = "document" Тогда
Метод = "/sendDocument";
ИначеЕсли Вид = "animation" Тогда
Метод = "/sendAnimation";
Расширение = ".gif";
Иначе
Возврат "";
КонецЕсли;
Иначе
Возврат "";
КонецЕсли;
OPI_Инструменты.ЗаменитьСпецсимволы(Текст);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
OPI_Инструменты.ЗаменитьСпецсимволы(Текст);
IDЧата = OPI_Инструменты.ЧислоВСтроку(IDЧата);
Если Не ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда
ТекущийФайл = Новый Файл(Файл);
Расширение = ?(Вид = "document" Или Вид = "animation", ТекущийФайл.Расширение, "");
Файл = Новый ДвоичныеДанные(Файл);
КонецЕсли;
Если Не ТипЗнч(Файл) = Тип("ДвоичныеДанные") Тогда
ТекущийФайл = Новый Файл(Файл);
Расширение = ?(Вид = "document" Или Вид = "animation", ТекущийФайл.Расширение, "");
Файл = Новый ДвоичныеДанные(Файл);
КонецЕсли;
Расширение = СтрЗаменить(Расширение, ".", "___");
Расширение = СтрЗаменить(Расширение, ".", "___");
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode" , "Markdown");
Параметры_.Вставить("caption" , Текст);
Параметры_.Вставить("chat_id" , IDЧата);
Параметры_.Вставить("reply_markup" , Клавиатура);
Параметры_ = Новый Структура;
Параметры_.Вставить("parse_mode", "Markdown");
Параметры_.Вставить("caption", Текст);
Параметры_.Вставить("chat_id", IDЧата);
Параметры_.Вставить("reply_markup", Клавиатура);
СтруктураФайлов = Новый Структура;
СтруктураФайлов.Вставить(Вид + Расширение, Файл);
СтруктураФайлов = Новый Структура;
СтруктураФайлов.Вставить(Вид + Расширение, Файл);
Ответ = OPI_Инструменты.PostMultipart("api.telegram.org/bot"
+ Токен
+ Метод, Параметры_, СтруктураФайлов, "mixed");
Ответ = OPI_Инструменты.PostMultipart("api.telegram.org/bot" + Токен + Метод, Параметры_, СтруктураФайлов, "mixed");
Возврат Ответ;
Возврат Ответ;
КонецФункции

View File

@ -16,7 +16,12 @@
.ДобавитьСерверныйТест("Телеграм_ОтправитьВидео" , "Отправить видео")
.ДобавитьСерверныйТест("Телеграм_ОтправитьАудио" , "Отправить аудио")
.ДобавитьСерверныйТест("Телеграм_ОтправитьДокумент" , "Отправить документ")
.ДобавитьСерверныйТест("Телеграм_ОтправитьГифку" , "Отправить гифку");
.ДобавитьСерверныйТест("Телеграм_ОтправитьГифку" , "Отправить гифку")
.ДобавитьСерверныйТест("Телеграм_ОтправитьМедиагруппу" , "Отправить медиагруппу")
.ДобавитьСерверныйТест("Телеграм_ОтправитьМестоположение" , "Отправить местоположение")
.ДобавитьСерверныйТест("Телеграм_ОтправитьКонтакт" , "Отправить контакт")
.ДобавитьСерверныйТест("Телеграм_ОтправитьОпрос" , "Отправить опрос")
.ДобавитьСерверныйТест("Телеграм_ПереслатьСообщение" , "Переслать сообщение");
КонецПроцедуры
@ -94,6 +99,9 @@
МассивРезультатов.Добавить(OPI_Telegram.ОтправитьТекстовоеСообщение(Токен, IDЧата, Текст));
МассивРезультатов.Добавить(OPI_Telegram.ОтправитьТекстовоеСообщение(Токен, IDКанала, Текст));
IDСообщения = OPI_Инструменты.ЧислоВСтроку(МассивРезультатов[1]["result"]["message_id"]);
ЗаписатьПараметр("Телеграм_IDСообщенияКанала", IDСообщения);
Для Каждого Результат Из МассивРезультатов Цикл
ЮТест.ОжидаетЧто(Результат)
@ -143,19 +151,18 @@
IDЧата = ПолучитьПараметр("Телеграм_Чат");
IDКанала = ПолучитьПараметр("Телеграм_Канал");
Текст = "Сообщение из автоматического теста";
Картинка = ПолучитьДвоичные("Видео");
Видео = ПолучитьДвоичные("Видео");
ИВФ = ПолучитьИмяВременногоФайла("mp4");
Картинка.Записать(ИВФ);
Видео.Записать(ИВФ);
МассивРезультатов = Новый Массив;
МассивРезультатов.Добавить(OPI_Telegram.ОтправитьВидео(Токен, IDЧата , Текст, Картинка));
МассивРезультатов.Добавить(OPI_Telegram.ОтправитьВидео(Токен, IDКанала, Текст, Картинка));
МассивРезультатов.Добавить(OPI_Telegram.ОтправитьВидео(Токен, IDЧата , Текст, Видео));
МассивРезультатов.Добавить(OPI_Telegram.ОтправитьВидео(Токен, IDКанала, Текст, Видео));
МассивРезультатов.Добавить(OPI_Telegram.ОтправитьВидео(Токен, IDЧата , Текст, ИВФ));
МассивРезультатов.Добавить(OPI_Telegram.ОтправитьВидео(Токен, IDКанала, Текст, ИВФ));
Для Каждого Результат Из МассивРезультатов Цикл
//@skip-warning
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип("Соответствие")
.Заполнено()
@ -263,6 +270,143 @@
КонецПроцедуры
Процедура Телеграм_ОтправитьМедиагруппу() Экспорт
Токен = ПолучитьПараметр("Телеграм_Токен");
IDЧата = ПолучитьПараметр("Телеграм_Чат");
IDКанала = ПолучитьПараметр("Телеграм_Канал");
Текст = "Сообщение из автоматического теста";
Картинка = ПолучитьДвоичные("Картинка");
ИВФ_Картинка = ПолучитьИмяВременногоФайла("png");
Картинка.Записать(ИВФ_Картинка);
Видео = ПолучитьДвоичные("Видео");
ИВФ_Видео = ПолучитьИмяВременногоФайла("mp4");
Видео.Записать(ИВФ_Видео);
МедиагруппаЧат = Новый Соответствие;
МедиагруппаЧат.Вставить(Картинка , "photo");
МедиагруппаЧат.Вставить(ИВФ_Видео, "video");
МедиагруппаКанал = Новый Соответствие;
МедиагруппаКанал.Вставить(ИВФ_Картинка, "photo");
МедиагруппаКанал.Вставить(Видео , "video");
МассивРезультатов = Новый Массив;
МассивРезультатов.Добавить(OPI_Telegram.ОтправитьМедиагруппу(Токен, IDЧата, Текст, МедиагруппаЧат));
МассивРезультатов.Добавить(OPI_Telegram.ОтправитьМедиагруппу(Токен, IDКанала, Текст, МедиагруппаКанал));
Для Каждого Результат Из МассивРезультатов Цикл
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип("Соответствие")
.Заполнено()
.Свойство("ok").Равно(Истина)
.Свойство("result").ИмеетТип("Массив").ИмеетДлину(2)
КонецЦикла;
УдалитьФайлы(ИВФ_Картинка);
УдалитьФайлы(ИВФ_Видео);
КонецПроцедуры
Процедура Телеграм_ОтправитьМестоположение() Экспорт
Токен = ПолучитьПараметр("Телеграм_Токен");
IDЧата = ПолучитьПараметр("Телеграм_Чат");
IDКанала = ПолучитьПараметр("Телеграм_Канал");
Ширина = "48.87373649724122";
Долгота = "48.87373649724122";
МассивРезультатов = Новый Массив;
МассивРезультатов.Добавить(OPI_Telegram.ОтправитьМестоположение(Токен, IDЧата , Ширина, Долгота));
МассивРезультатов.Добавить(OPI_Telegram.ОтправитьМестоположение(Токен, IDКанала, Ширина, Долгота));
Для Каждого Результат Из МассивРезультатов Цикл
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип("Соответствие")
.Заполнено()
.Свойство("ok").Равно(Истина)
.Свойство("result.location").ИмеетТип("Соответствие").Заполнено();
КонецЦикла;
КонецПроцедуры
Процедура Телеграм_ОтправитьКонтакт() Экспорт
Токен = ПолучитьПараметр("Телеграм_Токен");
IDЧата = ПолучитьПараметр("Телеграм_Чат");
IDКанала = ПолучитьПараметр("Телеграм_Канал");
Имя = "Петр";
Фамилия = "Петров";
Телефон = "88005553535";
МассивРезультатов = Новый Массив;
МассивРезультатов.Добавить(OPI_Telegram.ОтправитьКонтакт(Токен, IDЧата , Имя, Фамилия, Телефон));
МассивРезультатов.Добавить(OPI_Telegram.ОтправитьКонтакт(Токен, IDКанала, Имя, Фамилия, Телефон));
Для Каждого Результат Из МассивРезультатов Цикл
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип("Соответствие")
.Заполнено()
.Свойство("ok").Равно(Истина)
.Свойство("result.contact").ИмеетТип("Соответствие").Заполнено()
.Свойство("result.contact.first_name").Равно(Имя);
КонецЦикла;
КонецПроцедуры
Процедура Телеграм_ОтправитьОпрос() Экспорт
Токен = ПолучитьПараметр("Телеграм_Токен");
IDЧата = ПолучитьПараметр("Телеграм_Чат");
IDКанала = ПолучитьПараметр("Телеграм_Канал");
Вопрос = "Какой ваш любимый цвет?";
МассивОтветов = Новый Массив;
МассивОтветов.Добавить("Красный");
МассивОтветов.Добавить("Желтый");
МассивОтветов.Добавить("Зеленый");
МассивРезультатов = Новый Массив;
МассивРезультатов.Добавить(OPI_Telegram.ОтправитьОпрос(Токен, IDЧата , Вопрос, МассивОтветов, Ложь));
МассивРезультатов.Добавить(OPI_Telegram.ОтправитьОпрос(Токен, IDКанала, Вопрос, МассивОтветов, Истина));
Для Каждого Результат Из МассивРезультатов Цикл
ЮТест.ОжидаетЧто(Результат)
.ИмеетТип("Соответствие")
.Заполнено()
.Свойство("ok").Равно(Истина)
.Свойство("result.poll").ИмеетТип("Соответствие").Заполнено()
.Свойство("result.poll.question").Равно(Вопрос);
КонецЦикла;
КонецПроцедуры
Процедура Телеграм_ПереслатьСообщение() Экспорт
Токен = ПолучитьПараметр("Телеграм_Токен");
IDЧата = ПолучитьПараметр("Телеграм_Чат");
IDКанала = ПолучитьПараметр("Телеграм_Канал");
IDСообщения = ПолучитьПараметр("Телеграм_IDСообщенияКанала");
ЮТест.ОжидаетЧто(OPI_Telegram.ПереслатьСообщение(Токен, IDСообщения, IDКанала, IDЧата))
.ИмеетТип("Соответствие")
.Заполнено()
.Свойство("ok").Равно(Истина)
.Свойство("result.forward_origin.message_id").Равно(Число(IDСообщения));
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@ -308,7 +452,13 @@
ИмяРеквизита = "Значение";
ЭлементСпр = Справочники[ИмяСправочника].НайтиПоНаименованию(Параметр);
ОбъектСпр = ЭлементСпр.ПолучитьОбъект();
Если ЗначениеЗаполнено(ЭлементСпр) Тогда
ОбъектСпр = ЭлементСпр.ПолучитьОбъект();
Иначе
ОбъектСпр = Справочники[ИмяСправочника].СоздатьЭлемент();
ОбъектСпр.Наименование = Параметр;
КонецЕсли;
ОбъектСпр[ИмяРеквизита] = Значение;
ОбъектСпр.Записать();