WhatsApp Node.JS Bot API
Use this library to develop a bot for the WhatsApp platform.
The library is available on GitHub as well as a package on npm.
Get Started Video
Demo
Send a message to + (374) 98 445878 through WhatsApp and test the API.
License
This library is released under the terms of the MIT license. See License for more information.
Library Prerequisites
- Node >= 8.0.0
- WhatsApp account.
- Active Instance Id - Get an instance here.
- Account authentication token - unique account identifier used to validate your instance in all API requests.
- Webhook - Please use a server endpoint URL that supports HTTP/HTTPS.
Installation
This library is released on npm.
npm
Install with npm install whatsapp-chapi --save
Express
If you are already using express or equivalent, you can do the following:
app.use("/whatsapp/webhook", bot.middleware());
Please revisit app.use() documentation.
For more information see bot.middleware().
Let's get started!
Creating a basic WhatsApp bot is simple:
- Import
whatsapp-chapi
library to your project - Create an endpoint for notifications
- Create a 'Chapi' instance
- Scan your QR here
- Start your web server
- Call
setWebhook(url)
with your web server url
Creating an echo Bot
Firstly, let's import and configure our bot:
'use strict';
var express = require('express');
const Chapi = require('whatsapp-chapi');
const app = express();
const bot = new Chapi(YOUR_INSTANCE_ID_HERE, YOUR_AUTH_TOKEN_HERE);
bot.signIn('YOUR_WHATSAPP_ACCOUNT_PHONE');
app.post('/YOUR_WEBHOOK_HERE', function (req, res) {
bot.sendMessage(req.body.messages[0].author, 'ECHO TEXT');
res.sendStatus(200);
});
const http = require('http');
const port = process.env.PORT || 8080;
const webhookUrl = process.env.WEBHOOK_URL;
http.createServer(app).listen(port, () => bot.setWebhook(webhookUrl));
API
bot.setWebhook(url)
Param | Type | Description |
---|
url | string | Full url to your endpoint for message notification |
Returns a promise.JSON
.
bot.setWebhook("https://my.bot/incoming")
.then(() => yourBot.doSomething())
.catch(err => console.log(err));
bot.signIn(phone)
Param | Type | Description |
---|
phone | string | Your whatsApp account phone |
Returns a promise.JSON
.
bot.signIn("12345678911")
.then(() => yourBot.doSomething())
.catch(err => console.log(err));
Note: Phone number should be in following format 12345678912
, without +
or any other symbols
bot.sendMessage(phone, message)
Param | Type | Description |
---|
phone | string | WhatsAppPhoneNumber string |
message | string | text message to send |
Note: Phone number should be in following format 12345678912
, without +
or any other symbols
Returns a promise.JSON
.
const Chapi = require('whatsapp-chapi');
const bot = new Chapi(YOUR_INSTANCE_ID_HERE, YOUR_AUTH_TOKEN_HERE);
bot.sendMessage('12345678912', 'Hello');
bot.sendPreviewUrl(phone, urlContent)
Param | Type | Description |
---|
phone | string | WhatsAppPhoneNumber string |
urlContent | JSON | text message to send |
Note: Phone number should be in following format 12345678912
, without +
or any other symbols
Returns a promise.JSON
.
const Chapi = require('whatsapp-chapi');
const bot = new Chapi(YOUR_INSTANCE_ID_HERE, YOUR_AUTH_TOKEN_HERE);
bot.sendPreviewUrl('12345678912', {
title : 'Preview title',
desc : 'Preview description',
text : 'Preview text',
url : 'Preview url',
thumb : 'Preview image'
});
Note: Preview image should be in following format Base64
bot.sendFile(phone, url)
Param | Type | Description |
---|
phone | string | WhatsAppPhoneNumber string |
url | string | download url for file |
Returns a promise.JSON
.
const Chapi = require('whatsapp-chapi');
const bot = new Chapi(YOUR_INSTANCE_ID_HERE, YOUR_AUTH_TOKEN_HERE);
bot.sendFile('12345678912', 'https://assets.fireside.fm/file/fireside-images/podcasts/images/b/bc7f1faf-8aad-4135-bb12-83a8af679756/cover_medium.jpg');
bot.getStatus()
Returns a promise.JSON
.
const Chapi = require('whatsapp-chapi');
const bot = new Chapi(YOUR_INSTANCE_ID_HERE, YOUR_AUTH_TOKEN_HERE);
bot.getStatus()
.then((res) => {
console.log(res);
});
Sample project
We've created the sample project to help you get started.