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.
- Install with
npm install @kikinteractive/kik
This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to [email protected].
If you're looking to contribute the the kik
package, check out the Contributing Guide.
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.
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.
Creating a basic Kik bot is simple:
- Import
@kikinteractive/kik
- Create a bot with the username and API key you got from https://dev.kik.com/
- Configure your bot as described in the documentation
- Add the bot as middleware to your server with
bot.incoming()
- 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.
'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: 'kik-echobot.ngrok.io'
});
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);
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');
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');
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}!`);
});
});
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);
});
});
Bot This is a test
Kind: global class
See: https://bots.kik.com
- Bot
- new Bot()
- .use(handler)
- .onTextMessage([text], handler)
- .onLinkMessage(handler)
- .onPictureMessage(handler)
- .onVideoMessage(handler)
- .onStartChattingMessage(handler)
- .onScanDataMessage(handler)
- .onStickerMessage(handler)
- .onIsTypingMessage(handler)
- .onDeliveryReceiptMessage(handler)
- .onReadReceiptMessage(handler)
- .getKikCodeUrl() ⇒
promise.<string>
- .getUserProfile() ⇒
promise.<UserProfile>
- .broadcast(messages, recipients)
- .send(messages, recipient, [chatId])
- .incoming()
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 |
Kind: instance method of Bot
Param | Type |
---|---|
handler | MessageHandlerCallback |
Kind: instance method of Bot
Param | Type |
---|---|
[text] | string | regexp |
handler | MessageHandlerCallback |
Example
bot.onTextMessage((incoming, bot) => {
// 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...
});
Kind: instance method of Bot
Param | Type |
---|---|
handler | MessageHandlerCallback |
Kind: instance method of Bot
Param | Type |
---|---|
handler | MessageHandlerCallback |
Kind: instance method of Bot
Param | Type |
---|---|
handler | MessageHandlerCallback |
Kind: instance method of Bot
Param | Type |
---|---|
handler | MessageHandlerCallback |
Kind: instance method of Bot
Param | Type |
---|---|
handler | MessageHandlerCallback |
Kind: instance method of Bot
Param | Type |
---|---|
handler | MessageHandlerCallback |
Kind: instance method of Bot
Param | Type |
---|---|
handler | MessageHandlerCallback |
Kind: instance method of Bot
Param | Type |
---|---|
handler | MessageHandlerCallback |
Kind: instance method of Bot
Param | Type |
---|---|
handler | MessageHandlerCallback |
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
Kind: instance method of Bot
Param | Type |
---|---|
messages | array |
recipients | array |
Kind: instance method of Bot
Param | Type |
---|---|
messages | array |
recipient | string |
[chatId] | string |
Handles the incoming requests for messages configuration.
Kind: instance method of Bot
IncomingMessage This is a test
Kind: global class
- IncomingMessage
- .reply(messages) ⇒
promise.<object>
- .markRead() ⇒
promise.<object>
- .startTyping() ⇒
promise.<object>
- .stopTyping() ⇒
promise.<object>
- .ignore()
- .reply(messages) ⇒
Kind: instance method of IncomingMessage
Param | Type |
---|---|
messages | Message | array.<Message> |
Kind: instance method of IncomingMessage
Kind: instance method of IncomingMessage
Kind: instance method of IncomingMessage
Kind: instance method of IncomingMessage
UserProfile See https://dev.kik.com/#/docs/messaging#user-profiles
Kind: global class
- UserProfile
- .displayName ⇒
string
- .username ⇒
string
- .firstName ⇒
string
- .lastName ⇒
string
- .profilePicUrl ⇒
string
- .profilePicLastModified ⇒
number
- .displayName ⇒
Kind: instance property of UserProfile
Kind: instance property of UserProfile
Kind: instance property of UserProfile
Kind: instance property of UserProfile
Kind: instance property of UserProfile
Kind: instance property of UserProfile
Message This is a test
Kind: global class
- Message
- instance
- .from ⇒
string
- .id ⇒
string
- .chatId ⇒
string
- .messageIds ⇒
array
- .readReceiptRequested ⇒
boolean
- .stickerPackId ⇒
string
- .scanData ⇒
string
- .stickerUrl ⇒
string
- .timestamp ⇒
number
- .type ⇒
string
- .kikJsData ⇒
object
- .picUrl ⇒
string
- .noForward ⇒
boolean
- .isTyping ⇒
boolean
- .body ⇒
string
- .text ⇒
string
- .title ⇒
string
- .url ⇒
string
- .videoUrl ⇒
string
- .delay ⇒
number
- .typeTime ⇒
number
- .attributionName ⇒
string
- .attributionIcon ⇒
string
- .loop ⇒
boolean
- .muted ⇒
boolean
- .autoplay ⇒
boolean
- .noSave ⇒
boolean
- .participants ⇒
array
- .mention ⇒
string
- .isTextMessage() ⇒
boolean
- .isLinkMessage() ⇒
boolean
- .isPictureMessage() ⇒
boolean
- .isVideoMessage() ⇒
boolean
- .isStartChattingMessage() ⇒
boolean
- .isScanDataMessage() ⇒
boolean
- .isStickerMessage() ⇒
boolean
- .isIsTypingMessage() ⇒
boolean
- .isDeliveryReceiptMessage() ⇒
boolean
- .isReadReceiptMessage() ⇒
boolean
- .isMention() ⇒
boolean
- .toJSON() ⇒
object
- .addTextResponse(text) ⇒
Message
- .addResponseKeyboard(suggestions, [isHidden], [user]) ⇒
Message
- .setKikJsData(kikJsData) ⇒
Message
- .setPicUrl(picUrl) ⇒
Message
- .setNoForward(noForward) ⇒
Message
- .setIsTyping(isTyping) ⇒
Message
- .setMessageIds(messageIds) ⇒
Message
- .setBody(body) ⇒
Message
- .setText(text) ⇒
Message
- .setTitle(title) ⇒
Message
- .setUrl(url) ⇒
Message
- .setVideoUrl(videoUrl) ⇒
Message
- .setDelay(delay) ⇒
Message
- .setTypeTime(typeTime) ⇒
Message
- .setAttributionName(attributionName) ⇒
Message
- .setAttributionIcon(attributionIcon) ⇒
Message
- .setLoop(loop) ⇒
Message
- .setMuted(muted) ⇒
Message
- .setAutoplay(autoplay) ⇒
Message
- .setNoSave(noSave) ⇒
Message
- .from ⇒
- static
- instance
See https://dev.kik.com/#/docs/messaging#receiving-messages
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#receiving-messages
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#receiving-messages
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#receipts
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#receipts
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#sticker
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#kik-codes-api
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#sticker
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#common-fields
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#message-formats
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#link
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#link
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#link
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#is-typing
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#text
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#link
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#link
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#link
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#video
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#common-fields
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#text
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#attribution
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#attribution
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#video
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#video
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#video
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#video
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#participants
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#mention
Kind: instance property of Message
See https://dev.kik.com/#/docs/messaging#text
Kind: instance method of Message
See https://dev.kik.com/#/docs/messaging#link
Kind: instance method of Message
See https://dev.kik.com/#/docs/messaging#picture
Kind: instance method of Message
See https://dev.kik.com/#/docs/messaging#video
Kind: instance method of Message
See https://dev.kik.com/#/docs/messaging#start-chatting
Kind: instance method of Message
See https://dev.kik.com/#/docs/messaging#scan-data
Kind: instance method of Message
See https://dev.kik.com/#/docs/messaging#sticker
Kind: instance method of Message
See https://dev.kik.com/#/docs/messaging#is-typing
Kind: instance method of Message
See https://dev.kik.com/#/docs/messaging#receipts
Kind: instance method of Message
See https://dev.kik.com/#/docs/messaging#receipts
Kind: instance method of Message
See https://dev.kik.com/#/docs/messaging#mentions
Kind: instance method of Message
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.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 |
KikCode.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 |