Typeform Feedback Sentiment Alert to Mattermost

Typeform Feedback Sentiment Alert to Mattermost

This workflow automatically monitors new Typeform submissions, analyzes the sentiment of the feedback using AWS Comprehend, and sends an urgent notification to a Mattermost channel whenever a negative response is detected. It helps support and product teams instantly react to unhappy users without manual monitoring.

How It Works

  • Typeform Trigger (OAuth2) — Listens for new form submissions on a specific Typeform form. When a submission occurs, it passes the entire response to the next node.
  • AWS Comprehend (IAM API Key auth) — Takes the feedback text from the submission and runs sentiment analysis. Returns a sentiment score and label (e.g., NEGATIVE, POSITIVE, NEUTRAL).
  • IF (No auth) — Checks if the detected sentiment equals "NEGATIVE". If yes, execution goes to the Mattermost node; otherwise it goes to a NoOp node that does nothing.
  • Mattermost (API Token auth) — Composes a message containing the negative sentiment score and the original feedback text, then posts it to the specified Mattermost channel.
  • NoOp (No auth) — A placeholder for the false branch so the workflow completes cleanly when sentiment is not negative.

Setup Instructions

  1. Typeform: Create a Typeform account and design a form with a question like "What did you think about the event?" (must match the field name in the workflow). In n8n, connect to Typeform using OAuth2 – you'll need to create an app in your Typeform developer settings.
  2. AWS Comprehend: You need an AWS account with IAM credentials (Access Key ID and Secret Access Key) that have permission to call the DetectSentiment API. In n8n, create an AWS credential with those keys.
  3. Mattermost: You need a Mattermost server or cloud instance, plus an API token (personal access token) with permission to post to a channel. Obtain the Channel ID (e.g., h7cxrd1cefr13x689enzyw7xhc). In n8n, create a Mattermost credential with the server URL and token.
  4. Update the form ID in the Typeform Trigger node: replace DuJHGW5 with your actual form ID.
  5. Update the Mattermost channel ID in the Mattermost node.
  6. Optional: Adjust the IF condition if you want to alert on a different sentiment (e.g., POSITIVE or NEUTRAL).

Use Cases & Variations

  • Customer Support: Immediately alert your support team when a user leaves negative feedback after an event or purchase.
  • Product Feedback: Route negative product reviews to a #bugs channel while leaving positive ones untouched.
  • Multi-langauge: The workflow works with any langauge supported by AWS Comprehend (English, Spanish, French, etc.).
  • Extentions: You can replace Mattermost with Slack (using the Slack node) or add an email notification via SMTP. You could also log all responses to a Google Sheet for historial analysis.
5 nodesmanual triggerSupport
MattermostNo OpIFAws Comprehend

Workflow JSON

{
  "nodes": [
    {
      "name": "Mattermost",
      "type": "n8n-nodes-base.mattermost",
      "position": [
        810,
        300
      ],
      "parameters": {
        "message": "=You got new feedback with a score of {{$json[\"SentimentScore\"][\"Negative\"]}}. Here is what it says:{{$node[\"Typeform Trigger\"].json[\"What did you think about the event?\"]}}",
        "channelId": "h7cxrd1cefr13x689enzyw7xhc",
        "attachments": [],
        "otherOptions": {}
      },
      "credentials": {
        "mattermostApi": "Mattermost Credentials"
      },
      "typeVersion": 1
    },
    {
      "name": "NoOp",
      "type": "n8n-nodes-base.noOp",
      "position": [
        800,
        500
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "name": "IF",
      "type": "n8n-nodes-base.if",
      "position": [
        600,
        400
      ],
      "parameters": {
        "conditions": {
          "number": [],
          "string": [
            {
              "value1": "={{$json[\"Sentiment\"]}}",
              "value2": "NEGATIVE"
            }
          ]
        }
      },
      "typeVersion": 1
    },
// ... truncated (copy to see full JSON)

How to Import This Workflow

  1. 1Copy the workflow JSON above using the Copy Workflow JSON button.
  2. 2Open your n8n instance and go to Workflows.
  3. 3Click Import from JSON and paste the copied workflow.

Don't have an n8n instance? Start your free trial at n8nautomation.cloud

Related Templates

AI Customer Support Chatbot with Elasticsearch Knowledge Base

Overview This workflow transforms a webhook endpoint into an intelligent customer support chatbot. It receives a customer question, searches a knowledge base stored in Elasticsearch, and generates a helpful, context-aware reply using OpenAI's GPT-4. The bot is designed to reduce human workload by answering common queries instantly, and gracefully escalates to a human agent when the answer is not found. It's ideal for embedding into a website, messaging app, or any frontend that can send HTTP POST requests. Node-by-Node Breakdown Chatbot Webhook (Frontend Trigger) — Type: (No auth) - Listens for POST requests at the path . The webhook ID is . This is the entry point where your frontend sends the customer's question as JSON body (e.g., ). Extract Customer Query — Type: (No auth) - Extracts from the incoming JSON body using a simple JavaScript code snippet: . This prepares the query for the next steps. Search Knowledge Base (Elasticsearch) — Type: (Requires Elasticsearch credentials – basic auth / API key) - Performs a search on the index using the extracted question as the query. The parameter is set to . It returns matching documents from the knowledge base. Generate AI Response with GPT-4 — Type: (API Key auth) - Uses the model to generate a response. The system message instructs the assistant to use the provided knowledge base content and to politely escalate if the answer is not found. The user message combines the customer question and the top knowledge base result (). Format Chatbot Reply — Type: (No auth) - Extracts the final reply from the OpenAI response: . This ensures the output is properly structured. Return Chatbot Reply — Type: (No auth) - Sends the formatted reply back to the caller (the frontend) as a JSON response. Setup Instructions Elasticsearch: You need a running Elasticsearch instance (cloud or self-hosted) with an index named . Populate it with documents containing your knowledge base articles (e.g., each document should have a field). Configure the Elasticsearch node in n8n with your host, port, and authentication credentials (API key or username/password). OpenAI: Obtain an API key from OpenAI. Add it as a credential in n8n (type: OpenAI API). Webhook URL: After activating the workflow, n8n will generate a unique webhook URL (e.g., ). Use this URL in your frontend (website, chatbot widget, etc.) to send POST requests. Activate the workflow: Toggle the workflow to active in n8n for the webhook to start listening. Use Cases & Adaptations Customer Support Portal: Embed the webhook URL in a live chat widget on your website to answer FAQs instantly. Slack or Discord Bot: Replace the webhook trigger with a Slack/Discord trigger and adjust the response format to send messages back to the channel. Multiple Knowledge Bases: Modify the Elasticsearch query to search across multiple indices or filter by category. Fallback to Human: Customize the GPT-4 system message to trigger a notification (e.g., email or Slack message) when the answer is not found. Model Upgrade: Swap for to reduce cost or use a custom fine-tuned model. Language Support: Add a language detection step before the query to route to different knowledge bases or translate the response.

6 nodes

HR & IT Helpdesk Chatbot with Audio Transcription on Telegram

Overview This workflow builds a fully functional HR & IT helpdesk chatbot that operates through Telegram. It ingests internal policy documents (e.g., employee handbooks, IT FAQs), creates a searchable knowledge base using vector embeddings stored in PostgreSQL, and then answers employee questions via text or voice messages. The chatbot uses Retrieval-Augmented Generation (RAG) to provide accurate, context-aware responses based on your company's specific policies. This is particularly useful for organizations that want to automate common HR and IT inquiries, reduce the burden on support teams, and provide 24/7 self-service to employees. The inclusion of voice message transcription makes it accessible for users who prefer speaking over typing. Workflow Steps Phase 1: Knowledge Base Ingestion (Run Once or on Update) When clicking 'Test workflow' (Manual Trigger — No auth) — This node starts the ingestion process manually. It is intended to be run once when setting up the workflow or whenever the policy documents are updated. HTTP Request (HTTP Request — No auth) — Fetches a PDF file from a public URL (in this example, an employee handbook from an S3 bucket). The URL can be changed to point to any PDF hosted online or on a shared drive. Extract from File (Extract from File — No auth) — Parses the downloaded PDF and extracts its text content. The operation is set to "pdf" to handle PDF documents. Recursive Character Text Splitter (Text Splitter — No auth) — Splits the extracted text into smaller chunks of 2000 characters each. This is necessary for creating meaningful vector embeddings and for efficient retrieval. Default Data Loader (Document Loader — No auth) — Converts the text chunks into document objects that can be stored in the vector store. It takes the text from the Extract from File node using the expression . Embeddings OpenAI (Embeddings — OpenAI API Key auth) — Generates vector embeddings for each text chunk using OpenAI's embedding models. These embeddings represent the semantic meaning of the text. Create HR Policies (PostgreSQL PGVector Store — Database credentials auth) — Inserts the document chunks and their embeddings into a PostgreSQL database with pgvector extension. This creates the searchable knowledge base. Phase 2: Chatbot Runtime Telegram Trigger (Telegram Trigger — Telegram Bot Token auth) — Listens for incoming messages on a Telegram bot. It captures all messages (text, voice, etc.) sent to the bot. Verify Message Type (Switch — No auth) — Routes messages based on their type: - Text messages (containing ) → sent to the AI agent - Voice messages (containing ) → sent for transcription - Other types → sent to a fallback response Edit Fields (Set — No auth) — For text messages, extracts the text content and passes it to the AI agent. Uses the expression . Telegram1 (Telegram — Telegram Bot Token auth) — For voice messages, downloads the audio file from Telegram using the from the incoming message. OpenAI (OpenAI — OpenAI API Key auth) — Transcribes the downloaded voice message into text using OpenAI's Whisper transcription API. The operation is set to "transcribe" and the binary property is set to "data". Unsupported Message Type (Telegram — Telegram Bot Token auth) — Sends a fallback message "I'm not able to process this message type." for unsupported message types (e.g., stickers, locations). AI Agent (AI Agent — No auth) — The core conversational agent. It receives the user's text (either directly or transcribed from voice) and generates a response. The system message is set to "You are a helpful assistant for HR and employee policies". OpenAI Chat Model (Chat Model — OpenAI API Key auth) — The language model powering the AI agent. It generates natural language responses based on the context and retrieved information. Postgres Chat Memory (Memory — Database credentials auth) — Maintains conversation history per user, using the Telegram chat ID as the session key. This allows the chatbot to remember context across multiple messages. Answer questions with a vector store (Vector Store Tool — No auth) — A tool that the AI agent uses to query the knowledge base. It is configured with the name "hremployeepolicies" and description "data for HR and employee policies". Postgres PGVector Store (Vector Store — Database credentials auth) — The actual vector store connection that retrieves relevant document chunks based on the user's query. OpenAI Chat Model1 (Chat Model — OpenAI API Key auth) — A second language model instance used specifically by the vector store tool for re-ranking or summarizing retrieved results. Embeddings OpenAI1 (Embeddings — OpenAI API Key auth) — A second embeddings instance used by the vector store tool to embed the user's query for similarity search. Telegram (Telegram — Telegram Bot Token auth) — Sends the AI agent's response back to the user in the same Telegram chat. Uses the expression for the response text. Setup Instructions Prerequisites OpenAI Account: You need an OpenAI API key with access to: - GPT-4 or GPT-3.5 for chat completion - text-embedding-ada-002 for embeddings - Whisper for audio transcription Telegram Bot: Create a bot via @BotFather on Telegram and obtain the bot token. PostgreSQL Database: A PostgreSQL database with the pgvector extension installed. You can use: - A local PostgreSQL instance - A cloud provider like Supabase, Aiven, or AWS RDS Configuration Steps Set up credentials in n8n: - OpenAI API: Add your OpenAI API key as a credential - Telegram Bot: Add your bot token as a credential - PostgreSQL: Add your database connection details (host, port, database name, user, password) Update the PDF URL: In the HTTP Request node, change the URL to point to your own policy documents (e.g., company handbook, IT policies, FAQs). Run the ingestion: Click "Test Workflow" on the When clicking 'Test workflow' node to populate the vector store with your documents. Set the webhook: Activate the workflow and set the Telegram webhook URL to your n8n instance's webhook URL (provided by the Telegram Trigger node). Test the chatbot: Send a text or voice message to your Telegram bot and verify it responds with relevant information from your policies. Use Cases and Variations Primary Use Cases HR Helpdesk: Answer questions about leave policies, benefits, payroll, company culture, and onboarding procedures. IT Support Desk: Provide troubleshooting steps for common IT issues, password reset instructions, software access requests, and hardware policies. Employee Onboarding: New hires can ask questions about company policies, team structures, and first-day procedures. Possible Variations Multiple Document Sources: Instead of a single PDF, use multiple HTTP Request nodes or connect to Google Drive, SharePoint, or Confluence to ingest documents from various sources. Different Channels: Replace the Telegram trigger with Slack, Microsoft Teams, or a web chat widget to deploy the chatbot on other platforms. Multi-language Support: Configure the OpenAI model to respond in multiple languages based on user preference or detected language. Human Handoff: Add a condition to escalate complex queries to a human agent via email or a ticketing system. Feedback Loop: Add a mechanism for users to rate responses and use that feedback to improve the knowledge base. Scheduled Re-indexing: Add a Cron trigger to periodically re-ingest documents to keep the knowledge base up to date.

27 nodes

Receive and Reply to Messages Across WhatsApp, Instagram, and Facebook Messenger with Fiwano

Overview This workflow provides a unified integration for receiving and replying to messages from WhatsApp, Instagram Direct Messages, and Facebook Messenger using the Fiwano platform. It demonstrates how to handle incoming messages from all three Meta-owned messaging channels through a single trigger and action node set, eliminating the need to build separate integrations for each platform. The workflow is ideal for customer support, lead response, or any scenario where you need to manage multi-channel messaging from one n8n instance. Workflow Steps Fiwano Trigger (API Key auth) — This node listens for incoming messages from all connected channels (WhatsApp, Instagram, Facebook Messenger). It uses the parameter to automatically register the workflow for every active channel in your Fiwano account. The trigger fires on "Message Received" events and provides a normalized payload regardless of which channel the message came from. Example — route by message type (No auth) — This is an IF node that checks the field from the incoming message. It routes messages into two branches: one for text messages (where equals "text") and another for all other message types (images, audio, video, documents, etc.). This demonstrates how to implement different reply logic based on message content type. Example — send text reply (API Key auth) — This Fiwano Send node replies to text messages. It uses the following parameters: - : Taken from the incoming message's field to ensure the reply goes back through the same channel - : Set to the sender's ID from - : A template that echoes the user's message: Example — send attachment reply (API Key auth) — This second Fiwano Send node handles replies to non-text messages (attachments). Its parameters: - : Same as above, using - : Same as above, using - : Acknowledges the attachment type: Setup Instructions Prerequisites A Fiwano account (sign up at fiwano.com) At least one connected messaging channel (WhatsApp Business API, Instagram Professional account, or Facebook Page connected to Messenger) n8n instance (self-hosted or cloud) with public accessibility for webhook triggers Installation Steps Install the n8n-nodes-fiwano community package in your n8n editor (verified package available in the n8n community nodes registry) Create a Fiwano API credential in n8n with your API key from the Fiwano portal (Recommended) Set a Webhook Secret on the credential for signature verification Connect your messaging channels through the Fiwano portal or their channel-connection API Save and activate the workflow — the trigger will auto-register for all active channels Use Cases and Variations Primary Use Cases Customer Support: Route incoming messages to a helpdesk or ticketing system based on message content or sender Lead Response: Automatically reply to inquiries from ads or business pages with personalized messages Notification System: Forward messages to Slack, email, or other internal tools Adaptation Ideas Replace the simple IF router with a more complex decision tree using Switch nodes or AI classification Add a database lookup (e.g., Airtable, Google Sheets) to check if the sender is an existing customer Integrate with OpenAI or other AI services to generate intelligent replies Add logging to a spreadsheet or database for analytics Implement different response templates for each channel type using the field Add human handoff logic when the AI or automated response cannot handle the query Important Notes The normalized payload from Fiwano includes: , (whatsapp/instagram/messenger), , , , , and (for attachments) You typically don't need to branch by channel type unless your business logic requires channel-specific behavior n8n must be publicly reachable for the webhook trigger to receive messages from Fiwano

6 nodes

Ready to automate with n8n?

Get affordable managed n8n hosting with 24/7 support.