telegraf-wit

wit.ai middleware for Telegraf

Usage no npm install needed!

<script type="module">
  import telegrafWit from 'https://cdn.skypack.dev/telegraf-wit';
</script>

README

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
});