# Subscribing to a messaging channel Chatlayer uses webhooks to allow external services to send messages to the platform. In the app integrations world, this is performed by two functions: `performSubscribe` and `performUnsubscribe`. The main goal of these two functions is to register and deregister the webhook which Chatlayer provides to the external service. This webhook URL is available inside these functions. ## Perform subscribe `performSubscribe` is responsible for registering a webhook to the external service. App integrations provide a value inside `bundle.targetUrl` with the correct URL. The following sample demonstrates what that could look like: ```javascript module.exports = async (sdk, bundle) => { const body = { callback_url: bundle.targetUrl, bot_id: botId, bot_version: botVersion, }; await sdk .request({ url: 'https://myservice.com/webhooks', method: "POST", body, }) .catch((err) => { throw new Error(`failed to register webhook: ${err.message}`); }); }; ``` ## Perform unsubscribe `performUnsubscribe` is responsible for deregistering the previously registered webhook from the external service. The following sample demonstrates what that could look like: ```javascript module.exports = async (sdk, bundle) => { const body = { bot_id: botId, bot_version: botVersion, }; await sdk .request({ url: 'https://myservice.com/webhooks', method: "DELETE", body, }) .catch((err) => { throw new Error(`failed to unregister webhook: ${err.message}`); }); }; ```