首页 > 解决方案 > 如何提取我的 webhook 请求参数以在 google (WebAPI) 上执行操作

问题描述

我想实现一个 webAPI(MVC) 来充当对话流的 webhook,用于 google home 上的操作,它可以拦截输入请求并通过 API 发送适当的响应。我在 Dialogflow 中启用了一个 webhook。我正在使用ngrok将我的本地 url 模拟为公共。当我在谷歌的操作中使用模拟器时,它会命中我的 API,但是问题是我如何获取我的请求参数。我已经创建了一个基于我在模拟器的请求选项卡中看到的 json 有效负载的 C# 对象,即

{
  "user": {
    "userId": "ABwppHFVbJd56p8i5HGFAGVEXJuHlYSZoiJIxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "locale": "en-US",
    "lastSeen": "2018-06-11T11:50:56Z"
  },
  "conversation": {
    "conversationId": "1528724450138",
    "type": "ACTIVE",
    "conversationToken": "[]"
  },
  "inputs": [
    {
      "intent": "actions.intent.TEXT",
      "rawInputs": [
        {
          "inputType": "KEYBOARD",
          "query": "Talk to papu"
        }
      ],
      "arguments": [
        {
          "name": "text",
          "rawText": "Talk to papu",
          "textValue": "Talk to papu"
        }
      ]
    }
  ],
  "surface": {
    "capabilities": [
      {
        "name": "actions.capability.SCREEN_OUTPUT"
      },
      {
        "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
      },
      {
        "name": "actions.capability.WEB_BROWSER"
      },
      {
        "name": "actions.capability.AUDIO_OUTPUT"
      }
    ]
  },
  "isInSandbox": true
}

我的网络方法是这样的

   [HttpPost]
    public ActionResult Connect(AsisstantRequest req)
    {}

也是Request.Form.AllKeys空的

而且我也找不到,是否有可用于 .net 的 sdk?

标签: asp.net-web-api2actions-on-googledialogflow-es

解决方案


已经表明存在基于原始问题中提供的 JSON 的类模型。

作为 Web API,操作应该在 a 中ApiController,并准确指定应该在哪里查找请求参数。

public class MyApiController : ApiController {
    //...

    [HttpPost]
    public IHttpActionResult Connect([FromBody] AsisstantRequest request) {
        //...
    }

}

推荐阅读