ошибка webhook при попытке сделать ajax

Я изменил все это теперь у меня есть этот файл, который заставляет мой 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 где-то потерпел крах, но я не знаю, где и почему.

-2

Решение

Обновление 2

Основываясь на вашем самом последнем коде, вы включаете в себя «auth.php», который работает в исходной среде (которая называется как часть веб-страницы, похоже).

Ваш код имеет две функции, device_info() а также diffuse(), которые выводят свои результаты, а не возвращают их. Этот вывод не является JSON и включает в себя разметку HTML. Это отправляется как часть результата вашего веб-крюка и приведет к тому, что возвращаемое будет недействительным.

Обновить

Основываясь на вашем последнем коде, все еще остается много логических и несколько синтаксических проблем.

«500 Internal Server Error» означает, что ваша программа не работала правильно и по какой-то причине зависала. Как уже сообщалось, в нем отсутствует закрывающее}, что может быть проблемой, если этого нет в вашем реальном коде.

Даже если вы это исправите, есть много проблем с кодом:

  • Непонятно, что вы намерены делать с результатами вызова вашего скрипта «test1». Вы храните их в $data и ничего с этим не делать.

  • Вы звоните на другой веб-сайт (test1), прежде чем посмотреть, что пользователь попросил вас сделать. Что хорошо, но тогда почему вас волнует, что спрашивает пользователь?

Оригинальный ответ

Здесь есть несколько ошибок, но основная проблема заключается в том, что вы путаете то, что происходит, и возможности вызывающей стороны для вашего webhook.

Для веб-крючка Dialogflow Google / Dialogflow отправляет JSON (с которым вы, похоже, хорошо справляетесь) и ожидаете возврата JSON. Хотя похоже, что вы отправляете это обратно как часть send_message(), вы также отправляете что-то обратно, когда звоните connexion(), В этом случае вы отправляете обратно не JSON, но HTML с JavaScript.

Что приводит ко второй проблеме — если бы это был php, который генерировал HTML-страницу, включающую скрипт, вы были бы в хорошей форме. Но это не так. Вы должны отправить обратно только JSON.

Вы можете сделать что-то вроде этого, чтобы вызвать другой API и получить обратно содержимое:

$body = file_get_contents("http://google-home.exhalia.fr/test1");

Который установит $body к телу страницы, которую вы назвали. То, что вы делаете с этим, зависит от вас. Но вам нужно сделать этот звонок до ваш звонок в send_message() потому что вы хотите представить содержимое как часть того, что вы говорите.

(Увидеть Как отправить запрос GET из PHP? для обсуждения других методов, доступных вам в случае, если вам нужно сделать POST, использовать информацию заголовка и т. д.)

2

Другие решения

Других решений пока нет …