Slack Alerts

Slack alerts post a message to a Slack channel of your choosing when a product runs out of stock at a location, and one more message when stock comes back. They are switched off until someone on your account adds a Slack destination, and they are included on the plan you are already on. There is no add-on to buy.

Slack alerts are available on Shared and Dedicated instances alike. What decides is where your instance actually runs, not the plan name. If we are moving your instance between tiers, alerts keep running on the shared fleet until the move and resume on the new server once the move is complete; the daily check may not run on the days the move is in progress.

The short version#

  • For stock, stock-outs only. A message is posted when a product that has a minimum level set at a location drops to zero quantity on hand there. Nothing else about stock is posted as an alert (the optional weekly summary below is the one addition, and only if you tick it). Separately, with the destination's Temperature alerts toggle on, the channel also gets temperature alerts (beta): a message when a logger's alert rule is met or a connected sensor stops sending, a message when it is back in range or readings arrive again, and one summary after an upload that finds new excursions. A product that is below its minimum but not at zero, and a lot that is close to expiring, are never posted to Slack. Those stay in the daily stock alert email. If a product has no minimum level at that location, it is never checked, however low it gets.
  • From the same daily check as the email. We take one picture of your stock each day, in your instance's timezone, and messages are posted from that picture. This is not real time: a product that runs out at noon is not posted until the next daily check sees it.
  • One message per product and location, then one "stock returned" message. If the product is still at zero the next day, nothing more is posted. When the next daily check sees stock again, we post a single Stock returned message for it. If the same product runs out again later, that is a new message.
  • At most 50 new stock-outs per destination per day. If more products than that run out on one day, we post 50 and then one extra message saying how many more there are, with the true total.
  • The webhook must come from a Slack app. Legacy custom-integration webhooks and GovSlack are not supported; the URL's host must be hooks.slack.com.
  • Anyone on your account can add, change or remove a destination, and can send a test, and a test pages nobody; it posts one short message marked [TEST].

Setting it up in Slack#

You need three things on the Slack side:

  1. A Slack app in your workspace. Go to api.slack.com/apps, choose Create New App, and create it in the workspace whose channel should receive the alerts.
  2. Incoming Webhooks turned on for that app. In the app's settings, open Incoming Webhooks and switch it on.
  3. A webhook added to the workspace. Choose Add New Webhook to Workspace and pick the channel it should post to. Slack gives you a URL starting with https://hooks.slack.com/. That URL is the whole secret (anyone holding it can post to that channel), so treat it like a password.

The channel is chosen in Slack when the webhook is created, not in Lift. To post to a different channel, create another webhook in the same app for that channel and paste its URL.

Adding the destination#

  1. Go to Integrations in the portal sidebar, then the Destinations tab.
  2. Open Slack and choose Add Slack destination.
  3. Give it a name you will recognise, like "#warehouse-alerts".
  4. Paste the webhook URL from your Slack app.
  5. Save.

The webhook URL is entered once and never shown again. We store it encrypted, and there is no way to read it back, not in the portal, not through support. After saving, the panel shows only the host (hooks.slack.com). To change the URL, open the destination with Edit and paste a new one; to keep it, leave the field blank.

You can have up to 5 Slack destinations on an instance, each with its own webhook, and every stock-out goes to all of them. A Slack destination and a PagerDuty destination can sit side by side on the same instance; the Destinations page lists both kinds together.

Anyone on your account can open this panel and change these settings: add a destination, change its URL, switch it off, remove it, and send a test. It is a shared team surface, not an owner-only control. Our support team can see your destinations (the name and the host, never the URL) but can never change them.

Sending a test#

Once a destination is saved, its edit dialog has a Send test message button, and its card on the Destinations page has a Test send button that does the same. The test posts one short message marked [TEST] to the channel, saying that stock alerts for your instance are connected and that nothing is out of stock. It does not page anyone (a Slack channel is not an on-call rotation), so there is nothing to put in a maintenance window first.

Tests are rate-limited: one test per destination every 5 minutes. Pressing the button again inside that window sends nothing and tells you so. It is not a sign that the URL is wrong.

What a message looks like#

The headline is "Out of stock: product at location". The message carries the product and its code, the location, the quantity on hand (zero), the minimum level you set, the date of the check that found it, and your instance's name with a link to it. A footer line reads "one message per product and location; a 'stock returned' message follows when the next daily check sees stock."

If the daily cap is reached, the extra message is headed "N more products out of stock at your instance" and names the real numbers, pointing you at the daily email and your instance's reorder report for the full list.

When stock comes back, the message is headed "Stock returned: product at location" and says the out-of-stock alert for it is closed.

When the messages stop#

There is nothing to close in Slack. For a stock-out, the only follow-up we ever post is the Stock returned message (temperature alerts get their own back-in-range message), when the next daily check sees a quantity above zero for that product at that location. Every other reason we stop tracking a stock-out is silent: nothing is posted, and the channel simply stops hearing about that product:

  • The product is no longer tracked. The minimum level was removed, or the product or location is gone.
  • We could not check for three days running. If your instance has had no usable daily check for three consecutive days (it was suspended, being rebuilt, or the data could not be read), we stop tracking the stock-out rather than hold it open with nothing behind it.
  • You changed or removed the destination. See the next section.
  • Your instance was suspended or closed.

Replacing the webhook URL or removing the destination#

Replacing the URL posts no confirmation message to the old webhook or the new one. Within about an hour, the new webhook gets a message for each product that is still out of stock, and every message after that goes to the new webhook. Leaving the field blank keeps the URL you already saved.

Removing the destination stops every message to that channel at once, and nothing is posted to say so. Unlike PagerDuty, nothing is closed anywhere when you change or remove a Slack destination, because there is nothing to close in a channel.

When Slack stops accepting our requests#

If Slack refuses a message (the webhook was deleted, the app was removed from the workspace, the channel was archived) and it happens three times in a row, we switch the destination off and stop sending to it. The panel says so. A Slack outage or rate limit does not count: those are retried and never switch anything off.

To switch it back on, check that the webhook still exists in your Slack app, then open the destination with Edit and save its URL again. Pasting the same URL is enough.

What is not included#

  • Below-minimum and nearing-expiry are not posted. They are in the daily stock alert email only. Slack is for the one thing that stops work: a product at zero.
  • No daily digest to Slack.
  • The weekly summary only if you tick it. On a Slack destination, "Also post the weekly summary here" is off by default. Tick it, and while the weekly summary is switched on for your account under Stock alerts, the channel also gets one short message each Monday: the week's counts (stock-outs, below minimum, expiring lots, open and overdue purchase orders), up to 5 new stock-outs by product and location, and a link to the Reports page, which needs a portal login to open. It never carries stock values, supplier names, order numbers or activity quantities, it does not count toward the 50 a day, and it never switches the destination off. See The weekly summary.
  • Orders and shipments are not posted to Slack. Those are webhook events, delivered to an endpoint you own, not to a channel.
  • Not a webhook event. Stock-outs are not available through the webhooks API; this is a notification channel of its own.
  • Microsoft Teams is available too. The same stock-outs, posted as a card to a Teams channel through a Workflows webhook created in Teams. See Microsoft Teams alerts.