Β 

Changelog

The latest releases and improvements to Knock.

Workflow condition UX improvements

At Knock, we continually strive to improve the experience our users have building their notification workflows. As of this release, it's much easier to understand at a glance which workflow steps contain conditions and how those conditions will execute based on the variable state of a given workflow run. To see a step's conditions, just hover over its card chin to see a hover over preview of all condition groups present on the step. ✨

Push channel JSON overrides

We now support the ability to add JSON overrides to the notification payloads Knock sends to downstream push channels on your behalf. This means you can now support badge counts, extra data properties, sound files, and other provider-specific settings in your push notifications. You can learn more in our push channel documentation.

Fixes and improvements

  • πŸ‘€ Show canceled request id in debugger
  • πŸ‘€ Show delay until values in debugger for steps that support it
  • πŸ‘€ Support liquid variables in email templates footer links
  • πŸ‘€ Add tenant brand icons on dashboard
  • πŸ‘€ Display custom step names on workflow cards
  • πŸ› Fix SSO login using Okta tiles

Power your product notifications with Segment and Rudderstack

Now you can integrate customer data platforms (CDPs) such as Segment and Rudderstack with Knock to power your product notifications. This means that you can use the identify and track calls you already send to your CDP to identify users in Knock and send them notifications.

  • track events can trigger Knock workflows, with custom mapping from event properties into every part of triggering a workflow
  • identify events keep user information in sync with Knock, so that user changes like email updates are fully synchronized with Knock with no code changes required in your product

Here's what this unlocks for your team. If you're a product manager that wants to set up a new notification type without taking time from your engineering team, you can create a new notification workflow in Knock and trigger it when Knock receives an event from your CDP. You can map properties from your event into your notification template to personalize messages, and into other parts of your notification workflow to power recipients, tenants, and more.

Check out our integrations overview to get started, or dive into our docs for Segment or Rudderstack.

This is just the start of powering Knock with external sources. We have more providers on the way, including reverse ETL platforms such as Hightouch and Census. If there's a specific event or customer data platform you'd like to see us support, please get in touch.

Fixes and improvements

  • πŸ‘€ We added the ability to update the number of activities in a batch from the variable pane – very helpful when working with batch data.
  • πŸ› We fixed a bug with our account invitations whereby a user without a name would cause invites to be returned as "not found".
  • πŸ› We fixed an issue where editing an email template could crash the dashboard for a small number of users.

New Email + SMS channel providers

We're rolling out a whole host of new email and SMS channel providers today, available now under the "Channels" section in your account dashboard.

Email providers

SMS providers

If you need a specific provider not covered in our current providers list, please get in touch.

SAML 2.0 SSO Support

If you use SAML 2.0 SSO to manage authentication into the apps used by your organization, you can now configure your Knock account to enable users to authenticate into your account using your identity provider via SSO.

Note: SAML SSO is only available on our Growth and Enterprise plans.

Learn more about SSO

Fixes and improvements

  • πŸ‘€ We made some visual improvements to the variable pane in the workflow builder, making it easier to work with batched data like activities and actors
  • πŸ‘€ We now trim whitespace from email subject lines automatically, making it easier to work with
  • πŸ‘€ We made some internal improvements to our feeds endpoint, reducing the response time by 86%
  • πŸ› We now correctly support .first, .last, and .size calls on arrays in liquid
  • πŸ› We fixed an issue where changing template overrides would reset the editor contents within the email template editor
  • πŸ› We added more spacing around items in our visual email editor to work more easily on smaller screens
  • πŸ› We fixed an issue where message sending logs weren't appearing

Enable your customers to set account-wide default preferences

Today we're releasing per-tenant default preferences. When your product starts moving into larger organizations, you can often find admins asking for the ability to set a notification preference for all users in their account (or to set a default preference for those users at a minimum.)

Now you can support these types of per-tenant preference use cases with Knock. Our tenant preference model brings the same flexibility as our per-user preferences and lets you put them into the hands of your customers' admins.

Learn more about per-tenant preferences

Set pre-content variables in your email layout

Now you can set variables in your email template that will be rendered in your email layout ahead of your content block. This is great for when you want to set dynamic email preview text or dynamic header content within the layout of your email.

Learn more about pre-content variables

Fixes and improvements

  • πŸ› We fixed a bug in our test runner where our typeahead select fields were acting finicky.

Introducing role-based access control

Today we’re shipping a new set of account-level roles for the Knock dashboard, making it easy to grant more tailored permissions to members of your team who might not need full access to all resources within your Knock account.

The roles now available on your account are:

  • Owner: For your primary admin who manages billing. This role can invite and manage members, manage billing, and do anything available in the admin role. Your account must always have at least one account owner.
  • Admin: For admins who need to manage account-level settings. This role can invite and manage members (excluding owner and billing roles), manage account branding, manage environments, and manage advanced developer concepts such as signing keys, variables, and webhooks. This role has all permissions available to the member role.
  • Member: For users who are editing notification workflows and templates in Knock. This role can manage workflows, layouts, users, objects, and tenants. Users with this role can make commits and push changes to subsequent environments, and has full access to message and API logs for debugging.
  • Support: For users who shouldn't have access to workflows and templates, but should be able to dig into message and API logs for debugging purposes.
  • Billing: For account members who shouldn't have access to anything in Knock but billing.

You can see the full breakdown of the permissions available to each role in the documentation.

These new roles are available to all plans today. You can change roles and manage the members of your account from the "Account Settings > Members" page. As a reminder, there are no limits on the number of seats you can have assigned within your Knock account.

Read the documentation β†’

Dark mode docs 🌚

Our documentation is now available in dark mode for all those night owls out there. You can toggle to dark mode in the top header from any page in the docs.

Dark mode applied to the Knock documentation

Fixes and improvements

  • πŸ› We fixed an edge-case with our batching function whereby in a set of very specific circumstances a batch could be created twice for a workflow run
  • πŸ‘€ We added a new section to the docs for "Managing your account" including information about audit logs and managing team members

Test your fetch functions in realtime from the template editor

A couple weeks ago, we launched the fetch function for Knock workflows. Today, we're making it a lot easier to develop this function step with a realtime test runner purpose-built for fetch functions.

When you load the template editor, you should now see the new "Test console" in the lower half of the screen along with a "Send test" button next to the URL field. When you run a fetch function test, Knock will execute your fetch step in isolation, ignoring any steps before or after in your workflow. When the step has finished, Knock will load the result into the test console for your review in realtime with no need for a refresh!

We're always working to provide a great developer experience for everyone building with the Knock platform. With this new test runner, the develop ↔ debug cycle for fetch functions just got a great boost.

Check out the guide on testing fetch functions for more details, or head to the template editor now to try it out.

Set shared preference sets for all users and objects in an environment

We built preference sets in Knock to allow you to configure granular channel and workflow preferences on a per-user and per-object basis. Preference sets serve as a flexible tool to manage things like user-owned credentials and opt-in configurations.

But sometimes you may find you want to set preferences shared across all users and objects in your account. Today we're making that much easier with default preference sets!

You can now navigate to the new "Developers > Defaults" page, where you can configure a preference set that will be global to an entire Knock environment. When Knock loads the preferences for a recipient, it will merge the recipient's owned preferences into the global defaults. User and object preferences will still take precedence, but now you can manage shared preferences in a single space.

Fixes and improvements

  • πŸ› We fixed a bug that would prevent users in a small set of cases from saving a channel or fetch function template without a page reload.
  • πŸ› We fixed an issue where category preferences required all categories on a workflow to be opted-out before we considered the preference as opted-out.
  • πŸ› We fixed an issue where setting conditions for channel-type preferences would result in a 422 Unprocessable Entity error from the Knock API.

Audit logs

We've designed our service with security best practices in mind from day one. Audit logs form an important part of the security and compliance program within an organization, making it easy to proactively monitor for suspicious activity and retroactively understand the impact of a malicious actor. For this reason, we've always captured detailed logs of the actions happening across your account. Today we're pleased to announce that we're shipping support for viewing these audit logs from within the Knock dashboard.

With this initial release you'll see information about all of the actions occurring within Knock with detail about the team member who performed the action and additional context about which resource has been modified. You can even filter to an individual team member or a specific type of action if you need to get more granular.

Audit logs are available now across all plans and have the same retention period as other logs on your account. You'll find your audit logs under the "Settings" page.

Fixes and improvements

  • πŸ‘€ We separated out the "API Keys" and "Variables" section from under the "Developers" page to make them easier to find in the dashboard
  • 🌱 You can now select a preference set to view under a user or object, making it much easier to work with multiple preference sets

Fetch additional data as a workflow step

Today we're shipping a new function step to the Knock workflow builder: the fetch function. With the fetch function, you can build and execute HTTP requests to any external service as a step in your workflows. Knock will merge any data returned to a fetch step request into the global state for the workflow run, thus making it accessible to all templates in subsequent workflow steps!

You can use fetch functions to grab data for a workflow run that may not be readily available at the time you trigger a workflow, such as for workflows that use batching to create large activity groups. You can even use fetch functions to trigger side effects in your external systems as Knock processes a workflow run.

Our goal is to ensure Knock serves as many possible notification use-cases with a dead-simple interface. The fetch function adds even more flexibility to Knock and unlocks some neat ways to compose workflows.

Check out the new guide on fetch functions or head to the workflow editor now to get started with fetch functions in your workflows.

Trigger conditions for all

Trigger conditions, previously only available for channel steps, are now available for use in all workflow steps. As part of this expansion, we've also added a brand new guide on trigger conditions to the Knock docs.

Trigger conditions allow you to specify if a given step will execute at workflow execution time. They are one of the many ways you can build powerful logical notification flows with Knock.

With this update trigger conditions are now even more powerful and easier to use.

Performance tuning for our API logs

We've seen recently that it could take a long time (several seconds for our largest customers) to load the list of API logs in Knock. So we invested some time to dig in and address the issue. We found that both the structure of the query used to load the logs and the primary database index used to filter the query had a number of optimization opportunities.

After implementing the necessary changes, we've observed a substantial decrease in query time. For our largest customers, we've seen average query execution times decrease from from 12 seconds to 15 milliseconds!

Our API logs are an important part of the developer experience within Knock, and with this release we're ensuring that they feel performant at any scale.

Fixes and improvements

  • 🌱 We've added a UI for channel preferences to the user and object preferences tabs, including the ability to toggle a channel on/off from the Knock admin.

Give your customers control of notification branding

You can already use Knock to create branded notifications that put your brand’s best foot forward when you’re communicating with your customers. Now, with today’s per-tenant branding launch, you can extend that same functionality to your own customers.

With per-tenant branding you can set per-tenant overrides for any of the brand elements you already use in your Knock notifications, such as logo, icon, and brand color.

Here’s what this unlocks. If you have an enterprise customer that wants emails from your product to fit their branding (for example in the case they use your product to collaborate with their own customers or vendors), you can now do so with Knock. If custom branding hasn’t been set for a tenant in your application, we fall back to the default branding you set in account settings.

If you're interested in enabling this feature for your account, you can check out the docs and connect with us at support@knock.app.

Fixes and improvements

  • πŸ‘€ We added support for connecting to AWS SES with an external ID instead of an access key and secret – please get in touch if you'd like this feature enabled on your account!

Java SDK β˜•οΈ

We've brewed up a fresh SDK for you and have added Java to our list of officially supported SDKs, making it easy to use Knock in your Java projects (including Spring Boot).

You can get started with the Java SDK by checking out the repo on Github, or adding the following to your build.gradle file:

dependencies {
  implementation 'app.knock.api:knock-client:0.2.0'
}

Looking for an SDK that we don't currently support? Let us know and we'll consider adding it.

Fixes and improvements

  • πŸ‘€ We added a new set of integration pages to our marketing site to showcase all of the providers that Knock connects to
  • πŸ› We fixed an issue that was causing our test runner to fail to execute test runs
  • πŸ› Setting a very long recipient identifier no longer causes a batch step to fail in a workflow execution
  • πŸ› Email steps that have missing layouts no longer cause previews to return a 500 error