OTRS CreateTicket

Я пытаюсь создать билет OTRS.

Тип веб-службы HTTP:REST.

var data = {
  Ticket: {
    Title: "123123",
    TypeID: "2",
    QueueID: "1",
    State: "open",
    PriorityID: "2",
    ServiceID: "1"
  },
  Article: {
    Subject: "123123",
    Body: "Trololo",
    ContentType: "text/plain; charset=utf8"
  },
  SessionID: 123
};

$.ajax({
  url: url,
  type: 'POST',
  dataType: 'json',
  data: JSON.stringify(data),
  success: function(res) {
    ...
  },
  error: function(res) {
    ...
  }
});

И после отправки я получил ошибку: Could not read input data.

Если я попытаюсь изменить метод на GET и изменить тип данных на JS obj, у меня будет другой

error:
ErrorCode:"TicketCreate.MissingParameter"
ErrorMessage:"TicketCreate: Ticket parameter is missing in or not valid!"

Что я делаю неправильно?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
980
3

Ответы 3

Это из-за CORS; что в основном означает, что вам не разрешено отправлять запросы POST на любой URL-адрес из вашего браузера. Если вы хотите, чтобы это было разрешено, вы должны изменить конфигурацию своего веб-сервера.

Скорее всего, вы захотите отправить запрос в OTRS REST API со стороны сервера, кстати, а не со стороны клиента. Если вы отправляете его со стороны клиента, вам необходимо сохранить токен доступа или аналогичный на клиенте, что в большинстве случаев было бы плохой идеей. Хорошим побочным эффектом является то, что это также решит вашу проблему с CORS.

Для объяснения CORS проверьте это:

Как работает заголовок Access-Control-Allow-Origin?

И для конкретного объяснения того, почему в некоторых сценариях простой JS будет работать там, где jQuery не работает:

Запрос CORS POST работает с простым javascript, но почему не с jQuery?

Ваша полезная нагрузка кажется слишком легкой. :-D Интерфейс REST OTRS ограничен и не так прост в использовании. Например, если вы хотите создать билет через curl, полезная нагрузка должна выглядеть примерно так:

curl -X POST -H "Content-Type: application/json" --data '{"UserLogin" : "ZnunyAgent","Password" : "znuny4otrs","Ticket" : {"Title" : "some ticket title","Queue" : "Postmaster","State" : "new","PriorityID" : "3","CustomerUser" : "[email protected]"},"Article" : {"Subject" : "some subject","Body" : "some body","ContentType" : "text/plain; charset=ISO-8859-15","MimeType" : "text/plain", "Charset" : "ISO-8859-15"}}' http://localhost/otrs/nph-genericinterface.pl/Webservice/1/TicketCreate

Как видите, в запросе Ajax необходимо позаботиться о следующем:

1) Поместите пользователя для аутентификации в полезную нагрузку (или сначала создайте сеанс пользователя)

2) Используйте правильный URL-адрес с настроенным идентификатором веб-сервера в URL-адресе

Следующее сработало для меня.

Я также добавил расширение Chrome для CORS, чтобы обойти ограничения CORS localhost.

var data =
{
    "Ticket": {
        "Title": "Rest Create",
        "Type": "Support",
        "Queue": "{some queue here}",
        "State": "New",
        "Priority": "3 Important",
        "CustomerUser": "{some email here}"
    },
        "Article": {
        "Subject": "Rest Create",
        "Body": "Test",
        "ContentType": "text/plain; charset=utf8"
    }
};


$.ajax({
    url: "http://dev-otrs-1/otrs/nph-genericinterface.pl/Webservice/{CONNECTORNAME}/Ticket?UserLogin = {USERNAME}&Password = {PASSWORD}",
    type: "post",
    data: JSON.stringify(data),
    success: function (response) {
        console.debug(response);
    }
});

Другие вопросы по теме