Changelog

The latest releases and improvements to Knock.

Send silent push notifications with Knock

If you've used a smartphone, you know about push notifications. You may not be as familiar with silent push notifications.

Silent push notifications wake up your app in the background without interrupting your user. As Apple explains it, “A [silent push notification is a notification that doesn’t display an alert, play a sound, or badge your app’s icon. It wakes your app in the background and gives it time to perform some actions”.

An example: in a news reader app you might send silent push notifications when there's new content you want your app to download in the background. Once the new content has finished downloading, you could send a normal push to your user with the latest headline. When your user opens the app, the content is ready, making the experience snappy and polished.

Starting today, Knock supports silent push notifications on Apple, Firebase Cloud Messaging, and Expo Push. For our news reader example, what would have been a complicated set of backend logic becomes a single API call to a three step workflow whenever breaking news arrives:

  1. Send a silent push notification
  2. Delay (long enough for the device to load their content)
  3. Send a normal push notification

You can learn more about how to use silent push notifications in our docs.

Dynamic batch windows

Knock has always supported batching notifications over a set window of time. Now, batch steps can be configured to take a dynamic batch window that is set when you trigger your workflow.

A dynamic batch window will wait for an interval of time provided by you in the data of your notify call under a key you set when you create your workflow. The key you specify in the workflow editor can be dot-delimited (e.g. nested.path.to.window) to reach nested attributes. When this workflow step runs, Knock will use this value to set when your batch window will close.

This value can be either an ISO-8601 timestamp (e.g. 2022-05-05T20:00:00Z), or it can be a relative duration in the following format:

{
  "unit": "minutes", // Must be one of seconds, minutes, hours, days, weeks, or months
  "value": 10 // Any non-negative integer
}

Read the documentation to get started →

Fixes and improvements

  • 🌱 The objects page on the dashboard now shows preferences (Previously object preferences were only managed via the API)
  • 🌱 Email channel settings can now use liquid tags and be dynamically populated
  • 🌱 We now support deleting user and object channel data via the API
  • 👀 We now lazy load message delivery logs and limit the list of logs to 25 at a time to keep the experience snappy
  • 👀 We improved email layout previews to look even more accurate to what is actually sent
  • 🐛 When viewing batched workflows in the debugger, we show more detail about batched workflows including their current status

Design beautiful notifications with our visual template editor

Today is a good day. We’re shipping our visual template editor to make it even easier to craft great-looking product notifications from within Knock.

Now you can use our drag-and-drop editor to build great looking email notifications that include text, buttons, quotes, and dividers, all without having to write a single line of 90s-era email HTML. (IYKYK.) This is a low code editor, not a no code editor. This means that we take away all the annoying parts of writing email templates, while still giving you the flexibility of markdown, HTML, and liquid syntax for variable injection and control flow. And of course if you want to write raw HTML and CSS on your own, you're always welcome to.

We’ve even added new branding settings so you can ensure your brand elements are consistent across all of your product messaging. 🌠

As of today, our visual template editor is only available for email templates. We’ll be expanding the visual template editor to other channel types with interactive components such as Slack later this year. For notification channels with text-only templating—SMS, push, in-app—you’ll be able to use the same code editor you already use in Knock. 👍

Read the documentation to get started →

Fixes and improvements

  • 👀 We added a better empty state display for Objects when none was found for a given collection
  • 👀 We improved the design of the variable pane in the message template editor
  • 🐛 We fixed an issue where message logs for email notifications with attachments were taking long to be retrieved in dashboard

More granular preference options with conditions

When working with preferences, you’ll sometimes run into advanced use cases where you need to provide even more granular preference options for your customers. For example: you may want to let a user mute notifications about a given resource in your product. That’s where preference conditions come into use in the Knock model: they provide a powerful way for you to add extra logic that’s computed during preference evaluation per recipient.

You can now apply a set of conditions to an individual category, workflow, or channel type preference, which will need to return true to send the notification out. The conditions you create can reference properties in your data payload or on the recipient. Here's an example of a condition where we only send a notification if the current resource is not in a list of muted ids for a recipient:

{
  "argument": "data.pageId",
  "operator": "not_contains",
  "variable": "recipient.mutedPageIds"
}

Read the documentation to get started →

More accurate email previews

We know making sure you see an accurate preview for your notifications is crucial when creating your notifications. Previously, we had rendered a close approximation of your emails on the client, but there were some cases where what you would see in the preview tab would differ from what you'd see when you ran a test.

From today we now render the emails on the backend, applying the same set of transformations to the email as you get before it's delivered to your users. This means a much more accurate previewing experience, CSS warts and all #htmltables4eva.

Fixes and improvements

  • 👀 We now show you the variable pane on our workflow builder, with a new button in the top bar to toggle the variable pane on and off in both the builder and the message template editor
  • 👀 We moved the action menu in the email template editor into the top bar, cleaning up the UI
  • 🐛 We fixed an issue where our users.identify and objects.set endpoints weren't correctly upserting data
  • 🐛 We fixed an issue with attachments on AWS SES not coming through correctly
  • 🐛 We fixed an issue in our Elixir SDK where calling the Users.get_feed/3 endpoint with no options would cause an error

New messages API

Now you can bring the messages you send with Knock into your own product to power customer support and message logging use cases. Our new message API endpoints allow you to list all of the messages generated by Knock, as well as access additional message information such as batched activities, triggering events, and message content. Our messages API also supports a number of filtering options, so you can easily find the messages you're looking for.

Read the API documentation →

Fixes and improvements

  • 👀 Our identify endpoint no longer requires a name or an email for a user
  • 🐛 We fixed a bug where nested variable paths weren't being properly parsed when a value existed for a top level path in the template editor
  • 🐛 We fixed an edge case in our push sender where sending any empty data payload on a notify call would cause an error

Send Discord notifications with Knock

Now you can use Knock to power the notifications you send to Discord.

We support incoming webhooks and Discord bots, so whether you're sending notifications to an internal Discord channel or to a bot that your users are OAuth'ing into their own Discord servers, Knock has you covered.

Like all channels in Knock, once you've configured Discord you're ready to add it into any of your notification workflows. Plus, you'll get full observability into the responses we receive from the Discord API so you can debug as needed.

Learn more about our Discord integration →

Fixes and improvements

  • 🌱 We shipped a new request buffer to help buffer incoming workflow trigger requests at scale
  • 🌱 We shipped our new push documentation to our docs after it had previously lived in our legacy support feature guides
  • 👀 We made a number of improvements to the variable pane editor. Now when you remove all references to a variable in your templates, its corresponding variable is automatically removed from the pane. If you rename all instances of a variable, its corresponding variable in the pane is renamed. This is a big win for variable pane usability 🙌
  • 👀 We improved our messaging in the debugger about skipped batch steps when a batch key could not be found in the data payload of the workflow trigger
  • 🐛 We fixed a bug where new users could be created by calling the preferences endpoint with a non-existing user_id
  • 🐛 We fixed a bug where certain template schemas would cause the app to crash upon attempting to view a workflow
  • 🐛 We fixed a bug where the email preview pane would hang when it couldn't find a layout with which to render the preview

Fixes and improvements

It's been a whirlwind of a week here at Knock HQ with our official launch yesterday 🎉

And now, we are back to our regularly scheduled programs — shipping!

  • 🌱 knock.app got a facelift with brand new designs!
  • 🌱 We added a system status page: status.knock.app
  • 🌱 We added JSON editor support for Slack
  • 🌱 We added email attachments support for Mailgun
  • 👀 Improved the design of toast alerts throughout dashboard
  • 👀 Improved the design of associated activities in the message overview
  • 👀 Improved the description of the batch key behavior in the workflow editor
  • 👀 Improved the empty state display for objects, and non-development environments
  • 👀 Added an ability to add a short description (up to 280 chars) to your workflows
  • 👀 Added an ability to use liquid syntax for email overrides
  • 👀 [Docs] Added a language selector for all of code examples
  • 👀 We now automatically set the default retention period of 365 days when creating an in-app channel
  • 👀 We now automatically create a message template when creating a new channel step in a workflow
  • 👀 We now consistently refer to "uncommitted" changes instead of "unstaged" in some places previously
  • 👀 We now display a configured provider logo when choosing a channel step in the workflow editor
  • 🐛 Added the missing chat type to the workflows filter
  • 🐛 Fixed an issue of accidental duplicate user accounts when signing up by handling user emails case insensitive
  • 🐛 Fixed the "View Workflow" link in the popover menu in the Workflows table
  • 🐛 Fixed an issue where cloning a workflow with overrides was erroring
  • 🐛 Fixed a request timeout issue with viewing certain log items
  • 🐛 Fixed the message status logic to use the highest status when there are multiple messages (if one message is "read" and another is "seen", then the evaluated status is "read")
  • 🐛 [Docs] Fixed the "Flash of Unstyled Text" (FOUT) issue

Power your Microsoft Teams notifications with Knock

Following our recent Slack support release, we are delighted to announce we now support Microsoft Teams as a new provider for our chat channel type 🎉.

Learning how to integrate with a new 3rd-party chat app provider can be a pain. You have to read through a lot of documentation just to understand how their integration model works, and you have to learn their message formatting syntax. With our Teams integration, we're abstracting away the schlep so you can focus on what matters: delivering great messaging.

You can add a Teams step to any of your workflows, just like any other channel. Once you do, we let you use basic markdown to edit your notification templates—we handle the translation into Microsoft's Adaptive Card syntax. If you want to build more advanced Teams messages, we give you a JSON editor so you can write Adaptive Cards yourself.

Like all channels in Knock when you use Teams you get full observability into the responses we receive from the Teams API, and you can store Teams channel data on user or non-user recipients.

Learn more about our Microsoft Teams integration →

Workflows: read-only mode

Knock was built with isolated environments from day one to ensure our customers didn't accidentally make changes to notifications in production. As of today, you can navigate into your production workflows in a safe, read-only mode so you can see which version is live in your production environment (and send test notifications as you need to.)

Fixes and improvements

  • 🌱 We added support for users to change their user names within the Knock dashboard
  • 👀 We updated the template editor theme to make it easier to parse liquid keywords, variables, and control flow operators

Email attachments

As of today you can include attachments in the email notifications you send with Knock.

Knock already enables you to dynamically update the content of your notifications with variable injection using the data you pass to us in your notify calls, and now you can include one or more attachments within that payload and we'll attach them to your email messages at workflow runtime.

We had to do some interesting work under the hood here to support large incoming data payloads (more on that another time), but we're now able to process multiple files (up to 10mb each) in a rock solid way. We hope you're as attached to this feature as we are. 😁

Learn more in our docs

Fixes and improvements

  • 👀 Batch keys are no longer required on batch functions. When no batch key is provided we batch by the recipient and workflow by default
  • 👀 We added a new "commit all" action in your development environment under the commits panel
  • 👀 We improved the commits panel in the dashboard
  • 👀 We made the logs page more obvious and not hidden under the "Developers" section
  • 👀 Large binaries sent in your data payloads will now be truncated in API logs
  • 🐛 We fixed a bug with our trigger condition logic where steps that didn't produce a message would always evaluate to false on trigger conditions referencing that output
  • 🐛 We fixed an issue where Slack summaries were not optional (as they should have been)

New customer onboarding

When you start with a new developer tool, it can be hard to know how to go from tinkering in your local environment to going live in production. Our new onboarding flow shows the basic steps you need to complete to send notifications to your customers in production using Knock.

We've included the relevant context for making your first API calls to Knock, and we show your progress so you know what to do next. We're excited to see how this guide helps new customers implement notifications in their product even faster than before.

Set notification preferences by workflow category

As of today you can add categories to your workflows in Knock and use those categories in your notification preferences.

Sometimes you want to enable your users to set a preference for a broad category of notifications instead of presenting them with preference controls for every type of notification you send. For example, you might have a category for direct notifications that includes everything from mentions to approvals to tasks due in the next 24 hours. You can learn more about how to power use cases such as this one in our preferences documentation.

Use multiple email layouts in Knock

Many of our customers use a default email layout across all of their transactional notifications, but sometimes you want a different layout for when you're sending a welcome notification from a founder (no styling at all) or an email from your marketing team (a bit more pizzazz). Now you can create multiple email layouts in Knock to use in the different workflows you power with our product.

Fixes and improvements

  • 🐛 We fixed a caching issue with cloning workflows
  • 👀 We added an explicit save button for our email layouts to make the editing experience better

SOC 2

Knock has successfully completed its SOC 2 Type II audit, certifying the effectiveness of our security processes and controls. You can learn more in our blog post announcement.

We've built Knock with security at the forefront of our design and architecture from day one. Now, automated monitoring through Vanta and formal policies allow us to stay up to date on our security posture at all times.

If you're a customer that would like to receive a copy of the report, please send us a note at security@knock.app.

Filter debugger by endpoint

We've added endpoint filtering to our debugger to make it easier to find the requests you're looking for. If you're debugging preferences work, filter to only see requests made to our preferences endpoint. If you're debugging our feed, filter to see feed requests. And so on.

Debugger filters

Fixes and improvements

  • 👀 We now surface test runner calls in our developer debugger so you can dig into their workflow runs just as you would for normal API calls made to Knock
  • 👀 We've made actor optional on our workflow trigger endpoint (after some helpful customer feedback!). When you include actor on a request you can use the actor. namespace to access user schema properties about the user or object that triggered the notification
  • 👀 The debugger now shows linked batched workflows on batch steps so you can know which subsequent events were included in a given batch
  • 👀 We updated our docs to move our API reference to its own dedicated part of the site. This gives it some breathing room and surfaces each endpoint as its own section of the sidebar for easier navigation
  • 👀 We added a new page to our API documentation describing the functionality of our Feeds API
  • 🐛 We fixed a bug where browser auto-fills were hijacking the inputs in our test runner
  • 🐛 We fixed a few links in the dashboard that were linking to outdated support documentation
  • 🐛 We fixed a bug where long account names would squish the account icon in the dashboard sidebar
background
background

Ready to get started?

Check out our documentation and sign up for an account.

Sign up