Created
May 25, 2018 13:50
-
-
Save odirleiborgert/8227ff46ca8693307a5373186b9e486c to your computer and use it in GitHub Desktop.
Example bot framework
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict" | |
// ---------------------------------------------------------------------- | |
require('dotenv-extended').load() | |
// Import packages | |
const restify = require('restify') | |
const builder = require('botbuilder') | |
const api = require('./helpers/api') | |
// ---------------------------------------------------------------------- | |
/** | |
* Bot Setup | |
*/ | |
const port = process.env.port || process.env.PORT || 3978 | |
const server = restify.createServer() | |
server.listen(port, () => { | |
console.log(`${server.name} listening to ${server.url}`) | |
}) | |
const connector = new builder.ChatConnector({ | |
appId: process.env.MICROSOFT_APP_ID, | |
appPassword: process.env.MICROSOFT_APP_PASSWORD | |
}) | |
const bot = new builder.UniversalBot(connector) | |
bot.use({ | |
// Usuário envia para o bot | |
receive: async (event, next) => { | |
if (event.type == 'message' || event.type == 'conversationUpdate') { | |
if (process.env.API) { | |
await api.post.receive(event) | |
} | |
} | |
next() | |
}, | |
// Bot envia para usuário | |
send: async (event, next) => { | |
if (event.type == 'message') { | |
if (process.env.API) { | |
await api.post.send(event) | |
} | |
} | |
next() | |
} | |
}) | |
bot.use(builder.Middleware.firstRun({ | |
version: 1.0, | |
dialogId: 'firstRun' | |
})) | |
bot.set('storage', new builder.MemoryBotStorage()) | |
// ---------------------------------------------------------------------- | |
// Provider api messages | |
server.post('/api/messages', connector.listen()) | |
// ---------------------------------------------------------------------- | |
bot.on('conversationUpdate', (session) => { | |
if (session.membersAdded) { | |
session.membersAdded.forEach((identity) => { | |
if (identity.id === session.address.bot.id) { | |
bot.beginDialog(session.address, 'firstRun') | |
} | |
}) | |
} | |
}) | |
// Add first run dialog | |
bot.dialog('firstRun', async (session) => { | |
session.userData.firstRun = true | |
session.delay(1000) | |
session.replaceDialog('start') | |
}).triggerAction({ | |
onFindAction: (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) | |
} | |
}, | |
matches: [ | |
/^Começar|Comecar$/i | |
] | |
}) | |
// ---------------------------------------------------------------------- | |
// Start | |
bot.dialog('start', require('./dialogs/start')) | |
.triggerAction({ | |
matches: [ | |
/^start|restart$/i | |
] | |
}) | |
// ---------------------------------------------------------------------- | |
// Hello | |
bot.dialog('hello', require('./dialogs/hello')) | |
// ---------------------------------------------------------------------- | |
/** | |
* Dialogs with Intents | |
*/ | |
const recognizer = new builder.LuisRecognizer(process.env.LUIS_MODEL_URL) | |
const intents = new builder.IntentDialog({ | |
recognizers: [recognizer] | |
}) | |
intents.onDefault(require('./dialogs/default')) | |
// Others | |
intents.matches('hello', require('./dialogs/hello')) | |
bot.dialog('/', intents) | |
// -------------------------------------------------------------------- |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment