Chatbot API

You can communicate with your chatbot through its GraphQL API. These basic tasks can be done by API:

Sending a request to the chatbot (postback)

This example illustrates, how to send a request with CURL

curl -X POST https://yourbot.com/api \
  -H "Authorization: <custom static token for other applications>" \
  -H "Content-Type: application/json; charset=utf-8" \
  -d @- << EOF

{
    "variables": {
        "pageId":"webchat",
        "senderId":"id-of-user",
        "action": "action-path"
    },
    "query":"mutation SendPostBack ($pageId:String!,$senderId:String!,$action:String!,$data:Any) { postBack (pageId:$pageId,senderId:$senderId,action:$action,data:$data) { status } }"
}
EOF

Or with plain javascript

const request = new XMLHttpRequest();

request.open('POST', 'https://my-bot.com/api', true);

request.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
request.setRequestHeader('Authorization', '<custom static token for other applications>');

request.onload = () => {
    let err = null;
    if (request.status >= 200 && request.status < 400) {
        const res = JSON.parse(request.response);
        if (res.data && (!res.errors || res.errors.length === 0)) {
            // success
        } else {
            err = res.errors && res.errors[0];
            // graphql error
        }
    } else {
        // error status
    }
};

request.onerror = () => {
    // request failed
};

request.send(JSON.stringify({
    query: `mutation SendPostBack (
        $pageId:String!,
        $senderId:String!,
        $action:String!,
        $data:Any
    ) {
        postBack (
            pageId:$pageId,
            senderId:$senderId,
            action:$action,
            data:$data
        ) {
            status
        }
    }`,
    variables: {
        pageId: 'webchat',
        senderId: 'id-of-user',
        action: 'action-path'
    }
}));

Setting up the API

Each chatbot should have the /api endpoint, which listens to the GraphQL requests authorized with JWT token or Static token.

const { GraphApi, validateBotApi, postBackApi } = require('wingbot');
const espress = require('express');
const channel = require('./instance-of-facebook-or-botservice');
const botFactory = require('./function-which-returns-instance-of-router');

const app = express();

// attach API's
const api = new GraphApi([
    postBackApi(channel),
    validateBotApi(botFactory, 'start', 'foobar')
], {
    token: '<wingbot token>',
    appToken: '<custom static token for other applications>'
});

app.post(
    '/api',
    express.json(),
    (req, res, next) => {
        const { body } = req;
        api.request(body, req.headers)
            .then((response) => {
                res.set({
                    'Content-Type': 'application/json'
                })
                    .send(response);
            })
            .catch(next);
    })
);

results matching ""

    No results matching ""