# botbuilder-json

> Microsoft Bot Builder adapter for JSON-based conversation

Latest version **0.1.3** (published 2018-05-09) · MIT license · 0 weekly downloads

## Install

```sh
npm install botbuilder-json
pnpm add botbuilder-json
yarn add botbuilder-json
bun add botbuilder-json
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.3 |
| Published | 2018-05-09 |
| First published | 2018-05-03 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 9.7 KB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| Author | Fernando de Oliveira |
| Maintainers | fedeoliv |
| Keywords | botbuilder, json |

## Links

- npm: https://www.npmjs.com/package/botbuilder-json
- npm.io page: https://npm.io/package/botbuilder-json

## Dependencies (2)

- [redis](https://npm.io/package/redis.md) ^2.8.0
- [botbuilder-redis-storage](https://npm.io/package/botbuilder-redis-storage.md) ^1.1.0

## Alternatives

- [@mapbox/jsonlint-lines-primitives](https://npm.io/package/@mapbox/jsonlint-lines-primitives.md) — 5.3M weekly downloads
- [reftools](https://npm.io/package/reftools.md) — 3.5M weekly downloads
- [@hey-api/openapi-ts](https://npm.io/package/@hey-api/openapi-ts.md) — 3.5M weekly downloads
- [@mapbox/geojson-rewind](https://npm.io/package/@mapbox/geojson-rewind.md) — 2.4M weekly downloads
- [turbo-stream](https://npm.io/package/turbo-stream.md) — 1.7M weekly downloads

## Recent versions

- 0.1.3 (latest) — 2018-05-09
- 0.1.2 — 2018-05-07
- 0.1.1 — 2018-05-04
- 0.1.0 — 2018-05-03

## README

# Bot Builder JSON Parser for Node.js
Bot Builder JSON is a Node.js framework designed for decoupled chat bots, interpreting JSON-based dialogs as [Bot Builder](http://docs.botframework.com/builder/node/overview/) features (like messages, prompts and much more). 

High Level Features:

* Built-in messages and prompts for simple things like Yes/No.
* Store and receive state data associated with the context of a conversation through Redis cache.
* Designed to run on all bot platforms supported by [Microsoft Bot Framework](http://botframework.com) (like WebChat, Facebook Messenger, Skype, Slack and much more).
 
## Bot state with Redis cache
    
Get the required module using npm.

    npm i --save botbuilder-json

In your main file (usually is app.js), create a new module instance.

    var builderJson = require('botbuilder-json');

Create the Redis storage (it is recommended to store host, auth and port data within a **.env** file).
 
    var options = {
        host: process.env.REDIS_HOST,
        auth: process.env.REDIS_AUTH,
        port: process.env.REDIS_PORT
    };

    var storage = builderJson.state.getRedisStorage(options);

*If you have a Redis cache service on Microsoft Azure, the REDIS_HOST will be: <HOST_NAME>.redis.cache.windows.net*

Set the Redis storage as the default bot state storage for your bot instance.

    var bot = new builder.UniversalBot(connector, function (session) {
        // Your bot settings
    }).set('storage', storage);

## Bot instance settings

Save your JSON-based dialog in the state conversation data as a new property.

    var bot = new builder.UniversalBot(connector, function (session) {
        session.conversationData['flow'] = 'YOUR JSON STRUCTURE';
        session.beginDialog('your-dialog');
    }).set('storage', storage);

## JSON-based dialog structure

To use the JSON-based conversation dialog successfully, it is assumed that your bot is using NLP (Natural Language Processing) through [Microsoft LUIS](https://azure.microsoft.com/en-us/services/cognitive-services/language-understanding-intelligent-service/) service.

The main idea for decoupled chat bots is that each LUIS intent has a machine state in JSON format. The structure is under development and more info will be available soon. 

This is a 'hello world' sample structure:

    [
        {
            "component": "luis_intent",
            "connections": {
                "0": [
                    {
                        "index": "0",
                        "id": "1524231759106"
                    }
                ]
            },
            "id": "1524231707131",
            "name": "intent1"
        },
        {
            "component": "message",
            "connections": {
                "0": [
                    {
                        "index": "0",
                        "id": "1524231886551"
                    }
                ]
            },
            "id": "1524231759106",
            "name": "Hello world!"
        },
        {
            "component": "end_dialog",
            "connections": {},
            "id": "1524231886551",
            "name": "Thank you!"
        }
    ]

## Dialogs

In your bot dialog file, create a new **BotBuilderAdapter** and build the adapter:

    function (session, adapter) {
        var adapter = new builderJson.BotBuilderAdapter(session);
        adapter.build();
    },
    // Callback for prompts
    function (session, results) {
        if (results.response) {
            var adapter = new builderJson.BotBuilderAdapter(session);
            adapter.handleResponse(results.response);
        }
    }

## References
Learn how to build great bots.

* [Core Concepts Guide](http://docs.botframework.com/builder/node/guides/core-concepts/)
* [Bot Builder for Node.js Reference](https://docs.botframework.com/en-us/node/builder/chat-reference/modules/_botbuilder_d_.html)
* [Manage state data](https://docs.microsoft.com/en-us/azure/bot-service/dotnet/bot-builder-dotnet-state)

---
_Source: https://npm.io/package/botbuilder-json · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
