将字符串与来自 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
});