ITSM

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.

The Virtual Agent is configured at Settings → Virtual Agent. You need the 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.

ChannelSetup RequiredFeatures
Web WidgetEmbed snippet (1 line)Rich cards, file upload, live chat handoff, co-browsing
SlackOAuth app installSlash commands, DM conversation, interactive buttons
MS TeamsApp manifest uploadAdaptive Cards, channels or 1:1 DM
EmailInbound mailbox configParse inbound email, reply via email thread
APIAPI token onlyFull 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.

FieldTypeRequiredDefaultDescription
namestringrequiredSlug identifier, e.g. request_vpn_access.
display_namestringrequiredHuman label shown in the UI.
descriptionstringoptionalDescribe when this intent should fire.
training_phrasesstring[]requiredExample utterances. Min 5, recommended 20+. More diversity = better recall.
actionenumrequiredanswer_from_kb | create_record | run_workflow | call_api | handoff | custom_script
action_configobjectrequiredConfiguration specific to the action type.
parametersobject[]optionalSlot-filling parameters — fields the agent prompts for before executing the action.
confidence_thresholdnumberoptional0.75Minimum confidence (0–1) to trigger this intent.
fallback_messagestringoptionalMessage if agent cannot fulfill. Defaults to workspace-level fallback.
enabledbooleanoptionaltrueToggle 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.

json
{
  "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.

json
{
  "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.

json
{
  "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.

Articles written with clear headings, short paragraphs, and explicit "Symptoms / Cause / Resolution" structure perform significantly better in agent retrieval than long free-form articles.

API

POST
/api/v1/virtual-agent/messages

Send a message to the agent and get a response. Use this to build custom channel integrations.

json
// 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"
}
GET
/api/v1/virtual-agent/sessions/:id

Get conversation history for a session.

POST
/api/v1/virtual-agent/sessions/:id/handoff

Manually trigger escalation for a session.

GET
/api/v1/virtual-agent/analytics

Aggregate metrics — deflection rate, intent distribution, escalation rate.