장기 실행 작업

Dialogflow API의 일부 메서드는 장기 실행 작업을 반환합니다. 이러한 메서드는 비동기적이며 메서드가 응답을 반환하면 작업이 완료되지 않을 수 있습니다. 상태를 확인하거나 완료될 때까지 기다리거나 작업을 취소할 수 있습니다.

작업이 완료될 때까지 대기

다음은 작업이 완료될 때까지 기다리는 방법을 보여줍니다.

REST

작업 상태를 폴링하려면 Operations 리소스에 대해 get 메서드를 호출합니다. 작업이 완료되면 done 필드가 true로 설정됩니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • REGION_ID: 리전 ID
  • PROJECT_ID: Google Cloud 프로젝트 ID
  • OPERATION_ID: 작업 ID

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

CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


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

CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


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

CTS에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

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()