【发布时间】:2018-08-16 23:53:50
【问题描述】:
我已经盯着这个看了好几个小时,但找不到解决方案,尽管根据所有建议,它应该很容易 - https://docs.microsoft.com/en-us/bot-framework/nodejs/bot-builder-nodejs-proactive-messages。
我创建了一个简单的代码,它将“注册”用户并将他们的数据保存在 Azure 上的 cosmosDatabse 中。效果很好。
//ON "register" SAVE USER DATA AND SAY REGISTERED MESSAGE
bot.dialog('adhocDialog', function(session, args) {
var savedAddress = session.message.address;
session.userData.savedAddress = savedAddress;
//REGISTERED MESSAGE
session.endDialog("*Congratulations! You are now registered in our network! (goldmedal)*");
})
.triggerAction({
matches: /^register$/i
})
- 但是,如果满足某个条件,我如何访问该特定用户并向他发送消息?(实际上是在 HTTP 请求上)
我相当肯定我们必须在某处写入对话 ID 或用户 ID。问题是在哪里?
function startProactiveDialog(address) {
bot.beginDialog(address, "A notification!");
}
- 我认为这应该是多么简单。但是你在哪里指定用户呢?
【问题讨论】:
-
“我相当肯定我们必须在某处写对话 ID 或用户 ID”是什么意思。地址对象包含conversationId 以及UserId。如果您使用开始对话框,它将为该地址所属的用户(在该特定频道中)开始对话框。您还可以使用 bot.send() 发送消息而不是启动对话框。
-
我的意思是我必须以某种方式指定哪些用户会收到该消息。我不想联系每个存储的用户。只是一个特定的人。如果不是 ID,我该如何指定?
-
bot.send("this is a message", address)会将消息发送给该地址所属的用户。你已经捕捉到了。同样使用bot.beginDialog("dialog name", address)为该用户启动对话。无需指定任何 ID,它们都包含在地址对象中。只需传递该地址对象。如果您有任何机会使用 Typescript,您将能够看到地址对象的类型。它的IAddress,这就是那些发送方法所期望的。 -
你很有帮助, bot.send("Message", address) 是我会很好用的东西,我不明白的东西(你可能会发现它很明显,而且这就是为什么你没有解决它)是我如何指定地址。我使用 savedAddress = session.message.address;对于每一个写寄存器的人。在数据库中,我有每个人的文件。但是我如何指定那个特定人的对象呢?
-
如果我使用 bot.send("Message", savedAddress) 这可能是错误的,但我想不出别的,那么它不知道要给哪个人发短信。你知道我现在有什么问题吗?
标签: node.js azure botframework skype-bots