我现在修改了所有这个文件使我的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>";
}
当我在一个简单的脚本中使用所有功能时,它在我的网站上完美运行。但是,当我在我的webhook中这样说,我有错误500内部服务器错误。我拥有所有最廉价的图书馆。
<?php
include "auth.php";
function processMessage($update) {
if($update["result"]["action"] == "sayHello"){
$token = login();
$name = device_info("1966",$token);
diffuse("1966",$token,"0.5","50");
sendMessage(array(
"source" => $update["result"]["source"],
"speech" => "bonjour webhook",
"displayText" => "bonjour webhook",
"contextOut" => array()
));
}
}
function sendMessage($parameters) {
echo json_encode($parameters);
}
$update_response = file_get_contents("php://input");
$update = json_decode($update_response, true);
if (isset($update["result"]["action"])) {
processMessage($update);
}
错误500应该意味着webhokk的脚本在某处崩溃,但我不知道在哪里以及为什么。
答案 0 :(得分:2)
更新2
根据您最近的代码,您将包括&#34; auth.php&#34;,它在原始环境中工作(它被称为网页的一部分,听起来像)。
您的代码有两个函数device_info()
和diffuse()
,它们输出结果而不是返回结果。此输出不是JSON,包括HTML标记。这是作为webhook结果的一部分发送的,并且会导致返回的内容无效。
<强>更新强>
根据您的最新代码,仍有许多逻辑和一些语法问题。
A&#34; 500内部服务器错误&#34;表示您的程序由于某种原因没有正确运行并崩溃。如发布,它会丢失一个结束},如果您的实际代码中没有这个问题可能会出现问题。
即使您解决了这个问题,代码也存在许多问题:
目前还不清楚您打算如何调用您的&#34; test1&#34;脚本。您将它们存储在$data
中,并且不对其执行任何操作。
在您查看用户要求您执行的操作之前,您正在调用其他网站(test1)。哪个好,但是为什么你关心用户问你什么?
原始答案
这里有一些错误,但潜在的问题是,您要将运行的内容和调用者的功能混合到您的webhook。
对于Dialogflow webhook,Google / Dialogflow正在发送JSON(您似乎正在处理好),并期待回JSON。虽然您看起来像是send_message()
的一部分发回来的,但是当您致电connexion()
时,您还会发回一些内容。在这种情况下,您发回的内容是不是 JSON,而是带有JavaScript的HTML。
这导致了第二个问题 - 如果这是生成包含脚本的HTML页面的php,那么你的状态就会很好。但它不是。您必须发回仅 JSON。
您可以执行以下操作来调用其他API并获取内容:
$body = file_get_contents("http://google-home.exhalia.fr/test1");
将$body
设置为您所呼叫的页面正文。那时你用它做什么取决于你。但是,您需要在致电send_message()
之前拨打此电话,因为您希望将内容表示为您所说的内容的一部分。
(有关您需要进行POST,使用标题信息等的其他可用方法的讨论,请参阅officals docs。)