我试图在Asana中设置一个webhook来向我发送特定项目的事件更新。我是新手,所以在阅读和回答时请记住这一点。我在这里的第一篇帖子对我来说很容易。这是我正在运行的代码。
asanawebhook.php页面:
$headers = getallheaders();
$secret_token = $headers['X-Hook-Secret'];
header('X-Hook-Secret: ' . $secret_token);
header("HTTP/1.1 200 OK");
我创建webhook的curl请求:
$apikey = "mykey"; // Your API key
$taskid = "resourceid";
exec( 'curl \
-H "Authorization: Bearer '.$apikey.'" \
-H "Content-Type: application/x-www-form-urlencoded" \
-X POST https://app.asana.com/api/1.0/webhooks \
-d "resource='.$taskid.'" \
-d "target=https://mywebsite.com/folders/asanawebhook.php"', $return);
print_r($return);
这一直让我在页面上打印出这个错误。
Array ( [0] => {"errors":[{"message":"Could not complete activation handshake with target URL. Please ensure that the receiving server is accepting connections and supports SSL","help":"For more information on API status codes and how to handle them, read the docs on errors: https://asana.com/developers/documentation/getting-started/errors"}]} )
如果我可以返回某种成功消息,我假设我可以解析数据,然后向Asana执行卷曲请求以获得完整的有效负载。提前谢谢。
答案 0 :(得分:1)
感谢您的光临!我是Asana的开发者倡导者,我想我知道什么可能给你带来麻烦。 (不用担心,我们在Asana这里非常友好!)
当您创建一个webhook时,您要求Asana做的是当您对更改状态感兴趣的内容时呼叫。也就是说,当某些事情发生变化,您已经注册了webhook时,我们的服务器会调用您的服务器让您知道更改已经发生。
这意味着我们的服务器需要与您维护的公共服务器联系。要检查是否是这种情况,当您创建一个webhook时,会有一个"握手"过程:
POST
请求回拨您在target
中指定的位置,并将标头设置为一个值,其中包含:200 OK
响应,最后200 OK
。如果您没有设置此握手,那么来自webhook创建的返回调用将失败,并显示您正在查看的错误。您可以在our API reference page for webhooks上查看有关此流程的更多技术细节。这可能看起来像很多工作或来回设置,但这个过程的设计是为了让你在创建webhook时知道,无论你是否会获得未来回调,而不是悲伤,沉默的失败 - 我们实际上在你创建webhook时测试你可以。
作为替代方案,如果您不想创建和维护公开可用的服务器,您可能需要查看我们的events API;这些就像webhooks一样,但是当事情发生变化时,你可能不会期望Asana的服务器调用它,你可以在某个特定时间点轮询更改(由我们给你的同步令牌表示)。例如,您可以GET
在特定时间点执行任务,并GET
从/events
端点获取该任务的同步令牌。在此之后,您可以定期在GET
端点上的同一资源上创建/events
个请求并传递该同步令牌,并且我们将返回自您获得该令牌后已更改的内容(如果有) (并在这些更改发生后传回新的"最新的#34;令牌以供将来使用)。
我希望这有助于让你再次活动!
答案 1 :(得分:1)
在仔细研究和调查Asana寻求帮助之后,我确定这对我来说是一个与SSL相关的问题。代码工作得很好,允许握手发生并设置webhook。我没有意识到的是,虽然我有一个SSL证书我没有设置它。确保为webhook目标所针对的域正确配置了SSL。