Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.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 尝试执行ajax时出现webhook错误_Php_Actions On Google_Dialogflow Es - Fatal编程技术网

Php 尝试执行ajax时出现webhook错误

Php 尝试执行ajax时出现webhook错误,php,actions-on-google,dialogflow-es,Php,Actions On Google,Dialogflow Es,我修改了所有这些,现在我有了这个使我的api工作的文件 auth.php: <?php include 'Unirest.php'; function login() { $headers = array('Accept' => 'application/json'); $data = array( "grant_type" => "password", "client_id" => "myclientid",

我修改了所有这些,现在我有了这个使我的api工作的文件

auth.php:

<?php
include 'Unirest.php';



function login()
{

    $headers = array('Accept' => 'application/json');
    $data = array(
        "grant_type" => "password",
        "client_id" => "myclientid",
        "client_secret" => "myclientsecret",
        "username" => "username",
        "password" => "password"
    );

    $response = Unirest\Request::post('http://i-scent.fr/api/oauth_token', $headers, $data);
    //    $response->code;
    //    $response->headers;
    return $response->body->access_token;
}

function device_info($device_id,$token){

    $header = array('Accept' => 'application/json', 
                    'Authorization' => 'Bearer '.$token );
    $response = Unirest\Request::get('http://i-scent.fr/api/devices/'.$device_id,$header);
    echo $response->body->name;
    echo "</br>";

}

function diffuse($device_id,$token,$duration,$intensity){

    $header = array('Accept' => 'application/json', 'Authorization' => 'Bearer '.$token );
    $data = array('time' => 1, 'percent' => 50);

    $body = Unirest\Request\Body::form($data);


    $response = Unirest\Request::put('http://i-scent.fr/app_dev.php/api/device/'.$device_id.'/actions/diffusion',$header,$body);
    echo $response->code;
    echo "</br>";


}

更新2

根据您最近的代码,您将包括“auth.php”,它在原始环境中工作(听起来像是作为网页的一部分调用)

您的代码有两个函数,
device\u info()
diffuse()
,它们输出结果而不是返回结果。此输出不是JSON,包含HTML标记。这是作为webhook结果的一部分发送的,将导致返回的内容无效

更新

根据您最新的代码,仍然存在许多逻辑问题和一些语法问题

“500内部服务器错误”表示您的程序没有正确运行,并且由于某种原因崩溃。如前所述,它缺少结尾},如果实际代码中没有结尾},这可能是问题所在

即使您解决了这一问题,代码也存在许多问题:

  • 不清楚您打算如何处理调用“test1”脚本的结果。您将它们存储在
    $data
    中,而不对其执行任何操作

  • 在查看用户要求您做的事情之前,您正在呼叫另一个网站(test1)。这很好,但是为什么你关心用户问你什么呢

原始答案

这里有一些错误,但潜在的问题是您混淆了运行的位置和webhook调用方的功能

对于Dialogflow webhook,Google/Dialogflow正在发送JSON(您似乎处理得不错),并希望返回JSON。尽管看起来您将此消息作为
send_message()
的一部分发回,但在调用
connexion()
时,您也在发回一些内容。在本例中,返回的不是JSON,而是带有JavaScript的HTML

这导致了第二个问题——如果这是php生成包含脚本的HTML页面,那么您的状态会很好。但事实并非如此。您只需返回JSON

您可以执行以下操作来调用其他API并获取内容:

$body = file_get_contents("http://google-home.exhalia.fr/test1");
这会将
$body
设置为您调用的页面的正文。在这一点上,你该怎么做取决于你自己。但是您需要在调用
send_message()
之前进行此调用,因为您希望将内容表示为您所说内容的一部分


(请参阅讨论其他方法,以防您需要发布帖子、使用标题信息等)

我已经更新了我的答案,但我不知道您所说的“我不想获取index.php的内容,除非我可以这样运行它。”是什么意思。我将其更改为
$body=file\u get\u contents("http://google-home.exhalia.fr/test1/index.php")
如您所说。我删除了函数connexion,并将其放在代码的最开始处。在test1文件夹中有index.php,它只运行不同的api来记录、获取设备信息和发送订单。我只想调用这个已经运行良好的脚本。它不显示或返回任何内容。听起来像是y你正在运行那个脚本。但是,如果它不需要输入也不返回输出,这似乎不是一个非常有用的体验。仍然无法使用我在帖子中编辑的代码。我不明白为什么。再次更新答案(放在顶部)请澄清两件事:(1)你所说的“这种方式不能解决我的问题”是什么意思。“到底是什么问题?我在这一点上迷失了方向。(2) “我在……的脚本无法运行”。你是说PHP脚本吗?或者它输出了您希望运行的标记吗?我试图让它更清楚。我假设第一个文件是“auth.php”,对吗?是的,我忘了输入名称对不起
$body = file_get_contents("http://google-home.exhalia.fr/test1");