Скрипты Hubot для интеграции с Asana

Я работаю над созданием своего первого скрипта для Hubot, который добавит быструю задачу в Asana.
Я не собираюсь делать что-то слишком сумасшедшее, по крайней мере, так не думал.

В настоящее время у меня есть

url  = 'https://app.asana.com/api/1.0'

WORKSPACE = "1111111111111"
user = "xxxxxx.xxxxxxxxxxxxxxxx"
pass = ""

module.exports = (robot) ->
  robot.respond /task (.*)/i, (msg) ->
    params = {name: "#{msg.match[1]}", workspace: "#{WORKSPACE}"}
    stringParams = JSON.stringify params
    auth = 'Basic ' + new Buffer("#{user}:#{pass}").toString('base64')
    msg.http("#{url}/tasks")
      .headers("Authorization": auth, "Content-Length": stringParams.length, "Accept": "application/json")
      .query(params)
      .post() (err, res, body) ->
        console.log(err)
        console.log(res)
        console.log(body)
        msg.send body

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

Если я сделаю console.log под параметрами, он выведет JSON, и это правильно, но похоже, что сообщение никогда не происходит.

Любое направление было бы здорово!

Спасибо.

ИЗМЕНИТЬ

После еще одной настройки, следование за Дэном было шагом в правильном направлении, удаление .query() и помещение строки в .post() вывод, наконец, правильный.

module.exports = (robot) ->
  robot.respond /task (.*)/i, (msg) ->
    params = {data:{name: "#{msg.match[1]}", workspace: "#{WORKSPACE}"}}
    stringParams = JSON.stringify params
    auth = 'Basic ' + new Buffer("#{user}:#{pass}").toString('base64')
    msg.http("#{url}/tasks")
      .headers("Authorization": auth, "Content-Length": stringParams.length, "Accept": "application/json")
      .post(stringParams) (err, res, body) ->
        console.log(err)
        console.log(res)
        console.log(body)
        msg.send body

person LostInQuery    schedule 07.05.2012    source источник
comment
Не забывайте, что он должен находиться внутри параметра data объекта верхнего уровня. {data:{parameters:values}}   -  person DanRedux    schedule 08.05.2012
comment
Спасибо @DanRedux, я попробовал, но ничего не изменил. :-/   -  person LostInQuery    schedule 08.05.2012
comment
После небольшой доработки все наконец получилось. Спасибо за указатель!!   -  person LostInQuery    schedule 08.05.2012


Ответы (2)


Отправка ответа на вопрос, чтобы stackoverflow не отображал его как оставшийся без ответа.

Копирование из EDIT в OP.

отбрасывая .query() и помещая строку в .post(), вывод, наконец, правильный.

module.exports = (robot) ->
  robot.respond /task (.*)/i, (msg) ->
    params = {data:{name: "#{msg.match[1]}", workspace: "#{WORKSPACE}"}}
    stringParams = JSON.stringify params
    auth = 'Basic ' + new Buffer("#{user}:#{pass}").toString('base64')
    msg.http("#{url}/tasks")
      .headers("Authorization": auth, "Content-Length": stringParams.length, "Accept": "application/json")
      .post(stringParams) (err, res, body) ->
        console.log(err)
        console.log(res)
        console.log(body)
        msg.send body
person LostInQuery    schedule 15.11.2012

Я думаю, что http-клиент в Hubot ожидает объект для query(), а не строку. Попробуйте передать объект напрямую вместо вызова JSON.stringify.

person Ian Greenleaf Young    schedule 07.05.2012