dograh/docs/voice-agent/agent.mdx
Rushil 96cde1b767
docs: flesh out all 5 voice agent node pages (#556)
* docs: flesh out stub node pages for Global, Start Call, Agent, End Call, QA

Each page was previously a stub (1 sentence or a single <Note>). Now contains:
- Plain-English explanation of what the node does and when it runs
- Fields/configuration reference
- Common mistakes section
- Next Steps with CardGroup links

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs: fix heading structure, Warning placement, variable formatting in node pages

- qa.mdx: promote Viewing QA Results from h3 to h2 (was incorrectly nested under Where it sits on the canvas)
- end-call.mdx: move Warning inside Common Mistakes, directly after the bullet it relates to
- start-call/agent/end-call/qa.mdx: wrap bare gathered_context and initial_context in backticks in Card descriptions

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs: correct node page errors found by cross-checking against live API + DTO

start-call:
- Fix Node Name description (canvas label, not agent spoken name)
- Split Greeting Text and Prompt into separate documented fields (were conflated)
- Add Delayed Start field (real config option, was missing entirely)
- Fix Common Mistakes (remove wrong Agent Name claim)
- Add Pre-recorded Audio note with link

end-call:
- Remove incorrect <Note> claiming one End Call per workflow
- DTO has no max_instances constraint; llm_hint explicitly says multiple are supported
- Fix Common Mistakes to reflect correct guidance (multiple allowed)

agent:
- Add Extracting variables section documenting extraction_enabled, extraction_prompt,
  extraction_variables fields with a concrete example

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs: fix field names and QA model against live platform schemas

- qa.mdx: replace fictional criteria-list concept with accurate
  qa_system_prompt field; document default output format (tags, score,
  sentiment, summary); add sampling/duration/voicemail filter settings
- global.mdx: correct prompt-merge order (global prepended, not appended)
- start-call.mdx: update stale "Greeting Prompt" reference in common
  mistakes to match renamed field "Greeting Text"

Verified against live node schemas via Dograh MCP get_node_type.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs: fix em dash violations and appended/prepended contradiction

- global.mdx: "silently appended" contradicted "global content first";
  changed to "prepended" for internal consistency and schema accuracy
- qa.mdx: remove two em dashes (hard no per style rules)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs: correct node docs against live workflow SDK evidence

- start-call: replace invented fixed edge labels with accurate explanation
  that edge labels and conditions are user-defined; add real examples
- end-call: rename "Final Message" to "Prompt" to match SDK field name
  used in all real workflows; update all references
- global: add Start Call to Add Global Prompt toggle coverage
  (startCall has add_global_prompt: true by default per schema)
- qa: replace informal tag descriptions with actual default tag names
  from the qa_system_prompt schema

All changes verified against live Dograh MCP node schemas and
real workflow SDK code (workflow IDs 7764, 8291).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs: flesh out all 5 voice agent node pages with accurate UI fields

Complete rewrite of stub docs for global, start-call, agent, end-call,
and qa nodes. Field names, toggle labels, and section headings now match
the actual Dograh UI exactly. Covers all fields visible in each node
edit panel including Allow Interruption, Add Global Prompt, Delayed Start,
Enable Variable Extraction, Pre-Call Data Fetch, and QA settings table.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs: remove Allow Interruption from End Call node

End Call does not expose an Allow Interruption toggle in the UI.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* docs: address cubic and greptile review comments on node pages

- agent.mdx, end-call.mdx: remove/correct gathered_context claims -
  it is not available in any node's Prompt, only in Webhook payloads
  and the run record (confirmed against context-and-variables.mdx)
- global.mdx: fix appended -> prepended in frontmatter description
  and Common Mistakes (contradicted How It Works section)
- introduction.mdx: update End Call node-type table - multiple End
  Call nodes are supported, not just one
- agent.mdx, end-call.mdx, qa.mdx, start-call.mdx: tag bare code
  fences as text for Mintlify syntax highlighting
- global.mdx, start-call.mdx, agent.mdx, end-call.mdx, qa.mdx:
  convert absolute internal links to relative paths per style guide

* docs: embed video tutorials on all 5 node pages, fix cubic grammar comment

- Add Video Tutorial section (iframe embed) to global, start-call,
  agent, end-call, and qa node pages, matching the pattern already
  used in webhook.mdx
- global.mdx: fix "Global Node contain" -> "Global Node contains" in
  frontmatter description, per cubic review on 09c5ff31

* docs: fix appended/prepended in introduction.mdx node table

Global node's node-type summary still said the prompt is "appended"
after Add Global Prompt is enabled, contradicting the corrected
"prepended" behavior documented everywhere else. Caught by greptile
P1 review on commit b7fe2d0d.

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 12:27:17 +05:30

113 lines
5.4 KiB
Text

---
title: "Agent Node"
description: "Agent node contains the prompts that drives the conversation with the Voice Agent"
---
## Video Tutorial
<iframe
width="560"
height="315"
src="https://www.youtube.com/embed/GavcBI8JQAQ"
title="Agent Node Tutorial"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerPolicy="strict-origin-when-cross-origin"
allowFullScreen
></iframe>
Agent Node is the core building block of every Dograh workflow. It holds the LLM prompt that drives the conversation, any tools the agent can call, and knowledge base documents to reference. You can have multiple Agent Nodes in a single workflow, each handling a distinct phase of the conversation.
The Edges connected with Agent Nodes are pathways that the LLMs can take depending on how the conversation has been going so far.
## What goes in an Agent Node
**Prompt**
The instructions for how the agent should behave at this step. Be explicit about sequence: if the agent should confirm identity before discussing payment, say so in the prompt. Vague prompts produce inconsistent behavior.
**Tools**
External functions the agent can call during this step - for example, looking up account balances or updating a CRM record. Add tools via the "HTTP & Tools" or "MCP" tabs in the node settings panel.
**Allow Interruption**
When on, the caller can interrupt the agent mid-utterance.
**Add Global Prompt**
When on and a Global Node exists, the Global Prompt is prepended to this node's Prompt at runtime. On by default.
**Knowledge Base Documents**
Files the agent can reference when answering questions - product guides, FAQs, policies. Attach them via the "Manage Documents" button in the node settings panel.
## Configuring edges
Each outgoing edge has a condition written in plain language. The LLM evaluates the conversation and picks the edge whose condition best matches.
Write edge conditions as specifically as possible:
| Vague (avoid) | Specific (use) |
|---------------|----------------|
| "Debtor responds" | "Debtor confirms their identity and is ready to discuss the account" |
| "Call ends" | "Debtor commits to a specific payment option and states the amount" |
| "Problem" | "Debtor disputes owing the debt or requests validation documentation" |
<Tip>
If the agent keeps routing to the wrong edge, make the condition more specific. Conditions like "user responds" or "conversation ends" are too broad and will route unpredictably.
</Tip>
## Extracting variables
Agent Node can extract structured data from the conversation after the node completes. Enable this in the node settings under "Enable Variable Extraction."
Once enabled, configure two things:
- **Extraction Prompt:** overall instructions telling the LLM how to approach the extraction.
- **Variables to Extract:** a list of variables, each with a name, a data type (`string`, `number`, `boolean`), and a per-variable hint describing what to capture.
For example:
```text
Extraction Prompt:
Extract the payment outcome from this debt collection call.
Variables:
- amount_user_will_pay (string): Amount the user said they will pay.
- payment_method (string): How they said they will pay, e.g. card, bank transfer.
- sentiment (string): User tone: cooperative, hesitant, angry, refused.
```
Each extracted value is stored in `gathered_context`. It is not available in any node's Prompt - reference it in [Webhook node](./webhook) payloads as `{{gathered_context.variable_name}}`, or read it from the run record after the call completes.
## Using multiple Agent Nodes
Break complex conversations into phases. Each Agent Node handles one part of the flow. A debt collection workflow, for example, might chain three Agent Nodes: identity verification, offer presentation, and objection handling.
Nodes pass context forward automatically, but not into prompts. Variables extracted in one node are stored in `gathered_context` and merged with variables from later nodes as the call progresses. `gathered_context` is not available in any node's Prompt - it can only be referenced in [Webhook node](./webhook) payloads and in the run record after the call completes. If a later Agent Node needs to react to something extracted earlier, that logic has to live in the prompt's own instructions, not in a `{{gathered_context...}}` reference.
## Common mistakes
**No outgoing edges.** Every Agent Node needs at least one edge. A dead-end node has no exit path and will trap the call.
**Putting global instructions in the Agent prompt.** Rules that apply across the entire workflow - persona, tone, compliance guardrails - belong in the [Global Node](./global), not repeated in every Agent Node.
**Vague edge conditions.** The LLM picks the edge that best matches the conversation state. Overly broad conditions cause unpredictable routing between nodes.
## Next Steps
<CardGroup cols={2}>
<Card title="End Call Node" href="./end-call">
Terminate the conversation with a closing message.
</Card>
<Card title="Global Node" href="./global">
Write shared instructions that apply to every node.
</Card>
<Card title="Context and Variables" href="../core-concepts/context-and-variables">
Understand how `gathered_context` is built and where it can be referenced.
</Card>
<Card title="QA Node" href="./qa">
Evaluate agent performance automatically after each call.
</Card>
</CardGroup>