Draft CPQ quotes from Slack with TurboQuote and OpenAI

Go to Workflow
0 views
Built by Nicolas Fry Nicolas Fry
Created on August 24, 2026

Description

Quick overview
This workflow listens for Slack @mentions, uses OpenAI to map the request to TurboQuote (TurboDocx) catalog products, creates a priced draft quote for an existing customer, and posts a review link back to the originating Slack channel.

How it works
Triggers when someone mentions the bot in a Slack channel (app_mention event).
Loads your TurboQuote product catalog from TurboDocx and provides it to an OpenAI-powered agent.
Uses OpenAI to extract the customer name and requested items from the Slack message and to look up matching TurboQuote products via catalog search.
Joins the selected product IDs back to the catalog to attach authoritative list prices, calculate totals, and track any unmatched or unpriced items.
If there are priced items, searches TurboQuote for the customer company and retrieves its primary contact.
Creates a draft TurboQuote quote, adds the priced line items, and posts the quote number, total, and internal review link to Slack (or posts an error if nothing is priced or the customer is not found).

Setup
Use a self-hosted n8n instance and install the @turbodocx/n8n-nodes-turbodocx community node.
Add Slack credentials and configure your Slack app to receive app_mention events and allow chat:write, then set the trigger channel (or leave it to listen in your intended channel).
Add an OpenAI API credential for the OpenAI Chat Model node.
Add TurboDocx/TurboQuote credentials and ensure your TurboQuote workspace has a populated product catalog with list prices plus existing companies with at least one contact.
Update the quote defaults (appBaseUrl, currency, termDays, and validDays) to match your TurboQuote environment and quoting policy.

Nodes Used (5)

AI Agent
@n8n/n8n-nodes-langchain.agent
Code
n8n-nodes-base.code
OpenAI Chat Model
@n8n/n8n-nodes-langchain.lmChatOpenAi
Slack
n8n-nodes-base.slack
Structured Output Parser
@n8n/n8n-nodes-langchain.outputParserStructured