[英]Bot Framework retrieve user address from Cosmos DB in order to send a Proactive message NODE JS
我从未与Cosmos DB合作,所以我真的不知道连接的工作方式。 我很久没有搜索答案,但是没有找到答案。 在文档中,我确实发现了如何将Bot与我的Cosmos DB连接起来。
我需要的答案:
//REGISTER
)时,检索保存在数据库中的用户地址的代码是什么? -在//TEST
我有一个简单的代码来发送主动消息,如您所见,现在,它仅发送到App中地址的当前状态。 相反,我需要从保存用户的Azure Cosmos数据库中检索它。
我非常感谢任何至少会尝试回答的人。 =)
内联代码:
var restify = require('restify');
var builder = require('botbuilder');
var fs = require('fs');
//RESTIFY SETUP
var https_options = {
key: fs.readFileSync('./herobot.hero-translating.com.key'), //on current folder
certificate: fs.readFileSync('./herobot.hero-translating.com.crt')
};
var server = restify.createServer(https_options);
server.listen(process.env.port || process.env.PORT || 8081, function() {
console.log('%s listening to %s', server.name, server.url);
});
//BOT CONNECTOR
var connector = new builder.ChatConnector({
appId: 'HIDDEN',
appPassword: 'HIDDEN'
});
//COSMOS DB CONNECTION
var azure = require('botbuilder-azure');
var documentDbOptions = {
host: 'https://HIDDEN.documents.azure.com:443/',
masterKey: 'HIDDEN',
database: 'HIDDEN',
collection: 'HIDDEN',
};
var docDbClient = new azure.DocumentDbClient(documentDbOptions);
var cosmosStorage = new azure.AzureBotStorage({ gzipData: false }, docDbClient);
var bot = new builder.UniversalBot(connector);
bot.set('storage', cosmosStorage);
server.post('/api/smessages', connector.listen());
//DIALOGS
String.prototype.contains = function(content) {
return this.indexOf(content) !== -1;
};
bot.dialog('/', function(session) {
function sendProactiveMessage(address) {
var msg = new builder.Message().address(address);
msg.text('Test message.');
msg.textLocale('en-US');
bot.send(msg);
}
const userText = session.message.text.toLowerCase();
String.prototype.is = function() {
const args = Array.prototype.slice.call(arguments);
const text = userText;
for (let i = 0; i < args.length; i++)
if (text.includes(args[i])) return true;
return false;
};
//Greeting
if (userText.is('hello', 'hi', 'good morning', 'good afternoon', 'hey'))
session.send(`Hello.`);
//Thanks
else if (userText.is('thank you', 'thanks', 'thx'))
session.send(`You are welcome!`);
//REGISTER
else if (userText.is('register')) {
var savedAddress = session.message.address;
session.userData.savedAddress = savedAddress;
//REGISTERED MESSAGE
session.send("*Congratulations! You are now registered in our network! (goldmedal)*");
console.log(JSON.stringify(savedAddress));
}
//TEST
else if (userText.is('test')) {
sendProactiveMessage(savedAddress);
}
//Unrecognized messages
else
session.send(`I don't understand your input.`);
});
我认为您正在寻找的是从Cosmos DB向用户发送主动消息。
当您在代码中注册用户时,您将session.message.address保存到会话用户的userData中。 您可以在Cosmos DB中观察此数据。 在我的机器人模拟器上运行,我将在Cosmos DB / botdocs / botdata中看到3个文档(最少):
default-user本质上是机器人的用户ID。 然后将地址(session.userData.savedAddress = savedAddress;)保存在userData中。
要发送主动消息,您只需要在Cosmos DB中查询带有saveAddress的文档(1.),然后发送消息。
你可以参考我的代码 。 该样本的当前触发器在5秒钟后使用计时器,它将向所有注册用户发送主动消息。 您可以更改查询以选择特定用户,也可以将触发器更改为http请求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.