פעולות ממושכות

חלק מה-methods של Dialogflow CX API מחזירות פעולה ממושכת. השיטות האלה הן אסינכרוניות, והפעולה עשויה שלא להסתיים כשהשיטה מחזירה תשובה. אתם יכולים לבדוק את הסטטוס, לחכות שהפעולות יושלמו או לבטל אותן.

המתנה לסיום פעולה

בדוגמה הבאה אפשר לראות איך ממתינים לסיום פעולה.

REST

כדי לדגום את סטטוס הפעולה, קוראים לשיטה get של המשאב Operations. כשהפעולה מסתיימת, השדה done מוגדר כ-true.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • REGION_ID: מזהה האזור
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud
  • OPERATION_ID: מזהה הפעולה

ה-method של ה-HTTP וכתובת ה-URL:

GET https://REGION_ID-dialogflow.googleapis.com/v3/projects/PROJECT_ID/locations/REGION_ID/operations/OPERATION_ID

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_ID/locations/REGION_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.dialogflow.v3.SomeOperationType",
    "state": "DONE"
  },
  "done": true,
  ...
}

Java

כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.


import com.google.api.gax.longrunning.OperationFuture;
import com.google.cloud.dialogflow.cx.v3.AgentName;
import com.google.cloud.dialogflow.cx.v3.AgentsClient;
import com.google.cloud.dialogflow.cx.v3.AgentsSettings;
import com.google.cloud.dialogflow.cx.v3.ExportAgentRequest;
import com.google.cloud.dialogflow.cx.v3.ExportAgentResponse;
import com.google.protobuf.Struct;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

public class ExportAgent {

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

    exportAgent(projectId, agentId, location);
  }

  public static void exportAgent(String projectId, String agentId, String location)
      throws IOException, InterruptedException, ExecutionException {

    // Sets the api endpoint to specified location
    String apiEndpoint = String.format("%s-dialogflow.googleapis.com:443", location);

    AgentsSettings agentsSettings = AgentsSettings.newBuilder().setEndpoint(apiEndpoint).build();
    // Note: close() needs to be called on the AgentsClient object to clean up resources
    // such as threads. In the example below, try-with-resources is used,
    // which automatically calls close().
    try (AgentsClient agentsClient = AgentsClient.create(agentsSettings)) {
      ExportAgentRequest request =
          ExportAgentRequest.newBuilder()
              .setName(AgentName.of(projectId, location, agentId).toString())
              .build();

      // Returns a future of the operation
      OperationFuture<ExportAgentResponse, Struct> future =
          agentsClient.exportAgentOperationCallable().futureCall(request);

      // get the export agent response after the operation is completed
      ExportAgentResponse response = future.get();
      System.out.println(response);
    }
  }
}

Node.js

כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.


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

const api_endpoint = `${location}-dialogflow.googleapis.com`;

const client = new AgentsClient({apiEndpoint: api_endpoint});

const exportAgentRequest =
  new protos.google.cloud.dialogflow.cx.v3.ExportAgentRequest();

exportAgentRequest.name = `projects/${projectId}/locations/${location}/agents/${agentId}`;

// exportAgent call returns a promise to a long running operation
const [operation] = await client.exportAgent(exportAgentRequest);

// Waiting for the long running opporation to finish
const [response] = await operation.promise();

// Prints the result of the operation when the operation is done
console.log(response);

Python

כדי לבצע אימות ב-Dialogflow CX, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

from google.cloud.dialogflowcx_v3.services.agents.client import AgentsClient
from google.cloud.dialogflowcx_v3.types.agent import ExportAgentRequest


def export_long_running_agent(project_id, agent_id, location):
    api_endpoint = f"{location}-dialogflow.googleapis.com:443"
    client_options = {"api_endpoint": api_endpoint}

    agents_client = AgentsClient(client_options=client_options)

    export_request = ExportAgentRequest()

    export_request.name = (
        f"projects/{project_id}/locations/{location}/agents/{agent_id}"
    )

    # export_agent returns a long running operation
    operation = agents_client.export_agent(request=export_request)

    # Returns the result of the operation when the operation is done
    return operation.result()