Blog
One answer earns silence, including the ticket and the copilot
A 90-day cap on product NPS still lets ticket CSAT and the copilot ask the same person this week. Quiet belongs to the person.
Monday, 11:04. Priya owns CX at a 24-person payroll SaaS. Sam, admin on Pro at ACME-204, finished the first payroll run and sat still on /reports. The product NPS widget asked. Sam scored 8: "CSV export still takes three clicks."
Tuesday, 09:18. Ticket #5088 closed. Overnight wait for a duplicate-charge credit. The Zendesk close macro pasted the CSAT hosted link. Sam scored 2 at 09:21: "I waited until morning for a credit that should have been one click."
Wednesday, 14:11. Sam asked the support copilot about another $48 duplicate. The refund posted. resolveTask fired. Sam scored 4 on the inline ask.
Thursday, 10:00. Weekly CX review. Product NPS +41 (n=18). Ticket CSAT 3.1 (n=22). Copilot 4.2 (n=9). Sam is in all three samples. The slide says engagement is up. Priya has not read Monday's export comment.
The weak version, and what it costs at 10:00
The program that produced that review looks like this:
product-nps, trigger auto, delay 8,000 ms, 90 days before that survey shows again.
ticket-csat, hosted link in every Zendesk close email, because every ticket is a moment.
copilot-csat,
resolveTaskon every refund, identified with a fresh anonymous key per chat.Three owners. Product, CS, AI. Each survey already has a cap. Each cap is per survey.
The version that spends Sam once looks like this:
Identify at login with the account id you already have:
UserVane.identify({ userId: "acme-204-sam", traits: { plan: "pro", role: "admin" } }). SameuserIdon the copilot.Seven-day quiet across the project. After any measured answer, the widget stays dark and the copilot ask does not fire.
Ticket CSAT stays a hosted link. The close macro does not include it the same week they already answered. That line lives in the macro notes, because a click is a click.
One primary ask per person per window. A second channel only for a defined gap, such as no login in 60 days.
The weak version costs you 10:00. You will open a ticket-wait P1 from Tuesday's 2, and a copilot P1 from Wednesday's 4, and you will not read the three-click export because the slide already has three numbers. Next month Sam will dismiss the widget on sight. The people still answering will be the ones who have not learned yet.
A 90-day cap on one survey still asks them Tuesday
A 90-day cap on product-nps is a promise about that survey. Ticket CSAT is a different survey. The copilot is a third. Each one is inside its own rule. The person is not.
UserVane's default is seven days, across every survey in the project. After any measured answer, the in-product path issues no tokens. The widget stays dark. resolveTask still runs; the ask does not. The classic widget guide is that table: never re-prompt after an answer on that survey, and a cross-survey quiet period so the other surveys do not chain.
Identify with a stable userId from your auth session. A new anonymous key per copilot chat is a new person as far as quiet is concerned, which is how Wednesday's 4 landed 72 hours after Monday's 8. The widget quickstart is that call. The open-source SDKs carry the same identify on the agent path, so the copilot and the widget share the clock.
A hosted link is a click, so you still have to not send it
Quiet stops in-product re-prompting. A hosted link is an explicit open. If they have not already answered that survey, the page still loads, even if they scored NPS yesterday. You sent them there on purpose.
So the close-email CSAT is a program rule. If Sam already spent an answer this week, the macro does not include the link. The channel chooser is that decision: a hosted link is an adapter for a moment, not a license to hang a second ask on every email you already send.
Do not paste the product NPS URL into the close email because one URL feels simpler. You mixed a relationship sample into a ticket sample, and you spent the quiet window on the wrong question. The timing post is the two clocks. Quiet is the person-level rule that lets them coexist.
Three scores from one person is not three programs
Keep the surveys separate. Keep the clocks separate. Post-ticket is CSAT at close. Product NPS is after first value. The copilot ask is after the refund posts, on the agent path, with the same respondent id. The resolve-time post is that clock. Quiet is what stops Wednesday from arriving when Monday already counted.
If Thursday needs one number, label it. "Ticket CSAT this week" is not "product NPS." Averaging Sam's 8, 2, and 4 into a health score is how a duplicate-charge week looks like a product collapse, or how three asks look like engagement.
Fewer people will answer. That is the point. Check the slice you still intend to quote on the sample size calculator before the slide treats n=9 as a climate. The older post on why a naked score lies is the decision rule. Read Monday's comments in the same sitting.
Silence is not a representative sample
A quiet period proves you interrupted Sam once. It does not prove the people who answer next week represent the accounts that never log in, the people who dismissed, or the ones who closed the tab. That is the limit.
It does not make three asks in 72 hours a better sample. It makes Thursday a decision about one moment, from people you have not already spent.
Bottom line: identify the person. One answer, seven days of in-product silence, and no hosted CSAT in the same week's close email. Thursday should be a comment about the three-click export, not three dashboards of the same admin.