谷歌Dialogflow V2使用C#

问题描述 投票:0回答:1

我试图创建一个web挂钩,但很少有关于如何做到这一点在C#中的文档。我们的目标是针对与需要用户选择回答的问题一个网络挂接调用(将是很好的用于这个训练周期!)。到目前为止,我只设法给一个基本的反应,所以我想就此展开....

现在我有read that the response should look something like this

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "We have more to do"
            }
          }
        ]
      }
    }
  }
}

问题是,我不知道如何在C#中做到这一点。目前,我有这样的方法:

public async Task<string> ProcessAsync(WebhookRequest request)
{
    var response = new WebhookResponse
    {
        FulfillmentText = "Something went wrong"
    };

    var keyValuePair = request.QueryResult.Parameters.Fields.SingleOrDefault(m => m.Key.Equals("categories"));
    if (keyValuePair.Equals(default(KeyValuePair<string, Value>))) return response.ToString();

    var category = keyValuePair.Value;
    var questions = await ListScenariosAsync(category.StringValue);

    if (questions.Count != 1) return response.ToString();

    var question = questions.First();
    response = new WebhookResponse
    {
        Payload = new Struct()
    };
    return response.ToString();
}

这是我自己的方法,当一个POST发送到我的API,它被称为:

/// <inheritdoc />
/// <summary>
/// Used for an google home api calls
/// </summary>
[RoutePrefix("google")]
public class GoogleController : ApiController
{
    private readonly IGoogleHomeProvider _provider;

    /// <inheritdoc />
    public GoogleController(IGoogleHomeProvider questionProvider) => _provider = questionProvider;

    /// <summary>
    /// Handles a webhook request
    /// </summary>
    /// <param name="model">The request model</param>
    /// <returns></returns>
    [HttpPost]
    [Route("")]
    public async Task<HttpResponseMessage> Post(WebhookRequest model)
    {
        var result = await _provider.ProcessAsync(model);
        var response = Request.CreateResponse(HttpStatusCode.OK);
        response.Content = new StringContent(result, Encoding.UTF8, "application/json");
        return response;
    }
}

,指出Payload = new Struct()行是混淆的部分。显然,这是类型Google.Protobuf.WellKnownTypes.Struct的。我怎样才能创造的东西,将是代表上面的JSON?

这是一个应用程序我建立了在谷歌的行动,但使用DialogFlow方法的一部分。这应该是履行。正如你可能已经猜到了,我是新来的这个过程和学习,我去。我想要做的就是回到一个问题(其中有许多的答案),我想那么用户可以说的东西,会涉及到他们的答案之一。例如,在这种情况下,问题是:

你将如何使用它?

而答案是这样的:

  • 对于节假日和天出
  • 专业
  • 为了娱乐
  • 跟家人

我提到的训练周期,因为我不希望用户事先知道答案。我希望他们能够自由交谈,然后我将尝试匹配一个答案(和回来我再履行API)或去一个后备然后可能会列出答案。

c# dialogflow
1个回答
0
投票

在创建一个C#的WebAPI控制器的响应可能是简单:

var dialogflowResponse = new WebhookResponse
{
     FulfillmentText = "Your user response"
};
var response = Request.CreateResponse(
    HttpStatusCode.OK, dialogflowResponse, "application/json"
);
© www.soinside.com 2019 - 2024. All rights reserved.