Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将php数组作为dialogflow响应发送_Php_Dialogflow Es - Fatal编程技术网

将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

嘿,我正在使用dialogflow构建一个聊天机器人,我正在使用一个定制的Webhook(我正在用php编程)生成响应。我从数据库中提取数据并将其存储在数组中,但当我将数组作为响应发送到dialogflow时,它只显示第一行。 这是我的密码:

<?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只接受字符串作为结果,但内爆无法正常工作。结果没有显示在新行中,相反,我将所有结果都放在同一行中。你知道我如何解决我的问题吗?答案更新。请记住,聊天客户端的显示方式取决于该客户端。