Search

Personal Links

APIs

slack button (do not delete)

Open Knock Scheduling inside your product

Open Knock Scheduling inside your product

Open Knock Scheduling inside your product

For product-led companies, some of your highest-intent buyers are already inside your product.

They may be testing a feature, reaching a usage limit, exploring an enterprise capability, or deciding whether to upgrade.

Instead of sending them to a separate “Contact Sales” page or asking them to fill out another form, you can open Knock Scheduling directly inside your product.

For example:

Buyer clicks “Talk to Sales” → Knock opens → buyer picks a time

Because your product already knows the buyer’s email, you can pass it directly to Knock Scheduling. Knock qualify and route the buyer to the relevant rep based on Knock routing. The buyer does not need to enter his details again.

Common use cases

Use Knock Scheduling inside your product when you want buyers to easily:

  • Talk to sales about pricing
  • Discuss an upgrade
  • Learn about an enterprise plan
  • Talk to someone while evaluating the product
  • Get help with a more advanced use case
  • Book time with your team after reaching a high-intent moment

This gives buyers a direct path to your sales team at the moment they want to talk.

How it works

When you already know the buyer’s email, prepare Knock Scheduling:

const scheduling = window.Knock.scheduling.load({
  magicLinkId: 'your-magic-link-id',
  email: 'jane@acme.com',
});

Then open the meeting picker when the buyer takes an action such as clicking Talk to Sales, Discuss Pricing, or Upgrade:

scheduling.open();

Because load() receives the email, Knock starts finding meeting times in the background.

By the time the buyer clicks the button, the modal can usually open directly to available meeting times instead of starting with an email step.

Example: Talk to Sales inside your product

Imagine a buyer is testing your product and wants to understand your enterprise pricing.

You can add a Talk to Sales button directly inside the product:

withKnock((Knock) => {
  const scheduling = Knock.scheduling.load({
    magicLinkId: 'your-magic-link-id',
    email: currentUser.email,
  });

  document
    .getElementById('talk-to-sales')
    .addEventListener('click', () => {
      scheduling.open();
    });
});

In this example, currentUser.email represents the email you already have for the signed-in user.

Your implementation can use whichever variable or method your product already uses to access the user's email.

Prepare scheduling before the buyer clicks

For the fastest experience, call load() as soon as you know the buyer’s email.

You do not need to wait until they click Talk to Sales.

const scheduling = window.Knock.scheduling.load({
  magicLinkId: 'your-magic-link-id',
  email: currentUser.email,
});

Then, when they are ready:

scheduling.open();

This allows Knock to start finding meeting times while the buyer continues using your product.

Waiting for the Knock tag

The Knock tag loads asynchronously, so window.Knock may not exist the instant your page runs.

Use this guard:

function withKnock(callback) {
  if (window.Knock) {
    callback(window.Knock);
  } else {
    window.addEventListener(
      'knock:ready',
      () => callback(window.Knock),
      { once: true }
    );
  }
}

For all available options, statuses, and scheduling controls, see Opening the Knock scheduling modal from your own code.