【发布时间】:2018-03-21 10:03:06
【问题描述】:
我正在使用 DIAlogflow (api.ai) 创建聊天界面。我创建了一个从 Dialogflow 到包含部署在 Heroku 上的 php 脚本的简单应用程序的 webhook。
因此,我在 Dialogflow 的 webhook 表单中放置了我的 Heroku 应用程序的 url,类似于:https://my_heroku_app_name.herokuapp.com。
我的最终目标是从数据库中获取一些数据(通过 php 脚本),然后将它们提供给 Dialogflow。目前,我只是尝试通过 webhook 将 Heroku 应用程序(php 脚本)与 Dialogflow 连接起来。
Heroku 应用的 php 脚本如下:
<?php
$method = $_SERVER['REQUEST_METHOD'];
if($method == 'GET'){
$requestBody = file_get_contents('php://input');
$json = json_decode($requestBody);
$text = $json->metadata->intentName->text;
switch ($text) {
case 'Name':
$speech = "This question is too personal";
break;
default:
$speech = "Sorry, I didnt get that.";
break;
}
$response = new \stdClass();
$response->speech = $speech;
$response->displayText = $speech;
$response->source = "webhook";
echo json_encode($response);
}
else
{
echo "Method not allowed";
}
?>
请记住以下几点:
-
出于某种原因,
$method是GET,而不是应该来自 Dialogflow 的POST。 - 如果您尝试回显任何变量
$requestBody、$json或$text,则不会打印任何内容。 - 我测试了
if分支被执行,default分支在switch执行。
为什么我的 PHP 脚本无法“看到”来自 DIaloflow 的 webhook 并从中获取数据以便做出适当的响应?
附:我的问题不是Valid JSON output but still getting error 的重复。前者是关于 php 脚本的输入,而后者是关于 php 脚本的输出。这两件事不一定构成相同的问题。
【问题讨论】:
-
"
$method出于某种原因是GET,而不是应该来自 Dialogflow 的POST。"这似乎是关键问题:如果您应该处理 POST 请求,为什么要寻找 GET? GET 请求不太可能包含您期望的有效负载。您如何测试执行的代码分支? -
无论如何,please don't repost questions。可能需要一些时间才能获得关于 SO 的答案。
标签: php heroku webhooks dialogflow-es