curl — создание webhook для переполнения стека Asana

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

Страница asanawebhook.php:

$headers = getallheaders();
$secret_token = $headers['X-Hook-Secret'];
header('X-Hook-Secret: ' . $secret_token);
header("HTTP/1.1 200 OK");

мой запрос curl для создания webhook:

$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"}]} )

Если я смогу получить это, чтобы вернуть какое-то сообщение об успешном выполнении, я предполагаю, что смогу проанализировать данные и затем выполнить запрос curl обратно в Asana, чтобы получить полную полезную нагрузку. Заранее спасибо.

2

Решение

Спасибо за обращение! Я адвокат разработчиков в Асане, и я думаю, что знаю, что может причинить вам неприятности. (И не беспокойтесь, мы в Асане очень дружелюбны!)

Когда вы создаете webhook, то, что вы просите Асану, это окликнуть тебя когда что-то вас интересует, меняет состояние. То есть, когда что-то происходит с изменением проекта, для которого вы зарегистрировали веб-крючок, наши серверы позвонят на ваш сервер, чтобы сообщить вам, что изменение произошло.

Это означает, что наши серверы должны связаться с общедоступным сервером, который вы обслуживаете. Чтобы убедиться, что это тот случай, когда вы создаете веб-крючок, происходит процесс «рукопожатия»:

  1. Вы делаете вызов API Асаны, чтобы создать веб-крючок. Это временно блокирует, пока:
  2. Серверы Асаны перезванивают с POST запрос к месту, указанному вами в target с заголовком, установленным в значение, которое:
  3. Вы отвечаете с 200 OK ответ с тем же значением заголовка, и, наконец,
  4. Исходный вызов для создания webhook возвращается с 200 OK,

Если у вас не настроено это рукопожатие, то обратный вызов от создания webhook завершится с ошибкой, которую вы видите. Вы можете увидеть более подробную техническую информацию об этом процессе на наша справочная страница по API для веб-хуков. Может показаться, что вам нужно много или много работы, но этот процесс разработан таким образом, чтобы вы знать Когда вы создаете веб-крючок, получите ли вы в будущем обратные вызовы, а не печальные, тихие сбои — мы фактически проверяем, что вы можете сделать это при создании веб-крюка.

В качестве альтернативы, если вы не хотите создавать и поддерживать общедоступный сервер, вы можете проверить наш События API; они очень похожи на веб-хуков, но вместо того, чтобы ожидать, что серверы Асаны будут вызывать их, когда что-то изменится, вы можете запрашивать изменения с определенного момента времени (как представлено токеном синхронизации, который мы вам даем). Например, вы можете GET задача в определенный момент времени, а также GET токен синхронизации для этой задачи из /events конечная точка. Периодически после этого вы можете создавать GET запросы на тот же ресурс на /events конечную точку и передайте этот токен синхронизации, и мы вернем то, что (если что-то изменилось) с тех пор, как вы получили этот токен (и передадим обратно новый токен «до даты обновления» для использования в будущих вызовах).

Я надеюсь, что это поможет вам снова двигаться!

1

Другие решения

После тщательного изучения и опроса Асаны о помощи, я решил, что это была проблема, связанная с SSL для меня. Код прекрасно работает и позволяет провести рукопожатие и настроить веб-крючок. Чего я не осознавал, так это того, что у меня был сертификат SSL, но у меня его не было. Убедитесь, что SSL настроен правильно для домена, к которому направляется цель webhook.

1