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

VKT: Отправка сообщений

This commit is contained in:
Anton Titovets 2024-08-09 14:36:21 +03:00
parent f5b7dab520
commit aaacd4869e
24 changed files with 277 additions and 99 deletions

View File

@ -5,6 +5,10 @@
<key></key>
<value>OPI airtable</value>
</synonym>
<synonym>
<key>ru</key>
<value>Airtable (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>

View File

@ -3,7 +3,7 @@
<name>OPI_Bitrix24</name>
<synonym>
<key>ru</key>
<value>Bitrix24 (OPI)</value>
<value>Bitrix24 (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>

View File

@ -7,7 +7,7 @@
</synonym>
<synonym>
<key>ru</key>
<value>Drop box</value>
<value>Dropbox (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>

View File

@ -5,6 +5,10 @@
<key></key>
<value>OPI google calendar</value>
</synonym>
<synonym>
<key>ru</key>
<value>Google Calendar (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>

View File

@ -5,6 +5,10 @@
<key></key>
<value>OPI google drive</value>
</synonym>
<synonym>
<key>ru</key>
<value>Google Drive (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>

View File

@ -5,6 +5,10 @@
<key></key>
<value>OPI google sheets</value>
</synonym>
<synonym>
<key>ru</key>
<value>Google Sheets (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>

View File

@ -5,6 +5,10 @@
<key></key>
<value>OPI google workspace</value>
</synonym>
<synonym>
<key>ru</key>
<value>Google Workspace (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>

View File

@ -3,7 +3,7 @@
<name>OPI_Notion</name>
<synonym>
<key>ru</key>
<value>Методы работы с Notion (ОПИ)</value>
<value>Notion (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>

View File

@ -3,7 +3,7 @@
<name>OPI_Slack</name>
<synonym>
<key>ru</key>
<value>Slack</value>
<value>Slack (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>

View File

@ -3,7 +3,7 @@
<name>OPI_Telegram</name>
<synonym>
<key>ru</key>
<value>Методы интеграции с Telegram (ОПИ)</value>
<value>Telegram (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>

View File

@ -3,7 +3,7 @@
<name>OPI_Twitter</name>
<synonym>
<key>ru</key>
<value>Методы работы с Twitter (ОПИ)</value>
<value>Twitter (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>

View File

@ -3,7 +3,7 @@
<name>OPI_VK</name>
<synonym>
<key>ru</key>
<value>Методы интеграции с VK (ОПИ)</value>
<value>VK (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>

View File

@ -0,0 +1,156 @@
// OneScript: ./OInt/core/Modules/OPI_VKTeams.os
// Lib: VKTeams
// CLI: vkteams
// MIT License
// Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:Typo-off
// BSLLS:IncorrectLineBreak-off
// BSLLS:NumberOfOptionalParams-off
// BSLLS:UsingServiceTag-off
// BSLLS:LineLength-off
//@skip-check module-structure-top-region
//@skip-check module-structure-method-in-regions
//@skip-check wrong-string-literal-content
//@skip-check method-too-many-params
// Раскомментировать, если выполняется OneScript
// #Использовать "../../tools"
#Область ПрограммныйИнтерфейс
#Область ОбщиеМетоды
// Проверить токен
// Проверяет работоспособность токена бота
//
// Примечание:
// Метод в документации API: [GET /self/get](@teams.vk.com/botapi/#/self/get_self_get)
//
// Параметры:
// Токен - Строка - Токен бота - token
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK Teams
Функция ПроверитьТокен(Знач Токен) Экспорт
URL = "/self/get";
Параметры = НормализоватьОснову(URL, Токен);
Ответ = OPI_Инструменты.Get(URL, Параметры);
Возврат Ответ;
КонецФункции
// Получить события
// Получает события бота в Polling режиме
//
// Примечание:
// Метод в документации API: [GET /events/get](@teams.vk.com/botapi/#/events/get_events_get)
//
// Параметры:
// Токен - Строка - Токен бота - token
// IDПоследнего - Строка, Число - ID последнего обработанного до этого события - last
// Таймаут - Строка, Число - Время удержания соединения для Long Polling - timeout
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK Teams
Функция ПолучитьСобытия(Знач Токен, Знач IDПоследнего, Знач Таймаут = 0) Экспорт
URL = "/events/get";
Параметры = НормализоватьОснову(URL, Токен);
IDПоследнего = OPI_Инструменты.ЧислоВСтроку(IDПоследнего);
OPI_Инструменты.ДобавитьПоле("lastEventId", IDПоследнего, "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("pollTime" , Таймаут , "Строка", Параметры);
Ответ = OPI_Инструменты.Get(URL, Параметры);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область ОтправкаСообщений
// Отправить текстовое сообщение
// Отправляет текстовое сообщение в чат
//
// Примечание:
// Можно упомянуть пользователя, добавив в текст его userId в следующем формате @[userId]
// Метод в документации API: [GET /messages/sendText](@teams.vk.com/botapi/#/messages/get_messages_sendText)
//
// Параметры:
// Токен - Строка - Токен бота - token
// IDЧата - Строка, Число - ID чата для отправки сообщения - chatid
// Текст - Строка - Текст сообщения - text
// IDЦитируемого - Строка, Число - ID цитируемого сообщения, если необходимо - reply
// Клавиатура - Массив Из Строка - Кнопки к сообщению, если необходимо - keyboard
// Разметка - Строка - Вид разметки для текста сообщения: MarkdownV2 или HTML - parsemod
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK Teams
Функция ОтправитьТекстовоеСообщение(Знач Токен
, Знач IDЧата
, Знач Текст
, Знач IDЦитируемого = 0
, Знач Клавиатура = ""
, Знач Разметка = "MarkdownV2") Экспорт
URL = "/messages/sendText";
Параметры = НормализоватьОснову(URL, Токен);
OPI_Инструменты.ДобавитьПоле("chatId" , IDЧата , "Строка" , Параметры);
OPI_Инструменты.ДобавитьПоле("text" , Текст , "Строка" , Параметры);
OPI_Инструменты.ДобавитьПоле("replyMsgId" , IDЦитируемого, "Строка" , Параметры);
OPI_Инструменты.ДобавитьПоле("inlineKeyboardMarkup", Клавиатура , "Коллекция", Параметры);
OPI_Инструменты.ДобавитьПоле("parseMode" , Разметка , "Строка" , Параметры);
Ответ = OPI_Инструменты.Get(URL, Параметры);
Возврат Ответ;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция НормализоватьОснову(URL, Знач Токен)
URL = "https://myteam.mail.ru/bot/v1" + URL;
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("token", Токен, "Строка", Параметры);
Возврат Параметры;
КонецФункции
#КонецОбласти

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="cba61dc6-38eb-4bff-83cd-34dbc233f294">
<name>OPI_VkTeams</name>
<name>OPI_VKTeams</name>
<synonym>
<key>ru</key>
<value>Vk Teams (ОПИ)</value>
<value>VK Teams (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>

View File

@ -3,7 +3,7 @@
<name>OPI_Viber</name>
<synonym>
<key>ru</key>
<value>Методы интеграции с Viber (ОПИ)</value>
<value>Viber (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>

View File

@ -1,81 +0,0 @@
// OneScript: ./OInt/core/Modules/OPI_VkTeams.os
// Lib: VkTeams
// CLI: vkteams
// MIT License
// Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:Typo-off
// BSLLS:IncorrectLineBreak-off
// BSLLS:NumberOfOptionalParams-off
// BSLLS:UsingServiceTag-off
// BSLLS:LineLength-off
//@skip-check module-structure-top-region
//@skip-check module-structure-method-in-regions
//@skip-check wrong-string-literal-content
//@skip-check method-too-many-params
// Раскомментировать, если выполняется OneScript
// #Использовать "../../tools"
#Область ПрограммныйИнтерфейс
// Проверить токен
// Проверяет работоспособность токена бота
//
// Примечание:
// Метод в документации API: [GET /self/get](@teams.vk.com/botapi/#/self/get_self_get)
//
// Параметры:
// Токен - Строка - Токен бота - token
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK Teams
Функция ПроверитьТокен(Знач Токен) Экспорт
URL = "/self/get";
Параметры = НормализоватьОснову(URL, Токен);
Ответ = OPI_Инструменты.Get(URL, Параметры);
Возврат Ответ;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция НормализоватьОснову(URL, Знач Токен)
URL = "https://myteam.mail.ru/bot/v1" + URL;
Параметры = Новый Структура;
OPI_Инструменты.ДобавитьПоле("token", Токен, "Строка", Параметры);
Возврат Параметры;
КонецФункции
#КонецОбласти

View File

@ -3,7 +3,7 @@
<name>OPI_YandexDisk</name>
<synonym>
<key>ru</key>
<value>Методы работы с Yandex Disk (ОПИ)</value>
<value>Yandex.Disk (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>

View File

@ -3,7 +3,7 @@
<name>OPI_YandexID</name>
<synonym>
<key>ru</key>
<value>Методы работы с Yandex ID (ОПИ)</value>
<value>YandexID (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>

View File

@ -3,7 +3,7 @@
<name>OPI_Инструменты</name>
<synonym>
<key>ru</key>
<value>OPI инструменты</value>
<value>Инструменты (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>

View File

@ -3,7 +3,7 @@
<name>OPI_Криптография</name>
<synonym>
<key>ru</key>
<value>Криптография (OPI)</value>
<value>Криптография (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>

View File

@ -238,6 +238,7 @@
НовыйТест(ТаблицаТестов, "Б24_УправлениеПользователями" , "Управление пользователями" , Битрикс);
НовыйТест(ТаблицаТестов, "ВКТ_ОбщиеМетоды" , "Общие методы" , ВКТ);
НовыйТест(ТаблицаТестов, "ВКТ_ОтправкаСообщений" , "Отправка сообщений" , ВКТ);
Возврат ТаблицаТестов;

View File

@ -3,7 +3,7 @@
<name>OPI_ПреобразованиеТипов</name>
<synonym>
<key>ru</key>
<value>Преобразование типов (OPI)</value>
<value>Преобразование типов (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
// MIT License
@ -3235,9 +3235,20 @@
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("VkTeams_Token", ПараметрыТеста);
VkTeams_ПроверитьТокен(ПараметрыТеста);
VkTeams_ПолучитьСобытия(ПараметрыТеста);
КонецПроцедуры
Процедура ВКТ_ОтправкаСообщений() Экспорт
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("VkTeams_Token", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("VkTeams_ChatID", ПараметрыТеста);
VkTeams_ОтправитьТекстовоеСообщение(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@ -3935,6 +3946,20 @@
КонецПроцедуры
Процедура Проверка_ВКТСобытия(Знач Результат)
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["events"]).ИмеетТип("Массив");
КонецПроцедуры
Процедура Проверка_ВКТСообщение(Знач Результат)
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["ok"]).Равно(Истина);
OPI_ПолучениеДанныхТестов.ОжидаетЧто(Результат["msgId"]).Заполнено();
КонецПроцедуры
#КонецОбласти
#Область АтомарныеТесты
@ -10207,7 +10232,7 @@
Процедура VkTeams_ПроверитьТокен(ПараметрыФункции)
Токен = ПараметрыФункции["VkTeams_Token"];
Результат = OPI_VkTeams.ПроверитьТокен(Токен);
Результат = OPI_VKTeams.ПроверитьТокен(Токен);
// END
@ -10219,6 +10244,63 @@
КонецПроцедуры
Процедура VkTeams_ПолучитьСобытия(ПараметрыФункции)
Токен = ПараметрыФункции["VkTeams_Token"];
IDПоследнего = 0;
Для Н = 1 По 5 Цикл // В реальной работе - бесконечный цикл
Результат = OPI_VKTeams.ПолучитьСобытия(Токен, IDПоследнего, 3);
// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьСобытия", "VkTeams");
Проверка_ВКТСобытия(Результат); // SKIP
События = Результат["events"];
// Обработка событий...
Если Не События.Количество() = 0 Тогда
IDПоследнего = События[События.ВГраница()]["eventId"];
КонецЕсли;
КонецЦикла;
// END
OPI_Инструменты.Пауза(3);
КонецПроцедуры
Процедура VkTeams_ОтправитьТекстовоеСообщение(ПараметрыФункции)
Токен = ПараметрыФункции["VkTeams_Token"];
IDЧата = ПараметрыФункции["VkTeams_ChatID"];
Текст = "Текст сообщения";
Результат = OPI_VKTeams.ОтправитьТекстовоеСообщение(Токен, IDЧата, Текст);
// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьТекстовоеСообщение (простое)", "VkTeams");
Проверка_ВКТСообщение(Результат); // SKIP
Текст = "<b>Полужирный текст сообщения</b>";
IDЦитируемого = Результат["msgId"];
Разметка = "HTML";
Результат = OPI_VKTeams.ОтправитьТекстовоеСообщение(Токен, IDЧата, Текст, IDЦитируемого, , Разметка);
// END
// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтправитьТекстовоеСообщение", "VkTeams");
Проверка_ВКТСообщение(Результат);
OPI_Инструменты.Пауза(5);
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -58,7 +58,7 @@
<commonModules>CommonModule.OPI_Airtable</commonModules>
<commonModules>CommonModule.OPI_Dropbox</commonModules>
<commonModules>CommonModule.OPI_Bitrix24</commonModules>
<commonModules>CommonModule.OPI_VkTeams</commonModules>
<commonModules>CommonModule.OPI_VKTeams</commonModules>
<commonModules>CommonModule.OPI_Тесты</commonModules>
<commonModules>CommonModule.OPI_ПолучениеДанныхТестов</commonModules>
</mdclass:Configuration>