Сравнить строку с пользовательским вводом из чата 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);
});

Если я инициализирую новую строку var внутри программы, т.е. comp1 и используйте его, как показано ниже, чтобы сравнить, тогда это работает, так что это исключает, что мое утверждение if неверно.

if (comp1 == "hi") msg1 = "Hi, how may I help you."

1 ответ

Решение

BotBuilder имеет действие.triggerAction, которое, я думаю, послужит вам лучше (документы здесь). Вы должны создать отдельные диалоги для управления потоком из найденных совпадений. Кроме того, вы можете установить порог (балл), чтобы определить, насколько близко совпадение вы хотите сделать.

В приведенном ниже примере вторичный диалог запускается, когда упоминается слово "человек". Порог 0,8 допускает "человек" и "человек", но не "я человек".

Я не знаю ваших точных потребностей, но вы можете рассмотреть возможность использования LUIS и / или QnAMaker в качестве других вариантов.

Наконец, я включил contactRelationUpdate и firstRun в качестве опций для знакомства с ботом. contactRelationUpdate запускается только при первом добавлении бота в 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
});
Другие вопросы по тегам