Выполнение DialogFlow v2 DetectIntent Вызовы w / C # (включая контекст ввода) - PullRequest
0 голосов
/ 29 августа 2018

Итак, я наконец-то нашел способ успешно определить намеренные вызовы и предоставить входной контекст. У меня вопрос, является ли это ПРАВИЛЬНЫЙ (или лучше) способ сделать это:

(И да, я знаю, что вы можете просто вызвать DetectIntent (агент, сеанс, запрос), но я должен предоставить входной контекст (ы) в зависимости от запроса)

var query = new QueryInput
    {
    Text = new TextInput
    {
        Text = model.Content,
        LanguageCode = string.IsNullOrEmpty(model.Language) ? "en-us" : model.Language,
    }
};

var commonContext = new global::Google.Cloud.Dialogflow.V2.Context
{
    ContextName = new ContextName(agent, model.sessionId, "my-input-context-data"),
    LifespanCount = 3,
    Parameters = new Struct
    {
        Fields = {
            { "Source", Value.ForString(model.Source) },
            { "UserId" , Value.ForString(model.UserId.ToString())},
            { "Name" , Value.ForString(model.FirstName)}
        }
    }
};      

var request = new DetectIntentRequest
{
    SessionAsSessionName = new SessionName(agent, model.sessionId),
    QueryParams = new QueryParameters
    {
        GeoLocation = new LatLng {Latitude = model.Latitude, Longitude = model.Longitude},
        TimeZone = model.TimeZone ?? "MST"
    },
    QueryInput = query
};
request.QueryParams.Contexts.Add(commonContext);


// ------------

var creds = GetGoogleCredentials("myCredentials.json");
var channel = new Grpc.Core.Channel(SessionsClient.DefaultEndpoint.Host, creds.ToChannelCredentials());
var client = SessionsClient.Create(channel);

var response = client.DetectIntent(request);

channel.ShutdownAsync();

return response;

Примечание: я включил явный ShutDownAsync (он не в асинхронном вызове), потому что у меня возникали некоторые проблемы с блокировкой файлов при попытке повторно развернуть проект WebAPI (и только после выполнения этого кода).

Спасибо Chris

Обновлено 4/25: Самый простой способ, которым я использую это, - интегрировать имя пользователя в намеренные ответы: Intent response example

Его также можно прочитать из индекса выполнения webhook / inline: js:

const name = request.body.queryResult && request.body.queryResult.outputContexts && request.body.queryResult.outputContexts[0].parameters.Name
...