Quickstart: Interactions with the API
Stay organized with collections
Save and categorize content based on your preferences.
If you are not using an
integration,
you must write code to interact with end-users.
For each conversational turn,
your code calls the Dialogflow API to query your agent.
This guide shows you how to interact with an agent
by using the REST API at the command line and by using the client libraries.
Before you begin
If you do not plan on using the API, you can skip this quickstart.
You should do the following before reading this guide:
Perform steps in the
Build an agent
quickstart guide.
Steps below continue working on the agent you started in that guide.
If you no longer have that agent, you can download
build-agent-quickstart.zip
and
import the file.
A session represents a conversation between a Dialogflow agent and an end-user.
You create a session at the beginning of a conversation
and use it for each turn of the conversation.
Once the conversation has ended, you discontinue using the session.
You should not use the same session for
concurrent conversations with different end-users.
Dialogflow maintains the currently active contexts for each active session.
Session data is stored by Dialogflow for 20 minutes.
Each session is determined unique by a session ID generated by your system.
You create a new session by providing a new session ID in a
detect intent request.
A session ID is a string of at most 36 bytes in size.
Your system is responsible for generating unique session IDs.
They can be random numbers, hashed end-user identifiers,
or any other values that are convenient for you to generate.
Detect intent
When you use the API for interactions,
your service interacts directly with the end-user.
For each conversational turn,
your service sends end-user expressions to Dialogflow by calling the
detectIntent or streamingDetectIntent method of the
Sessions
type.
Dialogflow responds with information about the matched intent,
the action, the parameters, and the response defined for the intent.
Your service performs actions as needed
(for example, database queries or external API calls)
and sends a message to the end-user.
This process continues until the conversation has ended.
The following samples show how to detect intent.
Each sample accepts a subset of the following inputs:
Project ID:
Use the project ID for the project you created in the
setup steps.
Session ID:
For the purpose of testing an agent, you can use anything.
For example, "123456789" is frequently used by samples.
Text or texts:
This is the single end-user expression or list of end-user expressions.
If multiple expressions are supplied,
the sample code calls detect intent for each expression.
Try using "I know french".
Language code:
The language code for the end-user expression.
Use "en-US" for this example agent.
REST
To detect intent,
call the detectIntent method on the Sessions resource.
Before using any of the request data,
make the following replacements:
PROJECT_ID: your Google Cloud project ID
SESSION_ID: a session ID
HTTP method and URL:
POST https://dialogflow.googleapis.com/v2/projects/PROJECT_ID/agent/sessions/SESSION_ID:detectIntent
Copy the request body and open the
method reference page.
The APIs Explorer panel opens on the right side of the page.
You can interact with this tool to send requests.
Paste the request body in this tool, complete any other required fields, and click Execute.
You should receive a JSON response similar to the following:
{
"responseId": "856510ca-f617-4e25-b0bb-a26c0a59e030-19db3199",
"queryResult": {
"queryText": "I know french",
"parameters": {
"language": "French",
"language-programming": ""
},
"allRequiredParamsPresent": true,
"fulfillmentText": "Wow! I didn't know you knew French. How long have you known French?",
"fulfillmentMessages": [
{
"text": {
"text": [
"Wow! I didn't know you knew French. How long have you known French?"
]
}
}
],
"outputContexts": [
{
"name": "projects/PROJECT_ID/agent/sessions/123456789/contexts/set-language-followup",
"lifespanCount": 2,
"parameters": {
"language": "French",
"language.original": "french",
"language-programming": "",
"language-programming.original": ""
}
}
],
"intent": {
"name": "projects/PROJECT_ID/agent/intents/fe45022f-e58a-484f-96e8-1cbd6628f648",
"displayName": "set-language"
},
"intentDetectionConfidence": 1,
"languageCode": "en"
}
}
Note the following about the response:
The queryResult.intent field contains the matched intent.
The value of the queryResult.fulfillmentMessages
field contains the intent response.
This is the response that your system should forward to the end-user.
The value of the queryResult.parameters field contains
the parameters extracted from the end-user expression.
The queryResult.outputContext field contains the active context.
funcDetectIntentText(projectID,sessionID,text,languageCodestring)(string,error){ctx:=context.Background()sessionClient,err:=dialogflow.NewSessionsClient(ctx)iferr!=nil{return"",err}defersessionClient.Close()ifprojectID==""||sessionID==""{return"",fmt.Errorf("detect.DetectIntentText received empty project (%s) or session (%s)",projectID,sessionID)}sessionPath:=fmt.Sprintf("projects/%s/agent/sessions/%s",projectID,sessionID)textInput:=dialogflowpb.TextInput{Text:text,LanguageCode:languageCode}queryTextInput:=dialogflowpb.QueryInput_Text{Text:&textInput}queryInput:=dialogflowpb.QueryInput{Input:&queryTextInput}request:=dialogflowpb.DetectIntentRequest{Session:sessionPath,QueryInput:&queryInput}response,err:=sessionClient.DetectIntent(ctx,&request)iferr!=nil{return"",err}queryResult:=response.GetQueryResult()fulfillmentText:=queryResult.GetFulfillmentText()returnfulfillmentText,nil}
importcom.google.api.gax.rpc.ApiException;importcom.google.cloud.dialogflow.v2.DetectIntentResponse;importcom.google.cloud.dialogflow.v2.QueryInput;importcom.google.cloud.dialogflow.v2.QueryResult;importcom.google.cloud.dialogflow.v2.SessionName;importcom.google.cloud.dialogflow.v2.SessionsClient;importcom.google.cloud.dialogflow.v2.TextInput;importcom.google.common.collect.Maps;importjava.io.IOException;importjava.util.List;importjava.util.Map;publicclassDetectIntentTexts{// DialogFlow API Detect Intent sample with text inputs.publicstaticMap<String,QueryResult>detectIntentTexts(StringprojectId,List<String>texts,StringsessionId,StringlanguageCode)throwsIOException,ApiException{Map<String,QueryResult>queryResults=Maps.newHashMap();// Instantiates a clienttry(SessionsClientsessionsClient=SessionsClient.create()){// Set the session name using the sessionId (UUID) and projectID (my-project-id)SessionNamesession=SessionName.of(projectId,sessionId);System.out.println("Session Path: "+session.toString());// Detect intents for each text inputfor(Stringtext:texts){// Set the text (hello) and language code (en-US) for the queryTextInput.BuildertextInput=TextInput.newBuilder().setText(text).setLanguageCode(languageCode);// Build the query with the TextInputQueryInputqueryInput=QueryInput.newBuilder().setText(textInput).build();// Performs the detect intent requestDetectIntentResponseresponse=sessionsClient.detectIntent(session,queryInput);// Display the query resultQueryResultqueryResult=response.getQueryResult();System.out.println("====================");System.out.format("Query Text: '%s'\n",queryResult.getQueryText());System.out.format("Detected Intent: %s (confidence: %f)\n",queryResult.getIntent().getDisplayName(),queryResult.getIntentDetectionConfidence());System.out.format("Fulfillment Text: '%s'\n",queryResult.getFulfillmentMessagesCount() > 0?queryResult.getFulfillmentMessages(0).getText():"Triggered Default Fallback Intent");queryResults.put(text,queryResult);}}returnqueryResults;}}
/** * TODO(developer): UPDATE these variables before running the sample. */// projectId: ID of the GCP project where Dialogflow agent is deployed// const projectId = 'PROJECT_ID';// sessionId: String representing a random number or hashed user identifier// const sessionId = '123456';// queries: A set of sequential queries to be send to Dialogflow agent for Intent Detection// const queries = [// 'Reserve a meeting room in Toronto office, there will be 5 of us',// 'Next monday at 3pm for 1 hour, please', // Tell the bot when the meeting is taking place// 'B' // Rooms are defined on the Dialogflow agent, default options are A, B, or C// ]// languageCode: Indicates the language Dialogflow agent should use to detect intents// const languageCode = 'en';// Imports the Dialogflow libraryconstdialogflow=require('@google-cloud/dialogflow');// Instantiates a session clientconstsessionClient=newdialogflow.SessionsClient();asyncfunctiondetectIntent(projectId,sessionId,query,contexts,languageCode){// The path to identify the agent that owns the created intent.constsessionPath=sessionClient.projectAgentSessionPath(projectId,sessionId);// The text query request.constrequest={session:sessionPath,queryInput:{text:{text:query,languageCode:languageCode,},},};if(contexts && contexts.length > 0){request.queryParams={contexts:contexts,};}constresponses=awaitsessionClient.detectIntent(request);returnresponses[0];}asyncfunctionexecuteQueries(projectId,sessionId,queries,languageCode){// Keeping the context across queries let's us simulate an ongoing conversation with the botletcontext;letintentResponse;for(constqueryofqueries){try{console.log(`Sending Query: ${query}`);intentResponse=awaitdetectIntent(projectId,sessionId,query,context,languageCode);console.log('Detected intent');console.log(`Fulfillment Text: ${intentResponse.queryResult.fulfillmentText}`);// Use the context from this response for next queriescontext=intentResponse.queryResult.outputContexts;}catch(error){console.log(error);}}}executeQueries(projectId,sessionId,queries,languageCode);
defdetect_intent_texts(project_id,session_id,texts,language_code):"""Returns the result of detect intent with texts as inputs. Using the same `session_id` between requests allows continuation of the conversation."""fromgoogle.cloudimportdialogflowsession_client=dialogflow.SessionsClient()session=session_client.session_path(project_id,session_id)print("Session path: {}\n".format(session))fortextintexts:text_input=dialogflow.TextInput(text=text,language_code=language_code)query_input=dialogflow.QueryInput(text=text_input)response=session_client.detect_intent(request={"session":session,"query_input":query_input})print("="*20)print("Query text: {}".format(response.query_result.query_text))print("Detected intent: {} (confidence: {})\n".format(response.query_result.intent.display_name,response.query_result.intent_detection_confidence,))print("Fulfillment text: {}\n".format(response.query_result.fulfillment_text))
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2026-07-17 UTC."],[],[]]