Actualizar datos con un FieldMask

Cuando actualizas los datos del agente con la API, puedes elegir reemplazar todo el tipo de datos o reemplazar solo campos específicos del tipo de datos. Por lo general, es mejor reemplazar campos específicos, por lo que evitas reemplazar de forma accidental todos tus datos. Para reemplazar campos específicos, proporciona una FieldMask a tu solicitud de actualización.

En los siguientes ejemplos, se muestra cómo proporcionar un FieldMask para actualizar el nombre visible de un tipo de intents.

REST

Proporciona el parámetros de búsqueda de URL updateMask para el método patch. Por ejemplo:

?updateMask=displayName

Java

import com.google.cloud.dialogflow.v2.Intent;
import com.google.cloud.dialogflow.v2.Intent.Builder;
import com.google.cloud.dialogflow.v2.IntentsClient;
import com.google.cloud.dialogflow.v2.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 intentId = "my-intent-id";
    String location = "my-location";
    String displayName = "my-display-name";
    updateIntent(projectId, intentId, location, displayName);
  }

  // DialogFlow API Update Intent sample.
  public static void updateIntent(
      String projectId, String intentId, String location, String displayName) throws IOException {
    try (IntentsClient client = IntentsClient.create()) {
      String intentPath =
          "projects/" + projectId + "/locations/" + location + "/agent/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');

const intentClient = new IntentsClient();

const agentPath = intentClient.projectAgentPath(projectId);
const intentPath = agentPath + '/intents/' + intentId;

const intent = await intentClient.getIntent({name: intentPath});
intent[0].displayName = displayName;
const updateMask = {
  paths: ['display_name'],
};

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

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

Python


from google.cloud.dialogflow_v2 import IntentsClient
from google.protobuf import field_mask_pb2

def update_intent(project_id, intent_id, display_name):
    intents_client = IntentsClient()

    intent_name = intents_client.intent_path(project_id, intent_id)
    intent = intents_client.get_intent(request={"name": intent_name})

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