Как правильно составить строку batch запроса для группового обновления полей контактов в битрикс crm
Платформа 1С v8.3
1С:Франчайзи, автоматизация бизнеса
Корп. решения 1С
Автоматизация
Битрикс
Программист
Добрый день! Вопрос по веб -хукам Битрикса. Подскажите, пожалуйста, как правильно собрать строку для batch запроса с методом crm.contact.update ? Метод crm.contact.add прекрасно добавляет новых пользователей пачкой. А вот с обновлением полей никак не могу разобраться. Битрикс облачная версия. 1с - версия платформы 8.3
Найденные решения
Можно и урл-энкодед. Тоже успешно
%26 - это амперсанд после урл-кодирования.
POST /rest/batch HTTP/1.1
Host: ***.bitrix24.ru
Content-Type: application/x-www-form-urlencoded
auth=***&cmd[1]=crm.contact.update?id=1%26fields[NAME]=TestThree&cmd[2]=crm.contact.update?id=3%26fields[NAME]=TestFour
%26 - это амперсанд после урл-кодирования.
Прикрепленные файлы:

Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
смотрели?
https://dev.1c-bitrix.ru/rest_help/crm/cases/edit/how_to_change_email_or_phone.php
Подскажите, пожалуйста, как правильно собрать строку для batch запроса с методом crm.contact.update
смотрели?
Под рукой есть работающий batch. Правда не вебхуки а обычный REST и метод другой. Но работает - проверил только что. Думаю, у Вас по аналогии.
auth - в вебхуках не нужен, т.е. только cmd
POST /rest/batch HTTP/1.1
Host: ***.bitrix24.ru
Content-Type: application/json
{
"auth": "***",
"cmd": {
"cmd1": "crm.invoice.get?id=1",
"cmd2": "crm.invoice.get?id=3"
}
}
Показатьauth - в вебхуках не нужен, т.е. только cmd
Т.е. в Б24 можно json-ами пуляться, так удобнее на мой взгляд. Главное заголовок поставьте Content-Type: application/json, установите тело из JSON-строки, а в cmd1, cmd2 (максимум 50) - передавайте те команды, которые у Вас нормально по одной отрабатываются.
Вот только что апдейт проверил, опять же не хуки, а обычный рест. Работает.
POST /rest/batch HTTP/1.1
Host: ***.bitrix24.ru
Content-Type: application/json
{
"auth": "***",
"cmd": {
"cmd1": "crm.contact.update?id=1&fields[NAME]=TestCmdNameOne",
"cmd2": "crm.contact.update?id=3&fields[NAME]=TestCmdNameTwo"
}
}
ПоказатьПрикрепленные файлы:

Можно и урл-энкодед. Тоже успешно
%26 - это амперсанд после урл-кодирования.
POST /rest/batch HTTP/1.1
Host: ***.bitrix24.ru
Content-Type: application/x-www-form-urlencoded
auth=***&cmd[1]=crm.contact.update?id=1%26fields[NAME]=TestThree&cmd[2]=crm.contact.update?id=3%26fields[NAME]=TestFour
%26 - это амперсанд после урл-кодирования.
Прикрепленные файлы:

(12) PostMan пока что не осилил. В этой теме пока что новичок. Использую консоль http запросов в 1с-ке
Смотрите, метод авторизации использую basic (логин,пароль)
Строчку запроса пробовал собирать так:
1)rest/8499/tonaxz4ernhf3uy1m/batch?cmd[1]=crm.contact.update?id=8225%26fields%5BNAME%5D%3DGoma%20Oleg
После Вашего совета Так:
2)rest/8499/tonaxz4ernhf3uy1m/batch?cmd[1]=crm.contact.update?id=8225%26fields[NAME]=Goma Oleg
Результат один и тот же , изменений нет.
Ответ получаю:http://joxi.ru/E2pjj0BtGXg78r
При чем собранный по аналогии с вариантом запрос add отрабатывает "на ура"
rest/8499/tonaxz4ernhf3uy1m/batch?halt=1&cmd[tt]=crm.contact.add%3Ffields%5BNAME%5D%3Dsvitlana%20svetlanovna%26fields%5BSECOND_NAME%5D%3DBla%26fields%5BLast_NAME%5D%3Dfamiliy%26fields%5BTYPE_ID%5D%3DCLIENT%0A&cmd[tt2]=crm.contact.add%3Ffields%5BNAME%5D%3Dsvitlana2%20svetlanovna2%26fields%5BSECOND_NAME%5D%3DBla2%26fields%5BLast_NAME%5D%3Dfamiliy%26fields%5BTYPE_ID%5D%3DCLIENT%0A
Смотрите, метод авторизации использую basic (логин,пароль)
Строчку запроса пробовал собирать так:
1)rest/8499/tonaxz4ernhf3uy1m/batch?cmd[1]=crm.contact.update?id=8225%26fields%5BNAME%5D%3DGoma%20Oleg
После Вашего совета Так:
2)rest/8499/tonaxz4ernhf3uy1m/batch?cmd[1]=crm.contact.update?id=8225%26fields[NAME]=Goma Oleg
Результат один и тот же , изменений нет.
Ответ получаю:
При чем собранный по аналогии с вариантом запрос add отрабатывает "на ура"
rest/8499/tonaxz4ernhf3uy1m/batch?halt=1&cmd[tt]=crm.contact.add%3Ffields%5BNAME%5D%3Dsvitlana%20svetlanovna%26fields%5BSECOND_NAME%5D%3DBla%26fields%5BLast_NAME%5D%3Dfamiliy%26fields%5BTYPE_ID%5D%3DCLIENT%0A&cmd[tt2]=crm.contact.add%3Ffields%5BNAME%5D%3Dsvitlana2%20svetlanovna2%26fields%5BSECOND_NAME%5D%3DBla2%26fields%5BLast_NAME%5D%3Dfamiliy%26fields%5BTYPE_ID%5D%3DCLIENT%0A
Вот из фидлера успешное тело
POST https://*.bitrix24.ru/rest/batch HTTP/1.1
User-Agent: PostmanRuntime/7.26.5
Accept: */*
Cache-Control: no-cache
Postman-Token: *
Host: ***.bitrix24.ru
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 225
Cookie: BITRIX_SM_SALE_UID=3
auth=***&cmd%5B1%5D=crm.contact.update%3Fid%3D1%26fields%5BNAME%5D%3DGoma%20Oleg&cmd%5B2%5D= crm.contact.update%3Fid%3D3%26fields%5BNAME%5D%3DGoma%20Oleg%20Two
Показать
(19)Если только тело интересует, то вот:
{"result":{"result":{"1":true,"2":true},"result_error":[],"result_total":[],"result_next":[],"result_time":{"1":{"start":1604168630.4675851,"finish":1604168630.5056801,"duration":0.038094997406005859,"processing":0.038038969039916992,"date_start":"2020-10-31T21:23:50+03:00","date_finish":"2020-10-31T21:23:50+03:00"},"2":{"start":1604168630.505722,"finish":1604168630.5278909,"duration":0.022168874740600586,"processing":0.022111892700195312,"date_start":"2020-10-31T21:23:50+03:00","date_finish":"2020-10-31T21:23:50+03:00"}}},"time":{"start":1604168630.442117,"finish":1604168630.5279059,"duration":0.085788965225219727,"processing":0.060374975204467773,"date_start":"2020-10-31T21:23:50+03:00","date_finish":"2020-10-31T21:23:50+03:00"}}
(21)У меня то же... хм... может действительно придется поменять концепцию..
чего-то через хук он не взлетает(
чего-то через хук он не взлетает(
"result":{"result":{"1":true},"result_error":[],"result_total":[],"result_next":[],"result_time":{"1":{"start":1604169436.8878019,"finish":1604169437.0090699,"duration":0.12126803398132324,"processing":0.12121009826660156,"date_start":"2020-10-31T21:37:16+03:00","date_finish":"2020-10-31T21:37:17+03:00"}}},"time":{"start":1604169436.8589461,"finish":1604169437.0090871,"duration":0.15014100074768066,"processing":0.12133884429931641,"date_start":"2020-10-31T21:37:16+03:00","date_finish":"2020-10-31T21:37:17+03:00"}}
(23)Отлично. У меня тоже вебхук пашет.
Но обычный REST поудобней на мой взгляд
POST https://*.bitrix24.ru/rest/1/***/batch.json HTTP/1.1
Content-Type: application/json
User-Agent: PostmanRuntime/7.26.5
Accept: */*
Cache-Control: no-cache
Postman-Token: *
Host: *.bitrix24.ru
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 141
{"cmd":{
"cmd1": "crm.contact.update?id=1&fields[NAME]=HookOneTest",
"cmd2": "crm.contact.update?id=3&fields[NAME]=HookTwoTest"
}}
ПоказатьНо обычный REST поудобней на мой взгляд
Прикрепленные файлы:

(27)
СтруктураДляЖсон = Новый Структура;
СтруктураДляЖсон.Вставить("cmd", Новый структура("cmd1,cmd2","crm.contact.update?id=1&fields[NAME]=HookOneTest","crm.contact.update?id=3&fields[NAME]=HookTwoTest"));
ЗаписьЖсон = Новый ЗаписьJSON;
ЗаписьЖсон.УстановитьСтроку(Новый ПараметрыЗаписиJSON(," "));
ЗаписатьJSON(ЗаписьЖсон, СтруктураДляЖсон);
СтрокаЖсон = ЗаписьЖсон.Закрыть();
Сообщить(СтрокаЖсон);
{
"cmd": {
"cmd1": "crm.contact.update?id=1&fields[NAME]=HookOneTest",
"cmd2": "crm.contact.update?id=3&fields[NAME]=HookTwoTest"
}
}
"cmd": {
"cmd1": "crm.contact.update?id=1&fields[NAME]=HookOneTest",
"cmd2": "crm.contact.update?id=3&fields[NAME]=HookTwoTest"
}
}
(27)И даже команду не надо урл-кодировать в жсоне, пробелы в т.ч. хавает.
Это из фидлера уже тело, т.е. прямо то, что ушло. Постмэн некоторое урл-кодирование не показывает, сразу не поймешь что он закодировал.
{"cmd":{
"cmd1": "crm.contact.update?id=1&fields[NAME]=Hook One Test&fields[LAST_NAME]=Русская фамилия",
"cmd2": "crm.contact.update?id=3&fields[NAME]=Hook Two Test&fields[LAST_NAME]=Берег Слоновой Кости"
}}
Это из фидлера уже тело, т.е. прямо то, что ушло. Постмэн некоторое урл-кодирование не показывает, сразу не поймешь что он закодировал.
Прикрепленные файлы:

(29) Можете, пожалуйста, еще подсказать, что ж я тут то не так делаю?
С постменом все ок, более-менее разобрался, оттуда всё меняется.
А вот в 1с почему-то получив тело из строки json контакт остаётся без изменений.
Сервис = "/rest/8499/xhxhgdqhyuvny8d5/batch?";
{"result":{"result":[],"result_error":[],"result_total":[],"result_next":[],"result_time":[]},"time":{"start":1604278364.3289161,"finish":1604278364.353565,"duration":0.024648904800415039,"processing":1.4066696166992188e-5,"date_start":"2020-11-02T03:52:44+03:00","date_finish":"2020-11-02T03:52:44+03:00"}}
С постменом все ок, более-менее разобрался, оттуда всё меняется.
А вот в 1с почему-то получив тело из строки json контакт остаётся без изменений.
Сервис = "/rest/8499/xhxhgdqhyuvny8d5/batch?";
СтруктураДляЖсон = Новый Структура;
СтруктураДляЖсон.Вставить("cmd", Новый структура("cmd1","crm.contact.update?id=8225&fields[NAME]=Гома Олег"));
ЗаписьЖсон = Новый ЗаписьJSON;
ЗаписьЖсон.УстановитьСтроку(Новый ПараметрыЗаписиJSON(," "));
ЗаписатьJSON(ЗаписьЖсон, СтруктураДляЖсон);
СтрокаЖсон = ЗаписьЖсон.Закрыть();
Ssl = Новый ЗащищенноеСоединениеOpenSSL();
Прокси = Новый ИнтернетПрокси(Ложь);
СоединениеHTTP = Новый HTTPСоединение(Сервер, Порт, Логин, Пароль, Прокси,,Ssl);
Заголовки = Новый Соответствие;
ЗапросHTTP = Новый HTTPЗапрос(Сервис, Заголовки);
ЗапросHTTP.УстановитьТелоИзСтроки(СтрокаЖсон);
Результат = СоединениеHTTP.ОтправитьДляОбработки(ЗапросHTTP);
Если Результат.КодСостояния <> 200 Тогда
//Ошибка выполнения запроса
КонецЕсли;
Данные = Результат.ПолучитьТелоКакСтроку();
Показать{"result":{"result":[],"result_error":[],"result_total":[],"result_next":[],"result_time":[]},"time":{"start":1604278364.3289161,"finish":1604278364.353565,"duration":0.024648904800415039,"processing":1.4066696166992188e-5,"date_start":"2020-11-02T03:52:44+03:00","date_finish":"2020-11-02T03:52:44+03:00"}}
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот