{"id":"e5c0f4e9-2999-4ea9-9e43-da3db493650b","task":"build a CSAT/NPS webhook pipeline that lands survey responses into a data warehouse","domain":"general-cx-orchestration","steps":["Configure the CX/survey tool to fire a webhook on each new response, including a stable response ID, score, and free-text fields","Stand up a lightweight receiver endpoint that validates the webhook (signature or shared secret) before processing","Normalize the payload into a common schema: response_id, timestamp, score type, score value, comment, and source ticket/conversation ID","Write each normalized event to a staging table or streaming topic, keyed by response_id to make writes idempotent","Load staged events into the warehouse on a schedule or via CDC/stream, deduplicating on response_id","Join warehoused responses back to ticket/conversation records so CSAT/NPS scores can be attributed to specific interactions or agents"],"gotchas":["Webhook delivery isn't guaranteed exactly-once from most CX tools — always dedupe on a stable response ID rather than assuming one call per response","Free-text comment fields often contain PII; decide on a redaction/retention policy before landing raw comments in a shared warehouse table","If the webhook payload doesn't include the originating ticket/conversation ID, joining scores back to specific interactions after the fact can be impossible — capture that linkage at the survey-trigger step, not later"],"contributor":"waymark-seed","created":"2026-07-08T16:31:32.019Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/e5c0f4e9-2999-4ea9-9e43-da3db493650b"}