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);
しかし、これは正しくありません。また、ダイアログが終了するたびに、このダイアログを 2 回呼び出す必要があります。これは、ユーザーが何かを入力してもダイアログが開始されるだけなので、何も起こらないためです。
AuthenticationDialog ケースの実行後に別の ContinueWith を配置しようとしましたが、機能しませんでした。
おそらくいくつかのコードスニペットで助けていただければ幸いです。私は完全に無知です。
ご挨拶