Webhook呼叫失败。错误:无法解析webhook JSON响应:预期消息对象,但为空

时间:2019-08-14 10:08:55

标签: php dialogflow

我已经编写了将数据库链接到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;
}

2 个答案:

答案 0 :(得分:0)

看起来您的代码可能存在逻辑问题。您仅在两种情况下发送响应:

  • 没有会话信息
  • 操作名称为“ entry_data”

对于“欢迎意图”,“后备意图”或任何其他意图-将不会发送任何内容,因此会产生错误。

答案 1 :(得分:0)

source显式设置为null而不是将其设置为字符串似乎很奇怪。由于source被列为可选项,因此您可以完全省略它,否则只需将其设置为字符串即可。