Итак, я наконец-то нашел способ успешно определить намеренные вызовы и предоставить входной контекст. У меня вопрос, является ли это ПРАВИЛЬНЫЙ (или лучше) способ сделать это:
(И да, я знаю, что вы можете просто вызвать 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: Самый простой способ, которым я использую это, - интегрировать имя пользователя в намеренные ответы:
Его также можно прочитать из индекса выполнения webhook / inline: js:
const name = request.body.queryResult && request.body.queryResult.outputContexts && request.body.queryResult.outputContexts[0].parameters.Name