Im работает над ботом с C# Bot Builder.Как объединить несколько диалогов?
Теперь я знаю, что существует довольно много примеров того, как иметь дело с цепочками диалогов. Подобно FacebookAuthDialog или ChainedEchoDialog.
Что я хочу сделать: пользователю необходимо пройти диалог авторизации, и, когда это будет сделано, я хочу немедленно поместить пользователя в «UserDialog», где он может использовать все функции, необходимые для его аутентификации.
Вот мой код:
public static readonly IDialog<string> dialog = Chain
.PostToChain()
.Switch(
new Case<Message, IDialog<string>>((msg) =>
{
var userInfo = new StorageClient().GetUser(msg.From.Id);
if (userInfo != null && userInfo.Activated)
return false;
else
return true;
}, (ctx, msg) =>
{
return Chain.ContinueWith(new AuthenticationDialog(),
async (context, res) =>
{
var result = await res;
return Chain.Return($"You successfully activated your account.");
});
}),
new Case<Message, IDialog<string>>((msg) =>
{
var userInfo = new StorageClient().GetUser(msg.From.Id);
if (userInfo != null && userInfo.Activated)
return true;
else
return false;
}, (ctx, msg) =>
{
var service = new LuisService();
// User wants to login, send the message to Facebook Auth Dialog
return Chain.ContinueWith(new UserDialog(msg, service),
async (context, res) =>
{
return Chain.Return($"");
});
}),
new DefaultCase<Message, IDialog<string>>((ctx, msg) =>
{
return Chain.Return("Something went wrong.");
})
).Unwrap().PostToUser();
Этот вид работ. Я вызываю это диалоговое окно из MessageController с помощью
await Conversation.SendAsync(message,() => ManagingDialog.dialog);
Но это не кажется правильным. Я также должен вызывать этот диалог дважды каждый раз, когда диалог завершается, потому что когда пользователь вводит что-то, ничего не происходит, так как это только запускает диалог.
Я попытался поставить еще один ContinueWith после выполнения проверки подлинностиDialog Case, но я не мог заставить его работать.
Я бы очень признателен за помощь в некоторых фрагментах кода. Я совершенно не знаю.
Привет
Ну, вы, возможно, заметили, что первоначальный вопрос есть точно так же, как тот, который я задал здесь. Это потому, что я тот же парень, который задал вопрос. ;) – Eiren