UNPKG

botnaut

Version:

Facebook Messenger Chatbot Framework

256 lines (194 loc) 8.28 kB
## Classes <dl> <dt><a href="#Ai">Ai</a></dt> <dd></dd> </dl> ## Functions <dl> <dt><a href="#markAsHandled">markAsHandled([aiHandled])</a><code>Request</code></dt> <dd><p>Mark request as handled - usefull for AI analytics</p> </dd> </dl> {% raw %}<div id="Ai">&nbsp;</div>{% endraw %} ## Ai **Kind**: global class * [Ai](#Ai) * [.confidence](#Ai_confidence) : <code>number</code> * [.threshold](#Ai_threshold) : <code>number</code> * [.logger](#Ai_logger) : <code>Object</code> * [.prefixTranslator(prefix, req)](#Ai_prefixTranslator) * [.mockIntent([intent], [confidence])](#Ai_mockIntent) ⇒ <code>this</code> * [.onConfirmMiddleware(onIntentConfirmed, getMeta)](#Ai_onConfirmMiddleware) ⇒ <code>function</code> * [.register(model, options, prefix)](#Ai_register) ⇒ <code>WingbotModel</code> * [.match(intent, [confidence], [prefix])](#Ai_match) ⇒ <code>function</code> * [.navigate(knownIntents, [threshold], [confidence], [prefix])](#Ai_navigate) ⇒ <code>function</code> * [.makeSure(knownIntents, [threshold], [confidence], prefix)](#Ai_makeSure) ⇒ <code>function</code> {% raw %}<div id="Ai_confidence">&nbsp;</div>{% endraw %} ### ai.confidence : <code>number</code> Upper threshold - for match method and for navigate method **Kind**: instance property of [<code>Ai</code>](#Ai) {% raw %}<div id="Ai_threshold">&nbsp;</div>{% endraw %} ### ai.threshold : <code>number</code> Lower threshold - for navigate and makeSure methods **Kind**: instance property of [<code>Ai</code>](#Ai) {% raw %}<div id="Ai_logger">&nbsp;</div>{% endraw %} ### ai.logger : <code>Object</code> The logger (console by default) **Kind**: instance property of [<code>Ai</code>](#Ai) {% raw %}<div id="Ai_prefixTranslator">&nbsp;</div>{% endraw %} ### ai.prefixTranslator(prefix, req) The prefix translator - for request-specific prefixes **Kind**: instance method of [<code>Ai</code>](#Ai) | Param | Type | | --- | --- | | prefix | <code>string</code> | | req | <code>Request</code> | {% raw %}<div id="Ai_mockIntent">&nbsp;</div>{% endraw %} ### ai.mockIntent([intent], [confidence]) ⇒ <code>this</code> Usefull method for testing AI routes **Kind**: instance method of [<code>Ai</code>](#Ai) | Param | Type | Default | Description | | --- | --- | --- | --- | | [intent] | <code>string</code> | <code>null</code> | intent name | | [confidence] | <code>number</code> | <code></code> | the confidence of the top intent | **Example** ```javascript const { Tester, ai, Route } = require('bontaut'); const bot = new Route(); bot.use(['intentAction', ai.match('intentName')], (req, res) => { res.text('PASSED'); }); describe('bot', function () { it('should work', function () { ai.mockIntent('intentName'); const t = new Tester(bot); return t.text('Any text') .then(() => { t.actionPassed('intentAction'); t.any() .contains('PASSED'); }) }); }); ``` {% raw %}<div id="Ai_onConfirmMiddleware">&nbsp;</div>{% endraw %} ### ai.onConfirmMiddleware(onIntentConfirmed, getMeta) ⇒ <code>function</code> When user confirms their intent, onIntentConfirmed handler will be called. To create meta data from recognized request use getMeta handler. Its useful for updating training data for AI **Kind**: instance method of [<code>Ai</code>](#Ai) | Param | Type | Default | Description | | --- | --- | --- | --- | | onIntentConfirmed | <code>function</code> | | handler, which will be called when intent is confirmed | | getMeta | <code>function</code> | <code></code> | handler, which will be called when intent is confirmed | **Example** ```javascript const { Router, ai } = require('botnaut'); bot.use(ai.onConfirmMiddleware((senderId, intent, text, timestamp, meta) => { // log this information }, (req) => { // create and return meta data object })); bot.use(ai.makeSure(['intent1', 'intent2']), (req, res) => { console.log(req.confidences); // { intent1: 0.8604, intent2: undefined } res.text('What you mean?', res.ensures({ intent1: 'Intent one?', intent2: 'Intent two?', anyOther: 'Niether' })); }); ``` {% raw %}<div id="Ai_register">&nbsp;</div>{% endraw %} ### ai.register(model, options, prefix) ⇒ <code>WingbotModel</code> Registers Wingbot AI model **Kind**: instance method of [<code>Ai</code>](#Ai) | Param | Type | Description | | --- | --- | --- | | model | <code>string</code> | model name | | options | <code>Object</code> | the configuration | | [options.cacheSize] | <code>number</code> | remember number of caches | | [options.matches] | <code>number</code> | ask AI for number of matches | | prefix | <code>string</code> | model prefix | {% raw %}<div id="Ai_match">&nbsp;</div>{% endraw %} ### ai.match(intent, [confidence], [prefix]) ⇒ <code>function</code> Returns matching middleware **Kind**: instance method of [<code>Ai</code>](#Ai) **Returns**: <code>function</code> - - the middleware | Param | Type | Default | | --- | --- | --- | | intent | <code>string</code> \| <code>Array</code> | | | [confidence] | <code>number</code> | <code></code> | | [prefix] | <code>string</code> | | **Example** ```javascript const { Router, ai } = require('botnaut'); ai.register('app-model'); bot.use(ai.match('intent1'), (req, res) => { console.log(req.confidences); // { intent1: 0.9604 } res.text('Oh, intent 1 :)'); }); ``` {% raw %}<div id="Ai_navigate">&nbsp;</div>{% endraw %} ### ai.navigate(knownIntents, [threshold], [confidence], [prefix]) ⇒ <code>function</code> Create AI middleware, which resolves multiple replies and **makes postback, when it's confident** Confidence should be between `threshold` and `confidence` to proceed to next resolver **Kind**: instance method of [<code>Ai</code>](#Ai) **Returns**: <code>function</code> - - the middleware | Param | Type | Default | Description | | --- | --- | --- | --- | | knownIntents | <code>Array</code> \| <code>Object</code> | | list or map of accepted intents | | [threshold] | <code>number</code> | <code></code> | lower threshold | | [confidence] | <code>number</code> | <code></code> | upper threshold for confidence | | [prefix] | <code>string</code> | | model name | **Example** ```javascript const { Router, ai } = require('botnaut'); bot.use(ai.navigate(['intent1', 'intent2']), (req, res) => { console.log(req.confidences); // { intent1: 0.8604, intent2: undefined } res.text('What you mean?', res.ensures({ intent1: 'Intent one?', intent2: 'Intent two?', anyOther: 'Niether' })); }); ``` {% raw %}<div id="Ai_makeSure">&nbsp;</div>{% endraw %} ### ai.makeSure(knownIntents, [threshold], [confidence], prefix) ⇒ <code>function</code> Create AI middleware, which resolves multiple replies. Confidence should be between `threshold` and `confidence` to proceed to next resolver **Kind**: instance method of [<code>Ai</code>](#Ai) **Returns**: <code>function</code> - - the middleware | Param | Type | Default | Description | | --- | --- | --- | --- | | knownIntents | <code>Array</code> \| <code>Object</code> | | list or map of accepted intents | | [threshold] | <code>number</code> | <code></code> | lower threshold | | [confidence] | <code>number</code> | <code></code> | upper threshold for confidence | | prefix | <code>string</code> | | model name | **Example** ```javascript const { Router, ai } = require('botnaut'); bot.use(ai.makeSure(['intent1', 'intent2']), (req, res) => { console.log(req.confidences); // { intent1: 0.8604, intent2: undefined } res.text('What you mean?', res.ensures({ intent1: 'Intent one?', intent2: 'Intent two?', anyOther: 'Niether' })); }); ``` {% raw %}<div id="markAsHandled">&nbsp;</div>{% endraw %} ## markAsHandled([aiHandled]) ⇒ <code>Request</code> Mark request as handled - usefull for AI analytics **Kind**: global function | Param | Type | Default | Description | | --- | --- | --- | --- | | [aiHandled] | <code>boolean</code> | <code>true</code> | true by default | **Example** ```javascript bot.use('some other query', (req, res) => { req.markAsHandled(); }); ```