Virtual Agent
Configure the AI-powered conversational agent for employee self-service — intent recognition, knowledge base integration, ticket deflection, and human escalation.
The FlowOS Virtual Agent is a conversational AI layer in front of your ITSM data. Employees ask questions in natural language — through the web widget, Slack, or Teams — and the agent answers from your knowledge base, fulfills catalog requests, or creates and updates ITSM records, escalating to a human agent only when needed.
admin, superadmin, or owner role to edit its configuration.Channels
The agent can be deployed on any combination of the following channels. Each channel is configured independently with its own welcome message and availability schedule.
| Channel | Setup Required | Features |
|---|---|---|
| Web Widget | Embed snippet (1 line) | Rich cards, file upload, live chat handoff, co-browsing |
| Slack | OAuth app install | Slash commands, DM conversation, interactive buttons |
| MS Teams | App manifest upload | Adaptive Cards, channels or 1:1 DM |
| Inbound mailbox config | Parse inbound email, reply via email thread | |
| API | API token only | Full programmatic access — build custom frontends |
Intents
An intent defines a type of user request the agent knows how to handle. Every inbound message is classified against the intent library; the highest-confidence match above the configured threshold is selected.
Built-in Intents
- •
report_incident— User describes a problem; agent gathers fields and creates an incident record. - •
check_incident_status— "What's the status of INC-1042?" Agent queries and returns current status and last update. - •
request_service— User wants a catalog item; agent walks them through the form and submits a request. - •
check_request_status— "Where is my laptop request?" Agent looks up their pending requests. - •
search_knowledge— Agent searches the published knowledge base and returns the top 3 articles. - •
password_reset— Guides user to self-service password reset or creates an access incident. - •
get_maintenance_window— Returns upcoming scheduled changes from the change calendar. - •
check_service_health— Shows current health status for configured services. - •
escalate_to_human— User explicitly requests a human agent; triggers escalation flow. - •
small_talk— Greetings, thanks, profanity filter; answered with canned responses.
Custom Intents
Create custom intents in Settings → Virtual Agent → Intents → New Intent.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| name | string | required | — | Slug identifier, e.g. request_vpn_access. |
| display_name | string | required | — | Human label shown in the UI. |
| description | string | optional | — | Describe when this intent should fire. |
| training_phrases | string[] | required | — | Example utterances. Min 5, recommended 20+. More diversity = better recall. |
| action | enum | required | — | answer_from_kb | create_record | run_workflow | call_api | handoff | custom_script |
| action_config | object | required | — | Configuration specific to the action type. |
| parameters | object[] | optional | — | Slot-filling parameters — fields the agent prompts for before executing the action. |
| confidence_threshold | number | optional | 0.75 | Minimum confidence (0–1) to trigger this intent. |
| fallback_message | string | optional | — | Message if agent cannot fulfill. Defaults to workspace-level fallback. |
| enabled | boolean | optional | true | Toggle intent. |
Intent Action Types
answer_from_kb
Search the knowledge base and return the best-matching article. The agent paraphrases the answer inline and links to the full article.
{
"action": "answer_from_kb",
"action_config": {
"categories": ["Networking", "VPN"], // optional — restrict to these KB categories
"max_results": 3,
"show_excerpt_length": 200,
"on_no_results": "escalate" // escalate | fallback_message
}
}run_workflow
Execute a FlowOS workflow and return its output to the user.
{
"action": "run_workflow",
"action_config": {
"workflow_id": "wf_01HX...",
"input_mapping": {
"userId": "{{session.userId}}",
"reason": "{{params.reason}}"
},
"response_template": "Your request has been submitted. Reference: {{output.requestNumber}}"
}
}Slot Filling
Parameters (slots) are fields the agent needs before it can execute an action. When a required parameter is missing, the agent automatically prompts the user for it in a conversational turn.
{
"parameters": [
{
"name": "affected_service",
"prompt": "Which service is affected?",
"type": "string",
"required": true,
"suggestions": ["Email", "VPN", "HR Portal", "Jira", "Other"]
},
{
"name": "severity",
"prompt": "How severe is the impact? (P1 — complete outage, P2 — degraded, P3 — minor)",
"type": "enum",
"values": ["P1", "P2", "P3"],
"required": true
},
{
"name": "description",
"prompt": "Briefly describe what's happening.",
"type": "text",
"required": true,
"min_length": 10
}
]
}Human Escalation
When the agent cannot resolve a request — low confidence, user requests a human, or an action fails — it triggers the escalation flow. Configure escalation in Settings → Virtual Agent → Escalation.
Escalation Modes
- •Create Incident: Agent creates an incident pre-filled with the conversation context and assigns it to the configured team. User is notified of the incident number.
- •Live Chat Handoff: Transfers the conversation to a human agent in the Live Chat queue (requires Live Chat add-on). Full conversation history is visible to the agent.
- •Email: Agent composes and sends a summary email to the support team email address.
- •Custom Workflow: Run any workflow at escalation time — useful for Slack-based on-call paging.
Escalation Triggers
- •No intent matched above confidence threshold after 2 retries.
- •User explicitly says "human", "agent", "real person", "live support".
- •Action failed (e.g., workflow errored, KB returned no results).
- •Sentiment analysis detects frustration (optional — requires AI sentiment module).
- •P1 incident reported — automatically escalates in addition to creating the record.
Knowledge Base Integration
The agent has read access to all published knowledge articles with visibility: portal or visibility: public. Internal articles are not exposed. You can further restrict which categories the agent searches via the answer_from_kb action config.
API
/api/v1/virtual-agent/messagesSend a message to the agent and get a response. Use this to build custom channel integrations.
// Request
{
"session_id": "ses_01HX...", // create a new session or continue existing
"user_id": "usr_01HX...", // authenticated user (null for anonymous)
"channel": "api",
"message": "I can't connect to VPN from home"
}
// Response
{
"session_id": "ses_01HX...",
"message_id": "msg_01HX...",
"intent": "report_incident",
"confidence": 0.91,
"response": {
"text": "I'm sorry to hear that! Let me help you report this. Which VPN client are you using?",
"suggestions": ["Cisco AnyConnect", "GlobalProtect", "Other"]
},
"action": null, // null until all params collected
"state": "collecting_params"
}/api/v1/virtual-agent/sessions/:idGet conversation history for a session.
/api/v1/virtual-agent/sessions/:id/handoffManually trigger escalation for a session.
/api/v1/virtual-agent/analyticsAggregate metrics — deflection rate, intent distribution, escalation rate.