PHP MySQL对话流 [英] PHP MySQL Dialogflow

查看:79
本文介绍了PHP MySQL对话流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用PHP webhook设置聊天机器人(对话流)

我想做的是让用户输入查询MySQL表并将结果传递回dialogflow API.

到目前为止,我已成功将文本字符串传递回API,但我不了解如何查询数据库并将结果传递回dialogflow API

感谢您在此帮助下的
我已经使用了对话框流程文档此处的API格式

这就是我所拥有的

I'm setting up a chatbot (dialogflow) with a PHP webhook

What I want to do is to take the user input to query a MySQL table and pass the result back to the dialogflow API

So far I succeeded with passing a text string back to the API, but I don't understand how to query the database and pass the result back to the dialogflow API

I'll appreciate your help with this
I've used the API format from the dialogflow docs here

This is what I have

<?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制成actions

whenever the webhook gets triggered you need to listen to actions from JSON responses, from the action made the switch case of 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的响应,并且正在数据库中执行查询并返回一个来自数据库的响应.

So when the action gets caught it will get executed and goes in the getNews($param); function here I am getting year as a response from the user in my case and I am executing the query in the database and giving back a response from the database.

这篇关于PHP MySQL对话流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆