Страница 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
Главное нашли, исправили и все заработало!
Еще раз благодарю!