WhatsApp-Api-NodeJs
This code is an implementation of Baileys, as a RestFull Api service, which controls whatsapp functions.
With this one you can create multiservice chats, service bots or any other system that uses whatsapp. With this code you don't need to know javascript for nodejs , just start the server and make the language requests that you feel most comfortable with.
Node n8n
Infrastructure
Nvm installation
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash # or wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
After finishing, restart the terminal to load the new information.
Docker installation [optional]
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker ${USER}Nodejs installation
pm2 installation
yarn installation
docker --version node --version
MongoDb [optional]
After installing docker and docker-compose, up the container.
In the same directory where the file is located, run the following command:
Using the database is optional.
Application startup
Cloning the Repository
git clone https://github.com/code-chat-br/whatsapp-api.git
Go to the project directory and install all dependencies.
Finally, run the command below to start the application:
# Under development yarn start # In production yarn start:prod # pm2 pm2 start 'yarn start:prod' --name ApiCodechat
Swagger - OpenAPI 3.0.0
- Route:
http://localhost:8083/docs - YAML file: swagger.yaml
Authentication
You can define two authentication types for the routes in the env file. Authentications must be inserted in the request header.
-
apikey
-
jwt: A JWT is a standard for authentication and information exchange defined with a signature.
Authentications are generated at instance creation time.
Note: There is also the possibility to define a global api key, which can access and control all instances.
Connection
Create an instance
HTTP
NOTE: This key must be inserted in the request header to create an instance.
POST /instance/create HTTP/1.1 Host: localhost:8080 Content-Type: application/json apikey: t8OOEeISKzpmc3jjcMqBWYSaJH2PIxns { "instanceName": "codechat" }
cURL
curl --location --request POST 'http://localhost:8080/instance/create' \ --header 'Content-Type: application/json' \ --header 'apikey: t8OOEeISKzpmc3jjcMqBWYSaJH2PIxns' \ --data-raw '{ "instanceName": "codechat" }'
Response
{ "instance": { "instanceName": "codechat", "status": "created" }, "hash": { "jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. [...]" // or // "apikey": "88513847-1B0E-4188-8D76-4A2750C9B6C3" } }
Connection with qrcode
HTTP
GET /instance/connect/codechat HTTP/1.1 Host: localhost:8080 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. [...]
GET /instance/connect/codechat HTTP/1.1 Host: localhost:8080 apikey: 88513847-1B0E-4188-8D76-4A2750C9B6C3
cURL
curl --location --request GET 'http://localhost:8080/instance/connect/codechat' \ --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. [...]'
curl --location --request GET 'http://localhost:8080/instance/connect/codechat' \ --header 'apikey: 88513847-1B0E-4188-8D76-4A2750C9B6C3'
Response
{ "code": "2@nXSUgRJSBY6T0XJmiFKZ0 [...] ,XsgJhJHYa+0MPpXANdPHHt6Ke/I7O2QyXT/Lsge0uSg=", "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhE [...] LkMtqAAAAABJRU5ErkJggg==" }
App in Docker
After building the application, in the same directory as the files above, run the following command:
Send Messages
| Send Text | ✔ |
| Send Buttons | ❌ |
| Send Template | ❌ |
| Send Media: audio - video - image - document - gif base64: |
✔ |
| Send Media File | ✔ |
| Send Audio type WhatsApp | ✔ |
| Send Audio type WhatsApp - File | ✔ |
| Send Location | ✔ |
| Send List | ✔ |
| Send Link Preview | ❌ |
| Send Contact | ✔ |
| Send Reaction - emoji | ✔ |
Postman collections
Webhook Events
| Name | Event | TypeData | Description |
|---|---|---|---|
| QRCODE_UPDATED | qrcode.updated | json | Sends the base64 of the qrcode for reading |
| CONNECTION_UPDATE | connection.update | json | Informs the status of the connection with whatsapp |
| MESSAGES_SET | message.set | json | Sends a list of all your messages uploaded on whatsapp This event occurs only once |
| MESSAGES_UPSERT | message.upsert | json | Notifies you when a message is received |
| MESSAGES_UPDATE | message.update | json | Tells you when a message is updated |
| SEND_MESSAGE | send.message | json | Notifies when a message is sent |
| CONTACTS_SET | contacts.set | json | Performs initial loading of all contacts This event occurs only once |
| CONTACTS_UPSERT | contacts.upsert | json | Reloads all contacts with additional information This event occurs only once |
| CONTACTS_UPDATE | contacts.update | json | Informs you when the chat is updated |
| PRESENCE_UPDATE | presence.update | json | Informs if the user is online, if he is performing some action like writing or recording and his last seen 'unavailable' |
| CHATS_SET | chats.set | json | Send a list of all loaded chats |
| CHATS_UPDATE | chats.update | json | Informs you when the chat is updated |
| CHATS_UPSERT | chats.upsert | json | Sends any new chat information |
| GROUPS_UPSERT | groups.upsert | JSON | Notifies when a group is created |
| GROUPS_UPDATE | groups.update | JSON | Notifies when a group has its information updated |
| GROUP_PARTICIPANTS_UPDATE | group-participants.update | JSON | Notifies when an action occurs involving a participant 'add' |
| NEW_TOKEN | new.jwt | JSON | Notifies when the token (jwt) is updated |
Env File
See additional settings that can be applied through the env file by clicking here.
⚠️Attention⚠️: copy the dev-env.yml file to env.yml.
SSL
To install the SSL certificate, follow the instructions below.
Note
This code is in no way affiliated with WhatsApp. Use at your own discretion. Don't spam this.
This code was produced based on the baileys library and it is still under development.
