Я создал бота на C #, используя BotFramework, Adaptive Cards, LUIS и FormFlow. Он / она отвечает за организацию встреч в команде.
return new FormBuilder<MeetingRequestInput>()
...
.Field(
nameof(MeetingRequestInput.RequestedDate),
"What date would you like to meet?"
)
...
.Build();
Во время тестов мы заметили проблемы, когда пользователь должен был ввести желаемую дату / время встречи (люди набрали бы dd/mm/yy
, mm/dd/yy
, dd-mm-yy
, только dd
, и так далее), поэтому мы хотели бы использовать какая-то «форма» с отформатированными входами, чтобы избежать проблем с синтаксическим анализом и сохранить удобство использования.
Я думаю, что мы не можем изменить желаемый тип клавиатуры (вроде как на мобильном телефоне, где иногда клавиатура показывает только цифры или показывает DateTime Picker), или применить автозаполнение шаблона, по крайней мере, с помощью BotFramework.
Чтобы решить эту проблему, я хотел бы использовать AdaptiveCard со средствами выбора даты и времени в моем приглашении FormFlow, по крайней мере, когда пользователю предлагается ввести запрошенную дату, например так:
Пример ввода с использованием адаптивных карт
В этом примере пользователь должен заполнить AdaptiveDateInput и AdaptiveTimeInput, а затем нажать кнопку «Подтвердить». При этом он будет захватывать значения внутри входных данных, а затем «печатать и отправлять» пользователю требуемый DateTime в конкретном шаблоне, избегая предыдущих проблем с синтаксическим анализом.
Проблема в том, что я не могу заменить «обычную» карту FormFlow (которая ожидает в качестве параметра подсказки простую строку) всей адаптивной картой. Как мне решить эту проблему? Являются ли AdaptiveCards лучшим ответом или есть альтернативы?
Прямо сейчас я показываю карту вручную, вот так:
AdaptiveCard card = new AdaptiveCard();
card.Body = new List<AdaptiveElement>()
{
new AdaptiveTextBlock()
{
Text = "What date would you like to meet?"
},
new AdaptiveDateInput()
{
Value = DateTime.Now.ToShortDateString(),
Id = "dateInp"
},
new AdaptiveTimeInput()
{
Value = DateTime.Now.ToShortTimeString(),
Id = "timeInp"
}
};
card.Actions = new List<AdaptiveAction>()
{
new AdaptiveSubmitAction()
{
Type = "Action.Submit",
Title = "Confirm"
}
};
var msg = context.MakeMessage();
msg.Attachments.Add(
new Attachment()
{
Content = card,
ContentType = "application/vnd.microsoft.card.adaptive",
Name = "Requested Date Adaptive Card"
}
);
await context.PostAsync(msg);
Я прочитал этот вопрос , но я не знаю, есть ли у нас точно такая же проблема. И их решение не относится ко мне: хотя я и сделал приведенные выше примеры на английском языке, бот фактически ожидает ввод данных на других языках, так что да, мы можем проанализировать «2 февраля» с помощью Recognizer, но у нас нет того же самого удачи с "2 de Fevereiro" или "2 Fevralya".