projectName('[PROJECT]'); * $response = $agentsClient->getAgent($formattedParent); * } finally { * $agentsClient->close(); * } * ``` * * Many parameters require resource names to be formatted in a particular way. To assist * with these names, this class includes a format method for each type of name, and additionally * a parseName method to extract the individual identifiers contained within formatted names * that are returned by the API. * * @experimental */ class AgentsGapicClient { use GapicClientTrait; /** * The name of the service. */ const SERVICE_NAME = 'google.cloud.dialogflow.v2.Agents'; /** * The default address of the service. */ const SERVICE_ADDRESS = 'dialogflow.googleapis.com'; /** * The default port of the service. */ const DEFAULT_SERVICE_PORT = 443; /** * The name of the code generator, to be included in the agent header. */ const CODEGEN_NAME = 'gapic'; /** * The default scopes required by the service. */ public static $serviceScopes = [ 'https://www.googleapis.com/auth/cloud-platform', ]; private static $projectNameTemplate; private static $pathTemplateMap; private $operationsClient; private static function getClientDefaults() { return [ 'serviceName' => self::SERVICE_NAME, 'serviceAddress' => self::SERVICE_ADDRESS.':'.self::DEFAULT_SERVICE_PORT, 'clientConfig' => __DIR__.'/../resources/agents_client_config.json', 'descriptorsConfigPath' => __DIR__.'/../resources/agents_descriptor_config.php', 'credentialsConfig' => [ 'scopes' => self::$serviceScopes, ], 'transportConfig' => [ 'rest' => [ 'restClientConfigPath' => __DIR__.'/../resources/agents_rest_client_config.php', ], ], ]; } private static function getProjectNameTemplate() { if (self::$projectNameTemplate == null) { self::$projectNameTemplate = new PathTemplate('projects/{project}'); } return self::$projectNameTemplate; } private static function getPathTemplateMap() { if (self::$pathTemplateMap == null) { self::$pathTemplateMap = [ 'project' => self::getProjectNameTemplate(), ]; } return self::$pathTemplateMap; } /** * Formats a string containing the fully-qualified path to represent * a project resource. * * @param string $project * * @return string The formatted project resource. * @experimental */ public static function projectName($project) { return self::getProjectNameTemplate()->render([ 'project' => $project, ]); } /** * Parses a formatted name string and returns an associative array of the components in the name. * The following name formats are supported: * Template: Pattern * - project: projects/{project}. * * The optional $template argument can be supplied to specify a particular pattern, and must * match one of the templates listed above. If no $template argument is provided, or if the * $template argument does not match one of the templates listed, then parseName will check * each of the supported templates, and return the first match. * * @param string $formattedName The formatted name string * @param string $template Optional name of template to match * * @return array An associative array from name component IDs to component values. * * @throws ValidationException If $formattedName could not be matched. * @experimental */ public static function parseName($formattedName, $template = null) { $templateMap = self::getPathTemplateMap(); if ($template) { if (!isset($templateMap[$template])) { throw new ValidationException("Template name $template does not exist"); } return $templateMap[$template]->match($formattedName); } foreach ($templateMap as $templateName => $pathTemplate) { try { return $pathTemplate->match($formattedName); } catch (ValidationException $ex) { // Swallow the exception to continue trying other path templates } } throw new ValidationException("Input did not match any known format. Input: $formattedName"); } /** * Return an OperationsClient object with the same endpoint as $this. * * @return OperationsClient * @experimental */ public function getOperationsClient() { return $this->operationsClient; } /** * Resume an existing long running operation that was previously started * by a long running API method. If $methodName is not provided, or does * not match a long running API method, then the operation can still be * resumed, but the OperationResponse object will not deserialize the * final response. * * @param string $operationName The name of the long running operation * @param string $methodName The name of the method used to start the operation * * @return OperationResponse * @experimental */ public function resumeOperation($operationName, $methodName = null) { $options = isset($this->descriptors[$methodName]['longRunning']) ? $this->descriptors[$methodName]['longRunning'] : []; $operation = new OperationResponse($operationName, $this->getOperationsClient(), $options); $operation->reload(); return $operation; } /** * Constructor. * * @param array $options { * Optional. Options for configuring the service API wrapper. * * @type string $serviceAddress * The address of the API remote host. May optionally include the port, formatted * as ":". Default 'dialogflow.googleapis.com:443'. * @type string|array|FetchAuthTokenInterface|CredentialsWrapper $credentials * The credentials to be used by the client to authorize API calls. This option * accepts either a path to a credentials file, or a decoded credentials file as a * PHP array. * *Advanced usage*: In addition, this option can also accept a pre-constructed * {@see \Google\Auth\FetchAuthTokenInterface} object or * {@see \Google\ApiCore\CredentialsWrapper} object. Note that when one of these * objects are provided, any settings in $credentialsConfig will be ignored. * @type array $credentialsConfig * Options used to configure credentials, including auth token caching, for the client. * For a full list of supporting configuration options, see * {@see \Google\ApiCore\CredentialsWrapper::build()}. * @type bool $disableRetries * Determines whether or not retries defined by the client configuration should be * disabled. Defaults to `false`. * @type string|array $clientConfig * Client method configuration, including retry settings. This option can be either a * path to a JSON file, or a PHP array containing the decoded JSON data. * By default this settings points to the default client config file, which is provided * in the resources folder. * @type string|TransportInterface $transport * The transport used for executing network requests. May be either the string `rest` * or `grpc`. Defaults to `grpc` if gRPC support is detected on the system. * *Advanced usage*: Additionally, it is possible to pass in an already instantiated * {@see \Google\ApiCore\Transport\TransportInterface} object. Note that when this * object is provided, any settings in $transportConfig, and any $serviceAddress * setting, will be ignored. * @type array $transportConfig * Configuration options that will be used to construct the transport. Options for * each supported transport type should be passed in a key for that transport. For * example: * $transportConfig = [ * 'grpc' => [...], * 'rest' => [...] * ]; * See the {@see \Google\ApiCore\Transport\GrpcTransport::build()} and * {@see \Google\ApiCore\Transport\RestTransport::build()} methods for the * supported options. * } * * @throws ValidationException * @experimental */ public function __construct(array $options = []) { $clientOptions = $this->buildClientOptions($options); $this->setClientOptions($clientOptions); $this->operationsClient = $this->createOperationsClient($clientOptions); } /** * Retrieves the specified agent. * * Sample code: * ``` * $agentsClient = new AgentsClient(); * try { * $formattedParent = $agentsClient->projectName('[PROJECT]'); * $response = $agentsClient->getAgent($formattedParent); * } finally { * $agentsClient->close(); * } * ``` * * @param string $parent Required. The project that the agent to fetch is associated with. * Format: `projects/`. * @param array $optionalArgs { * Optional. * * @type RetrySettings|array $retrySettings * Retry settings to use for this call. Can be a * {@see Google\ApiCore\RetrySettings} object, or an associative array * of retry settings parameters. See the documentation on * {@see Google\ApiCore\RetrySettings} for example usage. * } * * @return \Google\Cloud\Dialogflow\V2\Agent * * @throws ApiException if the remote call fails * @experimental */ public function getAgent($parent, array $optionalArgs = []) { $request = new GetAgentRequest(); $request->setParent($parent); return $this->startCall( 'GetAgent', Agent::class, $optionalArgs, $request )->wait(); } /** * Returns the list of agents. * * Since there is at most one conversational agent per project, this method is * useful primarily for listing all agents across projects the caller has * access to. One can achieve that with a wildcard project collection id "-". * Refer to [List * Sub-Collections](https://cloud.google.com/apis/design/design_patterns#list_sub-collections). * * Sample code: * ``` * $agentsClient = new AgentsClient(); * try { * $formattedParent = $agentsClient->projectName('[PROJECT]'); * // Iterate through all elements * $pagedResponse = $agentsClient->searchAgents($formattedParent); * foreach ($pagedResponse->iterateAllElements() as $element) { * // doSomethingWith($element); * } * * // OR iterate over pages of elements * $pagedResponse = $agentsClient->searchAgents($formattedParent); * foreach ($pagedResponse->iteratePages() as $page) { * foreach ($page as $element) { * // doSomethingWith($element); * } * } * } finally { * $agentsClient->close(); * } * ``` * * @param string $parent Required. The project to list agents from. * Format: `projects/`. * @param array $optionalArgs { * Optional. * * @type int $pageSize * The maximum number of resources contained in the underlying API * response. The API may return fewer values in a page, even if * there are additional values to be retrieved. * @type string $pageToken * A page token is used to specify a page of values to be returned. * If no page token is specified (the default), the first page * of values will be returned. Any page token used here must have * been generated by a previous call to the API. * @type RetrySettings|array $retrySettings * Retry settings to use for this call. Can be a * {@see Google\ApiCore\RetrySettings} object, or an associative array * of retry settings parameters. See the documentation on * {@see Google\ApiCore\RetrySettings} for example usage. * } * * @return \Google\ApiCore\PagedListResponse * * @throws ApiException if the remote call fails * @experimental */ public function searchAgents($parent, array $optionalArgs = []) { $request = new SearchAgentsRequest(); $request->setParent($parent); if (isset($optionalArgs['pageSize'])) { $request->setPageSize($optionalArgs['pageSize']); } if (isset($optionalArgs['pageToken'])) { $request->setPageToken($optionalArgs['pageToken']); } return $this->getPagedListResponse( 'SearchAgents', $optionalArgs, SearchAgentsResponse::class, $request ); } /** * Trains the specified agent. * * Operation * * Sample code: * ``` * $agentsClient = new AgentsClient(); * try { * $formattedParent = $agentsClient->projectName('[PROJECT]'); * $operationResponse = $agentsClient->trainAgent($formattedParent); * $operationResponse->pollUntilComplete(); * if ($operationResponse->operationSucceeded()) { * // operation succeeded and returns no value * } else { * $error = $operationResponse->getError(); * // handleError($error) * } * * // OR start the operation, keep the operation name, and resume later * $operationResponse = $agentsClient->trainAgent($formattedParent); * $operationName = $operationResponse->getName(); * // ... do other work * $newOperationResponse = $agentsClient->resumeOperation($operationName, 'trainAgent'); * while (!$newOperationResponse->isDone()) { * // ... do other work * $newOperationResponse->reload(); * } * if ($newOperationResponse->operationSucceeded()) { * // operation succeeded and returns no value * } else { * $error = $newOperationResponse->getError(); * // handleError($error) * } * } finally { * $agentsClient->close(); * } * ``` * * @param string $parent Required. The project that the agent to train is associated with. * Format: `projects/`. * @param array $optionalArgs { * Optional. * * @type RetrySettings|array $retrySettings * Retry settings to use for this call. Can be a * {@see Google\ApiCore\RetrySettings} object, or an associative array * of retry settings parameters. See the documentation on * {@see Google\ApiCore\RetrySettings} for example usage. * } * * @return \Google\ApiCore\OperationResponse * * @throws ApiException if the remote call fails * @experimental */ public function trainAgent($parent, array $optionalArgs = []) { $request = new TrainAgentRequest(); $request->setParent($parent); return $this->startOperationsCall( 'TrainAgent', $optionalArgs, $request, $this->getOperationsClient() )->wait(); } /** * Exports the specified agent to a ZIP file. * * Operation * * Sample code: * ``` * $agentsClient = new AgentsClient(); * try { * $formattedParent = $agentsClient->projectName('[PROJECT]'); * $operationResponse = $agentsClient->exportAgent($formattedParent); * $operationResponse->pollUntilComplete(); * if ($operationResponse->operationSucceeded()) { * $result = $operationResponse->getResult(); * // doSomethingWith($result) * } else { * $error = $operationResponse->getError(); * // handleError($error) * } * * // OR start the operation, keep the operation name, and resume later * $operationResponse = $agentsClient->exportAgent($formattedParent); * $operationName = $operationResponse->getName(); * // ... do other work * $newOperationResponse = $agentsClient->resumeOperation($operationName, 'exportAgent'); * while (!$newOperationResponse->isDone()) { * // ... do other work * $newOperationResponse->reload(); * } * if ($newOperationResponse->operationSucceeded()) { * $result = $newOperationResponse->getResult(); * // doSomethingWith($result) * } else { * $error = $newOperationResponse->getError(); * // handleError($error) * } * } finally { * $agentsClient->close(); * } * ``` * * @param string $parent Required. The project that the agent to export is associated with. * Format: `projects/`. * @param array $optionalArgs { * Optional. * * @type string $agentUri * Optional. The Google Cloud Storage URI to export the agent to. * Note: The URI must start with * "gs://". If left unspecified, the serialized agent is returned inline. * @type RetrySettings|array $retrySettings * Retry settings to use for this call. Can be a * {@see Google\ApiCore\RetrySettings} object, or an associative array * of retry settings parameters. See the documentation on * {@see Google\ApiCore\RetrySettings} for example usage. * } * * @return \Google\ApiCore\OperationResponse * * @throws ApiException if the remote call fails * @experimental */ public function exportAgent($parent, array $optionalArgs = []) { $request = new ExportAgentRequest(); $request->setParent($parent); if (isset($optionalArgs['agentUri'])) { $request->setAgentUri($optionalArgs['agentUri']); } return $this->startOperationsCall( 'ExportAgent', $optionalArgs, $request, $this->getOperationsClient() )->wait(); } /** * Imports the specified agent from a ZIP file. * * Uploads new intents and entity types without deleting the existing ones. * Intents and entity types with the same name are replaced with the new * versions from ImportAgentRequest. * * Operation * * Sample code: * ``` * $agentsClient = new AgentsClient(); * try { * $formattedParent = $agentsClient->projectName('[PROJECT]'); * $operationResponse = $agentsClient->importAgent($formattedParent); * $operationResponse->pollUntilComplete(); * if ($operationResponse->operationSucceeded()) { * // operation succeeded and returns no value * } else { * $error = $operationResponse->getError(); * // handleError($error) * } * * // OR start the operation, keep the operation name, and resume later * $operationResponse = $agentsClient->importAgent($formattedParent); * $operationName = $operationResponse->getName(); * // ... do other work * $newOperationResponse = $agentsClient->resumeOperation($operationName, 'importAgent'); * while (!$newOperationResponse->isDone()) { * // ... do other work * $newOperationResponse->reload(); * } * if ($newOperationResponse->operationSucceeded()) { * // operation succeeded and returns no value * } else { * $error = $newOperationResponse->getError(); * // handleError($error) * } * } finally { * $agentsClient->close(); * } * ``` * * @param string $parent Required. The project that the agent to import is associated with. * Format: `projects/`. * @param array $optionalArgs { * Optional. * * @type string $agentUri * The URI to a Google Cloud Storage file containing the agent to import. * Note: The URI must start with "gs://". * @type string $agentContent * The agent to import. * * Example for how to import an agent via the command line: * * curl \ * 'https://dialogflow.googleapis.com/v2/projects//agent:import\ * -X POST \ * -H 'Authorization: Bearer '$(gcloud auth print-access-token) \ * -H 'Accept: application/json' \ * -H 'Content-Type: application/json' \ * --compressed \ * --data-binary "{ * 'agentContent': '$(cat | base64 -w 0)' * }" * @type RetrySettings|array $retrySettings * Retry settings to use for this call. Can be a * {@see Google\ApiCore\RetrySettings} object, or an associative array * of retry settings parameters. See the documentation on * {@see Google\ApiCore\RetrySettings} for example usage. * } * * @return \Google\ApiCore\OperationResponse * * @throws ApiException if the remote call fails * @experimental */ public function importAgent($parent, array $optionalArgs = []) { $request = new ImportAgentRequest(); $request->setParent($parent); if (isset($optionalArgs['agentUri'])) { $request->setAgentUri($optionalArgs['agentUri']); } if (isset($optionalArgs['agentContent'])) { $request->setAgentContent($optionalArgs['agentContent']); } return $this->startOperationsCall( 'ImportAgent', $optionalArgs, $request, $this->getOperationsClient() )->wait(); } /** * Restores the specified agent from a ZIP file. * * Replaces the current agent version with a new one. All the intents and * entity types in the older version are deleted. * * Operation * * Sample code: * ``` * $agentsClient = new AgentsClient(); * try { * $formattedParent = $agentsClient->projectName('[PROJECT]'); * $operationResponse = $agentsClient->restoreAgent($formattedParent); * $operationResponse->pollUntilComplete(); * if ($operationResponse->operationSucceeded()) { * // operation succeeded and returns no value * } else { * $error = $operationResponse->getError(); * // handleError($error) * } * * // OR start the operation, keep the operation name, and resume later * $operationResponse = $agentsClient->restoreAgent($formattedParent); * $operationName = $operationResponse->getName(); * // ... do other work * $newOperationResponse = $agentsClient->resumeOperation($operationName, 'restoreAgent'); * while (!$newOperationResponse->isDone()) { * // ... do other work * $newOperationResponse->reload(); * } * if ($newOperationResponse->operationSucceeded()) { * // operation succeeded and returns no value * } else { * $error = $newOperationResponse->getError(); * // handleError($error) * } * } finally { * $agentsClient->close(); * } * ``` * * @param string $parent Required. The project that the agent to restore is associated with. * Format: `projects/`. * @param array $optionalArgs { * Optional. * * @type string $agentUri * The URI to a Google Cloud Storage file containing the agent to restore. * Note: The URI must start with "gs://". * @type string $agentContent * The agent to restore. * * Example for how to restore an agent via the command line: * * curl \ * 'https://dialogflow.googleapis.com/v2/projects//agent:restore\ * -X POST \ * -H 'Authorization: Bearer '$(gcloud auth print-access-token) \ * -H 'Accept: application/json' \ * -H 'Content-Type: application/json' \ * --compressed \ * --data-binary "{ * 'agentContent': '$(cat | base64 -w 0)' * }" \ * @type RetrySettings|array $retrySettings * Retry settings to use for this call. Can be a * {@see Google\ApiCore\RetrySettings} object, or an associative array * of retry settings parameters. See the documentation on * {@see Google\ApiCore\RetrySettings} for example usage. * } * * @return \Google\ApiCore\OperationResponse * * @throws ApiException if the remote call fails * @experimental */ public function restoreAgent($parent, array $optionalArgs = []) { $request = new RestoreAgentRequest(); $request->setParent($parent); if (isset($optionalArgs['agentUri'])) { $request->setAgentUri($optionalArgs['agentUri']); } if (isset($optionalArgs['agentContent'])) { $request->setAgentContent($optionalArgs['agentContent']); } return $this->startOperationsCall( 'RestoreAgent', $optionalArgs, $request, $this->getOperationsClient() )->wait(); } }