Send Slack Notifications from Autonomous Database

Describes how to configure Slack so that you can send messages, alerts, or output of a query from Autonomous Database to a Slack Channel. Also describes the procedures you use to send Slack notifications.

Prepare to Send Slack Notifications from Autonomous Database

To send Slack notifications, you must configure your Slack application to receive messages from Autonomous Database. Next, create a credential to use with the DBMS_CLOUD_NOTIFICATION procedures to send Slack notifications from Autonomous Database.

To use Slack with DBMS_CLOUD_NOTIFICATION procedures:

  1. Create your Slack app.

    The Slack app is installed in a Slack Workspace, which in turn has Channels where messages can be sent. The bot token of the Slack app must have the following permission scopes defined:

    channels:read
    chat:write
    files:write

    See Creating an app for information on setting up a Slack app.

  2. Have your Slack admin add the Slack app to the channels to which DBMS_CLOUD_NOTIFICATION can send message through the "Integrations" option in the channel.

    See Basic app setup for more information.

  3. Locate the app's bot token available in the Slack app specific page, under https://app.slack.com.

    See Basic app setup for more information.

  4. Create a credential object to access the Slack app from Autonomous Database.

    Tip:

    If you can not use the CREATE_CREDENTIAL procedure successfully, consult with the ADMIN user to grant execute access on DBMS_CLOUD packages.

    The credential's username is SLACK_TOKEN and the password is the bot token.

    For example:

    BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL(
         credential_name => 'SLACK_CRED',
         username    => 'SLACK_TOKEN',
         password    => 'xoxb-34....96-34....52-zW....cy');
    END;
    /

    See CREATE_CREDENTIAL Procedure for more information.

  5. Configure access control to allow user access to external network services (Slack).
    BEGIN
     DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
      host         => 'slack.com', 
      lower_port   => 443,
      upper_port   => 443,
      ace          => xs$ace_type(
          privilege_list => xs$name_list('http'),
          principal_name => example_invoking_user, 
          principal_type => xs_acl.ptype_db)); 
    END;

    See Configuring Access Control for External Network Services for more information.

Send Messages to a Slack Channel

After creating the Slack credential object as described in Prepare to Send Slack Notifications from Autonomous Database, you can use the DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE procedure to send a message to a Slack channel.
Example:
BEGIN
   DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE(
      provider          => 'slack',
      credential_name   => 'SLACK_CRED',
      message           => 'Alert from Autonomous Database...',
      params            => json_object('channel' value 'C0....08'));
END;
/ 

Use the params parameter to specify the Slack channel.

  • channel: Specifies the Channel ID.

    The Channel ID is a unique ID for a channel and is different from the channel name. In Slack, when you view channel details you can find the Channel ID on the “About” tab. See How to Find your Slack Team ID and Slack Channel ID for more information.

See SEND_MESSAGE Procedure for more information.

Send Query Results to a Slack Channel

After creating the Slack credential object as described in Prepare to Send Slack Notifications from Autonomous Database, you can use the DBMS_CLOUD_NOTIFICATION.SEND_DATA procedure to send the output of a query to a Slack channel.
Example:
BEGIN
  DBMS_CLOUD_NOTIFICATION.SEND_DATA(
      provider => 'slack',
      credential_name => 'SLACK_CRED',
      query => 'SELECT username, account_status, expiry_date FROM USER_USERS WHERE rownum < 5',
      params => json_object('channel' value 'C0....08',
                            'type' value 'csv'));
END;
/

Use the params parameter to specify the Slack channel and the data type:

  • channel: Specifies the Channel ID.

    The Channel ID is a unique ID for a channel and is different from the channel name. In Slack, when you view channel details you can find the Channel ID on the “About” tab. See How to Find your Slack Team ID and Slack Channel ID for more information.

  • type: Specifies the output type. Valid values are: 'csv' or 'json'.

See SEND_DATA Procedure for more information.