<!DOCTYPE html>
<html lang="en">
    <!--
      Licensed to the Apache Software Foundation (ASF) under one or more
      contributor license agreements.  See the NOTICE file distributed with
      this work for additional information regarding copyright ownership.
      The ASF licenses this file to You under the Apache License, Version 2.0
      (the "License"); you may not use this file except in compliance with
      the License.  You may obtain a copy of the License at
          http://www.apache.org/licenses/LICENSE-2.0
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License.
    -->
    <head>
        <meta charset="utf-8" />
        <title>PutSlack</title>
        <link rel="stylesheet" href="../../../../../css/component-usage.css" type="text/css" />
    </head>

    <body>
        <!-- Processor Documentation ================================================== -->
        <h2>Description:</h2>
        <p>
            The PutSlack processor sends messages to <a href="https://www.slack.com">Slack</a>,
            a team-oriented messaging service.
        </p>
        <p>
            This processor uses Slack's <a href="https://slack.com/apps/A0F7XDUAZ-incoming-webhooks">incoming webhooks</a>
            custom integration to post messages to a specific channel. Before using PutSlack, your Slack team should be
            configured for the incoming webhooks custom integration, and you'll need to configure at least one incoming
            webhook.
        </p>
        <p>
            To configure PutSlack, set the following mandatory properties:
            <ul>
              <li>
                <code>Webhook URL</code>: The URL received from Slack that allows the processor to send messages to your team.
              </li>
              <li>
                <code>Webhook Text</code>: The text of the message to send to Slack.
              </li>
            </ul>
        </p>
        <p>
            Dynamic properties can be used to append items to the "attachments" branch of the JSON payload. Each dynamic property will be processed and added
            as an item within the array. The keys are not used by the processor. Instead, for each flowfile, the values of the dynamic properties is converted to JSON and added
            to the the attachments key of the JSON payload sent to Slack. For information on the attachment data structure, see <a href="https://api.slack.com/docs/message-attachments">https://api.slack.com/docs/message-attachments</a>
        </p>
    </body>
</html>
