HTTP

GET

This is an example of a HTTP GET request to an open source Pokemon API. Note that expose_json_fields helps access top-level and nested values inside the JSON response from your API using Golang template syntax and assigns them to the fields under expose_json_fields (in the example below, pokename, type, weight, etc.)

actions: - name: pokemon http request type: GET url: http://pokeapi.co/api/v2/pokemon/${name} query_data: auth: expose_json_fields: pokename: '.name' type: |- {{ range .types }} - {{ .type.name -}} {{ end }} weight: '.weight' baseexp: '.base_experience' ability: |- {{ range .abilities }} - {{ .ability.name -}} {{ end }} timeout: 30 # custom 30 second timeout for an http rule. 10 Seconds is the default. update_reaction: white_check_mark # If you set an emoji reaction when the rule was matched, you can include this field to update the reaction when the http call completes.

POST

This is an example of a HTTP POST request to the github API. The action below will create a Github issue. This action takes in a few arguments so the bot knows where to create the issue, what to call it, and who to assign the issue to. See again in expose_json_fields how you can assign response values to the exposed fields which can be accessed in later parts of your rule yaml.

actions: - name: github issue http request type: POST url: https://api.github.com/v3/repos/${org}/${repo}/issues query_data: title: "${title}" body: "TODO: Fill in the deets.\n ACCEPTANCE CRITERIA:" assignees: - "${assignee}" labels: - "bug" custom_headers: Authorization: token ${GITHUB_API_TOKEN} Accept: 'application/vnd.github.v3+json' Content-Type: 'application/json' auth: expose_json_fields: title: '.title' url: '.html_url' assignees: '.assignee.login'

Chained HTTP Requests

Here is an example of two HTTP GET requests chained together to produce an output containing information about the weather of a given location as well as its population.

actions: - name: weather http request type: GET url: http://api.openweathermap.org/data/2.5/weather query_data: q: ${location} APPID: ${WEATHER_APPID} units: metric auth: expose_json_fields: temperature: '.main.temp' loc: '.name' desc: |- {{ range .weather }} {{ range $k, $v := . }} - {{- $v -}} {{ end }} {{ end }} country: '.sys.country' - name: location http request type: GET url: https://restcountries.eu/rest/v2/alpha/${country} expose_json_fields: flag_url: .flag full_name: '.name' population: 'printf "%0.f" .population' native_name: .nativeName

Timeouts

By default, each http action has a timeout of 10 seconds. You can override this behavior by specifying a custom timeout in the rules/<rule name>.yml file.