PHP调用Dialogflow接口抛No DesignTimeAgent found for project错误求助
报错根因与解决方案
com.google.apps.framework.request.NotFoundException: No DesignTimeAgent found for project 报错的核心原因是请求路径与Dialogflow代理的部署区域、所属项目不匹配,针对你的代码有以下几个修正点:
- 修正会话路径生成规则:非全局部署的Dialogflow代理不能直接使用默认的
sessionName方法生成会话路径,需要拼接区域标识,PHP客户端可以直接调用locationSessionName方法生成带区域的路径 - 校验区域一致性:确认你在Dialogflow控制台创建代理时选择的部署区域和代码中
api_endpoint指定的europe-west1完全匹配;如果创建代理时选择的是全球(global)区域,直接删除代码里api_endpoint的配置即可 - 校验项目与权限:确认你使用的服务账号密钥所属项目和Dialogflow代理所在的
newestproject-329521为同一个项目,且服务账号已被授予Dialogflow API 客户端权限
修正后代码示例
<?php namespace Google\Cloud\Dialogflow; require 'vendor/autoload.php'; use Google\Cloud\Dialogflow\V2\SessionsClient; use Google\Cloud\Dialogflow\V2\TextInput; use Google\Cloud\Dialogflow\V2\QueryInput; $keyfile = "/var/www/html/newestproject-329521-ffa8cd057f77.json"; $projectId = 'newestproject-329521'; // 代理部署区域,和控制台配置保持一致 $location = 'europe-west1'; detect_intent_texts($projectId, $location, "hi", "12345", $keyfile); function detect_intent_texts($projectId, $location, $text, $sessionId, $keyfile, $languageCode = 'en-US') { putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $keyfile); $clientConfig = [ 'credentials' => $keyfile, 'api_endpoint' => $location . '-dialogflow.googleapis.com:443' ]; $sessionsClient = new SessionsClient($clientConfig); // 生成带区域的会话路径 $session = $sessionsClient->locationSessionName($projectId, $location, $sessionId ?: uniqid()); printf('Session path: %s' . PHP_EOL, $session); $textInput = new TextInput(); $textInput->setText($text); $textInput->setLanguageCode($languageCode); $queryInput = new QueryInput(); $queryInput->setText($textInput); $response = $sessionsClient->detectIntent($session, $queryInput); $sessionsClient->close(); }
内容的提问来源于stack exchange,提问作者Morten
相关产品推荐
相关产品推荐

