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.