wit.ai middleware for Telegraf
JavaScript
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples
lib
test
.editorconfig
.eslintignore
.eslintrc
.gitignore
.travis.yml
LICENSE
package.json
readme.md

readme.md

Build Status NPM Version js-standard-style

Telegraf + wit.ai

wit.ai middleware for Telegraf.

Easily create text bots that humans can chat with on their preferred messaging platform.

-- wit.ai

Installation

$ npm install telegraf-wit

Message processing example

const Telegraf = require('telegraf')
const TelegrafWit = require('telegraf-wit')

const telegraf = new Telegraf(process.env.BOT_TOKEN)
const wit = new TelegrafWit(process.env.WIT_TOKEN)

telegraf.on('text', (ctx) => {
  return wit.getMeaning(ctx.message.text)
    .then((result) => {
      // reply to user with wit result
      return ctx.reply(JSON.stringify(result, null, 2))
    })
})

telegraf.startPolling()

Story processing example

const Telegraf = require('telegraf')
const TelegrafWit = require('telegraf-wit')

const telegraf = new Telegraf(process.env.BOT_TOKEN)
const wit = new TelegrafWit(process.env.WIT_TOKEN)

// Session for storing story context
telegraf.use(Telegraf.memorySession())

// Add wit conversation middleware
telegraf.use(wit.middleware())

// Merge handlers
wit.on('merge', (ctx) => {
  ctx.wit.context.city = firstEntityValue(ctx.wit.entities, 'location')
})

// Message handlers
wit.on('message', (ctx) => ctx.reply(ctx.wit.message))

// Action handlers
wit.on('get-forecast', (ctx) => {
  if (ctx.wit.confidence > 0.02) {
    ctx.wit.context.forecast = 'As usual :)'
  }
})

telegraf.startPolling()

There are some other examples.

Error Handling

By default TelegrafWit will print all wit errors to stderr. To perform custom error-handling logic you can set onError handler:

wit.on('error', (ctx) => {
  console.error('wit error', err)
}

API

TelegrafWit.new(token)

Initialize new TelegrafWit.

Param Type Description
token String Wit Token

TelegrafWit.meaning(message, msgId, threadId, context) => Promise

Returns the extracted meaning from a sentence, based on the context.

Param Type Description
message String User message
messageId String Message id
threadId String Thread id
context Object(Optional) User’s context

TelegrafWit.on(action, fn, [fn, ...])

Adds merge handlers to app

Param Type Description
action String action type(merge, message, %function name%)
fn Function Middleware

Telegraf context

Telegraf user context props:

wit.on('message', (ctx) => {
  ctx.wit.context      // wit context
  ctx.wit.confidence   // confidence
  ctx.wit.message      // wit message
  ctx.wit.entities     // entities
  ctx.wit.quickReplies // Quick replies
});