How to Build an AI-Powered Internal FAQ System
Create an internal FAQ that uses RAG to answer team questions from your company docs.
What This Integration Does
Internal teams burn hours each week asking the same questions: how do I expense a flight, what is the parental leave policy, where do I find the onboarding checklist. This workflow gives them a Slack or browser endpoint they can ask in plain English, and returns an answer drawn directly from your indexed handbook, policy docs, and FAQ articles. Because every answer is grounded in real source material, you avoid the hallucinated nonsense a vanilla chatbot tends to produce.
At run time, a webhook (typically from a Slack slash command or an internal admin tool) hands the question to the workflow. The Knowledge node performs semantic retrieval against your indexed company documents, the AI Agent composes a grounded answer with citations, and the Response node hands it back to the caller. Each request runs in isolation, so you can scale the workflow horizontally with no shared state to worry about.
Prerequisites
- A Knowledge collection already populated with your handbook, policies, and FAQ documents (see the companion tutorial on building one from PDFs).
- A Slack connection if you want users to ask via a slash command or DM, or any HTTP client that can hit a webhook.
- Access to the AI Agent (the tool-augmented LLM used by the Knowledge node and by free-form generation steps).
Step 1: Webhook Trigger
Drop a Trigger node on the canvas and set its sub-type to Webhook. Spojit gives you a unique URL. Wire that URL to a Slack slash command (e.g. /ask) or to whatever internal tool will be sending the question. The trigger should expose two fields downstream: question (the user's text) and userId (so you can log who asked).
Step 2: Knowledge Node - Retrieve Relevant Chunks
Add a Knowledge node and point it at your company-docs collection. Pass the user's question through verbatim:
{
"query": "{{ trigger.question }}",
"topK": 6,
"minScore": 0.72
}
The node returns the top matching chunks with similarity scores and the source document name for each. Keep topK small (4-8) so the AI prompt stays focused, and tune minScore upward if you see weak matches sneaking into the answer.
Step 3: AI Agent - Compose a Grounded Answer
Add a Connector node configured to call the AI Agent. The system prompt should pin it down hard:
You are an internal company FAQ assistant. Answer ONLY using the
provided context. If the answer is not in the context, reply:
"I don't have that in our internal docs - try asking #people-ops."
Context:
{{ knowledge.results }}
Question: {{ trigger.question }}
Set the temperature to 0.2 for consistent, factual answers, and ask the model to include a short Sources footer that lists the document names from the context.
Step 4: Condition - Did We Actually Find Anything?
Add a Condition node that checks knowledge.results.length > 0. On the false branch, skip the AI call entirely and return a canned "I don't have that in our internal docs" reply. This is cheaper than letting the LLM produce the same fallback, and gives you a clean metric for unanswerable questions.
Step 5: Slack Response (or Webhook Response)
For the Slack path, add a Connector node pointing at the slack connector and pick the send-message tool. Post the answer back to the user as an ephemeral reply so only they see it. For a browser tool, use a Response node and return the answer plus the source list as JSON so the front end can render the citations nicely.
Step 6: Log the Q&A for Future Improvement
Add a final Connector node that appends each question, answer, and the matched sources into a faq_logs table or a Google Sheet. Review the log weekly to spot questions the Knowledge node could not answer and feed the gaps back into your documentation.
Tips
- Refresh the index regularly - run a nightly indexing workflow so policy changes are reflected within 24 hours.
- Cache hot answers - if the same question shows up dozens of times a week, store the result in a small cache keyed by a normalized question hash.
- Strip personal data from logs - the question log is a goldmine for improvement, but it can leak private context. Mask emails and IDs before persisting.
Common Pitfalls
- Stale documents - if you update a policy but forget to re-index, the FAQ confidently quotes the old rule. Always re-index on document change.
- Over-retrieval - setting
topKto 20 or more dilutes the prompt with weak matches and the answer quality drops. Stay in the 4-8 range. - Slack 3-second rule - Slack slash commands time out after 3 seconds. Acknowledge immediately with an empty 200, then post the actual answer via a follow-up
send-messagecall.
Testing
Start with five known-good questions whose answers you can verify by hand against a single source document. Run each through the workflow and confirm the AI quotes the right passage. Then try five questions that are deliberately not in your docs and confirm the fallback path triggers. Only after both sets pass should you broadcast the slash command to the wider team.