首页 > 解决方案 > 谷歌上的操作如何通过 php 做出响应?

问题描述

这是我的 php 代码响应,但我收到“来自 webhook 的错误无效响应:无法将 JSON 转换为 ExecuteHttpResponse”。

这是生成 JSON 响应的 webhook 代码,但谷歌使用此返回 json 抛出无效错误:

$method = $_SERVER['REQUEST_METHOD'];

if($method == 'POST')
{
$requestBody = file_get_contents('php://input');
$json = json_decode($requestBody, true, 512, JSON_BIGINT_AS_STRING);
$customer_name = $json["requestJson"]["intent"]["params"]["customer_name"]["original"];    
$returnText="Customer name is $customer_name"
$response = new \stdClass();
$response->speech = $returnText;               
$response->displayText = $returnText;
$response->source = "webhook";
echo json_encode($response);
}

带有无效错误的 webhook 响应来自 webhook 的无效响应:无法将 JSON 转换为 ExecuteHttpResponse

"responseJson": {
  "session": {
    "id": "1234"
  },
  "textToSpeech": "bala",
  "displayText": "bala",
  "source": "webhook"
}

我究竟做错了什么?

标签: phpwebhooksactions-on-googlegoogle-assistantactions-builder

解决方案


问题是您的响应 JSON 与Actions on Google 所期望的响应正文格式不匹配。

你需要一个类似于 JSON 的结构

{
  "prompt": {
    "firstSimple": {
      "speech": "bala",
      "text": "bala"
    }
  }
}

你可能可以用 PHP 做这样的事情(未经测试):

$response = array (
  'prompt' => array (
    'firstSimple' => array (
      'speech' => $returnText,
      'text' => $returnText
    )
  )
);
echo json_encode( $response );

推荐阅读