将字符串与来自 Skype 聊天的用户输入进行比较
Compare string with user input from skype chat
所以我想创建一个 Skype 机器人来回复发送给我的某些短语。特定的短语或文本将有不同的回复。问题是我坚持将用户输入与特定字符串进行比较。由于某种原因,我从聊天输入中获取的字符串参数不是字符串变量,因为任何形式的字符串操作都不适用于它,尽管 typeof 显示它是一个字符串。
我正在使用 node.js 编写机器人代码并使用 Bot Framework 模拟器对其进行测试。
以下是代码示例:
var restify = require('restify');
var builder = require('botbuilder');
// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
console.log('%s listening to %s', server.name, server.url);
});
// Create chat connector for communicating with the Bot Framework Service
var connector = new builder.ChatConnector({
appId: process.env.MicrosoftAppId,
appPassword: process.env.MicrosoftAppPassword
});
// Listen for messages from users
server.post('/api/messages', connector.listen());
// Receive messages from the user and respond by echoing each message back (prefixed with 'You said:')
var bot = new builder.UniversalBot(connector, function (session) {
var comp = "%s"
var comp1 = "hi"
//comp1 == comp && msg1 = "Hi, how may I help you."
var msg1 = ""
if (comp == "hi") msg1 = "Hi, how may I help you."
session.send(msg1, session.message.text);
});
如果我在程序中初始化一个新的字符串变量,即 comp1
并按如下方式使用它进行比较,那么它就可以工作,所以这排除了我的 if 语句是错误的。
if (comp1 == "hi") msg1 = "Hi, how may I help you."
BotBuilder 具有我认为可以更好地为您服务的 .triggerAction(文档 here)。您将创建单独的对话框来管理匹配项的流程。此外,您可以设置一个阈值(分数)来确定您希望匹配的接近程度。
在下面的示例中,当提到单词 'person' 时会触发辅助对话框。 0.8 阈值允许 'person' 和 'a person' 但不允许“我是一个人”。
我不知道您的确切需求,但您可以考虑使用 LUIS and/or QnAMaker 作为其他选项。
最后,我将 contactRelationUpdate 和 firstRun 作为机器人介绍的选项。 contactRelationUpdate 仅在 bot 首次添加到 Skype(或删除并重新添加)时运行。 firstRun 仅当用户首次与机器人交互时。
希望得到帮助!
var restify = require('restify');
var builder = require('botbuilder');
var botbuilder_azure = require("botbuilder-azure");
// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
console.log('%s listening to %s', server.name, server.url);
});
// Create chat connector for communicating with the Bot Framework Service
var connector = new builder.ChatConnector({
appId: process.env.MicrosoftAppId,
appPassword: process.env.MicrosoftAppPassword,
openIdMetadata: process.env.BotOpenIdMetadata
});
// Listen for messages from users
server.post('/api/messages', connector.listen());
var tableName = 'botdata';
var azureTableClient = new botbuilder_azure.AzureTableClient(tableName, process.env['AzureWebJobsStorage']);
var tableStorage = new botbuilder_azure.AzureBotStorage({ gzipData: false }, azureTableClient);
// Create your bot with a function to receive messages from the user
var bot = new builder.UniversalBot(connector);
bot.set('storage', tableStorage);
bot.on('contactRelationUpdate', function (message) {
if (message.action === 'add') {
name = message.user ? message.user.name : null;
var reply = new builder.Message()
.address(message.address)
.text("Hello %s... Thanks for adding me. Say 'hello' to see some great demos.", name || 'there');
bot.send(reply);
} else {
// delete their data
}
});
// Add first run dialog
bot.dialog('firstRun', function (session) {
session.userData.firstRun = true;
session.send("Hi. How may I help you?").replaceDialog('/');
}).triggerAction({
onFindAction: function (context, callback) {
// Only trigger if we've never seen user before
if (!context.userData.firstRun) {
// Return a score of 1.1 to ensure the first run dialog wins
callback(null, 1.1);
} else {
callback(null, 0.0);
}
}
});
bot.dialog('/', function (session) {
session.send('You said ' + session.message.text);
});
bot.dialog('/matchDialog', [
function (session) {
session.send('Looks like you made it');
}
])
.triggerAction({
matches: /person/i,
intentThreshold: 0.8
});
所以我想创建一个 Skype 机器人来回复发送给我的某些短语。特定的短语或文本将有不同的回复。问题是我坚持将用户输入与特定字符串进行比较。由于某种原因,我从聊天输入中获取的字符串参数不是字符串变量,因为任何形式的字符串操作都不适用于它,尽管 typeof 显示它是一个字符串。
我正在使用 node.js 编写机器人代码并使用 Bot Framework 模拟器对其进行测试。
以下是代码示例:
var restify = require('restify');
var builder = require('botbuilder');
// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
console.log('%s listening to %s', server.name, server.url);
});
// Create chat connector for communicating with the Bot Framework Service
var connector = new builder.ChatConnector({
appId: process.env.MicrosoftAppId,
appPassword: process.env.MicrosoftAppPassword
});
// Listen for messages from users
server.post('/api/messages', connector.listen());
// Receive messages from the user and respond by echoing each message back (prefixed with 'You said:')
var bot = new builder.UniversalBot(connector, function (session) {
var comp = "%s"
var comp1 = "hi"
//comp1 == comp && msg1 = "Hi, how may I help you."
var msg1 = ""
if (comp == "hi") msg1 = "Hi, how may I help you."
session.send(msg1, session.message.text);
});
如果我在程序中初始化一个新的字符串变量,即 comp1
并按如下方式使用它进行比较,那么它就可以工作,所以这排除了我的 if 语句是错误的。
if (comp1 == "hi") msg1 = "Hi, how may I help you."
BotBuilder 具有我认为可以更好地为您服务的 .triggerAction(文档 here)。您将创建单独的对话框来管理匹配项的流程。此外,您可以设置一个阈值(分数)来确定您希望匹配的接近程度。
在下面的示例中,当提到单词 'person' 时会触发辅助对话框。 0.8 阈值允许 'person' 和 'a person' 但不允许“我是一个人”。
我不知道您的确切需求,但您可以考虑使用 LUIS and/or QnAMaker 作为其他选项。
最后,我将 contactRelationUpdate 和 firstRun 作为机器人介绍的选项。 contactRelationUpdate 仅在 bot 首次添加到 Skype(或删除并重新添加)时运行。 firstRun 仅当用户首次与机器人交互时。
希望得到帮助!
var restify = require('restify');
var builder = require('botbuilder');
var botbuilder_azure = require("botbuilder-azure");
// Setup Restify Server
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
console.log('%s listening to %s', server.name, server.url);
});
// Create chat connector for communicating with the Bot Framework Service
var connector = new builder.ChatConnector({
appId: process.env.MicrosoftAppId,
appPassword: process.env.MicrosoftAppPassword,
openIdMetadata: process.env.BotOpenIdMetadata
});
// Listen for messages from users
server.post('/api/messages', connector.listen());
var tableName = 'botdata';
var azureTableClient = new botbuilder_azure.AzureTableClient(tableName, process.env['AzureWebJobsStorage']);
var tableStorage = new botbuilder_azure.AzureBotStorage({ gzipData: false }, azureTableClient);
// Create your bot with a function to receive messages from the user
var bot = new builder.UniversalBot(connector);
bot.set('storage', tableStorage);
bot.on('contactRelationUpdate', function (message) {
if (message.action === 'add') {
name = message.user ? message.user.name : null;
var reply = new builder.Message()
.address(message.address)
.text("Hello %s... Thanks for adding me. Say 'hello' to see some great demos.", name || 'there');
bot.send(reply);
} else {
// delete their data
}
});
// Add first run dialog
bot.dialog('firstRun', function (session) {
session.userData.firstRun = true;
session.send("Hi. How may I help you?").replaceDialog('/');
}).triggerAction({
onFindAction: function (context, callback) {
// Only trigger if we've never seen user before
if (!context.userData.firstRun) {
// Return a score of 1.1 to ensure the first run dialog wins
callback(null, 1.1);
} else {
callback(null, 0.0);
}
}
});
bot.dialog('/', function (session) {
session.send('You said ' + session.message.text);
});
bot.dialog('/matchDialog', [
function (session) {
session.send('Looks like you made it');
}
])
.triggerAction({
matches: /person/i,
intentThreshold: 0.8
});