1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-01-02 03:38:55 +02:00

VKT: Клавиатура

This commit is contained in:
Anton 2024-08-18 17:33:21 +03:00
parent 9eb7a812dd
commit 20575ce48a
22 changed files with 3575 additions and 2773 deletions

View File

@ -0,0 +1,3 @@
{
"Token": "001.3501506236.091..."
}

View File

@ -0,0 +1,30 @@
 Token = "001.3501506236.091...";
LastID = 0;
For N = 1 To 5 Do
Result = OPI_VKTeams.GetEvents(Token, LastID, 3);
Events = Result["events"];
If Not Events.Count() = 0 Then
For Each Event In Events Do
callbackData = Event["payload"];
If callbackData["callbackData"] = "ButtonEvent1" Then
EventID = callbackData["queryId"];
Result = OPI_VKTeams.AnswerButtonEvent(Token, EventID, "Get it!");
Check_VKTTrue(Result);
EndIf;
EndDo;
LastID = Events[Events.UBound()]["eventId"];
EndIf;
EndDo;

View File

@ -9,4 +9,13 @@
Text = "<b>Bold text</b>";
Markup = "HTML";
Result = OPI_VKTeams.SendTextMessage(Token, ChatID, Text, ReplyID, , Markup);
Keyboard = New Array;
ButtonsLineArray = New Array;
ButtonsLineArray.Add(OPI_VKTeams.MakeActionButton("Button1", "ButtonEvent1", , "attention"));
ButtonsLineArray.Add(OPI_VKTeams.MakeActionButton("Button2", , "https://openintegrations.dev"));
Keyboard.Add(ButtonsLineArray);
Keyboard.Add(ButtonsLineArray);
Result = OPI_VKTeams.SendTextMessage(Token, ChatID, Text, ReplyID, Keyboard, Markup);

View File

@ -0,0 +1,3 @@
{
"Токен": "001.3501506236.091..."
}

View File

@ -0,0 +1,30 @@
 Токен = "001.3501506236.091...";
IDПоследнего = 0;
Для Н = 1 По 5 Цикл
Результат = OPI_VKTeams.ПолучитьСобытия(Токен, IDПоследнего, 3);
События = Результат["events"];
Если Не События.Количество() = 0 Тогда
Для Каждого Событие Из События Цикл
ДанныеСобытия = Событие["payload"];
Если ДанныеСобытия["callbackData"] = "НажатиеКнопки1" Тогда
IDСобытия = ДанныеСобытия["queryId"];
Результат = OPI_VKTeams.ОтветитьНаСобытиеКлавиатуры(Токен, IDСобытия, "Получено!");
Проверка_ВКТИстина(Результат);
КонецЕсли;
КонецЦикла;
IDПоследнего = События[События.ВГраница()]["eventId"];
КонецЕсли;
КонецЦикла;

View File

@ -9,4 +9,13 @@
Текст = "<b>Полужирный текст сообщения</b>";
Разметка = "HTML";
Результат = OPI_VKTeams.ОтправитьТекстовоеСообщение(Токен, IDЧата, Текст, IDЦитируемого, , Разметка);
Клавиатура = Новый Массив;
МассивСтрокиКнопок = Новый Массив;
МассивСтрокиКнопок.Добавить(OPI_VKTeams.СформироватьКнопкуДействия("Кнопка1", "НажатиеКнопки1", , "attention"));
МассивСтрокиКнопок.Добавить(OPI_VKTeams.СформироватьКнопкуДействия("Кнопка2", , "https://openintegrations.dev"));
Клавиатура.Добавить(МассивСтрокиКнопок);
Клавиатура.Добавить(МассивСтрокиКнопок);
Результат = OPI_VKTeams.ОтправитьТекстовоеСообщение(Токен, IDЧата, Текст, IDЦитируемого, Клавиатура, Разметка);

View File

@ -9,4 +9,13 @@
Текст = "<b>Полужирный текст сообщения</b>";
Разметка = "HTML";
Результат = OPI_VKTeams.ОтправитьТекстовоеСообщение(Токен, IDЧата, Текст, IDЦитируемого, , Разметка);
Клавиатура = Новый Массив;
МассивСтрокиКнопок = Новый Массив;
МассивСтрокиКнопок.Добавить(OPI_VKTeams.СформироватьКнопкуДействия("Кнопка1", "НажатиеКнопки1", , "attention"));
МассивСтрокиКнопок.Добавить(OPI_VKTeams.СформироватьКнопкуДействия("Кнопка2", , "https://openintegrations.dev"));
Клавиатура.Добавить(МассивСтрокиКнопок);
Клавиатура.Добавить(МассивСтрокиКнопок);
Результат = OPI_VKTeams.ОтправитьТекстовоеСообщение(Токен, IDЧата, Текст, IDЦитируемого, Клавиатура, Разметка);

File diff suppressed because it is too large Load Diff

View File

@ -475,6 +475,65 @@ Function UnpinMessage(Val Token, Val ChatID, Val MessageID) Export
EndFunction
// Answer button event
// Returns a response to the user when a keyboard button is pressed
//
// Note
// This method call should be used in response to receiving a callbackQuery event
// Method at API documentation: [GET /messages/answerCallbackQuery](@teams.vk.com/botapi/#/messages/get_messages_answerCallbackQuery)
//
// Parameters:
// Token - String - Bot token - token
// EventID - String - Identifier of the callback query received by the bot - queryid
// Text - String - Answer text - text
// URL - String - URL to be opened by the client application - url
// AsAlert - Boolean - Display the answer as an alert) - showalert
//
// Returns:
// Map Of KeyAndValue - Serialized JSON response from VK Teams
Function AnswerButtonEvent(Val Token
, Val EventID
, Val Text = ""
, Val URL = ""
, Val AsAlert = False) Export
URL = "/messages/answerCallbackQuery";
Parameters = NormalizeMain(URL, Token);
OPI_Tools.AddField("queryId" , EventID , "String" , Parameters);
OPI_Tools.AddField("text" , Text , "String" , Parameters);
OPI_Tools.AddField("url" , URL , "String" , Parameters);
OPI_Tools.AddField("showAlert", AsAlert , "Boolean", Parameters);
Response = OPI_Tools.Get(URL, Parameters);
Return Response;
EndFunction
// Make action button
// Forms an action button for the message keyboard (see SendTextMessage)
//
// Parameters:
// Text - String - Button text - text
// Value - String - The value returned in the event. Only if the URL is not filled - data
// URL - String - URL to create the page open button. Only if the Value is not filled in - url
// Style - String - Button style: primary, attention or base - style
//
// Returns:
// Structure - Button for keyboard
Function MakeActionButton(Val Text, Val Value = "", Val URL = "", Val Style = "base") Export
ButtonStructure = New Structure;
OPI_Tools.AddField("text" , Text , "String", ButtonStructure);
OPI_Tools.AddField("callbackData", Value , "String", ButtonStructure);
OPI_Tools.AddField("url" , URL , "String", ButtonStructure);
OPI_Tools.AddField("style" , Style , "String", ButtonStructure);
Return ButtonStructure;
EndFunction
#EndRegion
#Region ChatManagement

View File

@ -3158,6 +3158,9 @@ Procedure VKT_MessagesSending() Export
OPI_TestDataRetrieval.ParameterToCollection("Audio2" , TestParameters);
VkTeams_SendTextMessage(TestParameters);
OPI_Tools.Pause(60);
VKTeams_AnswerButtonEvent(TestParameters);
VKTeams_ForwardMessage(TestParameters);
VKTeams_SendFile(TestParameters);
VKTeams_ResendFile(TestParameters);
@ -10614,7 +10617,16 @@ Procedure VKTeams_SendTextMessage(FunctionParameters)
Text = "<b>Bold text</b>";
Markup = "HTML";
Result = OPI_VKTeams.SendTextMessage(Token, ChatID, Text, ReplyID, , Markup);
Keyboard = New Array;
ButtonsLineArray = New Array;
ButtonsLineArray.Add(OPI_VKTeams.MakeActionButton("Button1", "ButtonEvent1", , "attention"));
ButtonsLineArray.Add(OPI_VKTeams.MakeActionButton("Button2", , "https://openintegrations.dev"));
Keyboard.Add(ButtonsLineArray);
Keyboard.Add(ButtonsLineArray);
Result = OPI_VKTeams.SendTextMessage(Token, ChatID, Text, ReplyID, Keyboard, Markup);
// END
@ -11087,7 +11099,6 @@ Procedure VKTeams_SetChatTitle(FunctionParameters)
EndProcedure
Procedure VKTeams_SetChatDescription(FunctionParameters)
Token = FunctionParameters["VkTeams_Token"];
@ -11120,6 +11131,47 @@ Procedure VKTeams_SetChatRules(FunctionParameters)
EndProcedure
Procedure VKTeams_AnswerButtonEvent(FunctionParameters)
Token = FunctionParameters["VkTeams_Token"];
LastID = 0;
For N = 1 To 5 Do
Result = OPI_VKTeams.GetEvents(Token, LastID, 3);
Events = Result["events"];
If Not Events.Count() = 0 Then
For Each Event In Events Do
callbackData = Event["payload"];
If callbackData["callbackData"] = "ButtonEvent1" Then
EventID = callbackData["queryId"];
Result = OPI_VKTeams.AnswerButtonEvent(Token, EventID, "Get it!");
OPI_TestDataRetrieval.WriteLog(Result, "AnswerButtonEvent", "VkTeams");
Check_VKTTrue(Result);
EndIf;
EndDo;
LastID = Events[Events.UBound()]["eventId"];
EndIf;
EndDo;
// END
OPI_Tools.Pause(3);
EndProcedure
#EndRegion
#EndRegion

View File

@ -815,10 +815,24 @@ Function ConvertParameterToString(Val Value)
If TypeOf(Value) = Type("Array") Then
For N = 0 To Value.UBound() Do
Value[N] = ConvertParameterToString(Value[N]);
EndDo;
Value = StrConcat(Value, ",");
Value = EncodeString(Value, StringEncodingMethod.URLInURLEncoding);
Value = "[" + Value + "]";
ElsIf TypeOf(Value) = Type("Map") Or TypeOf(Value) = Type("Structure") Then
JSONParameters = New JSONWriterSettings(JSONLineBreak.No, "");
JSONWriter = New JSONWriter;
JSONWriter.SetString(JSONParameters);
WriteJSON(JSONWriter, Value);
Value = JSONWriter.Close();
ElsIf TypeOf(Value) = Type("Boolean") Then
Value = ?(Value, "true", "false");

View File

@ -3158,6 +3158,9 @@ Procedure VKT_MessagesSending() Export
OPI_TestDataRetrieval.ParameterToCollection("Audio2" , TestParameters);
VkTeams_SendTextMessage(TestParameters);
OPI_Tools.Pause(60);
VKTeams_AnswerButtonEvent(TestParameters);
VKTeams_ForwardMessage(TestParameters);
VKTeams_SendFile(TestParameters);
VKTeams_ResendFile(TestParameters);
@ -10614,7 +10617,16 @@ Procedure VKTeams_SendTextMessage(FunctionParameters)
Text = "<b>Bold text</b>";
Markup = "HTML";
Result = OPI_VKTeams.SendTextMessage(Token, ChatID, Text, ReplyID, , Markup);
Keyboard = New Array;
ButtonsLineArray = New Array;
ButtonsLineArray.Add(OPI_VKTeams.MakeActionButton("Button1", "ButtonEvent1", , "attention"));
ButtonsLineArray.Add(OPI_VKTeams.MakeActionButton("Button2", , "https://openintegrations.dev"));
Keyboard.Add(ButtonsLineArray);
Keyboard.Add(ButtonsLineArray);
Result = OPI_VKTeams.SendTextMessage(Token, ChatID, Text, ReplyID, Keyboard, Markup);
// END
@ -11087,7 +11099,6 @@ Procedure VKTeams_SetChatTitle(FunctionParameters)
EndProcedure
Procedure VKTeams_SetChatDescription(FunctionParameters)
Token = FunctionParameters["VkTeams_Token"];
@ -11120,6 +11131,47 @@ Procedure VKTeams_SetChatRules(FunctionParameters)
EndProcedure
Procedure VKTeams_AnswerButtonEvent(FunctionParameters)
Token = FunctionParameters["VkTeams_Token"];
LastID = 0;
For N = 1 To 5 Do
Result = OPI_VKTeams.GetEvents(Token, LastID, 3);
Events = Result["events"];
If Not Events.Count() = 0 Then
For Each Event In Events Do
callbackData = Event["payload"];
If callbackData["callbackData"] = "ButtonEvent1" Then
EventID = callbackData["queryId"];
Result = OPI_VKTeams.AnswerButtonEvent(Token, EventID, "Get it!");
// !OInt OPI_TestDataRetrieval.WriteLog(Result, "AnswerButtonEvent", "VkTeams");
Check_VKTTrue(Result);
EndIf;
EndDo;
LastID = Events[Events.UBound()]["eventId"];
EndIf;
EndDo;
// END
OPI_Tools.Pause(3);
EndProcedure
#EndRegion
#EndRegion

View File

@ -815,10 +815,24 @@ Function ConvertParameterToString(Val Value)
If TypeOf(Value) = Type("Array") Then
For N = 0 To Value.UBound() Do
Value[N] = ConvertParameterToString(Value[N]);
EndDo;
Value = StrConcat(Value, ",");
Value = EncodeString(Value, StringEncodingMethod.URLInURLEncoding);
Value = "[" + Value + "]";
ElsIf TypeOf(Value) = Type("Map") Or TypeOf(Value) = Type("Structure") Then
JSONParameters = New JSONWriterSettings(JSONLineBreak.No, "");
JSONWriter = New JSONWriter;
JSONWriter.SetString(JSONParameters);
WriteJSON(JSONWriter, Value);
Value = JSONWriter.Close();
ElsIf TypeOf(Value) = Type("Boolean") Then
Value = ?(Value, "true", "false");

View File

@ -475,6 +475,65 @@ Function UnpinMessage(Val Token, Val ChatID, Val MessageID) Export
EndFunction
// Answer button event
// Returns a response to the user when a keyboard button is pressed
//
// Note
// This method call should be used in response to receiving a callbackQuery event
// Method at API documentation: [GET /messages/answerCallbackQuery](@teams.vk.com/botapi/#/messages/get_messages_answerCallbackQuery)
//
// Parameters:
// Token - String - Bot token - token
// EventID - String - Identifier of the callback query received by the bot - queryid
// Text - String - Answer text - text
// URL - String - URL to be opened by the client application - url
// AsAlert - Boolean - Display the answer as an alert) - showalert
//
// Returns:
// Map Of KeyAndValue - Serialized JSON response from VK Teams
Function AnswerButtonEvent(Val Token
, Val EventID
, Val Text = ""
, Val URL = ""
, Val AsAlert = False) Export
URL = "/messages/answerCallbackQuery";
Parameters = NormalizeMain(URL, Token);
OPI_Tools.AddField("queryId" , EventID , "String" , Parameters);
OPI_Tools.AddField("text" , Text , "String" , Parameters);
OPI_Tools.AddField("url" , URL , "String" , Parameters);
OPI_Tools.AddField("showAlert", AsAlert , "Boolean", Parameters);
Response = OPI_Tools.Get(URL, Parameters);
Return Response;
EndFunction
// Make action button
// Forms an action button for the message keyboard (see SendTextMessage)
//
// Parameters:
// Text - String - Button text - text
// Value - String - The value returned in the event. Only if the URL is not filled - data
// URL - String - URL to create the page open button. Only if the Value is not filled in - url
// Style - String - Button style: primary, attention or base - style
//
// Returns:
// Structure - Button for keyboard
Function MakeActionButton(Val Text, Val Value = "", Val URL = "", Val Style = "base") Export
ButtonStructure = New Structure;
OPI_Tools.AddField("text" , Text , "String", ButtonStructure);
OPI_Tools.AddField("callbackData", Value , "String", ButtonStructure);
OPI_Tools.AddField("url" , URL , "String", ButtonStructure);
OPI_Tools.AddField("style" , Style , "String", ButtonStructure);
Return ButtonStructure;
EndFunction
#EndRegion
#Region ChatManagement

View File

@ -543,6 +543,98 @@
NewLine.Область = "Message sending";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "vkteams";
NewLine.Модуль = "OPI_VKTeams";
NewLine.Метод = "AnswerButtonEvent";
NewLine.МетодПоиска = "ANSWERBUTTONEVENT";
NewLine.Параметр = "--token";
NewLine.Описание = "Bot token";
NewLine.Область = "Message sending";
NewLine.ОписаниеМетода = "Returns a response to the user when a keyboard button is pressed";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "vkteams";
NewLine.Модуль = "OPI_VKTeams";
NewLine.Метод = "AnswerButtonEvent";
NewLine.МетодПоиска = "ANSWERBUTTONEVENT";
NewLine.Параметр = "--queryid";
NewLine.Описание = "Identifier of the callback query received by the bot";
NewLine.Область = "Message sending";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "vkteams";
NewLine.Модуль = "OPI_VKTeams";
NewLine.Метод = "AnswerButtonEvent";
NewLine.МетодПоиска = "ANSWERBUTTONEVENT";
NewLine.Параметр = "--text";
NewLine.Описание = "Answer text (optional, def. val. - Empty value)";
NewLine.Область = "Message sending";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "vkteams";
NewLine.Модуль = "OPI_VKTeams";
NewLine.Метод = "AnswerButtonEvent";
NewLine.МетодПоиска = "ANSWERBUTTONEVENT";
NewLine.Параметр = "--url";
NewLine.Описание = "URL to be opened by the client application (optional, def. val. - Empty value)";
NewLine.Область = "Message sending";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "vkteams";
NewLine.Модуль = "OPI_VKTeams";
NewLine.Метод = "AnswerButtonEvent";
NewLine.МетодПоиска = "ANSWERBUTTONEVENT";
NewLine.Параметр = "--showalert";
NewLine.Описание = "Display the answer as an alert) (optional, def. val. - No)";
NewLine.Область = "Message sending";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "vkteams";
NewLine.Модуль = "OPI_VKTeams";
NewLine.Метод = "MakeActionButton";
NewLine.МетодПоиска = "MAKEACTIONBUTTON";
NewLine.Параметр = "--text";
NewLine.Описание = "Button text";
NewLine.Область = "Message sending";
NewLine.ОписаниеМетода = "Forms an action button for the message keyboard (see SendTextMessage)";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "vkteams";
NewLine.Модуль = "OPI_VKTeams";
NewLine.Метод = "MakeActionButton";
NewLine.МетодПоиска = "MAKEACTIONBUTTON";
NewLine.Параметр = "--data";
NewLine.Описание = "The value returned in the event. Only if the URL is not filled (optional, def. val. - Empty value)";
NewLine.Область = "Message sending";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "vkteams";
NewLine.Модуль = "OPI_VKTeams";
NewLine.Метод = "MakeActionButton";
NewLine.МетодПоиска = "MAKEACTIONBUTTON";
NewLine.Параметр = "--url";
NewLine.Описание = "URL to create the page open button. Only if the Value is not filled in (optional, def. val. - Empty value)";
NewLine.Область = "Message sending";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "vkteams";
NewLine.Модуль = "OPI_VKTeams";
NewLine.Метод = "MakeActionButton";
NewLine.МетодПоиска = "MAKEACTIONBUTTON";
NewLine.Параметр = "--style";
NewLine.Описание = "Button style: primary, attention or base (optional, def. val. - base)";
NewLine.Область = "Message sending";
NewLine = CompositionTable.Add();
NewLine.Библиотека = "vkteams";
NewLine.Модуль = "OPI_VKTeams";

View File

@ -475,6 +475,65 @@
КонецФункции
// Ответить на событие клавиатуры
// Возвращает ответ пользователю при нажатии на кнопку клавиатуры
//
// Примечание:
// Вызов данного метода должен использоваться в ответ на получение события callbackQuery
// Метод в документации API: [GET /messages/answerCallbackQuery](@teams.vk.com/botapi/#/messages/get_messages_answerCallbackQuery)
//
// Параметры:
// Токен - Строка - Токен бота - token
// IDСобытия - Строка - Идентификатор callback query полученного ботом - queryid
// Текст - Строка - Текст ответа - text
// URL - Строка - URL, который будет открыт клиентским приложением - url
// ЭтоПредупреждение - Булево - Отображать ответ как предупреждение (alert) - showalert
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK Teams
Функция ОтветитьНаСобытиеКлавиатуры(Знач Токен
, Знач IDСобытия
, Знач Текст = ""
, Знач URL = ""
, Знач ЭтоПредупреждение = Ложь) Экспорт
URL = "/messages/answerCallbackQuery";
Параметры = НормализоватьОснову(URL, Токен);
OPI_Инструменты.ДобавитьПоле("queryId" , IDСобытия , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("text" , Текст , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("url" , URL , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("showAlert", ЭтоПредупреждение , "Булево", Параметры);
Ответ = OPI_Инструменты.Get(URL, Параметры);
Возврат Ответ;
КонецФункции
// Сформировать кнопку действия
// Формирует кнопку действия для клавиатуры сообщения (см. ОтправитьТекстовоеСообщение)
//
// Параметры:
// Текст - Строка - Текст кнопки - text
// Значение - Строка - Значение, возвращаемое в событии нажатия. Только если не заполнено URL - data
// URL - Строка - URL для создания кнопки открытия страницы. Только если не заполнено Значение - url
// Стиль - Строка - Стиль кнопки: primary, attention или base - style
//
// Возвращаемое значение:
// Структура - Кнопка для клавиатуры
Функция СформироватьКнопкуДействия(Знач Текст, Знач Значение = "", Знач URL = "", Знач Стиль = "base") Экспорт
СтруктураКнопки = Новый Структура;
OPI_Инструменты.ДобавитьПоле("text" , Текст , "Строка", СтруктураКнопки);
OPI_Инструменты.ДобавитьПоле("callbackData", Значение, "Строка", СтруктураКнопки);
OPI_Инструменты.ДобавитьПоле("url" , URL , "Строка", СтруктураКнопки);
OPI_Инструменты.ДобавитьПоле("style" , Стиль , "Строка", СтруктураКнопки);
Возврат СтруктураКнопки;
КонецФункции
#КонецОбласти
#Область УправлениеЧатами

View File

@ -3158,6 +3158,9 @@
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Audio2" , ПараметрыТеста);
VkTeams_ОтправитьТекстовоеСообщение(ПараметрыТеста);
OPI_Инструменты.Пауза(60);
VKTeams_ОтветитьНаСобытиеКлавиатуры(ПараметрыТеста);
VKTeams_ПереслатьСообщение(ПараметрыТеста);
VKTeams_ОтправитьФайл(ПараметрыТеста);
VKTeams_ПереслатьФайл(ПараметрыТеста);
@ -10614,7 +10617,16 @@
Текст = "<b>Полужирный текст сообщения</b>";
Разметка = "HTML";
Результат = OPI_VKTeams.ОтправитьТекстовоеСообщение(Токен, IDЧата, Текст, IDЦитируемого, , Разметка);
Клавиатура = Новый Массив;
МассивСтрокиКнопок = Новый Массив;
МассивСтрокиКнопок.Добавить(OPI_VKTeams.СформироватьКнопкуДействия("Кнопка1", "НажатиеКнопки1", , "attention"));
МассивСтрокиКнопок.Добавить(OPI_VKTeams.СформироватьКнопкуДействия("Кнопка2", , "https://openintegrations.dev"));
Клавиатура.Добавить(МассивСтрокиКнопок);
Клавиатура.Добавить(МассивСтрокиКнопок);
Результат = OPI_VKTeams.ОтправитьТекстовоеСообщение(Токен, IDЧата, Текст, IDЦитируемого, Клавиатура, Разметка);
// END
@ -11087,7 +11099,6 @@
КонецПроцедуры
Процедура VKTeams_УстановитьОписаниеЧата(ПараметрыФункции)
Токен = ПараметрыФункции["VkTeams_Token"];
@ -11120,6 +11131,47 @@
КонецПроцедуры
Процедура VKTeams_ОтветитьНаСобытиеКлавиатуры(ПараметрыФункции)
Токен = ПараметрыФункции["VkTeams_Token"];
IDПоследнего = 0;
Для Н = 1 По 5 Цикл
Результат = OPI_VKTeams.ПолучитьСобытия(Токен, IDПоследнего, 3);
События = Результат["events"];
Если Не События.Количество() = 0 Тогда
Для Каждого Событие Из События Цикл
ДанныеСобытия = Событие["payload"];
Если ДанныеСобытия["callbackData"] = "НажатиеКнопки1" Тогда
IDСобытия = ДанныеСобытия["queryId"];
Результат = OPI_VKTeams.ОтветитьНаСобытиеКлавиатуры(Токен, IDСобытия, "Получено!");
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтветитьНаСобытиеКлавиатуры", "VkTeams");
Проверка_ВКТИстина(Результат);
КонецЕсли;
КонецЦикла;
IDПоследнего = События[События.ВГраница()]["eventId"];
КонецЕсли;
КонецЦикла;
// END
OPI_Инструменты.Пауза(3);
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -815,10 +815,24 @@
Если ТипЗнч(Значение) = Тип("Массив") Тогда
Для Н = 0 По Значение.ВГраница() Цикл
Значение[Н] = ПреобразоватьПараметрВСтроку(Значение[Н]);
КонецЦикла;
Значение = СтрСоединить(Значение, ",");
Значение = КодироватьСтроку(Значение, СпособКодированияСтроки.URLВКодировкеURL);
Значение = "[" + Значение + "]";
ИначеЕсли ТипЗнч(Значение) = Тип("Соответствие") Или ТипЗнч(Значение) = Тип("Структура") Тогда
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, "");
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
ЗаписатьJSON(ЗаписьJSON, Значение);
Значение = ЗаписьJSON.Закрыть();
ИначеЕсли ТипЗнч(Значение) = Тип("Булево") Тогда
Значение = ?(Значение, "true", "false");

View File

@ -475,6 +475,65 @@
КонецФункции
// Ответить на событие клавиатуры
// Возвращает ответ пользователю при нажатии на кнопку клавиатуры
//
// Примечание:
// Вызов данного метода должен использоваться в ответ на получение события callbackQuery
// Метод в документации API: [GET /messages/answerCallbackQuery](@teams.vk.com/botapi/#/messages/get_messages_answerCallbackQuery)
//
// Параметры:
// Токен - Строка - Токен бота - token
// IDСобытия - Строка - Идентификатор callback query полученного ботом - queryid
// Текст - Строка - Текст ответа - text
// URL - Строка - URL, который будет открыт клиентским приложением - url
// ЭтоПредупреждение - Булево - Отображать ответ как предупреждение (alert) - showalert
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от VK Teams
Функция ОтветитьНаСобытиеКлавиатуры(Знач Токен
, Знач IDСобытия
, Знач Текст = ""
, Знач URL = ""
, Знач ЭтоПредупреждение = Ложь) Экспорт
URL = "/messages/answerCallbackQuery";
Параметры = НормализоватьОснову(URL, Токен);
OPI_Инструменты.ДобавитьПоле("queryId" , IDСобытия , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("text" , Текст , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("url" , URL , "Строка", Параметры);
OPI_Инструменты.ДобавитьПоле("showAlert", ЭтоПредупреждение , "Булево", Параметры);
Ответ = OPI_Инструменты.Get(URL, Параметры);
Возврат Ответ;
КонецФункции
// Сформировать кнопку действия
// Формирует кнопку действия для клавиатуры сообщения (см. ОтправитьТекстовоеСообщение)
//
// Параметры:
// Текст - Строка - Текст кнопки - text
// Значение - Строка - Значение, возвращаемое в событии нажатия. Только если не заполнено URL - data
// URL - Строка - URL для создания кнопки открытия страницы. Только если не заполнено Значение - url
// Стиль - Строка - Стиль кнопки: primary, attention или base - style
//
// Возвращаемое значение:
// Структура - Кнопка для клавиатуры
Функция СформироватьКнопкуДействия(Знач Текст, Знач Значение = "", Знач URL = "", Знач Стиль = "base") Экспорт
СтруктураКнопки = Новый Структура;
OPI_Инструменты.ДобавитьПоле("text" , Текст , "Строка", СтруктураКнопки);
OPI_Инструменты.ДобавитьПоле("callbackData", Значение, "Строка", СтруктураКнопки);
OPI_Инструменты.ДобавитьПоле("url" , URL , "Строка", СтруктураКнопки);
OPI_Инструменты.ДобавитьПоле("style" , Стиль , "Строка", СтруктураКнопки);
Возврат СтруктураКнопки;
КонецФункции
#КонецОбласти
#Область УправлениеЧатами

View File

@ -815,10 +815,24 @@
Если ТипЗнч(Значение) = Тип("Массив") Тогда
Для Н = 0 По Значение.ВГраница() Цикл
Значение[Н] = ПреобразоватьПараметрВСтроку(Значение[Н]);
КонецЦикла;
Значение = СтрСоединить(Значение, ",");
Значение = КодироватьСтроку(Значение, СпособКодированияСтроки.URLВКодировкеURL);
Значение = "[" + Значение + "]";
ИначеЕсли ТипЗнч(Значение) = Тип("Соответствие") Или ТипЗнч(Значение) = Тип("Структура") Тогда
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, "");
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
ЗаписатьJSON(ЗаписьJSON, Значение);
Значение = ЗаписьJSON.Закрыть();
ИначеЕсли ТипЗнч(Значение) = Тип("Булево") Тогда
Значение = ?(Значение, "true", "false");

View File

@ -3158,6 +3158,9 @@
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Audio2" , ПараметрыТеста);
VkTeams_ОтправитьТекстовоеСообщение(ПараметрыТеста);
OPI_Инструменты.Пауза(60);
VKTeams_ОтветитьНаСобытиеКлавиатуры(ПараметрыТеста);
VKTeams_ПереслатьСообщение(ПараметрыТеста);
VKTeams_ОтправитьФайл(ПараметрыТеста);
VKTeams_ПереслатьФайл(ПараметрыТеста);
@ -10614,7 +10617,16 @@
Текст = "<b>Полужирный текст сообщения</b>";
Разметка = "HTML";
Результат = OPI_VKTeams.ОтправитьТекстовоеСообщение(Токен, IDЧата, Текст, IDЦитируемого, , Разметка);
Клавиатура = Новый Массив;
МассивСтрокиКнопок = Новый Массив;
МассивСтрокиКнопок.Добавить(OPI_VKTeams.СформироватьКнопкуДействия("Кнопка1", "НажатиеКнопки1", , "attention"));
МассивСтрокиКнопок.Добавить(OPI_VKTeams.СформироватьКнопкуДействия("Кнопка2", , "https://openintegrations.dev"));
Клавиатура.Добавить(МассивСтрокиКнопок);
Клавиатура.Добавить(МассивСтрокиКнопок);
Результат = OPI_VKTeams.ОтправитьТекстовоеСообщение(Токен, IDЧата, Текст, IDЦитируемого, Клавиатура, Разметка);
// END
@ -11087,7 +11099,6 @@
КонецПроцедуры
Процедура VKTeams_УстановитьОписаниеЧата(ПараметрыФункции)
Токен = ПараметрыФункции["VkTeams_Token"];
@ -11120,6 +11131,47 @@
КонецПроцедуры
Процедура VKTeams_ОтветитьНаСобытиеКлавиатуры(ПараметрыФункции)
Токен = ПараметрыФункции["VkTeams_Token"];
IDПоследнего = 0;
Для Н = 1 По 5 Цикл
Результат = OPI_VKTeams.ПолучитьСобытия(Токен, IDПоследнего, 3);
События = Результат["events"];
Если Не События.Количество() = 0 Тогда
Для Каждого Событие Из События Цикл
ДанныеСобытия = Событие["payload"];
Если ДанныеСобытия["callbackData"] = "НажатиеКнопки1" Тогда
IDСобытия = ДанныеСобытия["queryId"];
Результат = OPI_VKTeams.ОтветитьНаСобытиеКлавиатуры(Токен, IDСобытия, "Получено!");
// !OInt OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОтветитьНаСобытиеКлавиатуры", "VkTeams");
Проверка_ВКТИстина(Результат);
КонецЕсли;
КонецЦикла;
IDПоследнего = События[События.ВГраница()]["eventId"];
КонецЕсли;
КонецЦикла;
// END
OPI_Инструменты.Пауза(3);
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -551,6 +551,98 @@
НоваяСтрока.Область = "Отправка сообщений";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "vkteams";
НоваяСтрока.Модуль = "OPI_VKTeams";
НоваяСтрока.Метод = "ОтветитьНаСобытиеКлавиатуры";
НоваяСтрока.МетодПоиска = "ОТВЕТИТЬНАСОБЫТИЕКЛАВИАТУРЫ";
НоваяСтрока.Параметр = "--token";
НоваяСтрока.Описание = "Токен бота";
НоваяСтрока.Область = "Отправка сообщений";
НоваяСтрока.ОписаниеМетода = "Возвращает ответ пользователю при нажатии на кнопку клавиатуры";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "vkteams";
НоваяСтрока.Модуль = "OPI_VKTeams";
НоваяСтрока.Метод = "ОтветитьНаСобытиеКлавиатуры";
НоваяСтрока.МетодПоиска = "ОТВЕТИТЬНАСОБЫТИЕКЛАВИАТУРЫ";
НоваяСтрока.Параметр = "--queryid";
НоваяСтрока.Описание = "Идентификатор callback query полученного ботом";
НоваяСтрока.Область = "Отправка сообщений";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "vkteams";
НоваяСтрока.Модуль = "OPI_VKTeams";
НоваяСтрока.Метод = "ОтветитьНаСобытиеКлавиатуры";
НоваяСтрока.МетодПоиска = "ОТВЕТИТЬНАСОБЫТИЕКЛАВИАТУРЫ";
НоваяСтрока.Параметр = "--text";
НоваяСтрока.Описание = "Текст ответа (необяз. по ум. - Пустое значение)";
НоваяСтрока.Область = "Отправка сообщений";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "vkteams";
НоваяСтрока.Модуль = "OPI_VKTeams";
НоваяСтрока.Метод = "ОтветитьНаСобытиеКлавиатуры";
НоваяСтрока.МетодПоиска = "ОТВЕТИТЬНАСОБЫТИЕКЛАВИАТУРЫ";
НоваяСтрока.Параметр = "--url";
НоваяСтрока.Описание = "URL, который будет открыт клиентским приложением (необяз. по ум. - Пустое значение)";
НоваяСтрока.Область = "Отправка сообщений";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "vkteams";
НоваяСтрока.Модуль = "OPI_VKTeams";
НоваяСтрока.Метод = "ОтветитьНаСобытиеКлавиатуры";
НоваяСтрока.МетодПоиска = "ОТВЕТИТЬНАСОБЫТИЕКЛАВИАТУРЫ";
НоваяСтрока.Параметр = "--showalert";
НоваяСтрока.Описание = "Отображать ответ как предупреждение (alert) (необяз. по ум. - Нет)";
НоваяСтрока.Область = "Отправка сообщений";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "vkteams";
НоваяСтрока.Модуль = "OPI_VKTeams";
НоваяСтрока.Метод = "СформироватьКнопкуДействия";
НоваяСтрока.МетодПоиска = "СФОРМИРОВАТЬКНОПКУДЕЙСТВИЯ";
НоваяСтрока.Параметр = "--text";
НоваяСтрока.Описание = "Текст кнопки";
НоваяСтрока.Область = "Отправка сообщений";
НоваяСтрока.ОписаниеМетода = "Формирует кнопку действия для клавиатуры сообщения (см. ОтправитьТекстовоеСообщение)";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "vkteams";
НоваяСтрока.Модуль = "OPI_VKTeams";
НоваяСтрока.Метод = "СформироватьКнопкуДействия";
НоваяСтрока.МетодПоиска = "СФОРМИРОВАТЬКНОПКУДЕЙСТВИЯ";
НоваяСтрока.Параметр = "--data";
НоваяСтрока.Описание = "Значение, возвращаемое в событии нажатия. Только если не заполнено URL (необяз. по ум. - Пустое значение)";
НоваяСтрока.Область = "Отправка сообщений";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "vkteams";
НоваяСтрока.Модуль = "OPI_VKTeams";
НоваяСтрока.Метод = "СформироватьКнопкуДействия";
НоваяСтрока.МетодПоиска = "СФОРМИРОВАТЬКНОПКУДЕЙСТВИЯ";
НоваяСтрока.Параметр = "--url";
НоваяСтрока.Описание = "URL для создания кнопки открытия страницы. Только если не заполнено Значение (необяз. по ум. - Пустое значение)";
НоваяСтрока.Область = "Отправка сообщений";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "vkteams";
НоваяСтрока.Модуль = "OPI_VKTeams";
НоваяСтрока.Метод = "СформироватьКнопкуДействия";
НоваяСтрока.МетодПоиска = "СФОРМИРОВАТЬКНОПКУДЕЙСТВИЯ";
НоваяСтрока.Параметр = "--style";
НоваяСтрока.Описание = "Стиль кнопки: primary, attention или base (необяз. по ум. - base)";
НоваяСтрока.Область = "Отправка сообщений";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "vkteams";
НоваяСтрока.Модуль = "OPI_VKTeams";