Code Monkey home page Code Monkey logo

whatsapp-api-client-js's Introduction

whatsapp-api-client library for javascript

Support links

Support Support Support

Guides & News

Guides News News

This library helps you easily create a javascript application to connect the WhatsApp API using service green-api.com. You need to get ID_INSTANCEand API_TOKEN_INSTANCE in the control panel in order to use this library. It's free for developers.

API

The API corresponds with REST API from green-api since the library wraps own methods as https calls to the service. Therefore, using these docs is highly encouraged.

Installing

Library supports both browser environment without package managers and Node/Webpack apps with package manager that can handle require or import module expressions. For webpack and npm based apps:

npm i @green-api/whatsapp-api-client

For vanilla html-js website modify index.html:

<script src="https://unpkg.com/@green-api/whatsapp-api-client/lib/whatsapp-api-client.min.js"></script>

Importing

There are several ways to import the library in a project

Using common javascript

const whatsAppClient = require("@green-api/whatsapp-api-client");

Using ES6 javascript

import whatsAppClient from "@green-api/whatsapp-api-client";

Using typescript

import * as whatsAppClient from "@green-api/whatsapp-api-client";

Using browser javascript

<script src="https://unpkg.com/@green-api/whatsapp-api-client/lib/whatsapp-api-client.min.js"></script>

Authentication

Sending WhatsApp message like any other call to the API requires account registered on green-api.com and authentication completed on mobile WhatsApp app. To register account you have to proceed to the control panel. After registering you wll get own unique pair of ID_INSTANCE and API_TOKEN_INSTANCE keys.

WhatsApp mobile app authentication may be achieved by using control panel. You need to scan QR-code generated within the control panel.

Examples

Please do not use 'phoneNumber' parameter when calling methods. It is deprecated. Examples below are based on 'chatId' parameter

Send WhatsApp message

Use common javascript

const whatsAppClient = require("@green-api/whatsapp-api-client");

const restAPI = whatsAppClient.restAPI({
    idInstance: "YOUR_ID_INSTANCE",
    apiTokenInstance: "YOUR_API_TOKEN_INSTANCE",
});

restAPI.message.sendMessage("[email protected]", null, "hello world").then((data) => {
    console.log(data);
});

or use browser js script

<script src="https://unpkg.com/@green-api/whatsapp-api-client/lib/whatsapp-api-client.min.js"></script>
<script>
    const restAPI = whatsAppClient.restAPI({
        idInstance: "YOUR_ID_INSTANCE",
        apiTokenInstance: "YOUR_API_TOKEN_INSTANCE",
    });
    restAPI.message
            .sendMessage("[email protected]", null, "hello world")
            .then((data) => {
                console.log(data);
            })
            .catch((reason) => {
                console.error(reason);
            });
</script>

Or use ES6 syntax. For Node.js app, you probably have to add in package.json property "type": "module". Notice that all examples below are ES6 based.

import whatsAppClient from "@green-api/whatsapp-api-client";

(async () => {
    const restAPI = whatsAppClient.restAPI({
        idInstance: "YOUR_ID_INSTANCE",
        apiTokenInstance: "YOUR_API_TOKEN_INSTANCE",
    });
    const response = await restAPI.message.sendMessage(
        "[email protected]",
        null,
        "hello world"
    );
})();

Using credentials file for ID_INSTANCE and API_TOKEN_INSTANCE keys (Node.js only!)

You might want to store yours credentials separately from code. The library allow you to create a text file with preferred name and location with the format:

API_TOKEN_INSTANCE = "MY_API_TOKEN_INSTANCE"
ID_INSTANCE = "MY_ID_INSTANCE"

And then pass this file as described below:

const restAPI = whatsAppClient.restAPI({
    credentialsPath: "examples\\credentials",
});

Receive notifications using webhook service REST API

import whatsAppClient from "@green-api/whatsapp-api-client";

(async () => {
    let restAPI = whatsAppClient.restAPI({
        idInstance: "YOUR_ID_INSTANCE",
        apiTokenInstance: "YOUR_API_TOKEN_INSTANCE",
    });

    try {
        // Receive WhatsApp notifications.
        console.log("Waiting incoming notifications...");
        await restAPI.webhookService.startReceivingNotifications();
        restAPI.webhookService.onReceivingMessageText((body) => {
            console.log(body);
            restAPI.webhookService.stopReceivingNotifications();
            //console.log("Notifications is about to stop in 20 sec if no messages will be queued...")
        });
        restAPI.webhookService.onReceivingDeviceStatus((body) => {
            console.log(body);
        });
        restAPI.webhookService.onReceivingAccountStatus((body) => {
            console.log(body);
        });
    } catch (ex) {
        console.error(ex.toString());
    }
})();

Send WhatsApp file

import whatsAppClient from "@green-api/whatsapp-api-client";

(async () => {
    const restAPI = whatsAppClient.restAPI({
        idInstance: "YOUR_ID_INSTANCE",
        apiTokenInstance: "YOUR_API_TOKEN_INSTANCE",
    });
    const response = await restAPI.file.sendFileByUrl(
        "[email protected]",
        null,
        "https://avatars.mds.yandex.net/get-pdb/477388/77f64197-87d2-42cf-9305-14f49c65f1da/s375",
        "horse.png",
        "horse"
    );
})();

Send WhatsApp message and receive webhook

Webhooks are event-based callbacks invoked by green-api server as responses to client API calls. Webhooks support Node.js and express based apps only.

import whatsAppClient from "@green-api/whatsapp-api-client";
import express from "express";
import bodyParser from "body-parser";

(async () => {
    try {
        // Set http url, where webhooks are hosted.
        // Url must have public domain address.
        await restAPI.settings.setSettings({
            webhookUrl: "MY_HTTP_SERVER:3000/webhooks",
        });

        const app = express();
        app.use(bodyParser.json());
        const webHookAPI = whatsAppClient.webhookAPI(app, "/webhooks");

        // Subscribe to webhook happened when WhatsApp delivered a message
        webHookAPI.onIncomingMessageText(
            (data, idInstance, idMessage, sender, typeMessage, textMessage) => {
                console.log(`outgoingMessageStatus data ${data.toString()}`);
            }
        );

        // Run web server with public domain address
        app.listen(3000, async () => {
            console.log(`Started. App listening on port 3000!`);

            const restAPI = whatsAppClient.restAPI({
                idInstance: MY_ID_INSTANCE,
                apiTokenInstance: MY_API_TOKEN_INSTANCE,
            });
            // Send test message that triggers webhook
            const response = await restAPI.message.sendMessage(
                "[email protected]",
                null,
                "hello world"
            );
        });
    } catch (error) {
        console.error(error);
        process.exit(1);
    }
})();

There's some cool examples too.

Deploying development environment

Any help with development and bug fixing is appreciated. In order to deploy test-ready environment please make the steps:

  1. Clone repo with git clone
  2. Install dependencies with npm install
  3. Install globally libraries rollup for bundled builds.
  4. Add webhooks as new dev express via npm npm install express --save-dev. Don't forget to delete it before making pull request
  5. Create .env file in root folder and add environment variables using example file env.example
  6. Add "type": "module" to the package.json

Build

Compile browser and node|webpack versions with single command:

npm run build

Publish to npm if you have access

npm publish

Third-party libraries

License

Licensed on MIT terms. For additional info have look at LICENSE

whatsapp-api-client-js's People

Contributors

aknurkh avatar amele9 avatar andrew-shamin avatar andreymalyshkin avatar dependabot[bot] avatar dephea avatar eschelpnew avatar idzana avatar injitools avatar john-muriu avatar jzarca01 avatar kocherovv avatar nikyoff avatar olegius88 avatar ripreal avatar slikman1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

whatsapp-api-client-js's Issues

Indian phone number format

Hi,

I am Raja. I am using the WhatsApp API to send a message. For example, my number is (code)(number) -- (+91)(9886356363). Can you please suggest the same format/signature called the sendMessage() function? Also, let me know if there are any other changes required.

I am getting 466 error message on following Indian number.
`
await restAPI.message.sendMessage('[email protected]', null, "hello world")
.then((data) => {
res.status(200).send({ data });
})

`

Send image or pdf file

I tried to use sendFileByUrl to send image or pdf file, but I did not work for me. I am using front-end to send image or pdf file to the node.js server then I used sendFileByUrl to send the file to the whatsapp, it did not work.

Could you please help me to implement this.

sendFileByURl is not working

  1. phoneNumber is not supported, we need to add chatId, and even after adding chatId it says gives Correct ourput, but the message/attachment is not sent

/waInstance{{idInstance}}/sendFileByUrl/{{apiTokenInstance}}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.