PHP MySQL 对话流

PHP MySQL Dialogflow

我正在使用 PHP webhook

设置聊天机器人 (dialogflow) 我想要做的是让用户输入查询 MySQL table 并将结果传递回 dialogflow API

到目前为止,我已成功将文本字符串传回 API,但我不明白如何查询数据库并将结果传回对话流 API

非常感谢你对此的帮助
我使用了 dialogflow 文档 here

中的 API 格式 这就是我的

<?php
$method = $_SERVER['REQUEST_METHOD'];
if($method == 'POST') {
$requestBody = file_get_contents('php://input'); 
$json = json_decode($requestBody); 
$text = $json->result->parameters->cities;
$conn = mysqli_connect("xxx", "xxx", "xxx", "xxx"); 
    $sql = "SELECT * FROM exampletable LIKE '%".$_POST["cities"]."%'"; 
    $result = mysqli_query($conn, $sql);
    $emparray = array();
    while($row =mysqli_fetch_assoc($result)) {
        $emparray[] = $row;
    }
$speech = $emparray;
    $response->speech = $speech;
    $response->displayText = $speech;
    $response->source = "webhook";
    echo json_encode(array($response,$emparray));
else
{
    echo "Method not allowed";
}
 ?>


谢谢

每当 webhook 被触发时,您需要从 JSON 响应中收听 actions, 来自 action 的 switch case actions

index.php

<?php
require 'get_enews.php';

function processMessage($input) {
    $action = $input["result"]["action"];
    switch($action){

        case 'getNews':
            $param = $input["result"]["parameters"]["number"];
            getNews($param);
            break;

        default :
            sendMessage(array(
                "source" => "RMC",
                "speech" => "I am not able to understand. what do you want ?",
                "displayText" => "I am not able to understand. what do you want ?",
                "contextOut" => array()
            ));
    }
}
function sendMessage($parameters) {
    header('Content-Type: application/json');
    $data = str_replace('\/','/',json_encode($parameters));
    echo $data;
}
$input = json_decode(file_get_contents('php://input'), true);
if (isset($input["result"]["action"])) {
    processMessage($input);
}
?>

get_enews.php

<?php
function getNews($param){
    require 'config.php';
    $getNews="";
    $Query="SELECT link FROM public.news WHERE year='$param'";
    $Result=pg_query($con,$Query);
    if(isset($Result) && !empty($Result) && pg_num_rows($Result) > 0){
    $row=pg_fetch_assoc($Result);
    $getNews= "Here is details that you require - Link: " . $row["link"];
        $arr=array(
            "source" => "RMC",
            "speech" => $getNews,
            "displayText" => $getNews,
        );
        sendMessage($arr);
    }else{
        $arr=array(
            "source" => "RMC",
            "speech" => "No year matched in database.",
            "displayText" => "No year matched in database.",
        );
        sendMessage($arr);
    }
}
?>

因此,当操作被捕获时,它将被执行并进入 getNews($param); 函数,在我的案例中,我得到 year 作为用户的响应,我正在执行查询数据库并返回数据库的响应。