Instantly Surface Negative Customer Feedback in Slack Using AI Sentiment Analysis
Automatically capture Typeform survey responses, run them through OpenAI to detect sentiment, and post urgent negative feedback alerts straight to your team's Slack channel. Product managers stay ahead of issues without manually reading every response.
- 1
Trigger on new Typeform submission
Add a
Typeform Triggernode as the workflow start. Connect your Typeform account credentials and select the specific form you use to collect product feedback. Every new submission will automatically fire the workflow. In the node's notes field, record your Typeform API key location (Account > Developer > Personal tokens). - 2
Extract and format the feedback text
Add a
Setnode directly after the trigger. Create a new field calledfeedbackTextand map it to the open-text answer field from your Typeform (e.g.{{ $json.answers[0].text }}). Also set arespondentEmailfield from the submission metadata. This keeps downstream nodes clean and readable. - 3
Send feedback to OpenAI for sentiment analysis
Add an
OpenAInode and choose theMessage a Modelresource. Set the model togpt-3.5-turbo. In theUser Messagefield, enter a prompt like:Analyze the sentiment of this customer feedback. Reply with a JSON object containing two keys: sentiment (Positive, Neutral, or Negative) and summary (one sentence). Feedback: {{ $json.feedbackText }}. Add your OpenAI API key in the credentials panel. - 4
Check if sentiment is Negative
Add an
IFnode to branch the workflow. Set the condition to check if the OpenAI response text contains the wordNegative— use the expression{{ $json.message.content }}and selectcontainswith valueNegative. The True branch proceeds to Slack; the False branch can be left empty or connected to a no-op to silently discard neutral and positive responses. - 5
Post an alert to Slack
Add a
Slacknode on the True branch. Choose theSend a Messageoperation, select your target channel (e.g.#product-feedback), and compose the message text using::rotating_light: *Negative Feedback Alert* *From:* {{ $node['Set'].json.respondentEmail }} *Summary:* {{ $json.message.content }} *Raw feedback:* {{ $node['Set'].json.feedbackText }}. Add your Slack Bot Token in credentials. Make sure the bot is invited to the channel first.
Frequently asked questions
What if my Typeform has multiple open-text questions?
In the Set node, concatenate all relevant answers into the feedbackText field using an expression like `{{ $json.answers[0].text }} {{ $json.answers[1].text }}`. OpenAI will analyze the combined text and still return a single sentiment label.
Can I also log all responses, not just negative ones, to a spreadsheet?
Yes. Add a Google Sheets node after the OpenAI node but before the IF node. Map feedbackText, the sentiment result, and the timestamp to columns in your sheet. That way every response is archived while Slack only gets alerted for negative ones.
How do I make the OpenAI response easier to parse in the IF node?
Ask OpenAI to return only the word Positive, Neutral, or Negative as its entire reply by simplifying the prompt to: 'Reply with only one word — the sentiment of this feedback: Positive, Neutral, or Negative. Feedback: ...'. This makes the IF condition simpler and more reliable without needing JSON parsing.