これは、Bot Framework(Nodejs)で初めての試みです。私は遅延メッセージをテストしたいと思います。たとえば、ボットはメッセージを受信してから5秒後に応答する必要があります。 は、だから私は、このコードを試してみました:MS Botのフレームワーク(Nodejs):セッションの有効期間と遅延メッセージ
var builder = require('botbuilder');
var connector = new builder.consoleconnector().listen();
var bot = new builder.universalbot(connector);
bot.dialog('/', function (session) {
if (!session.userData.TimeoutStarted) {
session.send("I'll answer in 5 seconds");
session.userData.TimeoutStarted = true;
setTimeout(function() {
session.send("Answer after 5 seconds");
session.userData.TimeoutStarted = false;
}, 5000);
} else {
session.send("Bot is busy");
}
});
しかし、これは動作しません。 setTimeout内のコールバック関数は起動しますが、セッションを持つすべての操作はまったく機能しません。
だから、私はここに可能な解決策を見つける:How to send message later in bot frameworkをし、私のコードを書き換える:
var builder = require('botbuilder');
var connector = new builder.ConsoleConnector().listen();
var bot = new builder.UniversalBot(connector);
bot.dialog('/', function (session) {
if (session.userData.Timeout > 0 && Date.now() - session.userData.Timeout > 5000)
session.userData.Timeout = 0;
if (!session.userData.Timeout) {
session.send("I'll answer in 5 seconds");
var reply = session.message;
setTimeout(function() {
reply.text = "Answer after 5 seconds";
bot.send(reply);
}, 5000);
session.userData.Timeout = Date.now();
} else {
session.send("Bot is busy");
}
});
このコードは動作しますが、非常に多くのチェックとひどい見えます。だから私はいくつか質問があります:
- なぜ最初のコード例がうまくいかないのですか?私はセッションの生涯に問題があると思いますし、セッションの生涯は何ですか?
- この例ではsession.userDataをどのように設定するのですか?ですから最初のコード例では、setTimeoutの中にコールバック関数の中に設定したいのですが、それもうまくいきません。
- 遅延回答を作成する最も良い方法は何ですか?
参加していただきありがとうございます!私はChatConnectorでそれをテストし、同じ問題があります:どちらもメッセージを送信せず、コールバック内に状態を保存しません。しかしセッションは複数の送信で動作する可能性があります。たとえば、メッセージを受信してシーケンスを試しただけの場合です。session.send( "a"); session.send( "b"); - できます; – Ceridan
本当ですか?それはChatConnectorを使って私と一緒に働いています。シークエンシングについては、正確ではありませんでしたが、GitHubの問題でその説明を見ることができます。基本的に、セッションオブジェクトはデフォルトでバッチ処理を行います。つまり、現在のセッションオブジェクトを送信する前に追加のメッセージが250ms待っています。それがあなたのシーケンシングで動作する理由ですが、最初のメッセージの後に5000ms待っても動作しません。 – Thegaram
おかげで申し訳ありません。私は再びそれをテストし、あなたは絶対に正しいです。これはChatConnectorで実際に動作します。ご協力ありがとうございました! – Ceridan