Создание задачи Asana с внешними данными

У меня проблемы с созданием задачи асаны с внешними данными. Я могу создать задачу нормально, но я не могу понять, что это за коктейль, чтобы иметь возможность использовать «внешние» данные, упомянутые в документации.

$.ajax({
   url : global.task.url,
   type: "post",
   data: {
    assignee: "[email protected]",
    name: "Test task",
    notes: "this is a note",
    projects: 123123123123,
    workspace: global.workspace,
    external: {
     "id": "test",
     "data": "12345099"
    }
   },
   beforeSend: function (xhr) {
    xhr.setRequestHeader("Authorization", "Bearer " + "MY-TOKEN");
   }
 })

приведенный выше код приводит к неверному запросу 500.

Я также попытался отправить внешнее преобразованное в строку, что привело к ошибке «Нет подходящего маршрута для запроса».

Приведенный выше код отлично работает, если я удаляю «внешние» из данных.

Я буду первым, кто скажет, что обычно не вызываю API, поэтому чувствую, что делаю что-то глупое. любая помощь приветствуется!

ОБНОВИТЬ:

я смог создать задачу, передав внешний как:

'external.id' = "test",
'external.data' = "123123123"

однако я не вижу сгенерированных мной внешних данных, так что что-то еще происходит.

ОБНОВЛЕНИЕ (2):

если я запустил код ниже, я получу ошибку сервера 500. если я закомментирую «внешний» фрагмент в данных, задачи добавляются правильно.

$.ajax({
 url : "https://app.asana.com/api/1.0/tasks",
 contentType: "application/json",
 type: "post",
 beforeSend: function (xhr){
  xhr.setRequestHeader("Authorization", "Bearer " + settings.token);
 },
 data: JSON.stringify({
  data: {
   assignee: "[email protected]",
   name: "Test task",
   notes: "this is a note",
   projects: [5555555555555], //not the real one i am passing in
   external: {
    id: "testID",
    data: "some sweet data"
   },
   workspace: 555555555555 //not what i am really passing in
  }
 })
})

person mistersender    schedule 29.01.2015    source источник


Ответы (2)


Может быть, вы уже создали запись с идентификатором test? Идентификаторы уникальны - они должны быть, иначе вы не смогли бы использовать его для доступа. Попробовать случайный идентификатор или что-то в этом роде? Вы всегда можете GET /tasks/external:test посмотреть, есть ли там задача.

person agnoster    schedule 29.01.2015
comment
Я попробовал ваше предложение, но получил ответ 404, который не найден. Я не думаю, что существует внешний: test, поскольку мне еще предстоит выполнить вызов, и единственное место, откуда могут исходить внешние данные, - это приложение. - person mistersender; 30.01.2015
comment
Ой! Я только что понял: вы отправляете данные как данные POST (закодированные в форме), но со структурой, которую вы отправляете, они должны быть отправлены как JSON. - person agnoster; 30.01.2015
comment
Я попытался отправить это для external: external: {id: testID, data: some sweet data} получил 500 ошибок обратно = / - person mistersender; 30.01.2015
comment
Верно, но вам нужно указать $ .ajax, чтобы он отправлял его как JSON - по умолчанию он отправляет его в кодированном виде. Я думаю, вам нужно вызвать JSON.stringify () для данных и отправить contentType: 'application/json' в параметрах ajax, но я не эксперт jQuery, боюсь: - / - person agnoster; 31.01.2015
comment
Хорошо, я обновил свой вызов ajax, как было предложено, и получил несколько другие результаты. Мне пришлось преобразовать весь вызов данных в строку и передать проект в виде массива, но чертовски внешние данные все еще не сохранялись !! это сводит меня с ума. я знаю, что это что-то глупое. это должно быть что-то глупое. - person mistersender; 31.01.2015
comment
Ооооооо! Думаю, я знаю, что это такое! Вам нужно передать что-то в форме: contentType: 'application/json', data: JSON.stringify({ data: { assignee: ... }}) - другими словами, вам нужно обернуть полезную нагрузку в свойство data, преобразовать его в строку, а затем передать that в качестве параметра данных для вызова ajax. И тогда это ... должно работать? - person agnoster; 02.02.2015
comment
он не был поклонником этого, он в основном сказал мне, что вы на самом деле ничего не передавали нам, нам, по крайней мере, нужно рабочее пространство. Думаю, я тоже пробовал это в какой-то момент ... это так расстраивает ... почему они не публикуют худший сценарий в своей документации? - person mistersender; 04.02.2015
comment
Убедитесь, что вы передаете workspace как целое число? Отсюда я не могу сказать, является ли global.workspace идентификатором или объектом, представляющим рабочую область. Мне жаль, что это так больно для тебя! Я надеюсь, что смогу помочь решить эту проблему :-( - person agnoster; 04.02.2015
comment
Я ценю помощь! Я почти уверен, что это нормально, потому что, если я закомментирую внешний фрагмент, который я передаю, задача добавляется отлично. Я обновил тему с помощью вызова ajax, который я сейчас делаю, который выдает ошибку 500, если я передаю внешний, и работает нормально, если я вообще не передаю внешний - person mistersender; 04.02.2015
comment
Спасибо за ответ! Я посмотрю, смогу ли я воспроизвести эту ошибку, и еще раз спасибо за ваше терпение. - person agnoster; 04.02.2015
comment
У меня есть обновление! Я помню, как вы говорили, что внешний идентификатор должен быть уникальным, поэтому я добавил случайный идентификатор (конечно, для тестирования). Теперь я могу создать задачу с внешними данными, и я могу успешно получить задачу с URL-адресом tasks / external: 12345, НО я по-прежнему не вижу, чтобы внешние данные, которые я установил, были возвращены в ответе. Я считаю, что ошибка 500, с которой я столкнулся, была связана с тем, что внешний идентификатор был одинаковым для нескольких запросов на создание (я провел много тестов, по-видимому, один из них работал над его созданием!). - person mistersender; 04.02.2015
comment
Это замечательные новости! В настоящее время внешние данные должны быть специально запрошены с использованием ?opt_fields=external.data,external.id (например), но я подозреваю, что мы изменим это, чтобы сделать их видимыми по умолчанию, когда они установлены. - person agnoster; 05.02.2015
comment
ахааа, я звонил с этими параметрами и вот мои данные, ура! Большое вам спасибо! Благодарим вас за терпение, у меня пока нет отличного API. Было бы неплохо добавить что-нибудь в документацию по этому поводу, в нем пассивно говорится, что внешние данные будут в полезной нагрузке с задачей, когда вы ее получите. - person mistersender; 05.02.2015
comment
Да, я думаю, мы на самом деле просто изменим его, чтобы по умолчанию отправлять внешние данные. Также у нас есть предстоящее обновление документации, так что, надеюсь, это поможет в подобных случаях! - person agnoster; 05.02.2015

Проблема, с которой я столкнулся, заключалась в том, что я передавал свой внешний идентификатор как целое число, которое продолжало возвращать ошибку «Недействительный запрос» от Asana. Как только я преобразовал его в строку, создание задачи с внешними данными работало нормально.

person Muhan Alim    schedule 29.03.2017