--- id: feature_updates_to_slack title: Feature Updates To slack --- ## Create a custom Slack WebHook url: 1. Go to [https://slack.com/apps/manage/custom-integrations](https://slack.com/apps/manage/custom-integrations) 1. Click Incoming WebHooks 1. Click “Add Configuration” 1. 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. ```javascript 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')}`); }); ```