Webhook Rules

Webhook rules is a powerful tool for enabling access from the outside world to your DevOps toolchain. With webhook rules one can write ad-hoc application interfaces to Clarive, as well as custom web pages.

Webhook rules can be accessed through an exposed URL in Clarive. When a user or program calls the URL, the rule logic will run just like with any other event.

To enable a webhook rule, just upload a .clarive.yml rulebook to a Git repository with an event that starts with a forward slash /.

name: my webhooks

/hello_world:
   - echo: "requested param={{ ctx.request('params') }}"

If the above rulebook is in MyProject/MyRepo under Clarive, the following URL will be instanteneously exposed (the user needs to be logged in, ie from a browser):

https://myclariveserver/rules/json/MyProject/MyRepo/hello_world

Calling the URL (with cURL for instance) will execute the echo op in the /hello_world event webhook.

Request Data

To get the request data, the following contexts are enabled:

Context Contents
ctx.request('params') The URL query-string or form params in a hash
ctx.request('args') Array with each of the /path components of the URL
ctx.request('body') The full request body as a string
ctx.request('headers') HTTP request headers
ctx.request('upload') Uploaded files
ctx.user() The user id who made the (authenticated) request

Response data

Any response data should be sent using the web_response: op.

name: my webhooks

/hello_world:
  do:
    - web_response:
        body: "Hello world!"

Valid web_response params:

    for my $meth ( qw(body cookies status redirect location write content_type headers header) ) {
Argument Contents
body The response body
cookies A hash with the cookies to be set in the browser/client
status The HTTP status
redirect HTTP redirect
location HTTP location string
content_type Content-type string
headers Response headers

Authentication

Calls to webhook rulebooks need to be authenticated by default.

That means the user calling the rulebook needs to be logged in or put an api_key as an argument to the rulebook call.

The permissions of the rulebook will be bound to the user calling the rulebook, and never the owner that created the rule.

To use an api key, head over to the user menu, Preferences on the top right of the Clarive UI, and Generate API Key (if never done before).

Copy the api_key and use it in the client that will call the rulebook:

curl https://clariveserver/rule/json/MyProject/MyRepo/hello_world?api_key=9837492dac873473443489adcc8787