Webhook простого выполнения диалогового процесса в с # не работает

Я очень новичок в диалоговом процессе и WebAPI, и у меня возникли проблемы с простым веб-перехватчиком для выполнения диалогового процесса, написанным на C # и размещенным в Azure. Я использую версию API dialogflow V2.0.

В настоящее время мое выполнение работает и возвращает простой ответ, но не принимает во внимание намерение и параметры. Теперь я пытаюсь проанализировать JSON, чтобы получить намерение выполнить простой выбор и вернуть значение полученных параметров. И это доставляет мне много хлопот. Ссылка на веб-перехватчик, мой код и сообщение об ошибке, возвращаемое в блоке catch, приведены ниже.

    public JsonResult Post(string value)
    {
        try
        {
            dynamic obj = JsonConvert.DeserializeObject(value);
            string Location = string.Empty;

            switch (obj.intent.displayName)
            {
                case "getstock":
                    Location = obj.outContexts[0].parameters[0].Location;
                    break;
            }

            WebhookResponse r = new WebhookResponse();
            r.fulfillmentText = string.Format("The stock at {0} is valuing Rs. 31 Lakhs \n And consists of items such as slatwall, grid and new pillar. The detailed list of the same has been email to you", Location);

            r.source = "API.AI";


            Response.ContentType = "application/json";
            return Json(r);
        } catch(Exception e)
        {
            WebhookResponse err = new WebhookResponse();
            err.fulfillmentText = e.Message;
            return Json(err);
        }
    }

Сообщение об ошибке:

Value cannot be null.
 Parameter name: value

Вышеупомянутая функция вызывается через POST, вы можете использовать POSTMAN, и вы получите ответ JSON.

Кроме того, я использую ASP.Net Web Api с Visual Studio 2017 с контроллерами.


person Mikdad Merchant    schedule 14.06.2018    source источник
comment
Как вызывается эта функция? Похоже, он вызывается с нулевым значением для value. Нам нужно увидеть больше, чтобы понять, что происходит.   -  person Prisoner    schedule 14.06.2018
comment
он вызывается диалоговым потоком, и я не могу его контролировать   -  person Mikdad Merchant    schedule 14.06.2018
comment
Можете ли вы обновить свой вопрос, чтобы предоставить информацию о том, как URL-адрес, который вы указали для диалогового процесса, направляется к этой конкретной функции в Azure и в используемой вами платформе C #?   -  person Prisoner    schedule 14.06.2018
comment
post функция имеет атрибут http post, поэтому она вызывается с сообщением, также я уверен, что сообщение работает, потому что веб-крючок возвращает ответ в блоке catch   -  person Mikdad Merchant    schedule 14.06.2018
comment
и я использую asp.net web api с контроллерами   -  person Mikdad Merchant    schedule 14.06.2018
comment
готово, я обновил вопрос   -  person Mikdad Merchant    schedule 14.06.2018
comment
Можете ли вы поделиться ответом, если у вас есть решение?   -  person Anita George    schedule 28.06.2018


Ответы (1)


Сначала установите пакет nuget Google.Apis.Dialogflow.v2 и его зависимости. Это сэкономит вам много работы в дальнейшем, поскольку в нем есть объекты ответа / запроса диалогового потока C #, которые упростят навигацию по графу объектов.

Во-вторых, добавьте using для пакета using Google.Apis.Dialogflow.v2.Data;

Измените свой метод на что-то вроде

 public GoogleCloudDialogflowV2WebhookResponse Post(GoogleCloudDialogflowV2WebhookRequest obj)
    {
            string Location = string.Empty;

            switch (obj.QueryResult.Intent.DisplayName)
            {
                case "getstock":
                Location = obj.QueryResult.Parameters["Location"].ToString();
                break;
            }

            var response = new GoogleCloudDialogflowV2WebhookResponse()
            {
                FulfillmentText = $"The stock at {Location} is valuing Rs. 31 Lakhs \n And consists of items such as slatwall, grid and new pillar. The detailed list of the same has been email to you",
                Source = "API.AI"
            };

            return response;
    }

Я думаю, что ваша основная проблема в вашем коде - это "obj.outContexts [0]" outContexts не там, где вы найдете свои параметры, и если вы не настроили выходной контент, он будет нулевым. Вам нужно посмотреть в queryResult свои параметры.

person Morph    schedule 29.06.2018