Summary

The testSlackAction() mutation sends a test notification through a Slack action's configured webhook URL. Use it to confirm a Slack action delivers messages correctly. Run it before associating the action with an alert or scheduled search. Supply the view name, action name, webhook URL, message fields, and sample event data.

Syntax

graphql
testSlackAction(
      input: TestSlackAction!
   ): TestResult!

The mutation accepts a single required input argument of type TestSlackAction!. The input requires the view name, action name, webhook URL, message fields, proxy setting, trigger name, and event data. The mutation returns a non-null TestResult! object with a success indicator and a descriptive message.

Supply eventData as a JSON object or array of event objects. Supply triggerName as a mock value. The referenced trigger does not need to exist.

Input parameters

The input argument takes a TestSlackAction! object. All fields are required. Provide the view name and action name. Supply the webhook URL, message fields, proxy setting, a mock trigger name, and JSON event data.

Table: TestSlackAction Input Datatype

ParameterTypeRequiredDefaultStabilityAvailabilityDescription
eventDataStringyes Long-Term JSON data representing one or more events. One event can be supplied as a JSON object. Multiple events must be supplied as a list of JSON objects.
fieldsSlackFieldEntryInputyes Long-Term The fields to include within the Slack message. Can be templated with values from the result. See SlackFieldEntryInput.
nameStringyes Long-Term The name of the action.
triggerNameStringyes Long-Term The name of the action. This is a mock value; the trigger doesn't have to exist.
urlStringyes Long-Term The Slack webhook URL where to send the request.
useProxyBooleanyes Long-Term Defines whether the action should use the configured proxy to make web requests.
viewNameStringyes Long-Term The name of the view of the action.

Example

Raw
graphql
mutation {
  testSlackAction( input: 
    { viewName: "humio",
      name: "act-up",
      url: "https://slack.company.com"
      fields: [ { fieldName: "msg", value: "hey!" } ]
      useProxy: false,
      triggerName: "ping",
      eventData: "[{\"#type\":\"kv\"}]",
      } )
  { success }
}
Mac OS or Linux (curl)
shell
curl -v -X POST $YOUR_LOGSCALE_URL/graphql \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -d @- << EOF
{"query" : "mutation {
  testSlackAction( input: 
    { viewName: \"humio\",
      name: \"act-up\",
      url: \"https://slack.company.com\"
      fields: [ { fieldName: \"msg\", value: \"hey!\" } ]
      useProxy: false,
      triggerName: \"ping\",
      eventData: \"[{\\"#type\\":\\"kv\\"}]\",
      } )
  { success }
}"
}
EOF
Mac OS or Linux (curl) One-line
shell
curl -v -X POST $YOUR_LOGSCALE_URL/graphql \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -d @- << EOF
{"query" : "mutation {
  testSlackAction( input: 
    { viewName: \"humio\",
      name: \"act-up\",
      url: \"https://slack.company.com\"
      fields: [ { fieldName: \"msg\", value: \"hey!\" } ]
      useProxy: false,
      triggerName: \"ping\",
      eventData: \"[{\\"#type\\":\\"kv\\"}]\",
      } )
  { success }
}"
}
EOF
Windows Cmd and curl
shell
curl -v -X POST $YOUR_LOGSCALE_URL/graphql ^
    -H "Authorization: Bearer $TOKEN" ^
    -H "Content-Type: application/json" ^
    -d @'{"query" : "mutation { ^
  testSlackAction( input:  ^
    { viewName: \"humio\", ^
      name: \"act-up\", ^
      url: \"https://slack.company.com\" ^
      fields: [ { fieldName: \"msg\", value: \"hey!\" } ] ^
      useProxy: false, ^
      triggerName: \"ping\", ^
      eventData: \"[{\\"#type\\":\\"kv\\"}]\", ^
      } ) ^
  { success } ^
}" ^
} '
Windows Powershell and curl
powershell
curl.exe -X POST 
    -H "Authorization: Bearer $TOKEN"
    -H "Content-Type: application/json"
    -d '{"query" : "mutation {
  testSlackAction( input: 
    { viewName: \"humio\",
      name: \"act-up\",
      url: \"https://slack.company.com\"
      fields: [ { fieldName: \"msg\", value: \"hey!\" } ]
      useProxy: false,
      triggerName: \"ping\",
      eventData: \"[{\\"#type\\":\\"kv\\"}]\",
      } )
  { success }
}"
}'
    "$YOUR_LOGSCALE_URL/graphql"
Perl
perl
#!/usr/bin/perl

use HTTP::Request;
use LWP;

my $TOKEN = "TOKEN";

my $uri = '$YOUR_LOGSCALE_URL/graphql';

my $query = "mutation {
  testSlackAction( input: 
    { viewName: \"humio\",
      name: \"act-up\",
      url: \"https://slack.company.com\"
      fields: [ { fieldName: \"msg\", value: \"hey!\" } ]
      useProxy: false,
      triggerName: \"ping\",
      eventData: \"[{\\"#type\\":\\"kv\\"}]\",
      } )
  { success }
}";
$query =~ s/\n/ /g;
my $json = sprintf('{"query" : "%s"}',$query);
my $req = HTTP::Request->new("POST", $uri );

$req->header("Authorization" => "Bearer $TOKEN");
$req->header("Content-Type" => "application/json");

$req->content( $json );

my $lwp = LWP::UserAgent->new;

my $result = $lwp->request( $req );

print $result->{"_content"},"\n";
Python
python
#! /usr/local/bin/python3

import requests

url = '$YOUR_LOGSCALE_URL/graphql'
mydata = r'''{"query" : "mutation {
  testSlackAction( input: 
    { viewName: \"humio\",
      name: \"act-up\",
      url: \"https://slack.company.com\"
      fields: [ { fieldName: \"msg\", value: \"hey!\" } ]
      useProxy: false,
      triggerName: \"ping\",
      eventData: \"[{\\"#type\\":\\"kv\\"}]\",
      } )
  { success }
}"
}'''

resp = requests.post(url,
                     data = mydata,
                     headers = {
   "Authorization" : "Bearer $TOKEN",
   "Content-Type" : "application/json"
}
)

print(resp.text)
Node.js
javascript
const https = require('https');

const data = JSON.stringify(
    {"query" : "mutation {
  testSlackAction( input: 
    { viewName: \"humio\",
      name: \"act-up\",
      url: \"https://slack.company.com\"
      fields: [ { fieldName: \"msg\", value: \"hey!\" } ]
      useProxy: false,
      triggerName: \"ping\",
      eventData: \"[{\\"#type\\":\\"kv\\"}]\",
      } )
  { success }
}"
}
);


const options = {
  hostname: '$YOUR_LOGSCALE_URL',
  path: 'graphql',
  port: 443,
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': data.length,
    Authorization: 'BEARER ' + process.env.TOKEN,
    'User-Agent': 'Node',
  },
};

const req = https.request(options, (res) => {
  let data = '';
  console.log(`statusCode: ${res.statusCode}`);

  res.on('data', (d) => {
    data += d;
  });
  res.on('end', () => {
    console.log(JSON.parse(data).data);
  });
});

req.on('error', (error) => {
  console.error(error);
});

req.write(data);
req.end();
Example Responses
Success (HTTP Response Code 200 OK)
json
{
  "data": {
    "testSlackAction": {
      "success": false
    }
  }
}

Returned values

The mutation returns a non-null TestResult! object. It contains a boolean indicating whether the test succeeded and a message describing the outcome. Confirm the webhook URL is reachable and the Slack message renders as expected.

Table: TestResult Datatype

ParameterTypeRequiredDefaultStabilityAvailabilityDescription
messageStringyes Long-Term A message explaining the test result.
successBooleanyes Long-Term True if the test was a success, false otherwise.