Changelog

The latest releases and improvements to Knock.

Today marks exactly 6 months since we published our first changelog, way back on May 5th 🎉. The product has come a long way in that time, and it's fun to look back on all that we've shipped. Onwards!

Sandbox mode: test notifications without sending them

Sometimes you don't want a message to be sent in a local or testing environment, but you do want the ability to debug your messages and see what might have gone out. Our new "sandbox mode" enables you to generate and preview messages for a given channel, without sending them to your downstream provider for delivery. Sandbox mode is great for when you want to test a channel's output, but want your messages to end up at /dev/null instead of actually sending live notifications through that channel.

You can enable sandbox mode via your channel configuration from the dashboard today and it's supported across SMS, push, and email channels.

Autogenerate plaintext emails

Writing both an HTML and plaintext template for your emails can be a tedious process. To speed things up, you can now generate the plaintext template straight from the HTML you've crafted, automatically.

All new email templates have this feature enabled by default from today. You'll see the generated plaintext content in the editor and in the preview. If you want to change the setting, you can do so from the plaintext view in the email template editor by toggling the "automatically generate plaintext" switch.

Fixes and improvements

  • 🌱 We added the ability to enable email open and link tracking within supported email providers. You'll see the options inside the environment configuration for your provider and they will default to "off" (don't track).
  • 🌱 You can now rename environments that you have created from the environments list view in the dashboard.
  • 🌱 We now send over the workflow key as a tag, or category to the downstream email provider. This makes it easier to do segmentation and analysis of your emails.
  • 👀 We improved the timeline design and debugger blank state in the messages view.
  • 👀 We made the wording consistent for when you're committing unstaged changes to an environment.
  • 🐛 We fixed a bug whereby you couldn't create an environment with the same name as one that was deleted.
  • 🐛 We fixed an interesting edge case in our notification engine that affected test runs in very particular cases.

Debug your Knock developer logs

Today we're launching the first piece of the Knock debugger experience. In our new debugger logs, you can see all of the API requests you've made to Knock, view their status, and filter to find the requests that you need to debug.

This is our first step towards a goal that's important to us at Knock: full developer visibility and observability into the Knock notification engine. It's our belief at Knock that when you use a 3rd-party system to power a part of your stack that's as important as notifications, you shouldn't have to sacrifice visibility and observability.

We have a lot more exciting updates coming soon in this part of the product. Stay tuned.

Fixes and improvements

  • 🌱 You can now pop out a separate window for code editing on single-line fields that accept variables and liquid logic, such as subject lines and action URLs
  • 🌱 We added the ability to filter by recipient email on our message logs. This makes it even easier to quickly look into any notification issues you're hearing from a specific customer
  • 👀 Now when you push workflows to production we show you which of those workflows are inactive in production and ask you whether you want to activate them
  • 🐛 We fixed a bug where the undo/redo stack was lost when you'd move back and forth between the editor and the preview in the template editor
  • 🐛 We fixed a bug in the test runner where shifting focus back to an actor or recipient field would cause the field to miss the first character inputted into the field
  • 🐛 We fixed a bug where Chrome auto-fill was appearing on fields in the test runner

List filtering

Now you can filter across all lists of resources within Knock. Whether you're looking for a specific workflow, a notification you sent to a customer, or a user within Knock, you can use filters to quickly find what you're looking for.

This is especially helpful for debugging use cases. Want to find all of the notifications sent to a particular recipient? Just filter by that recipient's email address or user ID to find every notification you've ever sent them.

We'll also be adding filtering to our new debugger, which you'll see show up in this changelog in the coming weeks. 🤫

New channel support: Expo for push, Telnyx for SMS

We added two new providers this week. If you manage your mobile app and push notifications through Expo, you can now orchestrate those notifications from within Knock. Same goes for Telnyx. You can now send Telnyx SMS messages from Knock.

Template editor quick reference

Over the last months of our invite-only beta, we've been amazed at the different types of notifications our customers power with Knock. They've used our template editor to build notifications with conditional logic, for loops, and copy that updates depending on the number of items in a given batch.

To help our new customers discover the power of the Knock template editor, today we're shipping our quick reference guide. Just press ? to open the reference and see a list of the properties and keywords you can use to build your Knock templates.

Screenshot of a template editor quick reference

We've also added new documentation about our template editor, so you can go even deeper into the functionality available within it.

Fixes and improvements

  • 👀 We shipped a new and improved trigger condition editor that makes it a lot easier to reference the read status of other steps when deciding whether to send a given notification, (e.g. don't send an email if the in-app notification has already been seen.)
  • 🌱 We made it easier to preview the action url on an in-app feed message, it now appears beneath the input and on hover of the message in preview
  • 🌱 We added the ability to provide a from name on our email channel configurations so you can put your best foot forward when sending emails to customers
  • 🐛 We improved the stability and performance of our push notification sender

Reorder your workflow steps with drag and drop

You can now reorder the steps in a workflow with drag and drop. This is especially helpful when you want to introduce a new batch or delay function into an existing workflow.

Fixes and improvements

  • 🐛 We fixed a bug in our environment promotion flow where multiple commits to the same workflow could get into the incorrect order in staging, causing discrepancies between development and production environments
  • 🐛 We fixed a bug where new users would get routed to an empty environment on initial sign-in
  • 🐛 We fixed a bug where refreshing the users page while in the production environment would route you to development

New delay function: wait until timestamp

Delays in Knock have always allowed you to pause the execution of a workflow for a fixed period of time. These "delay for duration" delays are handy for conditional sends and reminders, such as the invite notifications that we power with Knock. With this release we've made delays even more powerful by adding support for "wait until timestamp", where you can specify a future timestamp in your notify payload at which you want the workflow to resume execution. The classic use case for this is task reminders, where you need to trigger notifications at a specific timestamp in the future, rather than at a fixed period from when the workflow was executed.

You can start using timestamp-based delays today. Just select the 'Wait until timestamp' option in the delay step and specify the key to look up the timestamp from your data payload.

Bulk message operations API

We heard from some of our power users that they needed the ability to bulk modify the status of messages sent to their customers, which is especially helpful when needing to archive all of the existing messages for a given user, or mark all of the messages for a particular channel as read.

We've introduced our new bulk message status API to address this need, which lets you update the status of messages on a given channel without needing to know the message ids. It's the first bulk operation API at Knock, and we also introduced an accompanying bulk operation endpoint so you can monitor the progress of these jobs.

You can find the new bulk endpoint in our Postman collection, or can read the API documentation to interact with them via cURL.

Fixes and improvements

  • 🌱 We updated our dashboard to include the currently active environment in the URL, making it easier to share links to users, workflows, and messages with your colleagues
  • 🌱 We improved the empty state you see when a message can't be found, keeping it inline with what you see for users and workflows
  • 🐛 We fixed an edge case in our workflow engine whereby a workflow step could be triggered multiple times when a channel configuration was missing in the environment
  • 🐛 We fixed a visual layout issue with our workflow editor where the canvas didn't extend to the bottom of the page

Test your notifications without leaving Knock

We just shipped the Knock test runner. Now it's easier than ever to test the notifications you build and send with Knock!

If you've been responsible for testing notifications in the past, you know how painful it can be. To test just a single notification, you need to create multiple test users in your product and re-create the real-life scenarios in which they'll receive the notification. It's a time-intensive, tedious process, and one that makes it hard to ensure your customers are getting the best notifications experience possible.

With the test runner, you can test your notifications from right within the Knock dashboard. You can choose which notification(s) you'd like to test, determine which users or test aliases should receive the notification, and run tests across your different development and staging environments as needed. The test runner will remember the inputs used in the last test run for next time, so you can rapidly test and iterate on your notifications.

It just got a whole lot easier to make sure you're delivering great notifications to your customers.

Here's a look at the test runner in action:

Push individual workflows to production

When you're working as a team in Knock, you'll often have a few different notification workflows you're building in parallel. Now you can pick and choose which of those workflows you want to push to production, rather than having to push all of them at once.😅 We're excited to see larger teams adopting Knock and asking for features like these to improve their workflow.

Fixes and improvements

  • 🌱 Improved the sidebar layout of the dashboard for easier and more intuitive navigation
  • 🌱 Added a new "FCM + APNS" channel group option that can be configured to group both providers as a single push channel (available by request while in beta)
  • 🌱 Push notifications now include knock_message_id field in its message data payload, so you can easily track push messages and mark them as seen or read
  • 🐛 Fixed a bug with HTML sanitization in our message editor that caused issues with rendering certain email templates
  • 🐛 Fixed an issue with timestamps rendering truncated in the Users and the Messages pages
  • 🐛 Fixed an issue with an user avatar not updating correctly in the feed item preview when switching actor or recipient users
  • 🐛 Fixed an issue where some fonts were not being fetched in the Knock dashboard

Feed components: dark mode, pagination, and archiving

We've bundled a whole heap of new fixes and improvements in our 0.5.0 release of our React in-app notification feed component:

  • 🌱 Support for dark mode via the new colorMode prop
  • 🌱 Added automatic pagination support for when there are more than 50 messages in the feed
  • 🌱 Notifications can now be archived easily from the feed component
  • 🌱 Added support for overriding the avatar rendered in the notification cell
  • 🐛 Fixed an issue with dismissing the component in the popover not working when using the trigger
  • 🐛 Fixed an issue where the avatar would show > 2 characters for names that are more than 2 words
  • 🐛 Updated all of our dependencies to the latest and greatest versions

You can also read about how to get up-and-running using our feed components in our new blog post.

Message previews

We now support sent messages previews in the Knock dashboard! Just head on over to a sent message and go to the 'Preview' tab to see a representation of the message that we sent to the customer.

Example of a message preview on iOS

Fixes and improvements

  • 👀 Shipped @knocklabs/[email protected] which includes a new networkStatus API and optimistic archiving support on the feed
  • 🌱 Switched to using refresh tokens in the dashboard to prevent frequent logouts
  • 🌱 Moved to using a tags for our tables so now right clicks and other browser features just work
  • 🌱 Workflows now show when they have pending changes
  • 🐛 Improved the click area on our table cells for ease of navigation
  • 🐛 Fixed an XSS vulnerability in our message editor
  • 🐛 Fixed a bug where cloning workflows doesn't enforce the key constraints
  • 🐛 Fixed some users being incorrectly logged out in the dashboard

Fixes and improvements

It's a short week here at Knock HQ, but we've still got some goodies for you:

  • 👀 Added support for dynamic delays specified by a value in the notify data payload
  • 🌱 Improved the way long workflow names are handled in the dashboard, as well as some other layout fixes
  • 🌱 Added pagination to the workflow list in the dashboard
  • 🌱 Improved the in-app notification feed rendering speed
  • 🐛 Fixed an issue with a batch step so a specified duration is honored instead of always using a default 30s
  • 🐛 Fixed an issue with FCM where integers and booleans in the data payload would cause an error when sending messages
  • 🐛 Fixed an issue where users with non-url encoded characters in the id wouldn't load in the dashboard

View delivery logs

The dashboard now lets you inspect message delivery logs!

Our new delivery log viewer makes it very easy to see every request to and response from your downstream providers for each message, which provides full visibility into the downstream execution history of a message.

For example, when you're configuring a new channel with Knock, you may run into errors from a downstream provider like SendGrid or Apple's Push Notifications Service. If you can't see these errors in Knock, it makes it hard to know what's going on and how to fix the problem. Delivery logs make it easy to investigate issues like this.

To view these logs:

  1. On the dashboard, open the Messages page (You can also open the Messages tab for any of your users)
  2. Click on the message you would like to inspect
  3. Open the Debug panel to explore each request & response linked to that message

(Note: Messages sent to our in-app feed will have no debug logs because they are entirely managed by Knock.)

Fixes and improvements

  • 🌱 We updated the channel and the workflow page to display each provider's brandmark where relevant for better UX
  • 🌱 We added a new user's "channel data" page for viewing the configured channel data for each user
  • 👀 When configuring a new channel, available providers are now organized by channel type making it easy to find and selected the provider you want
  • 👀 We added support for removing items in a batch via our cancellation API
  • 👀 We improved how we render liquid templates
  • 👀 We pushed updates to our SDKs for Python, Ruby, Elixir, and Node to support our latest features, including the new channel data API for managing user-specific data such as device tokens for push notifications

Push notification support

Push it to the limit. 🤘 We now support sending push notifications from Knock.

If you're using native push notification services (such as Apple Push Notifications service or Firebase Cloud Messaging), you can quickly configure your provider as a push channel within Knock and add it to any of your existing notification workflows. We also support platform-specific previews, so you can see what your push notification looks like across iOS and Android.

As always, push can be used with the Knock preferences model to manage a given user's preferences for receiving push notifications alongside their preferences for other channels such as email, in-app feeds, and SMS.

(Note: We are not supporting intermediary push notification services such as OneSignal in this release. But we will be soon. If that's you, shoot us a note at [email protected] and let us know.)

Fixes and improvements

  • 👀 We added our Ruby SDK to the code examples modal on our workflow trigger step
  • 👀 We cleaned up the placeholder copy in our sign up flow
  • 🐛 We fixed a bug in our quick start guide example
  • 🐛 We fixed a bug for handling unknown message statuses