[{"data":1,"prerenderedAt":512},["ShallowReactive",2],{"content:pages:\u002Fproduct\u002Falerts-and-automations":3,"code-html:":511},{"id":4,"title":5,"body":6,"canonical":475,"card":475,"cta":475,"description":476,"draft":477,"extension":478,"faq":479,"hero":495,"keywords":499,"locale":502,"meta":503,"mockup":504,"navigation":149,"noindex":477,"og":475,"path":505,"pricing":475,"resource":475,"section":506,"seo":507,"stem":508,"updated":509,"__hash__":510},"pages\u002Fproduct\u002Falerts-and-automations.md","Alerts for low scores in Slack and Teams",{"type":7,"value":8,"toc":473},"minimark",[9,32,41,54,75,464,469],[10,11,15,19,23],"product-section",{"eyebrow":12,"title":13,"lede":14},"Alert rules","Tell me when the score is low","A rule reads like a sentence: when this happens, tell that channel.",[16,17,18],"p",{},"Build a rule from an answer's score, category (such as detractor or promoter) or sentiment. Combine conditions with \"all of\" or \"any of\". Score and category rules apply to one campaign. Sentiment rules can cover every campaign.",[20,21],"check-list",{":items":22},"[\"Score 6 or lower on your customer NPS survey.\",\"A negative comment on any survey.\",\"A promoter answer, so your team can say thanks.\"]",[24,25,27],"template",{"v-slot:glance":26},"",[28,29],"glance-facts",{":chips":30,":items":31},"true","[{\"label\":\"Built from\",\"value\":\"Score, category or sentiment\"},{\"label\":\"Combined with\",\"value\":\"All of, or any of\"},{\"label\":\"Sentiment rules\",\"value\":\"Can cover every campaign\"}]",[10,33,37],{"eyebrow":34,"title":35,"tone":36},"Channels","Send it where your team already works","muted",[38,39],"feature-tiles",{":items":40},"[{\"key\":\"slack\",\"icon\":\"i-lucide-message-square\",\"title\":\"Slack\",\"span\":2,\"text\":\"A message in your chosen channel, with the score and full comment.\"},{\"key\":\"teams\",\"icon\":\"i-lucide-messages-square\",\"title\":\"Microsoft Teams\",\"text\":\"The same message, with score and comment, in a Teams channel.\"},{\"key\":\"email\",\"icon\":\"i-lucide-mail\",\"title\":\"Email\",\"text\":\"A message to one address, such as a support inbox, with the full comment.\"},{\"key\":\"webhook\",\"icon\":\"i-lucide-webhook\",\"title\":\"Signed webhook\",\"span\":2,\"text\":\"A call to your system, signed so you can check it came from Pulseri.\"}]",[10,42,46,49],{"eyebrow":43,"title":44,"lede":45},"Delivery log and retries","Know that it arrived","Pulseri shows what happened to every alert.",[16,47,48],{},"Every alert has a delivery record: pending, delivered or failed, with the number of attempts and the last error. If the destination is briefly down, Pulseri makes up to five attempts over about 20 minutes. If it rejects the message for good, such as a deleted webhook, you see the failure straight away. Each rule alerts at most once per answer, so a busy day will not flood your channel.",[24,50,51],{"v-slot:glance":26},[28,52],{":chips":30,":items":53},"[{\"label\":\"Delivery record\",\"value\":\"Pending, delivered or failed\"},{\"label\":\"Retries\",\"value\":\"Up to five attempts over about 20 minutes\"},{\"label\":\"Repeats\",\"value\":\"At most once per answer\"}]",[10,55,59,62,69],{"eyebrow":56,"title":57,"tone":36,":hide-media-on-phone":30,"layout":58},"Follow-up","From a score to a message","split",[16,60,61],{},"Watch a score of 3 match a rule and land in team chat. Flip the switch to see a score of 10.",[16,63,64],{},[65,66,68],"a",{"href":67},"\u002Fproduct\u002Fcustomer-voice","See how customer surveys start",[24,70,71],{"v-slot:media":26},[72,73],"mockup-embed",{"id":74},"score-routing",[10,76,79,95,442,445,453,459],{"eyebrow":77,"title":78},"Automations","Connect anything with a signed webhook",[16,80,81,82,86,87,90,91,94],{},"Pulseri can call your system when a new answer or person arrives or a campaign changes. Each call carries an ",[83,84,85],"code",{},"X-Pulseri-Timestamp"," header, a unique ",[83,88,89],{},"X-Pulseri-Delivery"," id and an ",[83,92,93],{},"X-Pulseri-Signature"," header, an HMAC-SHA256 signature of the timestamp and the body. Trust only calls that match and are less than five minutes old.",[96,97,102],"pre",{"className":98,"code":99,"filename":100,"language":101,"meta":26,"style":26},"language-js shiki shiki-themes material-theme-lighter pulseri-code material-theme-palenight","import { createHmac, timingSafeEqual } from 'node:crypto'\n\nfunction isFromPulseri(rawBody, timestamp, header, secret) {\n  if (Math.abs(Date.now() \u002F 1000 - Number(timestamp)) > 300) return false\n  const expected = 'sha256=' + createHmac('sha256', secret).update(`${timestamp}.${rawBody}`).digest('hex')\n  const a = Buffer.from(expected)\n  const b = Buffer.from(header ?? '')\n  return a.length === b.length && timingSafeEqual(a, b)\n}\n","Verify a call","js",[83,103,104,144,151,190,258,345,370,399,436],{"__ignoreMap":26},[105,106,109,113,117,121,124,127,130,133,137,141],"span",{"class":107,"line":108},"line",1,[105,110,112],{"class":111},"sVE1x","import",[105,114,116],{"class":115},"sFaY5"," {",[105,118,120],{"class":119},"sZbaC"," createHmac",[105,122,123],{"class":115},",",[105,125,126],{"class":119}," timingSafeEqual",[105,128,129],{"class":115}," }",[105,131,132],{"class":111}," from",[105,134,136],{"class":135},"sDqDV"," '",[105,138,140],{"class":139},"sYyUr","node:crypto",[105,142,143],{"class":135},"'\n",[105,145,147],{"class":107,"line":146},2,[105,148,150],{"emptyLinePlaceholder":149},true,"\n",[105,152,154,158,162,165,169,171,174,176,179,181,184,187],{"class":107,"line":153},3,[105,155,157],{"class":156},"scGce","function",[105,159,161],{"class":160},"s2jJG"," isFromPulseri",[105,163,164],{"class":115},"(",[105,166,168],{"class":167},"snPdx","rawBody",[105,170,123],{"class":115},[105,172,173],{"class":167}," timestamp",[105,175,123],{"class":115},[105,177,178],{"class":167}," header",[105,180,123],{"class":115},[105,182,183],{"class":167}," secret",[105,185,186],{"class":115},")",[105,188,189],{"class":115}," {\n",[105,191,193,196,200,203,206,209,211,214,216,219,222,225,229,232,235,237,240,243,246,249,251,254],{"class":107,"line":192},4,[105,194,195],{"class":111},"  if",[105,197,199],{"class":198},"syhPN"," (",[105,201,202],{"class":119},"Math",[105,204,205],{"class":115},".",[105,207,208],{"class":160},"abs",[105,210,164],{"class":198},[105,212,213],{"class":119},"Date",[105,215,205],{"class":115},[105,217,218],{"class":160},"now",[105,220,221],{"class":198},"()",[105,223,224],{"class":115}," \u002F",[105,226,228],{"class":227},"sB6OD"," 1000",[105,230,231],{"class":115}," -",[105,233,234],{"class":160}," Number",[105,236,164],{"class":198},[105,238,239],{"class":119},"timestamp",[105,241,242],{"class":198},"))",[105,244,245],{"class":115}," >",[105,247,248],{"class":227}," 300",[105,250,186],{"class":198},[105,252,253],{"class":111}," return",[105,255,257],{"class":256},"skyId"," false\n",[105,259,261,264,267,270,272,275,278,281,283,285,287,290,292,294,296,298,300,303,305,308,311,313,316,318,320,322,324,326,328,330,333,335,337,340,342],{"class":107,"line":260},5,[105,262,263],{"class":156},"  const",[105,265,266],{"class":119}," expected",[105,268,269],{"class":115}," =",[105,271,136],{"class":135},[105,273,274],{"class":139},"sha256=",[105,276,277],{"class":135},"'",[105,279,280],{"class":115}," +",[105,282,120],{"class":160},[105,284,164],{"class":198},[105,286,277],{"class":135},[105,288,289],{"class":139},"sha256",[105,291,277],{"class":135},[105,293,123],{"class":115},[105,295,183],{"class":119},[105,297,186],{"class":198},[105,299,205],{"class":115},[105,301,302],{"class":160},"update",[105,304,164],{"class":198},[105,306,307],{"class":135},"`",[105,309,310],{"class":115},"${",[105,312,239],{"class":119},[105,314,315],{"class":115},"}",[105,317,205],{"class":139},[105,319,310],{"class":115},[105,321,168],{"class":119},[105,323,315],{"class":115},[105,325,307],{"class":135},[105,327,186],{"class":198},[105,329,205],{"class":115},[105,331,332],{"class":160},"digest",[105,334,164],{"class":198},[105,336,277],{"class":135},[105,338,339],{"class":139},"hex",[105,341,277],{"class":135},[105,343,344],{"class":198},")\n",[105,346,348,350,353,355,358,360,363,365,368],{"class":107,"line":347},6,[105,349,263],{"class":156},[105,351,352],{"class":119}," a",[105,354,269],{"class":115},[105,356,357],{"class":119}," Buffer",[105,359,205],{"class":115},[105,361,362],{"class":160},"from",[105,364,164],{"class":198},[105,366,367],{"class":119},"expected",[105,369,344],{"class":198},[105,371,373,375,378,380,382,384,386,388,391,394,397],{"class":107,"line":372},7,[105,374,263],{"class":156},[105,376,377],{"class":119}," b",[105,379,269],{"class":115},[105,381,357],{"class":119},[105,383,205],{"class":115},[105,385,362],{"class":160},[105,387,164],{"class":198},[105,389,390],{"class":119},"header",[105,392,393],{"class":115}," ??",[105,395,396],{"class":135}," ''",[105,398,344],{"class":198},[105,400,402,405,407,409,412,415,417,419,421,424,426,428,430,432,434],{"class":107,"line":401},8,[105,403,404],{"class":111},"  return",[105,406,352],{"class":119},[105,408,205],{"class":115},[105,410,411],{"class":119},"length",[105,413,414],{"class":115}," ===",[105,416,377],{"class":119},[105,418,205],{"class":115},[105,420,411],{"class":119},[105,422,423],{"class":115}," &&",[105,425,126],{"class":160},[105,427,164],{"class":198},[105,429,65],{"class":119},[105,431,123],{"class":115},[105,433,377],{"class":119},[105,435,344],{"class":198},[105,437,439],{"class":107,"line":438},9,[105,440,441],{"class":115},"}\n",[16,443,444],{},"Your system can also start a survey by sending Pulseri an event, with a service account key or the signed generic webhook.",[16,446,447,448,452],{},"Low scores that warn of churn are one use for these alerts. The ",[65,449,451],{"href":450},"\u002Fblog\u002Fcustomer-churn","customer churn guide"," shows a rule to copy.",[16,454,455],{},[65,456,458],{"href":457},"\u002Fproduct\u002Fapi-and-assistants","See the API and assistants",[24,460,461],{"v-slot:glance":26},[28,462],{":chips":30,":items":463},"[{\"label\":\"Header\",\"value\":\"X-Pulseri-Signature\"},{\"label\":\"Signature\",\"value\":\"HMAC-SHA256 of the timestamp and the body\"},{\"label\":\"Sent when\",\"value\":\"A new answer, a new person or a changed campaign\"}]",[465,466],"cta-band",{":product":30,":proof":30,"lede":467,"title":468},"Try Pulseri for 14 days. Connect Slack or Teams and send a test alert in minutes.","Hear about unhappy customers the same day",[470,471,472],"style",{},"html pre.shiki code .sVE1x, html code.shiki .sVE1x{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#7DB7E8;--shiki-default-font-style:inherit;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sFaY5, html code.shiki .sFaY5{--shiki-light:#39ADB5;--shiki-default:#A1A1AA;--shiki-dark:#89DDFF}html pre.shiki code .sZbaC, html code.shiki .sZbaC{--shiki-light:#90A4AE;--shiki-default:#E4E4E7;--shiki-dark:#BABED8}html pre.shiki code .sDqDV, html code.shiki .sDqDV{--shiki-light:#39ADB5;--shiki-default:#8FCDA8;--shiki-dark:#89DDFF}html pre.shiki code .sYyUr, html code.shiki .sYyUr{--shiki-light:#91B859;--shiki-default:#8FCDA8;--shiki-dark:#C3E88D}html pre.shiki code .scGce, html code.shiki .scGce{--shiki-light:#9C3EDA;--shiki-default:#7DB7E8;--shiki-dark:#C792EA}html pre.shiki code .s2jJG, html code.shiki .s2jJG{--shiki-light:#6182B8;--shiki-default:#7CCBC6;--shiki-dark:#82AAFF}html pre.shiki code .snPdx, html code.shiki .snPdx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E4E4E7;--shiki-default-font-style:inherit;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .syhPN, html code.shiki .syhPN{--shiki-light:#E53935;--shiki-default:#A1A1AA;--shiki-dark:#F07178}html pre.shiki code .sB6OD, html code.shiki .sB6OD{--shiki-light:#F76D47;--shiki-default:#E0B676;--shiki-dark:#F78C6C}html pre.shiki code .skyId, html code.shiki .skyId{--shiki-light:#FF5370;--shiki-default:#E0B676;--shiki-dark:#FF9CAC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":26,"searchDepth":146,"depth":146,"links":474},[],null,"Get alerted within minutes when someone gives a low score. Alerts go to Slack, Microsoft Teams, email or a signed webhook, with a delivery log.",false,"md",[480,483,486,489,492],{"q":481,"a":482},"How fast do alerts arrive?","Within minutes of the answer. If the first attempt fails, Pulseri makes up to five attempts over about 20 minutes.",{"q":484,"a":485},"Can I send alerts to Slack and Microsoft Teams?","Yes. Connect the tool once, then choose a channel for each rule. Email and signed webhooks work too.",{"q":487,"a":488},"Will I get the same alert twice?","No. A rule alerts at most once per answer. A new matching answer is a new alert.",{"q":490,"a":491},"What happens if my webhook is down?","Pulseri makes up to five attempts over about 20 minutes. If it still fails, the delivery log shows why.",{"q":493,"a":494},"Can I try a rule before it goes live?","Yes. Send a test alert and see at once whether it arrived.",{"eyebrow":496,"title":497,"lede":498},"Alerts and follow-ups","A low score should reach your team the same day.","Write a rule once. When an answer matches, Pulseri tells your team and shows whether it arrived.",[500,501],"NPS alerts Slack","detractor alert","en",{},{"id":74},"\u002Fproduct\u002Falerts-and-automations","product",{"title":5,"description":476},"product\u002Falerts-and-automations","2026-10-13","EJe8-g1lPTFi6YvcFQro6AQZXcBNlc6JeCjlzEKLTEg",[],1793908068864]