Noncollinear Perpendicular Microcrystalline

    @kikinteractive/kik

    2.2.1 • Public • Published

    Kik Node API

    NPM Version Build Status Coverage Status

    Getting Started

    Use this library to communicate with the Kik API to develop a bot for Kik Messenger. Got to dev.kik.com to learn more and start building a bot.

    Contributing

    This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to bots@kik.com.

    If you're looking to contribute to the kik package, check out the Contributing Guide.

    Getting Help

    Here are other resources for using Kik node:

    • stackoverflow.com is a great place to get answers about building a Kik chat bot.
    • Go to dev.kik.com to get started building a bot, scan the code at dev.kik.com and talk to Botsworth.

    License

    The Kik bot library is released under the terms of the MIT license. See License for more information or see https://opensource.org/licenses/MIT.

    How To

    Creating a basic Kik bot is simple:

    1. Import @kikinteractive/kik
    2. Create a bot with the username and API key you got from https://dev.kik.com/
    3. Configure your bot as described in the documentation
    4. Add the bot as middleware to your server with bot.incoming()
    5. Start your web server

    You can use any node-style web server to host your Kik bot. Add handlers to your bot by calling bot.onTextMessage(...) and get notified whenever a user messages you. Take action on the messages as they come in and call message.reply(...) to respond to the message within the chat the message was sent from.

    Check out the full API documentation for more advanced uses.

    Your first echo bot

    'use strict';
    
    let util = require('util');
    let http = require('http');
    let Bot  = require('@kikinteractive/kik');
    
    // Configure the bot API endpoint, details for your bot
    let bot = new Bot({
        username: 'echo.bot',
        apiKey: '7b939d69-e840-4d22-aab8-4188c2198f8a',
        baseUrl: 'https://kik-echobot.ngrok.io/'
    });
    
    bot.updateBotConfiguration();
    
    bot.onTextMessage((message) => {
        message.reply(message.body);
    });
    
    // Set up your server and start listening
    let server = http
        .createServer(bot.incoming())
        .listen(process.env.PORT || 8080);

    Sending a message to a specific user

    You can send a targeted message to a user once they have subscribed to your bot. If you want to send someone a message, just call bot.send(...) with their username. You don't need to specify a chat ID here since you are sending it directly to the user, not within a specific chat.

    // To one user (a.username)
    bot.send(Bot.Message.text('Hey, nice to meet you!'), 'a.username');
    
    // You can use a shorthand for text messages to keep things a bit cleaner
    bot.send('Getting started is super easy!', 'a.username');

    Sending a picture message

    If you want to send a photo to a user you can send a picture message. The API will download the image you supply and pass it along. You have to set the attribution name and icon for the message so the knows where the content came from even if it's forwarded later.

    bot.send(Bot.Message.picture('http://i.imgur.com/oalyVlU.jpg')
        .setAttributionName('Imgur')
        .setAttributionIcon('http://s.imgur.com/images/favicon-96x96.png'),
        'a.username');

    Greeting a user by name

    Whenever a user subscribes to your bot, your bot will receive a start-chatting message. This message gives you the chance to say hello to the user and let them know what your bot is about.

    You might want to greet your new user by name. You can use the bot.getUserProfile(...) method to request information about users who have subscribed to your bot.

    bot.onStartChattingMessage((message) => {
        bot.getUserProfile(message.from)
            .then((user) => {
                message.reply(`Hey ${user.firstName}!`);
            });
    });

    Adding multiple handlers

    Separating different states into multiple message handlers can keep your bot logic under control. If you call next from within your handler, you allow the next handler in the chain to run, otherwise, handling of the incoming message will end with the current handler.

    bot.onTextMessage((message, next) => {
        const userState = getUserState(message.from);
    
        if (!userState.inIntroState) {
            // Send the user the intro state
            // ...
    
            return;
        }
    
        // Allow the next handler take over
        next();
    });
    
    bot.onTextMessage((message) => {
        searchFor(message.body)
            .then((result) => {
                message.reply(result);
            });
    });

    Setting a static keyboard

    You can specify a static keyboard for your bot when a user starts mentioning it in a conversation:

    let bot = new Bot({
        username: 'echo.bot',
        apiKey: '7b939d69-e840-4d22-aab8-4188c2198f8a',
        baseUrl: 'https://kik-echobot.ngrok.io/',
        staticKeyboard: new Bot.ResponseKeyboard(['Option 1', 'Option 2'])
    });

    API Documentation

    Bot

    Parses user messages sent from Kik's server. Use the .incoming() method to return the middleware in a form of function (req, res, next) {}. The middleware will automatically decode the request, and call the appropriate on functions based on the content type. Additional middleware can be used by calling the .use(handler) method.

    Kind: global class
    See: https://bots.kik.com

    new Bot()

    Param Type Description
    options.username string
    options.apiKey string
    [options.baseUrl] string
    [options.incomingPath] string Set true to enable polling or set options
    [options.manuallySendReadReceipts] boolean
    [options.receiveReadReceipts] boolean
    [options.receiveDeliveryReceipts] boolean
    [options.receiveIsTyping] boolean
    [options.skipSignatureCheck] boolean Verify the authenticity of inbound requests. For testing only, do not disable for a bot in production.
    [options.staticKeyboard] ResponseKeyboard Static keyboard for your bot

    bot.use(handler)

    Kind: instance method of Bot

    Param Type
    handler MessageHandlerCallback

    bot.updateBotConfiguration()

    Kind: instance method of Bot

    bot.onTextMessage([text], handler)

    Kind: instance method of Bot

    Param Type
    [text] string | regexp
    handler MessageHandlerCallback

    Example

    bot.onTextMessage((incoming, next) => {
         // reply handles the message and stops other handlers
         // from being called for this message
         incoming.reply(`Hi I'm ${bot.username}`);
     });

    Example

    bot.onTextMessage((incoming, next) => {
         if (incoming.body !== 'Hi') {
             // we only handle welcoming, let someone else deal with this
             // message
             return next();
         }
    
         // say hello...
     });

    Example

    bot.onTextMessage(/^hi|hello|bonjour$/i, (incoming, next) => {
         // say hello...
     });

    bot.onLinkMessage(handler)

    Kind: instance method of Bot

    Param Type
    handler MessageHandlerCallback

    bot.onPictureMessage(handler)

    Kind: instance method of Bot

    Param Type
    handler MessageHandlerCallback

    bot.onVideoMessage(handler)

    Kind: instance method of Bot

    Param Type
    handler MessageHandlerCallback

    bot.onStartChattingMessage(handler)

    Kind: instance method of Bot

    Param Type
    handler MessageHandlerCallback

    bot.onScanDataMessage(handler)

    Kind: instance method of Bot

    Param Type
    handler MessageHandlerCallback

    bot.onFriendPickerMessage(handler)

    Kind: instance method of Bot

    Param Type
    handler MessageHandlerCallback

    bot.onStickerMessage(handler)

    Kind: instance method of Bot

    Param Type
    handler MessageHandlerCallback

    bot.onIsTypingMessage(handler)

    Kind: instance method of Bot

    Param Type
    handler MessageHandlerCallback

    bot.onDeliveryReceiptMessage(handler)

    Kind: instance method of Bot

    Param Type
    handler MessageHandlerCallback

    bot.onReadReceiptMessage(handler)

    Kind: instance method of Bot

    Param Type
    handler MessageHandlerCallback

    bot.getKikCodeUrl() ⇒ promise.<string>

    Creates a Kik Code with the intended options and returns the URL of the Kik Code image. If the options specify a data Kik Code this will hit the Kik Code service and store that data for you.

    Kind: instance method of Bot

    Param Type Description
    [options.data] string | object The data to be sent back to this bot after the user scans
    [options.width] number Width of the Kik code in the PNG image
    [options.height] number Height of the Kik code in the PNG image
    [options.size] number Helper for the width and height in the PNG image
    [options.color] number The color which the user will see after scanning. See {KikCode.Colors}

    bot.getUserProfile() ⇒ promise.<UserProfile>

    Kind: instance method of Bot

    bot.broadcast(messages, recipients)

    Kind: instance method of Bot

    Param Type
    messages array
    recipients array

    bot.send(messages, recipient, [chatId])

    Kind: instance method of Bot

    Param Type
    messages array
    recipient string
    [chatId] string

    bot.incoming()

    Handles the incoming requests for messages configuration.

    Kind: instance method of Bot

    bot.outgoing(handler)

    Adds a post processing handler for all outgoing messages. Messages passed to this handler will be JSON objects.

    Kind: instance method of Bot

    Param Type
    handler MessageHandlerCallback

    Example

    bot.outgoing((outgoing, next) => {
         console.log('Outgoing message:', outgoing);
         next();
    });

    IncomingMessage

    Object that allows you to send a response to user messages or ignore them.

    Kind: global class

    incomingMessage.reply(messages) ⇒ promise.<object>

    Kind: instance method of IncomingMessage

    Param Type
    messages Message | array.<Message>

    incomingMessage.markRead() ⇒ promise.<object>

    Kind: instance method of IncomingMessage

    incomingMessage.startTyping() ⇒ promise.<object>

    Kind: instance method of IncomingMessage

    incomingMessage.stopTyping() ⇒ promise.<object>

    Kind: instance method of IncomingMessage

    incomingMessage.ignore()

    Kind: instance method of IncomingMessage

    UserProfile

    See https://dev.kik.com/#/docs/messaging#user-profiles

    Kind: global class

    userProfile.displayName ⇒ string

    Kind: instance property of UserProfile

    userProfile.username ⇒ string

    Kind: instance property of UserProfile

    userProfile.firstName ⇒ string

    Kind: instance property of UserProfile

    userProfile.lastName ⇒ string

    Kind: instance property of UserProfile

    userProfile.profilePicUrl ⇒ string

    Kind: instance property of UserProfile

    userProfile.profilePicLastModified ⇒ number

    Kind: instance property of UserProfile

    userProfile.timezone ⇒ string

    Kind: instance property of UserProfile

    Message

    Object that stores a specific message that can be sent to/received from a user. The static methods of Message are factories that generate a specific kind of message.

    Kind: global class

    message.from ⇒ string

    See https://dev.kik.com/#/docs/messaging#receiving-messages

    Kind: instance property of Message

    message.id ⇒ string

    See https://dev.kik.com/#/docs/messaging#receiving-messages

    Kind: instance property of Message

    message.chatId ⇒ string

    See https://dev.kik.com/#/docs/messaging#receiving-messages

    Kind: instance property of Message

    message.messageIds ⇒ array

    See https://dev.kik.com/#/docs/messaging#receipts

    Kind: instance property of Message

    message.readReceiptRequested ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#receipts

    Kind: instance property of Message

    message.stickerPackId ⇒ string

    See https://dev.kik.com/#/docs/messaging#sticker

    Kind: instance property of Message

    message.scanData ⇒ string

    See https://dev.kik.com/#/docs/messaging#kik-codes-api

    Kind: instance property of Message

    message.stickerUrl ⇒ string

    See https://dev.kik.com/#/docs/messaging#sticker

    Kind: instance property of Message

    message.timestamp ⇒ number

    See https://dev.kik.com/#/docs/messaging#common-fields

    Kind: instance property of Message

    message.type ⇒ string

    See https://dev.kik.com/#/docs/messaging#message-formats

    Kind: instance property of Message

    message.kikJsData ⇒ object

    See https://dev.kik.com/#/docs/messaging#link

    Kind: instance property of Message

    message.picUrl ⇒ string

    See https://dev.kik.com/#/docs/messaging#link

    Kind: instance property of Message

    message.noForward ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#link

    Kind: instance property of Message

    message.isTyping ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#is-typing

    Kind: instance property of Message

    message.body ⇒ string

    See https://dev.kik.com/#/docs/messaging#text

    Kind: instance property of Message

    message.text ⇒ string

    See https://dev.kik.com/#/docs/messaging#link

    Kind: instance property of Message

    message.title ⇒ string

    See https://dev.kik.com/#/docs/messaging#link

    Kind: instance property of Message

    message.url ⇒ string

    See https://dev.kik.com/#/docs/messaging#link

    Kind: instance property of Message

    message.videoUrl ⇒ string

    See https://dev.kik.com/#/docs/messaging#video

    Kind: instance property of Message

    message.delay ⇒ number

    See https://dev.kik.com/#/docs/messaging#common-fields

    Kind: instance property of Message

    message.typeTime ⇒ number

    See https://dev.kik.com/#/docs/messaging#text

    Kind: instance property of Message

    message.attributionName ⇒ string

    See https://dev.kik.com/#/docs/messaging#attribution

    Kind: instance property of Message

    message.attributionIcon ⇒ string

    See https://dev.kik.com/#/docs/messaging#attribution

    Kind: instance property of Message

    message.loop ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#video

    Kind: instance property of Message

    message.muted ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#video

    Kind: instance property of Message

    message.autoplay ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#video

    Kind: instance property of Message

    message.noSave ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#video

    Kind: instance property of Message

    message.participants ⇒ array

    See https://dev.kik.com/#/docs/messaging#participants

    Kind: instance property of Message

    message.chatType ⇒ array

    See https://dev.kik.com/#/docs/messaging#all-received-chat-messages-excluding-receipts (will be undefined for receipt messages)

    Kind: instance property of Message

    message.mention ⇒ string

    See https://dev.kik.com/#/docs/messaging#mention

    Kind: instance property of Message

    message.picked ⇒ string

    See https://dev.kik.com/#/docs/messaging#friend-picker

    Kind: instance property of Message

    message.metadata ⇒ object

    Kind: instance property of Message

    message.isTextMessage() ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#text

    Kind: instance method of Message

    message.isInPublicChat() ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#all-received-chat-messages-excluding-receipts

    Kind: instance method of Message

    message.isInPrivateChat() ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#all-received-chat-messages-excluding-receipts

    Kind: instance method of Message

    message.isInDirectChat() ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#all-received-chat-messages-excluding-receipts

    Kind: instance method of Message

    message.isLinkMessage() ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#link

    Kind: instance method of Message

    message.isPictureMessage() ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#picture

    Kind: instance method of Message

    message.isVideoMessage() ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#video

    Kind: instance method of Message

    message.isStartChattingMessage() ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#start-chatting

    Kind: instance method of Message

    message.isScanDataMessage() ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#scan-data

    Kind: instance method of Message

    message.isFriendPickerMessage() ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#friend-picker

    Kind: instance method of Message

    message.isStickerMessage() ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#sticker

    Kind: instance method of Message

    message.isIsTypingMessage() ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#is-typing

    Kind: instance method of Message

    message.isDeliveryReceiptMessage() ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#receipts

    Kind: instance method of Message

    message.isReadReceiptMessage() ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#receipts

    Kind: instance method of Message

    message.isMention() ⇒ boolean

    See https://dev.kik.com/#/docs/messaging#mentions

    Kind: instance method of Message

    message.toJSON() ⇒ object

    Constructs a JSON payload ready to be sent to the bot messaging API

    Kind: instance method of Message

    message.addTextResponse(text) ⇒ Message

    See https://dev.kik.com/#/docs/messaging#keyboards

    Kind: instance method of Message

    Param Type
    text string

    message.addResponseKeyboard(suggestions, [isHidden], [user]) ⇒ Message

    See https://dev.kik.com/#/docs/messaging#keyboards

    Kind: instance method of Message

    Param Type
    suggestions array
    [isHidden] boolean
    [user] string

    message.setKikJsData(kikJsData) ⇒ Message

    Kind: instance method of Message

    Param Type
    kikJsData object

    message.setPicUrl(picUrl) ⇒ Message

    Kind: instance method of Message

    Param Type
    picUrl string

    message.setNoForward(noForward) ⇒ Message

    Kind: instance method of Message

    Param Type
    noForward boolean

    message.setIsTyping(isTyping) ⇒ Message

    Kind: instance method of Message

    Param Type
    isTyping boolean

    message.setMessageIds(messageIds) ⇒ Message

    Kind: instance method of Message

    Param Type
    messageIds array

    message.setBody(body) ⇒ Message

    Kind: instance method of Message

    Param Type
    body string

    message.setText(text) ⇒ Message

    Kind: instance method of Message

    Param Type
    text string

    message.setTitle(title) ⇒ Message

    Kind: instance method of Message

    Param Type
    title string

    message.setUrl(url) ⇒ Message

    Kind: instance method of Message

    Param Type
    url string

    message.setVideoUrl(videoUrl) ⇒ Message

    Kind: instance method of Message

    Param Type
    videoUrl string

    message.setDelay(delay) ⇒ Message

    Kind: instance method of Message

    Param Type
    delay number

    message.setTypeTime(typeTime) ⇒ Message

    Kind: instance method of Message

    Param Type
    typeTime number

    message.setAttributionName(attributionName) ⇒ Message

    Kind: instance method of Message

    Param Type
    attributionName string

    message.setAttributionIcon(attributionIcon) ⇒ Message

    Kind: instance method of Message

    Param Type
    attributionIcon string

    message.setLoop(loop) ⇒ Message

    Kind: instance method of Message

    Param Type
    loop boolean

    message.setMuted(muted) ⇒ Message

    Kind: instance method of Message

    Param Type
    muted boolean

    message.setAutoplay(autoplay) ⇒ Message

    Kind: instance method of Message

    Param Type
    autoplay boolean

    message.setNoSave(noSave) ⇒ Message

    Kind: instance method of Message

    Param Type
    noSave boolean

    message.setMention(mention) ⇒ Message

    Kind: instance method of Message

    Param Type
    mention string

    Message.text() ⇒ Message

    See https://dev.kik.com/#/docs/messaging#text

    Kind: static method of Message

    Message.link() ⇒ Message

    See https://dev.kik.com/#/docs/messaging#link

    Kind: static method of Message

    Message.picture() ⇒ Message

    See https://dev.kik.com/#/docs/messaging#picture

    Kind: static method of Message

    Message.video() ⇒ Message

    See https://dev.kik.com/#/docs/messaging#video

    Kind: static method of Message

    Message.isTyping() ⇒ Message

    See https://dev.kik.com/#/docs/messaging#is-typing

    Kind: static method of Message

    Message.readReceipt() ⇒ Message

    See https://dev.kik.com/#/docs/messaging#receipts

    Kind: static method of Message

    Message.fromJSON(json) ⇒ Message

    Constructs a new {Message} object from a JSON-encoded payload See https://dev.kik.com/#/docs

    Kind: static method of Message

    Param Type
    json object

    ResponseKeyboard

    new Bot.ResponseKeyboard([responses], [hidden], [to])

    Param Type
    [responses] array
    [hidden] boolean
    [to] string

    Example

    let keyboard = new Bot.ResponseKeyboard(['Option 1', 'Option 2']);

    Example

    let keyboard = new Bot.ResponseKeyboard(['Option 1', 'Option 2'], true, 'kikteam');

    message.addResponse(response) ⇒ ResponseKeyboard

    Kind: instance method of ResponseKeyboard

    Param Type
    response string | object

    Example

    let keyboard = new Bot.ResponseKeyboard();
    keyboard.addResponse(Bot.Response.friendPicker('Pick a friend'));
    keyboard.addResponse('Option 1');
    keyboard.addResponse('Option 2');

    KikCode

    See https://dev.kik.com/#/docs/messaging#kik-codes-api

    Kind: global class

    KikCode.Colors : enum

    See https://dev.kik.com/#/docs/messaging#kik-code-colors

    Kind: static enum property of KikCode
    Properties

    Name Type Default Description
    KikBlue number 0 #42B4E6
    Turquoise number 1 #42DFD8
    Mint number 2 #24D7A7
    Forest number 3 #25912B
    KikGreen number 4 #87D300
    Sunshine number 5 #F8CB1C
    OrangeCreamsicle number 6 #FC971B
    BloodOrange number 7 #F9703A
    CandyAppleRed number 8 #F7373C
    Salmon number 9 #F88585
    Coral number 10 #F767C3
    Cranberry number 11 #940D65
    Lavender number 12 #CB94FF
    RoyalPurple number 13 #8737F8
    Marine number 14 #353CD4
    Steel number 15 #5D7687

    Response

    See https://dev.kik.com/#/docs/messaging#suggested-response-keyboard

    Kind: global class

    Response.text(body) ⇒ Response

    Kind: static method of Response

    Param Type
    body string

    Response.friendPicker([body], [min], [max], [preselected]) ⇒ Response

    Kind: static method of Response

    Param Type Description
    [body] string
    [min] int
    [max] int
    [preselected] array array of strings

    Response.picture(picUrl, metadata) ⇒ Response

    Kind: static method of Response

    Param Type
    picUrl string
    metadata object

    Keywords

    Install

    npm i @kikinteractive/kik

    DownloadsWeekly Downloads

    27

    Version

    2.2.1

    License

    MIT

    Last publish

    Collaborators

    • kikinteractive