我已经编写了将数据库链接到MySQL数据库的实现,但是dialogflow返回状态Webhook调用失败。错误:无法解析webhook JSON响应:预期消息对象,但得到:null。我应该将用户输入添加到MySQL数据库中。
我试图研究v1和v2的json格式,但没有太大的突破。
<?php
function sendMessage($parameters)
{
$jsonencodeparameters = json_encode($parameters);
echo json_encode(parameters);
}
function debug_text ($namafile, $contentdebug)
{
$myfile = fopen ($namafile, w) or die ("unable to open file");
fwrite ($myfile, $contentdebug);
fclose($myfile);
}
function add_data ($first_name,$last_name, $policy_number, $link,$mySQLserver,$mySQL)
{
$sql = "insert into users ('firstname','lastname','policynumber') values ('first_name','last_name','policy_number')";
$namafile = "add.txt";
$contentdebug = "sql=".$sql;
debug_text($namafile,$contentdebug);
$last_id =0;
try
{
$conn = new PDO("mysql:host = $mySQLserver,dbname = $mySQLdefaultdb",$mySQLserver,$mySQLpassword);
$conn = setAttribute (PDO::ATTR_ERRMODE,ERRMODE_EXCEPTION);
$conn->exec($sql);
$last_id = $conn->lastinsertId();
}
catch (PDOException $e)
{
$last_id = 0;
}
return last_id;
}
include ('db_regusers.php');
include ('function_regusers.php');
$update_response = file_get_contents('php://input');
$update = json_decode($update_response, true);
$varresultaction = $update['queryResult']["action"];
$fulfillmentMessages = $update["queryResult"]["queryText"];
$session = $update["session"];
$firstname = $update['queryResult']['parameters']['firstname'];
$lastname=$update["queryResult"]["parameters"]["lastname"];
$policynumber=$update["queryResult"]["parameters"]["policynumber"];
$ignore1 = '';
$sessionunique = '';
if ($session != '')
{
$list = list($ignore1,$sessionunique) = explode('sessions/',$session);
}
else
{
$nothing = 'You do not have a session';
sendMessage(array(
'source'=>null,
'fulfillmentText'=>$nothing
));
exit;
}
}
if($varresultaction == 'entry_data')
{
$id = add_data($firstname,$lastname,$policynumber,$mySQLserver,mySQLdefaultdb,mySQLuser,mySQLserver,mySQLpassword);
$response = 'data has been saved, your access_code is' +'.$id';
sendMessage (array(
'source'=> null,
'fulfillmentText'=>$response));
exit;
}
答案 0 :(得分:0)
看起来您的代码可能存在逻辑问题。您仅在两种情况下发送响应:
对于“欢迎意图”,“后备意图”或任何其他意图-将不会发送任何内容,因此会产生错误。
答案 1 :(得分:0)
将source
显式设置为null
而不是将其设置为字符串似乎很奇怪。由于source
被列为可选项,因此您可以完全省略它,否则只需将其设置为字符串即可。