helpdesk.ticket.update

Scope: helpdesk

Кто может вызывать: Автор / ответственный / support / admin (TicketAccessHelper::canChangeTicketState). Наблюдатели — FORBIDDEN.

Обновить поля обращения через CAllTicketHelpdesk::SetTicket (уведомления автору/ТП включены: sendEmailToAuthor/sendEmailToTechsupport = Y).

HTTP: POST

Побочные эффекты: изменяет переданные поля обращения; при смене статуса/закрытии срабатывают обработчики модуля (OnBeforeTicketUpdate / OnAfterTicketUpdate и т.п.)

Параметры метода

Параметр Тип Обяз. Описание
id int да ID обращения
title / TITLE string нет Заголовок (на update также проставляется CHANGE_TITLE)
message / MESSAGE string нет Текст нового сообщения (если передан — добавляется сообщение к обращению)
categoryId / CATEGORY_ID int нет Категория
criticalityId / CRITICALITY_ID int нет Критичность
priority int нет Алиас criticalityId (то же поле БД)
statusId / STATUS_ID int нет ID статуса из словаря (C_TYPE=S)
markId / MARK_ID int нет Оценка
responsibleId / RESPONSIBLE_USER_ID int нет Ответственный
ownerId / OWNER_USER_ID int нет Автор обращения
slaId / SLA_ID int нет SLA
siteId / SITE_ID string нет LID сайта
sourceId / SOURCE_ID int нет Источник
difficultyId / DIFFICULTY_ID int нет Сложность
supportComments / SUPPORT_COMMENTS string нет Внутренний комментарий поддержки
autoCloseDays / AUTO_CLOSE_DAYS int нет Дней до автозакрытия
files / FILES array нет Вложения (формат ядра support / SetTicket)
close / CLOSE string (Y | N) нет Флаг закрытия/переоткрытия ядра (см. ниже)

Нужно передать хотя бы одно поле кроме id, иначе VALIDATION_ERROR.

Поле close vs ticket.close / ticket.reopen

ticket.update + close ticket.close / ticket.reopen
Что делает Кладёт CLOSE в тот же SetTicket вместе с другими полями Отдельный метод: только смена состояния
Значение Строка Y или N (как в ядре). JSON-boolean true/false не нормализуется и не рекомендуется Внутри всегда ставит CLOSE = Y или N
Статус из настроек модуля Не подставляется автоматически Да: close → HELPDESK_GENERAL_OPTIONS_CHANGE_CLOSE_TICKET_STATUS, reopen → HELPDESK_GENERAL_OPTIONS_CHANGE_RESUME_TICKET_STATUS (если заданы)
Минует ли ядро Нет — тот же SetTicket / события support Нет — тот же путь

Зачем два способа: ticket.close / reopen — явный lifecycle с статусом из опций модуля. close в update — низкоуровневый флаг ядра, удобен, если в одном запросе меняете поля и закрываете/открываете.

Поведение значений

  • close: "Y" — закрытие: выставляется DATE_CLOSE (логика ядра при CLOSE == "Y").
  • close: "N" — переоткрытие, если обращение было закрыто (DATE_CLOSE был заполнен): ядро сбрасывает DATE_CLOSE, ставит REOPEN.
  • close: false / true (boolean) — не используйте: REST не приводит bool к Y/N; сравнение в ядре идёт как == "Y" / == "N" и для bool даёт неоднозначный результат.

close и statusId вместе

Оба поля уходят в один вызов SetTicket и применяются независимо:

  • CLOSE управляет закрытием/переоткрытием (DATE_CLOSE / reopen);
  • STATUS_ID пишется как обычное поле статуса.

Приоритета «одно отменяет другое» нет. Если нужны и закрытие, и конкретный статус — передайте оба, например { "close": "Y", "statusId": 45 }.
Если передать только close: "Y" без statusId — тикет закроется без автоподстановки статуса из HELPDESK_GENERAL_OPTIONS_CHANGE_CLOSE_TICKET_STATUS (в отличие от ticket.close).

Возвращаемые данные

Ответ в конверте модуля: result.result — обращение после обновления (как ticket.get).

Обработка ошибок

Справочник кодов: error-codes.md.

Код Описание
UNAUTHORIZED Пользователь не авторизован
INVALID_ID Некорректный id
TICKET_NOT_FOUND Обращение не найдено
FORBIDDEN Наблюдатель или нет прав на изменение
VALIDATION_ERROR Нет полей для обновления или ошибка сохранения
INTERNAL Внутренняя ошибка

Пример запроса (POST)

curl -X POST "https://76575.dev.wehive.digital/rest/1/lus1tijk9ll7mg7h/helpdesk.ticket.update.json" \
          -H "Content-Type: application/json" \
          --data '{"id":2,"title":"Обновлённый заголовок","priority":5}'
        

Закрытие вместе с полями (без автостатуса из опций):

curl -X POST "https://76575.dev.wehive.digital/rest/1/lus1tijk9ll7mg7h/helpdesk.ticket.update.json" \
          -H "Content-Type: application/json" \
          --data '{"id":2,"close":"Y","statusId":45}'
        

Пример ответа

{
          "result": {
            "result": {
              "id": 2,
              "title": "Обновлённый заголовок",
              "priority": 5,
              "criticalityId": 5
            },
            "error": null
          }
        }
        

См. также

Предыдущая
Следующая