Update data with a FieldMask

When updating agent data with the API, you can choose to overwrite the entire data type or to overwrite only specific fields of the data type. It is usually best to overwrite specific fields, so you avoid accidentally overwriting all of your data. To overwrite specific fields, supply a FieldMask to your update request.

The following examples show how to supply a FieldMask to update the display name for an Intent type.

Select a protocol and version for the Intent reference:

Protocol V3 V3beta1
REST Intent resource Intent resource
RPC Intent interface Intent interface
C# Not available Not available
Go Not available Not available
Java IntentsClient IntentsClient
Node.js IntentsClient IntentsClient
PHP Not available Not available
Python IntentsClient IntentsClient
Ruby Not available Not available

REST & CMD LINE

Before using any of the request data, make the following replacements:

  • PROJECT_ID: your GCP project ID
  • AGENT_ID: your agent ID
  • REGION_ID: your region ID
  • INTENT_ID: your intent ID
  • DISPLAY_NAME: your desired display name

HTTP method and URL:

PATCH https://REGION_ID-dialogflow.googleapis.com/v3/projects/PROJECT_ID/locations/REGION_ID/agents/AGENT_ID/intents/INTENT_ID?updateMask=displayName

Request JSON body:

{
  "displayName": "DISPLAY_NAME"
}

To send your request, expand one of these options:

You should receive a JSON response similar to the following:

{
  "name": "projects/your-project-id/locations/us-central1/agents/c2a370ca-158a-4296-a211-d5ab6bb84324/intents/91aa7827-d69b-4077-8b21-7a66b8b59f16",
  "displayName": "your-display-name",
  ...
}

Java


import com.google.cloud.dialogflow.cx.v3.Intent;
import com.google.cloud.dialogflow.cx.v3.Intent.Builder;
import com.google.cloud.dialogflow.cx.v3.IntentsClient;
import com.google.cloud.dialogflow.cx.v3.UpdateIntentRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;

public class UpdateIntent {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "my-project-id";
    String agentId = "my-agent-id";
    String intentId = "my-intent-id";
    String location = "my-location";
    String displayName = "my-display-name";
    updateIntent(projectId, agentId, intentId, location, displayName);
  }

  // DialogFlow API Update Intent sample.
  public static void updateIntent(
      String projectId, String agentId, String intentId, String location, String displayName)
      throws IOException {
    try (IntentsClient client = IntentsClient.create()) {
      String intentPath =
          "projects/"
              + projectId
              + "/locations/"
              + location
              + "/agents/"
              + agentId
              + "/intents/"
              + intentId;

      Builder intentBuilder = client.getIntent(intentPath).toBuilder();

      intentBuilder.setDisplayName(displayName);
      FieldMask fieldMask = FieldMask.newBuilder().addPaths("display_name").build();

      Intent intent = intentBuilder.build();
      UpdateIntentRequest request =
          UpdateIntentRequest.newBuilder()
              .setIntent(intent)
              .setLanguageCode("en")
              .setUpdateMask(fieldMask)
              .build();

      // Make API request to update intent using fieldmask
      Intent response = client.updateIntent(request);
      System.out.println(response);
    }
  }
}

Node.js


const {IntentsClient} = require('@google-cloud/dialogflow-cx');

const intentClient = new IntentsClient();

//TODO(developer): Uncomment these variables before running the sample.
//  const projectId = 'your-project-id';
//  const agentId = 'your-agent-id';
//  const intentId = 'your-intent-id';
//  const location = 'your-location';
//  const displayName = 'your-display-name';

async function updateIntent() {
  const agentPath = intentClient.projectPath(projectId);
  const intentPath = `${agentPath}/locations/${location}/agents/${agentId}/intents/${intentId}`;

  //Gets the intent from intentPath
  const intent = await intentClient.getIntent({name: intentPath});
  intent[0].displayName = displayName;

  //Specifies what is being updated
  const updateMask = {
    paths: ['display_name'],
  };

  const updateIntentRequest = {
    intent: intent[0],
    updateMask,
    languageCode: 'en',
  };

  //Send the request for update the intent.
  const result = await intentClient.updateIntent(updateIntentRequest);
  console.log(result);
}

updateIntent();

Python

from google.cloud.dialogflowcx_v3.services.intents import IntentsClient
from google.protobuf import field_mask_pb2


def update_intent(project_id, agent_id, intent_id, location, displayName):

    intents_client = IntentsClient()

    intent_name = intents_client.intent_path(project_id, location, agent_id, intent_id)

    intent = intents_client.get_intent(request={"name": intent_name})

    intent.display_name = displayName
    update_mask = field_mask_pb2.FieldMask(paths=["display_name"])
    response = intents_client.update_intent(intent=intent, update_mask=update_mask)
    return response