代码之家  ›  专栏  ›  技术社区  ›  r3plica

googledialogflowv2使用c#

  •  0
  • r3plica  · 技术社区  · 7 年前

    我们的目标是用一个需要用户选择答案的问题来响应webhook调用(最好使用培训短语来回答这个问题!)。 到目前为止,我只给出了一个基本的回答,所以我正在努力扩展这一点。。。。

    read that the response should look something like this :

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

    目前,我有以下方法:

    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();
    }
    

    岗位 已发送到我的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的东西?

    这是我在Google上为Actions构建的应用程序的一部分,但是使用的是DialogFlow方法。这应该是一种满足。正如你可能已经猜到的,我对这个过程和学习是新的。 我想做的是返回一个问题(有很多答案),然后我希望用户能够说一些与其中一个答案相关的话。 例如,在这种情况下,问题是:

    你怎么用这个?

    答案是这样的:

    • 假期和外出
    • 专业的
    • 和家人在一起

    我提到训练短语是因为我不希望用户事先知道答案。我希望他们畅所欲言,然后我将尝试匹配一个答案(并返回到我的API以获得另一个实现),或者返回一个可能会列出答案的回退。

    1 回复  |  直到 7 年前
        1
  •  0
  •   oeoren    7 年前

    var dialogflowResponse = new WebhookResponse
    {
         FulfillmentText = "Your user response"
    };
    var response = Request.CreateResponse(
        HttpStatusCode.OK, dialogflowResponse, "application/json"
    );
    
    推荐文章