Как вызвать google.apis.dialogflow.v2 в C # - PullRequest
0 голосов
/ 01 июня 2018

Я новичок в Google API.Я хочу знать, как вызвать Google Dialogflow API в C #, чтобы получить намерение ввести текст.Но я не могу найти ни одного примера для вызова Dialogflow с помощью C #.

Пожалуйста, приведите несколько примеров для вызова Dialogflow из C #.

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Если я правильно понимаю ваш вопрос, вы хотите вызывать API DialogFlow из приложения C # (а не писать конечные точки выполнения, которые вызываются из DialogFlow. Если это так, вот пример для выполнения этого вызова:

using Google.Cloud.Dialogflow.V2;

...
...

var query = new QueryInput
{
    Text = new TextInput
    {
        Text = "Something you want to ask a DF agent",
        LanguageCode = "en-us"
    }
};

var sessionId = "SomeUniqueId";
var agent = "MyAgentName";
var creds = GoogleCredential.FromJson("{ json google credentials file)");
var channel = new Grpc.Core.Channel(SessionsClient.DefaultEndpoint.Host, 
              creds.ToChannelCredentials());

var client = SessionsClient.Create(channel);

var dialogFlow = client.DetectIntent(
    new SessionName(agent, sessionId),
    query
);
channel.ShutdownAsync();

В более ранней версии DialogFlowAPI у меня возникали проблемы с блокировкой файлов при попытке повторного развертывания проекта веб-API, которые, как казалось, channel.ShutDownAsync() решили. Я думаю, это было исправлено в недавнем выпуске.

Это самая простая версия запроса DF, которую я использовал. В этом посте есть более сложная версия, которая передает входной контекст: Выполнение вызовов DialogFlow v2 DetectIntent с C / (включаяконтекст ввода)

0 голосов
/ 30 июля 2018

(я полагаю, вы знаете, что DialogFlow будет вызывать ваш код, как указано / зарегистрировано в действии на DialogFlow? Таким образом, ваш код может только отвечать.)

Google.Cloud.Dialogflow.v2

Не звоните в Google. Apis .Dialogflow.v2 (с GoogleCloudDialogflowV2WebhookRequest и GoogleCloudDialogflowV2WebhookResponse), но используйте Google. Облако .Dialogflow.v2 (с WebhookRequest и WebhookResponse) - см. eTag-error .

Использование Google.Cloud.Dialogflow.v2 NuGet Beta , который в настоящее время находится в режиме предварительного просмотра:

   [HttpPost]
    public dynamic PostWithCloudResponse([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 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,
                                   //Ssml = $"<speak>{testAnswer}</speak>"
                                }
                            }
                        }
                    }
            }
        };
        var jsonResponse = dialogflowResponse.ToString();
        return new ContentResult { Content = jsonResponse, ContentType = "application/json" }; ;
    }

Редактировать : Оказывается, что привязка модели может не связывать все свойства из 'ProtoBuf-json' правильно (например, WebhookRequest.outputContexts[N].parameters), поэтому, вероятно, следует использовать Google.Protobuf.JsonParser (например, см. эта документация ).

Этот синтаксический анализатор может запутаться в неизвестных полях, поэтому, возможно, кто-то также захочет игнорировать это.Поэтому теперь я использую этот код (однажды я могу сделать универсальный метод более универсальным и, таким образом, полезным, сделав HttpContext.Request.InputStream параметром):

    public ActionResult PostWithCloudResponse()
    {
       var dialogflowRequest = ParseProtobufRequest<WebhookRequest>();
       ...
        var jsonResponse = dialogflowResponse.ToString();
        return new ContentResult { Content = jsonResponse, ContentType = "application/json" }; ;
    }

    private T ParseProtobufRequest<T>() where T : Google.Protobuf.IMessage, new()
    {
        // parse ProtoBuf (not 'normal' json) with unknown fields, else it may not bind ProtoBuf correctly
        // https://github.com/googleapis/google-cloud-dotnet/issues/2425 "ask the Protobuf code to parse the result"
        string requestBody;
        using (var reader = new StreamReader(HttpContext.Request.InputStream))
        {
            requestBody = reader.ReadToEnd();
        }
        var parser = new Google.Protobuf.JsonParser(JsonParser.Settings.Default.WithIgnoreUnknownFields(true));
        var typedRequest = parser.Parse<T>(requestBody);
        return typedRequest;
    }

Кстати: этот ProtoBuf-json также являетсяпричина использования WebhookResponse.ToString(), которая в свою очередь использует Google.Protobuf.JsonFormatter.ToDiagnosticString.

BotBuilder от Microsoft

пакеты Microsoft BotBuilder и шаблон Visual Studio .Я еще не использовал его, но ожидаю примерно тот же код?

Собственный рукописный проприетарный код

Простой пример кода входящего запроса (называемый Google NLU-Response) предоставляетсяМадока Чиода ( Чомадо ) в Гитхуб .Входящий вызов просто анализируется на ее DialogFlowResponseModel :

    public static async Task<HttpResponseMessage> Run([...]HttpRequestMessage req, [...]CloudBlockBlob mp3Out, TraceWriter log)
        ...
        var data = await req.Content.ReadAsAsync<Models.DialogFlowResponseModel>();

Gactions

Если вы планируете работать без DialogFlow позже, обратите вниманиечто интерфейс для Gactions значительно отличается от интерфейса с DialogFlow.Json-параметры и возвращаемые значения имеют некоторое перекрытие, но ничто не выигрывает у вас какое-либо время программирования (возможно, теряя некоторое время, начиная с 'over').

Однако, начиная с DialogFlow, вы можете получить некоторый быстрый опыт диалога(например, дизайн вопросов и ответов / прототипирование).А у DialogFlow-API есть пакет NuGet, в котором у интерфейса Gactions нет пакета NuGet , но пока .

...