2012-05-07 9 views
1

私は、Asanaにすばやいタスクを追加する最初のHubotスクリプトを作成するために取り組んでいます。
私はあまりにも狂ったことをしていないか、少なくとも私がいないと思っていません。Asahanaと統合されたHubotスクリプト

現在、私は、私は本当にそれがしたいすべてが、それは、ワークスペースへの投稿だということである出力

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には、すべて正常に動作するようになっていますが、ログの末尾を見て、何も出力していない、何もコンソールにログを記録していない、何も起こっていません。

paramsの下でconsole.logを実行すると、JSONが出力されますが、正しいですが、ポストが起こっていないようです。

いずれの方向もすばらしいでしょう。

ありがとうございました。ダン以下

EDITいくつかのより多くの微調整後

は、(.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 
+2

トップレベルオブジェクトの 'data'パラメータの内部にある必要があることを忘れないでください。 '{data:{parameters:values}}' – DanRedux

+0

ありがとう@DanRedux、私はそのショットを与えましたが、何も変更しませんでした。 :/ – LostInQuery

+0

ちょっとした調整の後、ついにそれはうまくいった。ポインタありがとう! – LostInQuery

答えて

1

質問に対する回答を提出すると、stackoverflowはそれを未回答として表示しません。

OPのEDITからのコピー。

.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 
0

私は、Hubotのhttpクライアントは、文字列ではなくquery()のオブジェクトを期待していると思います。 JSON.stringifyの代わりにオブジェクトを直接渡してみてください。

+0

オブジェクトを呼び出しています。 – LostInQuery

関連する問題