Dialogflow Webhook响应c#在调用时给出错误

时间:2018-10-05 13:42:44

标签: azure dialogflow

我正在尝试使用C#(在Azure上)为Dialogflow创建一个Webhook。每次我看到相同的示例,但我的DialogFlows不断因该响应而出错”

这就是我所做的:

  • 创建了一个新的ASP.Net Web项目(WebAPI)
  • 安装了NuGet Google.Cloud.DialogFlow V2(v1.0.0.beta02)
  • 将System.Net.Http更新为4.3.3

创建了一个新的控制器

        [System.Web.Http.HttpPost]
    public dynamic DialogAction([FromBody] WebhookRequest dialogflowRequest)
    {
        var intentName = dialogflowRequest.QueryResult.Intent.DisplayName;
        var actualQuestion = dialogflowRequest.QueryResult.QueryText;
        var testAnswer = $"Dialogflow Request for intent {intentName} and question {actualQuestion}";
        var parameters = dialogflowRequest.QueryResult.Parameters;
        var dialogflowResponse = new WebhookResponse
        {
            FulfillmentText = testAnswer,
            FulfillmentMessages =
            { new Intent.Types.Message
                { SimpleResponses = new Intent.Types.Message.Types.SimpleResponses
                    { SimpleResponses_ =
                        { new Intent.Types.Message.Types.SimpleResponse
                            {
                                DisplayText = testAnswer,
                                TextToSpeech = testAnswer,
                            }
                        }
                    }
                }
            }                
        };
        var jsonResponse = dialogflowResponse.ToString();
        return new ContentResult
        {
            Content = jsonResponse,
            ContentType = "application/json"                
        };
  • 将应用程序发布到Azure,因此有一个Webhook URl。 现在,当我在dialogflow中对其进行测试时,响应为:

“ Webhook调用失败。错误:无法解析webhook JSON响应:找不到字段:消息google.cloud.dialogflow.v2.WebhookResponse中的内容。”

我不明白.....我在这里想念什么?

(以下是响应的屏幕截图:) Screenhot

1 个答案:

答案 0 :(得分:0)

此问题的解决方案是返回JsonResult而不是ContentResult。

   [System.Web.Http.HttpPost]
public JsonResult DialogAction([FromBody] WebhookRequest dialogflowRequest)
{
    var intentName = dialogflowRequest.QueryResult.Intent.DisplayName;
    var actualQuestion = dialogflowRequest.QueryResult.QueryText;
    var testAnswer = $"Dialogflow Request for intent {intentName} and question {actualQuestion}";
    var parameters = dialogflowRequest.QueryResult.Parameters;
    var dialogflowResponse = new WebhookResponse
    {
        FulfillmentText = testAnswer,
        FulfillmentMessages =
        { new Intent.Types.Message
            { SimpleResponses = new Intent.Types.Message.Types.SimpleResponses
                { SimpleResponses_ =
                    { new Intent.Types.Message.Types.SimpleResponse
                        {
                            DisplayText = testAnswer,
                            TextToSpeech = testAnswer,
                        }
                    }
                }
            }
        }                
    };
    var jsonResponse = dialogflowResponse.ToString();
    return Json(jsonResponse);
相关问题