我一直在努力找出为什么会抛出上述错误。我已经在谷歌上阅读并尝试了所有的解决方案,但问题仍然存在。下面的代码片段抛出了一个错误:
$response = $sessionsClient->detectIntent($session, $queryInput);
谢谢你的调查。
<?php
//namespace GoogleCloudSamplesAuth;
namespace GoogleCloudDialogflow;
require 'vendor/autoload.php';
use GoogleCloudDialogflowV2EntityTypesClient;
use GoogleCloudDialogflowV2SessionsClient;
use GoogleCloudDialogflowV2TextInput;
use GoogleCloudDialogflowV2QueryInput;
$keyfile = "/var/www/html/newestproject-329521-ffa8cd057f77.json";
$projectId = 'newestproject-329521';
detect_intent_texts($projectId, "hi", "12345", $keyfile);
function detect_intent_texts($projectId, $text, $sessionId, $keyfile, $languageCode = 'en-US')
{
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $keyfile); //your path to file of cred
// new session
$test = array('credentials' => $keyfile, 'api_endpoint' => 'europe-west1-dialogflow.googleapis.com:443');
$sessionsClient = new SessionsClient($test);
$session = $sessionsClient->sessionName($projectId, $sessionId ?: uniqid());
printf('Session path: %s' . PHP_EOL, $session);
echo "h3";
// create text input
$textInput = new TextInput();
$textInput->setText($text);
$textInput->setLanguageCode($languageCode);
echo "h4";
// create query input
$queryInput = new QueryInput();
$queryInput->setText($textInput);
echo "h5";
// get response and relevant info
$response = $sessionsClient->detectIntent($session, $queryInput);
$sessionsClient->close();
}
出现错误消息可能有多种原因。它们如下:
- 您的代理可能没有链接到您正在访问的项目ID。参考GitHub和Stack Overflow中的类似问题。
- 如果您尝试更改代理的位置,我建议您先导出代理,然后通过创建新代理重新开始,这次请确保您选择了正确的区域和项目ID。因为,除非重新创建代理,否则现有代理的位置不会改变。引用本文档,
"一旦创建了代理,它的位置不能改变。为了更改代理的位置,您必须导出并恢复到具有不同位置的新代理。
-
您可能错过了使用API请求指定区域。对于REST调用,您必须执行以下两个操作:
- 为location URL路径参数提供区域ID。
- 使用[region-id]-dialogflow.googleapis.com作为主机名 例如:
us-central1-dialogflow.googleapis.com/projects/{PROJECT_ID}/locations/us-central1/agents/{AGENT_ID}