- Реализовал структуры для клавиатуры в ответе
- Добавил метод отправки фото
This commit is contained in:
@@ -69,6 +69,9 @@
|
||||
Запрос.УстановитьТелоИзДвоичныхДанных(Данные.ДвоичныеДанные);
|
||||
Запрос.Заголовки.Вставить("Content-Length", Формат(Данные.ДвоичныеДанные.Размер(), "ЧН=0; ЧГ="));
|
||||
Запрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Данные.Разделитель);
|
||||
Иначе
|
||||
Запрос.Заголовки.Вставить("Content-Type","application/json");
|
||||
Запрос.УстановитьТелоИзСтроки(HttpОбщегоНазначения.ОбъектВСтрокуJson(Данные));
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
Запрос.Заголовки.Вставить("Content-Type","application/json");
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
#Область ПрограммныйИнтерфейс
|
||||
|
||||
Функция SendMessage(ИдЧата, СообщениеДляОтправки) Экспорт
|
||||
Функция SendMessage(ИдЧата, СообщениеДляОтправки, Клавиатура = Неопределено) Экспорт
|
||||
|
||||
ТелоЗапроса = Новый Структура("chat_id, text", ИдЧата, СообщениеДляОтправки);
|
||||
|
||||
Если Клавиатура <> Неопределено Тогда
|
||||
ТелоЗапроса.Вставить("reply_markup", Клавиатура);
|
||||
КонецЕсли;
|
||||
|
||||
АдресРесурса = АдресРесурсаПоИмениМетода("sendMessage");
|
||||
Возврат 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", ИмяПараметра));
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипСодержимого <> Неопределено Тогда
|
||||
|
||||
@@ -45,7 +45,13 @@
|
||||
|
||||
Функция ОбновленияТелеграм(ТелоЗапроса) Экспорт
|
||||
|
||||
ДанныеОбновления = HttpОбщегоНазначения.СтрокаJsonВОбъект(ТелоЗапроса);
|
||||
Если ТипЗнч(ТелоЗапроса) = Тип("Соответствие") Тогда
|
||||
ДанныеОбновления = ТелоЗапроса;
|
||||
ИначеЕсли ТипЗнч(ТелоЗапроса) = Тип("Строка") Тогда
|
||||
ДанныеОбновления = HttpОбщегоНазначения.СтрокаJsonВОбъект(ТелоЗапроса);
|
||||
Иначе
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
МассивСообщенийТелеграм = Новый Массив;
|
||||
|
||||
|
||||
23
src/cf/CommonModules/ТелеграмРаботаСКлавиатурой.xml
Normal file
23
src/cf/CommonModules/ТелеграмРаботаСКлавиатурой.xml
Normal 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>
|
||||
@@ -0,0 +1,45 @@
|
||||
Функция КлавиатураОтвета(Клавиатура, Компактная = Ложь, Одноразовая = Ложь) Экспорт
|
||||
|
||||
СоответствиеКлавиатуры = Новый Соответствие();
|
||||
|
||||
СоответствиеКлавиатуры.Вставить("keyboard", Клавиатура);
|
||||
|
||||
Если Компактная Тогда
|
||||
СоответствиеКлавиатуры.Вставить("resize_keyboard", Компактная);
|
||||
КонецЕсли;
|
||||
|
||||
Если Одноразовая Тогда
|
||||
СоответствиеКлавиатуры.Вставить("one_time_keyboard", Одноразовая);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат СоответствиеКлавиатуры;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция КнопкаКлавиатуры(Надпись) Экспорт
|
||||
|
||||
СоответствиеКнопка = Новый Соответствие;
|
||||
СоответствиеКнопка.Вставить("text", ?(НЕ ЗначениеЗаполнено(Надпись), "<?>", Надпись));
|
||||
Возврат СоответствиеКнопка;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция РядКнопок(СписокНаименованийКнопокСтрокой) Экспорт
|
||||
|
||||
Результат = Новый Массив;
|
||||
МассивНаименованийКнопок = СтрРазделить(СписокНаименованийКнопокСтрокой, ";");
|
||||
|
||||
Если МассивНаименованийКнопок.Количество() = 0 Тогда
|
||||
Возврат Результат;
|
||||
КонецЕсли;
|
||||
|
||||
Для каждого НадписьКнопки Из МассивНаименованийКнопок Цикл
|
||||
Результат.Добавить(КнопкаКлавиатуры(НадписьКнопки));
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user