ย 

Changelog

The latest releases and improvements to Knock.

Fixes and improvements

  • ๐Ÿ‘€ We added the ability for you to specify a response key in your fetch steps, which controls where the response gets placed in your workflow run data
  • ๐Ÿ‘€ You can now see any subscriptions you have under a tenant via the dashboard
  • ๐Ÿ‘€ We updated the Workflow creation modal to include category selection and improved the manage modal experience
  • ๐Ÿ‘€ We moved the security settings into its own tab in the settings section of the dashboard
  • ๐Ÿ‘€ We added the ability to filter analytics by bounced messages in the dashboard
  • ๐Ÿ› We fixed an issue where our custom webhook channel would send an empty body on GET requests
  • ๐Ÿ› We fixed an issue where E.164 phone numbers were not always being validated correctly, causing issues when saving Twilio provider configuration
  • ๐Ÿ› We fixed an issue that caused schedules to not be created when an account timezone was not set
  • ๐Ÿ› We fixed an issue that could cause invalid FCM project IDs because of extra whitespace
  • ๐Ÿ› We fixed an issue with the schedules API that would not allow a null repeats value when scheduled_at was specified
  • ๐Ÿ› We fixed an issue with our Sendgrid sender that would specify the wrong content type parameter for an attachment

In-app feed components for iOS and Android

Today we're releasing an update to our native mobile SDKs across iOS and Android to include pre-built components for powering out-of-the-box in-app feed experiences within your mobile applications. Previously, you had to build your own in-app feed experiences on top of our SDK. Now, with these new components, you can easily add an in-app feed to your app with just a few lines of code. Knock takes care of all of the heavy lifting for you, including fetching and displaying the feed items, handling pagination, real-time badge counts, filtering, and more.

Our in-app feed components are customizable and can be tailored to fit your app's design and user experience. If you need more flexibility you can bring your own UI components, and build on top of the view models provided.

You can get started by reading the documentation on iOS and Android.

Fixes and improvements

  • ๐Ÿ‘€ We gave the main dashboard sidebar UI an overhaul, updating the icons in the process
  • ๐Ÿ‘€ We migrated the colors in the dashboard to our new design system, Telegraph
  • ๐Ÿ‘€ We added new filters for the messages API for engagement status, inserted at ranges, and by a list of message ids
  • ๐Ÿ› We fixed an issue where the code editor would fallback to a serif on certain browsers
  • ๐Ÿ› We fixed an issue with the tenants API that could cause a 500 error when creating or listing tenants
  • ๐Ÿ› We fixed an issue with the code editor where you could not scroll the content when using the popout editor

Automated push token deregistration

Today we're launching an enhancement to our push notification and device token management functionality. We will now auto revoke tokens that are expired from your user's channel data. Previously, you would need to listen to a message.bounced webhook and execute the token cleanup yourself when your push notifications failed to send.

Now, you can simply enable the option under your push channel settings to "Enable push token deregistration" and we'll automatically remove the expired token from your user's channel data when a push notification fails to send. This will help you keep your user's data clean and up to date without needing to write any additional code.

This feature is available today for all customers. To get started, check out the documentation for push notifications.

Fixes and improvements

  • ๐Ÿ‘€ We added a new error page to better report any dashboard issues to our engineering team
  • ๐Ÿ‘€ We made some light improvements to various empty states around the dashboard
  • ๐Ÿ‘€ We added a missing filter for workflows to filter for all workflows that have a webhook step
  • ๐Ÿ‘€ We now fall back to a recipient ID in the messages table when no email or name is provided on the recipient
  • ๐Ÿ› We fixed an issue with single ticks in a Slack markdown template would cause a template rendering error

Actionable in-app notifications

Today weโ€™re launching an enhancement to our in-app notifications to support more actionable types of messages, without needing to drop down into code. Previously, to add inline actions to your in-app notifications you needed to customize a feed cell component. With our new in-app actions you can now toggle between a standard, single-action, or multi-action notification template directly in our template editor.

By default, in-app actions will direct you to the action URL you set on the button on click, but you can also override this behavior by providing a new onNotificationButtonClick callback to handle the action in your app.

As part of this update, we also refreshed the in-app editor UI with a new look and feel to make it easier and faster to create and preview your in-app notifications.

You'll need to upgrade to the latest version of our SDKs across web and mobile to take advantage of the new actionable in-app templates. To get started, check out the documentation for in-app notifications.


Fixes and improvements

  • ๐Ÿ‘€ We now show your account ID under the Settings page in the dashboard.
  • ๐Ÿ› We fixed an issue with our conditions logic where contains and not_contains would not operate correctly when the argument was a list.
  • ๐Ÿ› We fixed an issue with our chat and HTTP templates that meant we would double JSON encode values sent from trigger data leading to incorrect results in a rendered template.
  • ๐Ÿ› We fixed a performance issue with our new code editor where large templates would feel laggy to edit.

Introducing the t tag: draft content in your default language and auto-generate translations

Today weโ€™re introducing a new way to create and manage translations in Knock: the t tag.

With our user-friendly t tag, you can draft message templates in your default language (e.g. english), then wrap the content in a t tag to auto-generate a default language translation file for you behind the scenes.

You can then automate translations to other languages by using our API to fetch your translation files, send them to your translation provider (e.g. Transifex), and programmatically bring translations back into Knock.


Hereโ€™s why we shipped the t tag.

In our Translations 1.0 release we introduced the concept of Translations into Knock. Translations are JSON objects you use to define a set of translation keys (for example, โ€œWelcomeMessageโ€) and the translations they map to in each locale you support (en: โ€œWelcome to Knockโ€, es: โ€œBienvenidos a Knockโ€). You then use our t filter to reference that translated content in your message templates.

Our first approach to Translations works great for teams that already have translations for their messages. But, as weโ€™ve grown and seen customers bring more of their organization into Knock, we heard feedback that we needed a way to make translations more accessible for non-technical users creating content in Knockโ€”thatโ€™s where our new t tag comes in.

t tags are now generally available for all enterprise customers. To get started, check out the documentation for Translations.

Fixes and improvements

  • ๐Ÿ‘€ When a collection contains more than 10,000 records, we now correctly reflect that in the result count.
  • ๐Ÿ‘€ We improved our recipient inline identify calls to accept a dictionary with just an id in it, rather than requiring an id and at least one property before it was identified.
  • ๐Ÿ‘€ We rolled out our new code editor everywhere in the UI.
  • ๐Ÿ› We fixed an issue where our pagination controls would show 0 instead of a result count.
  • ๐Ÿ› We fixed an issue where our markdown validation was overly strict and did not allow for some valid HTML elements and attributes.

Introducing typeahead autocomplete and our formatting toolbar

Today weโ€™re launching two enhancements to our template editing experience: typeahead autocomplete and a rich text formatting toolbar. These improvements make it easier to write markdown and liquid within our template editor.

First, autocomplete. Now all of the variables available in your workflow run scope, including trigger data, user properties, and more, are available to you in a typeahead autocomplete experience. Weโ€™ve also included all of Liquidโ€™s available filters, so you can easily find the right tool to work with your template data.

Next, we added a new formatting toolbar to apply styling to your markdown templates using a familiar rich text editing interface. This means that whether or not youโ€™re familiar with markdown, youโ€™ll still be able to author rich text content within the Knock template editor.

Fixes and improvements

  • ๐Ÿ‘€ We overhauled our preferences documentation and introduced a new preferences section into the documentation to better explain the different portions of preferences within Knock
  • ๐Ÿ› We updated the version of the WhatsApp API from v14 to v19
  • ๐Ÿ› We fixed an issue where app_name and app_url were not being exposed under the "Settings > Variables" section of the dashboard
  • ๐Ÿ› We fixed the useAuthenticatedKnockClient hook in @knocklabs/react to prevent re-renders from occurring
  • ๐Ÿ› We fixed a type error in our Go SDK where Messages would not work when a recipient was an object

Manage user access with directory sync

Today weโ€™re releasing support for directory sync within Knock. When enabled, organizations leveraging an Identity Management Platform like Okta can auto-provision, de-provision, and assign roles to users based within Knock. If you use Okta as your identity provider, you can map Okta groups to specific roles within Knock.

Directory sync is available to all customers on our enterprise plan. Read our documentation to learn more about using directory sync, and reach out here to learn more about our enterprise offering.

Send push notifications with OneSignal

Weโ€™re thrilled to announce that we now support OneSignal as a push notification provider. You can now send push notifications via OneSignal while continuing to orchestrate your multi-channel notifications with Knock.

To set up OneSignal as a provider in Knock, check out our documentation.

Fixes and improvements

  • ๐Ÿ› We fixed an issue with our Node SDK where sending a query parameter as undefined would pass it through to the request.
  • ๐Ÿ‘€ When you create an account in Knock, we now create two default variables for you for app_url and app_name.

Add conditions to workflow triggers

Today weโ€™re adding the ability to set workflow trigger conditions on any trigger step. Previously to stop a workflow from executing, you needed to use a branch step at the start of your workflow with no channel steps in the branch. Now using trigger step conditions, you can halt a workflow from executing before any steps run.

This is especially helpful in cases where you have a high volume event stream that youโ€™d like to point at a Knock workflow and then use a trigger condition to select when the workflow should actually run. As an example, you could have an account-balance-updated event connected to a workflow, with a trigger condition to only run the workflow when the account balance goes under five dollars.

You can access trigger step conditions by selecting any trigger step in the workflow builder or using the conditions object in your workflow definition in our management API.

Fixes and improvements

  • ๐Ÿ› We fixed an issue with our React Native SDK that incorrectly referenced document when instantiating a feed
  • ๐Ÿ› We fixed an issue with our JS client SDK where extra event listeners could be created when auto-managing sockets is enabled
  • ๐Ÿ› We fixed an issue where a deleted schedule could leave ghost schedules running

Introducing: Mobile SDKs for Swift, Kotlin, Flutter and React Native

Today we are releasing v1.0 of our Mobile SDKs. Our mobile SDKs wrap Knockโ€™s client APIs and provide powerful abstractions for setting up push notifications and building in-app notification experiences.

Here is what weโ€™re shipping today:

  • Native support & cross-platform libraries: Available for iOS (Swift), Android (Kotlin), React Native, and Flutter.
  • Streamlined push notifications: Weโ€™ve done the schlep work for you: setup is as simple as adding a few lines of code.
  • In-app notifications: Methods for fetching, displaying, and managing in-app notifications, along with the ability to connect to our real-time infrastructure.
  • User preferences: A preferences API and SDK methods make it easy to manage notification preferences within apps, allowing users to customize notification settings.

You can read about all of our SDKs in our documentation.

Fixes and improvements

  • ๐Ÿ‘€ We renamed the "Defaults" option in the developers menu in the dashboard to be "Preferences"
  • ๐Ÿ‘€ We added React 16 support to our React SDK and improved the bundle size by removing excess dependencies
  • ๐Ÿ› We fixed an issue with our React SDK where event listeners were not being cleaned up
  • ๐Ÿ› We fixed an issue with switching environments when setting preference environment defaults that would cause the editor to not be updated
  • ๐Ÿ› We fixed an issue with our preference setting endpoints where having null preferences could cause updates to fail
  • ๐Ÿ› We fixed an issue with some message webhooks types that would cause them to fail to register

Revert a commit

Today weโ€™re expanding the capabilities of our commit system to include the ability to revert a specific commit. Reverting a commit makes it easy to undo a set of changes you already committed.

Previously when using the Knock commit system, there was no way to reverse a change that had been committed. With revert commits, you can reverse a change directly in the dashboard.

Read more about commits in the docs.

You can also check out this video to see how you can revert a commit from the dashboard.

Fixes and improvements

  • ๐Ÿ› We fixed an issue where skipped message statuses were not always evaluated correctly.
  • ๐Ÿ› We fixed an issue where channel data set on a tenant would be incorrectly exposed in the variable pane.
  • ๐Ÿ› We fixed an issue where system properties like phone_number were not able to be modified when used as preview data on a workflow.
  • ๐Ÿ› We fixed an issue where our Slack auth API would return a 500 without returning a descriptive error.