Я пытаюсь создать веб-хук, но практически нет документации о том, как это сделать в c #.Цель состоит в том, чтобы ответить на вызов webhook вопросом, требующим от пользователя выбора ответа (было бы неплохо использовать для этого обучающие фразы!).Пока мне удалось дать только базовый ответ, поэтому я пытаюсь остановиться на этом ....
Теперь я прочитал , что ответ должен выглядеть примерно так :
{
"payload": {
"google": {
"expectUserResponse": true,
"richResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "We have more to do"
}
}
]
}
}
}
}
Проблема в том, что я не знаю, как это сделать в c #.В настоящее время у меня есть этот метод:
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();
}
Это мой собственный метод, который вызывается, когда POST отправляется в мой 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 выше?
Это все часть приложения, которое я создаю для Actions в Google, но с использованием метода DialogFlow.И это должно быть выполнением.Как вы уже догадались, я новичок в этом процессе и учусь по ходу дела.То, что я хочу сделать, это вернуть вопрос (у которого есть несколько ответов), и я бы хотел, чтобы пользователь мог сказать что-то, что относится к одному из них.Например, в этом случае вопрос звучит так:
Как вы будете использовать это?
И ответы будут примерно такими:
- Для праздников и выходных
- Профессионально
- Для развлечения
- С семьей
Я упомянул обучающие фразы, потому что я не ожидаю, что пользовательзнать ответы заранее.Я хочу, чтобы они говорили свободно, а затем я попытаюсь найти ответ (и вернусь к моему API для другого выполнения) или перейду к запасному варианту, который затем, вероятно, перечислит ответы.