Compare commits

...

2 Commits

14 changed files with 279 additions and 97 deletions

View File

@@ -36,7 +36,7 @@
РезультатЗапроса.Описание)); РезультатЗапроса.Описание));
КонецЕсли; КонецЕсли;
Если КонстантыогироватьHttpЗапросы.Получить() Тогда Если ТелеграмПовторноеИспользованиеогироватьHttpЗапросы() Тогда
ЗалогироватьЗапрос(АдресРесурса, Перечисления.МетодHTTPЗапроса.GET, ТелоОтветаКакСтрока, КодСостояния); ЗалогироватьЗапрос(АдресРесурса, Перечисления.МетодHTTPЗапроса.GET, ТелоОтветаКакСтрока, КодСостояния);
КонецЕсли; КонецЕсли;
Исключение Исключение
@@ -69,6 +69,9 @@
Запрос.УстановитьТелоИзДвоичныхДанных(Данные.ДвоичныеДанные); Запрос.УстановитьТелоИзДвоичныхДанных(Данные.ДвоичныеДанные);
Запрос.Заголовки.Вставить("Content-Length", Формат(Данные.ДвоичныеДанные.Размер(), "ЧН=0; ЧГ=")); Запрос.Заголовки.Вставить("Content-Length", Формат(Данные.ДвоичныеДанные.Размер(), "ЧН=0; ЧГ="));
Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Данные.Разделитель); Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Данные.Разделитель);
Иначе
Запрос.Заголовки.Вставить("Content-Type","application/json");
Запрос.УстановитьТелоИзСтроки(HttpОбщегоНазначения.ОбъектВСтрокуJson(Данные));
КонецЕсли; КонецЕсли;
Иначе Иначе
Запрос.Заголовки.Вставить("Content-Type","application/json"); Запрос.Заголовки.Вставить("Content-Type","application/json");
@@ -92,7 +95,7 @@
РезультатЗапроса.Описание)); РезультатЗапроса.Описание));
КонецЕсли; КонецЕсли;
Если КонстантыогироватьHttpЗапросы.Получить() Тогда Если ТелеграмПовторноеИспользованиеогироватьHttpЗапросы() Тогда
ЗалогироватьЗапрос(АдресРесурса, Перечисления.МетодHTTPЗапроса.POST, ТелоОтветаКакСтрока, КодСостояния); ЗалогироватьЗапрос(АдресРесурса, Перечисления.МетодHTTPЗапроса.POST, ТелоОтветаКакСтрока, КодСостояния);
КонецЕсли; КонецЕсли;
Исключение Исключение

View File

@@ -1,8 +1,13 @@
#Область ПрограммныйИнтерфейс #Область ПрограммныйИнтерфейс
Функция SendMessage(ИдЧата, СообщениеДляОтправки) Экспорт Функция SendMessage(ИдЧата, СообщениеДляОтправки, Клавиатура = Неопределено) Экспорт
ТелоЗапроса = Новый Структура("chat_id, text", ИдЧата, СообщениеДляОтправки); ТелоЗапроса = Новый Структура("chat_id, text", ИдЧата, СообщениеДляОтправки);
Если Клавиатура <> Неопределено Тогда
ТелоЗапроса.Вставить("reply_markup", Клавиатура);
КонецЕсли;
АдресРесурса = АдресРесурсаПоИмениМетода("sendMessage"); АдресРесурса = АдресРесурсаПоИмениМетода("sendMessage");
Возврат HttpОбщегоНазначения.ВыполнитьPostЗапрос(АдресРесурса,, ТелоЗапроса); Возврат HttpОбщегоНазначения.ВыполнитьPostЗапрос(АдресРесурса,, ТелоЗапроса);
@@ -65,6 +70,24 @@
КонецФункции КонецФункции
Функция SendPhoto(ИдЧата, ФайлДляОтправки, ИмяФайла, Надпись = Неопределено, БезУведомления = Ложь) Экспорт
АдресРесурса = АдресРесурсаПоИмениМетода("sendPhoto");
ПараметрыЗапроса = Новый Структура("chat_id", Формат(ИдЧата, "ЧН=0; ЧГ="));
Если Надпись <> Неопределено Тогда
ПараметрыЗапроса.Вставить("caption", Надпись);
КонецЕсли;
Если БезУведомления Тогда
ПараметрыЗапроса.Вставить("disable_notification", "true");
КонецЕсли;
Разделитель = СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
ДвоичныеДанныеФото = ДвоичныеДанныеФайла(ФайлДляОтправки, ИмяФайла, "image/jpeg", "photo", Разделитель);
ДанныеФото = Новый Структура("Разделитель, ДвоичныеДанные", Разделитель, ДвоичныеДанныеФото);
Возврат HttpОбщегоНазначения.ВыполнитьPostЗапрос(АдресРесурса, ПараметрыЗапроса, ДанныеФото);
КонецФункции
#КонецОбласти #КонецОбласти
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
@@ -83,6 +106,9 @@
Функция ДвоичныеДанныеДокумента(ИдЧата, Документ, Надпись = Неопределено, БезУведомления = Ложь, Разделитель) Функция ДвоичныеДанныеДокумента(ИдЧата, Документ, Надпись = Неопределено, БезУведомления = Ложь, Разделитель)
//Параметры ИдЧата, Надпись, БезУведомления можно передавать также в параметрах запроса, а не в теле как здесь
// Отправка фото сделана именно так. Все значения, кроме непосредственно фото задаются в параметрах запроса.
Если Документ = Неопределено ИЛИ Не (Документ.Свойство("ДанныеФайла") И ТипЗнч(Документ.ДанныеФайла) = Тип("ДвоичныеДанные")) Тогда Если Документ = Неопределено ИЛИ Не (Документ.Свойство("ДанныеФайла") И ТипЗнч(Документ.ДанныеФайла) = Тип("ДвоичныеДанные")) Тогда
ВызватьИсключение "Неверный параметр Документ: ожидается непустой объект, содержащий двоичные данные"; ВызватьИсключение "Неверный параметр Документ: ожидается непустой объект, содержащий двоичные данные";
КонецЕсли; КонецЕсли;
@@ -105,7 +131,23 @@
КонецФункции КонецФункции
Процедура ЗаписатьЭлементаЗапроса(ЗаписьДанных, Разделитель, ИмяПоля, Значение, ИмяФайла = Неопределено, ТипСодержимого = Неопределено) Функция ДвоичныеДанныеФайла(Файл, ИмяФайла, ТипСодержимого, ИмяПараметра, Разделитель)
Если Файл = Неопределено ИЛИ ТипЗнч(Файл) <> Тип("ДвоичныеДанные") Тогда
ВызватьИсключение "Неверный параметр Файл: ожидается непустой объект, содержащий двоичные данные";
КонецЕсли;
ТелоЗапроса = Новый ПотокВПамяти();
ЗаписьДанных = Новый ЗаписьДанных(ТелоЗапроса, , , Символы.ВК + Символы.ПС, "");
ЗаписатьЭлементаЗапроса(ЗаписьДанных, Разделитель, ИмяПараметра, Файл, ИмяФайла, ТипСодержимого);
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель + "--");
ЗаписьДанных.Закрыть();
Возврат ТелоЗапроса.ЗакрытьИПолучитьДвоичныеДанные();
КонецФункции
Процедура ЗаписатьЭлементаЗапроса(ЗаписьДанных, Разделитель, ИмяПараметра, Значение, ИмяФайла = Неопределено, ТипСодержимого = Неопределено)
Если Значение = Неопределено Тогда Если Значение = Неопределено Тогда
Возврат; Возврат;
@@ -113,9 +155,9 @@
ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель); ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
Если ИмяФайла <> Неопределено Тогда Если ИмяФайла <> Неопределено Тогда
ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=%1; filename=%2", ИмяПоля, ИмяФайла)); ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=%1; filename=%2", ИмяПараметра, ИмяФайла));
Иначе Иначе
ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=%1", ИмяПоля)); ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=%1", ИмяПараметра));
КонецЕсли; КонецЕсли;
Если ТипСодержимого <> Неопределено Тогда Если ТипСодержимого <> Неопределено Тогда

View File

@@ -45,7 +45,13 @@
Функция ОбновленияТелеграм(ТелоЗапроса) Экспорт Функция ОбновленияТелеграм(ТелоЗапроса) Экспорт
ДанныеОбновления = HttpОбщегоНазначения.СтрокаJsonВОбъект(ТелоЗапроса); Если ТипЗнч(ТелоЗапроса) = Тип("Соответствие") Тогда
ДанныеОбновления = ТелоЗапроса;
ИначеЕсли ТипЗнч(ТелоЗапроса) = Тип("Строка") Тогда
ДанныеОбновления = HttpОбщегоНазначения.СтрокаJsonВОбъект(ТелоЗапроса);
Иначе
Возврат Неопределено;
КонецЕсли;
МассивСообщенийТелеграм = Новый Массив; МассивСообщенийТелеграм = Новый Массив;

View File

@@ -3,3 +3,10 @@
Возврат Константы.ТелеграмТокен.Получить(); Возврат Константы.ТелеграмТокен.Получить();
КонецФункции КонецФункции
Функция ЛогироватьHttpЗапросы() Экспорт
Возврат Константы.ЛогироватьHttpЗапросы.Получить();
КонецФункции

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.19">
<CommonModule uuid="b5c4da46-161d-4c6d-adbf-375e3fbc5f45">
<Properties>
<Name>ТелеграмРаботаСКлавиатурой</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Телеграм работа с клавиатурой</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Global>false</Global>
<ClientManagedApplication>false</ClientManagedApplication>
<Server>true</Server>
<ExternalConnection>true</ExternalConnection>
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
<ServerCall>true</ServerCall>
<Privileged>false</Privileged>
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
</Properties>
</CommonModule>
</MetaDataObject>

View File

@@ -0,0 +1,45 @@
Функция КлавиатураОтвета(Клавиатура, Компактная = Ложь, Одноразовая = Ложь) Экспорт
СоответствиеКлавиатуры = Новый Соответствие();
СоответствиеКлавиатуры.Вставить("keyboard", Клавиатура);
Если Компактная Тогда
СоответствиеКлавиатуры.Вставить("resize_keyboard", Компактная);
КонецЕсли;
Если Одноразовая Тогда
СоответствиеКлавиатуры.Вставить("one_time_keyboard", Одноразовая);
КонецЕсли;
Возврат СоответствиеКлавиатуры;
КонецФункции
Функция КнопкаКлавиатуры(Надпись) Экспорт
СоответствиеКнопка = Новый Соответствие;
СоответствиеКнопка.Вставить("text", ?(НЕ ЗначениеЗаполнено(Надпись), "<?>", Надпись));
Возврат СоответствиеКнопка;
КонецФункции
Функция РядКнопок(СписокНаименованийКнопокСтрокой) Экспорт
Результат = Новый Массив;
МассивНаименованийКнопок = СтрРазделить(СписокНаименованийКнопокСтрокой, ";");
Если МассивНаименованийКнопок.Количество() = 0 Тогда
Возврат Результат;
КонецЕсли;
Для каждого НадписьКнопки Из МассивНаименованийКнопок Цикл
Результат.Добавить(КнопкаКлавиатуры(НадписьКнопки));
КонецЦикла;
Возврат Результат;
КонецФункции

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.19">
<CommonPicture uuid="4354a6ea-157f-4456-a82a-14909b7c2bd2">
<Properties>
<Name>КартинкаБот</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Картинка бот</v8:content>
</v8:item>
</Synonym>
<Comment/>
<AvailabilityForChoice>false</AvailabilityForChoice>
<AvailabilityForAppearance>false</AvailabilityForAppearance>
</Properties>
</CommonPicture>
</MetaDataObject>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<ExtPicture xmlns="http://v8.1c.ru/8.3/xcf/extrnprops" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.19">
<Picture>
<xr:Abs>Picture.png</xr:Abs>
<xr:LoadTransparent>false</xr:LoadTransparent>
</Picture>
</ExtPicture>

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

View File

@@ -246,12 +246,14 @@
<ChildObjects> <ChildObjects>
<Language>Русский</Language> <Language>Русский</Language>
<Subsystem>ТелеграмБот</Subsystem> <Subsystem>ТелеграмБот</Subsystem>
<CommonPicture>КартинкаБот</CommonPicture>
<CommonModule>HttpОбщегоНазначения</CommonModule> <CommonModule>HttpОбщегоНазначения</CommonModule>
<CommonModule>ТелеграмМетодыВызовСервера</CommonModule> <CommonModule>ТелеграмМетодыВызовСервера</CommonModule>
<CommonModule>ТелеграмОбщегоНазначения</CommonModule> <CommonModule>ТелеграмОбщегоНазначения</CommonModule>
<CommonModule>ТелеграмПовторноеИспользование</CommonModule> <CommonModule>ТелеграмПовторноеИспользование</CommonModule>
<CommonModule>ТелеграмРегламент</CommonModule> <CommonModule>ТелеграмРегламент</CommonModule>
<CommonModule>РаботаСФайламиКлиентСервер</CommonModule> <CommonModule>РаботаСФайламиКлиентСервер</CommonModule>
<CommonModule>ТелеграмРаботаСКлавиатурой</CommonModule>
<HTTPService>HTTPСервис_Telegram</HTTPService> <HTTPService>HTTPСервис_Telegram</HTTPService>
<ScheduledJob>ПроверкаОбновленийТелеграм</ScheduledJob> <ScheduledJob>ПроверкаОбновленийТелеграм</ScheduledJob>
<Constant>ТелеграмТокен</Constant> <Constant>ТелеграмТокен</Constant>

View File

@@ -116,6 +116,7 @@
</v8:item> </v8:item>
</ToolTip> </ToolTip>
<Group>Vertical</Group> <Group>Vertical</Group>
<Representation>StrongSeparation</Representation>
<ExtendedTooltip name="ЗагрузкаДокументовРасширеннаяПодсказка" id="31"/> <ExtendedTooltip name="ЗагрузкаДокументовРасширеннаяПодсказка" id="31"/>
<ChildItems> <ChildItems>
<InputField name="ИдФайла" id="32"> <InputField name="ИдФайла" id="32">
@@ -129,10 +130,39 @@
<CommandName>Form.Command.СкачатьФайл</CommandName> <CommandName>Form.Command.СкачатьФайл</CommandName>
<ExtendedTooltip name="СкачатьФайлРасширеннаяПодсказка" id="36"/> <ExtendedTooltip name="СкачатьФайлРасширеннаяПодсказка" id="36"/>
</Button> </Button>
<Button name="ПолучитьФайл" id="37"> </ChildItems>
</UsualGroup>
<UsualGroup name="SendDocument" id="39">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Send document</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Send document</v8:content>
</v8:item>
</ToolTip>
<Representation>StrongSeparation</Representation>
<ExtendedTooltip name="SendDocumentРасширеннаяПодсказка" id="40"/>
<ChildItems>
<InputField name="ИдЧата" id="45">
<DataPath>ИдЧата</DataPath>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="ИдЧатаКонтекстноеМеню" id="46"/>
<ExtendedTooltip name="ИдЧатаРасширеннаяПодсказка" id="47"/>
</InputField>
<Button name="SendDocument1" id="41">
<Type>UsualButton</Type> <Type>UsualButton</Type>
<CommandName>Form.Command.ПрочитатьФайл</CommandName> <CommandName>Form.Command.SendDocument</CommandName>
<ExtendedTooltip name="ПолучитьФайлРасширеннаяПодсказка" id="38"/> <ExtendedTooltip name="SendDocument1РасширеннаяПодсказка" id="42"/>
</Button>
<Button name="SendPhoto" id="43">
<Type>UsualButton</Type>
<CommandName>Form.Command.SendPhoto</CommandName>
<ExtendedTooltip name="SendPhotoРасширеннаяПодсказка" id="44"/>
</Button> </Button>
</ChildItems> </ChildItems>
</UsualGroup> </UsualGroup>
@@ -210,6 +240,25 @@
<Field>ИдФайла</Field> <Field>ИдФайла</Field>
</Save> </Save>
</Attribute> </Attribute>
<Attribute name="ИдЧата" id="6">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Ид чата</v8:content>
</v8:item>
</Title>
<Type>
<v8:Type>xs:decimal</v8:Type>
<v8:NumberQualifiers>
<v8:Digits>15</v8:Digits>
<v8:FractionDigits>0</v8:FractionDigits>
<v8:AllowedSign>Any</v8:AllowedSign>
</v8:NumberQualifiers>
</Type>
<Save>
<Field>ИдЧата</Field>
</Save>
</Attribute>
</Attributes> </Attributes>
<Commands> <Commands>
<Command name="ПолучитьСообщения" id="1"> <Command name="ПолучитьСообщения" id="1">
@@ -302,20 +351,35 @@
</ToolTip> </ToolTip>
<Action>СкачатьФайл</Action> <Action>СкачатьФайл</Action>
</Command> </Command>
<Command name="ПрочитатьФайл" id="7"> <Command name="SendDocument" id="8">
<Title> <Title>
<v8:item> <v8:item>
<v8:lang>ru</v8:lang> <v8:lang>ru</v8:lang>
<v8:content>Прочитать файл</v8:content> <v8:content>Send document</v8:content>
</v8:item> </v8:item>
</Title> </Title>
<ToolTip> <ToolTip>
<v8:item> <v8:item>
<v8:lang>ru</v8:lang> <v8:lang>ru</v8:lang>
<v8:content>Прочитать файл</v8:content> <v8:content>Send document</v8:content>
</v8:item> </v8:item>
</ToolTip> </ToolTip>
<Action>ПрочитатьФайл</Action> <Action>SendDocument</Action>
</Command>
<Command name="SendPhoto" id="7">
<Title>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Send photo</v8:content>
</v8:item>
</Title>
<ToolTip>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Send photo</v8:content>
</v8:item>
</ToolTip>
<Action>SendPhoto</Action>
</Command> </Command>
</Commands> </Commands>
</Form> </Form>

View File

@@ -1,30 +1,34 @@
&НаКлиенте &НаКлиенте
Процедура ПолучитьСообщения(Команда) Процедура ПолучитьСообщения(Команда)
//Сообщения = ""; Ответ = ПолучитьСообщенияНаСервере();
//Ответ = ТелеграмМетодыВызовСервера.GetUpdates(); ВывестиОтвет(Ответ);
//Если НЕ Ответ = Неопределено Тогда
// Сообщения = HttpОбщегоНазначения.ФорматированныйJson(Ответ);
//КонецЕсли;
ПолучитьСообщенияНаСервере();
КонецПроцедуры КонецПроцедуры
&НаСервереБезКонтекста &НаСервереБезКонтекста
Процедура ПолучитьСообщенияНаСервере() Функция ПолучитьСообщенияНаСервере()
Ответ = ТелеграмМетодыВызовСервера.GetUpdates(); Ответ = ТелеграмМетодыВызовСервера.GetUpdates();
Если Ответ <> Неопределено Тогда
МассивСообщенийТелеграм = ТелеграмОбщегоНазначения.ОбновленияТелеграм(Ответ); Если Ответ.Успех Тогда
МассивРядов = Новый Массив;
МассивКнопок = ТелеграмРаботаСКлавиатурой.РядКнопок("один;два;три");
МассивРядов.Добавить(МассивКнопок);
МассивКнопок = ТелеграмРаботаСКлавиатурой.РядКнопок("Выбрать конфигурацию;Актуальная версия;Калькулятор обновлений");
МассивРядов.Добавить(МассивКнопок);
Клавиатура = ТелеграмРаботаСКлавиатурой.КлавиатураОтвета(МассивРядов, Истина, Истина);
МассивСообщенийТелеграм = ТелеграмОбщегоНазначения.ОбновленияТелеграм(Ответ.Тело);
Для каждого СообщениеТелеграм Из МассивСообщенийТелеграм Цикл Для каждого СообщениеТелеграм Из МассивСообщенийТелеграм Цикл
ТелеграмОбщегоНазначения.СохранитьСообщениеВБазу(СообщениеТелеграм); ТелеграмОбщегоНазначения.СохранитьСообщениеВБазу(СообщениеТелеграм);
//ТелеграмМетодыВызовСервера.SendMessage(СообщениеТелеграм.ИдЧата, СообщениеТелеграм.Сообщение.text) ТелеграмМетодыВызовСервера.SendMessage(СообщениеТелеграм.ИдЧата, СообщениеТелеграм.Сообщение.text, Клавиатура);
КонецЦикла; КонецЦикла;
КонецЕсли; КонецЕсли;
КонецПроцедуры Возврат Ответ;
КонецФункции
&НаКлиенте &НаКлиенте
Процедура getWebhookInfo(Команда) Процедура getWebhookInfo(Команда)
@@ -66,44 +70,21 @@
КонецПроцедуры КонецПроцедуры
&НаКлиенте &НаКлиенте
Процедура ВывестиОтвет(Ответ) Процедура ВывестиОтвет(Ответ)
ТекстСообщения = СтрШаблон("Выполнено %1.%2%3", ?(Ответ.Успех, "успешно", "с ошибкой"), Символы.ПС, Ответ.Описание);
Сообщение = Новый СообщениеПользователю; Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = HttpОбщегоНазначения.ФорматированныйJson(Ответ); Сообщение.Текст = ТекстСообщения;
Сообщение.Сообщить(); Сообщение.Сообщить();
КонецПроцедуры КонецПроцедуры
//&НаСервереБезКонтекста
//Функция СкачатьФайлНаСервере(ПутьКФайлуНаСервере)
//
// АдресРесурса = СтрШаблон("file/bot%1/%2",
// ТелеграмПовторноеИспользование.ТелеграмТокен(),
// ПутьКФайлуНаСервере);
// Ответ = HttpОбщегоНазначения.ВыполнитьGetЗапросДвоичныеДанные(АдресРесурса);
// МенеджерЗаписи = РегистрыСведений.ТелеграмФайлы.СоздатьМенеджерЗаписи();
// //МенеджерЗаписи.ИдСообщения = 336;
// //МенеджерЗаписи.Данные = Новый ХранилищеЗначения(Ответ, Новый СжатиеДанных(0));
// //МенеджерЗаписи.ИмяФайла = "13_05_2025_09_42_108907060608184446656.json";
//
// МенеджерЗаписи.ИдСообщения = 339;
// МенеджерЗаписи.Данные = Новый ХранилищеЗначения(Ответ, Новый СжатиеДанных(0));
// МенеджерЗаписи.ИмяФайла = "test.pdf";
//
// МенеджерЗаписи.Записать();
//
// Возврат Ответ;
//
//КонецФункции
&НаКлиенте &НаКлиенте
Процедура СкачатьФайл(Команда) Процедура СкачатьФайл(Команда)
//ИдФайла = "BQACAgIAAxkBAAIBUmgkRZKtR_4WXvoykjdfXKTFHCvdAAItegACYyUhSQ9mNituwQR1NgQ";
СкачатьФайлНаСервере(ИдФайла); СкачатьФайлНаСервере(ИдФайла);
@@ -124,7 +105,6 @@
&НаСервереБезКонтекста &НаСервереБезКонтекста
Процедура СкачатьФайлНаСервере(ИдФайла) Процедура СкачатьФайлНаСервере(ИдФайла)
НовыйДокумент = Справочники.ТелеграмДокумент.СоздатьЭлемент(); НовыйДокумент = Справочники.ТелеграмДокумент.СоздатьЭлемент();
НовыйДокумент.Наименование = "Тестовый документ"; НовыйДокумент.Наименование = "Тестовый документ";
НовыйДокумент.id = "AgADLXoAAmMlIUk"; НовыйДокумент.id = "AgADLXoAAmMlIUk";
@@ -133,9 +113,9 @@
НовыйДокумент.mime_type = "application/pdf"; НовыйДокумент.mime_type = "application/pdf";
НовыйДокумент.file_size = 811482; НовыйДокумент.file_size = 811482;
ДанныеДокумента = ТелеграмОбщегоНазначения.ДанныеДокументаПоИд(ИдФайла); Ответ = ТелеграмОбщегоНазначения.ДанныеДокументаПоИд(ИдФайла);
Если ДанныеДокумента <> Неопределено Тогда Если Ответ.Успех Тогда
НовыйДокумент.ДанныеФайла = Новый ХранилищеЗначения(ДанныеДокумента); НовыйДокумент.ДанныеФайла = Новый ХранилищеЗначения(Ответ.Тело);
КонецЕсли; КонецЕсли;
НовыйДокумент.Записать(); НовыйДокумент.Записать();
@@ -146,60 +126,46 @@
КонецПроцедуры КонецПроцедуры
&НаКлиенте &НаКлиенте
Процедура ПрочитатьФайл(Команда) Процедура SendDocument(Команда)
ДанныеДокумента = ДанныеДокументаСервер();
Ответ = ТелеграмМетодыВызовСервера.SendDocument(ИдЧата, ДанныеДокумента, "Отправлен документ");
ДанныеФайла = ПолучитьДанныеФайла();
Если ДанныеФайла <> Неопределено Тогда
Если ДанныеФайла.Свойство("ДвоичныеДанные") И ДанныеФайла.Свойство("ИмяФайла") Тогда
ИмяВременногоФайла = ПолучитьИмяВременногоФайла(ПолучитьРасширениеИмениФайла(ДанныеФайла.ИмяФайла));
ДанныеФайла.ДвоичныеДанные.Записать(ИмяВременногоФайла);
ЗапуститьПриложениеАсинх(ИмяВременногоФайла);
КонецЕсли;
КонецЕсли;
КонецПроцедуры КонецПроцедуры
&НаСервереБезКонтекста &НаСервереБезКонтекста
Функция ПолучитьДанныеФайла() Функция ДанныеДокументаСервер()
Запрос = Новый Запрос; Запрос = Новый Запрос;
Запрос.Текст = Запрос.Текст =
"ВЫБРАТЬ "ВЫБРАТЬ
| ТелеграмФайлы.Данные КАК Данные, | ТелеграмДокумент.ДанныеФайла КАК ДанныеФайла,
| ТелеграмФайлы.ИмяФайла КАК ИмяФайла | ТелеграмДокумент.file_name КАК ИмяФайла
|ИЗ |ИЗ
| РегистрСведений.ТелеграмФайлы КАК ТелеграмФайлы | Справочник.ТелеграмДокумент КАК ТелеграмДокумент";
|ГДЕ
| ТелеграмФайлы.ИдСообщения = &ИдСообщения";
//Запрос.УстановитьПараметр("ИдСообщения", 336);
Запрос.УстановитьПараметр("ИдСообщения", 338);
РезультатЗапроса = Запрос.Выполнить(); РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда Если ВыборкаДетальныеЗаписи.Следующий() Тогда
ДвоичныеДанные = ВыборкаДетальныеЗаписи.Данные.Получить(); Возврат Новый Структура("ИмяФайла, ДанныеФайла", ВыборкаДетальныеЗаписи.ИмяФайла, ВыборкаДетальныеЗаписи.ДанныеФайла.Получить());
ИмяФайла = ВыборкаДетальныеЗаписи.ИмяФайла;
Возврат Новый Структура("ДвоичныеДанные, ИмяФайла", ДвоичныеДанные, ИмяФайла);
КонецЕсли; КонецЕсли;
Возврат Неопределено;
КонецФункции КонецФункции
&НаКлиенте
Процедура SendPhoto(Команда)
ДанныеКартинки = ДанныеКартинки();
Ответ = ТелеграмМетодыВызовСервера.SendPhoto(ИдЧата, ДанныеКартинки, "telegram_bot.jpg", "Отправлено фото");
КонецПроцедуры
&НаСервереБезКонтекста &НаСервереБезКонтекста
Функция ПолучитьРасширениеИмениФайла(Знач ИмяФайла) Экспорт Функция ДанныеКартинки()
РасширениеФайла = ""; Возврат БиблиотекаКартинок.КартинкаБот.ПолучитьДвоичныеДанные();
МассивСтрок = СтрРазделить(ИмяФайла, ".", Ложь);
Если МассивСтрок.Количество() > 1 Тогда
РасширениеФайла = МассивСтрок[МассивСтрок.Количество() - 1];
КонецЕсли;
Возврат РасширениеФайла;
КонецФункции КонецФункции

View File

@@ -27,7 +27,7 @@
<xr:Item xsi:type="xr:MDObjectRef">Constant.ЛогироватьHttpЗапросы</xr:Item> <xr:Item xsi:type="xr:MDObjectRef">Constant.ЛогироватьHttpЗапросы</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Document.ЛогHttpЗапроса</xr:Item> <xr:Item xsi:type="xr:MDObjectRef">Document.ЛогHttpЗапроса</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Catalog.ТелеграмДокумент</xr:Item> <xr:Item xsi:type="xr:MDObjectRef">Catalog.ТелеграмДокумент</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">c3c88554-5bc5-41b7-ae33-7a29b983d784</xr:Item> <xr:Item xsi:type="xr:MDObjectRef">CommonPicture.КартинкаБот</xr:Item>
</Content> </Content>
</Properties> </Properties>
<ChildObjects/> <ChildObjects/>

View File

@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<VERSION>2</VERSION> <VERSION>4</VERSION>