我们的目标是用一个需要用户选择答案的问题来响应webhook调用(最好使用培训短语来回答这个问题!)。
到目前为止,我只给出了一个基本的回答,所以我正在努力扩展这一点。。。。
read that the response should look something like this
:
{
"payload": {
"google": {
"expectUserResponse": true,
"richResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "We have more to do"
}
}
]
}
}
}
}
目前,我有以下方法:
public async Task<string> ProcessAsync(WebhookRequest request)
{
var response = new WebhookResponse
{
FulfillmentText = "Something went wrong"
};
var keyValuePair = request.QueryResult.Parameters.Fields.SingleOrDefault(m => m.Key.Equals("categories"));
if (keyValuePair.Equals(default(KeyValuePair<string, Value>))) return response.ToString();
var category = keyValuePair.Value;
var questions = await ListScenariosAsync(category.StringValue);
if (questions.Count != 1) return response.ToString();
var question = questions.First();
response = new WebhookResponse
{
Payload = new Struct()
};
return response.ToString();
}
岗位
已发送到我的API:
/// <inheritdoc />
/// <summary>
/// Used for an google home api calls
/// </summary>
[RoutePrefix("google")]
public class GoogleController : ApiController
{
private readonly IGoogleHomeProvider _provider;
/// <inheritdoc />
public GoogleController(IGoogleHomeProvider questionProvider) => _provider = questionProvider;
/// <summary>
/// Handles a webhook request
/// </summary>
/// <param name="model">The request model</param>
/// <returns></returns>
[HttpPost]
[Route("")]
public async Task<HttpResponseMessage> Post(WebhookRequest model)
{
var result = await _provider.ProcessAsync(model);
var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(result, Encoding.UTF8, "application/json");
return response;
}
}
Payload = new Struct()
Google.Protobuf.WellKnownTypes.Struct
. 如何创建表示上述json的东西?
这是我在Google上为Actions构建的应用程序的一部分,但是使用的是DialogFlow方法。这应该是一种满足。正如你可能已经猜到的,我对这个过程和学习是新的。
我想做的是返回一个问题(有很多答案),然后我希望用户能够说一些与其中一个答案相关的话。
例如,在这种情况下,问题是:
你怎么用这个?
答案是这样的:
我提到训练短语是因为我不希望用户事先知道答案。我希望他们畅所欲言,然后我将尝试匹配一个答案(并返回到我的API以获得另一个实现),或者返回一个可能会列出答案的回退。