将php数组作为dialogflow响应发送
嘿,我正在使用dialogflow构建一个聊天机器人,我正在使用一个定制的Webhook(我正在用php编程)生成响应。我从数据库中提取数据并将其存储在数组中,但当我将数组作为响应发送到dialogflow时,它只显示第一行。 这是我的密码:将php数组作为dialogflow响应发送,php,dialogflow-es,Php,Dialogflow Es,嘿,我正在使用dialogflow构建一个聊天机器人,我正在使用一个定制的Webhook(我正在用php编程)生成响应。我从数据库中提取数据并将其存储在数组中,但当我将数组作为响应发送到dialogflow时,它只显示第一行。 这是我的密码: <?php header('Content-Type: text/html; charset=utf-8'); date_default_timezone_set("Asia/Bangkok"); $date = date(&q
<?php
header('Content-Type: text/html; charset=utf-8');
date_default_timezone_set("Asia/Bangkok");
$date = date("Y-m-d");
$time = date("H:i:s");
$json = file_get_contents('php://input');
$request = json_decode($json, true);
$input = fopen("log_json.txt", "w") or die("Unable to open file!");
fwrite($input,$json);
fclose($input);
function processMessage($update) {
if($update["queryResult"]["action"] == "ques"){
$bdd= new PDO('mysql:host=localhost;dbname=****', '****', '***', array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")) ;
$data = array();
$nom= $update["queryResult"]["parameters"]["nom_aliment"];
$info=$update["queryResult"]["parameters"]["Information"];
$quantite=$update["queryResult"]["parameters"]["Quantite"];
$req=$bdd->prepare("SELECT * FROM TableCiqual WHERE alim_nom LIKE ? ");
$req->execute(array("%$nom%"));
while($resultat=$req->fetch()){
$variab=$resultat[$info]*$quantite/100;
$ppp =$resultat['alim_nom'].' '.$info.' : '.$variab;
$data=$ppp;
}
sendMessage(array(
"source" => $update["responseId"],
"fulfillmentText"=>$data,
"payload" => array(
"items"=>[
array(
"simpleResponse"=>
array(
"textToSpeech"=>"Bad request"
)
)
],
),
));
}
}
function sendMessage($parameters) {
echo json_encode($parameters);
}
我认为这里有两个问题
第一个问题是,$data
实际上并不包含结果列表。线路
$data=$ppp
正在将字符串$ppp
分配给$data
,而不是添加到数组的末尾。我想,对于这一行,你想要更像
$data[] = $ppp;
但是,这并不能完全解决您的问题,因为JSON中的fulfillmentText
属性不需要数组,而是需要字符串。因此,您可能希望将所有这些条目连接到
"filfillmentText" => implode( "\n", $data );
但是,这假设您都希望在每个答案之间有一条新的线,并且您正在使用的聊天系统以这种方式支持该功能—并非所有人都支持。(您还没有指出您使用的是哪一个。)非常感谢。是的,我发现Dialogflow只接受字符串作为结果,但内爆无法正常工作。结果没有显示在新行中,相反,我将所有结果都放在同一行中。你知道我如何解决我的问题吗?答案更新。请记住,聊天客户端的显示方式取决于该客户端。