1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-12-22 19:07:54 +01:00
unleash.unleash/websitev2/docs/guides/feature-updates-to-slack.md
Christopher Kolstad 406f0554cf
Docusaurusv2 (#864)
feat: Upgraded to Docusaurus v2

closes: #771
2021-06-04 11:17:15 +02:00

2.3 KiB

id title
feature_updates_to_slack Feature Updates To slack

Create a custom Slack WebHook url:

  1. Go to https://slack.com/apps/manage/custom-integrations
  2. Click Incoming WebHooks
  3. Click “Add Configuration”
  4. This is Slack's help page on how to do this: https://api.slack.com/custom-integrations/incoming-webhooks
    • Choose a channel, follow the wizard, get the custom URL.

Send data to Slack using an event hook function

Using the eventHook option, create a function that will send the data you'd like into Slack when mutation events happen.

const unleash = require('unleash-server');
const axios = require('axios');

function onEventHook(event, eventData) {
  const { createdBy: user, data } = eventData;
  let text = '';

  const unleashUrl = 'http://your.unleash.host.com';
  const feature = `<${unleashUrl}/#/features/strategies/${data.name}|${data.name}>`;

  switch (event) {
    case 'feature-created':
    case 'feature-updated': {
      const verb =
        event === 'feature-created' ? 'created a new' : 'updated the';
      text = `${user} ${verb} feature ${feature}\ndescription: ${
        data.description
      }\nenabled: ${data.enabled}\nstrategies: \`${JSON.stringify(
        data.strategies,
      )}\``;
      break;
    }
    case 'feature-archived':
    case 'feature-revived': {
      const verb = event === 'feature-archived' ? 'archived' : 'revived';
      text = `${user} ${verb} the feature ${feature}`;
      break;
    }
    default: {
      console.error(`Unknown event ${event}`);
      return;
    }
  }

  axios
    .post(
      'https://hooks.slack.com/services/THIS_IS_WHERE_THE_CUSTOM_URL_GOES',
      {
        username: 'Unleash',
        icon_emoji: ':unleash:', // if you added a custom emoji, otherwise you can remove this field.
        text: text,
      },
    )
    .then(res => {
      console.log(`Slack post statusCode: ${res.status}. Text: ${text}`);
    })
    .catch(error => {
      console.error(error);
    });
}

const options = {
  eventHook: onEventHook,
};

unleash.start(options).then(server => {
  console.log(`Unleash started on http://localhost:${server.app.get('port')}`);
});