Back to HomeDialogflow

Dialogflow Intent and Context Complete Tutorial: Building Smart Multi-Turn Conversations

12 min min read
#Dialogflow#Intent#Context#Entity#Conversation Design

Dialogflow Intent and Context Complete Tutorial: Building Smart Multi-Turn Conversations

Dialogflow Intent and Context Complete Tutorial: Building Smart Multi-Turn Conversations

Why do some chatbots feel stupid while others can converse like real people?

The key is in "multi-turn conversation" design. A stupid bot treats every message like meeting someone for the first time—listens and forgets. A smart bot remembers conversation context and understands what you really want.

Dialogflow uses three core elements—Intent, Entity, and Context—to let you design bots that can "remember" conversations. This article explains these concepts in depth and teaches you to build truly smart AI conversations.

If you're not yet familiar with Dialogflow basics, we recommend first reading the Dialogflow Complete Guide.


Intent Deep Dive

Intent is Dialogflow's most core concept: what the user wants to do.

What Is Intent

When a user says "I want to make a reservation," Dialogflow needs to understand this is a "reservation" intent, not "check order" or "ask business hours."

Intent workflow:

User Input → NLU Analysis → Match Intent → Execute Response
    │              │            │            │
"Make reservation" Intent    make_booking   "OK, please..."
              matching

Training Phrases Design Tips

Training Phrases are example sentences that teach the bot to recognize Intents. Write them well, and the bot recognizes accurately.

Tip 1: Provide Diverse Phrasings

Don't just write one way of saying things:

❌ Bad example (only one way):
- I want to make a reservation

✓ Good example (diverse):
- I want to make a reservation
- Want to book a table
- Reserve a seat
- Can you help me make a reservation
- I'd like to book
- Book a table

Tip 2: Cover Different Lengths

- Book (very short)
- I want to book (short)
- Help me book a table for tomorrow night (medium)
- Hello, I'd like to reserve for this Saturday at 7 PM for 4 people (long)

Tip 3: Include Common Typos

Common typos or colloquialisms from users:

- resevation (typo for "reservation")
- wanna book (casual)
- I want to book a table (mixed formal/casual)

Tip 4: Use Entity Annotations

Annotate Entities in Training Phrases so Dialogflow learns to extract information:

Book for @sys.date:date
→ "Book for tomorrow" will extract date = tomorrow

Recommended quantity:

  • At least 10-15 Training Phrases per Intent
  • Important Intents can have 30-50

Response Configuration Methods

Response is the bot's reply. There are several configuration methods:

1. Plain Text Response

The simplest method—directly enter text. You can enter multiple variants, and Dialogflow will randomly select one.

- OK, what date would you like to dine?
- No problem! Please tell me what day you'd like to book?
- OK, I'll help you make a reservation. What day is it for?

2. Responses with Parameters

Use $parameter_name to reference parameter values:

OK, you want to book for $date $time, party of $party_size, correct?

3. Platform-Specific Responses

Different platforms can have different formats:

  • LINE: Flex Message
  • Messenger: Quick Reply
  • Web: Plain text

Default Intents Explained

Two Intents automatically created by Dialogflow:

IntentTrigger TimeSuggested Configuration
Default Welcome IntentConversation startsFriendly greeting + feature guide
Default Fallback IntentCan't understandProvide options or transfer to human

Fallback Intent Design Suggestions:

❌ Bad response:
"Sorry, I don't understand."

✓ Good response:
"I'm sorry, I didn't understand that. You can try:
• Type "book" to make a reservation
• Type "menu" to see dishes
• Type "help" to contact a human"

Illustration: Intent Structure Diagram

Scene Description: A diagram showing Intent structure. Center is Intent name "make_booking," surrounded by four connected elements: Training Phrases (multiple examples), Parameters (date, time, party_size), Response (reply text), Context (input/output context).

Visual Focus:

  • Main content clearly presented

Required Elements:

  • Based on key elements in description

Chinese Text to Display: None

Color Tone: Professional, clear

Elements to Avoid: Abstract graphics, gears, glowing effects

Slug: dialogflow-intent-structure-diagram


Entity Advanced

Entity lets Dialogflow extract meaningful information from user input.

System Entity vs Custom Entity

System Entity

Built-in Dialogflow entities, ready to use:

EntityPurposeExamples
@sys.dateDatetomorrow, 1/15, next Monday
@sys.timeTime7 o'clock, 8:30 PM
@sys.numberNumber4, ten, one hundred
@sys.phone-numberPhone0912345678
@sys.emailEmail[email protected]
@sys.urlURLhttps://...
@sys.geo-cityCityNew York, London

Custom Entity

Create for your business needs:

Entity: @menu_item
Values:
- fried rice
- noodles
- steak
- pasta

Synonym Configuration

Let Entity recognize different ways of saying the same thing:

Entity: @menu_item
Value: fried rice
Synonyms: egg fried rice, house fried rice, fried rice combo

Value: steak
Synonyms: beef steak, filet mignon, ribeye, sirloin

Composite Entity Design

When extracting complex information, you can combine multiple entities:

Entity: @booking_info
Value: @sys.date @sys.time @sys.number guests
Example: tomorrow 7 PM 4 guests

Conversation:
User: I want to book for tomorrow 7 PM for 4
→ Extract: date=tomorrow, time=19:00, party_size=4

Recommendation: Composite entities are error-prone; it's better to use multi-turn conversations to ask separately.


Context Deep Dive

Context is the key to making bots "remember" conversations. Without Context, every conversation is like the first time.

Input Context / Output Context

Output Context: Context that's "set" after this Intent triggers Input Context: Context that must "exist" for this Intent to trigger

Example: Reservation Flow

Intent: start_booking
Input Context: (none)
Output Context: booking (lifespan: 5)
Response: "OK, what date would you like to dine?"

Intent: provide_date
Input Context: booking
Output Context: booking_date (lifespan: 5)
Response: "Got $date, what time would you like to dine?"

Intent: provide_time
Input Context: booking_date
Output Context: booking_complete (lifespan: 2)
Response: "$date $time, how many guests?"

Effect: Users must first trigger start_booking before they can trigger provide_date. This prevents random user input from disrupting the flow.

Lifespan Settings

Lifespan determines how many conversation turns Context survives.

LifespanEffect
0Remove this Context immediately
1Only survives this turn
5Survives 5 turns (default)
10+Long-term memory

Configuration recommendations:

  • Short flows (2-3 steps): Lifespan 3-5
  • Long flows (5+ steps): Lifespan 10+
  • When clearing needed: Set Output Context lifespan = 0 in ending Intent

Multi-Turn Conversation Design Patterns

Pattern 1: Linear Flow

Start → Ask Date → Ask Time → Ask Party Size → Confirm
 │        │         │         │        │
 └─ C1 ──┴── C2 ───┴── C3 ───┴─ C4 ───┘

Each step sets different Context, ensuring sequential execution.

Pattern 2: Branching Flow

        ┌─→ Dine-in Flow ─→ Ask Party Size → Ask Time
Start ──┤
        └─→ Takeout Flow ─→ Ask Items → Ask Pickup Time

Based on user choice, enter different Context branches.

Pattern 3: Anytime Exit

Can say "cancel" at any step to exit the flow:

Intent: cancel_booking
Input Context: booking
Output Context: booking (lifespan: 0)  // Clear Context
Response: "Reservation cancelled, anything else I can help with?"

Context Parameter Passing

Context can carry parameters, letting subsequent Intents use previously collected information.

Configuration method:

Intent: provide_date
Parameters:
  - date: @sys.date
Output Context: booking
  - Parameters automatically carry into Context

In next Intent:
Response: Your selected date is #booking.date

Access methods:

  • Same-name Context: $parameter_name
  • Specific Context: #context_name.parameter_name

Illustration: Context Flow Diagram

Scene Description: A flowchart showing Context operation in multi-turn conversations. Three Intent boxes arranged vertically, each showing Input/Output Context settings. Beside them, a timeline shows Context lifecycle, indicating lifespan numbers decrementing.

Visual Focus:

  • Main content clearly presented

Required Elements:

  • Based on key elements in description

Chinese Text to Display: None

Color Tone: Professional, clear

Elements to Avoid: Abstract graphics, gears, glowing effects

Slug: dialogflow-context-flow-diagram


Agent Architecture Design

As projects grow, Intent and Context management becomes important.

Intent Categorization Strategy

Use naming conventions for categorization:

Booking related:
- booking.start
- booking.provide_date
- booking.provide_time
- booking.confirm
- booking.cancel

Query related:
- query.order_status
- query.menu
- query.hours

Common:
- common.greeting
- common.thanks
- common.help

Benefits:

  • Arranged neatly in Console
  • See at a glance which feature an Intent belongs to
  • Team collaboration becomes clearer

Conversation Flow Planning

Before building Intents, draw out the conversation flow diagram:

┌───────────────────────────────────────────────┐
│              Conversation Start                │
│         "Hello, I'm XX customer service"       │
└───────────────┬───────────────────────────────┘
                │
    ┌───────────┼───────────┬───────────┐
    ▼           ▼           ▼           ▼
┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐
│ Book  │ │ Query │ │Complaint│ │ Other │
└───┬───┘ └───┬───┘ └───┬───┘ └───┬───┘
    │         │         │         │
    ▼         ▼         ▼         ▼
 [Flow]    [Flow]   [Transfer]   [FAQ]

Design principles:

  • Main features should not exceed 5 entry points
  • Each flow stays within 3-5 steps
  • Always provide "back" or "cancel" options

Large Project Organization

Method 1: Use Context Prefix Grouping

booking_*: Booking-related Contexts
order_*: Order-related Contexts
support_*: Customer service-related Contexts

Method 2: Consider Upgrading to CX

If Intents exceed 50, consider switching to Dialogflow CX. CX's Flow architecture is better suited for large projects.

For detailed CX tutorials, refer to Dialogflow CX Tutorial: From Beginner to Advanced.

Illustration: Agent Architecture Planning Diagram

Scene Description: A mind map style chart, center is Agent name, branching out to four main functional areas (Booking, Query, Customer Service, FAQ). Under each functional area lists related Intent names, with colors distinguishing different categories.

Visual Focus:

  • Main content clearly presented

Required Elements:

  • Based on key elements in description

Chinese Text to Display: None

Color Tone: Professional, clear

Elements to Avoid: Abstract graphics, gears, glowing effects

Slug: dialogflow-agent-architecture-planning


Conversation architecture getting messier? Intent and Context planning requires experience—poor architecture makes projects hard to maintain. Book architecture consultation to have experienced people help design scalable architecture.


Conditional Response

Make bots respond differently based on different situations, more like real conversation.

Dynamic Response Based on Parameters

Scenario: Respond differently based on party size

Method 1: Use Conditions in Response (ES doesn't directly support)

Method 2: Use Fulfillment

function handler(agent) {
  const partySize = agent.parameters.party_size;

  if (partySize > 10) {
    agent.add('Parties over 10 require a deposit, is that OK?');
  } else if (partySize > 6) {
    agent.add('OK, we\'ll arrange a private room for 6+, what time?');
  } else {
    agent.add('OK, what time would you like to dine?');
  }
}

Switch Response Based on Context

Scenario: Already asked about date, don't repeat

function handler(agent) {
  const context = agent.context.get('booking_date');

  if (context) {
    const date = context.parameters.date;
    agent.add(`You previously selected ${date}, want to change the date? Or continue?`);
  } else {
    agent.add('What date would you like to dine?');
  }
}

Implementation Example

Complete conditional reservation flow:

exports.dialogflowWebhook = (request, response) => {
  const agent = new WebhookClient({ request, response });

  function handleBooking(agent) {
    const { date, time, party_size } = agent.parameters;

    // Check if weekend
    const bookingDate = new Date(date);
    const isWeekend = bookingDate.getDay() === 0 || bookingDate.getDay() === 6;

    // Check if peak hours
    const hour = parseInt(time.split(':')[0]);
    const isPeakHour = hour >= 18 && hour <= 20;

    if (isWeekend && isPeakHour && party_size > 4) {
      agent.add('Large tables during weekend peak hours are limited, we recommend booking 3 days in advance. Are you sure you want this time slot?');
    } else if (isWeekend) {
      agent.add('Weekends are busy, we recommend arriving 10 minutes early. Confirm reservation?');
    } else {
      agent.add(`OK, ${date} ${time}, party of ${party_size}, confirm reservation?`);
    }
  }

  const intentMap = new Map();
  intentMap.set('booking.confirm', handleBooking);

  agent.handleRequest(intentMap);
};

For more Fulfillment development details, refer to Dialogflow Fulfillment and API Integration Tutorial.


Common Errors and Debugging

Error 1: Intent Conflicts

Symptom: Say A but trigger B

Cause: Training Phrases too similar

Solution:

  1. Check Training Phrases of both Intents
  2. Make differences more obvious
  3. Use Input Context to separate

Error 2: Context Expired

Symptom: Multi-turn conversation breaks midway

Cause: Lifespan too short

Solution: Increase Lifespan, or reset Output Context at each step

Error 3: Parameter Extraction Failed

Symptom: Parameter that should be extracted is null

Causes:

  1. Entity doesn't cover user's phrasing
  2. Training Phrases not annotated with Entity

Solutions:

  1. Add Entity synonyms
  2. Confirm Training Phrases are correctly annotated

Debugging Tips

Use Test Panel:

  1. Test in right side of Dialogflow Console
  2. Click "Diagnostic Info" to see details
  3. Check triggered Intent, parameter values, Context status

View History:

  1. Click "History" on the left
  2. View past conversation records
  3. Find failed recognition cases, add to Training Phrases

Next Steps

After mastering Intent and Context, you can:

  1. Integrate Backend Systems: Dialogflow Fulfillment and API Integration Tutorial
  2. Connect LINE Bot: Dialogflow LINE Bot Integration Tutorial
  3. Learn CX Version: Dialogflow CX Tutorial: From Beginner to Advanced

Illustration: Intent/Context Learning Completion Roadmap

Scene Description: A roadmap starting from "Intent/Context Basics," splitting into three paths: "Backend Integration" connects to Fulfillment article, "Platform Integration" connects to LINE Bot article, "Advanced Architecture" connects to CX tutorial article. Each path uses different colors.

Visual Focus:

  • Main content clearly presented

Required Elements:

  • Based on key elements in description

Chinese Text to Display: None

Color Tone: Professional, clear

Elements to Avoid: Abstract graphics, gears, glowing effects

Slug: dialogflow-intent-context-next-steps


Need Professional Advice on Conversation Design?

Good conversation design makes users feel like they're chatting with a real person; poor design makes people want to call customer service directly.

If you need:

  • Plan complex multi-turn conversation flows
  • Optimize existing bot recognition rates
  • Design natural, fluid conversation experiences
  • Handle architecture planning for many Intents

Book AI implementation consultation to have experienced conversation designers help build truly useful AI customer service.

Consultation is completely free, we'll respond within 24 hours.


Need Professional Cloud Advice?

Whether you're evaluating cloud platforms, optimizing existing architecture, or looking for cost-saving solutions, we can help

Book Free Consultation

Related Articles