Summary

The testSlackPostMessageAction() mutation sends a test message to a Slack channel using an existing Slack Post Message action configuration. Use it after creating or updating a Slack Post Message action to confirm that LogScale can reach the channel and that the action is correctly configured before attaching it to an alert or scheduled search. The mutation accepts mock trigger context and event data, so no real alert needs to fire during testing.

Syntax

graphql
testSlackPostMessageAction(
      input: TestPostMessageSlackAction!
   ): TestResult!

The required input argument accepts a non-nullable TestPostMessageSlackAction object containing the view name, action name, Slack API token, channel list, message fields, proxy setting, trigger name, and event data needed to simulate a delivery. The mutation returns a non-nullable TestResult object with a boolean success indicator and a message describing the outcome.

Example

Raw
graphql
mutation {
  testSlackPostMessageAction( input: 
    { viewName: "humio",
      name: "act-up",
      apiToken: "abc123",
      channels: [ "#admin" ],
      fields: [ { fieldName: "msg", value: "hey!" } ],
      useProxy: false,
      triggerName: "wake-up",
      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 {
  testSlackPostMessageAction( input: 
    { viewName: \"humio\",
      name: \"act-up\",
      apiToken: \"abc123\",
      channels: [ \"#admin\" ],
      fields: [ { fieldName: \"msg\", value: \"hey!\" } ],
      useProxy: false,
      triggerName: \"wake-up\",
      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 {
  testSlackPostMessageAction( input: 
    { viewName: \"humio\",
      name: \"act-up\",
      apiToken: \"abc123\",
      channels: [ \"#admin\" ],
      fields: [ { fieldName: \"msg\", value: \"hey!\" } ],
      useProxy: false,
      triggerName: \"wake-up\",
      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 { ^
  testSlackPostMessageAction( input:  ^
    { viewName: \"humio\", ^
      name: \"act-up\", ^
      apiToken: \"abc123\", ^
      channels: [ \"#admin\" ], ^
      fields: [ { fieldName: \"msg\", value: \"hey!\" } ], ^
      useProxy: false, ^
      triggerName: \"wake-up\", ^
      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 {
  testSlackPostMessageAction( input: 
    { viewName: \"humio\",
      name: \"act-up\",
      apiToken: \"abc123\",
      channels: [ \"#admin\" ],
      fields: [ { fieldName: \"msg\", value: \"hey!\" } ],
      useProxy: false,
      triggerName: \"wake-up\",
      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 {
  testSlackPostMessageAction( input: 
    { viewName: \"humio\",
      name: \"act-up\",
      apiToken: \"abc123\",
      channels: [ \"#admin\" ],
      fields: [ { fieldName: \"msg\", value: \"hey!\" } ],
      useProxy: false,
      triggerName: \"wake-up\",
      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 {
  testSlackPostMessageAction( input: 
    { viewName: \"humio\",
      name: \"act-up\",
      apiToken: \"abc123\",
      channels: [ \"#admin\" ],
      fields: [ { fieldName: \"msg\", value: \"hey!\" } ],
      useProxy: false,
      triggerName: \"wake-up\",
      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 {
  testSlackPostMessageAction( input: 
    { viewName: \"humio\",
      name: \"act-up\",
      apiToken: \"abc123\",
      channels: [ \"#admin\" ],
      fields: [ { fieldName: \"msg\", value: \"hey!\" } ],
      useProxy: false,
      triggerName: \"wake-up\",
      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": {
    "testSlackPostMessageAction": {
      "success": false
    }
  }
}

Input Parameters

The input argument takes a TestPostMessageSlackAction object. All fields are required. Provide the view name and action name to identify the action to test, a Slack API token for authentication, one or more target channels, the message fields to include, the proxy setting, a mock trigger name, and JSON event data to simulate the conditions under which the action fires.

Table: TestPostMessageSlackAction Input Datatype

ParameterTypeRequiredDefaultStabilityAvailabilityDescription
apiTokenStringyes Long-Term The API token to authenticate with Slack."
channelsStringyes Long-Term A list of Slack channels to message.
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 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.
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.

Returned Values

The mutation returns a TestResult object. Check the success field to determine whether the action reached the Slack channel and delivered the test message. If the test fails, the message field provides a description of the failure to help diagnose misconfiguration.

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.