Β 

Changelog

The latest releases and improvements to Knock.

An overhaul for message status conditions

This week we've shipped a major update to message status conditions in the workflow editor. While we have long supported workflow step conditions that evaluate against the status of a preceding notification message, we only ever provided a small set of condition cases.

With this update, we've expanded the set of condition cases available to cover all possible message delivery and engagement statuses. Also included are some validation helpers that will warn you if we detect you've designed a condition that will never evaluate successfully.

This is a fully backwards compatible updateβ€”all of your existing message status conditions will continue working as you've come to expect. We're excited about how this update will unlock more powerful, composable control flow for your workflows, especially in combination with Knock open and link tracking.

For more details, visit our message status conditions docs or our general guide on Knock conditions.

Enhanced security mode configuration and user token signing helpers

We're excited to share a couple of developer experience improvements to API security at Knock.

Since the beginning, Knock has required that you include a signed user token in requests to your production environment that use a public API key. Now, you can configure this requirement on a per environment basis. We call this "enhanced security mode", and when enabled we will require those signed user tokens. Existing production environments still have enhanced security mode enabled by default.

We've also made it easier to work with those signed user tokens. When you generate a shared signing key in the Knock Dashboard, we now present the key in base-64 format by default. This can be easier to use within single-line environment variables. The PEM-encoded format is also still available.

The Knock Node SDK now includes a convenience method, Knock.signUserToken(), that will automatically use the KNOCK_SIGNING_KEY environment variable in either base-64 or PEM format to securely sign user IDs for use in your client applications.

Lastly, we've updated our security and authentication guide with more helpful notes on how to work with enhanced security mode.

Head over to the "Developers > API keys" page in the Knock Dashboard to take a look.

Fixes and improvements

  • πŸ‘€ From the workflows list, you can now open a workflow in a new browser tab by cmd + <click>-ing it.
  • πŸ‘€ We shipped a small redesign to the "Integrations > Extensions" management page.
  • πŸ‘€ Users with the support role can now access the Knock analytics page.
  • πŸ‘€ We added some truncation for lengthy ID and key values across the Knock dashboard.
  • πŸ‘€ When setting channel data for a user or object, we now validate that the shape of the channel data you send us is valid for the target channel type.
  • πŸ‘€ Within the workflow builder, you can override channel-level Knock tracking config defaults for specific workflow steps. Now, we've added a button that lets you reset your overrides so that your step once again inherits from channel-level defaults.
  • πŸ› We fixed a bug that prevented you from creating a workflow with more than 10 channel steps. You can now create workflows with any number of channel steps.
  • πŸ› We fixed a bug where we wouldn't display environment default preferences in the Knock dashboard after first creating them.
  • πŸ› We fixed some bugs with user invites where duplicate users would exist after a new user accepted an invite and signed up to join a Knock account.
  • πŸ› We fixed a bug where non-visible Liquid statements (e.g. {% if %}) would result in extra, empty <p> tags when rendering a Markdown template into HTML.
  • πŸ› We fixed a bug where you couldn't set an empty connections list for the channel data for a chat channel for a user or object.

Trigger workflows to lists of recipients with Object Subscriptions

We're happy to announce that we've added support for object subscriptions to Knock. Object subscriptions make it easy for you to create and manage lists of recipients and trigger notification workflows to all recipients who are subscribed to that list, all from a single API call.

You can use object subscriptions to build pub/sub or alerting features on top of Knock, without the need to manage who should be notified and let Knock handle the efficient fan out of sending notifications to thousands of users simultaneously.

// Create an object to subscribe recipients to
await knock.objects.set("project_alerts", project.id, {
  name: project.name,
});

// Subscribe one or more users to the alerts
await knock.objects.addSubscriptions("project_alerts", project.id, {
  recipients: ["esattler", "dnedry"],
});

// Trigger a workflow to all recipients subscribed
await knock.workflows.trigger("alerts", {
  recipients: [{ collection: "project_alerts", id: project.id }],
});

For more details, visit the Object subscriptions docs.

Analyze your notification event data in downstream tools with our Segment extension (beta)

We're excited to announce that our new Segment extension is now in beta. In just a few clicks you can start sending all of the events associated with the notifications being sent through Knock – clicks, opens, and delivery events – to over 350 destinations available in Segment.

For more details, visit the Segment extension docs. The Segment extension is available on the Growth and Enterprise plans. You can receive beta access by contacting us at support@knock.app.

Fixes and improvements

  • πŸ‘€ We've changed our preferences API so default preferences will always be merged into the preferences shown in the dashboard and via the API for both users and objects
  • πŸ‘€ We've extended our support role to include viewing read-only workflows, logs, and workflow runs across all environments
  • πŸ‘€ You can now press "cmd + k" to access the search bar on our docs
  • πŸ› We fixed an issue where our user typeahead wouldn't allow you to select a user where there multiple users with the same emails
  • πŸ› We fixed a bug where specifying a sort order on a batch step would not sort the activities in the same order on the /v1/messages/:id/activities API
  • πŸ› We fixed an issue where a malformed piece of JSON in a preview variable could cause the app to crash
  • πŸ› We fixed a small bug where creating a new email layout would not show up under the "Manage template settings" when selecting a custom layout

Resend + Knock

We're super excited to announce that we now support Resend as an email provider with Knock. Now you can send great-looking emails through Resend's email API, while orchestrating your multi-channel notifications with Knock.

We're a big fan of the Resend team and of modern developer tooling in general, so we're excited to be able to extend their API to Knock customers everywhere. Happy (re)sending!

Read more in our docs

An improved user search component: find by ID or email

This improvement is a long time coming. We've improved our user search component in a big way. Now when you're in the Knock test runner, you can search for recipients and actors by either their user ID or their email. This makes it much easier to quickly find the recipient you're looking for and send them a test notification.

A screenshot of our new user search component

We've updated all of our other user search experiences (across messages, logs, and workflow runs) to use this new behavior, too. This makes it easier for your support team to quickly find the Knock logs associated with a particular user.

New and improved template editor design

We've added some visual polish to our template editor. It helps with general spacing and readability. We've also added new breadcrumbs to the template editor to make it easier to see where you are in Knock and to quickly return to your workflow canvas.

New template editor UI

New undelivered status with outbound webhook support

Our outbound webhooks are a popular way for our customers to stay updated on what's happening in their Knock system and to trigger behavior in their own application based on Knock events.

Previously our message.undelivered webhook would fire with each delivery attempt we made to your downstream notification providers. Now we have two separate webhooks, one for our delivery attempts to your providers (message.delivery_attempted) and one for when delivery has failed and no more attempts will be made (message.undelivered).

This makes it easier to trigger behavior in your application based on undelivered notifications.

Fixes and improvements

  • πŸ‘€ We've added a workflow tag to our datadog metrics
  • πŸ‘€ We've made some performance improvements to our analytics views in the Knock dashboard
  • πŸ‘€ We improved our error messaging when sending a null, undefined, or empty API key into Knock
  • πŸ› We fixed an issue where email fields with liquid would fail on downstream providers when resolving to an empty string
  • πŸ› We fixed an issue where conditions with arguments that resolved to strings containing periods could cause errors when evaluating some conditions

Protect customer data with dashboard obfuscation controls

Today we're announcing that all Knock customers can use the customer data controls we first announced as part of Knock HIPAA compliance. With this release, you can obfuscate customer data within the Knock dashboard while still giving your team the ability to debug your notification system as needed. These controls can be enabled on a per-environment basis, enabling you to secure customer data in production while continuing to work the way you want in your internal-only development environments.

One of our foundational product principles at Knock is developer visibility. We want you to be able to observe the Knock notification system and debug potential issues, just as you would with an in-house notification system. But with great visibility comes great responsibility. With this release, you can continue to debug your notification system with the confidence that your customers' production data is protected, even from your internal team.

You can enable customer data obfuscation by going to "Settings > Environments", and then clicking "Edit environment".

Fixes and improvements

  • πŸ‘€ We added a new filters section to workflow logs to filter by request ID and status of the requests
  • πŸ‘€ We improved our conditions handling for comparing null values with > and < operators so a comparison always returns false
  • πŸ› We patched an issue where API logs with large lists would never appear in the API log debugger
  • πŸ› We added a fix for batching where a workflow run with a batch could display as having an error, even after it has succeeded
  • πŸ› We fixed an issue where default preference sets could incorrectly return the wrong preferences when a tenant was specified but there was no corresponding user-tenant preference set.

Build custom feed filters using notification metadata

Most notification feeds share a common set of built-in filters, usually a combination of filter by seen, read, or archival status. But as customers have used our real-time feed infrastructure to build for different use cases (such as inboxes and task centers) they've asked for the ability to introduce custom filters into the notification experiences they build with Knock. Now they can.

With today's release you can filter our feed and message endpoints by any of the data you pass to Knock in your workflow trigger payloads. This means you can introduce any type of filter into your feed experiences, whether that's by completion status (e.g. for task centers), by approver (for approval workflows), or by any other key you can think of. We're super excited about the flexibility this brings to building in-app UI with Knock and the use cases you can power using it.

This feature is now available for all customers across all of our SDKs. You can learn more in our docs. Let us know what feedback you have!

View per-user workflow runs in a single place

Knock already has multiple views into our workflow engine to help developers understand how their API calls to Knock lead to messages sent to customers. But for support and operations teams, these logs aren't always intuitive to parse when you're looking to find all the workflow runs generated for a given recipient.

Today we're launching a new workflow runs view that shows you exactly that. The workflow runs view shows you all workflow runs generated for a given workflow, so you can easily see which workflows were triggered for a given recipient and the messages that were generated as a result. This makes it even easier for everyone on your team to see into the Knock notification engine and to understand how it's messaging customers.

You can find the new workflow runs view in the workflow runs tab under a given workflow's page or under the "logs" page if you want to see all workflow runs within a given environment. You can also filter by a number of properties to find the exact workflow runs you're looking for.

Workflow run view tab

Fixes and improvements

  • πŸ‘€ We added an expanded version of the popover message template editor
  • πŸ› We fixed a cursor display issue on our popover message template editor

Today we’re launching beta support for native link and open tracking within our email, SMS, chat, and in-app channels giving you unprecedented visibility into the cross-channel notifications you’re sending. Previously we had relied on downstream message senders to handle link and open tracking, but bringing this natively into Knock means that you’ll be able to see analytics relating to all types of messages in a single place.

For more details, visit the link and open tracking docs.

Want to sign up for the beta? Let us know.

Monitor your Knock notifications with our Datadog extension (beta)

We are proud to introduce the Knock Datadog extension! In just a few clicks, you can publish a stream of metrics straight from Knock to your Datadog account. These metrics can then power Datadog dashboards, alerts, and troubleshooting. Now it is easier than ever for teams to detect and respond to issues with misconfigured channels, expired credentials, changes in authorization, or downstream issues with Knock itself.

Although Knock engineers monitor and respond to our own suite of alarms, reports, and metrics around the clock already, the new Datadog extension offers additional peace of mind to teams with high operational or compliance requirements.

For more details, visit the Datadog extension docs.

Want to sign up for the beta? Let us know.

Fixes and improvements

  • πŸ‘€ We made template previews more closely mirror what is actually delivered across SMS, chat, and in-app channels
  • πŸ› We sped up queries for API and workflow logs
  • πŸ› We fixed an issue where overrides could cause FCM notifications to error

Power notification localization with Knock

Today we’re super excited to announce the beta release of Knock template localization. With template localization you can use the notification templates you already send with Knock to create locale-specific variants for users that prefer to receive their notifications in a different language. This helps meet your users where they are and improve the notification experience of your product.

Let’s say you have a welcome notification workflow that sends new users an in-app message and an email. For each of those notification templates, you can create a variant that's localized based on each recipient's locale. At runtime Knock uses the locale property on your recipient to determine which language variant of your notification should be sent. We also provide a "default" template that's used for any recipients whose locale isn't supported.

Another great thing about today’s release: though we built template variants for localization use cases, you can use your own custom logic and expressions to power any template variant use case you can dream up. For example, if you wanted to send a tenant-specific variant of a given notification template, you could power it with Knock template variants.

You can learn more about template localization in our documentation and request beta access by sending us a note at support@knock.app.

Enable auto-join for your Knock account

If you're a Knock account owner, as of today you can enable auto-join for users from your domain. A quick example: if you're the Knock admin for your company Collab.io, once you enable auto-join any verified users with a β€œcollab.io” email address can join your account.

This is a win for admins and end users alike. If you're an admin, enabling auto-join means (i) less time spend managing account invites and (ii) a safeguard against users from your domain accidentally creating their own account when they should be working in yours. If you're an end user, it means you can get into the right account for your organization when first signing up for Knock.

You can learn more about enabling auto-join in our docs.

Fixes and improvements

  • πŸ› We fixed a bug where template previews weren't honoring brand defaults.
  • πŸ› We fixed a bug where activities under a message weren't paginating on the feed API.

Set inline channel data and preferences

We've expanded our workflow trigger inline identify to support setting channel data and preferences for recipients. That means it's now easier than ever to start sending notifications to your users with Knock, without the need to backfill existing data. It even works for setting data for multiple channels and for per-tenant preferences too.

Read more on setting channel data inline and setting preferences inline in our documentation.

Conditions builder improvements

We've added a whole host of new features to our step and channel conditions builder this month. You can now reference:

  • Environment variables (e.g. skip this step if we're in the development environment)
  • Workflow run state including total_activities and total_actors (e.g. only execute the step if we have more than one item from a batch)
  • The current tenant (e.g. only batch for workspace X and never for workspace Y)
  • The current workflow (e.g. only send to SMS if the workflow category includes messages)

Read more in our docs.

Fixes and improvements

  • πŸ‘€ We expanded the delay block to support dynamic delays from the recipient, actor, environment and more
  • πŸ‘€ We added the ability to reference the current_message.id in your notification templates to get access to the unique, recipient-specific message.id
  • πŸ‘€ We moved 'Designing workflows' to its own section in the documentation
  • πŸ‘€ We made improvements to our email previews to be more consistent with what's sent
  • πŸ› We fixed an issue where JSON values in chat templates would not escape \n and \ characters correctly
  • πŸ› We fixed a bug with mailgun delivery checks where the requests would timeout after 5+ seconds
  • πŸ› We fixed an issue where some starter plans could not create a new webhook
  • πŸ› We fixed a bug where blank in-app feed messages would fail to send

Per-environment channel conditions

By popular demand, we’ve brought our condition builder to your per-environment channel configurations. Channel-level conditions are helpful when you want to add a condition to all instances of a channel in a given environment.

An example: let’s say you want to ensure that your email channel will only send notifications to recipients whose email ends in knock.app from your development and staging environments. Now you can.

We surface all channel-conditions on their relevant workflow-level steps and in the Knock debugger, so you’ll always have visibility into why a given notification is or isn’t sending.

Read more in our docs

Set batch order: first or last ten items

We’ve updated our batch function to include a new batch order setting. This enables you to set whether a batch function will include the full activity objects for the first or last ten activities aggregated by your batch function.

As a reminder, the Knock batch function will always return its total count of items and unique actors, but only returns full details for ten items in the batch for the purposes of listing out batch details in a notification (as we are in the example notification below).

Setting batch order example

Read more in our docs

Fixes and improvements

  • πŸ‘€ We redesigned the workflow builder
  • πŸ‘€ Added color labels for environments
  • πŸ‘€ Now you can commit on your workflow from the workflow builder page

Send WhatsApp notifications with Knock

You can now send notifications from Knock to your users on WhatsApp, the popular chat app from Meta. Our integration makes it easy to include WhatsApp in your notifications strategy, opening up another channel for you to reach your users where they are.

Read more in our docs

Vercel integration

We've shipped a new Vercel integration to make it easy for you to set up Knock for your Vercel projects. The integration will link your Knock API keys to your selected Vercel projects and keep them in sync for you.

You can find us in the Vercel integrations marketplace in the "messaging" category and read more in our documentation.

Fixes and improvements

  • πŸ‘€ [SDKs] We added new event types to our @knocklabs/client library in 0.8.13
  • πŸ‘€ [SDKs] We added experimental support for cross-browser context feed synchronization in our @knocklabs/client library in 0.8.13 via the new __experimentalCrossBrowserUpdates option
  • πŸ‘€ We redesigned our trigger conditions editor to be an inline form instead of a modal
  • πŸ‘€ We added a link to the workflow invoked from a source event action
  • πŸ› We fixed an issue where pagination for tenant messages was not working correctly