Страница 1 из 1

MyChat 7.6.0 - многострочный текст при отправке из 1С через REST

СообщениеДобавлено: Ср авг 28, 2019 3:58 pm
ANDiv
Форматирование строки не отрабатывается в майчате при передачи текста из 1С!
Сделал код схожим как в примере:

Код: Выделить всё
РазделительСтрок = "\r\n";
   ТекстСообщения = "Задача "+ДанныеОтправки.ТочкаМаршрута.НаименованиеЗадачи+""""+ДанныеОтправки.Наименование+""""+" от "+ДанныеОтправки.ДатаСтарта;
   ТекстСообщения = ТекстСообщения + Символы.ВК + Символы.ПС + "Срок исполнения: "+ДанныеОтправки.СрокИсполнения;
   ТекстСообщения = ТекстСообщения + Символы.ВК + Символы.ПС + "Задачу поставил: "+ДанныеОтправки.Автор;
   ТекстСообщения = ТекстСообщения + Символы.ВК + Символы.ПС + "Описание задачи: "+ДанныеОтправки.Описание;
   
   ТекстСообщения = СтрЗаменить(ТекстСообщения, "\", "/"); // замена обратного слэша на прямой
   ТекстСообщения = СтрЗаменить(ТекстСообщения, Символы.ПС, РазделительСтрок);
   ТекстСообщения = СтрЗаменить(ТекстСообщения, """", "'"); // замена двойной кавычки на одинарную

при выводе в майчате получаем текст:

Задача Согласовать'тестовая задача' от 28.08.2019 14:44:27\r\nСрок исполнения: 29.08.2019 14:44:00\r\nЗадачу поставил: ФИО пользователя\r\nОписание задачи: тестовый текст задачи

Re: MyChat 7.6.0 - форматирование строки

СообщениеДобавлено: Ср авг 28, 2019 4:24 pm
Алексей Пикуров
Перенёс тему в раздел скриптов. Посмотрите содержимое JSON объекта перед отправкой, что там?

Re: MyChat 7.6.0 - форматирование строки

СообщениеДобавлено: Чт авг 29, 2019 8:47 am
ANDiv
Если следовать вашему примеру то в строке JSON вот такой код:
Код: Выделить всё
{
"cmd": "0002",
"UserFrom": "432",
"UserTo": "nickname",
"Msg": "Задача Согласовать'тестовая задачаё' от 29.08.2019 8:40:42\rСрок исполнения: 30.08.2019 8:40:00\rЗадачу поставил: имя пользователя\rОписание задачи: тестовое описание задачи",
"APIStype": "mcrest",
"ServerKey": "пароль"
}

на выходе майчата получаем вот такой текст:
Код: Выделить всё
Задача Согласовать'тестовая задачаё' от 29.08.2019 8:40:42Срок исполнения: 30.08.2019 8:40:00Задачу поставил: nickname Описание задачи: тестовое описание задачи


Попробовал следовать правилам JSON и сформировать строку другим путем. Строки текста решил выводить через массив:
Код: Выделить всё
{
"cmd": "0002",
"UserFrom": "432",
"UserTo": "nickname",
"APIStype": "mcrest",
"ServerKey": "пароль",
"Msg": [
"Задача Согласовать\"тестовая задача\" от 29.08.2019 8:39:23",
"Срок исполнения: 30.08.2019 8:39:00",
"Задачу поставил: nickname",
"Описание задачи: тестовое описание задачи"
]
}

На выходе в майчате получаем:
Код: Выделить всё
 ["Задача Согласовать\"тестовая задача\" от 29.08.2019 8:39:23","Срок исполнения: 30.08.2019 8:39:00","Задачу поставил: nickname","Описание задачи: тестовое описание задачи"]

Re: MyChat 7.6.0 - форматирование строки

СообщениеДобавлено: Чт авг 29, 2019 8:57 am
Георгий Лысенко
Для корректной работы переноса строк используйте не \r, a \r\n и обязательно произведите urlencode результирующей JSON-строки.

Re: MyChat 7.6.0 - форматирование строки

СообщениеДобавлено: Чт авг 29, 2019 9:15 am
ANDiv
\r\n - тот же результат. данная управляющая цепочка выводится как обычный текст и весь текст в одну строку.
при кодировании всего JSON текста - ничего не происходит. MyChat - не выводит текст.
при кодировании только MSG строки - майчат выводит так же закодированную в URL формат строку.

Re: MyChat 7.6.0 - форматирование строки

СообщениеДобавлено: Чт авг 29, 2019 9:21 am
Георгий Лысенко
Вся строка запроса в результате должна выглядеть приблизительно так:
Код: Выделить всё
http://127.0.0.1/API/?data=%7B%0A%22cmd%22%3A%20%220002%22%2C%0A%22UserFrom%22%3A%20%22432%22%2C%0A%22UserTo%22%3A%20%22nickname%22%2C%0A%22Msg%22%3A%20%22%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0%20%D0%A1%D0%BE%D0%B3%D0%BB%D0%B0%D1%81%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%27%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D0%B0%D1%8F%20%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0%D1%91%27%20%D0%BE%D1%82%2029.08.2019%208%3A40%3A42%5Cr%5Cn%D0%A1%D1%80%D0%BE%D0%BA%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F%3A%2030.08.2019%208%3A40%3A00%5Cr%5Cn%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D1%83%20%D0%BF%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D0%BB%3A%20%D0%B8%D0%BC%D1%8F%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F%5Cr%5Cn%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8%3A%20%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D0%BE%D0%B5%20%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8%22%2C%0A%22APIStype%22%3A%20%22mcrest%22%2C%0A%22ServerKey%22%3A%20%22%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8C%22%0A%7D

Только что проверил, использовал \r\n для переноса строки, все работает корректно.

Re: MyChat 7.6.0 - форматирование строки

СообщениеДобавлено: Чт авг 29, 2019 9:46 am
ANDiv
Код: Выделить всё
http://192.168.1.231:8080/API/?data=%7B%0A%22cmd%22%253A%20%220002%22%252C%0A%22UserFrom%22%253A%20%22432%22%252C%0A%22UserTo%22%253A%20%22NickName%22%252C%0A%22Msg%22%253A%20%22Test%22%252C%0A%22APIStype%22%253A%20%22mcrest%22%252C%0A%22ServerKey%22%253A%20%22Пароль%22%0A%7D

Не работает!
Возвращает - Access denied. Can't convert data to object

Код: Выделить всё
http://192.168.1.231:8080/API/?data={"cmd":"0002","UserFrom":"432","UserTo":"NickName","Msg":"Test","APIStype":"mcrest","ServerKey":"Пароль"}

Работает. Вывод текста происходит.

Передавал из браузера напрямую.

Re: MyChat 7.6.0 - форматирование строки

СообщениеДобавлено: Чт авг 29, 2019 9:51 am
ANDiv
Еще вот такой вариант работает:
Код: Выделить всё
http://192.168.1.231:8080/API/?data={%22cmd%22:%220002%22,%22UserFrom%22:%22432%22,%22UserTo%22:%22NickName%22,%22Msg%22:%22Test%22,%22APIStype%22:%22mcrest%22,%22ServerKey%22:%22Пароль%22}

Re: MyChat 7.6.0 - форматирование строки

СообщениеДобавлено: Чт авг 29, 2019 10:12 am
ANDiv
при добавлении в строке любого закодированного управляющего символа с кодом ниже %20 идет возврат ошибки. т.е. возникает ошибка с отработкой символа табуляции, возврат коретки и т.п.

Re: MyChat 7.6.0 - форматирование строки

СообщениеДобавлено: Чт авг 29, 2019 10:58 am
Алексей Пикуров
Пожалуйста, используйте тег code для обрамления строк, иначе текст нечитаемый.

Re: MyChat 7.6.0 - форматирование строки

СообщениеДобавлено: Чт авг 29, 2019 11:18 am
sertak
Приведенный тест из 1С не отправляется, т.к. мешает символ "Возврат каретки" (Символы.ВК), надо их заменить. Это стоит добавить в документацию.
Код: Выделить всё
ТекстСообщения = СтрЗаменить(ТекстСообщения, Символы.ВК, "");

Предполагаю даже, что в будущем еще мы еще столкнемся с символами из мира 1С, из-за которых сообщения не отправляются в MyChat.
После добавления этой строки JSON будет такой:
{"cmd":"0002","UserFrom":"0","UserTo":"3","Msg":"Задача Согласовать'тестовая задача' от 28.08.2019 14:44:27\r\nСрок исполнения: 29.08.2019 14:44:00\r\nЗадачу поставил: ФИО пользователя\r\nОписание задачи: тестовый текст задачи","APIStype":"mydata","ServerKey":"*************"}

Картинка чата с текстом:

1111.jpg

Re: MyChat 7.6.0 - форматирование строки

СообщениеДобавлено: Чт авг 29, 2019 12:03 pm
sertak
ANDiv, приведите, пожалуйста, весь ваш код, похоже я дал неверный совет в предыдущем сообщении. Скиньте и скрин окна MyChat.

Re: MyChat 7.6.0 - форматирование строки

СообщениеДобавлено: Чт авг 29, 2019 12:26 pm
sertak
У меня проблема с символами возникала при сборке JSON вручную из текста, потому и СтрЗаменить. А если ЗаписьJSON использовать, то должно нормально отрабатывать.

Re: MyChat 7.6.0 - многострочный текст при отправке из 1С через REST

СообщениеДобавлено: Чт авг 29, 2019 1:45 pm
ANDiv
Код: Выделить всё
Сервер = "192.168.1.231";
     Порт = 8080;
     Ресурс = "/API/?data=";
     Ключ = "ПышвордСервера";
   РазделительСтрок = "\r\n";
   //РазделительСтрок = "";
   ТекстСообщения = "Задача "+ДанныеОтправки.ТочкаМаршрута.НаименованиеЗадачи+""""+ДанныеОтправки.Наименование+""""+" от "+ДанныеОтправки.ДатаСтарта;
   ТекстСообщения = ТекстСообщения + Символы.ПС + "Срок исполнения: "+ДанныеОтправки.СрокИсполнения;
   ТекстСообщения = ТекстСообщения + Символы.ПС + "Задачу поставил: "+ДанныеОтправки.Автор;
   ТекстСообщения = ТекстСообщения + Символы.ПС + "Описание задачи: "+ДанныеОтправки.Описание;
   
   ТекстСообщения = СтрЗаменить(ТекстСообщения, "\", "/"); // замена обратного слэша на прямой
   ТекстСообщения = СтрЗаменить(ТекстСообщения, Символы.ПС, РазделительСтрок);
   ТекстСообщения = СтрЗаменить(ТекстСообщения, """", "'"); // замена двойной кавычки на одинарную
   ТекстСообщения = СтрЗаменить(ТекстСообщения, Символы.ВК, "");

         СтруктураДанных = Новый Структура;
   СтруктураДанных.Вставить("cmd", "0002");
   СтруктураДанных.Вставить("UserFrom", "432");
   СтруктураДанных.Вставить("UserTo", UINПолучателя);
   СтруктураДанных.Вставить("Msg", ТекстСообщения);
   СтруктураДанных.Вставить("APIStype", "mcrest");
   СтруктураДанных.Вставить("ServerKey", Ключ);   

         ЗаписьJSON = Новый ЗаписьJSON;
   ЗаписьJSON.УстановитьСтроку();
   ЗаписатьJSON(ЗаписьJSON, СтруктураДанных);
   СтрокаJSON = ЗаписьJSON.Закрыть();

Попытка
      HTTP = Новый HTTPСоединение(Сервер,Порт,,,,30);
      HTTPЗапрос = Новый HTTPЗапрос(Ресурс);
      HTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");
      HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
      Результат  = HTTP.ОтправитьДляОбработки(HTTPЗапрос);
      Если Результат.КодСостояния <> 200 Тогда
         Сообщить("Ошибка при отправке запроса: " + Результат.КодСостояния);
      КонецЕсли;
   Исключение
      Сообщить("Ошибка при отправке запроса: " + ОписаниеОшибки());
   КонецПопытки;


Re: MyChat 7.6.0 - многострочный текст при отправке из 1С через REST

СообщениеДобавлено: Чт авг 29, 2019 2:25 pm
sertak
Попробуйте так:
Код: Выделить всё
    Сервер = "192.168.1.231";
     Порт = 8080;
     Ресурс = "/API/?data=";
     Ключ = "ПышвордСервера";
   ТекстСообщения = "Задача "+ДанныеОтправки.ТочкаМаршрута.НаименованиеЗадачи+""""+ДанныеОтправки.Наименование+""""+" от "+ДанныеОтправки.ДатаСтарта;
   ТекстСообщения = ТекстСообщения + Символы.ВК + Символы.ПС + "Срок исполнения: "+ДанныеОтправки.СрокИсполнения;
   ТекстСообщения = ТекстСообщения + Символы.ВК + Символы.ПС + "Задачу поставил: "+ДанныеОтправки.Автор;
   ТекстСообщения = ТекстСообщения + Символы.ВК + Символы.ПС + "Описание задачи: "+ДанныеОтправки.Описание;
   
   //ТекстСообщения = СтрЗаменить(ТекстСообщения, "\", "/"); // замена обратного слэша на прямой
   //ТекстСообщения = СтрЗаменить(ТекстСообщения, Символы.ПС, РазделительСтрок);
   //ТекстСообщения = СтрЗаменить(ТекстСообщения, """", "'"); // замена двойной кавычки на одинарную
  // ТекстСообщения = СтрЗаменить(ТекстСообщения, Символы.ВК, "");

...

Re: MyChat 7.6.0 - многострочный текст при отправке из 1С через REST

СообщениеДобавлено: Чт авг 29, 2019 3:48 pm
ANDiv
Результат аналогичен!

Re: MyChat 7.6.0 - многострочный текст при отправке из 1С через REST

СообщениеДобавлено: Чт авг 29, 2019 3:51 pm
sertak
Прогнал у себя последний пример, выводит разными строками, как положено.
Проверьте еще раз: строки должны переноситься через Символы .ВК + Символы.ПС, а все СтрЗаменить должны быть удалены.

Re: MyChat 7.6.0 - многострочный текст при отправке из 1С через REST

СообщениеДобавлено: Чт авг 29, 2019 11:11 pm
sertak
Попробуйте почистить кэш 1С, довольно странно, что настолько по-разному отрабатывает один код.

Re: MyChat 7.6.0 - многострочный текст при отправке из 1С через REST

СообщениеДобавлено: Пт авг 30, 2019 7:47 am
sertak
Попробуйте выполнить мой код один в один:

Код: Выделить всё
&НаСервере
Процедура КомандаТестНаСервере()

   Сервер       = "**********";
   Порт       = 8081;
   UINОтправителя = 0;
   UINПолучателя    = ***;
   
   Ключ = "********";
   
   Ресурс = "API/?data=";

   ДанныеОтправки = новый Структура;
   ДанныеОтправки.Вставить("НаименованиеЗадачи", "Тестовая задача");
   ДанныеОтправки.Вставить("Наименование", "тест");
   ДанныеОтправки.Вставить("ДатаСтарта",ТекущаяДата() + 10000);
   ДанныеОтправки.Вставить("СрокИсполнения", ТекущаяДата() + 100000);
   ДанныеОтправки.Вставить("Автор", "Иванов Иван");
   ДанныеОтправки.Вставить("Описание", "Надо выполнить задачу");
   
   ТекстСообщения = "Задача "+ДанныеОтправки.НаименованиеЗадачи+""""+ДанныеОтправки.Наименование+""""+" от "+ДанныеОтправки.ДатаСтарта;
   ТекстСообщения = ТекстСообщения + Символы.ВК + Символы.ПС + "Срок исполнения: "+ДанныеОтправки.СрокИсполнения;
   ТекстСообщения = ТекстСообщения + Символы.ВК + Символы.ПС + "Задачу поставил: "+ДанныеОтправки.Автор;
   ТекстСообщения = ТекстСообщения + Символы.ВК + Символы.ПС + "Описание задачи: "+ДанныеОтправки.Описание;

   СтруктураДанных = Новый Структура;
   СтруктураДанных.Вставить("cmd", "0002");
   СтруктураДанных.Вставить("UserFrom", "0");
   СтруктураДанных.Вставить("UserTo", UINПолучателя);
   СтруктураДанных.Вставить("Msg", ТекстСообщения);
   СтруктураДанных.Вставить("APIStype", "mcrest");
   СтруктураДанных.Вставить("ServerKey", Ключ);   

   ЗаписьJSON = Новый ЗаписьJSON;
   ЗаписьJSON.УстановитьСтроку();
   ЗаписатьJSON(ЗаписьJSON, СтруктураДанных);
   СтрокаJSON = ЗаписьJSON.Закрыть();

   Попытка
      HTTP = Новый HTTPСоединение(Сервер,Порт,,,,30);
      HTTPЗапрос = Новый HTTPЗапрос(Ресурс);
      HTTPЗапрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");
      HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
      Результат  = HTTP.ОтправитьДляОбработки(HTTPЗапрос);
      Если Результат.КодСостояния <> 200 Тогда
         Сообщить("Ошибка при отправке запроса: " + Результат.КодСостояния);
      КонецЕсли;
   Исключение
      Сообщить("Ошибка при отправке запроса: " + ОписаниеОшибки());
   КонецПопытки;
 
КонецПроцедуры

Re: MyChat 7.6.0 - многострочный текст при отправке из 1С через REST

СообщениеДобавлено: Пн сен 02, 2019 9:55 am
ANDiv
Заработало!
После перехода с версии 7.6.0 на 7.7.0 и после того как убрал замену символов. хотя в примере оно было. Сейчас это убрано из примера.
Благодарю!

Re: MyChat 7.6.0 - многострочный текст при отправке из 1С через REST

СообщениеДобавлено: Пн сен 02, 2019 10:50 am
sertak
Да, дело в замене символов. Это я ввел разработчиков в заблуждение и предложил включить эти строки в пример. Извиняюсь, коллеги.

Re: MyChat 7.6.0 - многострочный текст при отправке из 1С через REST

СообщениеДобавлено: Пн сен 02, 2019 11:55 am
ANDiv
Главное нашли, исправили и все заработало!
Еще раз благодарю!