Интеграция с Max

11.03.26

Интеграция - Мессенджеры и боты

В статье приводятся некоторые сравнения между интеграциями с Max и Telegram.

Всем привет!

В данной статье будут показаны некоторые отличия между реализациями интеграций с Max и Telegram.

Интеграция с Telegram нами была реализована давно и включает в себя:

  • отправка и получение сообщений и вложений.
  • запуск и контроль процессов.
  • создание, контроль, выполнение задач.
  • конструктор произвольных чат-ботов.

Идентичный функционал реализован и для мессенджера Max.

 

В процессе реализации нами были отмечены некоторые отличия между API Max и Telegram, которые требовали внимания и реализации отдельных механизмов, чтобы обеспечить идентичность интеграций по функционалу и юзабилити.

Об этом и будет данная статья.

Надеемся, что кому-то данный материал покажется интересным и полезным!

 

С примером настройки можно сразу ознакомиться здесь: Пример создания сценария, запуска процесса и выполнения задач в мессенджерах Max и Telegram.

 

Введение

В целом подход к интеграции с Telegram и Max ничем не отличаются.

Всё сводится к отправке HTTP-запросов и обработке полученных ответов🙂

Конечно, адреса ресурсов, заголовки и тела запросов будут отличаться, но сами механизмы отправки запросов и обработки ответов одинаковые. За исключением некоторых отдельных нюансов, по-разному реализованных в двух API.

Интеграция с Telegram была в программе реализована достаточно давно - в конце 2020 года. И код этой интеграции уже превратился в своего рода легаси, который лишний раз трогать было не обязательно. Да бОльшая его часть последние несколько лет и не менялась, несмотря на то, что у пользователей некоторые чат-боты, настроенные в рамках нашей системы, имеют до 4000 зарегистрированных пользователей-клиентов.

Для интеграции с Max, если уже есть готовая (и рабочая) интеграция с Telegram, требуется в первую очередь рефакторинг существующего кода. Глубина рефакторинга будет зависеть от того, как весь код был написан изначально.

В нашем случае был модуль нс_Телеграм, процедуры и функции которого реализовывали механизмы интеграции.

Для новой интеграции с Max этот модуль был разделен на 2: нс_ЧатБоты и нс_Телеграм, а также добавлен новый модуль нс_Макс.

Не только отдельные функции и процедуры из одного модуля разъехались по разным модулям, но также и отдельные части некоторых процедур и функций разъехались по разным процедурам и функциям разных модулей.

В общем, такая работа - это отдельный вид удовольствия, который здесь нет смысла описывать.

Остановимся только на некоторых нюансах, которые потребовали отдельного внимания.

 

Создание и подключение чат-бота

Создание чат-бота в Max отличается от Telegram.

В Telegram это делается в самом мессенджере в специальном боте BotFather и доступно всем.

В Max требуется регистрация на портале Max с подтверждением учетной записи. Например, через Госуслуги.

 

После этого, в личном кабинете будет доступно создание чат-ботов.

 

 

Для целей интеграции для чат-бота генерируется токен, который позволяет отправлять запросы чат-боту и получать от него ответы.

 

 

Токен - единственное, что требуется для работы с API Max (как и с API Telegram).

 

 

Некоторые отличия в API

 

В целом, функциональный результат что в Telegram, что в Max получается одинаковый.

Форматированные сообщения с кнопками, возможность отправлять и получать разные виды вложений - это практически, всё, что требуется для организации взаимодействия человека с программой.

Визуально тоже всё очень похоже.

 

 

Но некоторые отличия, всё-таки, имеются.

 

ForceReply

В API Telegram есть объект ForceReply, который принудительно открывает режим ответа пользователю.

Когда пользователю приходит сообщение от чат-бота о необходимости указать какой-то комментарий, текст или вложение, в Telegram-клиенте можно сразу включить режим ответа на конкретное сообщение чат-бота.

В API Max такой возможности нет.

В Max это будет просто сообщение.

Ответ пользователя напрямую не будет связан с запросом от чат-бота.

Поэтому, в случае с Max потребуется дополнительно как-то сохранять "контекст", чтобы после получения ответа чат-бот понимал, что сообщение от пользователя относится именно к его предыдущему запросу.

На скриншотах ниже показано, как будет выглядеть поле ввода сообщения в Max (слева) и в Telegram (справа).

На изображении справа видно, что поле ввода текста/добавления вложений является ответом на запрос чат-бота о заполнении комментария:

 

 

"Внутри" это выглядит так:

 

 

В данных полученного сообщения Telegram есть поле reply_to_message, в котором есть информация о том, к чему относится полученный текст пользователя.

Программа видит контекст.

 

В случае с Max мы получаем только сообщение без привязки к сообщению от чат-бота.

Поэтому требуется некоторые дополнительные программный механизмы, чтобы сохранять контекст и иметь возможность корректно обрабатывать полученное сообщение от пользователя.

 

 

В целом, конечно, на результат это не влияет.

Пользователь, как правило, должен понимать (и понимает), что сообщение, следующее за запросом о вводе комментария, должно содержать комментарий, а не что-то иное. В противном случае в базу 1С попадет некорректная информация о результатах выполнения очередной задачи.

 

Отправка вложений

 

При отправке нескольких вложений из Max в одном сообщении, они приходят с сервера внутри одного сообщения (что и логично).

Для примера, при выполнении задачи отправим вместе с комментарием 2 фотографии:

 

 

Чат-бот при обработке сообщения видит, что в сообщении есть 2 файла (поле attachments - массив):

 

 

По каждому из вложений массива мы видим id и ссылку для скачивания:

 

 

После того, как чат-бот обработает сообщение, в Max будет отправлено сообщение об успешном выполнении задачи:

 

 

...а в базе 1С мы увидим 2 файла, который были отправлены исполнителем:

 

 

 

В Telegram, если несколько вложений были отправлены в одном сообщении, каждое вложение придет как отдельное сообщение.

И обрабатывать их будет нужно отдельно.

Поле photo будет содержать массив идентификаторов одного и того же изображения в разных размерах:

 

 

Поэтому результат, который увидит пользователь в Telegram будет немного отличаться.

Сначала придет сообщение об успешном выполнении задачи.

А затем придет второе сообщение о том, что в задачу добавлен файл.

 

 

Оба файла будут доступны в базе 1С:

 

 

В данном примере текст "В задачу добавлен файл" означает, что файл добавляется в уже выполненную задачу.

Этот же механизм позволяет дописывать комментарий в ранее выполненную задачу или добавлять, спустя время, дополнительные вложения:

Например, можно найти в истории сообщений ранее выполненную задачу, нажать у нее кнопку выполнения и добавить комментарий:

 

 

Комментарий появится в базе 1С:

 

 

Отправка вложений

 

Чтобы отправить вложение в Telegram достаточно 1 http-запроса.

Код примерно следующего содержания:

АдресЗапроса = "bot" + Токен + "/sendDocument";
						
ЗапросHTTP = Новый HTTPЗапрос(АдресЗапроса);
ЗапросHTTP.Заголовки.Вставить("Connection", "keep-alive");
ЗапросHTTP.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);
ЗапросHTTP.УстановитьТелоИзДвоичныхДанных(ДанныеВложения);

Попытка
	ОтветHTTP = Соединение.ОтправитьДляОбработки(ЗапросHTTP)
Исключение
	// Обработка ошибки
КонецПопытки;

 

Чтобы отправить вложение в Max, требуется 3 http-запроса:

  1. запрос на получение ссылки для загрузки.
  2. отправка(загрузка) файла по полученной ссылке.
  3. отправка ссылки получателю сообщения.

По 1-му пункту: запрос будет отличаться в зависимости от типа отправляемого файла.

По 2-му пункту, каких-то нюансов нет: получаем ссылку для загрузки и по ней отправляем файл:

// Хост + АдресРесурса - полученные в 1-ом запросе

Соединение = СоздатьСоединение(Хост, Настройки.Соединение.Таймаут);

Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", Токен);
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);

ТекущийЗаголовок = СтрШаблон(Заголовок, Вложение.ПолноеИмя);

Тело = Новый ПотокВПамяти;
ЗаписьДанных = Новый ЗаписьДанных(Тело);
ЗаписьДанных.ЗаписатьСтроку(ТекущийЗаголовок);
ЗаписьДанных.Записать(ПолучитьДвоичныеДанныеВложения(Вложение));
ЗаписьДанных.ЗаписатьСтроку(Подвал);
ЗаписьДанных.Закрыть();
		
ЗапросHTTP = Новый HTTPЗапрос(АдресРесурса, Заголовки);
ЗапросHTTP.УстановитьТелоИзДвоичныхДанных(Тело.ЗакрытьИПолучитьДвоичныеДанные());

Попытка
	
	ОтветHTTP = Соединение.ОтправитьДляОбработки(ЗапросHTTP);

Исключение

КонецПопытки;

 

3-ий запрос, следует выполнять не сразу, а как написано в документации по API Max: "После загрузки файла сделайте паузу перед отправкой сообщения".

В противном случае можно получить ошибку "{"code":"attachment.not.ready","message":"Key: errors.process.attachment.file.not.processed"}":

 

 

Поэтому данный момент следует учитывать при интеграции, чтобы файлы успешно доходили до получателя:

 

 

В общем, отправка вложений в Max, по сравнению в Telegram, более сложная.

С одной стороны, конечно, хотелось бы, чтобы всё это оставалось "под капотом" Max и мы могли отправлять вложение 1 запросом, как и в Telegram.

Но с другой стороны, вероятно, разработчики API Max придерживались какой-то оправданной логики.🙂

 

В остальном, реализация интеграции с Telegram и Max, более-менее похожа🙂

*По-крайней мере в той её части, которую реализовывали мы.

 

 

Пример создания сценария, запуска процесса и выполнения задач в мессенджерах Max и Telegram

 

После настроек попробуем сделать простой сценарий, запустим по нему процесс и выполним задачи, используя оба мессенеджера.

Разветвленный процесс как, например, на изображении ниже нам сейчас не потребуется - сейчас достаточно самого простого примера.

 

 

Создадим простой сценарий, в котором сначала надо проверить какое-то условие, по результатам которого процесс пойдет или в одну, или в другую сторону:

 

 

В задаче, в которой требуется проверить условие, переименуем стандартные кнопки "Да и "Нет":

 

 

В настройках автоматических оповещений добавим для задачи отправку сообщений исполнителю в 2 мессенджера: в Telegram и Max:

 

 

Для Max укажем отдельный чат-бот.

*Можно оставить поле пустым. Тогда система будет отправлять сообщения в основной чат-бот, указанный в настройках системы. Но если у нас несколько чат-ботов, мы можем указать какой именно следует использовать.

 

 

Процесс запущен.

Исполнителю пришли сообщения в Telegram и Max:

 

 

В Telegram мы нажали кнопку "В работу", чтобы в базе 1С у задачи изменился статус.

А в Max выполним задачу, добавив файл:

 

 

Комментарий + Файл отправлены в 1С, задача в 1С завершилась и мы получаем подтверждение:

 

 

Тексты сообщений, которые приходят в мессенджеры, можно изменить по своему усмотрению в настройках каждого чат-бота:

 

 

Задача была успешно выполнена и процесс перешел на следующий шаг.

На карте процесса мы видим текущее состояние процесса и добавленный файл:

 

 

На форме следующей задачи исполнитель видит комментарий, который оставил исполнитель по предыдущей задаче, и отправленное вложение:

 

 

Эту задачу можно выполнить в базе 1С, но сделаем это в Telegram.

Сначала получим список своих задач.

Затем выберем ту, которую хотим выполнить.

Отметим её выполнение, прикрепив вложение:

 

 

Задача успешно завершена, а в базе 1С на карте процесса мы видим, что процесс по нашему сценарию завершился.

Кроме этого, 2-ое вложение также будет доступно для просмотра:

 

 

Если присмотреться, то в списке вложений видно, что 1 вложение было сохранено в папку, а 2-ое - как присоединенный файл.

Вариант сохранения вложений настраивается в карточке чат-ботов:

 

 

Таким образом, выполнение задач доступно и в Telegram, и в Max. Функционал работы с задачами, при этом, идентичен.

 

На этом всё!

Надеемся, данная информация окажется для кого-то полезной.

Хорошего дня и успехов в делах! 👍

Вступайте в нашу телеграмм-группу Инфостарт

См. также

SALE! 50%

Мессенджеры и боты SMS рассылки Email рассылки Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

Расширение 1С с полным набором инструментов для качественных транзакционных, триггерных и маркетинговых рассылок Email, SMS, MAX, WhatsApp, Telegram. Даже простые уведомления об оплате счетов способны существенно упростить сбор дебиторской задолженности. Применение всех возможностей прямого маркетинга выводит коммуникацию с клиентами, уровень сервиса и лояльность на новый уровень.

6100 3050 руб.

07.04.2014    95027    79    200    

160

Мессенджеры и боты Учет документов 1С:Предприятие 8 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Расширение для согласования справочников и документов в основных типовых конфигурациях. Ролевая адресация, условная маршрутизация, чат-бот telegram, интеграция с n8n, последовательное и параллельное согласование, уведомление о новых задачах на почту, блокировка объектов в зависимости от статуса, запрет проведения в зависимости от статуса, автозапуск процессов согласования, отчеты по исполнительской дисциплине. Не требуется снятие конфигурации с поддержки. Настройка без программирования. Сертификат 1С-Совместимо.

14900 руб.

15.11.2018    41448    49    60    

83

Мессенджеры и боты 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Интеграция мессенджеров Max, WhatsApp и 1С: УНФ, УТ, КА, ERP - отправка и получение сообщений, картинок, файлов и видео прямо в 1С. Расширение работает с сервисом GreenApi.

30500 руб.

23.06.2023    16670    55    27    

60

Мессенджеры и боты Системный администратор Программист Бизнес-аналитик Пользователь Руководитель проекта 1С:Предприятие 8 Платные (руб)

Развитие популярного решения для интеграции мессенджера Telegram с нашей любимой 1С - конструктор чат-ботов в Телеграм.

15250 руб.

18.06.2021    83479    327    275    

402

Мобильная разработка Мессенджеры и боты 1С:Предприятие 8 Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13420 руб.

27.12.2021    51609    129    175    

227

Мессенджеры и боты 1С:Предприятие 8 Платные (руб)

Viber - самый популярный мессенджер в России. По данным компании J’son & Partners Consulting, в начале 2016 года программу использовали до 60 % владельцев смартфонов или около 60 млн россиян. В Viber есть инструменты для продвижения бизнеса, вовлечения и информирования аудитории. Мы предлагаем модуль интеграции 1С и Viber.

6000 руб.

04.04.2017    73088    73    72    

130
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Tpakmop 11 17.03.26 07:15 Сейчас в теме
Добры день, может кто подскажет как отправить файл по ссылке (multipart/form-data) где у вас Заголовок и Подвал что там подставлять и Boundary любой?
2. Bayker 17.03.26 14:53 Сейчас в теме
(1) Присоединяюсь к вопросу, уже голова болит, не могу понять, что ему надо.
То он отправляет определенный файл (у меня только pdf), но чаще ругается:
КодСостояния : 500. {"message":"Error read file content from request","code":"upload.error"}
Отправляю на уже полученную ссылку (2й этап), даже Postman не может, но если попробовать через пол-дня, все уходит.

Tpakmop, если получиться, напиши пожалуйста решение.
А Boundary наверное любой, у меня: Разделитель = СтрЗаменить(Новый УникальныйИдентификатор(), "-", "");
3. 1bpm 103 17.03.26 15:20 Сейчас в теме
(1) Попробуйте так:

Boundary = СтрЗаменить(Новый УникальныйИдентификатор(), "-", "");

Заголовки.Вставить("Authorization", Токен);
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary);

ЗаголовокТела = СтрШаблон("--%1
|Content-Disposition: form-data; name=""data""; filename=""Имя файла""
|Content-Type: application/octet-stream
|", ПараметрыОтправкиВложений.Boundary);

ПодвалТела = СтрШаблон(Символы.ПС + "--%1--", Boundary);

Тело = Новый ПотокВПамяти;

ЗаписьДанных = Новый ЗаписьДанных(Тело);

ЗаписьДанных.ЗаписатьСтроку(ЗаголовокТела);
ЗаписьДанных.Записать(ПолучитьДвоичныеДанныеВложения(Вложение));
ЗаписьДанных.ЗаписатьСтроку(ПараметрыОтправкиВложений.ПодвалТела);
ЗаписьДанных.Закрыть();

ДвоичныеДанные =  Тело.ЗакрытьИПолучитьДвоичныеДанные()

ЗапросHTTP.УстановитьТелоИзДвоичныхДанных(ДвоичныеДанные)
Показать
5. MissionOnly 25 18.03.26 14:08 Сейчас в теме
(3) Перепробовал все варианты отправки файла ВЛОЖЕНИЯ в ChatBot MAX. Запрос отправки всегда возвращает 403 ошибку. Может быть сталкивались с такой проблемой?
14. wrooom 281 21.03.26 13:52 Сейчас в теме
4. Tpakmop 11 17.03.26 15:42 Сейчас в теме
Нашел решение без form-data
	Соединение = Новый HTTPСоединение(Сайт, ,  ,  , , 60, Новый ЗащищенноеСоединениеOpenSSL);
	ИмяФайлаКод = КодироватьСтроку(ИмяФайла, СпособКодированияСтроки.КодировкаURL);
	
	Запрос = Новый HTTPЗапрос(Адрес);
	Запрос.Заголовки.Вставить("Authorization", Токен());
	Запрос.Заголовки.Вставить("Content-Type", "application/pdf");
	Запрос.Заголовки.Вставить("Content-Disposition", СтрШаблон("attachment; filename=%1", ИмяФайлаКод));
	
	РазмерФайла = ДД.Размер();
	Запрос.Заголовки.Вставить("Content-Range", "bytes 0-" + Формат(РазмерФайла - 1, "ЧН=0; ЧГ=") + "/" + Формат(РазмерФайла, "ЧН=0; ЧГ="));
	
	Запрос.УстановитьТелоИзДвоичныхДанных(ДД);
	
	Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Показать
Sector78; KrasnovRS; +2 Ответить
6. MissionOnly 25 18.03.26 14:30 Сейчас в теме
(4) Вы "Сайт+Адрес" выделяете из полученного URL (из первого запроса)?
7. Tpakmop 11 18.03.26 14:45 Сейчас в теме
(6) Да, всё правильно

	
        //url	- из 1 запроса

	Най = СтрНайти(url, "://");
	url = Сред(url, Най + 3); // убрал начало http://
	
	Най = СтрНайти(url, "/");
	Сайт = Лев(url, Най-1);
	Адрес = Сред(url, Най + 1);
	
//И дальше	
	Соединение = Новый HTTPСоединение(Сайт, ,  ,  , , 60, Новый ЗащищенноеСоединениеOpenSSL);
	Запрос = Новый HTTPЗапрос(Адрес);
Показать
8. MissionOnly 25 18.03.26 14:52 Сейчас в теме
(7) Попробовал ваш вариант. Код возврата 403 (как и остальные).
ДД = Новый ДвоичныеДанные(ИмяФайла); так?

У вас по этому запросу возвращается ТОКЕН отправленного файла?
ОТВЕТ на ЗАПРОС:
<!do ctype html><ht ml lang="en"><head><title>HTTP Status 403 – Forbidden</title><st yle type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 403 – Forbidden</h1></body></html>
9. Tpakmop 11 18.03.26 19:12 Сейчас в теме
(8)
403 – Forbidden

Так 403 у меня не было, это по идее на доступ ошибка, проверьте в заголовке чтобы был токен
10. MissionOnly 25 18.03.26 20:28 Сейчас в теме
(9) Идея появилась: обычный токен генерируется на хост "platform-api.max.ru". Но в этом запросе хост другой, возможно и токен нужно проставлять другой?
11. Tpakmop 11 19.03.26 06:46 Сейчас в теме
(10) Нет, токен тот же, вы видимо что-то не то делаете. Вот пример, проверил именно так у меня работает, только свой токен и имя файла

	Токен = "Ваш токен";
	ИмяФайла = "D:\Тест.pdf";
	
	Файл = Новый Файл(ИмяФайла);
	ДД = Новый ДвоичныеДанные(ИмяФайла);
	
	Соединение = Новый HTTPСоединение("platform-api.max.ru", ,  ,  , , 60, Новый ЗащищенноеСоединениеOpenSSL);;
	
	Запрос = Новый HTTPЗапрос("uploads?type=file");
	Запрос.Заголовки.Вставить("Authorization", Токен);
	
	Ответ = Соединение.ОтправитьДляОбработки(Запрос);
	ОтветВВидеСтроки = Ответ.ПолучитьТелоКакСтроку("UTF-8");
	
	Если Ответ.КодСостояния <> 200 Тогда
		Возврат;
	КонецЕсли;

	Чтение = Новый ЧтениеJSON;
	Чтение.УстановитьСтроку(ОтветВВидеСтроки);
	Данные = ПрочитатьJSON(Чтение, , );
	Чтение.Закрыть();
	
	url = Данные.url;

	Най = СтрНайти(url, "://");
	url = Сред(url, Най + 3);
	
	Най = СтрНайти(url, "/");
	Сайт = Лев(url, Най-1);
	Адрес = Сред(url, Най + 1);
		
	Соединение = Новый HTTPСоединение(Сайт, ,  ,  , , 60, Новый ЗащищенноеСоединениеOpenSSL);
	
	ИмяФайлаКод = КодироватьСтроку(Файл.Имя, СпособКодированияСтроки.КодировкаURL);
	
	Запрос = Новый HTTPЗапрос(Адрес);
	Запрос.Заголовки.Вставить("Authorization", Токен);
	Запрос.Заголовки.Вставить("Content-Type", "application/pdf");
	Запрос.Заголовки.Вставить("Content-Disposition", СтрШаблон("attachment; filename=%1", ИмяФайлаКод));
	
	РазмерФайла = ДД.Размер();
	Запрос.Заголовки.Вставить("Content-Range", "bytes 0-" + Формат(РазмерФайла - 1, "ЧН=0; ЧГ=") + "/" + Формат(РазмерФайла, "ЧН=0; ЧГ="));
	
	Запрос.УстановитьТелоИзДвоичныхДанных(ДД);
	
	Ответ = Соединение.ОтправитьДляОбработки(Запрос);
	ОтветВВидеСтроки = Ответ.ПолучитьТелоКакСтроку("UTF-8");
	
	Если Ответ.КодСостояния = 200 Тогда
		Чтение = Новый ЧтениеJSON;
		Чтение.УстановитьСтроку(ОтветВВидеСтроки);
		Данные = ПрочитатьJSON(Чтение, , );
		Чтение.Закрыть();
		
		Сообщить(Данные.token);
	КонецЕсли;
Показать
kns005; MissionOnly; +2 Ответить
12. MissionOnly 25 19.03.26 10:21 Сейчас в теме
(11) Спасибо, огромное, очень помог.
13. kns005 19.03.26 12:20 Сейчас в теме
(11) Спасибо, с pdf-файлом все работает!
Хочу отправить картинку. В первом запросе в адресе пишу "/uploads?type=image", во втором запросе в заголовках Content-Type - "image/jpeg". Запрос отправляется, в ответ приходит error_code=4, error_data=BAD_REQUEST.
Не подскажете, как картинку отправить?
17. MissionOnly 25 24.03.26 10:26 Сейчас в теме
(13) Используйте "file".
24. KrasnovRS 26.03.26 19:26 Сейчас в теме
(13) Для упрощения и унификации алгоритма везде использую "/uploads?type=file" и в Content-Type - СтрШаблон("application/%1",Расширение)) Расширение беру от самого файла. С Jpeg тоже работает
18. Sector78 24.03.26 19:29 Сейчас в теме
(11) Скажите как отправить файл из 1с пользователю? В телеге было просто указать ID пользователя, как тут это происходит?
21. Tpakmop 11 25.03.26 17:40 Сейчас в теме
(18) Отправить сообщение с файлом уже не проблема, там так же как в телеге нужен ID пользователя, только файл предварительно нужно загрузить, как - выше я писал (2 запроса). Потом нужна пауза (1 секунда у меня стоит) и только потом 3й запрос уже сама отправка сообщения (метод POST):

messages?user_id=<id пользователя>

В теле у вас должно быть примерно так:

{
"text": "<Текст сообщения>",
"attachments": [
{
"type": "file",
"payload": {
"token": "Токен на файл"
}
}
]
}

Это как раз у них нормально расписано на сайте, а вот с загрузкой файлов не совсем очевидно
22. 1bpm 103 25.03.26 18:53 Сейчас в теме
(21)
1 секунда у меня стоит


как кажется, лучше не фиксированную паузу, а ожидание с "таймаутом".
самый простой вариант:

Результат = ВложениеНеГотово();
		Пока Результат = ВложениеНеГотово() Цикл
			Результат = ОтправитьСообщение(Параметры);
			Если ТекущаяУниверсальнаяДатаВМиллисекундах() - НачалоОтправки > ВремяОжиданияОтправкиВложения Тогда
				прервать	
			КонецЕсли
		КонецЦикла
23. KrasnovRS 26.03.26 19:21 Сейчас в теме
(4) Спасибо тебе мил человек!!! метод полностью рабочий!
15. cybjavax 42 23.03.26 15:28 Сейчас в теме
У макса есть метод с параметрами в адресной строке? У телеги была такая возможность, можно было просто http строку формировать с параметрами в самой строке token, chatid и text, а не с json в багажнике.
16. 1bpm 103 23.03.26 19:49 Сейчас в теме
(15) бОльшую часть надо в багажник складывать) "строкой" совсем немного можно передать. user_id, например, и еще некоторое. Всё остальное - в теле.
19. Sector78 24.03.26 20:19 Сейчас в теме
Как и где передается user_id?
27. KrasnovRS 31.03.26 11:47 Сейчас в теме
Смотри обновления которые к тебе приходят, в зависимости от того колбэк это или новое сообщение по разному будет
20. Sector78 25.03.26 16:39 Сейчас в теме
Разобрался, нужно сделать ещё один запрос, и отправить получателю сообщение с полученным токеном
25. пользователь 29.03.26 18:49
Сообщение было скрыто модератором.
...
26. serega7 31.03.26 08:03 Сейчас в теме
а есть пример приема файла от пользователя? файл приходит, записываю тело как двоичные данные, а там в теле служебные данные, типа (--filename=sdf....) и т.п...
Для отправки сообщения требуется регистрация/авторизация