Compare commits

...
517 Commits
Author SHA1 Message Date
devlikepro 35e92bebbd [core] Bump version to 2024.5.8
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
2024-05-21 08:46:58 +07:00
devlikepro 2bd3e9f556 [core] Update NOWEB engine 2024-05-21 08:46:49 +07:00
devlikepro 60705d1558 [core] Crypto offer 2024-05-20 19:35:10 +07:00
devlikepro 2cbd08c470 [core] Crypto offer 2024-05-20 19:33:44 +07:00
devlikepro 51a501611d [docs] Compare 2024-05-20 15:32:37 +07:00
devlikepro 46bcfb5695 [docs] Live Helper Chat 2024-05-20 14:12:13 +07:00
devlikepro e44bd55df2 [core] geonode 2024-05-18 15:19:32 +07:00
devlikepro efaa090053 [core] geonode 2024-05-18 15:14:15 +07:00
devlikepro 8be13fbc5c [core] Proxy 2024-05-18 14:37:10 +07:00
devlikepro e0a1be1417 [core] Bump to 2024.5.7 2024-05-14 10:13:37 +07:00
devlikepro 7f841f6862 [core] Revert back video fix 2024-05-14 10:13:35 +07:00
devlikepro d1804996d7 [core] Fix send video
Fix #321 #328
2024-05-12 10:47:09 +07:00
devlikepro 34084a7ee8 [docs] Fix pricing 2024-05-12 10:11:00 +07:00
devlikepro fedde8bb87 [docs] 💅 2024-05-10 19:44:11 +07:00
devlikepro 7439e80eec [docs] note 2024-05-10 19:29:34 +07:00
devlikepro e388f361af [docs] note 2024-05-10 19:27:46 +07:00
devlikepro 2a9ed6bac7 [docs] WAHA 2024-05-10 19:25:59 +07:00
devlikepro 5936a86159 [core] Rm line 2024-05-10 18:50:12 +07:00
devlikepro 3b22911fb1 [core] Update NOWEB engine 2024-05-10 18:50:12 +07:00
devlikepro 0dd3762685 [core] Bump version to 2024.5.5 2024-05-10 18:50:12 +07:00
devlikepro fd9106e97e [core] /pricing 2024-05-10 18:50:06 +07:00
devlikepro 5a3d709e4f [core] up year 2024-05-10 18:50:06 +07:00
allburov c0c357dc39 [docs] Adjust header 2024-05-08 18:06:57 +07:00
allburov e76bec3d4f [docs] Fix patreon link 2024-05-08 15:03:18 +07:00
allburov 384b3974f7 [docs] Pricing 2024-05-08 15:02:39 +07:00
allburov 3c37044cd8 [docs] index 2024-05-08 15:00:32 +07:00
allburov 541112a9eb [docs] index 2024-05-08 14:54:55 +07:00
allburov 59d7613485 [docs] badges 2024-05-08 14:52:35 +07:00
allburov d1a579372d [docs] reorder text
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
2024-05-08 11:20:57 +07:00
allburov 16cd247db8 [docs] Up swagger 2024-05-08 11:13:04 +07:00
allburov 872d6d9880 [docs] white label 2024-05-08 11:12:35 +07:00
allburov 79fe322d69 [docs] dashboard 2024-05-08 10:45:11 +07:00
allburov fe6f1cb547 [docs] dashboard video 2024-05-08 10:35:18 +07:00
allburov 8d7fcd0b84 [docs] dashboard video 2024-05-08 10:32:40 +07:00
allburov 46b0c3cee2 [docs] related links 2024-05-08 10:31:58 +07:00
allburov 1ad9c3017c [core] Swagger video 2024-05-08 10:20:46 +07:00
allburov 5d320fa22f [core] /videos 2024-05-08 10:13:40 +07:00
allburov 5e1d9b6463 [core] Add swagger page 2024-05-08 10:01:11 +07:00
allburov 175dfde0b8 [core] Adjust import 2024-05-07 19:20:58 +07:00
allburov 87717ae214 [core] Refactor SwaggerConfiguratorCore.ts 2024-05-07 19:18:47 +07:00
allburov 111c8f3160 [core] Adjust SwaggerConfiguratorCore.ts 2024-05-07 19:18:47 +07:00
allburov 6c756352cf [core] Add Dashboard config 2024-05-07 18:37:43 +07:00
allburov 97a5d11c1f [core] Add SwaggerConfigServiceCore 2024-05-07 18:36:54 +07:00
allburov 44415d824e [core] Detect boolean type 2024-05-07 18:34:36 +07:00
allburov 286e8f3afe [core] REST API 2024-05-07 17:04:46 +07:00
allburov 4c2e3db2d5 [core] No WAHA in text 2024-05-07 16:59:42 +07:00
allburov 6faf699fcc [docs] Changelog 2024-05-07 12:36:56 +07:00
allburov 80b765e56a [core] Bump version to 2024.5.3 2024-05-07 12:34:17 +07:00
allburov 3f9ebe5c8c [core] Use local cache, fix 2.2412.54 version
fix #316
2024-05-07 12:30:24 +07:00
allburov 481371fd03 [docs] Add Dashboard Overview 2024-05-06 12:45:03 +07:00
allburov 36c2165fc3 [docs] Add docs link 2024-05-06 11:31:55 +07:00
allburov 36402626e0 [docs] Add #315 to changelog 2024-05-06 10:55:13 +07:00
allburov 40c39e61e1 [docs] disclaimer 2024-05-06 10:51:03 +07:00
allburov 4e1b13e776 [docs] Feature first 2024-05-06 10:48:33 +07:00
allburov 7f355ff43a [docs] default password in docker-compose 2024-05-06 09:54:48 +07:00
allburov 22df449013 [docs] speacker 2024-05-04 12:34:17 +07:00
allburov 68303f5124 [docs] Add note about QR event
Fix #314
2024-05-04 12:32:54 +07:00
allburov 33babfef6b [docs] no soon 2024-05-04 12:25:52 +07:00
allburov 910a9185c7 [core] Bump to 2024.5.3 2024-05-04 12:24:58 +07:00
allburov f5bd74dfa1 [core] Prevent starting two sessions with the same name #314 2024-05-04 12:24:58 +07:00
allburov b982640c85 [docs] Dashboard changelog 2024-05-04 10:50:19 +07:00
allburov 245bcc46ed [docs] waha hub 2024-05-04 09:32:52 +07:00
allburov 08a346bfa1 [docs] index 2024-05-04 09:30:51 +07:00
allburov 0cb4dd6d63 [docs] Edit page 2024-05-04 09:25:10 +07:00
allburov 1a7a78cc51 [docs] dashboard 2024-05-04 09:22:59 +07:00
allburov 9b69875b78 [docs] dashboard 2024-05-04 09:22:33 +07:00
allburov 999ae4782b [docs] index 2024-05-04 09:21:07 +07:00
allburov 3c61ca8c94 [docs] No dark mode 2024-05-04 09:21:02 +07:00
allburov 0790e0a0ef [docs] Dashboard 2024-05-04 09:19:01 +07:00
allburov 0a2d77b699 [docs] Fix weigth 2024-05-04 09:17:17 +07:00
allburov 051ada3f21 [docs] index open in new tab 2024-05-03 18:19:17 +07:00
allburov faf8d053dd [docs] Index
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
2024-05-03 18:00:12 +07:00
allburov 5ece56f9b0 [docs] Add WAHA Dashboard, Hub 2024-05-03 17:44:37 +07:00
allburov c4d9474f34 [docs] update swagger 2024-05-03 16:37:55 +07:00
allburov 3b8481ccac [docs] Dashboard stub 2024-05-03 16:33:41 +07:00
allburov a31d0215f5 [core] Correct plus docker-compose.yaml 2024-05-03 16:31:25 +07:00
allburov f6cce68553 [core] Bump version 2024.5.2 2024-05-03 16:31:25 +07:00
allburov 636b100b9f [core] Bump version to 2024.5.1 2024-05-03 11:56:29 +07:00
allburov 7a3574eaa0 [core] Update WEBJS version 2024-05-03 11:56:29 +07:00
allburov 9cd6176e60 [core] Change default password to waha/waha 2024-05-03 11:56:29 +07:00
allburov f2641029cb [core] nest cli 2024-05-02 14:39:18 +07:00
allburov 6350e191f8 [core] Ignore dashboard 2024-05-02 14:38:54 +07:00
allburov c570ba3488 [core] Correct dashboard 2024-05-02 12:05:22 +07:00
allburov b64abd24c8 [core] Configure dashboard right 2024-05-02 12:03:46 +07:00
allburov 13c9ab3962 [core] Adjust dashboard stub 2024-05-02 12:03:46 +07:00
allburov b9f1c6ee79 [core] Adjust swagger 2024-05-02 12:03:46 +07:00
allburov 938170a957 [core] Add Dashboard 2024-05-02 12:03:46 +07:00
allburov ca0a28c0cf [core] Logout if logout is true 2024-05-02 09:42:25 +07:00
allburov c3967173a1 [core] Enable cors 2024-04-28 17:35:52 +07:00
allburov 9ebbd9a1fd [docs] no MOBILE yet 2024-04-23 11:03:39 +07:00
allburov 16e343ca19 [docs] Labels 2024-04-21 18:54:55 +07:00
allburov 1de9132f16 [core] Remove ignore 2024-04-21 18:49:53 +07:00
allburov dad54a8e47 [core] Pin WEBJS version to 2.2412.54 2024-04-21 17:30:16 +07:00
allburov 7d73b96b78 [core] Fix send voice 2024-04-21 17:08:08 +07:00
allburov 1260fe34aa [core] Bump version to 2024.4.4 2024-04-21 16:35:43 +07:00
allburov 3b4678e059 [core] Add GET /api/sessions/{session} endpoint 2024-04-21 16:35:28 +07:00
allburov ff8294b5db [core] Add patron portal link 2024-04-21 16:14:54 +07:00
allburov 7e94e19f5d [core] NOWEB - add GET /api/contacts/profile-picture 2024-04-21 16:14:54 +07:00
allburov ae18e2575a [docs] Add tier 2024-04-21 16:01:35 +07:00
allburov a5c493a29c [docs] Add tier 2024-04-17 13:45:14 +07:00
allburov 8ee89fe51c [docs] pro tier 2024-04-15 09:21:46 +07:00
allburov b4909847bf [docs] link 2024-04-15 09:16:32 +07:00
allburov 568be88127 [docs] tiers
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
2024-04-14 19:15:59 +07:00
allburov 67144c1d08 [docs] 2024-04-14 18:56:20 +07:00
allburov 285c78d41a [docs] no row 2024-04-14 18:50:26 +07:00
allburov 7d15735444 [docs] discord 2024-04-14 18:18:05 +07:00
allburov 4191749564 [docs] Crypto 2024-04-12 21:34:44 +07:00
allburov 9e68dbbf09 [docs] No advanced 2024-04-12 13:36:53 +07:00
allburov f02ad5b051 [docs] Add http requests in index 2024-04-09 17:30:55 +07:00
allburov 08e20a25ed [core] Bump version to 2024.4.3 2024-04-09 11:45:44 +07:00
allburov ee0468038d [core] Update puppetter 2024-04-09 11:45:44 +07:00
allburov 04afc297d9 [core] Update WEBJS 2024-04-09 11:45:43 +07:00
allburov ed06ca76e0 [core] Bump to 2024.4.2 2024-04-08 18:17:04 +07:00
allburov a68510a814 [core] Fix NOWEB india 2024-04-08 18:16:35 +07:00
allburov 4040efab01 [docs] Alway show sidebar 2024-04-06 13:14:59 +07:00
allburov f08cc1061e [docs] Fix favicon 2024-04-06 13:01:40 +07:00
allburov 3b5b11891e [docs] Fix logo 2024-04-06 12:52:22 +07:00
allburov 72427c9309 [docs] Fix logo 2024-04-06 12:51:29 +07:00
allburov befe2068fd [docs] Fix send file example 2024-04-05 13:54:24 +07:00
allburov c7a3ef32fa [core] Add mongodb example 2024-04-02 17:42:30 +07:00
allburov 51d394f4ef [core] Bump version to 2024.4.1 2024-04-02 14:22:03 +07:00
allburov 8db341dd70 [core] Fix NOWEB engine restart 2024-04-02 14:22:02 +07:00
allburov 5cd7fec3ab [docs] Add what can it do 2024-04-01 16:06:08 +07:00
allburov f672ecbb45 [docs] try it now 2024-04-01 13:33:20 +07:00
allburov 9a12b2c9b6 [docs] Add prices at the top 2024-04-01 10:12:27 +07:00
allburov c31407fd87 [docs] add caption 2024-04-01 10:03:25 +07:00
allburov 646c81f136 [docs] message.reactions 2024-04-01 09:44:01 +07:00
allburov aca6232d2a [docs] changelog 2024-04-01 09:37:14 +07:00
allburov c61da10523 [core] Pin Web version
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
2024-04-01 09:31:08 +07:00
allburov 1f53d65ac2 [docs] fix card in article 2024-03-31 18:43:31 +07:00
allburov 844ab1287e [docs] fix links 2024-03-31 18:39:39 +07:00
allburov d6d318b23b [docs] Are you a visual 2024-03-31 16:04:26 +07:00
allburov 7504ffd934 [docs] quick start second 2024-03-31 16:00:06 +07:00
allburov e8078908c9 [docs] http api 2024-03-31 15:56:37 +07:00
allburov 431848280f [docs] Fix debug 2024-03-29 16:06:31 +07:00
allburov 2e0c575512 [core] Bump version to 2024.3.14 2024-03-29 15:57:15 +07:00
allburov ebf0d99417 [core] Add "debug" flag to session config 2024-03-29 15:56:50 +07:00
allburov 423d893fee [docs] No hover 2024-03-29 14:37:21 +07:00
allburov 56fe0d3b04 [docs] Limit 2024-03-29 14:22:36 +07:00
allburov 7172d9d203 [docs] Green icons 2024-03-29 14:21:20 +07:00
allburov bd770a6902 [docs] Fix index 2024-03-29 14:06:56 +07:00
allburov 628508faed [docs] ktor 2024-03-29 13:55:27 +07:00
allburov 826634f061 [docs] Add js, php for future 2024-03-29 13:37:23 +07:00
allburov c7ed959a71 [docs] Add kotlin 2024-03-29 13:32:15 +07:00
allburov aea6befc1e [docs] Add NOWEB feedback 2024-03-29 10:08:30 +07:00
allburov 7bb3484788 [docs] Add python example 2024-03-28 08:51:38 +07:00
allburov 4eafc67a7e [core] Bump 2024.3.13 2024-03-27 17:09:29 +07:00
allburov b5197b6f20 [core] log page logs 2024-03-27 17:09:29 +07:00
allburov d306304195 [core] One line log 2024-03-27 17:09:29 +07:00
allburov 35f47dae4f [docs] Boosty instead of Patreon 2024-03-27 13:52:00 +07:00
allburov f1be4810d5 [core] Bump to 2024.3.12 2024-03-27 13:27:39 +07:00
allburov d4f9406869 [core] Update NOWEB 2024-03-27 13:27:36 +07:00
allburov a41b81d724 [docs] Add funding 2024-03-26 16:54:09 +07:00
allburov da56b86102 [docs] Boosty first 2024-03-26 16:51:58 +07:00
allburov f12d2c9be0 [docs] Add gtag 2024-03-25 11:54:21 +07:00
allburov 322b9b4c25 [docs] Correct changelog 2024-03-24 20:52:26 +07:00
allburov fb7fe410f9 [core] Bump to 2024.3.11 2024-03-24 20:43:27 +07:00
allburov ee392a079c [core] Update swagger 2024-03-24 20:43:27 +07:00
allburov 0502579d50 [core] Edit and delete messages 2024-03-24 20:43:27 +07:00
allburov f10f3175d9 [core] add new swagger 2024-03-24 18:00:36 +07:00
allburov f155af99f1 [core] Bump 2024.3.10 2024-03-24 17:58:32 +07:00
allburov 0fbf3575a6 [core] NOWEB sendVCard 2024-03-24 17:58:30 +07:00
allburov f6b9b5f54e [core] Bump to 2024.3.9 2024-03-22 18:56:54 +07:00
allburov 2dadd9d8c9 [docs] Add caption to sendfile 2024-03-22 18:56:40 +07:00
allburov 5786b3cdfe [docs] Adjust cards style 2024-03-22 10:18:26 +07:00
allburov 769fc30c0c [docs] Adjust cards style 2024-03-22 10:09:21 +07:00
allburov fb2dad9c6f [core] bump version to 2024.3.8 2024-03-22 09:47:04 +07:00
allburov c43d308a2d [core] Add star unstar
Fix #240
2024-03-22 09:46:25 +07:00
allburov 742a12ce6a [core] Fix reactions 2024-03-22 09:25:23 +07:00
allburov d953f27865 [core] Update openapi.json 2024-03-20 12:18:53 +07:00
allburov 4719cded95 [core] get engine info 2024-03-19 14:16:45 +07:00
allburov 9d489bdb69 [core] add Patron Portal 2024-03-18 18:37:20 +07:00
allburov 537c307550 [core] No mobile engine anymore 2024-03-18 18:27:11 +07:00
allburov d5575e0323 [core] Fix index 2024-03-18 18:22:38 +07:00
allburov 592962bbc8 [core] Use vars.DOCKER_IMAGE 2024-03-18 15:25:39 +07:00
allburov 7a371c86dc [core] Images 2024-03-18 15:19:20 +07:00
allburov 0e295bebde [core] Don't push each version 2024-03-18 15:06:19 +07:00
allburov 8d98759be6 Revert "[core] Update WEBJS with 2.2300 fix"
This reverts commit 924317b01b.
2024-03-18 14:56:07 +07:00
allburov 924317b01b [core] Update WEBJS with 2.2300 fix 2024-03-18 14:55:50 +07:00
allburov a08a601dc3 [core] manual push 2024-03-18 14:54:22 +07:00
allburov e652c15d6c [core] Add manual jobs 2024-03-18 14:45:57 +07:00
allburov 4534eb60de [core] Add manual jobs 2024-03-18 14:44:43 +07:00
allburov 54c6c0c24c [core] Read more about Security 2024-03-18 14:21:49 +07:00
allburov 393694ae96 [core] Rm even 2024-03-18 14:17:57 +07:00
allburov 818bb730e4 Revert "[core] fix CI"
This reverts commit 61bd35a192.
2024-03-18 14:05:54 +07:00
allburov 61bd35a192 [core] fix CI 2024-03-18 14:02:59 +07:00
allburov 81f9df000a [core] fix CI
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
2024-03-18 13:48:46 +07:00
allburov 0dcb31c108 [core] Bump to 2024.3.6 2024-03-18 13:46:32 +07:00
allburov cd4140fda9 [core] Add exact version (tag) 2024-03-18 13:46:30 +07:00
allburov 117cc25cdb [core] Bump version to 2024.3.5 2024-03-17 19:17:32 +07:00
allburov 832ad26151 [core] Add /messages-admin-only
fix #274
2024-03-17 19:17:14 +07:00
allburov 5a344cd8ad [core] Bump version to 2024.3.4 2024-03-15 17:45:23 +07:00
allburov 0b0a67cdad [core] Update WEBJS engine 2024-03-15 17:45:21 +07:00
allburov a326a240f0 [core] Bump version 2024.3.3 2024-03-15 15:15:13 +07:00
allburov dfdb033769 [core] Add message.reaction webhook 2024-03-15 15:14:48 +07:00
allburov a31af45d97 [core] Change code on main 2024-03-13 17:49:52 +07:00
allburov cae955c483 [core] Bump to 2024.3.2
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
2024-03-07 19:28:12 +07:00
allburov 0bfff5259e [core] Use ubuntu in NOWEB 2024-03-07 19:27:45 +07:00
allburov 0fa83e603b [core] No more MOBILE engine 2024-03-04 23:14:28 +07:00
allburov 906b03804f [core] Update WEBJS
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
2024-03-02 18:08:52 +07:00
allburov 1ed7a61bea [core] Use fork for WEBJS in Makefile 2024-03-02 18:08:31 +07:00
allburov ad6ae7ab05 [core] Bump version to 2024.3.1 2024-03-02 18:02:30 +07:00
allburov 5e2de1d47d [core] Bump to 2024.2.4
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
2024-02-25 17:57:29 +07:00
allburov 591ca51104 [core] add GET /health 2024-02-25 17:56:58 +07:00
allburov b210841158 [core] Fix documentation for message.revoked 2024-02-21 10:31:54 +07:00
allburov a223a3985b [core] Self-hosted solution 2024-02-19 14:52:23 +07:00
allburov 8baa6a73cd [core] Self-hosted 2024-02-19 14:52:07 +07:00
allburov 508efac2ea [core] Add links on index 2024-02-19 14:51:59 +07:00
allburov b6eed9e228 [core] Rewrite tiers 2024-02-19 14:46:17 +07:00
allburov b62cad07f0 [core] Icons on main page 2024-02-19 14:28:18 +07:00
allburov 6d552d27ac [core] Bold 2024-02-19 14:11:24 +07:00
allburov 39d0f2a060 [core] Fix doc about WEBJS
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
2024-02-18 20:22:45 +07:00
allburov 0b03abee91 [core] Fix delete file when it doesn't exist anymore 2024-02-18 20:22:41 +07:00
allburov b4fb69d0ee [core] Use extends instead of implements for LocalStoreCore.ts 2024-02-18 19:55:54 +07:00
allburov 5b9ed029b3 [core] NOWEB - fix stop session 2024-02-18 19:42:32 +07:00
allburov c29397371b [core] Use network host in mongo example 2024-02-18 19:37:45 +07:00
allburov fe47e27788 [core] Fix yarn file 2024-02-18 19:37:33 +07:00
allburov a14c702c79 [core] Bump to 2024.2.3 2024-02-18 19:25:12 +07:00
allburov fe4246036d [core] Support MongoDB 2024-02-18 19:21:19 +07:00
allburov 074063b814 [core] Fix set presence documentation 2024-02-12 11:34:15 +07:00
allburov 0271a8b721 [core] Fix changelog version
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
2024-02-10 15:09:16 +07:00
allburov 08617383be [core] Listen for page close event
fix #262
2024-02-10 15:08:03 +07:00
allburov 3840459b0a [core] add noweb engine performance 2024-02-09 15:11:36 +07:00
Sunil Sankar aee7ac28bc [core] Fix the image name (#260)
The image name is wrongly mentioned
2024-02-05 14:02:21 +07:00
allburov 9e6cd39b2d [core] fix types
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
2024-02-01 16:23:42 +03:00
allburov 8898429046 [core] Update engines 2024-02-01 16:23:36 +03:00
allburov a74def6dbd [core] Add Patron Portal link 2024-02-01 16:15:42 +03:00
allburov 9f783cd35e [core] Add Patron Portal link 2024-02-01 16:14:04 +03:00
allburov 9d2f061d81 [core] Pass other parameters to requestCode, like locale 2024-01-27 15:11:16 +07:00
allburov a6045b2d54 [core] Add badge example 2024-01-27 13:58:50 +07:00
allburov 6142b2b564 [core] Link fixes 2024-01-27 13:56:30 +07:00
allburov ed53ccb919 [core] One more PRO tier perk 2024-01-27 13:54:38 +07:00
allburov 1ab45c6cfd [core] Add MOBILE engine note 2024-01-27 13:40:10 +07:00
allburov c2fdb090e1 [core] build via ssh 2024-01-27 13:40:10 +07:00
allburov a10b47eb7e [core] Dockerfile - mount ssh in case of private repositories 2024-01-27 13:40:10 +07:00
allburov 7b234e2e37 [core] make build-ssh 2024-01-27 13:40:10 +07:00
allburov 90d45a4698 [core] Add captcha API endpoints 2024-01-27 13:40:10 +07:00
allburov 5e40b70e19 [core] NOWEB - Listen connection events from the start 2024-01-27 13:40:10 +07:00
allburov a27d0c3efb [core] Add MOBILE engine 2024-01-27 13:40:10 +07:00
allburov 46ed506b35 [core] start stop typing in the example 2024-01-27 13:01:52 +07:00
allburov 0ad813a1fe [core] Add links 2024-01-08 18:58:44 +07:00
allburov e57e42f47a [core] Add tiers 2024-01-08 18:53:31 +07:00
Alex cc58157d37 [core] Add badges for patreons 2024-01-08 11:55:34 +07:00
Alex 9b5bb0a339 [core] Create gh-team-labels.yml 2024-01-07 16:34:03 +07:00
Alex 84ebbea287 Delete .github/.github/gh-team-labels.yml 2024-01-07 16:33:44 +07:00
Alex 1c2021f54b Update gh-team-labels.yml 2024-01-07 16:33:09 +07:00
Alex 98a7f00d7d [core] Update gh-team-labels.yml 2024-01-07 16:29:14 +07:00
Alex 60d97d0e67 [core] Create gh-team-labels.yml 2024-01-07 16:28:17 +07:00
allburov 03f4a07cbe [core] Update NOWEB 2023-12-26 18:33:53 +07:00
allburov 3fbe526793 [core] log phone 2023-12-26 17:54:34 +07:00
allburov a892f03382 [core] Bump version to 2023.12.3 2023-12-26 17:20:12 +07:00
allburov 8db69f6e69 [core] Update WEBJS 2023-12-26 17:20:00 +07:00
allburov f9037ff9fc [core] Add github link to authroize-code 2023-12-26 17:10:37 +07:00
allburov 366ddffa2b [core] Add more about How to not get Banned 2023-12-22 16:05:25 +07:00
allburov b8468588de [core] Add note about wa.me link 2023-12-18 21:12:43 +07:00
allburov 62dd6f7f4a [core] No --rm 2023-12-11 13:26:33 +07:00
allburov 858202f1bb [core] Add chatId to changelog 2023-12-02 16:36:20 +07:00
allburov db7900dc26 [core] Bump version to 2023.12.2 2023-12-02 16:34:20 +07:00
allburov aa87e437dc [core] Add note for Brazilian phone number 2023-12-02 16:33:50 +07:00
allburov 741e5e86f8 [core] Reformat send messages documentation 2023-12-02 16:28:44 +07:00
allburov 390a171891 [core] Document check exists changes 2023-12-02 16:23:00 +07:00
allburov 1fc5e2b47c [core] Add chatId to check exists result 2023-12-02 16:13:23 +07:00
allburov 8926dc7cc6 [core] update swagger 2023-12-01 09:38:52 +07:00
allburov 5c3d3c0d70 [core] No null in swagger 2023-12-01 09:38:52 +07:00
allburov 41b29cbf60 [core] Update swagger
Release / amd64 - chrome - chrome (push) Waiting to run
Release / amd64 - chromium - latest (push) Waiting to run
Release / linux/arm64 - chromium - arm (push) Waiting to run
Release / amd64 - none - noweb (push) Waiting to run
Release / linux/arm64 - none - noweb-arm (push) Waiting to run
2023-12-01 09:34:25 +07:00
allburov 44463c199a [core] Try to fix swagger for redoc 2023-12-01 09:33:56 +07:00
allburov 9071adcdcc [core] Update NOWEB engine 2023-12-01 09:32:11 +07:00
allburov 21cd92ca13 [core] Update WEBJS engine 2023-12-01 09:30:02 +07:00
allburov d8a3e8dc43 [core] Bump version to 2023.12.1 2023-12-01 09:25:23 +07:00
allburov 3f5707952c [core] Update swagger 2023-12-01 09:25:06 +07:00
allburov 38a9590be0 [core] Add screenshot and QR to changelog
Fix #177
2023-11-30 18:01:51 +07:00
allburov a7ce117b87 [core] VENOM supports /qr 2023-11-30 18:01:51 +07:00
allburov c3b24a243c [core] document QR code formats 2023-11-30 18:01:51 +07:00
allburov cb2c11df43 [core] screenshot base64 2023-11-30 18:01:50 +07:00
allburov 98f88dcf68 [core] screenshot doc 2023-11-30 18:01:50 +07:00
allburov 9fb12e0e23 [core] Add base64 to screenshot 2023-11-30 18:01:49 +07:00
allburov 0ca106f16b [core] Fix swagger 2023-11-30 18:01:49 +07:00
allburov 33210c6374 [core] Get raw QR value 2023-11-30 18:01:49 +07:00
allburov 045ab67f5d [core] Add BufferResponseInterceptor 2023-11-30 18:01:49 +07:00
allburov 19259c93ea [core] Return json or binary based on Accept header 2023-11-30 18:01:49 +07:00
allburov 9b6784a018 [core] Use "default" session by default 2023-11-30 18:01:49 +07:00
allburov 2fe3706e9c [core] Add base64 file 2023-11-30 18:01:49 +07:00
allburov a4e310a7f8 [core] Get screenshot return only buffer 2023-11-30 18:01:49 +07:00
allburov 802da9f3b2 [core] Use StreamableFile 2023-11-30 18:01:49 +07:00
allburov 0692979b19 [core] Add swagger to config page 2023-11-25 20:43:05 +07:00
allburov fb8b146bc4 [core] Add hide swagger doc 2023-11-25 20:33:35 +07:00
allburov fdbaa43ec9 [core] Add WHATSAPP_SWAGGER_ENABLED environment variable 2023-11-25 20:33:35 +07:00
allburov 4a807530c1 [core] Remove unused method 2023-11-25 20:33:35 +07:00
allburov 84784faa1e [core] eslint no warnings 2023-11-25 20:03:34 +07:00
allburov bd40978dee [core] Apply prettier to other files too 2023-11-25 19:56:32 +07:00
allburov d4d94ffe0e [core] Add empty line linter 2023-11-25 19:44:16 +07:00
allburov d984382a33 [core] Run linter in pre-commit hook 2023-11-25 19:41:41 +07:00
allburov 02d05812d2 [core] Update prettier 2023-11-25 19:09:25 +07:00
allburov 1dbf568bac [core] Add more props 2023-11-25 19:09:25 +07:00
allburov 6bc3aed348 [core] print width 2023-11-25 19:03:58 +07:00
allburov c1e8e0f09c [core] tab 2023-11-25 19:03:58 +07:00
allburov 8f8bcfc474 [core] Don't use tabs 2023-11-25 19:03:58 +07:00
allburov b386df982d [core] bracketSpacing 2023-11-25 19:03:58 +07:00
allburov fa846ddf9b [core] arrowParens always 2023-11-25 19:03:58 +07:00
allburov 16685ed8ea [core] Add endOfLine 2023-11-25 19:03:53 +07:00
allburov 4addccbd55 [core] Update node version in nvm 2023-11-25 19:03:53 +07:00
allburov e9a20c4326 [core] Run eslint 2023-11-25 19:03:53 +07:00
Alex f073aeef13 Update issue templates 2023-11-25 18:43:22 +07:00
allburov eb08739eea [core] Send 404 if file does not exist
fix #134
2023-11-25 18:16:51 +07:00
allburov aff3b01e39 [core] Hide mentions 2023-11-25 18:03:49 +07:00
allburov 2d64b26e86 [core] Hide mentions from send message 2023-11-25 17:37:38 +07:00
allburov 7b7bd02503 [core] Media improvements
- Disable downloading files
- Add 'media' field
2023-11-25 17:25:19 +07:00
allburov 7904516c97 [core] Changelog for filename 2023-11-24 17:47:29 +07:00
allburov 6e0bafdd89 [core] Add doc about new filename field 2023-11-24 17:47:29 +07:00
allburov 2b1e605e5f [core] Add filename property - NOWEB 2023-11-24 17:47:29 +07:00
allburov f454310a09 [core] Add filename property - WEBJS 2023-11-24 17:47:29 +07:00
allburov b6579b5b96 [core] Add filename property 2023-11-24 17:47:29 +07:00
allburov 4ef06d7b92 [docs] Add doc for GET /info-admin-only 2023-11-20 16:25:21 +07:00
allburov e0c594a71b [core] Add GET /info-admin-only 2023-11-20 16:23:23 +07:00
allburov a48d386d8b [core] Update WEBJS 2023-11-20 16:23:21 +07:00
allburov d592858a90 [core] Add name to job 2023-11-05 20:19:42 +07:00
allburov a3cb3e983a [core] No chrome on arm
Release / docker-build (chrome, amd64, buildjet-4vcpu-ubuntu-2204, chrome) (push) Waiting to run
Release / docker-build (chromium, amd64, buildjet-4vcpu-ubuntu-2204, latest) (push) Waiting to run
Release / docker-build (chromium, linux/arm64, buildjet-4vcpu-ubuntu-2204-arm, arm) (push) Waiting to run
Release / docker-build (none, amd64, buildjet-4vcpu-ubuntu-2204, noweb) (push) Waiting to run
Release / docker-build (none, linux/arm64, buildjet-4vcpu-ubuntu-2204-arm, noweb-arm) (push) Waiting to run
2023-11-05 20:16:02 +07:00
allburov 4eb9029b2c [core] Add build-all 2023-11-05 18:28:34 +07:00
allburov b3835b0aa0 [core] echo USE_BROWSER 2023-11-05 18:28:29 +07:00
allburov b2db58a922 [core] Document docker images 2023-11-05 18:24:03 +07:00
allburov acb6b8e0d3 [core] Install fonts if using a browser 2023-11-05 18:14:28 +07:00
allburov 21c6e1e860 [core] Add chrome\noweb builds 2023-11-05 18:10:11 +07:00
allburov 571b65c423 [core] Specify browser args 2023-11-05 18:08:33 +07:00
allburov 1631a62abe [core] Bump version to 2023.11.1 2023-11-05 18:01:09 +07:00
allburov e88a7ca8ce [core] Use github actions matrix 2023-11-05 17:59:44 +07:00
allburov d54f64a9cc [core] Add changelog record for send video 2023-11-05 17:44:30 +07:00
allburov 03dbd5db82 [core] Add docs for send video 2023-11-05 17:31:43 +07:00
allburov 2446c292bf [core] Add /sendVideo API 2023-11-05 17:31:40 +07:00
allburov 5ab99dfd69 [core] Add video example 2023-11-05 16:04:13 +07:00
allburov 605f46fda8 [core] Bump version to 2023.10.18
Release / docker-amd64 (push) Waiting to run
Release / docker-arm (push) Waiting to run
2023-10-18 14:55:32 +07:00
allburov e53f1eafe8 [core] up WEBJS engine 2023-10-18 14:55:16 +07:00
allburov 1457185e84 [core] Add session.status as default event 2023-10-15 00:18:00 +07:00
allburov ad43bec18d [core] Bump version to 2023.10.15 2023-10-15 00:03:16 +07:00
allburov c0a4b223ea [core] add session.status 2023-10-15 00:03:13 +07:00
allburov 65917e1957 [core] Add types for environment (aka version) 2023-10-13 18:54:30 +07:00
allburov a19cede60d [core] Document revoked webhook in swagger 2023-10-13 18:54:30 +07:00
allburov a3ead95ea4 [core] Add engine to version (fix #156) 2023-10-13 18:54:30 +07:00
allburov c46bc1b923 [core] Add me and version to webhook 2023-10-12 16:54:45 +07:00
allburov b327212cbe [core] Bump versio nto 2023.10.12 2023-10-12 16:40:10 +07:00
allburov 4f348c7e48 [core][webjs] Add message.revoked (fix #190) 2023-10-12 16:38:43 +07:00
allburov f2d0001b11 [core] Update openapi.json 2023-09-18 11:55:50 +07:00
allburov 66a224a0e3 [core] Patreon first 2023-09-18 11:54:49 +07:00
allburov 1fa1206568 [core] Adjust header for swagger 2023-09-18 11:54:41 +07:00
allburov 87eea28ac2 [core] Mention feature matrix in docs 2023-09-18 11:42:26 +07:00
allburov 29ca0217b3 [core] Remove "only" engines 2023-09-18 11:31:53 +07:00
allburov 306f75ff3b [core] Fix text 2023-09-18 11:20:29 +07:00
allburov 6ecb203570 [core] Add webhooks 2023-09-18 11:17:22 +07:00
allburov 2e7a3a6b61 [core] Add presence endpoints 2023-09-18 11:13:18 +07:00
allburov 86bc4a92ba [core] Add groups endpoints 2023-09-18 11:11:48 +07:00
allburov f652277e18 [core] Init features by engines 2023-09-18 11:05:53 +07:00
allburov 14a3535439 [core] throw NotImplemented by default 2023-09-18 10:39:21 +07:00
allburov edce7424de [core] Update static swagger for site 2023-09-17 19:09:45 +07:00
allburov 0fa121bbe2 [core] Update openapi.json 2023-09-17 18:50:37 +07:00
allburov 9c046a92be [core] Document webhooks in Swagger 2023-09-17 18:48:23 +07:00
allburov e4506e14da [core] Update next/swagger 2023-09-17 17:31:26 +07:00
allburov 515a00346c [core] Adjust current engine doc 2023-09-17 16:44:06 +07:00
allburov 399e27e24e [core] Name endpoints and webhooks 2023-09-17 15:59:27 +07:00
allburov 9413376138 [core] Bump WAHA version 2023-09-11 15:26:24 +07:00
allburov 3caec14783 [core] Update swagger 2023-09-11 15:26:14 +07:00
allburov 6e427a0a34 [core] Update yarn, engines
Release / docker-amd64 (push) Waiting to run
Release / docker-arm (push) Waiting to run
2023-09-07 17:33:27 +07:00
allburov 40c5e95d93 [core] Up version 2023-09-07 17:33:18 +07:00
allburov ab70e27266 [core] fix for QR scanning 2023-09-07 16:47:17 +07:00
allburov 301b6f57d3 [core] Add changelog note 2023-09-07 13:54:06 +07:00
allburov 4c9f5ed907 [core] Add personal key to Pro 2023-09-07 13:49:22 +07:00
allburov 04d65150ed [core] Add install doc 2023-09-07 13:47:41 +07:00
allburov d29165c9a5 [core] Remove buttons API 2023-09-07 13:11:49 +07:00
allburov 30db175d52 No more semver build, only latest 2023-09-04 18:42:54 +07:00
allburov 5c666c0dd4 Use buildjet with arm
Release / docker-amd64 (push) Waiting to run
Release / docker-arm (push) Waiting to run
2023-09-04 18:39:57 +07:00
allburov 3ccc0469c0 Use buildjet 2023-09-04 18:39:55 +07:00
allburov 5ab3244d6a adjust CI 2023-09-04 18:39:52 +07:00
allburov 05bc8abbee [core] Bump version to 2023.9.3 2023-09-03 19:30:47 +07:00
allburov 8e9056a0cd [core] Add /api/sessions/{session}/me endpoint
Fix #191
2023-09-03 19:30:16 +07:00
allburov ea75b357a7 [core] Log engine events if DEBUG enabled for NOWEB 2023-09-03 16:33:08 +07:00
allburov 2b607e9b44 [core] Bump version to 2023.8.29 2023-08-29 07:49:13 +03:00
allburov 57d3528a96 [core] Apply code review suggestions 2023-08-29 07:48:51 +03:00
allburov 660a04aa52 [core] Document polls 2023-08-29 07:48:51 +03:00
allburov d0a408001d [core] poll.vote.failed 2023-08-29 07:48:51 +03:00
allburov 48391533a6 [core] poll.vote 2023-08-29 07:48:51 +03:00
allburov f2113adbbc [core] Send poll 2023-08-29 07:48:51 +03:00
allburov abfcbc7397 [core] Update WEBJS
Release / deploy-docker (push) Waiting to run
2023-08-23 16:40:46 +03:00
allburov 96f2982325 [core] Bump to 2023.8.23 2023-08-23 12:15:06 +03:00
allburov 3a521bc06c [core] Update WEBJS engine 2023-08-23 12:14:51 +03:00
allburov 6fbaec0083 [core] Bump to 2023.8.21 2023-08-21 14:25:06 +03:00
allburov cae94c7b5c [core] catch error while handling incoming message NOWEB 2023-08-21 14:24:51 +03:00
allburov bce012f692 [core] Bump version to 2023.8.19
Release / deploy-docker (push) Waiting to run
2023-08-19 12:36:08 +03:00
allburov b23b639a8b [core] Support message.ack for NOWEB, add ackName 2023-08-19 12:35:44 +03:00
allburov 5a628907ed [core] Add pairing auth method for NOWEB, add QR endpoint 2023-08-13 16:08:56 +03:00
allburov 6da479c0d7 [core] Update WEBJS engine
Release / deploy-docker (push) Waiting to run
2023-08-10 10:45:40 +03:00
allburov cbb321df6d [core] Bump to 2023.8.10 2023-08-10 07:27:36 +03:00
allburov 0a7beb6909 [core] Update webjs engine
Fix TypeError: Cannot read properties of undefined (reading 'CallCollection')
2023-08-10 07:27:33 +03:00
allburov 2105094ac3 [core] Bump version to 2023.8.8
Release / deploy-docker (push) Waiting to run
2023-08-08 08:57:31 +03:00
allburov d8fee686f8 [core] Update WEBJS and NOWEB engines 2023-08-08 08:56:23 +03:00
allburov 75fc1fd7e0 [docs] Update swagger (openapi) 2023-08-07 08:06:36 +03:00
allburov e718652491 [docs] Keep only versions as headers 2023-08-07 08:05:01 +03:00
allburov bcb49f2be7 [docs] Fix changelog for stories 2023-08-06 18:52:56 +03:00
allburov dab63e4060 [example] Send message and reply 2023-08-06 18:02:36 +03:00
allburov 3fdacbb6ac [core] set defaultQueryTimeoutMs to undefined 2023-08-01 16:42:16 +07:00
allburov f02b62e620 [plus] Show macos by default 2023-08-01 15:42:59 +07:00
allburov 51acce14a0 [plus] Add session to what's next? 2023-08-01 15:28:26 +07:00
allburov b63f6ac39e [core] Add status endpoints 2023-07-25 17:42:44 +07:00
allburov 9e107a8a76 [core] Update noweb engine 2023-07-23 16:49:21 +07:00
allburov 8c083242d3 [core] add documentation and changelog for info-admin-only 2023-07-21 16:08:04 +07:00
gqlxj1987 2a068d561f [core] Add PUT /api/groups/:id/settings/security/info-admin-only endpoint 2023-07-21 13:24:23 +07:00
allburov ef96fbf8c5 [core] Fix chatId bracket 2023-07-16 16:51:50 +07:00
allburov 2c381a0b9c [core] Add openapi json link 2023-07-16 16:41:37 +07:00
allburov fef2bcb6e2 [core] create directory before saving file
Release / deploy-docker (push) Waiting to run
2023-07-16 16:25:41 +07:00
allburov 2f6ed2fb58 [core] Add chats endpoints
Release / deploy-docker (push) Waiting to run
2023-07-16 16:14:12 +07:00
allburov 4eb23d2c09 [core] Bump version to 2023.7.16 2023-07-16 16:14:08 +07:00
allburov ec3de8dbcf [core] Init folder for a session 2023-07-16 13:30:40 +07:00
allburov f6f09747dc [core] pin node:20-bullseye
Release / deploy-docker (push) Waiting to run
2023-07-14 10:10:28 +07:00
allburov 27a534a605 [core] add set session presence endpoint 2023-07-12 16:46:15 +07:00
allburov 3cbd940843 [core] Add swagger image at the top of quick start 2023-07-07 14:26:23 +07:00
allburov e728eec01a [core] Move tiers
Release / deploy-docker (push) Waiting to run
2023-07-05 10:29:10 +07:00
allburov d06d2b78a8 [core] Move donations to top, add links 2023-07-05 10:27:32 +07:00
allburov 5878a9196e [core] Pin yarn version to 3.6.1 2023-07-03 21:52:32 +07:00
allburov 85dd061f96 [core] ignore .yaml folder 2023-07-03 21:52:29 +07:00
allburov 8381c3e946 [core] Set retention days 5 2023-07-03 11:01:51 +07:00
allburov 6ff8a9705d [core] Add cleanup github script 2023-07-03 10:59:56 +07:00
allburov fb5819b966 [core] Create folder if there's no yet
Release / deploy-docker (push) Waiting to run
2023-06-29 19:05:26 +07:00
allburov 5cc1af3f82 [core] Bump to 2023.7.1 2023-06-29 18:56:12 +07:00
allburov c279de694c [core] Update NOWEB engine 2023-06-29 18:55:20 +07:00
allburov f7a1787f1f [core] Add command to update NOWEB 2023-06-29 18:55:20 +07:00
allburov 5442fd6e93 [core] Update WEBJS engine 2023-06-29 18:55:20 +07:00
allburov b8c8ca7653 [core] Use yarn v2 commands to update package 2023-06-29 18:55:20 +07:00
allburov 5ca7dbc84b [core] Update swagger 2023-06-29 18:38:41 +07:00
allburov d836c9706f [core] Add for-swagger make command 2023-06-29 18:38:34 +07:00
allburov 318be43a4f [core] fix start\stop issue with NOWEB engine 2023-06-29 18:31:36 +07:00
allburov 95bebce731 [core] fix sessions with no config 2023-06-29 18:31:34 +07:00
allburov 27b8c9d058 [core] Make config optional 2023-06-29 18:14:23 +07:00
allburov 10d4d24526 [core] Place Boosty first 2023-06-29 18:07:14 +07:00
allburov b19917bd3d [core] Always logout from session 2023-06-29 18:06:07 +07:00
allburov 4b6774b1db [core] WAHA Plus links last 2023-06-26 11:29:31 +07:00
allburov 360e0a7951 [core] All tiers 2023-06-26 11:28:01 +07:00
allburov 171f516eee [core] Patreon first 2023-06-26 11:17:58 +07:00
allburov 01943f6970 [core] Remove global env.varilabels from webhooks 2023-06-25 14:01:22 +07:00
allburov 953d48ee1f [core] Add links to Quick Start 2023-06-25 14:00:51 +07:00
allburov 2b6028bcb1 [core] Make alert dismissible 2023-06-25 13:51:36 +07:00
allburov 79b7b7d2a2 [core] Adjust headers 2023-06-25 13:34:11 +07:00
allburov 93a6a7b87f [core] Remove youtube video from other pages 2023-06-25 13:14:30 +07:00
allburov 3b499d6af5 [core] Change headers to mobile first 2023-06-23 15:04:22 +07:00
allburov 6481919597 [core] Change swagger title to WAHA 2023-06-23 14:57:17 +07:00
allburov 228f6ec8c5 [core] No one-time 2023-06-23 14:48:03 +07:00
allburov 6723f201b7 [core] Add make start-proxy command 2023-06-23 14:45:22 +07:00
allburov c250bb49f0 [core] Make proxy per session 2023-06-23 14:44:14 +07:00
allburov 3b607662e5 [core] Flexible webhooks 2023-06-22 18:20:27 +07:00
allburov f2d7041cb0 [core] Fix Dockerfile with yarn v2 2023-06-19 13:10:43 +07:00
allburov afc06794c2 [core] No mobile yet 2023-06-19 12:16:52 +07:00
allburov 33eaafcff1 [core] update NOWEB engine, use yarn v2 2023-06-18 17:38:06 +07:00
allburov e5a8743b9a [core] Remove Get on links 2023-06-18 15:17:44 +07:00
allburov 3322c4e2a5 [core] Add eslint fix import plugin 2023-06-16 16:17:31 +07:00
allburov aa39aaf489 [core] You can run, not configure 2023-06-16 15:01:30 +07:00
allburov a238581f44 [core] Add presence event 2023-06-16 15:00:44 +07:00
allburov 00814ef64e [core] Add dedicated webhooks page 2023-06-16 14:56:35 +07:00
allburov 6362d2966b [core] Add active link to docker-compose.yaml file 2023-06-14 12:36:44 +07:00
allburov 4e181a82b6 [core] Use plus image in sessions 2023-06-14 12:35:45 +07:00
allburov 374199905d [core][noweb] Add presence endpoints and webhook 2023-06-14 12:27:39 +07:00
allburov 642079ab1f [core] Add changelog about mentions 2023-06-12 15:31:35 +07:00
allburov 215c9d96b9 [core] Add mentions
Fix #105
2023-06-12 15:27:53 +07:00
allburov 5369eda705 [core] Fix engine field 2023-06-09 16:25:31 +07:00
allburov 5e42bbe1eb [core] ignore webjs cache 2023-06-09 16:25:26 +07:00
allburov 79dd2ee03e [core] bump version to 2023.6.9 2023-06-09 16:25:24 +07:00
allburov 78d3eae44b [core] Fix storage issue 2023-06-09 16:25:22 +07:00
allburovandPierluca Lino a9ee68fe1a [core] Add proxy support
Co-authored-by: Pierluca Lino <pierluca.lino@dontouch.ch>

Co-authored-by: puntolino <pierluca.lino@dontouch.ch>
2023-06-07 17:02:18 +07:00
allburov ee5678ccfb [core] yarn upgrade instead of add 2023-06-07 17:02:18 +07:00
allburov 248a675c1a [core] No core images 2023-06-05 17:14:21 +07:00
allburov 6b1d84cf38 [core] Show core features first 2023-06-05 16:59:52 +07:00
allburov c0977538ff [core] change header 2023-06-03 18:51:23 +07:00
allburov c8727e8b2f [core] Add a link to PLUS 2023-06-03 18:49:01 +07:00
allburov 55a41e19f4 [core] Rename to WAHA Plus 2023-06-03 18:47:09 +07:00
allburov 6096c0b158 [core] Move help's files to overview 2023-06-03 18:44:35 +07:00
allburov 161c6dfd95 [core] Receive message 2023-06-03 18:39:16 +07:00
allburov 078bcf7652 [core] env variables block 2023-06-03 18:33:47 +07:00
allburov 57c6df3970 [core] Adjust sessions how to 2023-06-03 18:27:58 +07:00
allburov 1130ee1b21 [core] Add docker run on index 2023-06-01 13:15:02 +07:00
allburov c9c0a29740 Use 2023 year in changelog 2023-06-01 12:10:37 +07:00
allburov e60d972bff [core] Bump version to 2023.6.1
Release / deploy-docker (push) Waiting to run
2023-06-01 11:54:08 +07:00
allburov 3c4a139f52 [core] Update venom engine 2023-05-21 18:41:06 +07:00
allburov bf615efa96 [core] Apply pre-commit with prettier 2023-05-21 18:09:25 +07:00
allburov 2af3940be7 [core] Add prettier to pre-commit 2023-05-21 18:09:12 +07:00
allburov 64e145909e [core] Advanced sessions control 2023-05-21 18:01:04 +07:00
allburov e90f34cc96 [core] Pin markupsafe version
Release / deploy-docker (push) Waiting to run
Fix #97
2023-05-20 18:25:18 +07:00
allburov a23cf2dd26 [docs] Add port to receive message docker run command 2023-05-20 18:17:21 +07:00
allburov 7b623d0faa [core] Bump version 2023-05-20 18:11:36 +07:00
allburov 14788b1d53 [core] Update webjs engine 2023-05-20 18:11:33 +07:00
allburov e1bf8cf735 [core] Update swagger 2023-05-12 11:45:20 +07:00
allburov 2117731b46 [core] Add variables to Swagger 2023-05-12 11:44:29 +07:00
allburov 74f8fe1caf [core] bump version to 2023.5.11 2023-05-11 10:27:44 +07:00
allburov 9388a3b277 [core] Add caption to file 2023-05-11 10:27:41 +07:00
allburov 13e7a05e1b [core] Fix provide extended option dist/main.js:29:38 error 2023-05-07 10:31:23 +07:00
allburov 885fa25c0c [core] Add make build-plus command 2023-05-07 10:31:05 +07:00
allburov 966b35094f Bump version to 2023.5.3
Release / deploy-docker (push) Waiting to run
2023-05-03 09:17:44 +07:00
allburov 65607bf3b3 Handle extendedTextMessage
Fix #90
2023-05-03 09:17:24 +07:00
allburov 5fcba7a7db [core][docs] Remove the icon from headers 2023-04-27 18:37:05 +07:00
allburov f9ec3cb753 [core] Bump version 2023.4.27
Release / deploy-docker (push) Waiting to run
2023-04-27 09:13:03 +07:00
allburov bf6ffd65a9 [core] ignore all *sessions 2023-04-26 18:15:04 +07:00
allburov d680b6b43a [core] Add noweb engine 2023-04-26 18:14:38 +07:00
allburov 3ead3a0ba3 [core] Add GET /messages request
Fix #31
2023-04-26 18:14:08 +07:00
allburov 4c5c977310 [core][docs] No delay in bugfixes 2023-04-15 17:58:15 +07:00
allburov 89a9ce87da [core] Use the main branch in whatsapp webjs
Release / deploy-docker (push) Waiting to run
2023-04-14 10:43:02 +07:00
allburov 52e469f6ac [core] Bump version - 2023.4.14 2023-04-14 10:38:58 +07:00
allburov 4f275de8d4 [core] close session properly
Fix #83
2023-04-14 10:38:56 +07:00
allburov d9de41e350 [core] bump version - 2023.3.28 2023-04-14 10:38:54 +07:00
allburov a4c279ba25 [core] Add short description about webhooks
Release / deploy-docker (push) Waiting to run
2023-04-01 19:04:13 +07:00
allburov e68282a9e4 [core] Add video on the index 2023-04-01 18:53:37 +07:00
allburov 8613206c3a [core] Move video to introduction page 2023-04-01 18:50:30 +07:00
allburov 31b8cde8bf [core] Add youtube video 2023-04-01 18:46:19 +07:00
allburov 2f2f9520db [core] add session to webhook data
fix #80
2023-03-28 15:37:53 +07:00
allburov 2501ae836e [core] bump version 2023-03-28 15:37:53 +07:00
allburov 2c8bf91e77 [plus] Increase body limit for files - fix #79 2023-03-28 15:37:52 +07:00
allburov 0ac063498e [core] Fix addParticipans issue - https://github.com/pedroslopez/whatsapp-web.js/pull/2087 2023-03-28 15:37:52 +07:00
allburov 2bf672f0cd [core] Downgrade venom-bot 2023-03-22 19:14:12 +07:00
allburov ca209adca0 [core] bump version - 2023.3.21 2023-03-22 19:14:12 +07:00
allburov dd10c82c5e [core] Update engines - venom, whatsapp webjs 2023-03-22 19:14:12 +07:00
allburov c3ad2a0931 [core] Make update-dependencies - use yarn 2023-03-22 19:14:12 +07:00
allburov 30aacc8946 [core] Fix features 2023-03-22 19:13:23 +07:00
allburov 723a644937 Use "" for * in env variable 2023-02-28 16:59:28 +07:00
allburov 165eeb5bf2 Add note how to start ARM docker image 2023-02-28 10:00:06 +07:00
221 changed files with 27553 additions and 22255 deletions

No files matched your search

+2 -1
View File
@@ -1,5 +1,5 @@
Dockerfile
.sessions
.*sessions
files
venv
.wwebjs_auth
@@ -11,6 +11,7 @@ examples
# compiled output
/dist
/node_modules
.yarn
# Logs
logs
+33 -24
View File
@@ -1,27 +1,36 @@
module.exports = {
parser: '@typescript-eslint/parser',
parserOptions: {
project: 'tsconfig.json',
sourceType: 'module',
},
plugins: ['@typescript-eslint/eslint-plugin'],
extends: [
'plugin:@typescript-eslint/eslint-recommended',
'plugin:@typescript-eslint/recommended',
'prettier',
'prettier/@typescript-eslint',
parser: '@typescript-eslint/parser',
parserOptions: {
project: 'tsconfig.json',
sourceType: 'module',
},
plugins: ['@typescript-eslint/eslint-plugin', 'simple-import-sort'],
extends: [
'plugin:@typescript-eslint/eslint-recommended',
'plugin:@typescript-eslint/recommended',
'prettier',
'prettier/@typescript-eslint',
],
root: true,
env: {
node: true,
jest: true,
},
rules: {
'simple-import-sort/imports': 'error',
'simple-import-sort/exports': 'error',
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-inferrable-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/ban-ts-ignore': 'off',
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'lines-between-class-members': [
'error',
'always',
{ exceptAfterSingleLine: true },
],
root: true,
env: {
node: true,
jest: true,
},
rules: {
'@typescript-eslint/interface-name-prefix': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
"@typescript-eslint/ban-ts-ignore": "off",
"@typescript-eslint/ban-ts-comment": "off"
},
},
};
+14
View File
@@ -0,0 +1,14 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: wa_http_api
open_collective: # doks Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom:
- https://boosty.to/wa-http-api
- https://portal.devlike.pro/
+61
View File
@@ -0,0 +1,61 @@
---
name: Bug report
about: Create a report to help us improve
title: '[BUG][WEBJS] - '
labels: bug
assignees: ''
---
**Describe the bug**
> A clear and concise description of what the bug is. Feel free to remove
> sections that you don't feel to make the text shorter!
**Version**
```json
{
"version": "2023.11.1",
"engine": "NOWEB",
"tier": "PLUS",
"browser": "/usr/bin/google-chrome-stable"
}
```
> You can get the WAHA version by calling `GET /api/version` Try to update to
> [the latest version](https://github.com/devlikeapro/whatsapp-http-api/releases)
> before creating an issue!
**To Reproduce** Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
> A clear and concise description of what you expected to happen.
**Engine** I'm using **WEBJS** engine.
> If you set `WHATSAPP_DEFAULT_ENGINE` explicitly to
> [one of the engine](https://waha.devlike.pro/docs/how-to/engines/) - please
> provide that information here and in the issue title.
**Requests - Responses**
> Please attach all sent requests, responses that you sent.
**Docker Logs**
> Collect and attach related docker logs if you have any
> https://waha.devlike.pro/docs/how-to/deploy/#viewing-the-logs
**Screenshots**
> If applicable, add screenshots to help explain your problem.
**Additional context**
> Add any other context about the problem here.
+24
View File
@@ -0,0 +1,24 @@
---
name: Feature request
about: Suggest an idea for this project
title: '[Feature Request]'
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.** I'm always
frustrated when [...]
> A clear and concise description of what the problem is. Ex.
**Describe the solution you'd like**
> A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
> A clear and concise description of any alternative solutions or features
> you've considered.
**Additional context** Add any other context or screenshots about the feature
request here.
+18
View File
@@ -0,0 +1,18 @@
# Idea from
# https://stackoverflow.com/a/65539398/6753144
#
OWNER=devlikeapro
REPO=whatsapp-http-api-plus
# list workflows
gh api -X GET /repos/$OWNER/$REPO/actions/workflows | jq '.workflows[] | .name,.id'
# copy the ID of the workflow you want to clear and set it
WORKFLOW_ID=40218610
# list runs
gh api -X GET /repos/$OWNER/$REPO/actions/workflows/$WORKFLOW_ID/runs --paginate | jq '.workflow_runs[] | .id'
# delete runs
gh api -X GET /repos/$OWNER/$REPO/actions/workflows/$WORKFLOW_ID/runs --paginate | jq '.workflow_runs[] | .id' | xargs -I{} gh api -X DELETE /repos/$OWNER/$REPO/actions/runs/{} --silent
+10
View File
@@ -0,0 +1,10 @@
teamLabels:
- team: waha-patrons-pro
label: patron:PRO
comment: '[![patron:PRO](https://img.shields.io/badge/patron-PRO-188a42)](https://waha.devlike.pro/docs/how-to/plus-version/#tiers)'
- team: waha-patrons-advanced
label: patron:ADVANCED
comment: '[![patron:ADVANCED](https://img.shields.io/badge/patron-ADVANCED-4cd07d)](https://waha.devlike.pro/docs/how-to/plus-version/#tiers)'
- team: waha-patrons-plus
label: patron:PLUS
comment: '[![patron:PLUS](https://img.shields.io/badge/patron-PLUS-a0e6ba)](https://waha.devlike.pro/docs/how-to/plus-version/#tiers)'
+41 -13
View File
@@ -3,21 +3,47 @@ name: Release
on:
push:
tags:
- "*"
- '*'
jobs:
deploy-docker:
runs-on: ubuntu-latest
docker-build:
runs-on: ${{ matrix.runner }}
name: ${{ matrix.platform }} - ${{ matrix.browser }} - ${{ matrix.tag }}
strategy:
matrix:
include:
# Chromium
- runner: 'buildjet-4vcpu-ubuntu-2204'
tag: 'latest'
platform: 'amd64'
browser: 'chromium'
- runner: 'buildjet-4vcpu-ubuntu-2204-arm'
tag: 'arm'
platform: 'linux/arm64'
browser: 'chromium'
# Chrome
- runner: 'buildjet-4vcpu-ubuntu-2204'
tag: 'chrome'
platform: 'amd64'
browser: 'chrome'
# Chrome is not supported on arm64
# - runner: "buildjet-4vcpu-ubuntu-2204-arm"
# tag: "chrome-arm"
# platform: "linux/arm64"
# browser: "chrome"
# No browser
- runner: 'buildjet-4vcpu-ubuntu-2204'
tag: 'noweb'
platform: 'amd64'
browser: 'none'
- runner: 'buildjet-4vcpu-ubuntu-2204-arm'
tag: 'noweb-arm'
platform: 'linux/arm64'
browser: 'none'
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
with:
platforms: 'amd64'
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
@@ -25,10 +51,10 @@ jobs:
id: meta
uses: docker/metadata-action@v4
with:
images: ${{ secrets.DOCKER_IMAGE }}
flavor: latest=true
images: ${{ vars.DOCKER_IMAGE }}
flavor: latest=false
tags: |
type=semver,pattern={{version}}
type=raw,value=${{ matrix.tag }}
- name: Login to image repository
if: github.ref_type == 'tag'
@@ -42,7 +68,9 @@ jobs:
with:
context: .
file: Dockerfile
platforms: 'amd64'
platforms: ${{ matrix.platform }}
build-args: |
USE_BROWSER=${{ matrix.browser }}
push: ${{ github.ref_type == 'tag' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
+84
View File
@@ -0,0 +1,84 @@
name: Manual push
on:
workflow_dispatch:
inputs:
tag:
description: 'Tag to push'
required: true
default: 'dev'
push:
description: 'Push to registry'
required: true
type: boolean
default: true
jobs:
docker-build:
runs-on: ${{ matrix.runner }}
name: ${{ matrix.platform }} - ${{ matrix.browser }} - ${{ matrix.tag }}
strategy:
matrix:
include:
# Chromium
- runner: 'buildjet-4vcpu-ubuntu-2204'
tag: 'latest'
platform: 'amd64'
browser: 'chromium'
- runner: 'buildjet-4vcpu-ubuntu-2204-arm'
tag: 'arm'
platform: 'linux/arm64'
browser: 'chromium'
# Chrome
- runner: 'buildjet-4vcpu-ubuntu-2204'
tag: 'chrome'
platform: 'amd64'
browser: 'chrome'
# Chrome is not supported on arm64
# - runner: "buildjet-4vcpu-ubuntu-2204-arm"
# tag: "chrome-arm"
# platform: "linux/arm64"
# browser: "chrome"
# No browser
- runner: 'buildjet-4vcpu-ubuntu-2204'
tag: 'noweb'
platform: 'amd64'
browser: 'none'
- runner: 'buildjet-4vcpu-ubuntu-2204-arm'
tag: 'noweb-arm'
platform: 'linux/arm64'
browser: 'none'
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
images: ${{ vars.DOCKER_IMAGE }}
flavor: latest=false
tags: |
type=raw,value=${{ inputs.tag }}-${{ matrix.tag }}
- name: Login to image repository
if: github.ref_type == 'tag'
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
file: Dockerfile
platforms: ${{ matrix.platform }}
build-args: |
USE_BROWSER=${{ matrix.browser }}
push: ${{ inputs.push }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
+1
View File
@@ -31,6 +31,7 @@ jobs:
with:
path: docs/site/public
name: public
retention-days: 5
deploy-github-pages:
needs: build
+4 -1
View File
@@ -1,9 +1,12 @@
.sessions
.yarn
example.ts
.*sessions
tokens
files
venv
.wwebjs_auth
test.js
.wwebjs_cache
# compiled output
/dist
+1 -1
View File
@@ -1 +1 @@
v18.12.0
v20.5.0
+33 -6
View File
@@ -1,4 +1,31 @@
exclude: |
(?x)^(
^src/dashboard/.*|
^src/core/engines/webjs/.*html
)$
repos:
- repo: local
hooks:
- id: lint
name: lint
language: system
entry: bash -c '$HOME/.nvm/nvm-exec npm run lint'
pass_filenames: false
files: |
(?x)^(
src/.*|
)$
- repo: https://github.com/pre-commit/mirrors-prettier
rev: 'v3.1.0'
hooks:
- id: prettier
exclude: |
(?x)^(
docs/.*|
README.md|
)$
- repo: https://github.com/Lucas-C/pre-commit-hooks-nodejs
rev: v1.1.2
hooks:
@@ -12,9 +39,9 @@ repos:
language: pygrep
entry: 'plus'
files: |
(?x)^(
src/api/.*|
src/core/.*|
src/structures/.*|
src/config.service.ts|
)$
(?x)^(
src/api/.*|
src/core/.*|
src/structures/.*|
src/config.service.ts|
)$
+11 -2
View File
@@ -1,4 +1,13 @@
{
"singleQuote": true,
"trailingComma": "all"
}
"trailingComma": "all",
"endOfLine": "auto",
"arrowParens": "always",
"bracketSpacing": true,
"useTabs": false,
"tabWidth": 2,
"semi": true,
"quoteProps": "as-needed",
"proseWrap": "always",
"printWidth": 80
}
+3
View File
@@ -0,0 +1,3 @@
nodeLinker: node-modules
yarnPath: .yarn/releases/yarn-3.6.3.cjs
+3 -1
View File
@@ -1,2 +1,4 @@
# Changelog
You can find changelog on [the changelog page](https://waha.devlike.pro/docs/help/changelog/)
You can find changelog on
[the changelog page](https://waha.devlike.pro/docs/help/changelog/)
+19 -8
View File
@@ -1,32 +1,43 @@
#
# Build
#
FROM node:18 as build
FROM node:20-bullseye as build
ENV PUPPETEER_SKIP_DOWNLOAD=True
# npm packages
RUN apt-get update \
&& apt-get install -y openssh-client
RUN apt install openssh-client
RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts
WORKDIR /src
COPY package.json .
COPY yarn.lock .
RUN yarn install
RUN yarn set version 3.6.3
RUN --mount=type=ssh yarn install
# App
WORKDIR /src
ADD . /src
RUN npm run build && find ./dist -name "*.d.ts" -delete
RUN --mount=type=ssh yarn install
RUN yarn build && find ./dist -name "*.d.ts" -delete
#
# Final
#
FROM node:18 as release
FROM node:20-bullseye as release
ENV PUPPETEER_SKIP_DOWNLOAD=True
ARG USE_BROWSER=chromium
# Install fonts
RUN apt-get update \
RUN echo "USE_BROWSER=$USE_BROWSER"
# Install fonts if using either chromium or chrome
RUN if [ "$USE_BROWSER" = "chromium" ] || [ "$USE_BROWSER" = "chrome" ]; then \
apt-get update \
&& apt-get install -y fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
&& rm -rf /var/lib/apt/lists/*; \
fi
# Install Chromium
RUN if [ "$USE_BROWSER" = "chromium" ]; then \
@@ -57,4 +68,4 @@ COPY --from=build /src/dist ./dist
# Run command, etc
EXPOSE 3000
CMD npm run start:prod
CMD yarn start:prod
+25 -20
View File
@@ -1,26 +1,23 @@
build:
docker build . -t devlikeapro/whatsapp-http-api
run-webjs:
docker run \
--rm -d \
-p 127.0.0.1:3000:3000/tcp \
-v `pwd`/.sessions:/app/.sessions \
-e WHATSAPP_HOOK_URL=https://httpbin.org/post \
-e WHATSAPP_HOOK_EVENTS=* \
-e WHATSAPP_API_KEY=321 \
--name whatsapp-http-api devlikeapro/whatsapp-http-api
build-chrome:
docker build . -t devlikeapro/whatsapp-http-api:chrome --build-arg USE_BROWSER=chrome
run-venom:
docker run \
--rm -d \
-p 127.0.0.1:3000:3000/tcp \
-v `pwd`/.sessions:/app/.sessions \
-e WHATSAPP_HOOK_URL=https://httpbin.org/post \
-e WHATSAPP_HOOK_EVENTS=* \
-e WHATSAPP_DEFAULT_ENGINE=VENOM \
-e WHATSAPP_API_KEY=321 \
--name whatsapp-http-api devlikeapro/whatsapp-http-api
build-noweb:
docker build . -t devlikeapro/whatsapp-http-api:noweb --build-arg USE_BROWSER=none
build-all: build build-chrome build-noweb
build-plus:
docker build . -t devlikeapro/whatsapp-http-api-plus
build-ssh:
# check IMAGE provided
@[ "${IMAGE}" ] || ( echo "Add APP: make build-ssh image=devlikeapro/whatsapp-http-api"; exit 1 );
eval $(ssh-agent) && \
ssh-add ~/.ssh/id_rsa && \
docker buildx build --ssh default=${SSH_AUTH_SOCK} . -t ${IMAGE} --build-arg USE_BROWSER=none
stop:
docker stop whatsapp-http-api
@@ -31,8 +28,16 @@ clean: stop
push:
docker push devlikeapro/whatsapp-http-api
for-swagger:
WHATSAPP_SWAGGER_CONFIG_ADVANCED=true npm run start
update-swagger:
wget http://localhost:3000/-json -O ./docs/site/static/swagger/openapi.json
update-dependencies:
. ${NVM_DIR}/nvm.sh && nvm exec yarn install venom-bot whatsapp-web.js --save
. ${NVM_DIR}/nvm.sh && nvm exec yarn up whatsapp-web.js@https://github.com/devlikeapro/whatsapp-web.js#main-fork
. ${NVM_DIR}/nvm.sh && nvm exec yarn up @adiwajshing/baileys@github:WhiskeySockets/Baileys
. ${NVM_DIR}/nvm.sh && nvm exec yarn up venom-bot
start-proxy:
docker run --rm -d --name squid-container -e TZ=UTC -p 3128:3128 ubuntu/squid:5.2-22.04_beta
+6 -7
View File
@@ -4,7 +4,9 @@
<img src="./docs/site/static/images/logo.png" alt="Image" />
</p>
**WAHA** - **W**hats**A**pp **H**TTP **A**PI that you can install on your own server and run in less than 5 minutes!
**WAHA** - **W**hats**A**pp **H**TTP **A**PI (REST API) that you can install on your own server and run in less than 5 minutes!
[![Docker Pulls](https://img.shields.io/docker/pulls/devlikeapro/whatsapp-http-api)](https://hub.docker.com/r/devlikeapro/whatsapp-http-api)
- Documentation: [https://waha.devlike.pro/](https://waha.devlike.pro/)
- Swagger Example: [https://waha.devlike.pro/swagger](https://waha.devlike.pro/swagger)
@@ -40,7 +42,6 @@
- Receive messages
- Message replies
- Send location
- Send buttons
- Receive location
- React to messages
- Send media (images/documents/files)
@@ -61,8 +62,6 @@
## Updates
- Bug fixes and updates come as soon as they are implemented.
- One month delay in bug fixes and updates.
## Groups
- Create a group
@@ -77,6 +76,7 @@
- Block/unblock contacts
- Get contact info
- Get profile pictures
- Get presence (online\offline\typing) status
# Quick start
@@ -111,7 +111,7 @@ docker pull devlikeapro/whatsapp-http-api
![](./docs/site/content/en/docs/overview/quick-start//images/versions/plus.png) For Plus version, we use login to get the image before:
```bash
docker login -u devlikeapro -p {PASSWORD}
docker login -u devlikeapro -p {KEY}
docker pull devlikeapro/whatsapp-http-api-plus
docker logout
```
@@ -123,7 +123,7 @@ Read more about how to get `PASSWORD` for [Plus Version →]({{< relref "plus-ve
Run WhatsApp HTTP API:
```bash
docker run -it --rm -p 127.0.0.1:3000:3000/tcp --name whatsapp-http-api devlikeapro/whatsapp-http-api
docker run -it --rm -p 3000:3000/tcp --name whatsapp-http-api devlikeapro/whatsapp-http-api
# It prints logs and the last line must be
# WhatsApp HTTP API is running on: http://[::1]:3000
@@ -205,4 +205,3 @@ curl -d "{\"chatId\": \"${PHONE}@c.us\", \"text\": \"Hello from WhatsApp HTTP AP
## What is next?
[Go and read the full documentation!](https://waha.devlike.pro/docs/overview/introduction/)
+72
View File
@@ -0,0 +1,72 @@
version: '3'
services:
whatsapp-http-api:
image: devlikeapro/whatsapp-http-api
container_name: whatsapp-http-api
ports:
- '3000:3000/tcp'
environment:
# Environment variables from https://waha.devlike.pro/docs/how-to/config/
- WHATSAPP_HOOK_URL=https://httpbin.org/post
- WHATSAPP_HOOK_EVENTS=message
- WHATSAPP_DEFAULT_ENGINE=WEBJS
restart: always
whatsapp-http-api-plus:
image: devlikeapro/whatsapp-http-api-plus
container_name: whatsapp-http-api-plus
ports:
- '3000:3000/tcp'
volumes:
- './.sessions:/app/.sessions'
environment:
# Environment variables from https://waha.devlike.pro/docs/how-to/config/
# - WHATSAPP_RESTART_ALL_SESSIONS=True
# - WHATSAPP_HOOK_URL=https://httpbin.org/post
# - WHATSAPP_HOOK_EVENTS=message
# - WHATSAPP_API_HOSTNAME=localhost
- WHATSAPP_DEFAULT_ENGINE=WEBJS
- WHATSAPP_API_KEY=321
# Username and password for Swagger
- WHATSAPP_SWAGGER_USERNAME=swagger
- WHATSAPP_SWAGGER_PASSWORD=admin
# Username and password for WAHA Dashboard
# you can use the same username and password for both Swagger and Dashboard
# Default - waha / waha
- WAHA_DASHBOARD_USERNAME=waha
- WAHA_DASHBOARD_PASSWORD=waha
restart: always
whatsapp-http-api-plus--mongodb:
image: devlikeapro/whatsapp-http-api-plus
container_name: whatsapp-http-api-plus--mongodb
ports:
- '3000:3000/tcp'
volumes:
- './.sessions:/app/.sessions'
environment:
# Environment variables from https://waha.devlike.pro/docs/how-to/config/
# - WHATSAPP_RESTART_ALL_SESSIONS=True
# - WHATSAPP_HOOK_URL=https://httpbin.org/post
# - WHATSAPP_HOOK_EVENTS=message
# - WHATSAPP_API_KEY=321
# - WHATSAPP_SWAGGER_USERNAME=admin
# - WHATSAPP_SWAGGER_PASSWORD=123
# - WAHA_DASHBOARD_USERNAME=admin
# - WAHA_DASHBOARD_PASSWORD=123
# - WHATSAPP_API_HOSTNAME=localhost
- WHATSAPP_DEFAULT_ENGINE=WEBJS
- WHATSAPP_SESSIONS_MONGO_URL=mongodb://mongodb:27017
restart: always
mongodb:
image: mongo
container_name: mongodb
ports:
- '27017:27017/tcp'
volumes:
- mongodb_data:/data/db
restart: always
volumes:
mongodb_data: {}
+86 -19
View File
@@ -19,42 +19,109 @@
[[main]]
name = "Documentation"
identifier = "docs"
url = "/docs/overview/introduction/"
# url = "/docs/1.0/overview/introduction/"
weight = 10
#[[main]]
# name = "Blog"
# url = "/blog/"
# weight = 20
[[main]]
name = "Introduction"
weight = 11
url = "/docs/overview/introduction"
parent = "docs"
[[main]]
name = "Get Plus"
weight = 30
identifier = "get-plus"
url = ""
name = "Quick Start"
weight = 12
url = "/docs/overview/introduction"
parent = "docs"
[[main]]
name = "Install"
weight = 13
url = "/docs/how-to/install"
parent = "docs"
[[main]]
name = "Send messages"
weight = 14
url = "/docs/how-to/send-messages"
parent = "docs"
[[main]]
name = "Receive Messages"
weight = 15
url = "/docs/how-to/receive-messages"
parent = "docs"
[[main]]
name = "How to guides"
weight = 20
url = "/docs/how-to"
parent = "docs"
[[main]]
name = "Swagger ->"
weight = 98
url = "https://waha.devlike.pro/swagger"
parent = "docs"
[[main]]
name = "OpenAPI JSON ->"
weight = 99
url = "https://waha.devlike.pro/swagger/openapi.json"
parent = "docs"
[[main]]
name = "WAHA Plus"
weight = 20
identifier = "waha-plus"
[[main]]
name = "About WAHA Plus"
weight = 40
identifier = "plus-version"
weight = 10
url = "/docs/how-to/plus-version"
parent = "get-plus"
parent = "waha-plus"
[[main]]
name = "Get on Boosty ->"
weight = 50
identifier = "boosty"
url = "https://boosty.to/wa-http-api"
parent = "get-plus"
name = "Patron Portal ->"
weight = 20
url = "https://portal.devlike.pro/"
parent = "waha-plus"
[[main]]
name = "Get on Patreon ->"
weight = 60
identifier = "patreon"
url = "https://patreon.com/wa_http_api"
parent = "get-plus"
parent = "waha-plus"
[[main]]
name = "Get on Boosty ->"
weight = 50
url = "https://boosty.to/wa-http-api"
parent = "waha-plus"
[[main]]
name = "Pricing"
weight = 90
url = "/pricing"
[[main]]
name = "Examples"
weight = 30
identifier = "examples"
[[main]]
name = "Python ->"
weight = 31
url = "/docs/examples/python"
parent = "examples"
[[main]]
name = "Kotlin ->"
weight = 32
url = "/docs/examples/kotlin"
parent = "examples"
[[social]]
name = "GitHub"
+8 -9
View File
@@ -4,7 +4,7 @@
title = "WAHA"
titleSeparator = "-"
titleAddition = "WhatsApp HTTP API"
description = "WAHA - WhatsApp HTTP API that you can configure in a click!"
description = "WAHA - WhatsApp HTTP API that you can run in a click!"
## Documentation
# docsVersion = "0.3"
@@ -68,13 +68,12 @@ fillImage = "1270x740 Center" # normalize image size
footer = 'This project is not affiliated, associated, authorized, endorsed by, or in any way officially connected with WhatsApp or any of its subsidiaries or its affiliates.<br/>The official WhatsApp website can be found at <a class="text-muted" href="https://whatsapp.com/">https://whatsapp.com/</a>.<br/>"WhatsApp" as well as related names, marks, emblems and images are registered trademarks of their respective owners.'
# Feed
copyRight = "Copyright (c) 2021-2023 Dev Like A Pro"
copyRight = "Copyright (c) 2021-2024 Dev Like A Pro"
# Alert
alert = true
alertDismissable = false
# alertText = "Introducing the Doks child theme, several DX + UX updates, and more! <a class=\"alert-link stretched-link\" href=\"https://getdoks.org/blog/doks-v0.2/\" target=\"_blank\" rel=\"noopener\">Check out Doks v0.2</a>"
alertText = "Enjoy Core version or want to get WAHA Plus verison? You can <a class=\"alert-link stretched-link\" href=\"https://waha.devlike.pro/docs/how-to/plus-version/\">support the project -></a>"
alertDismissable = true
alertText = "📢 <a class=\"alert-link stretched-link\" href=\"https://waha.devlike.pro/docs/how-to/waha-dashboard/\">WAHA Dashboard - UI to manage your WhatsApp sessions!</a> 📢"
# Edit Page
# repoHost [Github | Gitea | GitLab | Bitbucket | BitbucketServer ] is used for building the edit link based on git hoster
@@ -82,8 +81,8 @@ repoHost = "GitHub"
#repoHost = "Gitea"
docsRepo = "https://github.com/devlikeapro/whatsapp-http-api"
docsRepoBranch = "core"
docsRepoSubPath = ""
editPage = false
docsRepoSubPath = "docs/site"
editPage = true
lastMod = false
[sections]
@@ -96,7 +95,7 @@ lastMod = false
flexSearch = true
searchSectionsShow = []
searchSectionsIndex = []
darkMode = true
darkMode = false
bootStrapJs = true
breadCrumb = false
highLight = true
@@ -111,4 +110,4 @@ lastMod = false
[menu]
[menu.section]
auto = true
collapsibleSidebar = true
collapsibleSidebar = false
+2 -2
View File
@@ -1,7 +1,7 @@
---
title : "WAHA"
description: "WAHA - WhatsApp HTTP API that you can configure in a click!"
lead: "WAHA - WhatsApp HTTP API that you can configure in a click!"
description: "WAHA - WhatsApp HTTP API that you can run in a click!"
lead: "WAHA - <b>WhatsApp HTTP API</b> that you can run in a click!"
date: 2020-10-06T08:47:36+00:00
lastmod: 2020-10-06T08:47:36+00:00
draft: false
+1 -1
View File
@@ -1,5 +1,5 @@
---
title: "Examples"
title: "🧩 Examples"
description: "Examples for different languages."
lead: "Examples for different languages."
date: 2020-10-06T08:49:15+00:00
@@ -0,0 +1,115 @@
---
title: "Kotlin"
description: "WhatsApp HTTP API + Kotlin examples."
lead: "WhatsApp HTTP API + Kotlin examples."
date: 2020-10-06T08:49:31+00:00
lastmod: 2020-10-06T08:49:31+00:00
draft: false
images: ["/images/kotlin-whatsapp.png"]
menu:
docs:
parent: "help"
weight: 631
toc: true
---
![](/images/kotlin-whatsapp.png)
We've created a few examples on how to interact with WAHA WhatsApp HTTP API with Kotlin (ktor).
You can find the examples in
[examples folder on GitHub with detailed instructions in README.md ->](https://github.com/devlikeapro/waha-kotlin)
## Installation
We assume that you have installed software:
1. Kotlin + JVM
2. Docker
### Download and start image
First of all, you must run WhatsApp HTTP API locally (which under the hood it
runs real WhatsApp Web instance and expose HTTP API for interaction).
Here are the steps from
[Quick Start](https://waha.devlike.pro/docs/overview/quick-start/):
Download and start WhatsApp HTTP API docker container
```bash
# Download the image
docker pull devlikeapro/whatsapp-http-api
# Run the docker container
docker run -it --rm --network=host -e WHATSAPP_HOOK_URL=http://localhost:5000/bot -e "WHATSAPP_HOOK_EVENTS=*" --name whatsapp-http-api devlikeapro/whatsapp-http-api
# It prints logs and the last line must be
# WhatsApp HTTP API is running on: http://[::1]:3000
```
#### Download image - ARM
If you're using ARM (like Apple Silicon, Apple M1, etc.) - use following
commands to download the image
![](/images/versions/core.png) For Core version the command is
```bash
# Download the image
docker pull devlikeapro/whatsapp-http-api:arm
# Rename it, so you can use devlikeapro/whatsapp-http-api image in other place
docker tag devlikeapro/whatsapp-http-api:arm devlikeapro/whatsapp-http-api
# Run the docker container
docker run -it --rm --network=host -e WHATSAPP_HOOK_URL=http://localhost:5000/bot -e "WHATSAPP_HOOK_EVENTS=*" --name whatsapp-http-api devlikeapro/whatsapp-http-api
# It prints logs and the last line must be
# WhatsApp HTTP API is running on: http://[::1]:3000
```
### Start session and scan QR
2. Open Swagger API in the browser http://localhost:3000/
3. Start session and scan QR code in swagger
1. Find `POST /api/session/start` request press **Try it out** and
**Execute** it with `default` session name
2. Find `GET /api/screenshot` and execute it - it must show QR code
3. Scan QR code on your mobile WhatsApp application (that installed on your
phone)
4. Execute `GET /api/screenshot` once again - it must show the screenshot
from WhatsApp Web.
4. Send test text message - find `POST /api/sendText` and execute it with
payload (change `12132132130` in the `chatId` to phone number that is
registered in WhatsApp).
```json
{
"chatId": "12132132130@c.us",
"text": "Hi there!",
"session": "default"
}
```
If you see **Hi there!** message then you're ready to run bots!
## WhatsApp Echo Bot
The WhatsApp Echo Bot is a sample ktor webhook server application that echoes
back to you whatever you send it. It can serve as a basic reference for how to
set up webhooks and reply to incoming messages.
```bash
# Clone the git repository with example
git clone https://github.com/devlikeapro/waha-kotlin.git
# Build and run the app
./gradlew build
./gradlew run
```
Open http://127.0.0.1:5000/bot - if you see **WhatsApp Echo Bot is ready!** then
the bot is ready to receive message!
Send message to the WhatsApp (that you used to scan QR code) and it'll echo text
back to you!
@@ -0,0 +1,37 @@
---
title: "Live Helper Chat"
description: "WhatsApp HTTP API + Live Helper Chat integration."
lead: "WhatsApp HTTP API + Live Helper Chat integration."
date: 2020-10-06T08:49:31+00:00
lastmod: 2020-10-06T08:49:31+00:00
draft: false
menu:
docs:
parent: "help"
weight: 632
toc: true
---
<div class="text-center">
![Logo](logo.png)
</div>
Open source
<a href="https://livehelperchat.com/" target="_blank" rel="noopener noreferrer">Live Helper Chat -></a>
system with mobile app, Bot, AI, Voice & Video & ScreenShare.
<div class="text-center">
![Screenshot](screenshot.png)
</div>
👉 Please checkout
<a href="https://doc.livehelperchat.com/docs/integrating/waha" target="_blank" rel="noopener noreferrer">
WhatsApp WAHA integration on Live Helper Chat ->
</a>
documentation for more details how to integrate WhatsApp with Live Helper Chat.
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

@@ -1,18 +0,0 @@
---
title: "Python"
description: "WhatsApp HTTP API Python examples."
lead: "WhatsApp HTTP API Python examples."
date: 2020-10-06T08:49:31+00:00
lastmod: 2020-10-06T08:49:31+00:00
draft: false
images: []
menu:
docs:
parent: "help"
weight: 630
toc: true
---
We've created a few examples on how to interact with WAHA WhatsApp HTTP API with Python.
You can find the examples in [examples folder on GitHub with detailed instructions in README.md](https://github.com/devlikeapro/whatsapp-http-api/tree/core/examples/python)
@@ -0,0 +1,148 @@
---
title: "Python"
description: "WhatsApp HTTP API + Python examples."
lead: "WhatsApp HTTP API + Python examples."
date: 2020-10-06T08:49:31+00:00
lastmod: 2020-10-06T08:49:31+00:00
draft: false
images: ["/images/python-whatsapp.png"]
menu:
docs:
parent: "help"
weight: 630
toc: true
---
![](/images/python-whatsapp.png)
We've created a few examples on how to interact with WAHA WhatsApp HTTP API with Python.
You can find the examples in [examples folder on GitHub with detailed instructions in README.md ->](https://github.com/devlikeapro/whatsapp-http-api/tree/core/examples/python)
## Installation
We assume that you have installed software:
1. Python 3
2. Docker
### Download and start image
First of all, you must run WhatsApp HTTP API locally (which under the hood it
runs real WhatsApp Web instance and expose HTTP API for interaction).
Here are the steps from
[Quick Start](https://waha.devlike.pro/docs/overview/quick-start/):
Download and start WhatsApp HTTP API docker container
```bash
# Download the image
docker pull devlikeapro/whatsapp-http-api
# Run the docker container
docker run -it --rm --network=host -e WHATSAPP_HOOK_URL=http://localhost:5000/bot -e "WHATSAPP_HOOK_EVENTS=*" --name whatsapp-http-api devlikeapro/whatsapp-http-api
# It prints logs and the last line must be
# WhatsApp HTTP API is running on: http://[::1]:3000
```
#### Download image - ARM
If you're using ARM (like Apple Silicon, Apple M1, etc.) - use following
commands to download the image
![](/images/versions/core.png) For Core version the command is
```bash
# Download the image
docker pull devlikeapro/whatsapp-http-api:arm
# Rename it, so you can use devlikeapro/whatsapp-http-api image in other place
docker tag devlikeapro/whatsapp-http-api:arm devlikeapro/whatsapp-http-api
# Run the docker container
docker run -it --rm --network=host -e WHATSAPP_HOOK_URL=http://localhost:5000/bot -e "WHATSAPP_HOOK_EVENTS=*" --name whatsapp-http-api devlikeapro/whatsapp-http-api
# It prints logs and the last line must be
# WhatsApp HTTP API is running on: http://[::1]:3000
```
### Start session and scan QR
2. Open Swagger API in the browser http://localhost:3000/
3. Start session and scan QR code in swagger
1. Find `POST /api/session/start` request press **Try it out** and
**Execute** it with `default` session name
2. Find `GET /api/screenshot` and execute it - it must show QR code
3. Scan QR code on your mobile WhatsApp application (that installed on your
phone)
4. Execute `GET /api/screenshot` once again - it must show the screenshot
from WhatsApp Web.
4. Send test text message - find `POST /api/sendText` and execute it with
payload (change `12132132130` in the `chatId` to phone number that is
registered in WhatsApp).
```json
{
"chatId": "12132132130@c.us",
"text": "Hi there!",
"session": "default"
}
```
If you see **Hi there!** message then you're ready to run bots!
## WhatsApp Echo Bot
The WhatsApp Echo Bot is a sample flask webhook server application that echoes
back to you whatever you send it. It can serve as a basic reference for how to
set up webhooks and reply to incoming messages.
```bash
# Clone the git repository with example
git clone https://github.com/devlikeapro/whatsapp-http-api.git
# Open python example folder
cd whatsapp-http-api/examples/python
# Install requirements
python -mpip install -r requirements.txt
# Run the bot
FLASK_APP=whatsapp_echo_bot.py flask run
```
Open http://127.0.0.1:5000/bot - if you see **WhatsApp Echo Bot is ready!** then
the bot is ready to receive message!
Send message to the WhatsApp (that you used to scan QR code) and it'll echo text
back to you!
## WhatsApp Download Files Bot
The WhatsApp Download Image Bot downloads all files people send to your WhatsApp
and log the path for the file.
**The bot works only with WAHA Plus version** available with donations. Visit
[read more about difference between Core and Plus versions](https://waha.devlike.pro/docs/how-to/plus-version/).
Download **WAHA Plus** version:
```bash
# Download the image
docker pull devlikeapro/whatsapp-http-api-plus
# Run the docker container
docker run -it --rm --network=host -e WHATSAPP_HOOK_URL=http://localhost:5000/bot -e "WHATSAPP_HOOK_EVENTS=*" --name whatsapp-http-api devlikeapro/whatsapp-http-api-plus
```
Run the WhatsApp Download Files bot:
```bash
# Clone the git repository with example
git clone https://github.com/devlikeapro/whatsapp-http-api.git
# Open python example folder
cd whatsapp-http-api/examples/python
# Install requirements
python -mpip install -r requirements.txt
# Run the bot
FLASK_APP=whatsapp_download_files_bot.py flask run
```
Open http://127.0.0.1:5000/bot - if you see **WhatsApp Download Files Bot!**
then the bot is ready to receive message with files!
-10
View File
@@ -1,10 +0,0 @@
---
title: "Help"
description: "Help Doks."
lead: ""
date: 2020-10-06T08:49:15+00:00
lastmod: 2020-10-06T08:49:15+00:00
draft: false
images: []
weight: 800
---
@@ -1,77 +0,0 @@
---
title: "Changelog"
description: "WAHA's changelog"
lead: "Changelog"
date: 2020-10-06T08:49:31+00:00
lastmod: 2020-10-06T08:49:31+00:00
draft: false
images: []
menu:
docs:
parent: "help"
weight: 600
toc: true
---
## 2021.3
- Add [Groups API]({{< relref "/docs/how-to/groups" >}})
- Use Chromium by default instead of Chrome
## 2021.1
- Added [Contacts API]({{< relref "/docs/how-to/contacts" >}})
- Get all contacts
- Get a contact
- Get contact "about" (status)
- Get contact profile picture
- Check number exists (is registered in WhatsApp) - works even if the number is not in the contact list
- Block and unblock contact
## 2022.12
- Added `GET /messages/` endpoint to get chat messages [#31](https://github.com/devlikeapro/whatsapp-http-api/issues/31)
### Security ![](/images/versions/plus.png)
- Added `WHATSAPP_SWAGGER_USERNAME` and `WHATSAPP_SWAGGER_PASSWORD` to hide and protect swagger panel.
## 2022.11
**Please test changes in test environment before update production!!**
### Engine ![](/images/versions/core.png) ![](/images/versions/plus.png)
1. WAHA has changed its underlying engine from Venom to Whatsapp Web.JS. It might change the response and webhook's payloads.
2. Optimize CPU and memory consumption.
### Requests ![](/images/versions/core.png) ![](/images/versions/plus.png)
- For all `/api/session/` requests use `name` field instead of `sessionName`.
- For all "chatting" requests use `session` field instead of `sessionName`.
### Sessions ![](/images/versions/plus.png)
Now you don't have to scan QR code each time you run WAHA, WAHA saves it for you! Available only in Plus version.
### Authentication ![](/images/versions/plus.png)
Now you can authenticate all requests for WAHA - use `WHATSAPP_API_KEY=secret` environment variable to set "secret key".
If `WHATSAPP_API_KEY` is set - requests must have `X-Api-Key` header with `secret` value, where `secret` - any random secret key.
### Webhooks ![](/images/versions/core.png) ![](/images/versions/plus.png)
#### Configuration
Instead of setting each webhook via environment variables - we use two environments variables:
- `WHATSAPP_HOOK_URL` - to set a URL
- `WHATSAPP_HOOK_EVENTS` - to set events that are sent to the URL
| Previous | Current |
|----------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|
| <pre>WHATSAPP_HOOK_ONMESSAGE=https://httpbin.org/post <br>WHATSAPP_HOOK_ONANYMESSAGE=https://httpbin.org/post </pre> | <pre>WHATSAPP_HOOK_URL=https://httpbin.org/post <br>WHATSAPP_HOOK_EVENTS=message,message.any</pre> |
#### Payload
The data for webhooks are wrapped inside a new `WAWebhook` object with `event` and `payload` fields to help you identify
which handler you should call based on `event`.
```json
{
"event": "message.any",
"payload": {
}
}
```
@@ -1,34 +0,0 @@
---
title: "How to Update"
description: "Regularly update the installed WAHA to keep your bot stable, usable, and secure."
lead: "Regularly update the installed WAHA to keep your bot stable, usable, and secure."
date: 2020-11-12T13:26:54+01:00
lastmod: 2020-11-12T13:26:54+01:00
draft: false
images: []
menu:
docs:
parent: "help"
weight: 610
toc: true
---
{{< alert icon="💡" text="Please test all new versions in the development environment before updating production!" />}}
## Core
![](/images/versions/core.png) For Core version the command is
```bash
docker pull devlikeapro/whatsapp-http-api
```
## Plus
![](/images/versions/plus.png) For Plus version, we use login to get the image before:
```bash
docker login -u devlikeapro -p {PASSWORD}
docker pull devlikeapro/whatsapp-http-api-plus
docker logout
```
Read more about how to get `PASSWORD` for [Plus Version →]({{< relref "plus-version" >}})
@@ -0,0 +1,43 @@
---
title : "💬 Chats"
description: "Chats"
lead: ""
date: 2020-10-06T08:48:45+00:00
lastmod: 2020-10-06T08:48:45+00:00
draft: false
images: []
weight: 127
---
Chats methods.
Parameters in path that you can find in below endpoints:
- `{session}` - use the session name for Whatsapp instance that you created with `POST /api/session/start` endpoint
- `{chatId}` - chat id in format `123123123123@[c.us|g.us]`, `c.us` for direct chats and `g.us` for groups.
## Endpoints
See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
### Get all chats
Get all chats
`GET /api/{session}/chats`
### Get messages from chat
Get 100 messages from the chat
`GET /api/{session}/chats/{chatId}/messages?limit=100`
Get 100 messages from the chat, skip downloading media (images, files)
`GET /api/{session}/chats/{chatId}/messages?limit=100&downloadMedia=false`
### Delete chat
Use the method to delete chat
`DELETE /api/{session}/chats/{chatId}`
### Clear messages
Use the method to clear all messages from the chat
`DELETE /api/{session}/chats/{chatId}/messages`
+179 -30
View File
@@ -1,58 +1,207 @@
---
title : "Configuration"
title: "⚙️ Configuration"
description: "Configuration"
lead: ""
date: 2020-10-06T08:48:45+00:00
lastmod: 2020-10-06T08:48:45+00:00
draft: false
images: []
images: [ ]
weight: 800
---
You can configure WhatsApp HTTP API behaviour via environment variables, by adding `-e WHATSAPP_VARNAME=value` at the
begging of the command line or by using [other options](https://docs.docker.com/engine/reference/commandline/run/)
```bash
docker run -it -e WHATSAPP_HOOK_EVENTS=* -e WHATSAPP_HOOK_URL=https://httpbin.org/post devlikeapro/whatsapp-http-api
docker run -it -e "WHATSAPP_HOOK_EVENTS=*" -e WHATSAPP_HOOK_URL=https://httpbin.org/post devlikeapro/whatsapp-http-api
```
It's not necessary to always run such a long command - you can save all data in
[docker-compose.yaml](https://github.com/devlikeapro/whatsapp-http-api/blob/core/docker-compose.yaml)
file as described on [How to deploy page ->]({{< relref "/docs/how-to/deploy" >}}).
## Environment variables
- `DEBUG=1` - show debug and verbose logs, set in any value
- `WHATSAPP_API_PORT=3000` - listen port for HTTP server (default: `3000`)
- `WHATSAPP_API_HOSTNAME=localhost` - Hostname for HTTP server (default: `localhost`)
- `WHATSAPP_API_KEY=mysecret` - protect the api with a secret code. If you set it - add `X-Api-Key: mysecret` to all
requests.
- `WHATSAPP_SWAGGER_USERNAME=admin` + `WHATSAPP_SWAGGER_PASSWORD=admin` - protect the Swagger panel with `admin / admin`
credentials. It doesn't affect api access!
- `WHATSAPP_START_SESSION=default` - start session with the name right after launching the app
The following environment variables can be used to configure the WAHA.
## File storage ![](/images/versions/plus.png)
### Common
- `DEBUG=1`: Set this variable to any value to enable debug and verbose logs.
- You can also do it for a **specific session** by setting `config.debug` field to `true` when starting a session.
- `WHATSAPP_API_PORT=3000`: The port number that the HTTP server will listen on. The default value is `3000`.
- `WHATSAPP_API_HOSTNAME=localhost`: The hostname for the HTTP server. The default value is `localhost`.
- `WHATSAPP_FILES_MIMETYPES` - download only these mimetypes from messages (download all files be default). Mimetypes
must be separated by a comma, without spaces: `audio,image/png,image/gif`. In order to choose type use prefix (
like `audio,image`).
- `WHATSAPP_FILES_LIFETIME`- to keep free space files will be removed after this time (default: `180`, in seconds)
- `WHATSAPP_FILES_FOLDER` - folder where will be stored files from chats (images, voice messages) (
default: `/tmp/whatsapp-files`)
### Sessions
- `WHATSAPP_RESTART_ALL_SESSIONS=True`: Set this variable to `True` to start all **STOPPED** sessions after container
restarts. By default, this variable is set to `False`.
- Please note that this will start all **STOPPED** sessions, not just the sessions that were working before the restart. You can maintain the session list by
using `POST /api/session/stop` with the `logout: True` parameter or by calling `POST /api/session/logout` to remove
**STOPPED** sessions. You can see all sessions, including **STOPPED** sessions, in the `GET /api/sessions/all=True`
response.
- `WHATSAPP_START_SESSION=session1,session2`: This variable can be used to start sessions with the specified names right
after launching the API. Separate session names with a comma.
- Also read more about [Sessions ->]({{< relref "/docs/how-to/sessions" >}})
- Also read more about [Session Storages on the dedicated page ->]({{< relref "/docs/how-to/storages#sessions" >}})
## Engines
### Swagger
- `WHATSAPP_SWAGGER_CONFIG_ADVANCED=true` - enables advanced configuration options for Swagger documentation - you can customize host, port and base URL for the requests.
Disabled by default.
- `WHATSAPP_SWAGGER_ENABLED=false` - disables Swagger documentation. Enabled by default. Available in **WAHA Plus** only.
- `WHATSAPP_SWAGGER_USERNAME=admin` and `WHATSAPP_SWAGGER_PASSWORD=admin` - these variables can be used to protect the Swagger panel
with `admin / admin` credentials. This does not affect API access. Available in **WAHA Plus** only.
Under the hood **WAHA** allows you to use two different engines. You can control what you want to run by settings
`WHATSAPP_DEFAULT_ENGINE` environment variables.
Read more about Swagger configuration on [**Swagger page** ->]({{< relref "/docs/how-to/swagger" >}}).
If you have any problems with one engine - try another!
### Proxy
#### Global proxy configuration
If you need to use a proxy, you can set the following environment variables:
{{< alert icon="👉" text="API responses and webhook payloads may differ significantly! We do our best to keep requests body stable between engines." />}}
- `WHATSAPP_PROXY_SERVER=localhost:3128`: Use this variable to set the proxy server in the format `host:port`, without http or https.
- `WHATSAPP_PROXY_SERVER_USERNAME=username` and `WHATSAPP_PROXY_SERVER_PASSWORD=password`: Use these variables to set up credentials for the proxy.
- `WHATSAPP_PROXY_SERVER_LIST=host1.example.com:3138,host2.example.com:3138`: Use this variable to set a comma-separated list of addresses to use, using a round-robin algorithm to choose the server for the session.
- `WHATSAPP_PROXY_SERVER_INDEX_PREFIX=proxy-`: Use this variable to parse the session name for the prefix and find the appropriate session.
For example, if you have set `WHATSAPP_PROXY_SERVER_LIST=host-first:80,host-second:80,host-third:80` and `WHATSAPP_PROXY_SERVER_INDEX_PREFIX=proxy-` and you run `proxy-3` session, the `host-third:80` proxy will be chosen for that session.
This is a way to select a proxy from while you start session.
### WhatsApp WebJS ![](/images/versions/core.png)
#### Session proxy configuration
You can configure proxy when you start session by setting `config.proxy` fields.
Read more about it on [**Session page** ->]({{< relref "/docs/how-to/sessions#configure-proxy" >}}).
**WAHA** uses **WhatsApp WebJS** engine by default
Keep in mind that session's proxy configuration takes precedence over proxy configuration set by environment variables!
- https://github.com/pedroslopez/whatsapp-web.js
- `WHATSAPP_DEFAULT_ENGINE=WEBJS`
### Venom ![](/images/versions/core.png)
### Security
<b>Security is available in [WAHA Plus ![](/images/versions/plus.png)]({{< relref "/docs/how-to/plus-version" >}}) only.</b>
- https://github.com/orkestral/venom
- `WHATSAPP_DEFAULT_ENGINE=VENOM`
- `WHATSAPP_API_KEY=mysecret`: If you set this variable, you must include the `X-Api-Key: mysecret` header in all
requests to the API. This will protect the API with a secret code.
- `WHATSAPP_SWAGGER_USERNAME=admin` and `WHATSAPP_SWAGGER_PASSWORD=admin`: These variables can be used to protect the
Swagger panel with `admin / admin` credentials. This does not affect API access.
Read more about security settings for Swagger and API on [**Security page** ->]({{< relref "/docs/how-to/security" >}}).
### Files
<b>Files configuration is available in [WAHA Plus ![](/images/versions/plus.png)]({{< relref "/docs/how-to/plus-version" >}}) only.</b>
The following environment variables can be used to configure the file storage options for the WAHA:
- `WHATSAPP_FILES_MIMETYPES`: This variable can be used to download only specific mimetypes from messages.
By default, all files are downloaded. The mimetypes must be separated by a comma, without spaces.
For example: `audio,image/png,image/gif`. To choose a specific type, use a prefix (like `audio,image`). See usage below.
- `WHATSAPP_DOWNLOAD_MEDIA=true` - this variable can be used to **completely** disable downloading media files. By default, all files are downloaded.
Set this variable to `WHATSAPP_DOWNLOAD_MEDIA=false` to disable downloading media files.
- Under the hood, it sets `WHATSAPP_FILES_MIMETYPES=mimetype/ignore-all-media` to ignore all media files.
- `WHATSAPP_FILES_LIFETIME`: This variable can be used to set the time (in seconds) after which files will be removed to
free up space. The default value is `180`.
- Set this variable to `0` to disable the file lifetime.
- `WHATSAPP_FILES_FOLDER`: This variable can be used to set the folder where files from chats (images, voice messages)
will be stored. The default value is `/tmp/whatsapp-files`.
- The folder must be mounted to the host machine to keep the files between container restarts. [ Read more about how to persist files ->]({{< relref "/docs/how-to/storages#media" >}})
- Also read more about [Media Storages on the dedicated page ->]({{< relref "/docs/how-to/storages#media" >}})
💡 Even if WAHA doesn't process the message media because of `WHATSAPP_FILES_MIMETYPES` or `WHATSAPP_DOWNLOAD_MEDIA`
you'll get a webhook event with `hasMedia: True` field, but with no `media.url`.
```json
{
"event": "message",
"session": "default",
"payload": {
"hasMedia": true,
"media": {
"url": null,
"mimetype": "video/mp4",
"filename": null
}
}
}
```
### Health Check
<b>Health check is available in [WAHA Plus ![](/images/versions/plus.png)]({{< relref "/docs/how-to/plus-version" >}}) only.</b>
The following environment variables can be used to configure the [Health Check ->]({{< relref "/docs/how-to/other" >}}):
- `WHATSAPP_HEALTH_MEDIA_FILES_THRESHOLD_MB` - the threshold in MB for the media files storage. The default value is `100`.
- `WHATSAPP_HEALTH_SESSIONS_FILES_THRESHOLD_MB` - the threshold in MB for the sessions files storage. The default value is `100`.
- `WHATSAPP_HEALTH_MONGODB_TIMEOUT` - the timeout in milliseconds for the MongoDB health check. The default value is `5000`.
## Examples
#### Debug Mode
To enable debug mode, set the `DEBUG` environment variable to any value:
```
DEBUG=1
```
#### Protecting the API with a Secret Code
To protect the API with a secret code, set the `WHATSAPP_API_KEY` environment variable to your secret code:
```
WHATSAPP_API_KEY=mysecret
```
You must include the `X-Api-Key: mysecret` header in all requests to the API.
#### Starting Sessions Automatically
To start sessions automatically when the API is launched, set the `WHATSAPP_START_SESSION` environment variable to a
comma-separated list of session names:
```
WHATSAPP_START_SESSION=session1,session2
```
#### Restarting All Sessions
To start all **STOPPED** sessions after container restarts, set the `WHATSAPP_RESTART_ALL_SESSIONS` environment variable
to `True`:
```
WHATSAPP_RESTART_ALL_SESSIONS=True
```
#### Protecting the Swagger Panel
To protect the Swagger panel with `admin / admin` credentials, set the `WHATSAPP_SWAGGER_USERNAME`
and `WHATSAPP_SWAGGER_PASSWORD` environment variables:
```
WHATSAPP_SWAGGER_USERNAME=admin
WHATSAPP_SWAGGER_PASSWORD=admin
```
#### Downloading Specific Mimetypes
To download only specific mimetypes from messages, set the `WHATSAPP_FILES_MIMETYPES` environment variable to a
comma-separated list of mimetypes:
```
WHATSAPP_FILES_MIMETYPES=audio,image/png,image/gif
```
#### Disable Downloading Media Files
To disable downloading media files, set the `WHATSAPP_DOWNLOAD_MEDIA` environment variable to `false`:
```
WHATSAPP_DOWNLOAD_MEDIA=false
```
#### Setting the File Lifetime
To set the time (in seconds) after which files will be removed to free up space, set the `WHATSAPP_FILES_LIFETIME`
environment variable:
```
WHATSAPP_FILES_LIFETIME=300
```
#### Setting the File Storage Folder
To set the folder where files from chats (images, voice messages) will be stored, set the `WHATSAPP_FILES_FOLDER`
environment variable:
```
WHATSAPP_FILES_FOLDER=/home/user/whatsapp-files
```
@@ -1,5 +1,5 @@
---
title : "Contacts"
title : "👤 Contacts"
description: "Contacts"
lead: ""
date: 2020-10-06T08:48:45+00:00
@@ -13,7 +13,10 @@ Methods for contacts.
{{< alert icon="👉" text="WhatsApp Web does not support adding contacts, so the API doesn't support it too." />}}
## Get all contacts
## Endpoints
See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
### Get all contacts
Get your contacts - `GET /api/contacts/all`
@@ -34,7 +37,7 @@ Get your contacts - `GET /api/contacts/all`
]
```
## Get contact
### Get contact
Get contact
@@ -56,19 +59,32 @@ Get contact
}
```
## Check phone number exists
### Check phone number exists
If you want to check if phone number is registered in WhatsApp (even if the number is not in your contact list) - use
this endpoint for that.
- `GET /api/contacts/check-exists?phone=11231231231&session=default`
```bash
GET /api/contacts/check-exists?phone=11231231231&session=default
```
It returns `numberExists` field with `true` or `false` value and `chatId` field with chat ID of the number (if exists).
```json
{
"numberExists": true
"numberExists": true,
"chatId": "123123123@c.us"
}
```
**Note for Brazilian Phone Numbers**
## Get "about" contact
You should use the `GET /api/contacts/check-exists` endpoint **before sending a message to a new phone number**
to get the correct chatId because of the additional 9-digit number added after 2012.
Read more about
[error sending text to half of Brazilian numbers (every number registered before 2012) ->](https://github.com/devlikeapro/whatsapp-http-api/issues/238)
It's fine to send the response to `chatId` for incoming messages, though - the payload already has the correct `chatId`.
### Get "about" contact
- `GET /api/contacts/about?contactId=11231231231&session=default`
@@ -78,7 +94,7 @@ this endpoint for that.
}
```
## Get contact profile picture
### Get contact profile picture
- `GET /api/contacts/profile-picture?contactId=11231231231&session=default`
@@ -88,7 +104,7 @@ this endpoint for that.
}
```
## Block (unblock) contact
### Block (unblock) contact
- To block contact - `POST /api/contacts/block`
- To unblock contact - `POST /api/contacts/unblock`
@@ -0,0 +1,90 @@
---
title: "🚀 Deploy"
description: "How to deploy WAHA"
lead: ""
date: 2020-10-06T08:48:45+00:00
lastmod: 2020-10-06T08:48:45+00:00
draft: false
images: [ ]
weight: 898
---
This page provides useful information to assist you in deploying the project.
It includes tips on how to avoid running long command lines, how to view logs, and other helpful advice.
## How to Use Docker Compose
Docker Compose is a tool that allows you to define and run multi-container Docker applications. It simplifies the
process of managing multiple containers and their dependencies. In this topic, we will walk you through how to use
Docker Compose with the WhatsApp HTTP API.
### Prerequisites
Before you start, you need to have Docker and Docker Compose installed on your machine. You can download Docker from the
official website [here](https://www.docker.com/products/docker-desktop). Docker Compose is included with Docker Desktop
for Windows and macOS, but for Linux, you need to install it separately. You can find the installation
instructions [here](https://docs.docker.com/compose/install/).
### Getting Started
To get started, you need to clone the [docker-compose.yaml](https://github.com/devlikeapro/whatsapp-http-api/blob/core/docker-compose.yaml) file to your local machine.
Open your terminal and run the following command:
```
wget https://raw.githubusercontent.com/devlikeapro/whatsapp-http-api/core/docker-compose.yaml
```
### Running the WhatsApp HTTP API Service
To start the `whatsapp-http-api` service, run the following command:
```
docker-compose up -d whatsapp-http-api
```
This will start the container in detached mode and map port 3000 to 3000 on the host machine.
To stop the service, run the command:
```
docker-compose down
```
This will stop and remove the container.
To restart the service, run the command:
```
docker-compose restart whtasapp-http-api
```
This will restart the container.
### Viewing the Logs
To view the logs for the `whatsapp-http-api` service, run the command:
```
docker-compose logs -f whatsapp-http-api
```
This will show the logs in real-time. To view the logs for the `whatsapp-http-api-plus` service,
replace `whatsapp-http-api` with `whatsapp-http-api-plus`.
To view the logs for a specific period, run the command:
```
docker-compose logs --since <time>
```
Replace `<time>` with the time period you want to view the logs for. For example, `docker-compose logs --since 1h` will
show the logs for the past hour.
### Using the WhatsApp HTTP API Services
There are two services provided in the `docker-compose.yml` file - `whatsapp-http-api` and `whatsapp-http-api-plus`.
It is important to note that these services must not be run at the same time.
By default, the `whatsapp-http-api` service will be used.
To use the `whatsapp-http-api-plus` service, you need to specify it in the command.
@@ -0,0 +1,228 @@
---
title: "🏭 Engines"
description: "Engines"
lead: ""
date: 2020-10-06T08:48:45+00:00
lastmod: 2020-10-06T08:48:45+00:00
draft: false
images: [ ]
weight: 800
---
## Engines
Under the hood **WAHA** allows you to use different engines. You can control what you want to run by settings
`WHATSAPP_DEFAULT_ENGINE` environment variables.
```bash
docker run -it -e "WHATSAPP_DEFAULT_ENGINE=WEBJS" devlikeapro/whatsapp-http-api
```
If you have any problems with one engine - try another!
{{< alert icon="👉" text="API responses and webhook payloads may differ significantly, test everything before changing the engine" />}}
All engines are available in both
Core ![](/images/versions/core.png) and
[Plus ![](/images/versions/plus.png) versions]({{< relref "/docs/how-to/plus-version" >}}).
### WEBJS
- `WHATSAPP_DEFAULT_ENGINE=WEBJS`
- [https://github.com/pedroslopez/whatsapp-web.js](https://github.com/pedroslopez/whatsapp-web.js)
A WhatsApp API client that connects through the WhatsApp Web browser app.
It uses Puppeteer to run a real instance of Whatsapp Web to avoid getting blocked.
**WAHA** uses **WhatsApp WebJS** engine by default.
### NOWEB
- `WHATSAPP_DEFAULT_ENGINE=NOWEB`
- [https://github.com/WhiskeySockets/Baileys](https://github.com/WhiskeySockets/Baileys)
**NOWEB** engine **does not require a browser** to work with WhatsApp Web, it does so directly using a WebSocket.
Not running Chromium saves you CPU and Memory, so you can run more instances on a single server!
️Working with the engine requires more attention, because it's easy to be blocked with it!
⚠ Read the article before using **NOWEB** engine
Quotes from the users:
> The server has **2 CPU and 8GB** of memory. Today we have **85 sessions** in this instance.
> **400** sessions with **4CPU and 32RAM**. It's working fine.
[How to avoid blocking ->]({{< relref " /docs/overview/how-to-avoid-blocking" >}}).
### VENOM
- `WHATSAPP_DEFAULT_ENGINE=VENOM`
- [https://github.com/orkestral/venom](https://github.com/orkestral/venom)
It's a high-performance system developed with JavaScript to create a bot for WhatsApp.
It uses Puppeteer to run a real instance of Whatsapp Web to avoid getting blocked.
## Docker images
WAHA provides few docker images with different setup.
| Image | CPU | Browser |
|---------------------------------------------------------|-----|-------------------------|
| [WAHA Plus]({{< relref "/docs/how-to/plus-version" >}}) | | |
| `devlikeapro/whatsapp-http-api-plus:latest` | x86 | Chromium |
| `devlikeapro/whatsapp-http-api-plus:chrome` | x86 | Chrome (supports video) |
| `devlikeapro/whatsapp-http-api-plus:noweb` | x86 | None |
| `devlikeapro/whatsapp-http-api-plus:arm` | ARM | Chromium |
| `devlikeapro/whatsapp-http-api-plus:noweb-arm` | ARM | None |
| **WAHA Core** | | |
| `devlikeapro/whatsapp-http-api:latest` | x86 | Chromium |
| `devlikeapro/whatsapp-http-api:chrome` | x86 | Chrome |
| `devlikeapro/whatsapp-http-api:noweb` | x86 | None |
| `devlikeapro/whatsapp-http-api:arm` | ARM | Chromium |
| `devlikeapro/whatsapp-http-api:noweb-arm` | ARM | None |
Browsers:
- **Chromium** - is the default browser for **WAHA**. It's a good choice for most cases.
- **Chrome** - is a good choice if you need to receive videos in Plus version.
- **None** - is a good choice if you want to use **NOWEB** engine.
CPU:
- **x86** - is a good choice for most cases.
- **ARM** - is a good choice if you're using ARM processors (like Apple Silicon, Apple M1, etc.)
{{< alert icon="💡" text="Chrome version is not available in ARM" />}}
## Features
Some engines may not support certain features.
Here, you will find a list of supported endpoints and webhooks per engine.
| Symbol | Meaning |
|:------------------------------:|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ✔️ | The engines supports the feature. |
| ➖ | The engine does **not** support this feature. <br/>Please search for the issue about the endpoint in [the project's issue](https://github.com/devlikeapro/whatsapp-http-api/issues) and upvote it by using the "👍" reaction on the issue's description. This will help us determine the level of interest in the feature. <br/>If you are unable to find the issue, please create a new one. |
| ![](/images/versions/plus.png) | The feature available in [WAHA Plus]({{< relref "/docs/how-to/plus-version" >}}). |
If you don't specify `WHATSAPP_DEFAULT_ENGINE` environment variable - look at **WEBJS** engine,
it's the engine WAHA runs by default.
### Protocols
| | WEBJS | NOWEB | VENOM |
|--------------------------------------------------------------|:-----:|:-----:|:-----:|
| Run a browser (chromium\chrome) to communicate with WhatsApp | ✔️ | ➖ | ✔️ |
| Communicate with WhatsApp via websocket (no browser) | ➖ | ✔️ | ➖ |
### Endpoints
If you find any inconsistency with actual endpoints -
please [create an issue](https://github.com/devlikeapro/whatsapp-http-api/issues/new?title=Error+in+engine+features )
| | WEBJS | NOWEB | VENOM |
|-------------------------------------------------------------------|:-----:|:-------------------------------------------------------------------------:|:-----:|
| **Session** | | | |
| `POST /api/sessions/start` | ✔️ | ✔️ | ✔️ |
| `POST /api/sessions/stop` | ✔️ | ✔️ | ✔️ |
| `POST /api/sessions/logout` | ✔️ | ✔️ | ✔️ |
| `GET /api/sessions/` | ✔️ | ✔️ | ✔️ |
| `GET /api/sessions/{session}/me` | ✔️ | ✔️ | ➖ |
| **Authentication** | | | |
| `POST /api/{session}/auth/qr` | ✔️ | ✔️ | ✔️ |
| `POST /api/{session}/auth/request-code` | ➖ | ✔️ | ➖ |
| `POST /api/{session}/auth/authorize-code` | ➖ | ➖️<br>[#113](https://github.com/devlikeapro/whatsapp-http-api/issues/113) | ➖ |
| **Screenshot** | | | |
| `POST /api/screenshot` | ✔️ | ➖ | ✔️ |
| **Chatting** | WEBJS | NOWEB | VENOM |
|-------------------------------------------------------------|:-----:|:-----:|:-----:|
| `GET /api/checkNumberStatus` | ✔️ | ✔️ | ✔️ |
| `GET /api/sendContactVcard` | ➖ | ✔️ | ➖ |
| `GET /api/sendText` | ✔️ | ✔️ | ✔️ |
| `POST /api/sendText` | ✔️ | ✔️ | ✔️ |
| `POST /api/reply` | ✔️ | ✔️ | ✔️ |
| `PUT /api/{session}/chats/{chatId}/messages/{messageId}` | ✔️ | ✔️ | ➖ |
| `DELETE /api/{session}/chats/{chatId}/messages/{messageId}` | ✔️ | ✔️ | ➖ |
| `POST /api/sendPoll` | ➖ | ✔️ | ➖ |
| `POST /api/sendLocation` | ✔️ | ✔️ | ✔️ |
| `POST /api/sendLinkPreview` | ➖ | ✔️ | ✔️ |
| `POST /api/sendImage` ![](/images/versions/plus.png) | ✔️ | ✔️ | ✔️ |
| `POST /api/sendFile` ![](/images/versions/plus.png) | ✔️ | ✔️ | ✔️ |
| `POST /api/sendVoice` ![](/images/versions/plus.png) | ✔️ | ✔️ | ✔️ |
| `POST /api/sendVideo` ![](/images/versions/plus.png) | ✔️ | ✔️ | ➖ |
| `POST /api/sendSeen` | ✔️ | ✔️ | ✔️ |
| `POST /api/startTyping` | ✔️ | ✔️ | ✔️ |
| `POST /api/stopTyping` | ✔️ | ✔️ | ➖ |
| `POST /api/reaction` | ✔️ | ✔️ | ➖ |
| `POST /api/star` | ✔️ | ✔️ | ➖ |
| `GET /api/messages` | ✔️ | ➖ | ✔️ |
| | WEBJS | NOWEB | VENOM |
|-------------------------------------------------------------------|:-----:|:-----:|:-----:|
| **Status** | | | |
| `POST /api/{session}/status/text` | ➖ | ✔️ | ➖ |
| `POST /api/{session}/status/image` ![](/images/versions/plus.png) | ➖ | ✔️ | ➖ |
| `POST /api/{session}/status/voice` ![](/images/versions/plus.png) | ➖ | ✔️ | ➖ |
| `POST /api/{session}/status/video` ![](/images/versions/plus.png) | ➖ | ✔️ | ➖ |
| **Chats** | | | |
| `GET /api/{session}/chats` | ✔️ | ➖ | ➖ |
| `DELETE /api/{session}/chats/{chatId}` | ✔️ | ➖ | ➖ |
| `GET /api/{session}/chats/{chatId}/messages` | ✔️ | ➖ | ✔️ |
| `DELETE /api/{session}/chats/{chatId}/messages` | ✔️ | ➖ | ➖ |
| `PUT /api/{session}/chats/{chatId}/messages/{messageId}` | ✔️ | ✔️ | ➖ |
| `DELETE /api/{session}/chats/{chatId}/messages/{messageId}` | ✔️ | ✔️ | ➖ |
| **Contacts** | | | |
| `GET /api/contacts` | ✔️ | ➖ | ➖ |
| `GET /api/contacts/all` | ✔️ | ➖ | ➖ |
| `GET /api/contacts/check-exists` | ✔️ | ✔️ | ✔️ |
| `GET /api/contacts/about` | ✔️ | ➖ | ➖ |
| `GET /api/contacts/profile-picture` | ✔️ | ✔️ | ➖ |
| `POST /api/contacts/block` | ✔️ | ➖ | ➖ |
| `POST /api/contacts/unblock` | ✔️ | ➖ | ➖ |
| **Groups** | WEBJS | NOWEB | VENOM |
|------------------------------------------------------------------------|:-----:|:-----:|:-----:|
| `POST /api/{session}/groups` | ✔️ | ✔️ | ➖ |
| `GET /api/{session}/groups` | ✔️ | ✔️ | ➖ |
| `GET /api/{session}/groups/{id}` | ✔️ | ✔️ | ➖ |
| `DELETE /api/{session}/groups/{id}` | ✔️ | ➖ | ➖ |
| `GET /api/{session}/groups/{id}/settings/security/info-admin-only` | ✔️ | ➖ | ➖ |
| `PUT /api/{session}/groups/{id}/settings/security/info-admin-only` | ✔️ | ➖ | ➖ |
| `GET /api/{session}/groups/{id}/settings/security/messages-admin-only` | ✔️ | ➖ | ➖ |
| `PUT /api/{session}/groups/{id}/settings/security/messages-admin-only` | ✔️ | ➖ | ➖ |
| `POST /api/{session}/groups/{id}/leave` | ✔️ | ✔️ | ➖ |
| `PUT /api/{session}/groups/{id}/description` | ✔️ | ✔️ | ➖ |
| `PUT /api/{session}/groups/{id}/subject` | ✔️ | ✔️ | ➖ |
| `GET /api/{session}/groups/{id}/invite-code` | ✔️ | ✔️ | ➖ |
| `POST /api/{session}/groups/{id}/invite-code/revoke` | ✔️ | ✔️ | ➖ |
| `GET /api/{session}/groups/{id}/participants` | ✔️ | ✔️ | ➖ |
| `POST /api/{session}/groups/{id}/participants/add` | ✔️ | ✔️ | ➖ |
| `POST /api/{session}/groups/{id}/participants/remove` | ✔️ | ✔️ | ➖ |
| `POST /api/{session}/groups/{id}/admin/promote` | ✔️ | ✔️ | ➖ |
| `POST /api/{session}/groups/{id}/admin/demote` | ✔️ | ✔️ | ➖ |
| | WEBJS | NOWEB | VENOM |
|---------------------------------------------------|:-----:|:-----:|:-----:|
| **Presence** | | | |
| `POST /api/{session}/presence` | ✔️ | ✔️ | ➖ |
| `GET /api/{session}/presence` | ➖ | ✔️ | ➖ |
| `GET /api/{session}/presence/{chatId}` | ➖ | ✔️ | ➖ |
| `POST /api/{session}/presence/{chatId}/subscribe` | ➖ | ✔️ | ➖ |
| **Other** | | | |
| `GET /api/version` | ➖ | ✔️ | ➖ |
| `GET /health` ![](/images/versions/plus.png) | ✔️ | ✔️ | ✔️ |
### Webhooks
| **Webhooks** | WEBJS | NOWEB | VENOM |
|-----------------------------------------------------|:-----:|:-----:|:-----:|
| `message` | ✔️ | ✔️ | ✔️ |
| `message` with files ![](/images/versions/plus.png) | ✔️ | ✔️ | ✔️ |
| `message.reaction` | ✔️ | ✔️ | ➖ |
| `message.any` | ✔️ | ✔️ | ✔️ |
| `message.ack` | ✔️ | ✔️ | ✔️ |
| `message.revoked` | ✔️ | ➖ | ➖ |
| `state.change` | ✔️ | ✔️ | ✔️ |
| `group.join` | ✔️ | ✔️ | ✔️ |
| `group.leave` | ✔️ | ➖ | ➖ |
| `presence.update` | ➖ | ✔️ | ➖ |
| `poll.vote` | ➖ | ✔️ | ➖ |
| `poll.vote.failed` | ➖ | ✔️ | ➖ |
@@ -1,5 +1,5 @@
---
title : "Groups"
title : "👥 Groups"
description: "Groups"
lead: ""
date: 2020-10-06T08:48:45+00:00
@@ -9,7 +9,10 @@ images: []
weight: 140
---
Methods for groups. Please look at swagger for details.
## Endpoints
See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
Endpoints for groups. Please look at swagger for details.
- `{session}` - use the session name for Whatsapp instance that you created with `POST /api/session/start` endpoint
- `{groupId}` - group id in format `123123123123@g.us`. You can get the id in a few ways:
@@ -17,7 +20,7 @@ Methods for groups. Please look at swagger for details.
- By getting all groups (see below).
- By creating a new group and saving the id.
## Create a new group
### Create a new group
`POST /api/{session}/groups`
@@ -34,23 +37,23 @@ Request:
}
```
## Get all groups
### Get all groups
`GET /api/{session}/groups`
## Get the group
### Get the group
`GET /api/{session}/groups/{groupId}`
## Delete the group
### Delete the group
`DELETE /api/{session}/groups/{groupId}`
## Leave the group
### Leave the group
`POST /api/{session}/groups/{groupId}/leave`
## Set group subject
### Set group subject
Updates the group subject.
@@ -67,7 +70,7 @@ Request:
}
```
## Set group description
### Set group description
Updates the group description.
@@ -84,13 +87,54 @@ Request:
}
```
## Participants
### Security - update group info
Updates the group settings to only allow admins to edit group info (title, description, photo).
`PUT /api/{session}/groups/{groupId}/settings/security/info-admin-only`
```json
{
"adminsOnly": true
}
```
### Get participants
Get the group settings to only allow admins to edit group info (title, description, photo).
`GET /api/{session}/groups/{groupId}/settings/security/info-admin-only`
```json
{
"adminsOnly": true
}
```
Returns `true` if the setting was properly updated. This can return false if the user does not have the necessary permissions.
### Security - who can send messages
Updates the group settings to only allow admins to send messages.
`PUT /api/{session}/groups/{groupId}/settings/security/messages-admin-only`
```json
{
"adminsOnly": true
}
```
Returns `true` if the setting was properly updated. This can return false if the user does not have the necessary permissions.
Get the group settings to only allow admins to send messages.
`GET /api/{session}/groups/{groupId}/settings/security/messages-admin-only`
```json
{
"adminsOnly": true
}
```
### Participants
#### Get participants
`GET /api/{session}/groups/{groupId}/participants`
### Add participants
#### Add participants
`POST /api/{session}/groups/{groupId}/participants/add`
@@ -104,7 +148,7 @@ Request:
}
```
### Remove participants
#### Remove participants
`POST /api/{session}/groups/{groupId}/participants/remove`
@@ -118,9 +162,9 @@ Request:
}
```
## Admin
### Admin
### Promote to admin
#### Promote to admin
Promote participants to admin users.
@@ -136,7 +180,7 @@ Promote participants to admin users.
}
```
### Demote to regular users
#### Demote to regular users
Demote participants by to regular users.
@@ -152,17 +196,45 @@ Demote participants by to regular users.
}
```
## Invite code
### Invite code
### Get invite code
#### Get invite code
`GET /api/{session}/groups/{groupId}/invite-code`
Then you can put it in the url `https://chat.whatsapp.com/{inviteCode}` and send it to contacts.
### Revoke invite code
#### Revoke invite code
Invalidates the current group invite code and generates a new one.
`POST /api/{session}/groups/{groupId}/invite-code/revoke`
## Webhooks
See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
### group.join
```json
{
"event": "group.join",
"session": "default",
"engine": "WEBJS",
"payload": {
...
}
}
```
### group.leave
```json
{
"event": "group.left",
"session": "default",
"engine": "WEBJS",
"payload": {
...
}
}
```
@@ -0,0 +1,115 @@
---
title : "🔧 Install"
description: "How to install and update WAHA"
lead: ""
date: 2020-10-06T08:48:45+00:00
lastmod: 2020-10-06T08:48:45+00:00
draft: false
images: []
weight: 109
---
On the page you'll find answers on how to install WAHA.
If you wish to read a quick start guide which show you how to send you first message via HTTP API
please go to [**Quick Start ->**]({{< relref "/docs/overview/quick-start" >}}).
WAHA is distributed in two versions, that have a similar installation instructions.
- WAHA Core ![](/images/versions/core.png) - the basic version that meet almost 80% people's needs. 100% free and [open source ->](https://github.com/devlikeapro/whatsapp-http-api).
- WAHA Plus ![](/images/versions/plus.png) - the version with advanced messages, security, and reliability features. Donations, no license expiration, quick updates, read more about [Plus Version →]({{< relref "plus-version" >}})
## Requirements
Only thing that you must have - installed docker. Please follow the original
instruction <a href="https://docs.docker.com/get-docker/" target="_blank" rel="noopener">how to install docker -></a>.
{{< details "Why Docker?" >}}
Docker makes it easy to ship all-in-one solution with the runtime and dependencies. You don't have to worry about
language-specific libraries or chrome installation.
Also, Docker makes installation and update processes so simple, just one command!
{{< /details >}}
## WAHA Core
Download the image:
```bash
docker pull devlikeapro/whatsapp-http-api
```
Run the container:
```bash
docker run -it -p 3000:3000/tcp devlikeapro/whatsapp-http-api
```
Open API documentation [http://localhost:3000](http://localhost:3000).
## WAHA Plus
Before installing WAHA Plus version you need to get a key, `{KEY}` in below commands, in format `dckr_pat_1111`
We distribute the key via two platforms (Boosty and Patreon) and you'll find the active key **in the latest post**.
Keep in mind that we publish new key every month, so you must get the latest active key in order to download
the latest image.
Read more about [**Plus Version →**]({{< relref "plus-version" >}})
{{< alert icon="👉" text="Subscribe as **PRO** level and get your personal key which won't expire every month while you're supporting the project" />}}
Download the image:
```bash
docker login -u devlikeapro -p {KEY}
docker pull devlikeapro/whatsapp-http-api-plus
docker logout
```
Run the container:
```bash
docker run -it -p 3000:3000/tcp devlikeapro/whatsapp-http-api-plus
```
Open API documentation [http://localhost:3000](http://localhost:3000).
## ARM
If you’re using **ARM** processor (like Apple Silicon, Apple M1, etc.) - add `:arm` tag at the end of the image name in the above commands.
- **WAHA Core** - `devlikeapro/whatsapp-http-api:arm`
- **WAHA Plus** - `devlikeapro/whatsapp-http-api-plus:arm`
You can also rename the image after you downloaded it with `docker tag` command,
so you can use the same image names in commands:
```bash
# Rename WAHA Core ARM
docker tag devlikeapro/whatsapp-http-api:arm devlikeapro/whatsapp-http-api
# Rename WAHA Plus ARM
docker tag devlikeapro/whatsapp-http-api-plus:arm devlikeapro/whatsapp-http-api-plus
```
## Update WAHA
{{< alert icon="💡" text="Please test all new versions in the development environment before updating production!" />}}
The commands are the same as for downloading, expected you need to restart **all working containers** after you download new image.
**WAHA Core** - download new image
```bash
# Download the image
docker pull devlikeapro/whatsapp-http-api
# Restart all containers
docker stop whatsapp-http-api
docker rm whatsapp-http-api
docker run -it --rm -p 3000:3000/tcp --name whatsapp-http-api devlikeapro/whatsapp-http-api
```
**WAHA Plus** - download new image (please use **the latest key** from Boosty or Patreon)
```bash
# Download the image
docker login -u devlikeapro -p {KEY}
docker pull devlikeapro/whatsapp-http-api-plus
docker logout
docker stop whatsapp-http-api
# Restart all containers
docker stop whatsapp-http-api
docker rm whatsapp-http-api
docker run -it --rm -p 3000:3000/tcp --name whatsapp-http-api devlikeapro/whatsapp-http-api
```
@@ -0,0 +1,192 @@
---
title: "🛸 Other"
description: "Other features and API"
lead: ""
date: 2020-10-06T08:48:45+00:00
lastmod: 2020-10-06T08:48:45+00:00
draft: false
images: [ ]
weight: 802
---
This page provides useful information about other features and API that are not covered in the other sections.
## Health Check
<b>Health check is available in [WAHA Plus ![](/images/versions/plus.png)]({{< relref "/docs/how-to/plus-version" >}}) only.</b>
The health check endpoint is used to determine the health of the service.
```
GET /health
```
It returns a **200 OK** status code if the service is healthy.
The response format:
```json
{
"status": "ok",
"info": {
"metric1": {
"field": "value"
},
"metric2": {
"field": "value"
}
},
"error": {},
"details": {}
}
```
Where:
- `status`: `'error' | 'ok' | 'shutting_down'` - If any health indicator failed the status will be `'error'`. If the app is shutting down but still accepting HTTP requests, the health check will have the `'shutting_down'` status.
- `info`: Object containing information of each health indicator which is of status `'up'`, or in other words "healthy".
- `error`: Object containing information of each health indicator which is of status `'down'`, or in other words "unhealthy".
- `details`: Object containing detailed information of each health indicator.
### Health Check Indicators
Few things we check in the health check:
- Media files storage space - `mediaFiles.space`
- Sessions files storage space - `sessionsFiles.space`
- MongoDB connection - `mongodb`
### Configuration
The following environment variables can be used to configure the health check:
- `WHATSAPP_HEALTH_MEDIA_FILES_THRESHOLD_MB` - the threshold in MB for the media files storage. The default value is `100`.
- `WHATSAPP_HEALTH_SESSIONS_FILES_THRESHOLD_MB` - the threshold in MB for the sessions files storage. The default value is `100`.
- `WHATSAPP_HEALTH_MONGODB_TIMEOUT` - the timeout in milliseconds for the MongoDB health check. The default value is `5000`.
### Examples
**Healthy response** when you use [Local Storage]({{< relref "/docs/how-to/storages#sessions" >}}) for session authentication:
**200 OK**
```json
{
"status": "ok",
"info": {
"mediaFiles.space": {
"status": "up",
"path": "/tmp/whatsapp-files",
"diskPath": "/",
"free": 132979355648,
"threshold": 104857600
},
"sessionsFiles.space": {
"status": "up",
"path": "/app/.sessions",
"diskPath": "/",
"free": 132979355648,
"threshold": 104857600
}
},
"error": {},
"details": {
"mediaFiles.space": {
"status": "up",
"path": "/tmp/whatsapp-files",
"diskPath": "/",
"free": 132979355648,
"threshold": 104857600
},
"sessionsFiles.space": {
"status": "up",
"path": "/app/.sessions",
"diskPath": "/",
"free": 132979355648,
"threshold": 104857600
}
}
}
```
**Healthy response** when you use [MongoDB Storage]({{< relref "/docs/how-to/storages#sessions" >}}) for session authentication:
**200 OK**
```json
{
"status": "ok",
"info": {
"mediaFiles.space": {
"status": "up",
"path": "/tmp/whatsapp-files",
"diskPath": "/",
"free": 132977496064,
"threshold": 104857600
},
"mongodb": {
"status": "up",
"message": "Up and running"
}
},
"error": {},
"details": {
"mediaFiles.space": {
"status": "up",
"path": "/tmp/whatsapp-files",
"diskPath": "/",
"free": 132977496064,
"threshold": 104857600
},
"mongodb": {
"status": "up",
"message": "Up and running"
}
}
}
```
**Unhealthy response example**
**503 Service Unavailable**
```json
{
"status": "error",
"info": {
"mediaFiles.space": {
"status": "up",
"path": "/tmp/whatsapp-files",
"diskPath": "/",
"free": 132976623616,
"threshold": 104857600
}
},
"error": {
"mongodb": {
"status": "down",
"error": "Timeout"
}
},
"details": {
"mediaFiles.space": {
"status": "up",
"path": "/tmp/whatsapp-files",
"diskPath": "/",
"free": 132976623616,
"threshold": 104857600
},
"mongodb": {
"status": "down",
"error": "Timeout"
}
}
}
```
## Get version
Returns the version of the installed docker image.
```
GET /api/version
```
```json
{
"version": "2024.2.3",
"engine": "NOWEB",
"tier": "PLUS",
"browser": "/usr/bin/google-chrome-stable"
}
```
Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 KiB

@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg width="145px" height="40px" viewBox="0 0 145 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient x1="61.5370404%" y1="13%" x2="34.2376801%" y2="129.365079%" id="linearGradient-1"><stop stop-color="#EF7829" offset="0%"/><stop stop-color="#F0692A" offset="28%"/><stop stop-color="#F15E2C" offset="63%"/><stop stop-color="#F15A2C" offset="100%"/></linearGradient></defs><g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g id="Blocks/Header_Unlogged" transform="translate(-15.000000, -15.000000)"><g id="icons/boosty_logo" transform="translate(15.000000, 15.000000)"><g id="Shape"><path d="M138.119363,13.14856 L132.002653,22.63144 L131.397878,13.14856 L122.575597,13.14856 C123.384615,10.366 124.037135,8.13256 124.037135,8.13256 L124.381963,7.01848 L117.6313,7.01848 L117.312997,8.13256 L115.851459,13.14856 L108.660477,13.14856 C102.750663,13.14856 99.4244032,14.8276 98.0503979,18.00352 C97.2546419,15.09952 94.6206897,13.14856 90.5782493,13.14856 C87.2902077,13.135208 84.1128672,14.3300173 81.6551724,16.504 C80.464191,14.45536 78.1061008,13.1512 74.8116711,13.1512 C71.2975199,13.1360778 67.9189855,14.5000837 65.4084881,16.94752 C64.3103448,14.656 61.8541114,13.14856 58.3262599,13.14856 C57.1586378,13.1510938 55.9961737,13.302814 54.867374,13.6 L55.397878,11.77312 C55.4066092,11.7439195 55.4181572,11.7156279 55.4323607,11.68864 L56.7904509,7 L50.066313,7 L45.7798408,21.73384 C45.668435,22.02952 45.5676393,22.32784 45.4801061,22.63144 C45.2902336,23.2752559 45.1623364,23.9355911 45.0981432,24.60352 C44.5384615,28.714 46.3474801,31.816 51.3660477,32.0272 C51.8475451,32.0843575 52.332067,32.1125687 52.8169761,32.11168 C56.2925823,32.0722669 59.6211655,30.7100879 62.1193634,28.3048 C63.1564987,30.6148 65.5676393,32.11168 69.2970822,32.11168 C72.5436452,32.0790306 75.6705362,30.8873894 78.1087533,28.7536 C79.2493369,30.80488 81.5862069,32.11168 85.061008,32.11168 L101.917772,32.11168 C107.143236,32.11168 110.095491,31.08472 111.6313,28.85392 C111.6313,30.98176 112.851459,32.11168 115.941645,32.11168 C118.437666,32.11168 121.777188,31.5652 126.366048,30.43792 L119.687003,39.9208 L126.411141,39.9208 L144.846154,13.14856 L138.119363,13.14856 Z M58.9310345,22.63144 C58.3023873,24.79096 56.2785146,26.53336 54.4217507,26.53336 C52.5649867,26.53336 51.5676393,24.79096 52.1962865,22.63144 C52.8249337,20.47192 54.8488064,18.72688 56.6923077,18.72688 C58.535809,18.72688 59.5596817,20.464 58.9310345,22.63144 Z M75.4164456,22.63144 C74.7877984,24.79096 72.7639257,26.53336 70.9071618,26.53336 C69.0503979,26.53336 68.0769231,24.79096 68.6923077,22.63144 C69.3076923,20.47192 71.3448276,18.72688 73.2015915,18.72688 C75.0583554,18.72688 76.0344828,20.464 75.4164456,22.63144 Z M84.4562334,22.63144 C85.0848806,20.46928 87.1087533,18.72688 88.9522546,18.72688 C90.795756,18.72688 91.8090186,20.46928 91.1803714,22.63144 C90.5517241,24.7936 88.5941645,26.4832 86.7586207,26.536 L86.6074271,26.536 C84.801061,26.4832 83.8355438,24.76192 84.4562334,22.63144 Z M106.127321,25.85752 C105.787798,26.64952 103.132626,26.53072 102.466844,26.54128 L95.928382,26.536 C96.8103436,25.360374 97.4758216,24.0383816 97.8938992,22.63144 C97.9363395,22.48888 97.9734748,22.34896 98.0079576,22.20904 C98.7108753,23.2096 100.201592,24.11248 103.100796,24.68536 C105.864721,25.216 106.3687,25.05496 106.127321,25.85752 Z M112.777188,23.7244 C112.204244,21.49624 109.721485,20.6224 106.241379,20.2 C104.785146,20.02576 103.965517,19.95712 104.148541,19.3288 C104.289125,18.8404 105.018568,18.73744 106.586207,18.73744 L114.230769,18.73744 L112.777188,23.7244 Z M119.496021,23.74552 C119.496021,23.70064 120.151194,21.4804 120.952255,18.72952 L125.217507,18.72952 L125.915119,25.8364 C118.888594,27.328 118.713528,26.92672 119.496021,23.74552 L119.496021,23.74552 Z" fill="#242B2C" fill-rule="nonzero"/><path d="M1.03841146,23.8920635 L7.81508464,0 L18.2158138,0 L16.1119922,7.40740741 C16.0897554,7.44994435 16.0716695,7.49460291 16.0579948,7.54074074 L10.5357227,27.1005291 L15.6903971,27.1005291 C13.537424,32.5848325 11.8524284,36.8846561 10.6354102,40 C1.12771484,39.8920635 -1.53892578,32.9481481 0.795423177,24.7322751 L1.03841146,23.8920635 Z M10.672793,40 L23.2084961,21.6 L17.8897526,21.6 L22.5169141,9.81375661 C30.4586849,10.6603175 34.1824284,17.0285714 31.993457,24.7301587 C29.6424935,33.015873 20.1285677,40 10.8659375,40 L10.672793,40 Z" fill="url(#linearGradient-1)" fill-rule="nonzero"/></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

@@ -1,6 +1,6 @@
---
title : "Plus version"
description: "Plus version"
title : "➕ WAHA Plus"
description: "WAHA Plus"
lead: ""
date: 2020-10-06T08:48:45+00:00
lastmod: 2020-10-06T08:48:45+00:00
@@ -16,87 +16,34 @@ weight: 900
1. Core ![](/images/versions/core.png) the basic version that meet almost 80% people’s needs. 100% free and open source.
2. Plus ![](/images/versions/plus.png) the version with advanced messages, security, and reliability features.
**If you enjoy Core ![](/images/versions/core.png) version and would like to support the project** - you can subscribe on Core level.
It's not expensive, but it supports the project a lot!
- [Boosty ->](https://boosty.to/wa-http-api)
- [Patreon ->](https://patreon.com/wa_http_api)
## Tiers
You support the project and get WAHA Plus by donating to the project on one of the platforms.
See tiers and available platforms on [**Pricing page ->**](/pricing)
## Features
## Patron Portal
<p align="center">
<img src="patron-portal.png" alt="Patron Portal" />
<br/>
<br/>
</p>
The Plus additional features are:
1. [**Send images\files\voices** →]({{< relref "/docs/how-to/send-messages" >}})
2. [**Receive images\files\voices** →]({{< relref "/docs/how-to/receive-messages" >}})
3. [**Webhook retries** →]({{< relref "/docs/how-to/receive-messages#retries" >}})
4. [**Security** →]({{< relref "/docs/how-to/security" >}})
5. [**Saving sessions** →]({{< relref "/docs/how-to/sessions" >}})
6. [**Support multiple sessions** →]({{< relref "/docs/how-to/sessions" >}})
7. **Instant updates** - no one month delay in getting bugfixes or new features
8. **Priority in support** - on both bugs and features
## Differences
What is the difference between **WAHA Plus** and other SaaS solutions for WhatsApp HTTP API?
| | WAHA Plus | Others |
|--------------------|:-------------------------------------------------:|----------------------------------------------------------------------------------:|
| **Sessions** | ✔️ No limits on **accounts** or **servers**! | ➖ One account for $50/month. |
| **Infrastructure** | ✔️ On-Premise - your server, your infrastructure! | ➖ Insecure cloud solution. |
| **Security** | ✔️ No data leaks! | ➖ You have to give access to customers' data - phone number, name, your messages. |
| **License Term** | ✔️ No license checks! | ➖ One month |
| **Message price** | ✔️ All messages are Free! | ➖ Some solutions have a price for messages - $1/100 messages. |
| **Expenses** | ✔️ $19 **donation**! | ➖ Monthly payment starts from $50 |
## Donations
WAHA Plus version is available through **donations** (subscriptions).
**It doesn't require monthly subscriptions, once installed on your server - it always works!**
(until WhatsApp made backward-incompatible changes, and you have to update the image)
{{< alert icon="💡" text="No licence checks or expiration on already installed instances!" />}}
We do not sell **WAHA**, it's not a purchase. It's a donation.
We treat our projects like art. You donate to the project and get a bit more from it as a thank-you. 😊
Treat **WAHA Plus** it as an additional episode, behind-the-scenes videos, our nude photos 😊
{{< alert icon="💡" text="WAHA does not have license checks and expiration - because art can not expire! Enjoy it till it works!" />}}
We donate most of the donations down to the stream to the underlying libraries and tools - JS-community, Node, other libraries authors, personal contributors.
By donating to the **WAHA** you donate to the Open Source world!
## Get Plus ![](/images/versions/plus.png)
For $19 one-time donation you get:
1. **Secret password** for Docker Hub to download Plus image: `devlikeapro/whatsapp-http-api-plus`.
2. **All updates for one month** for the Plus image.
3. **NO LICENSE CHECKS** on installed instances!
4. **NO LICENSE EXPIRATION** on installed instances! We repeated it twice to make sure that you've got it 😊
{{< alert icon="👉" text="We don't mind if you stay subscribed with us after one month :)" />}}
### Boosty
We use Boosty to get donations (Patreon analogue) - [https://boosty.to/wa-http-api](https://boosty.to/wa-http-api).
Go ahead and get your monthly password to get no license expiration WhatsApp HTTP API!
{{< alert icon="💡" text="If you stay subscribed - the donation amount will never change for you and always be $19 to get monthly updates!" />}}
![](boosty.png)
### Patreon
You can support the project and get WAHA Plus version on Patreon: [https://patreon.com/wa_http_api](https://patreon.com/wa_http_api)
{{< alert icon="💡" text="Please look at Boosty - we prefer it because of lower fees, so we can donate more to the projects!" />}}
After subscribing on Patreon or Boosty, you will get access to the [WAHA Patron Portal ->](https://portal.devlike.pro/)
where you will get the password to download the Plus image and manage your perks!
Read more about Patron Portal in
**<a href="https://www.patreon.com/posts/waha-patron-97637416" target="_blank">Patreon -> </a>**
or
**<a href="https://boosty.to/wa-http-api/posts/8319079f-dac1-4179-b954-fcc559097c76" target="_blank">Boosty -></a>**
posts.
### Install Plus
After you get the password, use it to login and download docker image:
After you get the password, get your login to Docker Hub in [Patron Portal ->](https://portal.devlike.pro/)
and run the commands:
```bash
docker login -u devlikeapro -p {PASSWORD}
docker login -u devlikeapro -p {KEY}
docker pull devlikeapro/whatsapp-http-api-plus
docker logout
```
Then in all commands use **Plus** image `devlikeapro/whatsapp-http-api-plus` instead of Core `devlikeapro/whatsapp-http-api`.
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

@@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 339.43 295.27"><title>tether-usdt-logo</title><path d="M62.15,1.45l-61.89,130a2.52,2.52,0,0,0,.54,2.94L167.95,294.56a2.55,2.55,0,0,0,3.53,0L338.63,134.4a2.52,2.52,0,0,0,.54-2.94l-61.89-130A2.5,2.5,0,0,0,275,0H64.45a2.5,2.5,0,0,0-2.3,1.45h0Z" style="fill:#50af95;fill-rule:evenodd"/><path d="M191.19,144.8v0c-1.2.09-7.4,0.46-21.23,0.46-11,0-18.81-.33-21.55-0.46v0c-42.51-1.87-74.24-9.27-74.24-18.13s31.73-16.25,74.24-18.15v28.91c2.78,0.2,10.74.67,21.74,0.67,13.2,0,19.81-.55,21-0.66v-28.9c42.42,1.89,74.08,9.29,74.08,18.13s-31.65,16.24-74.08,18.12h0Zm0-39.25V79.68h59.2V40.23H89.21V79.68H148.4v25.86c-48.11,2.21-84.29,11.74-84.29,23.16s36.18,20.94,84.29,23.16v82.9h42.78V151.83c48-2.21,84.12-11.73,84.12-23.14s-36.09-20.93-84.12-23.15h0Zm0,0h0Z" style="fill:#fff;fill-rule:evenodd"/></svg>

After

Width:  |  Height:  |  Size: 874 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

@@ -0,0 +1,220 @@
---
title: "📶 Polls"
description: "How to send polls and receive votes"
lead: ""
date: 2020-10-06T08:48:45+00:00
lastmod: 2020-10-06T08:48:45+00:00
draft: false
images: [ ]
weight: 126
---
Waiting for WEBJS engine to support it, and we'll add it ASAP!
![poll-example.jpg](poll-example.jpg)
## Endpoints
See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
### Send poll
Use the endpoint to send a poll!
```bash
POST /api/sendPoll
```
The request body is pretty simple:
```json
{
"session": "default",
"chatId": "123123123@c.us",
"poll": {
"name": "How are you?",
"options": [
"Awesome!",
"Good!",
"Not bad!"
],
"multipleAnswers": false
}
}
```
The response you get back:
```json
{
"id": "true_321321321@c.us_83ACBAAAAAAAAAAAAAAAAAAAA",
"other-fields-here": "value"
}
```
You must save the `id` field from the response in your database so that you can identify the poll for which you receive
a vote (see webhook events below).
## Webhooks
See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
### poll.vote
With this event, you receive new votes for the poll sent.
#### Vote from a user in direct messages.
```json
{
"event": "poll.vote",
"session": "default",
"payload": {
"vote": {
"id": "false_1111111111@c.us_83ACBE602A05C79B234B54415E95EE8A",
"to": "me",
"from": "1111111@c.us",
"fromMe": false,
"selectedOptions": [
"Awesome!"
],
"timestamp": 1692861427
},
"poll": {
"id": "true_1111111111@c.us_BAE5F2EF5C69001E",
"to": "1111111111@c.us",
"from": "me",
"fromMe": true
}
},
"engine": "NOWEB"
}
```
#### Do I receive votes only for my polls?
No, you receive all votes. Keep in mind that you'll get all votes with this event, even from other polls. To identify
that it's your poll, look at the `poll.fromMe` field.
#### How to handle multiple-answer votes
For `multipleAnswers: true`, you receive the `selectedOptions` with all the selected values at a certain moment. So if a
user has chosen 3 options from the poll, you will receive **3** `poll.vote` events:
1. `selectedOptions: ["First"]`
2. `selectedOptions: ["First", "Second"]`
3. `selectedOptions: ["First", "Second", "Third"]`
#### Timestamp
If a user clicks on the poll multiple times, you will receive multiple `poll.vote` events. This is true for
both `multipleAnswers: false` (when a user changes their mind about answers) and `multipleAnswers: true` (when a user
selects two or more options) events.
There is a little chance that you may receive votes in the wrong order (due to the nature of HTTP and Webhooks),
like `1-3-2` instead of `1-2-3`. To determine the right order, look at the `timestamp` field. The event with a
higher `timestamp` value is more recent.
👉 It's important to save the `timestamp` for each vote in your database and compare them as numbers, without converting to
internal datetime. Right now, the `timestamp` shows the timestamp in seconds, but it may be changed to milliseconds in
the future.
#### Vote from a user in a group
```json
{
"event": "poll.vote",
"session": "default",
"payload": {
"vote": {
"id": "false_3333333333333@g.us_1C18A7EAADD2A8D0324755D241C4238A",
"to": "3333333333333@g.us",
"from": "1111111111@c.us",
"fromMe": false,
"selectedOptions": [
"Awesome!"
],
"timestamp": 1692861427
},
"poll": {
"id": "true_3333333333333@g.us_BAE5304BA1ECF704",
"to": "33333333333333@g.us",
"from": "222222222@c.us",
"fromMe": true
}
},
"engine": "NOWEB"
}
```
### poll.vote.failed
There may be cases when WAHA fails to decrypt a vote from the user. In such cases, you will receive
a `poll.vote.failed` event on your webhook.
The payload for `poll.vote.failed` is the same as for `poll.vote`, but with an empty list in `selectedOptions`.
```json
{
"event": "poll.vote.failed",
"session": "default",
"payload": {
"vote": {
"id": "false_11111111111@c.us_2E8C4CDA89EDE3BC0BC7F605364B8451",
"to": "me",
"from": "111111111@c.us",
"fromMe": false,
"selectedOptions": [],
"timestamp": 1692956972
},
"poll": {
"id": "true_1111111111@c.us_BAE595F4E0A2042C",
"to": "111111111@c.us",
"from": "me",
"fromMe": true
}
},
"engine": "NOWEB"
}
```
#### How should I handle poll.vote.failed events?
When you send a poll, save the poll configuration (question and options) in your database with the `id` field from the
response you received from `POST /api/sendPoll`.
Later, when you receive a `poll.vote.failed` event, find the `id` for the poll in the database and repeat the same
question to the user, apologizing for the inconvenience.
For example, you can say:
> Sorry, we don't understand your choice 😞
>
> Please click one more time on the message below 👇
After the user clicks on the poll again, you will receive a `poll.vote` event with their choice.
![handle-poll-vote-failed.jpg](handle-poll-vote-failed.jpg)
#### How to test poll.vote.failed events?
To receive `poll.vote.failed` events, follow these steps:
1. Start a session and authorize it with a QR code.
2. Send a poll to a chat.
3. Stop the session (logout is not required).
4. Start the session again.
5. Vote on the poll.
6. You will receive a `poll.vote.failed` event.
#### Why does the poll.vote.failed event occur and when will it be fixed?
The issue occurs because WAHA does not have a proper storage system, but polls require proper storage in order to
decrypt votes later.
There will be two fixes for this:
1. In the short term, a [local file storage](https://github.com/devlikeapro/whatsapp-http-api/issues/188) will be used
to save poll keys.
2. In the long term, work is being done
on [remote storages](https://github.com/devlikeapro/whatsapp-http-api/issues/41).
Even after these fixes are implemented, it's better to handle `poll.vote.failed` events anyway, so your application is
prepared for such cases!
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

@@ -0,0 +1,157 @@
---
title: "✅ Presence"
description: "Presence"
lead: ""
date: 2020-10-06T08:48:45+00:00
lastmod: 2020-10-06T08:48:45+00:00
draft: false
images: [ ]
weight: 801
---
You can get presence information (online, offline with last seen, typing status) for a contact if they share their
presence information.
Possible presence statuses that you can set or get for chats:
- `online`
- `offline`
- `typing`
- `recording`
- `paused` resets the chat presence after you were `typing`
## Endpoints
See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
### Set presence
You can set your global or chat-related presence with `POST /api/{session}/presence` endpoint
Start typing to a chat (you can use `POST /startTyping` instead)
```
POST /api/{session}/presence
{
"chatId": "111111111@c.us",
"presence": "typing"
}
```
Clear "typing" state (you can use `POST /stopTyping` instead)
```
POST /api/{session}/presence
{
"chatId": "111111111@c.us",
"presence": "paused"
}
```
Set global "online", all contacts will see it
```
POST /api/{session}/presence
{
"presence": "online"
}
```
💡 In the multi-device version of WhatsApp - if a desktop client is active, WhatsApp doesn't send push notifications
to the device.
If you would like to receive said notifications - you need to mark a session's presence as `offline`.
```
POST /api/{session}/presence
{
"presence": "offline"
}
```
### Get all chats presence
Here's few notes about fields:
- `chatId` - either contact id (`213213213@c.us`) or group chat id (`1111111111111@g.us`).
- `lastSeen` - contains Unix timestamps indicating when a participant was last online
- `lastKnownPresence` - contains the last known presence status, which can be
`offline`, `online`, `typing`, `recording`, or `paused`
You can get all presence information available for a session by calling `GET /api/{session}/presence/`.
It returns both groups' and personal chats' presence information.
```json
[
{
"id": "2132132130@c.us",
"presences": [
{
"participant": "2132132130@c.us",
"lastKnownPresence": "offline",
"lastSeen": 1686719326
}
]
},
{
"id": "11111111111111111111111@g.us",
"presences": [
{
"participant": "11111111111111111111111@g.us",
"lastKnownPresence": "online",
"lastSeen": null
},
{
"participant": "2132132130@c.us",
"lastKnownPresence": "offline",
"lastSeen": 1686719326
}
]
}
]
```
### Get chat presence
To get presence information for a single chat - call `GET /api/{session}/presence/{chatId}`.
For a group, you'll get participants' statuses.
```json
{
"id": "2132132130@c.us",
"presences": [
{
"participant": "2132132130@c.us",
"lastKnownPresence": "online",
"lastSeen": null
}
]
}
```
### Subscribe to presence
You can subscribe to presence information by calling `POST /api/{session}/presence/{chatId}/subscribe` request
(no body required).
You can get later presence information for the chat with above `GET` endpoints or by listening to `presence.update`
webhook.
## Webhooks
See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
### presence.update
You can subscribe to `presence.update` webhook event to get the most recent presence information.
```json
{
"event": "presence.update",
"session": "default",
"payload": {
"id": "111111111111111111@g.us",
"presences": [
{
"participant": "11111111111@c.us",
"lastKnownPresence": "typing",
"lastSeen": null
}
]
},
"engine": "NOWEB"
}
```
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

@@ -0,0 +1,97 @@
---
title: "🌐 Proxy"
description: "Proxy"
lead: ""
date: 2020-10-06T08:48:45+00:00
lastmod: 2020-10-06T08:48:45+00:00
draft: false
images: [ ]
weight: 126
---
## Overview
If you're experiencing issues scanning QR codes in WhatsApp, especially with **Indian 🇮🇳 phone numbers**,
using a proxy located close to the phone number's location may help resolve the problem.
It affects both **WEBJS** and **NOWEB** [engines]({{< relref "/docs/how-to/engines" >}}).
### Symptoms
1. You start a new session in WhatsApp.
2. Scan the QR code.
3. Experience a long loading time.
4. Face login failures or instant logout.
5. Encounter a new QR code or enter a FAILED state immediately.
<div class="text-center">
![WhatsApp - could not login](could-not-login.png)
</div>
## Configuration
There are two ways to set up proxies:
1. Global Setting (for all sessions per container)
2. Per Session Configuration (you can define a proxy for each session when you start it)
### Global Proxy Configuration
To use a proxy, you can set the following environment variables:
- `WHATSAPP_PROXY_SERVER=localhost:3128`: Set the proxy server in the format `host:port`, without HTTP or HTTPS.
- `WHATSAPP_PROXY_SERVER_USERNAME=username` and `WHATSAPP_PROXY_SERVER_PASSWORD=password`: Configure credentials for the proxy.
- `WHATSAPP_PROXY_SERVER_LIST=host1.example.com:3138,host2.example.com:3138`: Specify a comma-separated list of addresses to use, utilizing a round-robin algorithm for server selection.
- `WHATSAPP_PROXY_SERVER_INDEX_PREFIX=proxy-`: Define a session name prefix to choose the appropriate proxy from the list.
Read more about it on [**Configuration page** ->]({{< relref "/docs/how-to/config#proxy" >}}).
### Session Proxy Configuration
You can configure proxy for a session by setting `config.proxy` fields when you `POST /api/sessions/start`:
- `server` - proxy server address, without `http://` or `https://` prefixes
- `username` and `password` - set this if the proxy requires authentication
**No authentication**
```json
{
"name": "default",
"config": {
"proxy": {
"server": "localhost:3128"
}
}
}
```
**Proxy with authentication**
```json
{
"name": "default",
"config": {
"proxy": {
"server": "localhost:3128",
"username": "username",
"password": "P@ssw0rd"
}
}
}
```
The configuration is saved and will be applied if the docker container restarts,
and you set `WHATSAPP_RESTART_ALL_SESSIONS` environment variables.
Read more about it in [Autostart section](#autostart).
Read more about it on [**Sessions page** ->]({{< relref "/docs/how-to/sessions#configure-proxy" >}}).
## Recommended Proxies
### Proxy6
We recommend using <b><a href="https://proxy6.net/en/?r=628046" target="_blank">Proxy6</a></b>
where you can get a DEDICATED proxy (only you'll use it) for **$1.77 per month**.
Apply the promocode get a **5% discount** on your purchase.
```
9W9oVxx3UX
```
### Geonode
Another option is <b><a href="https://geonode.com/invite/89107" target="_blank">Geonode</a></b>.
@@ -1,5 +1,5 @@
---
title : "Receive messages"
title : "📥 Receive messages"
description: "Receive messages"
lead: ""
date: 2020-10-06T08:48:45+00:00
@@ -8,54 +8,37 @@ draft: false
images: []
weight: 120
---
We consider that you've run docker container and authenticated the session with QR code.
The project uses [Webhooks](https://en.wikipedia.org/wiki/Webhook) to send the messages or events from WhatsApp to your
application.
If you haven't yet - please follow the steps from [**Quick Start →**]({{< relref "/docs/overview/quick-start" >}}).
## Webhooks ![](/images/versions/core.png) ![](/images/versions/plus.png)
You can configure where you want to receive events in environment variables:
- `WHATSAPP_HOOK_URL=https://httpbin.org/post` - to set up a URL for the webhook
- `WHATSAPP_HOOK_EVENTS=message,message.any,state.change,group.join,group.leave` - specify events. DO NOT specify all of
them, it's too heavy payload, choose the right for you.
- `WHATSAPP_HOOK_EVENTS=*` - subscribe to all events. It's not recommended for production, but it's fine for
development.
On the URL that you set via `WHATSAPP_HOOK_URL` you receive JSON-data with following format:
You must use [Webhooks]({{< relref "/docs/how-to/webhooks" >}}) to receive messages from WhatsApp to your application.
Start a new session with configured `message` event in webhooks - call `POST /api/sessions/start` with the payload:
```json
{
"event": "message",
"payload": {}
"name": "default",
"config": {
"webhooks": [
{
"url": "https://httpbin.org/post",
"events": [
"message"
]
}
]
}
}
```
Where `event` value helps you identify the incoming event with `payload` for that events.
Below the list of all events that WhatsApp HTTP API sends to your.
{{< alert icon="👉" text="If you want to look at a webhook body - use the url `https://httpbin.org/post`" />}}
Run the bellow command and see look at the logs - it prints body request for all events that happen in your WhatsApp!
```bash
docker run -it -e WHATSAPP_HOOK_EVENTS=* -e WHATSAPP_HOOK_URL=https://httpbin.org/post devlikeapro/whatsapp-http-api
```
### Examples
Here's few examples of how to handle webhook in different languages:
1. [Python guide]({{< relref "/docs/examples/python" >}})
**Do you use another language?**
Please create a short guide how to handle webhook and send message after you finish your setup!
You can create a pull request with your favorite language in the [GitHub, in examples folder](https://github.com/devlikeapro/whatsapp-http-api/tree/core/examples).
Just put the code and **README.md** file in the folder - we'll do the rest!
After that WAHA'll send events (see below) about new messages to an endpoint you provided.
## Events ![](/images/versions/core.png) ![](/images/versions/plus.png)
## Webhooks
See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
Here's examples of message-related events.
Read [Webhooks ->]({{< relref "/docs/how-to/webhooks" >}}) to find how to set them up.
### message
@@ -64,6 +47,7 @@ Incoming message (text/audio/files)
```json
{
"event": "message",
"session": "default",
"payload": {
"id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"timestamp": 1667561485,
@@ -126,79 +110,159 @@ Fired on all message creations, including your own. The payload is the same as f
```json
{
"event": "message.any",
"session": "default",
"payload": {}
}
```
### message.reaction
Receive events when a message is reacted to by a user (or **yourself** reacting to a message).
- `payload.reaction.text` - emoji that was used to react to the message. It'll be an empty string if the reaction was removed.
- `payload.reaction.messageId` - id of the message that was reacted to.
```json
{
"event": "message.reaction",
"session": "default",
"me": {
"id": "79222222222@c.us",
"pushName": "WAHA"
},
"payload": {
"id": "false_79111111@c.us_11111111111111111111111111111111",
"from": "79111111@c.us",
"fromMe": false,
"participant": "79111111@c.us",
"to": "79111111@c.us",
"timestamp": 1710481111.853,
"reaction": {
"text": "🙏",
"messageId": "true_79111111@c.us_11111111111111111111111111111111"
}
},
"engine": "WEBJS",
"environment": {
"version": "2024.3.3",
"engine": "WEBJS",
"tier": "PLUS",
"browser": "/usr/bin/google-chrome-stable"
}
}
```
{{< alert icon="👉" text="NOWEB engine note - reactions were sent in 'message' and 'message.any' events, not it's available only in 'message.reaction'!" />}}
### message.ack
Receive events when server or recipient gets the message, read or played it.
[See details on Webhooks page ->]({{< relref "webhooks#messageack" >}}).
```json
{
"event": "message.ack",
"session": "default",
"payload": {}
}
```
### state.change
### message.revoked
[See details on Webhooks page ->]({{< relref "webhooks#messageack" >}}).
```json
{
"event": "state.change",
"payload": {}
"event": "message.ack",
"session": "default",
"payload": {
"before": {
"id": "some-id-here",
"timestamp": "some-timestamp-here",
"body": "Hi there!"
},
"after": {
"id": "some-id-here",
"timestamp": "some-timestamp-here",
"body": ""
}
}
}
```
### group.join
```json
{
"event": "group.join",
"payload": {}
}
```
### group.leave
```json
{
"event": "group.left",
"payload": {}
}
```
## Files ![](/images/versions/plus.png)
When people send you files - images, voice messages, and documents - WAHA saves it in the file storage.
In your application you must download it and use it as you want to. You can find the URL in `mediaUrl` field
When people send you media - images, voice messages, and documents - WAHA saves it in the file storage.
In your application you must download it and use it as you want to. You can find the URL in `media.url` field.
For example, you can get the webhook like this with `mediaUrl` value (we've skipped other fields):
For example, you can get the webhook like this with `media` value (we've skipped other fields):
```json
{
"event": "message",
"session": "default",
"payload": {
"id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"timestamp": 1667561485,
"from": "11111111111@c.us",
"mediaUrl": "http://localhost:3000/api/files/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.jpg"
"hasMedia": true,
"media": {
"url": "http://localhost:3000/api/files/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.jpg",
"mimetype": "image/jpeg",
"filename": null
}
}
}
```
Then you can use the link to download the file `http://localhost:3000/api/files/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.jpg`.
For documents (file attachments) there's also `filename` field with the original file name.
```json
{
"event": "message",
"session": "default",
"payload": {
"id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"timestamp": 1667561485,
"from": "11111111111@c.us",
"media": {
"url": "http://localhost:3000/api/files/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.pdf",
"filename": "some-file.pdf",
"mimetype": "application/pdf"
}
}
}
```
To configure the url you can use environment variables `WHATSAPP_API_HOSTNAME` and `WHATSAPP_API_PORT`.
[Read more about file storage configuration and variables ->]({{< relref "config" >}}).
By default, WAHA download all files that the account receive.
If you want to limit files lifetime, specify file types for download or change directory for files -
[read more about file storage configuration and variables ->]({{< relref "config" >}}).
## Webhook retries ![](/images/versions/plus.png)
## Endpoints
See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
**WAHA** retries to reach your webhook URL 15 times and with 2 seconds delay between attempts.
### Get messages
Read messages from the history - use `GET /api/messages` endpoint.
## Get messages
You can read messages from the history by using `GET /api/messages` endpoint.
You also can get messages for chats by using
[**Get messages from chat ->**]({{< relref "/docs/how-to/chats" >}}) endpoint.
{{< alert icon="👉" text="We do not recommend using this method in production, consider using webhooks instead!" />}}
```bash
curl -X 'GET' \
'http://localhost:3000/api/messages?chatId=11111111111%40c.us&limit=1000&session=default' \
-H 'accept: application/json'
```
## Examples
Here's few examples of how to receive messages in different languages:
1. [Python guide ->]({{< relref "/docs/examples/python" >}})
**Do you use another language?**
Please create a short guide how to handle webhook and send message after you finish your setup!
You can create a pull request with your favorite language in the
[GitHub, in examples folder ->](https://github.com/devlikeapro/whatsapp-http-api/tree/core/examples).
@@ -1,5 +1,5 @@
---
title : "Security"
title : "🔒 Security"
description: "Security"
lead: ""
date: 2020-10-06T08:48:45+00:00
@@ -15,7 +15,10 @@ We do not recommend exposing the API on any public networks!
Either protect the API with [Api Key](https://www.fortinet.com/resources/cyberglossary/api-key) or deny access by using
firewalls.
## Swagger Security ![](/images/versions/plus.png)
👉 Security options are available in [**WAHA Plus**]({{< relref "plus-version#plus" >}}) ![](/images/versions/plus.png) version only.
## Swagger Security
### Username and password
If you want to hide the project Swagger panel under the password - run the following command to hide under `admin/admin`
login and password.
@@ -29,7 +32,20 @@ Open http://localhost:3000/ and enter `admin / admin` in the inputs:
{{< alert icon="👉" text="Protecting Swagger under the password does not protect your API from other request! Use both techniques to protect your API and Swagger!" />}}
## API security ![](/images/versions/plus.png)
### Disable Swagger
You also can hide swagger completely by setting `WHATSAPP_SWAGGER_ENABLED=false` environment variable.
{{< alert icon="👉" text="Disabling Swagger does not protect the API, please use API security as well" />}}
## Dashboard Security
When running WAHA you can set the following environment variables to configure the dashboard:
- `WAHA_DASHBOARD_ENABLED=true` - enable or disable the dashboard, by default `true`. Set to `false` to disable the dashboard.
- `WAHA_DASHBOARD_USERNAME=waha` - username used to log in, by default `waha`.
- `WAHA_DASHBOARD_PASSWORD=waha` - password used to log in, by default `waha`.
Read more about [**Dashboard ->**]({{< relref "/docs/how-to/waha-dashboard" >}})
## API security
You can protect the API by requiring Api Key in a request's headers.
@@ -65,3 +81,7 @@ headers = {
requests.get("http://localhost:3000/api/sessions", headers=headers)
```
## Webhook security
To make sure that you get a webhook from your WAHA instance - you can use **HMAC authentication**.
Read more about it on [Webhooks page ->]({{< relref "/docs/how-to/webhooks#hmac-authentication" >}})
@@ -1,34 +1,54 @@
---
title : "Send messages"
title : "📤 Send messages"
description: "Send messages"
lead: ""
date: 2020-10-06T08:48:45+00:00
lastmod: 2020-10-06T08:48:45+00:00
draft: false
images: []
weight: 110
weight: 115
---
On your swagger documentation [http://localhost:3000/](http://localhost:3000/)
or in [the example swagger](/swagger) you can find:
1. List of all supported methods - we have not documented all of them on the page
1. Requests JSON schemas
1. Responses JSON schemas
1. **Try it** button - no additional setup to play around with a method
We consider that you've run docker container and authenticated the session with QR code.
If you haven't yet - please follow the steps from [**Quick Start →**]({{< relref "/docs/overview/quick-start" >}}).
## Fields
There are common fields that you can find in almost all requests:
- `session` - a session name from which account you're sending the message. We use `default` in the examples.
- Core ![](/images/versions/core.png) version supports only `default` session.
- Plus ![](/images/versions/plus.png) allows you to run multiple sessions inside one container to save your memory and CPU resources!
```json
{
"session": "default",
"chatId": "12132132130@c.us",
"file": "..."
}
```
### session
`session` - a session name from which account you're sending the message. We use `default` in the examples.
- Core ![](/images/versions/core.png) version supports only `default` session.
- Plus ![](/images/versions/plus.png) allows you to run multiple sessions inside one container to save your memory and CPU resources!
Read more about [multiple sessions →]({{< relref "/docs/how-to/sessions" >}})
- `chatId` - it's a phone number or Group identifier where you're sending the message.
- **Phone numbers** accounts use international phone number without + at the start and add `@c.us` at the end.
For phone number `12132132131` the `chatId` is `12132132131@c.us`.
- **Groups** use random number with `@g.us` at the end.
### chatId
`chatId` - it's a phone number or Group identifier where you're sending the message.
- **Phone numbers** accounts use international phone number without + at the start and add `@c.us` at the end.
For phone number `12132132131` the `chatId` is `12132132131@c.us`.
- **Groups** use random number with `@g.us` at the end.
## Send text ![](/images/versions/core.png) ![](/images/versions/plus.png)
> To get the actual `chatId` for **Brazilian phone number** - use `chatId` field from
> [Check phone number exists ->]({{< relref "/docs/how-to/contacts#check-phone-number-exists" >}})
> response.
### file
When sending media (images, voice, files) you can either use:
- `file.data` field [with base64 encoded file](https://base64.guru/converter/encode/file)
- `file.url` field with public available URL for that file
## Endpoints
See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
### Send text
To send text message - use `POST /api/sendText` with example payload.
```json
{
@@ -38,7 +58,25 @@ To send text message - use `POST /api/sendText` with example payload.
}
```
## Reply on message ![](/images/versions/core.png) ![](/images/versions/plus.png)
#### Mention contact
If you send a message in a group and want to mention a participant in the message -
use `mentions` field for that in `POST /api/sendText` request.
Please note that you MUST mention a number in the text as well in the format `@2132132130` and
also mention it in `mentions` in format `2132132130@c.us`
```json
{
"session": "default",
"chatId": "12132132130@c.us",
"text": "Hi there! @2132132130",
"mentions": [
"2132132130@c.us"
]
}
```
### Reply on message
To reply on a message - use `POST /api/reply` with example payload.
```json
{
@@ -49,10 +87,50 @@ To reply on a message - use `POST /api/reply` with example payload.
}
```
### Reply files ![](/images/versions/plus-soon.png)
WAHA does not support reply with files (images, voice, etc). If you're interested in it - please create an issue in GitHub.
#### Reply files ![](/images/versions/plus.png)
WAHA does not support reply with files (images, voice, etc.). If you're interested in it - please create an issue in GitHub.
## Add a reaction ![](/images/versions/core.png) ![](/images/versions/plus.png)
### Edit message
You can edit **text** messages or **"caption"** in media messages.
```
PUT /api/{session}/chats/{chatId}/messages/{messageId}
```
👉 Remember to escape `@` in `chatId` and `messageId` with `%40`.
So if you want to edit `true_123@c.us_AAA` message in `123@c.us` chat you need to send request to:
```
PUT /api/{session}/chats/123%40c.us/messages/true_123%40c.us_AAA
```
**Payload:**
```json
{
"text": "Hello, world!"
}
```
### Delete message
You can delete messages from the chat.
```
DELETE /api/{session}/chats/{chatId}/messages/{messageId}
```
👉 Remember to escape `@` in `chatId` and `messageId` with `%40`.
So if you want to delete `true_123@c.us_AAA` message in `123@c.us` chat you need to send request to:
```
DELETE /api/{session}/chats/123%40c.us/messages/true_123%40c.us_AAA
```
### Send poll
We have a dedicated page [how to send polls and receive votes]({{< relref "/docs/how-to/polls" >}})!
![](poll-example.jpg)
### Add a reaction
Use `PUT /api/reaction` method to set reaction to a message.
{{< alert icon="👉" text="Reaction API uses PUT, not POST request! Please make sure you send right request." />}}
@@ -74,14 +152,93 @@ To remove reaction from a message - send empty string in the reaction request.
}
```
## Send image ![](/images/versions/plus.png)
### Star and unstar message
Use `PUT /api/star` method to star or unstar a message.
{{< alert icon="👉" text="Star API uses PUT, not POST request! Please make sure you send right request." />}}
**Star:**
```json
{
"messageId": "false_71111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"chatId": "71111111111@c.us",
"star": true,
"session": "default"
}
```
**Unstar:**
```json
{
"messageId": "false_71111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"chatId": "71111111111@c.us",
"star": false,
"session": "default"
}
```
### Send contact (vcard)
Use `POST /api/sendContactVcard` to send contact (vcard).
You can use fields this way:
```json
{
"session": "default",
"chatId": "79111111@c.us",
"contacts": [
{
"fullName": "John Doe",
"organization": "Company Name",
"phoneNumber": "+91 11111 11111",
"whatsappId": "911111111111"
}
]
}
```
Or provide a vCard file content:
```json
{
"session": "default",
"chatId": "79111111@c.us",
"contacts": [
{
"vcard": "BEGIN:VCARD\nVERSION:3.0\nFN:Jane Doe\nORG:Company Name;\nTEL;type=CELL;type=VOICE;waid=911111111111:+91 11111 11111\nEND:VCARD"
}
]
}
```
Or even combine it:
```json
{
"chatId": "79111111@c.us",
"contacts": [
{
"vcard": "BEGIN:VCARD\nVERSION:3.0\nFN:Jane Doe\nORG:Company Name;\nTEL;type=CELL;type=VOICE;waid=911111111111:+91 11111 11111\nEND:VCARD"
},
{
"fullName": "John Doe",
"organization": "Company Name",
"phoneNumber": "+91 11111 11111",
"whatsappId": "911111111111"
}
],
"session": "default"
}
```
### Send image ![](/images/versions/plus.png)
Use `POST /api/sendImage` to send images.
You can send images in two ways:
1. Provide a URL for the image.
2. Encode the whole file content into base64 and send it in the request body.
### URL
#### URL
```json
{
"session": "default",
@@ -95,7 +252,7 @@ You can send images in two ways:
}
```
### Base64
#### Base64
```json
{
"session": "default",
@@ -109,28 +266,29 @@ You can send images in two ways:
}
```
## Send voice ![](/images/versions/plus.png)
### Send voice ![](/images/versions/plus.png)
Use `POST /api/sendVoice` to send voice messages.
You can send voice messages in two ways:
1. Provide a URL for the voice.
2. Encode the whole file content into base64 and send it in the request body.
### URL
Please make sure your file has **OPUS** encoding and packed in OGG container.
#### URL
```json
{
"session": "default",
"chatId": "11111111111@c.us",
"file": {
"mimetype": "audio/ogg; codecs=opus",
"filename": "voice-message.mp3",
"url": "https://github.com/devlikeapro/whatsapp-http-api/raw/core/examples/dev.likeapro.mp3"
"url": "https://github.com/devlikeapro/whatsapp-http-api/raw/core/examples/dev.likeapro.opus"
},
"caption": "string"
}
```
### Base64
#### Base64
```json
{
"chatId": "11111111111@c.us",
@@ -142,27 +300,67 @@ You can send voice messages in two ways:
"session": "default"
}
```
## Send file ![](/images/versions/plus.png)
### Send video ![](/images/versions/plus.png)
Use `POST /api/sendVideo` to send a message with a video attached.
For **WEBJS** engine please use `devlikeapro/whatsapp-http-api-plus:chrome` docker image.
Read more about [**Docker images and engines →**]({{< relref "/docs/how-to/engines" >}}).
You can send voice messages in two ways:
1. Provide a URL for the file and the API will download it and send it in the request body.
2. Provide the file as a base64 string in the request body.
#### URL
```json
{
"session": "default",
"chatId": "11111111111@c.us",
"caption": "Watch this video!",
"file": {
"mimetype": "video/mp4",
"filename": "video.mp4",
"url": "https://github.com/devlikeapro/whatsapp-http-api/raw/core/examples/video.mp4"
}
}
```
#### Base64
```json
{
"chatId": "11111111111@c.us",
"caption": "Watch this video!",
"file": {
"mimetype": "video/mp4",
"filename": "video.mp4",
"data": "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 truncated
},
"session": "default"
}
```
### Send file ![](/images/versions/plus.png)
Use `POST /api/sendFile` to send a file as a document.
You can send files in two ways:
1. Provide a URL for the file.
2. Encode the whole file content into base64 and send it in the request body.
### URL
#### URL
```json
{
"session": "default",
"caption": "Check this out!",
"chatId": "11111111111@c.us",
"file": {
"mimetype": "image/jpeg",
"filename": "filename.jpeg",
"url": "https://github.com/devlikeapro/whatsapp-http-api/raw/main/docs/dev.likeapro.jpg"
},
"session": "default"
"url": "https://raw.githubusercontent.com/devlikeapro/whatsapp-http-api/core/examples/video.mp4"
}
}
```
### Base64
#### Base64
```json
{
"session": "default",
@@ -176,3 +374,73 @@ You can send files in two ways:
}
```
### Send status (aka stories)
You can send statuses (aka stories)!
It is always necessary to inform the list of `contacts` that will have access to the posted status!
#### Send text status
`POST /api/{session}/status/text`
```json
{
"contacts": [
"55xxxxxxxxxxx@c.us"
],
"text": "Have a look! https://waha.devlike.pro/",
"backgroundColor": "#38b42f",
"font": 1
}
```
#### Send image status ![](/images/versions/plus.png)
`POST /api/{session}/status/image`
```json
{
"contacts": [
"55xxxxxxxxxxx@c.us"
],
"file": {
"mimetype": "image/jpeg",
"filename": "filename.jpeg",
"data": "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"
},
"caption": "string"
}
```
#### Send voice status ![](/images/versions/plus.png)
`POST /api/{session}/status/voice`
```json
{
"contacts": [
"55xxxxxxxxxxx@c.us"
],
"file": {
"mimetype": "audio/mp4",
"filename": "voice-message.mp3",
"data": "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 truncated
},
"backgroundColor": "#38b42f"
}
```
#### Send video status ![](/images/versions/plus.png)
`POST /api/{session}/status/video`
```json
{
"contacts": [
"55xxxxxxxxxxx@c.us"
],
"file": {
"mimetype": "audio/mp4",
"filename": "video-message.mp3",
"data": "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 truncated
},
"backgroundColor": "#38b42f"
}
```
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

@@ -1,44 +1,16 @@
---
title : "Sessions"
title: "🖥️ Sessions"
description: "Sessions"
lead: ""
date: 2020-10-06T08:48:45+00:00
lastmod: 2020-10-06T08:48:45+00:00
draft: false
images: []
weight: 200
images: [ ]
weight: 125
---
## Saving session ![](/images/versions/plus.png)
Plus ![](/images/versions/plus.png) version allows you to save "session" state and avoid scanning QR code everytime when
you start a container.
### File storage
If you want to save your session and do not scan QR code everytime when you launch WAHA - connect a local file storage
to the container. WAHA stores authentication information in the directory and reuses it after restart.
[Attach volume](https://docs.docker.com/storage/volumes/) part to the command:
```bash
-v `pwd`/.sessions:/app/.sessions
```
The full command would be:
```bash
docker run --rm -d -v `pwd`/.sessions:/app/.sessions -p 127.0.0.1:3000:3000/tcp --name whatsapp-http-api devlikeapro/whatsapp-http-api
```
### Remote storage ![](/images/versions/soon.png)
If you're interested in using some "remote" storage (like Redis or other Databases) to save sessions - please create an
issue on GitHub.
For instances, it may be useful if you run WAHA in a cluster of servers and do not have shared file storage
## Multiple sessions ![](/images/versions/plus.png)
If you want to save server's CPU and Memory - run multiple sessions inside one docker container!
## Endpoints
See the list of engines [**that support the features ->**]({{< relref "/docs/how-to/engines#features" >}}).
### Start
@@ -49,6 +21,82 @@ In order to start a new session - call `POST /api/sessions/start`
"name": "default"
}
```
#### Configure webhooks
You can configure webhooks for a session:
```json
{
"name": "default",
"config": {
"webhooks": [
{
"url": "https://httpbin.org/post",
"events": [
"message"
]
}
]
}
}
```
Read more about available options on [**Webhooks page ->**]({{< relref "/docs/how-to/webhooks#hmac-authentication" >}})
The configuration is saved and will be applied if the docker container restarts,
and you set `WHATSAPP_RESTART_ALL_SESSIONS` environment variables.
Read more about it in [Autostart section](#autostart).
#### Configure proxy
You can configure proxy for a session by setting `config.proxy` fields when you `POST /api/sessions/start`:
- `server` - proxy server address, without `http://` or `https://` prefixes
- `username` and `password` - set this if the proxy requires authentication
**No authentication**
```json
{
"name": "default",
"config": {
"proxy": {
"server": "localhost:3128"
}
}
}
```
**Proxy with authentication**
```json
{
"name": "default",
"config": {
"proxy": {
"server": "localhost:3128",
"username": "username",
"password": "P@ssw0rd"
}
}
}
```
The configuration is saved and will be applied if the docker container restarts,
and you set `WHATSAPP_RESTART_ALL_SESSIONS` environment variables.
Read more about it in [Autostart section](#autostart).
You can configure proxy when for all sessions by set up environment variables.
Read more about it on [**Proxy page** ->]({{< relref "/docs/how-to/proxy" >}}) or [**Configuration page** ->]({{< relref "/docs/how-to/config#proxy" >}}).
#### Enable debug
You can enable debug mode for a session by setting `config.debug` field to `true`.
It'll show you more logs in the console.
Can be useful for debugging purposes when you're experiencing some issues.
```json
{
"name": "default",
"config": {
"debug": true
}
}
```
### List
@@ -60,20 +108,286 @@ The response:
[
{
"name": "default",
"status": "STARTING"
"status": "WORKING",
"config": {
"proxy": null,
"webhooks": [
{
"url": "https://httpbin.org/post",
"events": [
"message",
"session.status"
],
"hmac": null,
"retries": null,
"customHeaders": null
}
],
"debug": false
},
"me": {
"id": "79111111@c.us",
"pushName": "WAHA"
},
"engine": {
"engine": "NOWEB"
}
}
]
```
You can add `?all=true` parameter to the request `GET /api/session?all=True` it'll show you ALL session,
including **STOPPED**,
so you can know which one will be restarted if you set `WHATSAPP_RESTART_ALL_SESSIONS=True` environment variable.
### Get session
To get information about a specific session - call `GET /api/sessions/{session}`.
```json
{
"name": "default",
"status": "WORKING",
"config": {
"proxy": null,
"webhooks": [
{
"url": "https://httpbin.org/post",
"events": [
"message",
"session.status"
],
"hmac": null,
"retries": null,
"customHeaders": null
}
],
"debug": false
},
"me": {
"id": "79111111@c.us",
"pushName": "WAHA"
},
"engine": {
"engine": "NOWEB"
}
}
```
### Stop
In order to stop a new session - call `POST /api/sessions/stop`
{{< alert icon="👉" text="The stop request does not log out the account. Manually remove the session storage." />}}
{{< alert icon="👉" text="The stop request does not log out the account by default. Set 'logout' field to 'true'." />}}
```json
{
"name": "default"
"name": "default",
"logout": true
}
```
### Logout
In order to log out the session - call `POST /api/sessions/logout`
{{< alert icon="👉" text="You must stop session first." />}}
```json
{
"name": "default",
"logout": true
}
```
### Get screenshot
Get screenshot of the session's screen.
```bash
GET /api/screenshot?session=default
```
#### Get screenshot in Base64
You can get screenshot in base64 format by adding `Accept: application/json` header to the request.
```bash
GET /api/screenshot?session=default
Accept: application/json
```
```json
{
"mimetype": "image/png",
"data": "base64-encoded-data"
}
```
You can change it in Swagger by clicking on **Media Type** dropdown and selecting **application/json**:
![](/images/swagger-media-type.png)
### Get me
Get information about the associated account for that session (if any).
```bash
GET /api/sessions/{session}/me
```
**Authenticated and working** session's response:
```json
{
"id": "11111111111@c.us",
"pushName": "string"
}
```
**Stopped** or **not authenticated** session returns null:
```json
null
```
### Get QR
See the list of engines [**that support the features ->**]({{< relref "/docs/how-to/engines#features" >}}).
The simplest way to authenticate a new session - get QR code and scan it on your device.
```bash
GET /api/{session}/auth/qr
```
You'll get QR image that you can scan and get authenticated
#### QR formats
You can get QR in different formats:
1. **binary image** - `GET /api/{session}/auth/qr`
2. **base64 image** - `GET /api/{session}/auth/qr` and set `Accept: application/json` header
3. **raw** - `GET /api/{session}/auth/qr?format=raw`
Here's detailed information about each format:
1. **binary image**, binary image - **default** format, you'll get image in response
```bash
# Get image - binary
GET /api/{session}/auth/qr
# OR
GET /api/{session}/auth/qr?format=image
# OR specify Accept header as well
GET /api/{session}/auth/qr?format=image
Accept: image/png
```
2. **base64 image** - you'll get image in base64 format in response if you set `Accept: application/json` header.
```bash
GET /api/{session}/auth/qr?format=image
Accept: application/json
```
```json
{
"mimetype": "image/png",
"data": "base64-encoded-data"
}
```
You can change it in Swagger by clicking on **Media Type** dropdown and selecting **application/json**:
![](/images/swagger-media-type.png)
3. **raw** - you'll get raw data in response, you can use it to generate QR code on your side
```bash
GET /api/{session}/auth/qr?format=raw
```
```json
{
"value": "value-that-you-need-to-use-to-generate-qr-code"
}
```
### Get pairing code
See the list of engines [**that support the features ->**]({{< relref "/docs/how-to/engines#features" >}}).
You can [link a session with phone number](https://faq.whatsapp.com/1324084875126592) - make a request to the endpoint.
```bash
POST /api/{session}/auth/request-code
```
Body example:
```json
{
"phoneNumber": "12132132130"
}
```
You'll get code in the response that you can use on your WhatsApp app to connect the session:
```json
{
"code": "ABCD-ABCD"
}
```
## Webhooks
See the list of engines [**that support the feature ->**]({{< relref "/docs/how-to/engines#features" >}}).
### session.status
The `session.status` event is triggered when the session status changes.
- `STOPPED` - session is stopped
- `STARTING` - session is starting
- `SCAN_QR_CODE` - session is required to scan QR code or login via phone number.
- When you receive the `session.status` event with `SCAN_QR_CODE` status, you can [**fetch updated QR ->**]({{< relref "/docs/how-to/sessions#get-qr" >}})
- The `SCAN_QR_CODE` is issued every time when QR updated (WhatsApp requirements)
- `WORKING` - session is working and ready to use
- `FAILED` - session is failed due to some error. It's likely that authorization is required again or device has been disconnected from that account.
Try to restart the session and if it doesn't help - logout and start the session again.
```json
{
"event": "session.status",
"session": "default",
"me": {
"id": "7911111@c.us",
"pushName": "~"
},
"payload": {
"status": "WORKING"
},
"engine": "WEBJS",
"environment": {
"version": "2023.10.12",
"engine": "WEBJS",
"tier": "PLUS"
}
}
```
## Advanced sessions ![](/images/versions/plus.png)
With [WAHA Plus version]({{< relref "plus-version" >}}) you can save session state to avoid scanning QR code everytime,
configure autostart options so when the docker container restarts - it restores all previously run sessions!
### Session persistent
If you want to save your session and do not scan QR code everytime when you launch WAHA -
[connect the session storage to the container ->]({{< relref "/docs/how-to/storages#sessions" >}})
### Autostart
If you don't want to call `POST /api/sessions/start` for every session each time when the container restart -
you can use set of these environment variables to start sessions for you:
- `WHATSAPP_RESTART_ALL_SESSIONS=True`: Set this variable to `True` to start all **STOPPED** sessions after container
restarts. By default, this variable is set to `False`.
- Please note that this will start all **STOPPED** sessions, not just the sessions that were working before the restart. You can maintain the session list by
using `POST /api/session/stop` with the `logout: True` parameter or by calling `POST /api/session/logout` to remove
**STOPPED** sessions. You can see all sessions, including **STOPPED** sessions, in the `GET /api/sessions/all=True`
response.
- `WHATSAPP_START_SESSION=session1,session2`: This variable can be used to start sessions with the specified names right
after launching the API. Separate session names with a comma.
### Multiple sessions
If you want to save server's CPU and Memory - run multiple sessions inside one docker container!
[Plus version]({{< relref "plus-version" >}}) supports multiple sessions in one container.
@@ -0,0 +1,149 @@
---
title: "🗄️ Storages"
description: "Storages"
lead: ""
date: 2020-10-06T08:48:45+00:00
lastmod: 2020-10-06T08:48:45+00:00
draft: false
images: [ ]
weight: 700
---
There are several storages that are used by the WAHA, below you can find the list of them and the way to configure them.
1. [Sessions](#sessions) - used to store the session data, such as authentication information, configuration, and other data that is required to keep the session alive and connected to WhatsApp.
2. [Media](#media) - used to store the media files, such as images, videos, and other files that are received from the WhatsApp instance.
<b>Storages are available in [WAHA Plus ![](/images/versions/plus.png)]({{< relref "/docs/how-to/plus-version" >}}) only.</b>
## Sessions
The "Sessions" storage is used to store the session data, such as authentication information, configuration,
and other data that is required to keep the session alive and connected to WhatsApp.
If you want to save your session and do not scan QR code everytime when you launch WAHA -
connect the session storage to the container.
For the session storage, you can use the following options:
1. [Local (files)](#local-files) - the default option, stores the session data in the local storage using files.
2. [MongoDB](#mongodb) - stores the session data in the MongoDB database.
The following table shows the compatibility of the session storage with the engines:
| | WEBJS | NOWEB | VENOM |
|---------------|:-----:|:-----:|:-----:|
| Local (files) | ✔️ | ✔️ | ✔️ |
| MongoDB | ✔️ | ✔️ | ➖ |
## Sessions - Local (files)
By default, the WAHA uses the **local storage (files)** to store the session data.
{{< alert icon="💡" text="It's <b>well tested solution</b> even for production" />}}
In order to use the local storage and save the session data between the container restarts,
you need to mount the volume to the `/app/.sessions` directory using the `-v` option in `docker run` command:
```bash
-v /path/to/on/host/.sessions:/app/.sessions
```
The full command to run the WAHA with the local storage and save the session data
in the current directory and `.sessions` directory:
```bash
docker run -v `pwd`/.sessions:/app/.sessions -p 3000:3000/tcp devlikeapro/whatsapp-http-api-plus
```
This is the only action you need to do to use the local storage - all session data will be available between the container restarts.
### How it works
In the host machine, the session data will be stored in the current directory in the `.sessions` directory.
Under the hood, the WAHA stores the session data in the following directory structure:
```
.sessions/{engine}/{sessionName}/...
```
when you "logout" the session using [POST /api/sessions/logout]({{< relref "/docs/how-to/sessions#logout">}}) or providing `logout: True` in [POST /api/sessions/stop]({{< relref "/docs/how-to/sessions#stop">}})
it removes the directory with the session data.
### Health Check
The [WAHA Plus ![](/images/versions/plus.png)]({{< relref "/docs/how-to/plus-version" >}}) provides [the health check endpoint]({{< relref "/docs/how-to/other" >}}) that checks the local storage.
## Sessions - MongoDB
If you want to use the MongoDB to store the session data, you need to:
1. Start the MongoDB server (using docker or any other way). You can either start your own MongoDB server or use the one of cloud providers, like [MongoDB Atlas](https://www.mongodb.com/atlas/database).
2. Set `WHATSAPP_SESSIONS_MONGO_URL=mongodb://user:password@host:port/` environment variable to connect to the MongoDB server.
**We recommend using your own MongoDB server as close as possible to WAHA server** for the best performance and security reasons.
{{< alert icon="💡" text="For <b>WEBJS</b> engine it can take up to 1 minute to save credentials in Mongo Database" />}}
### Example
First, you need to start MongoDB server:
```bash
docker run -d -p 27017:27017 --name mongodb mongo
```
Then, you need to run the WAHA with the `WHATSAPP_SESSIONS_MONGO_URL` environment variable (please note using `--network host` option as well)
```bash
docker run -e WHATSAPP_SESSIONS_MONGO_URL=mongodb://localhost:27017/ --network host devlikeapro/whatsapp-http-api-plus
```
This is the only action you need to do to use the MongoDB storage -
all session authentication data will be stored in the MongoDB database.
### How it works
When you start a session, it stores the session data in the MongoDB database in two databases:
1. `waha_{engine}` - it saves the session configuration in `sessions` collection with `name: {sessionName}` field.
2. `waha_{engine}_{sessionName}` - it saves the WhatsApp authentication data and other session data. Each engine saves different data in this database.
When you "logout" the session using [POST /api/sessions/logout]({{< relref "/docs/how-to/sessions#logout">}}) or providing `logout: True` in [POST /api/sessions/stop]({{< relref "/docs/how-to/sessions#stop">}}) it removes those databases or elements from them.
For dealing and troubleshooting with the MongoDB, we recommend using [MongoDB Compass](https://www.mongodb.com/products/tools/compass).
![](waha-mongodb.png)
### MongoDB Atlas
If you use the [MongoDB Atlas](https://www.mongodb.com/atlas/database) you must grant
`Atlas Admin` role in **Security => Database Access** before you connect to the database.
For production please consider running the MongoDB server close to the WAHA server for the best performance and security reasons.
### Health Check
The [WAHA Plus ![](/images/versions/plus.png)]({{< relref "/docs/how-to/plus-version" >}}) provides [the health check endpoint]({{< relref "/docs/how-to/other" >}}) that checks the MongoDB connection.
## Media
When your WhatsApp instance receives media files, it stores them in the media storage.
You can use the following options to store the media files:
1. [Local](#local) - the default option, stores the media files in the local storage using files.
2. [S3](#s3) - stores the media files in the S3 storage.
Read more about [available configuration options ->]({{<relref "/docs/how-to/config#files">}}).
The following table shows the compatibility of the storage with the engines:
| | WEBJS | NOWEB | VENOM |
|-------|:-----:|:-----:|:-----:|
| Local | ✔️ | ✔️ | ✔️ |
| S3 | 🕒 | 🕒 | ➖ |
## Media - Local
By default, the WAHA uses the **local file storage** to store the media files and those files has a short lifetime (180 seconds).
So it's your app responsibility to download and store them in a safe persistent place during this time.
### Save media files between the container restarts
If you want to use the local storage and **save the media files between the container restarts for a long time** - you need to:
1. Specify a dedicated folder to store the media files using `WHATSAPP_FILES_FOLDER=/app/.media` environment variable
2. Disable automatic media files cleanup using `WHATSAPP_FILES_LIFETIME=0` environment variable
3. Connect the volume to the specified folder using the `-v /path/to/files/on/host:/app/.media` option in `docker run` command to the folder specified in `WHATSAPP_FILES_FOLDER` environment variable.
Read more about [available configuration options ->]({{<relref "/docs/how-to/config#files">}}).
Here's all the steps in one command:
```bash
docker run -v /path/to/on/host/.media:/app/.media -e WHATSAPP_FILES_FOLDER=/app/.media -e WHATSAPP_FILES_LIFETIME=0 -p 3000:3000/tcp devlikeapro/whatsapp-http-api-plus
```
### Health Check
The [WAHA Plus ![](/images/versions/plus.png)]({{< relref "/docs/how-to/plus-version" >}}) provides [the health check endpoint]({{< relref "/docs/how-to/other" >}}) that checks the local storage.
## Media - S3
If you're interested in using the S3 storage or any other cloud storage (like [self-hosted S3 - Minio](https://min.io/)),
please create an issue or vote for the S3 issue in [the GitHub repository](https://github.com/devlikeapro/whatsapp-http-api/issues?q=is%3Aissue+is%3Aopen+S3).
Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

@@ -0,0 +1,60 @@
---
title: "📚 Swagger (OpenAPI)"
description: "Swagger (OpenAPI)"
lead: ""
date: 2020-10-06t08:48:45+00:00
lastmod: 2020-10-06t08:48:45+00:00
draft: false
images: [ ]
weight: 111
---
## Overview
The project provides HTTP API (REST), which is documented with OpenAPI specification and Swagger UI.
<video autoplay loop muted playsinline controls='noremoteplayback' width="100%" poster='/images/swagger.png'>
<source src="/videos/swagger-overview.webm" type="video/webm" />
Download the <a href="/videos/swagger-overview.webm">Swagger Overview video</a> .
</video>
You can see all available endpoints, request/response examples, and even execute them directly from the Swagger UI.
Later version:
- [OpenAPI specification ->](/swagger/openapi.json)
- [Swagger documentation ->](/swagger)
You can find Swagger documentation on the following url after you
[install and started]( {{< relref "/docs/how-to/install" >}}) it:
- Swagger: [http://localhost:3000](http://localhost:3000).
- OpenAPI: [http://localhost:3000/-json](http://localhost:3000/-json).
## Configuration
- `WHATSAPP_SWAGGER_CONFIG_ADVANCED=true` - enables advanced configuration options for Swagger documentation - you can customize host, port and base URL for the requests.
Disabled by default.
- `WHATSAPP_SWAGGER_ENABLED=false` - disables Swagger documentation. Enabled by default. Available in **WAHA Plus** only.
- `WHATSAPP_SWAGGER_USERNAME=admin` and `WHATSAPP_SWAGGER_PASSWORD=admin` - these variables can be used to protect the Swagger panel
with `admin / admin` credentials. This does not affect API access. Available in **WAHA Plus** only.
Read more about security settings for Swagger and API on [**Security page** ->]({{< relref "/docs/how-to/security" >}}).
### White label
You can show your own brand in the Swagger documentation.
<img src="swagger-white-label.png" onclick="window.open(this.src)" style="cursor: pointer;">
<br/>
<br/>
👉 Swagger White Label is available in [**WAHA Plus**]({{< relref "plus-version#plus" >}}) ![](/images/versions/plus.png) version only.
Use the following environment variables to customize the Swagger documentation:
- `WHATSAPP_SWAGGER_TITLE` - the title of the Swagger documentation and some other places.
- `WHATSAPP_SWAGGER_DESCRIPTION` - Markdown formatted description of your API.
- `WHATSAPP_SWAGGER_EXTERNAL_DOC_URL` - URL to the external documentation.
**Example** (consider using [docker-compose](https://github.com/devlikeapro/whatsapp-http-api/blob/core/docker-compose.yaml#L15-L38) or other methods to store these settings):
```bash
docker run -it -p 3000:3000 -e WHATSAPP_SWAGGER_TITLE="AwesomeCRM" -e 'WHATSAPP_SWAGGER_DESCRIPTION=<p>FantasticFindz - Discover unique treasures from around the world at unbelievable prices!<br/> <a href='https://google.com'>Read more about us!</a></p>' -e "WHATSAPP_SWAGGER_EXTERNAL_DOC_URL=https://google.com" devlikeapro/whatsapp-http-api-plus
```
Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

@@ -0,0 +1,57 @@
---
title: "📊 Dashboard"
description: "Dashboard"
lead: ""
date: 2020-10-06T08:48:45+00:00
lastmod: 2020-10-06T08:48:45+00:00
draft: false
images: [ ]
weight: 110
---
## Overview
**Dashboard** is a UI to manage your WhatsApp sessions!
<video autoplay loop muted playsinline controls='noremoteplayback' width="100%" poster='/images/waha-dashboard.png'>
<source src="/videos/waha-dashboard-overview.webm" type="video/webm" />
Download the <a href="/videos/waha-dashboard-overview.webm">Dashboard Overview video</a> .
</video>
👉 **Dashboard** is available in [**WAHA Plus**]({{< relref "plus-version#plus" >}}) ![](/images/versions/plus.png) version only.
You can access **Dashboard** by running the project and opening
<a href="http://localhost:3000/dashboard" target="_blank">http://localhost:3000/dashboard</a>
(or similar, but with <a href="/dashboard" target="_blank">/dashboard</a> at the end).
ℹ️ **Default username and password**: `waha/waha`
```bash
docker run -it -p 3000:3000/tcp devlikeapro/whatsapp-http-api-plus
```
If you're using [API Key]({{< relref "security" >}}), remember to set up the key in the dashboard.
![Dashboard with API Key](waha-dashboard-key.png)
## Configuration
When running WAHA you can set the following environment variables to configure the dashboard:
- `WAHA_DASHBOARD_ENABLED=true` - enable or disable the dashboard, by default `true`. Set to `false` to disable the
dashboard.
- `WAHA_DASHBOARD_USERNAME=waha` - username used to log in, by default `waha`.
- `WAHA_DASHBOARD_PASSWORD=waha` - password used to log in, by default `waha`.
```bash
docker run -it -p 3000:3000/tcp -e WAHA_DASHBOARD_USERNAME=waha -e WAHA_DASHBOARD_PASSWORD=waha devlikeapro/whatsapp-http-api-plus
```
## Multiple servers
If you wish to connect, control and manage multiple servers in a single "dashboard", consider using
[WAHA Hub]({{< relref "/docs/waha-hub/introduction" >}}) - central management server to help you build reliable infrastructure!
## Bug reports and feature requests
If you're experiencing any issues or have a feature request, please create an issue in the
[WAHA GitHub](https://github.com/devlikeapro/whatsapp-http-api/issues)
Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

@@ -0,0 +1,551 @@
---
title : "🔄 Webhooks"
description: "Webhooks"
lead: ""
date: 2020-10-06T08:48:45+00:00
lastmod: 2020-10-06T08:48:45+00:00
draft: false
images: []
weight: 121
---
The project uses [Webhooks](https://en.wikipedia.org/wiki/Webhook) to send the messages and events from WhatsApp to your
application.
Webhooks are a way for two different applications to communicate with each other in real-time.
When a certain event happens in one application, it sends a message to another application through a webhook URL.
The receiving application can then take action based on the information received.
## Setup webhooks
### Session webhooks
You can define webhooks configuration per session when you start it with `POST /api/sessions/start` request data.
Here's a simple example:
```json
{
"name": "default",
"config": {
"webhooks": [
{
"url": "https://httpbin.org/post",
"events": [
"message"
]
}
]
}
}
```
Here's available configuration options for webhooks
```json
{
"name": "default",
"config": {
"webhooks": [
{
"url": "https://httpbin.org/post",
"events": [
"message"
],
"hmac": {
"key": "your-secret-key"
},
"retries": {
"delaySeconds": 2,
"attempts": 15
},
"customHeaders": [
{
"name": "X-My-Custom-Header",
"value": "Value"
}
]
}
]
}
}
```
### Global webhooks
There's a way how you can configure webhooks for ALL sessions - by settings these environment variables:
- `WHATSAPP_HOOK_URL=https://httpbin.org/post` - to set up a URL for the webhook
- `WHATSAPP_HOOK_EVENTS=message,message.any,state.change` - specify events. Do not specify all of
them, it's too heavy payload, choose the right for you.
- `WHATSAPP_HOOK_EVENTS=*` - subscribe to all events. It's not recommended for production, but it's fine for
development.
That webhook configuration **does not appear** in `session.config` field in `GET /api/sessions/` request.
## Webhook payload
On the URL that you set you'll receive **HTTP POST** request with a JSON string with following format:
```json
{
"event": "message",
"session": "default",
"engine": "WEBJS",
"environment": {
"tier": "PLUS",
"version": "2023.10.12"
},
"me": {
"id": "71111111111@c.us",
"pushName": "~"
},
"payload": {
}
}
```
Where `event` value helps you identify the incoming event with `payload` for that events.
Below the list of all events that WhatsApp HTTP API sends to your.
{{< alert icon="👉" text="If you want to look at a webhook body - use the url https://httpbin.org/post" />}}
Run the bellow command and see look at the logs - it prints body request for all events that happen in your WhatsApp!
```bash
docker run -it -e "WHATSAPP_HOOK_EVENTS=*" -e WHATSAPP_HOOK_URL=https://httpbin.org/post -p 3000:3000 devlikeapro/whatsapp-http-api
```
## Webhooks
See the list of engines [**that support the features ->**]({{< relref "/docs/how-to/engines#features" >}}).
### session.status
The `session.status` event is triggered when the session status changes.
- `STOPPED` - session is stopped
- `STARTING` - session is starting
- `SCAN_QR_CODE` - session is required to scan QR code or login via phone number
- When you receive the `session.status` event with `SCAN_QR_CODE` status, you can [**fetch updated QR ->**]({{< relref "/docs/how-to/sessions#get-qr" >}})
- The `SCAN_QR_CODE` is issued every time when QR updated (WhatsApp requirements)
- `WORKING` - session is working and ready to use
- `FAILED` - session is failed due to some error. It's likely that authorization is required again or device has been disconnected from that account.
Try to restart the session and if it doesn't help - logout and start the session again.
```json
{
"event": "session.status",
"session": "default",
"me": {
"id": "7911111@c.us",
"pushName": "~"
},
"payload": {
"status": "WORKING"
},
"engine": "WEBJS",
"environment": {
"version": "2023.10.12",
"engine": "WEBJS",
"tier": "PLUS"
}
}
```
### message
Incoming message (text/audio/files)
```json
{
"event": "message",
"session": "default",
"engine": "WEBJS",
"payload": {
"id": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"timestamp": 1667561485,
"from": "11111111111@c.us",
"fromMe": true,
"to": "11111111111@c.us",
"body": "Hi there!",
"hasMedia": false,
"ack": 1,
"vCards": [],
"_data": {
"id": {
"fromMe": true,
"remote": "11111111111@c.us",
"id": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"_serialized": "true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
},
"body": "Hi there!",
"type": "chat",
"t": 1667561485,
"notifyName": "MyName",
"from": "11111111111@c.us",
"to": "11111111111@c.us",
"self": "in",
"ack": 1,
"isNewMsg": true,
"star": false,
"kicNotified": false,
"recvFresh": true,
"isFromTemplate": false,
"pollInvalidated": false,
"latestEditMsgKey": null,
"latestEditSenderTimestampMs": null,
"broadcast": false,
"mentionedJidList": [],
"isVcardOverMmsDocument": false,
"isForwarded": false,
"hasReaction": false,
"ephemeralOutOfSync": false,
"productHeaderImageRejected": false,
"lastPlaybackProgress": 0,
"isDynamicReplyButtonsMsg": false,
"isMdHistoryMsg": false,
"stickerSentTs": 0,
"isAvatar": false,
"requiresDirectConnection": false,
"pttForwardedFeaturesEnabled": true,
"isEphemeral": false,
"isStatusV3": false,
"links": []
}
}
}
```
### message.any
Fired on all message creations, including your own. The payload is the same as for [message](#message) event.
```json
{
"event": "message.any",
"session": "default",
"engine": "WEBJS",
"payload": {
...
}
}
```
### message.reaction
Receive events when a message is reacted to by a user (or **yourself** reacting to a message).
- `payload.reaction.text` - emoji that was used to react to the message. It'll be an empty string if the reaction was removed.
- `payload.reaction.messageId` - id of the message that was reacted to.
```json
{
"event": "message.reaction",
"session": "default",
"me": {
"id": "79222222222@c.us",
"pushName": "WAHA"
},
"payload": {
"id": "false_79111111@c.us_11111111111111111111111111111111",
"from": "79111111@c.us",
"fromMe": false,
"participant": "79111111@c.us",
"to": "79111111@c.us",
"timestamp": 1710481111.853,
"reaction": {
"text": "🙏",
"messageId": "true_79111111@c.us_11111111111111111111111111111111"
}
},
"engine": "WEBJS",
"environment": {
"version": "2024.3.3",
"engine": "WEBJS",
"tier": "PLUS",
"browser": "/usr/bin/google-chrome-stable"
}
}
```
{{< alert icon="👉" text="NOWEB engine note - reactions were sent in 'message' and 'message.any' events, not it's available only in 'message.reaction'!" />}}
### message.ack
Receive events when server or recipient gets the message, read or played it.
`ackName` field contains message status (`ack` has the same meaning, but show the value in int, but we keep it for backward compatability, they much to each other)
Possible message ack statuses:
- `ackName: ERROR, ack: -1`
- `ackName: PENDING, ack: 0`
- `ackName: SERVER, ack: 1`
- `ackName: DEVICE, ack: 2`
- `ackName: READ, ack: 3`
- `ackName: PLAYED, ack: 4`
The payload may have more fields, it depends on the engine you use, but here's a minimum amount that all engines send:
```json
{
"event": "message.ack",
"session": "default",
"engine": "WEBJS",
"payload": {
"id":"true_11111111111@c.us_4CC5EDD64BC22EBA6D639F2AF571346C",
"from":"11111111111@c.us",
"participant": null,
"fromMe":true,
"ack":3,
"ackName":"READ"
}
}
```
### message.revoked
The `message.revoked` event is triggered when a user, whether it be you or any other participant,
revokes a previously sent message.
```json
{
"event": "message.revoked",
"session": "default",
"payload": {
"before": {
"id": "some-id-here",
"timestamp": "some-timestamp-here",
"body": "Hi there!"
},
"after": {
"id": "some-id-here",
"timestamp": "some-timestamp-here",
"body": ""
}
}
}
```
**Important notes**:
1. The above messages' ids don't match any of the ids you'll receive in the `message` event, it's a different id.
2. In order to find the message that was revoked, you'll need to search for the message with
the same timestamp and chat id as the one in the `after` object.
3. `before` field can be null in some cases.
### state.change
It's an internal engine's state, not **session** `status`.
```json
{
"event": "state.change",
"session": "default",
"engine": "WEBJS",
"payload": {
...
}
}
```
### group.join
```json
{
"event": "group.join",
"session": "default",
"engine": "WEBJS",
"payload": {
...
}
}
```
### group.leave
```json
{
"event": "group.left",
"session": "default",
"engine": "WEBJS",
"payload": {
...
}
}
```
### presence.update
- `payload.id` indicates the chat - either direct chat with a contact or a group chat.
- `payload.id.[].participant` - certain participant presence status. For a direct chat there's only one participant.
```json
{
"event": "presence.update",
"session": "default",
"engine": "NOWEB",
"payload": {
"id": "111111111111111111@g.us",
"presences": [
{
"participant": "11111111111@c.us",
"lastKnownPresence": "typing",
"lastSeen": null
}
]
}
}
```
### poll.vote
We have a dedicated page [how to send polls and receive votes]({{< relref "/docs/how-to/polls" >}})!
```json
{
"event": "poll.vote",
"session": "default",
"payload": {
"vote": {
"id": "false_1111111111@c.us_83ACBE602A05C79B234B54415E95EE8A",
"to": "me",
"from": "1111111@c.us",
"fromMe": false,
"selectedOptions": ["Awesome!"],
"timestamp": 1692861427
},
"poll": {
"id": "true_1111111111@c.us_BAE5F2EF5C69001E",
"to": "1111111111@c.us",
"from": "me",
"fromMe": true
}
},
"engine": "NOWEB"
}
```
### poll.vote.failed
We have a dedicated page [how to send polls and receive votes]({{< relref "/docs/how-to/polls" >}})!
```json
{
"event": "poll.vote.failed",
"session": "default",
"payload": {
"vote": {
"id": "false_11111111111@c.us_2E8C4CDA89EDE3BC0BC7F605364B8451",
"to": "me",
"from": "111111111@c.us",
"fromMe": false,
"selectedOptions": [],
"timestamp": 1692956972
},
"poll": {
"id": "true_1111111111@c.us_BAE595F4E0A2042C",
"to": "111111111@c.us",
"from": "me",
"fromMe": true
}
},
"engine": "NOWEB"
}
```
## Webhooks Advanced ![](/images/versions/plus.png)
### HMAC authentication
You can authenticate webhook sender by using [HMAC Authentication](https://www.okta.com/identity-101/hmac/).
1. Define you secret key in `config.hmac.key` field when you start session with `POST /api/sessions/start`:
```json
{
"name": "default",
"config": {
"webhooks": [
{
"url": "https://httpbin.org/post",
"events": [
"message"
],
"hmac": {
"key": "your-secret-key"
}
}
]
}
}
```
2. After that you'll receive all webhooks payload with two additional headers:
- `X-Webhook-Hmac` - message authentication code for the raw **body** in HTTP POST request that send to your endpoint.
- `X-Webhook-Hmac-Algorithm` - `sha512` - algorithm that have been used to create `X-Webhook-Hmac` value.
3. Implement the authentication algorithm by hashing body and using secret key and then verifying it with `X-Webhook-Hmac`
value. Please [check your implementation here ->](https://www.devglan.com/online-tools/hmac-sha256-online)
Here's example for
```
# Full body
{"event":"message","session":"default","engine":"WEBJS"}
# Secret key
my-secret-key
# X-Webhook-Hmac-Algorithm
sha512
# X-Webhook-Hmac
208f8a55dde9e05519e898b10b89bf0d0b3b0fdf11fdbf09b6b90476301b98d8097c462b2b17a6ce93b6b47a136cf2e78a33a63f6752c2c1631777076153fa89
```
### Retries
**WAHA** retries to reach your webhook URL **15 times** with **2 seconds delay** between attempts by default in
[Plus Version →]({{< relref "plus-version" >}})
You can configure those parameters by settings `config.retries` structure when `POST /api/sessions/start`:
```json
{
"name": "default",
"config": {
"webhooks": [
{
"url": "https://httpbin.org/post",
"events": [
"message"
],
"retries": {
"delaySeconds": 2,
"attempts": 15
}
}
]
}
}
```
### Custom Headers
You can send any customer headers by defining `config.webhooks.customHeaders` fields this way:
```json
{
"name": "default",
"config": {
"webhooks": [
{
"url": "https://httpbin.org/post",
"events": [
"message"
],
"customHeaders": [
{
"name": "X-My-Custom-Header",
"value": "Value"
}
]
}
]
}
}
```
## Examples
Here's few examples of how to handle webhook in different languages:
1. [Python guide]({{< relref "/docs/examples/python" >}})
**Do you use another language?**
Please create a short guide how to handle webhook and send message after you finish your setup!
You can create a pull request with your favorite language in the
[GitHub, in examples folder ->](https://github.com/devlikeapro/whatsapp-http-api/tree/core/examples).
@@ -0,0 +1,365 @@
---
title: "🔄 Changelog"
description: "WAHA's changelog"
lead: "You can find here the list of changes made to WAHA."
date: 2020-10-06T08:49:31+00:00
lastmod: 2020-10-06T08:49:31+00:00
draft: false
images: [ ]
menu:
docs:
parent: "help"
weight: 199
toc: true
---
If you wish to get and read Release Notes - read them on one of our platforms, **these posts are FREE**.
- [**Boosty ->**](https://boosty.to/wa-http-api)
- [**Patreon ->**](https://patreon.com/wa_http_api)
**Subscribe for FREE to get new updates** there!
----
## 2024.5
### 🎉 New
----
[Swagger White Label]({{< relref "/docs/how-to/swagger#white-label" >}}) - show your own brand in the Swagger documentation!
- Read more about [Swagger White Label]({{< relref "/docs/how-to/swagger#white-label" >}})
- Issue: [#305](https://github.com/devlikeapro/whatsapp-http-api/issues/305)
- Build: `2024.5.4`
- Engine: **ALL**
----
### 🐛 Fixes
----
Fix send video issue `POST /api/sendVideo` in **WEBJS**.
- Issue: [#321](https://github.com/devlikeapro/whatsapp-http-api/issues/321)
- Issue: [#328](https://github.com/devlikeapro/whatsapp-http-api/issues/328)
- Build: `2024.5.6`
- Engine: **WEBJS**
----
Use local cache for **WEBJS** engine (versions file).
- Issue: [#316](https://github.com/devlikeapro/whatsapp-http-api/issues/316)
- Build: `2024.5.4`
- Engine: **WEBJS**
----
Don't allow to start two sessions with the same name.
Before API allowed to start two sessions with the same name, which could lead to potential problems (no way to stop the first, abandoned session).
- Issue: [#315](https://github.com/devlikeapro/whatsapp-http-api/issues/315)
- Read more about [start a session](https://waha.devlike.pro/docs/how-to/sessions/#start)
- Build: `2024.5.3`
- Engine: **ALL**
----
## 2024.4
### 🎉 New
----
Add **WAHA Dashboard** - UI to manage your WhatsApp sessions!
- Read more about [Dashboard]({{< relref "/docs/how-to/waha-dashboard" >}})
- Open [screenshot](/images/waha-dashboard.png)
----
Add `GET /api/sessions/{session}` endpoint to get information about a specific session.
- Read more about [Get session information]({{< relref "/docs/how-to/sessions#get-session" >}})
- Issue: [#300](https://github.com/devlikeapro/whatsapp-http-api/issues/300)
----
Implement `GET /api/contacts/profile-picture` for **NOWEB** engine.
- Read more about [Get contact profile picture](https://waha.devlike.pro/docs/how-to/contacts/#get-contact-profile-picture)
- Issue: [#298](https://github.com/devlikeapro/whatsapp-http-api/issues/298)
----
## 2024.3
### 🎉 New
----
Add `message.reaction` webhook in **WEBJS** and **NOWEB** engines
- Read more about [message.reaction]({{< relref "/docs/how-to/webhooks#messagereaction" >}}) event
- Issue: [#275](https://github.com/devlikeapro/whatsapp-http-api/issues/275)
👉 **NOWEB** engine note - reactions were sent in `'message'` and `'message.any'` events, not it's available **only** in `'message.reaction'`!
----
Add star and unstar message endpoint `PUT /api/star`
- Read [Star and unstar message]({{< relref "/docs/how-to/send-messages#star-and-unstar-message" >}}) documentation
- Issue: [#273](https://github.com/devlikeapro/whatsapp-http-api/issues/240)
----
Add `PUT /api/{session}/chats/{chatId}/messages/{messageId}` endpoint to **edit** the message.
- Read more about [Edit message]({{< relref "/docs/how-to/send-messages#edit-message" >}})
- Issue: [#241](https://github.com/devlikeapro/whatsapp-http-api/issues/241)
----
Add `DELETE /api/{session}/chats/{chatId}/messages/{messageId}` endpoint to **delete** the message.
- Read more about [Delete message]({{< relref "/docs/how-to/send-messages#delete-message" >}})
- Issue: [#209](https://github.com/devlikeapro/whatsapp-http-api/issues/209)
----
Add `POST /api/sendContactVcard` support for **NOWEB** engine.
- Read more about [Send Contact vCard]({{< relref "/docs/how-to/send-messages#send-contact-vcard" >}})
- Issue: [#276](https://github.com/devlikeapro/whatsapp-http-api/issues/256)
----
Handles `caption` and `filename` right in `POST /api/sendFile`
- Issue: [#94](https://github.com/devlikeapro/whatsapp-http-api/issues/94)
- Issue: [#133](https://github.com/devlikeapro/whatsapp-http-api/issues/133)
----
Add security settings for who can send messages `PUT /api/{session}/groups/{groupId}/settings/security/messages-admin-only`
- Read [Security - who can send messages]({{< relref "/docs/how-to/groups##security---who-can-send-messages" >}})
- Issue: [#274](https://github.com/devlikeapro/whatsapp-http-api/issues/274)
----
Add `config.debug` field to `POST /api/session/start` to enable debug and verbose logs for the session.
----
### 👉 Breaking changes
- **NOWEB** - reactions were sent in `'message'` and `'message.any'` events, not it's available **only** in `'message.reaction'`!
- Add **required body** in `PUT /api/{session}/groups/{groupId}/settings/security/info-admin-only` endpoint.
```json
{
"adminsOnly": false
}
```
- `POST /api/sendContactVcard` doesn't work in **VENOM** anymore (use **NOWEB** engine).
## 2024.2
- Add support for [MongoDB as storage for Session data]({{< relref "/docs/how-to/storages" >}})
- Support persistent file storage for media files - [now you can save media files between container restarts]({{< relref "/docs/how-to/storages#media" >}})
- If you set `WHATSAPP_FILES_LIFETIME=0` environment variable - media files will be never deleted.
- Add `GET /api/health` endpoint to [check the health of the service](https://waha.devlike.pro/docs/how-to/other/)
## 2024.1
- Implement [Patron Portal](https://portal.devlike.pro/) where you can get your personal API key and manage your perks.
- Read more on [Patreon ->](https://www.patreon.com/posts/waha-patron-97637416)
- Read more on [Boosty ->](https://boosty.to/wa-http-api/posts/8319079f-dac1-4179-b954-fcc559097c76)
## 2024.2
- Listen for browser disconnected and page close events in **WEBJS** engine [#262](https://github.com/devlikeapro/whatsapp-http-api/issues/262)
## 2023.12
December 2023
- Add `chatId` field to `GET /api/contacts/check-exists` to help get the right `chatId` for Brazilian numbers.
Read more about
[error sending text to half of Brazilian numbers (every number registered before 2012) ->](https://github.com/devlikeapro/whatsapp-http-api/issues/238)
## 2023.11
November 2023
- Add different formats for QR code:
1. **binary image** - `GET /api/{session}/auth/qr`
2. **base64 image** - `GET /api/{session}/auth/qr` and set `Accept: application/json` header
3. **raw** - `GET /api/{session}/auth/qr?format=raw`
- Add different formats for the screenshot:
1. **binary image** - `GET /api/{session}/screenshot`
2. **base64 image** - `GET /api/{session}/screenshot` and set `Accept: application/json` header
- Add `WHATSAPP_SWAGGER_ENABLED=false` so you can hide Swagger documentation (available only in Plus version). [#185](https://github.com/devlikeapro/whatsapp-http-api/issues/185)
- Add dedicated `media` field in webhook payload - now you can know which media is attached to the message.
```json
{
"event": "message",
"session": "default",
"payload": {
"hasMedia": true,
"media": {
"url": "http://localhost:3000/api/files/true_11111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.pdf",
"mimetype": "application/pdf",
"filename": "file.pdf"
}
}
}
```
- Add `WHATSAPP_DOWNLOAD_MEDIA` environment variable to control media download. Available only in Plus version.
- `WHATSAPP_DOWNLOAD_MEDIA=True` - download media
- `WHATSAPP_DOWNLOAD_MEDIA=False` - do not download media at all.
- Add `filename` field for document (file attachments) - the original filename of the document.
- Add `/api/sendVideo` endpoint to **NOWEB** and **WEBJS** engines. Available only in Plus version.
- Add security settings for edit group info `GET /api/{session}/groups/{groupId}/settings/security/info-admin-only` - updates the group settings to only allow admins to edit group info (title, description, photo).
## 2023.10
October 2023
- Add `session.status` event for all engines! Now you can get the latest session's status immediately after it changes.
- Add `message.revoked` event in **WEBJS** engine
- Add `me` field in webhook payload - now you can know which number is associated with the session
- Add `enviroment` field in webhook payload - now you can know which environment is used for the session
## 2023.9
September 2023
- Add `GET /api/sessions/{session/me` endpoint so you [can get the phone number associated with the session](https://waha.devlike.pro/docs/how-to/sessions/#get-me)
- Add [polls support in NOWEB engine](https://waha.devlike.pro/docs/how-to/polls)
- Add dedicated [Get QR](https://waha.devlike.pro/docs/how-to/sessions/#get-qr) endpoint!
- Support [pairing method (NOWEB)](https://waha.devlike.pro/docs/how-to/sessions/#get-pairing-code) - you can connect with a code instead of QR.
- Add string field `ackName: DEVICE|READ|...` in [message.ack payload](https://waha.devlike.pro/docs/how-to/webhooks/#messageack)
- Support `message.ack` event webhook in **NOWEB** engine
## 2023.8
August 2023
- Added [stories (aka status) endpoints](https://waha.devlike.pro/docs/how-to/send-messages/#send-status-aka-stories) to **NOWEB** engine!
- `POST /api/{session}/status/text|image|voice|video` - choose one that suites your!
- Added [chats endpoints](https://waha.devlike.pro/docs/how-to/chats)
- Get all chats - `GET /api/{session/chats`
- Delete chat - `DELETE /api/{session/chats/{chatId}`
- Get messages from chat - `GET /api/{session/chats/{chatId}/messages?limit=1000?downloadMedia=true`
- Clear messages in the chat `DELETE /api/{session/chats/{chatId}/messages`
- Added `downloadMedia` flag to speed up `GET /api/messages` and `GET /api/{session/chats/{chatId}/messages` performance.
- Added [set presence endpoint](https://waha.devlike.pro/docs/how-to/presence)!
- With `online` presence you can show your status as online [#121](https://github.com/devlikeapro/whatsapp-http-api/issues/121)
- With `offline` presence you can get notifications for your device [#28](https://github.com/devlikeapro/whatsapp-http-api/issues/28)
- Added security settings for edit group info `PUT /api/{session}/groups/{groupId}/settings/security/info-admin-only` - updates the group settings to only allow admins to edit group info (title, description, photo).
## 2023.7
July 2023
- Now session can have their own [Webhooks](https://waha.devlike.pro/docs/how-to/webhooks) -
you can define webhook configuration when you start a session with `POST /api/session/start`!
- Add HMAC authentication for webhooks
- Configure retries
- Add you custom headers
- Added [proxy configuration](https://waha.devlike.pro/docs/how-to/config/#proxy) with supporting proxy authentication.
Thanks **puntolino** for the contribution!
You can control proxy's settings per session with `POST /api/session/start` or globally with environment variables.
- Added [presence information](https://waha.devlike.pro/docs/how-to/presence) - now you can get online status for
a contact by calling endpoints or receiving a webhook event!
- Now you can mention contact in groups by settings `mentions` field in `POST /api/sendText`
[read more about it in Send Messages ->]({{< relref "/docs/how-to/send-messages" >}})
## 2023.6
June 2023
Improvements on session management, restarting sessions and more:
- Added `WHATSAPP_RESTART_ALL_SESSIONS=True`: Set this variable to `True` to start all **STOPPED** sessions after
container restarts. By default, this variable is set to `False`.
- Please note that this will start all **STOPPED** sessions, not just the sessions that were working before the
restart. You can maintain the session list by
using `POST /api/session/stop` with the `logout: True` parameter or by calling `POST /api/session/logout` to remove
**STOPPED** sessions. You can see all sessions, including **STOPPED** sessions, in the `GET /api/sessions/all=True`
response.
- `WHATSAPP_START_SESSION` now support more than one session! Separate session names by command, and it'll start them
ALWAYS after container restart `WHATSAPP_START_SESSION=session1,session2`
- `WHATSAPP_SWAGGER_CONFIG_ADVANCED=true` enables advanced configuration options for Swagger documentation - you can customize host, port and base URL for the requests.
Disabled by default.
- Added `?all=true` parameter to `GET /api/session?all=True` endpoint - it'll show you ALL session, included **STOPPED
**, so you can know which one will be restarted if you set `WHATSAPP_RESTART_ALL_SESSIONS=True` environment variable.
- Added `POST /api/sessions/logout` that allow you to logout from session - remove saved credentials.
- Added `logout` boolean parameter to `POST /api/sessions/stop` request that allow you to stop the session AND logout at
the same time.
- Added [How to deploy page ->]({{< relref "/docs/how-to/deploy" >}}) with
[docker-compose.yaml](https://github.com/devlikeapro/whatsapp-http-api/blob/core/docker-compose.yaml) example
- Added `engine` field in webhook payload
```json
{
"event": "message",
"session": "default",
"engine": "WEBJS",
"payload": {}
}
```
## 2023.5
May 2023
- Added new [NOWEB engine]({{< relref "/docs/how-to/engines" >}}). **NOWEB** engine does not require a browser to work
with
WhatsApp Web, it does so directly using a WebSocket.
- Less CPU and RAM usage!
- Send Locations API works!
- Send Link Preview API works!
- ⚠ Read the article before using it [How to avoid blocking ->]({{< relref "/docs/overview/how-to-avoid-blocking" >}}).
## 2023.4
March 2023
- Add [Groups API]({{< relref "/docs/how-to/groups" >}})
- Use Chromium by default instead of Chrome
## 2023.1
January 2023
- Added [Contacts API]({{< relref "/docs/how-to/contacts" >}})
- Get all contacts
- Get a contact
- Get contact "about" (status)
- Get contact profile picture
- Check number exists (is registered in WhatsApp) - works even if the number is not in the contact list
- Block and unblock contact
## 2022.12
December 2023
- Added `GET /messages/` endpoint to get chat messages [#31](https://github.com/devlikeapro/whatsapp-http-api/issues/31)
- Added `WHATSAPP_SWAGGER_USERNAME` and `WHATSAPP_SWAGGER_PASSWORD` to hide and protect swagger panel.
## 2022.11
**Please test changes in test environment before update production!!**
**Engine** ![](/images/versions/core.png)
1. WAHA has changed its underlying engine from Venom to Whatsapp Web.JS. It might change the response and webhook's
payloads.
2. Optimize CPU and memory consumption.
**Requests** ![](/images/versions/core.png)
- For all `/api/session/` requests use `name` field instead of `sessionName`.
- For all "chatting" requests use `session` field instead of `sessionName`.
**Sessions** ![](/images/versions/plus.png)
Now you don't have to scan QR code each time you run WAHA, WAHA saves it for you! Available only in Plus version.
**Authentication** ![](/images/versions/plus.png)
Now you can authenticate all requests for WAHA - use `WHATSAPP_API_KEY=secret` environment variable to set "secret key".
If `WHATSAPP_API_KEY` is set - requests must have `X-Api-Key` header with `secret` value, where `secret` - any random
secret key.
**Webhooks** ![](/images/versions/core.png)
Instead of setting each webhook via environment variables - we use two environments variables:
- `WHATSAPP_HOOK_URL` - to set a URL
- `WHATSAPP_HOOK_EVENTS` - to set events that are sent to the URL
| Previous | Current |
|----------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|
| <pre>WHATSAPP_HOOK_ONMESSAGE=https://httpbin.org/post <br>WHATSAPP_HOOK_ONANYMESSAGE=https://httpbin.org/post </pre> | <pre>WHATSAPP_HOOK_URL=https://httpbin.org/post <br>WHATSAPP_HOOK_EVENTS=message,message.any</pre> |
** Webhook payload**
The data for webhooks are wrapped inside a new `WAWebhook` object with `event` and `payload` fields to help you identify
which handler you should call based on `event`.
```json
{
"event": "message.any",
"payload": {
}
}
```
@@ -1,19 +1,21 @@
---
title: "FAQ"
title: "❓ FAQ"
description: "Answers to frequently asked questions."
lead: "Answers to frequently asked questions."
date: 2020-10-06T08:49:31+00:00
lastmod: 2020-10-06T08:49:31+00:00
draft: false
images: []
images: [ ]
menu:
docs:
parent: "help"
weight: 630
weight: 130
toc: true
---
## How much CPU and Memory does WhatsApp HTTP API consume?
### WEBJS
The benchmark has been made on **Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz**.
It may differ from case to case, it depends on usage pattern - how many messages you get, how many send, etc.
@@ -22,6 +24,15 @@ It may differ from case to case, it depends on usage pattern - how many messages
| 1 | 30% | 400MB |
| 10 | 270% | 1.5GB |
The nature of WhatsApp HTTP API and its underlying engines - is to run **real** WhatsApp Web version in Chrome and
communicate with it to prevent blocking from WhatsApp. It's the reason why it's so demanding on resources.
### NOWEB
If you're looking for less resource demanded engine - [have a look at **NOWEB** engine ->]({{< relref "/docs/how-to/engines" >}})
Quotes from the users:
> The server has **2 CPU and 8GB** of memory. Today we have **85 sessions** in this instance.
> **400** sessions with **4CPU and 32RAM**. It's working fine.
@@ -0,0 +1,92 @@
---
title: "⚠️ How to Avoid Blocking"
description: "How to Avoid Blocking From Whatsapp"
date: 2020-11-12T13:26:54+01:00
lastmod: 2020-11-12T13:26:54+01:00
draft: false
images: [ ]
menu:
docs:
parent: "help"
weight: 120
toc: true
---
How to Avoid Blocking in WhatsApp when developing bots.
It's important to keep in mind that WhatsApp has strict policies in place to prevent spamming and abuse of their
platform.
If you're developing a bot for WhatsApp, it's crucial to follow these guidelines to avoid getting blocked.
## Guidelines to Follow
### 1. Only Reply to Messages
When developing a bot for WhatsApp, you **should never initiate a conversation**.
Instead, your bot **should only reply** to messages that it receives.
This will prevent your bot from being flagged as spam by WhatsApp's users and algorithms.
> You can use a short link http://wa.me/7911111111?text=Hi
> so a user can click on it and start the dialog with the bot first
### 2. Avoid Spamming and Sending Unnecessary Content
Sending too many messages or sending content that the user did not request can also lead to your bot being blocked. Make
sure to only send relevant and useful information to the user.
Additionally, do not send too many messages at once, as this can also trigger spam filters.
### 3. Other Considerations
There are other guidelines to follow when developing a bot for WhatsApp, such as avoiding the use of banned words and
not sharing sensitive or inappropriate content.
Make sure to read WhatsApp's policies thoroughly to ensure that your bot complies with all of their rules.
## How to Process Messages
When processing messages in your bot, it's important to follow certain steps to avoid being flagged as spam.
Here's a recommended process to follow:
1. **Send seen** before processing the message. This can be done by sending a `POST /api/sendSeen/` request to
the WAHA API.
2. **Start typing** before sending a message and wait for a random interval depending on the size of the message. This can
be done by sending a `POST /api/startTyping/` request.
3. **Stop typing** before sending the message. This can be done by sending a `POST /api/stopTyping/` request.
4. **Send the text message** using the `POST /api/sendText` request.
By following these steps, you can ensure that your bot processes messages in a way that's compliant with WhatsApp's
guidelines and reduces the risk of being blocked.
## How to not get Banned?
WhatsApp knows that it's uncommon for someone to send so many messages or bulk messages to people they've never talked to each other before so it is considered spam/marketing junk pretty fast. There are some tips before sending a message to WhatsApp
**Dos and Don'ts:**
1. Important: Do NOT send messages which get you a report. As long as you don't get reports from users who you sent a message, your account will be mostly fine.
2. Having real content, a survey that the person agreed with is different from a marketing message on a Saturday night.
3. Send messages written in different ways, you could make a script that places spacebars randomly on your string AND includes the person's (first) name
4. Never use fixed times, always go for sending the first message, wait a random time between 30 ~ and 60 seconds and then send the second message
5. Always try to group contacts by their area code, WhatsApp expects a regular person to talk mostly with contacts that are within the same area of your phone number.
6. Have a profile picture, this is not related to WhatsApp Bots Catcher® but sending a new message for someone not having a picture/name/status will elevate your chances of being manually tagged as spam.
7. Send "seen" confirmation to messages or disable it on WhatsApp
8. Avoid sending links that were previously marked as spam on WhatsApp or non-HTTPS. A URL shortener is a good idea
9. IMPORTANT: It's terrible if you send messages 24/7 without giving it some time to wait. Random delays between messages are not enough, send a reasonable amount of messages keeping in mind your conversion rate, For example: for one hour send a maximum of 4 messages per contact that have replied to your message, and stop sending messages for one hour, then start again. Again, don't send messages without stopping for a while between every "package"
10. Send only one short message when starting a conversation, one should not send long texts or multiple messages without the user consenting
**Have in mind:**
1. For every one you send a message that doesn't have your number on their contact list asked if it's spam, being tagged as spam a few times (5 - 10) will get you banned
2. WhatsApp records every movement you do, you can even check the logs when sending simple support email, it contains all kinds of information, this said: act as human as possible
3. Try to engage in conversations, as long as you send a message and the person doesn't automatically block you it'll be quite okay. People constantly talking to you and adding you to their contact list will make your number stronger against a ban
4. Think about that like a points system, you start with zero points (negative if your device was previously blacklisted), if you reach below zero you are out, if you engage in conversations you get a point, if you are tagged as spam you lose some points, if you are blocked you may lose more points
5. Finally, If your content is spam, it doesn't matter if you are using a broadcast list, group, or direct contact, you will still be banned
As API, we say all that's left to do right now is to agree with WhatsApp's policy, not send spam messages, and always wait for the other person to contact you first.
You could make it by sending an SMS to the person with a link to start a chat on WhatsApp with you by link [https://wa.me/12132132131?text=Hi](https://wa.me/12132132131?text=Hi).
@@ -1,5 +1,5 @@
---
title: "Introduction"
title: "📖 Introduction"
description: "WAHA - WhatsApp HTTP API that you can install on your own server and run in less than 5 minutes!"
lead: ""
date: 2020-10-06T08:48:57+00:00
@@ -12,68 +12,80 @@ parent: "overview"
weight: 100
toc: true
---
**WAHA** - **W**hats**A**pp **H**TTP **A**PI that you can install on your own server and run in less than 5 minutes!
**WAHA** - <u>W</u>hats<u>A</u>pp <u>H</u>TTP <u>A</u>PI that you can install on your own server and run in less than 5 minutes!
<div class="d-flex justify-content-center my-4">
<img src="/images/logo.png"/>
<img src="/images/logo.svg" style='border-radius: 50%' width='150'/>
</div>
## Get started
{{< alert icon="👉" text="Run WhatsApp HTTP API in less than 5 minutes!" />}}
Go straight to the [Quick Start →]({{< relref "quick-start" >}})
We will guide you through the necessary steps to successfully send your first text message using WhatsApp HTTP API in
[**Quick Start →**]({{< relref "quick-start" >}}).
## Disclaimer
This project is not affiliated, associated, authorized, endorsed by, or in any way officially connected with WhatsApp or any of its subsidiaries or its affiliates. The official WhatsApp website can be found at [whatsapp.com](https://whatsapp.com).
"WhatsApp" as well as related names, marks, emblems and images are registered trademarks of their respective owners. Also it is not guaranteed you will not be blocked by using this method. WhatsApp does not allow bots or unofficial clients on their platform, so this shouldn't be considered totally safe.
For any businesses looking to integrate with WhatsApp for critical applications, we highly recommend using officially supported methods, such as Twilio's solution or other alternatives. You might also consider [the official API ->](https://developers.facebook.com/docs/whatsapp/).
## Features
WAHA is distributed in two versions:
- Core ![](/images/versions/core.png) - the basic version that meet almost 80% people's needs. 100% free and [open source](https://github.com/devlikeapro/whatsapp-http-api).
- Plus ![](/images/versions/plus.png) - the version with advanced messages, security, and reliability features. One-time donation, no license expiration, quick updates, read more about [Plus Version →]({{< relref "plus-version" >}})
Here's the available features:
### Messages
- Send messages ![](/images/versions/core.png) ![](/images/versions/plus.png)
- Receive messages ![](/images/versions/core.png) ![](/images/versions/plus.png)
- Message replies ![](/images/versions/core.png) ![](/images/versions/plus.png)
- Send location ![](/images/versions/core.png) ![](/images/versions/plus.png)
- Send buttons ![](/images/versions/core.png) ![](/images/versions/plus.png)
- Receive location ![](/images/versions/core.png) ![](/images/versions/plus.png)
- React to messages ![](/images/versions/core.png) ![](/images/versions/plus.png)
- Send messages
- Receive messages
- Message replies
- Send location
- Receive location
- React to messages
- Send media (images/documents/files) ![](/images/versions/plus.png)
- Send voice messages ![](/images/versions/plus.png)
- Receive media (images/audio/video/documents) ![](/images/versions/plus.png)
- Receive messages - webhook retries ![](/images/versions/plus.png)
### Sessions
- Multi Device ![](/images/versions/core.png) ![](/images/versions/plus.png)
- Get the screenshot ![](/images/versions/core.png) ![](/images/versions/plus.png)
- Session saving (don't have to scan QR on every restart) ![](/images/versions/plus.png)
- Session saving on remote storage (database, redis) ![](/images/versions/plus-soon.png)
- Single WhatsApp account running inside one container ![](/images/versions/core.png)
- Multiple WhatsApp account running inside one container ![](/images/versions/plus.png)
### Security
- API authentication ![](/images/versions/plus.png)
- Swagger panel authentication ![](/images/versions/plus-soon.png)
### Updates
- Bug fixes and updates come as soon as they are implemented. ![](/images/versions/plus.png)
- One month delay in bug fixes and updates. ![](/images/versions/core.png)
### Groups ![](/images/versions/soon.png)
- Join groups by invite
### Groups
- Create a group
- Get invite for group
- Modify group info (subject, description)
- Modify group settings (send messages, edit info)
- Add group participants
- Kick group participants
- Promote/demote group participants
### Contacts ![](/images/versions/soon.png)
- Mention users
### Contacts
- Mute/unmute chats
- Block/unblock contacts
- Get contact info
- Get profile pictures
- Set user status message
- Get presence (online\offline\typing) status
### Sessions
- Multi Device
- Get the screenshot
- Single WhatsApp account running inside one container
- Multiple WhatsApp account running inside one container ![](/images/versions/plus.png)
- Session saving (don't have to scan QR on every restart) ![](/images/versions/plus.png)
- Session saving on remote storage (mongodb) ![](/images/versions/plus.png)
### Security
- API authentication ![](/images/versions/plus.png)
- Swagger panel authentication ![](/images/versions/plus.png)
### Updates
- Bug fixes and updates come as soon as they are implemented.
## Engines
Not all Engines support all Features, see [**the feature supported by engines ->**]({{< relref "/docs/how-to/engines#features" >}}).
## Versions
WAHA is distributed in two versions:
- Core ![](/images/versions/core.png) - the basic version that meet almost 80% people's needs. **100% free and [open source ->](https://github.com/devlikeapro/whatsapp-http-api)**.
- Plus ![](/images/versions/plus.png) - the version with advanced messages, security, and reliability features. Donations, no license expiration, quick updates, read more about [**Plus Version →**]({{< relref "plus-version" >}})
@@ -1,5 +1,5 @@
---
title: "Quick Start"
title: "⚡ Quick Start"
description: "One page summary of how to start WhatsApp HTTP API."
lead: "One page summary of how to start WhatsApp HTTP API."
date: 2020-11-16T13:59:39+01:00
@@ -9,11 +9,14 @@ images: []
menu:
docs:
parent: "overview"
weight: 110
weight: 101
toc: true
---
On this page you're going to install WAHA, run it, authenticate the client using QR code and send the first text message to WhatsApp!
On this page you're going to install WAHA, run it, authenticate the client using QR code and send the first text message
to WhatsApp!
![](swagger.png)
## Requirements
@@ -26,12 +29,29 @@ When you are ready - come back and follows the below steps to send the first tex
Docker makes it easy to ship all-in-one solution with the runtime and dependencies. You don't have to worry about
language-specific libraries or chrome installation.
Also Docker makes installation and update processes so simple, just one command!
Also, Docker makes installation and update processes so simple, just one command!
{{< /details >}}
## Send your first message
Let's go over steps that allow you to send your first text message via WhatsApp HTTP API!
We will guide you through the necessary steps to successfully send your first text message using WhatsApp HTTP API.
<div class='article-card'>
<b class='h4'>Are you a visual learner?</b>
We've got you covered! Watch the video below to see how to send your first message using <b>WAHA</b>.
<div class="d-flex justify-content-center my-4">
<iframe
width="560" height="315"
src="https://www.youtube.com/embed/RFerMyAUPRg"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowfullscreen
></iframe>
</div>
</div>
### 1. Download image
@@ -46,19 +66,41 @@ docker pull devlikeapro/whatsapp-http-api
![](/images/versions/plus.png) For Plus version, we use login to get the image before:
```bash
docker login -u devlikeapro -p {PASSWORD}
docker login -u devlikeapro -p {KEY}
docker pull devlikeapro/whatsapp-http-api-plus
docker logout
```
Read more about how to get `PASSWORD` for [Plus Version →]({{< relref "plus-version" >}})
#### 1.1 Download image on ARM
If you're using ARM (like Apple Silicon, Apple M1, etc.) - use following commands to download the image
![](/images/versions/core.png) For Core version the command is
```bash
# Download the image
docker pull devlikeapro/whatsapp-http-api:arm
# Rename it, so you can use devlikeapro/whatsapp-http-api image in other place
docker tag devlikeapro/whatsapp-http-api:arm devlikeapro/whatsapp-http-api
```
![](/images/versions/plus.png) For Plus version the command is:
```bash
docker login -u devlikeapro -p {KEY}
docker pull devlikeapro/whatsapp-http-api-plus:arm
docker logout
# Rename it, so you can use devlikeapro/whatsapp-http-api image in other place
docker tag devlikeapro/whatsapp-http-api-plus:arm devlikeapro/whatsapp-http-api-plus
```
### 2. Run WhatsApp HTTP API
Run WhatsApp HTTP API:
```bash
docker run -it --rm -p 127.0.0.1:3000:3000/tcp --name whatsapp-http-api devlikeapro/whatsapp-http-api
docker run -it --rm -p 3000:3000/tcp --name whatsapp-http-api devlikeapro/whatsapp-http-api
# It prints logs and the last line must be
# WhatsApp HTTP API is running on: http://[::1]:3000
@@ -68,6 +110,9 @@ Open the link in your browser [http://localhost:3000/](http://localhost:3000/) a
(Swagger).
{{< alert icon="👉" text="We don't recommend expose the API in the internet without authentication!" />}}
[Read more about Security ->]({{< relref "/docs/how-to/security" >}})
<br/>
![](swagger.png)
@@ -83,8 +128,8 @@ How to log in - the instruction on WhatsApp site
When your ready - find `POST /api/session/start`, click on **Try it out**, then **Execute** a bit below.
The example payload:
```json
{
"name": "default"
@@ -93,7 +138,8 @@ The example payload:
![](session-start.png)
By using the request with `name` values you can start multiple session (WhatsApp accounts) inside the single docker container in Plus
By using the request with `name` values you can start multiple session (WhatsApp accounts) inside the single docker
container in Plus
![](/images/versions/plus.png) version and only one account in Core ![](/images/versions/core.png) version.
Read more about [multiple sessions →]({{< relref "/docs/how-to/sessions" >}})
@@ -123,6 +169,7 @@ way: use a phone international phone number without `+` symbol and add `@c.us` a
For phone number `12132132131` the `chatId` is `12132132131@c.us`.
The example payload:
```json
{
"chatId": "12132132130@c.us",
@@ -142,7 +189,9 @@ curl -d "{\"chatId\": \"${PHONE}@c.us\", \"text\": \"Hello from WhatsApp HTTP AP
```
## What is next?
- Right now you've sent simple text message, but you can send more! [Send messages →]({{< relref "/docs/how-to/send-messages" >}})
- Read how to receive and response to messages [Receive messages →]({{< relref "/docs/how-to/receive-messages" >}})
- Learn about the easiest way to manage your WhatsApp sessions - [Dashboard ->]({{< relref "/docs/how-to/waha-dashboard" >}})
- Right now you've sent simple text message, but you can send more! [Send messages ->]({{< relref "/docs/how-to/send-messages" >}})
- Read how to receive and response to messages [Receive messages ->]({{< relref "/docs/how-to/receive-messages" >}})
- [Save session information, so you don't have to scan QR after container restart ->]({{< relref "/docs/how-to/sessions" >}})
- Make sure your [API is properly protected ->]({{< relref "/docs/how-to/security" >}})
@@ -0,0 +1,10 @@
---
title : "WAHA Hub"
description: "WAHA Hub"
lead: ""
date: 2020-10-06T08:48:45+00:00
lastmod: 2020-10-06T08:48:45+00:00
draft: false
images: []
weight: 300
---
@@ -0,0 +1,52 @@
---
title: "WAHA Hub"
description: "WAHA Hub"
lead: ""
date: 2020-10-06T08:48:57+00:00
lastmod: 2020-10-06T08:48:57+00:00
draft: false
images: [ ]
menu:
docs:
parent: "overview"
weight: 301
toc: true
---
---
⚠️
**WAHA Hub** in **DEVELOPMENT** yet...
Consider using [Dashboard]({{< relref "/docs/how-to/waha-dashboard" >}}) for managing your sessions.
Subscribe to [**WAHA PRO**]({{< relref "plus-version#pro" >}}) to speed up the development!
⚠️
---
## Overview
**WAHA Hub** - central management solution to help your build reliable infrastructure with multiple WAHA servers!
While [Dashboard]({{< relref "/docs/how-to/waha-dashboard" >}}) is a UI to manage your WhatsApp sessions on
**single server**, **WAHA Hub** is a central management server to control and manage **multiple servers** in a single
place.
👉 **WAHA Hub** is available in [**WAHA PRO**]({{< relref "plus-version#pro" >}}) version only.
![Dashboard](waha-dashboard.png)
<div class="text-center">
<a href="waha-dashboard.png" target="_blank">See full size image</a>
</div>
## Features
- Control and manage multiple servers in a single Hub.
- Monitor the status of your servers
- And more!
Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

+9
View File
@@ -0,0 +1,9 @@
---
title: "Pricing"
description: "WAHA - WhatsApp HTTP API that you can run in a click!"
summary: "WAHA Plus"
date: 2024-01-29T15:50:07+02:00
lastmod: 2024-01-29T15:50:07+02:00
draft: false
---
+245 -56
View File
@@ -1,88 +1,277 @@
{{ define "main" }}
<section class="section container-fluid mt-n3 pb-3">
<div class="row justify-content-center">
<div class="col-lg-12 text-center">
<h1 class="mt-0">{{ .Title }}</h1>
<section class='section container-fluid mt-n3 pb-3'>
<div class='row justify-content-center'>
<div class='col-lg-12 text-center'>
<h1 class='mt-0'>{{ .Title }}</h1>
</div>
<div class="col-lg-9 col-xl-8 text-center">
<div class="mb-4">
<img src="/images/logo.png" title="WhatsApp HTTP API" alt="logo" width="100"/>
<div class='col-lg-9 col-xl-9 text-center'>
<div class='mb-4'>
<img src='/images/logo.svg' title='WhatsApp HTTP API' alt='logo' style='border-radius: 50%; width: 10rem' />
</div>
<p class="lead">{{ .Params.lead | safeHTML }}</p>
<a class="btn btn-primary btn-lg px-4 mb-2"
href="/docs/{{ if .Site.Params.options.docsVersioning }}{{ .Site.Params.docsVersion }}/{{ end }}overview/introduction/"
role="button">Get Started</a>
<p class="meta"><a href="https://github.com/devlikeapro/whatsapp-http-api">Source code in GitHub.</a></p>
<p class='lead'>{{ .Params.lead | safeHTML }}</p>
<div class='code-block highlight'>
<pre tabindex='0' class='chroma'><code class='language-bash' data-lang='bash' style='padding: 0'>docker run -it -p 3000:3000/tcp devlikeapro/whatsapp-http-api</code></pre>
</div>
<a class='btn btn-primary btn-lg px-4 mb-2'
href='/docs/{{ if .Site.Params.options.docsVersioning }}{{ .Site.Params.docsVersion }}/{{ end }}overview/introduction/'
role='button'>Get Started</a>
<p class='meta'>
<a href='https://github.com/devlikeapro/whatsapp-http-api'>Source code in GitHub.</a>
<br />
<a href='https://hub.docker.com/r/devlikeapro/whatsapp-http-api'>
<img alt='Docker Pulls' src='https://img.shields.io/docker/pulls/devlikeapro/whatsapp-http-api'>
</a>
</p>
</div>
</div>
</section>
{{ end }}
{{ define "sidebar-prefooter" }}
<section class="section section-sm">
<div class="container">
<div class="row justify-content-center text-center">
<div class="col-lg-5">
<h2 class="h4">Language agnostic</h2>
<section class='section section-sm'>
<div class='container hr'>
<div class='row justify-content-center text-center'>
<div class='col-12'>
<h2>
WAHA Features
</h2>
</div>
<div class='col-12 col-lg-4 pros-card'>
<img src='/images/icons/message-green.png' alt='Free' style='width: 5rem'>
<h2 class='h4 color-accent'>Send and Receive<br />Messages</h2>
<p>
You can
<a href='/docs/how-to/send-messages/'>send messages to</a>
and
<a href='/docs/how-to/receive-messages/'>receive messages from</a>
WhatsApp using HTTP API (REST API).
</p>
<div class='code-block highlight' style='text-align: left'>
<pre tabindex='0' class='chroma m-0'>
<code class='language-json' data-lang='json' style='padding: 1rem!important; border-radius: 0.5rem'>POST /api/sendText
{
"session": "default",
"chatId": "12132132130@c.us",
"text": "Hi there!"
}
</code>
</pre>
</div>
</div>
<div class='col-12 col-lg-4 pros-card'>
<img src='/images/icons/file-check-green.svg' alt='Servers' style='width: 5rem'>
<h2 class='h4'>Send and Receive<br />Files</h2>
<p>
You can
<a href='/docs/how-to/send-messages/'>send files to</a>
and
<a href='/docs/how-to/receive-messages/'>receive files from</a>
WhatsApp using HTTP API (REST API).
</p>
<div class='code-block highlight' style='text-align: left'>
<pre tabindex='0' class='chroma m-0'>
<code class='language-json' data-lang='json' style='padding: 1rem!important; border-radius: 0.5rem'>POST /api/sendFile
{
"session": "default",
"chatId": "12132132130@c.us",
"file": {
"url": "https://d.com/invoice.pdf"
}
}</code>
</pre>
</div>
</div>
<div class='col-12 col-lg-4 pros-card'>
<img src='/images/icons/button-green.png' alt='API' style='width: 5rem'>
<h2 class='h4'>
WAHA can do<br />a lot more
</h2>
<p>
Check out
<a href='/docs/overview/introduction/#features'>
the documentation
</a>
to see all the features.
</p>
<div class='code-block highlight' style='text-align: left'>
<pre tabindex='0' class='chroma m-0'>
<code class='language-json' data-lang='json' style='padding: 1rem!important; border-radius: 0.5rem'>POST /api/{session}/groups
{
"name": "Group name",
"participants": [
{"id": "123123123123@c.us"}
]
}
</code>
</pre>
</div>
</div>
<div class='col-12' style='width: 80%; margin-top: 2rem'>
<a href='/docs/how-to/swagger/' target='_blank'>
<h2 class='h4 color-accent'>
Swagger documentation and OpenAPI Specification
</h2>
</a>
<p>
<a href='/docs/how-to/plus-version/#core' target='_blank'>
<b>WAHA Core</b>
</a>
and
<a href='/docs/how-to/plus-version/#plus' target='_blank'>
<b>WAHA Plus</b>
</a>
provide Swagger documentation and OpenAPI schema to easily integrate with your favorite language and HTTP API (REST API)!
<br>
</p>
<video autoplay loop muted playsinline controls='noremoteplayback' width='100%' poster='/images/swagger.png'>
<source src='/videos/swagger-overview.webm' type='video/webm' />
Download the <a href='/videos/swagger-overview.webm'>Swagger Overview video</a> .
</video>
</div>
<div class='col-12' style='width: 80%; margin-top: 2rem'>
<a href='/docs/how-to/waha-dashboard' target='_blank'>
<h2 class='h4 color-accent'>Built-in Dashboard</h2>
</a>
<p>
<a href='/docs/how-to/plus-version/#plus' target='_blank'>
<b>WAHA Plus</b>
</a>
provides Dashboard - a web interface to easily manage your WhatsApp sessions!
<br>
</p>
<video autoplay loop muted playsinline controls='noremoteplayback' width='100%'
poster='/images/waha-dashboard.png'>
<source src='/videos/waha-dashboard-overview.webm' type='video/webm' />
Download the <a href='/videos/waha-dashboard-overview.webm'>Dashboard Overview video</a> .
</video>
</div>
</div>
</div>
</section>
<section class='section section-sm'>
<div class='container hr'>
<div class='row justify-content-center text-center'>
<div class='col-12'>
<h2>
Why WAHA?
</h2>
</div>
<div class='col-12 col-lg-4 pros-card'>
<img src='/images/icons/free-green.png' alt='Free' style='width: 5rem'>
<h2 class='h4 color-accent'>It's free!</h2>
<p>
<a href='/docs/how-to/plus-version/#tiers' target='_blank'>
<b>WAHA Core</b>
</a>
version is always free, <b>no limits in messages</b> or time!
<br>
<a href='/docs/how-to/plus-version/#tiers' target='_blank'>
<b>WAHA Plus</b>
</a>
version have no licence expiration!
</p>
</div>
<div class='col-12 col-lg-4 pros-card'>
<img src='/images/icons/servers-green.png' alt='Servers' style='width: 5rem'>
<h2 class='h4'>Self-hosted solution</h2>
<p>
<a href='/docs/how-to/plus-version/#why-waha' target='_blank'>
No strings to suspicious SaaS WhatsApp HTTP API solutions.
</a>
Install it on your own server!
</p>
</div>
<div class='col-12 col-lg-4 pros-card'>
<img src='/images/icons/api-green.png' alt='API' style='width: 5rem'>
<h2 class='h4'>HTTP / REST API</h2>
<p>
Use your own favorite language - Python, JavaScript, PHP, C#, Clojure, or PowerShell.
<br/>
<small class="text-muted">
<br />
<small class='text-muted'>
PowerShell, really? Are you insane?! Choose another language, dude.
</small>
</p>
</div>
<div class="col-lg-5">
<h2 class="h4">Well documented</h2>
<p>Documentation has a lof examples and how-to guides.</p>
</div>
<div class="col-lg-5">
<h2 class="h4">No blocking</h2>
</div>
<div class='row justify-content-center text-center'>
<div class='col-12 col-lg-4 pros-card'>
<img src='/images/icons/document-green.png' alt='Document' style='width: 5rem'>
<h2 class='h4'>Well documented</h2>
<p>
Under the hood it runs a real instance of Whatsapp Web to avoid getting blocked.
<br/>
<small class="text-muted">
<a href='/docs/overview/introduction/' target='_blank'>
Documentation
</a>
has a lof examples and how-to guides.</p>
</div>
<div class='col-12 col-lg-4 pros-card'>
<img src='/images/icons/easy-green.png' alt='Easy' style='width: 5rem'>
<h2 class='h4'>Quick installation</h2>
<p>
You need to install Docker and
<a href='/docs/how-to/install/' target='_blank'>
run the API in a click!
</a>
<br />
<small class='text-muted'>
It's actually "a command", not a click.
</small>
</p>
</div>
<div class='col-12 col-lg-4 pros-card'>
<img src='/images/icons/checked-green.png' alt='Checked' style='width: 5rem'>
<h2 class='h4'>No blocking</h2>
<p>
<a href='/docs/how-to/engines/' target='_blank'>
Under the hood
</a>
it runs a real instance of Whatsapp Web to avoid getting blocked.
<br />
<small class='text-muted'>
WhatsApp does not allow bots or unofficial clients on their platform, so this shouldn't be considered
totally safe.
</small>
</p>
</div>
</div>
<div class="row justify-content-center text-center">
<div class="col-lg-5">
<h2 class="h4">Self hosted</h2>
<p>
No strings to suspicious SaaS WhatsApp HTTP API solutions. Install it on your own server!
</p>
</div>
<div class="col-lg-5">
<h2 class="h4">Easy installation</h2>
<p>
You need to install <a href="https://docs.docker.com/engine/install/">Docker</a> and can run the API in a
click!
<br/>
<small class="text-muted">
It's actually "a command", not a click.
</small>
</p>
</div>
<div class="col-lg-5">
<h2 class="h4">It's free!</h2>
<p>
<b>WAHA Core</b> version is always free!
<br>
Even <b>WAHA Plus</b> version does not require monthly donations and have no licence expiration!
</p>
</div>
</section>
<section class='section section-sm'>
<div class='container hr'>
<div class='text-center mt-4'>
<h2>
Give it a try!
</h2>
<div class='mb-4'>
<img src='/images/logo.svg' title='WhatsApp HTTP API' alt='logo' style='border-radius: 50%; width: 10rem' />
</div>
<a class='btn btn-primary btn-lg px-4 mb-2'
href='/docs/{{ if .Site.Params.options.docsVersioning }}{{ .Site.Params.docsVersion }}/{{ end }}overview/introduction/'
role='button'>Get Started</a>
<p class='meta'>
<a href='https://github.com/devlikeapro/whatsapp-http-api'>Source code in GitHub.</a>
<br/>
<a href='https://hub.docker.com/r/devlikeapro/whatsapp-http-api'>
<img alt='Docker Pulls' src='https://img.shields.io/docker/pulls/devlikeapro/whatsapp-http-api'>
</a>
</p>
</div>
</div>
</section>
{{ end }}
{{ define "sidebar-footer" }}
<section class="section section-sm container-fluid">
<div class="row justify-content-center text-center">
<div class="col-lg-9">
<section class='section section-sm container-fluid'>
<div class='row justify-content-center text-center'>
<div class='col-lg-9'>
{{- .Content -}}
</div>
</div>
@@ -1,17 +1,91 @@
<!-- Yandex.Metrika counter -->
<script type="text/javascript" >
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
<script type='text/javascript'>
(function(m, e, t, r, i, k, a) {
m[i] = m[i] || function() {
(m[i].a = m[i].a || []).push(arguments);
};
m[i].l = 1 * new Date();
for (var j = 0; j < document.scripts.length; j++) {
if (document.scripts[j].src === r) {
return;
}
}
k = e.createElement(t), a = e.getElementsByTagName(t)[0], k.async = 1, k.src = r, a.parentNode.insertBefore(k, a);
})
(window, document, 'script', 'https://mc.yandex.ru/metrika/tag.js', 'ym');
ym(91185978, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
webvisor:true
});
ym(91185978, 'init', {
clickmap: true,
trackLinks: true,
accurateTrackBounce: true,
webvisor: true,
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/91185978" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<noscript>
<div><img src='https://mc.yandex.ru/watch/91185978' style='position:absolute; left:-9999px;' alt='' /></div>
</noscript>
<!-- /Yandex.Metrika counter -->
<!-- Google tag (gtag.js) -->
<script async src='https://www.googletagmanager.com/gtag/js?id=G-2XLLXRJ1KF'></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-2XLLXRJ1KF');
</script>
<!-- /Google tag (gtag.js) -->
<!-- Main page cards -->
<style>
.pros-card {
border: 1px solid #e9ecef;
border-radius: 0.5rem;
padding: 1.5rem;
margin: 1rem;
background-color: #fff;
box-shadow: 0 0 1rem 0 rgba(0, 0, 0, 0.1);
}
.article-card {
border: 1px solid #e9ecef;
border-radius: 0.5rem;
padding: 1.5rem;
background-color: #fff;
box-shadow: 0 0 1rem 0 #4aae2050;
}
.hr {
border-top: 1px solid #e9ecef;
}
.pros-card-tier {
border: 1px solid #e9ecef;
border-radius: 0.5rem;
padding: 1.5rem;
margin: 1rem;
min-width: 25rem;
background-color: #fff;
box-shadow: 0 0 1rem 0 rgba(0, 0, 0, 0.1);
}
/* Using shadow */
.pros-card--highlighted {
background-color: #fff;
box-shadow: 0 0 1.5rem 0 #4aae2050;
}
.tier-pros > * {
margin: 0.5rem 0;
text-align: left;
}
.table-highlight-first-column td:nth-child(1) {
font-weight: bold;
}
</style>
<!-- /Main page cards -->
+650
View File
@@ -0,0 +1,650 @@
{{ define "main" }}
<section class='section section-md pb-0'>
<div class='container'>
<div class='row justify-content-center'>
<div class='col-11 col-lg-9 text-center'>
<h1 class='display-5 fw-normal mt-1'>{{ .Summary }}</h1>
</div>
<div class='d-flex justify-content-center mb-4'>
<img src='/images/logo.svg' title='WhatsApp HTTP API' alt='logo'
style='border-radius: 50%; width: 10rem' />
</div>
<div class='col-11 col-lg-9' style='min-width: 25rem'>
<p><strong>WAHA</strong> (<u>W</u>hats<u>A</u>pp <u>H</u>TTP <u>A</u>PI) is distributed in two versions:</p>
<ol>
<li>Core <img src='/images/versions/core.png' alt='Core version image'> the basic version that meets almost
80%
of people's needs. 100% free and open source.
</li>
<li>Plus <img src='/images/versions/plus.png' alt='Plus version image'> the version with advanced messages,
security, and reliability features.
</li>
</ol>
You support the project and get <b>WAHA Plus</b> by
<a href='#tiers'>donating to the project</a> on
<a href='#how-to-donate'>one of the platforms</a>.
</div>
</div>
</div>
</section>
<section class='section section-md pb-0' id='tiers'>
<div class='text-center'>
<h1 class='display-5 fw-normal mt-1'>Tiers</h1>
</div>
<div class='row justify-content-center'>
<div class='col-11 col-lg-9 text-center' style='min-width: 25rem'>
<p>The more you support, the more you get!</p>
</div>
</div>
<div class='row justify-content-center text-center'>
<!-- Core -->
<div
class='col-12 col-lg-4 pros-card-tier h-full d-flex flex-column justify-content-between'
id='tier-core'
>
<div>
<h2 class='h4 color-accent mt-0 display-4'>Core</h2>
<p class='fw-bold'>
Essential product for 80% of people needs!
</p>
<div class='mb-4'>
<span class='display-4 fw-bold'>$0</span>
</div>
<div class='tier-pros'>
<div>
✔️ <a href='https://github.com/devlikeapro/whatsapp-http-api'><b>WAHA Core</b> Source
Code</a>
</div>
<div>
✔️ <a href='{{ relref . "/docs/how-to/send-messages" }}'>Send text messages</a>
</div>
<div>
✔️ <a href='{{ relref . "/docs/how-to/receive-messages" }}'>Receive text messages</a>
</div>
<div>
✔️ <a href='{{ relref . "/docs/how-to/webhooks" }}'>Webhooks</a>
</div>
<div>
✔️ <a href='{{ relref . "/docs/how-to/swagger" }}'>Swagger and OpenAPI spec</a>
</div>
<div>
✔️ <a href='{{ relref . "/docs/how-to/engines#webjs" }}'>Web based engine (WEBJS)</a>
</div>
<div>
✔️ <a href='{{ relref . "/docs/how-to/engines#noweb" }}'>Light non-chrome engine (NOWEB)</a>
</div>
<div>
✔️ <a href='{{ relref . "/docs/how-to/engines#features" }}'>and more!</a>
</div>
<div>
&nbsp;<b>∞</b>&nbsp; Unlimited messages
</div>
<div>
&nbsp;<b>1</b>&nbsp; <a href='{{ relref . "/docs/how-to/sessions"}}'>Session</a>
</div>
</div>
</div>
<div class='mt-4 pt-2'>
<a class='btn btn-outline-primary btn-lg px-4 mb-2'
href='/docs/{{ if .Site.Params.options.docsVersioning }}{{ .Site.Params.docsVersion }}/{{ end }}overview/introduction/'
role='button'>Get Started →</a>
</div>
</div>
<!-- PLUS -->
<div
class='col-12 col-lg-4 pros-card-tier h-full d-flex flex-column justify-content-between'
id='tier-plus'
>
<div>
<h2 class='h4 color-accent mt-0 display-4'>Plus</h2>
<p class='fw-bold'>
Optimize your experience with extra features!
</p>
<div class='mb-4'>
<span class='display-4 fw-bold'>$19</span>
</div>
<div class='tier-pros'>
<div>
✔️ All <b>Core</b> features
</div>
<div>
✔️ <a href='{{ relref . "/docs/how-to/plus-version" }}'>Personal Docker Key to <b>WAHA Plus</b></a>
</div>
<div>
✔️ <a href='{{ relref . "/docs/how-to/send-messages" }}'>Send files, voices, video</a>
</div>
<div>
✔️ <a href='{{ relref . "/docs/how-to/receive-messages" }}'>Receive files, voices, video</a>
</div>
<div>
✔️ <a href='{{ relref . "/docs/how-to/security" }}'>Built-in Security</a>
</div>
<div>
✔️ <a href='{{ relref . "/docs/how-to/webhooks" }}'>Webhooks retries</a>
</div>
<div>
✔️ <a href='{{ relref . "/docs/how-to/storages" }}'>File storage</a>
</div>
<div>
✔️ <a href='{{ relref . "/docs/how-to/storages" }}'>MongoDB storage</a>
</div>
<div>
✔️ <a href='{{ relref . "/docs/how-to/waha-dashboard" }}'>Built-in Dashboard</a>
</div>
<div>
✔️ Special badge on GitHub <img src='https://img.shields.io/badge/patron-PLUS-a0e6ba'>
</div>
<div>
&nbsp;<b>∞</b>&nbsp; <a href='{{ relref . "/docs/how-to/sessions"}}'>Unlimited Sessions</a>
</div>
</div>
</div>
<div class='mt-4 pt-2'>
<div class='mb-4'>
<hr>
<p class='text-center'>
<b><span class='fs-4'>⚡50% OFF</span> Yearly Crypto Offer!⚡</b>
</p>
<p>
Save the fees and get <b>Plus</b> for a year donating in <a href='#crypto'>Crypto</a>!
</p>
<div class='text-center'>
<span class='fs-3 fw-light text-secondary'><del>$228</del></span>
<span class='fs-3 fw-bold text-primary'>
<a href='#crypto'>$110</a>
</span>
</div>
<hr>
</div>
<a class='btn btn-primary btn-lg px-4 mb-2'
href='#donations'
role='button'>Support project →</a>
</div>
</div>
<!-- PRO -->
<div
class='col-12 col-lg-4 pros-card-tier pros-card--highlighted h-full d-flex flex-column justify-content-between'
id='tier-pro'
>
<div>
<h2 class='h4 color-accent mt-0 display-4'>PRO</h2>
<p class='fw-bold'>
Get the most out of WAHA, with all the features!
</p>
<div class='mb-4'>
<span class='display-4 fw-bold'>$99</span>
</div>
<div class='tier-pros'>
<div>
✔️ All <b>Plus</b> features
</div>
<div>
✔️ <a href='https://github.com/devlikeapro/whatsapp-http-api-plus'><b>WAHA Plus</b> Source
Code</a>
</div>
<div>
✔️ Special badge on GitHub <img src='https://img.shields.io/badge/patron-PRO-188a42'>
</div>
<div>
✔️ Membership in <b>WAHA PRO</b> Discord server for receiving personal support, and sharing your experiences
with other professionals.
</div>
</div>
</div>
<div class='mt-4 pt-2'>
<div class='mb-4'>
<hr>
<p class='text-center'>
<b><span class='fs-4'>⚡50% OFF</span> Yearly Crypto Offer!⚡</b>
</p>
<p>
Save the fees and get <b>PRO</b> for a year donating in <a href='#crypto'>Crypto</a>!
</p>
<div class='text-center'>
<span class='fs-3 fw-light text-secondary'><del>$1,118</del></span>
<span class='fs-3 fw-bold text-primary'>
<a href='#crypto'>$590</a>
</span>
</div>
<hr>
</div>
<a class='btn btn-primary btn-lg px-4 mb-2'
href='#donations'
role='button'>Support project →</a>
</div>
</div>
</div>
</section>
<section class='section section-md pb-0' id='tiers-compare'>
<div class='text-center'>
<h1 class='display-5 fw-normal mt-1'>Compare Features</h1>
</div>
<div class='row justify-content-center'>
<table class='table-highlight-first-column'>
<tr>
<th></th>
<th>
Core
</th>
<th>Plus</th>
<th>PRO</th>
</tr>
<tr>
<td>
<a href='{{ relref . "/docs/how-to/sessions"}}'>Sessions</a>
</td>
<td>1</td>
<td>∞</td>
<td>∞</td>
</tr>
<tr>
<td>
Messages
</td>
<td>∞</td>
<td>∞</td>
<td>∞</td>
</tr>
<tr>
<td>
<a href='{{ relref . "/docs/how-to/send-messages" }}'> Send text messages </a>
</td>
<td>✔️</td>
<td>✔️</td>
<td>✔️</td>
</tr>
<tr>
<td>
<a href='{{ relref . "/docs/how-to/receive-messages" }}'> Receive text messages </a>
</td>
<td>✔️</td>
<td>✔️</td>
<td>✔️</td>
</tr>
<tr>
<td>
<a href='{{ relref . "/docs/how-to/send-messages" }}'> Send files, voices, video </a>
</td>
<td>➖</td>
<td>✔️</td>
<td>✔️</td>
</tr>
<tr>
<td>
<a href='{{ relref . "/docs/how-to/receive-messages" }}'> Receive files, voices, video</a>
</td>
<td>➖</td>
<td>✔️</td>
<td>✔️</td>
</tr>
<tr>
<td>
<a href='{{ relref . "/docs/how-to/storages" }}'>Webhooks</a>
</td>
<td>✔️</td>
<td>✔️</td>
<td>✔️</td>
</tr>
<tr>
<td>
<a href='{{ relref . "/docs/how-to/webhooks" }}'>Webhooks retries</a>
</td>
<td>➖</td>
<td>✔️</td>
<td>✔️</td>
</tr>
<tr>
<td>
<a href='{{ relref . "/docs/how-to/storages" }}'>File storage</a>
</td>
<td>➖</td>
<td>✔️</td>
<td>✔️</td>
</tr>
<tr>
<td>
<a href='{{ relref . "/docs/how-to/storages" }}'>MongoDB storage</a>
</td>
<td>➖</td>
<td>✔️</td>
<td>✔️</td>
</tr>
<tr>
<td>
<a href='{{ relref . "/docs/how-to/waha-dashboard" }}'>Built-in Dashboard</a>
</td>
<td>➖</td>
<td>✔️</td>
<td>✔️</td>
</tr>
<tr>
<td>
<a href='{{ relref . "/docs/how-to/security" }}'>Built-in Security</a>
</td>
<td>➖</td>
<td>✔️</td>
<td>✔️</td>
</tr>
<tr>
<td>
<a href='{{ relref . "/docs/how-to/engines#webjs" }}'>Web based engine (WEBJS)</a>
</td>
<td>✔️</td>
<td>✔️</td>
<td>✔️</td>
</tr>
<tr>
<td>
<a href='{{ relref . "/docs/how-to/engines#noweb" }}'>Light non-chrome engine (NOWEB)</a>
</td>
<td>✔️</td>
<td>✔️</td>
<td>✔️</td>
</tr>
<tr>
<td>
<a href='{{ relref . "/docs/how-to/plus-version" }}'>Personal Docker Key to <b>WAHA Plus</b></a>
</td>
<td>➖</td>
<td>✔️</td>
<td>✔️</td>
</tr>
<tr>
<td>
<a href='https://github.com/devlikeapro/whatsapp-http-api' target='_blank'>WAHA Core Source Code -></a>
</td>
<td>✔️</td>
<td>✔️</td>
<td>✔️</td>
</tr>
<tr>
<td>
<a href='https://github.com/devlikeapro/whatsapp-http-api-plus' target='_blank'>WAHA Plus Source Code -></a>
</td>
<td>➖</td>
<td>➖</td>
<td>✔️</td>
</tr>
<tr>
<td>
Membership in <b>WAHA PRO</b> Discord server
</td>
<td>➖</td>
<td>➖</td>
<td>✔️</td>
</tr>
<tr>
<td>
Special Badge on GitHub
</td>
<td>➖</td>
<td>
<img src='https://img.shields.io/badge/patron-PLUS-a0e6ba'>
</td>
<td>
<img src='https://img.shields.io/badge/patron-PRO-188a42'>
</td>
</tr>
<tr>
<th></th>
<th>
<a
href='/docs/{{ if .Site.Params.options.docsVersioning }}{{ .Site.Params.docsVersion }}/{{ end }}overview/introduction/'
>Get Started -></a>
</th>
<th>
<a href='#donations'>Support project -></a>
</th>
<th>
<a href='#donations'>Support project -></a>
</th>
</tr>
</table>
</div>
</section>
<section class='section section-md pb-0' id='why-waha'>
<div class='text-center'>
<h1 class='display-5 fw-normal mt-1'>Why WAHA?</h1>
</div>
<div class='row justify-content-center'>
<table class='table-highlight-first-column'>
<tr>
<th>Features</th>
<th>
<img src='/images/logo-robot.svg' title='WhatsApp HTTP API' alt='logo'
style='height: 2rem; transform: translateY(-0.3rem)' />
WAHA Plus
</th>
<th>🤔 Others</th>
</tr>
<tr>
<td>Number of accounts</td>
<td>✔️ No limits on <b>accounts</b> or <b>servers</b>!</td>
<td> ➖ One account for $50/month.</td>
</tr>
<tr>
<td>Infrastructure</td>
<td>✔️ On-Premise - your server, your infrastructure!</td>
<td> ➖ Insecure cloud solution.</td>
</tr>
<tr>
<td>Security</td>
<td>✔️ No data leaks!</td>
<td>➖ You have to give access to customers' data - phone number, name, your messages.</td>
</tr>
<tr>
<td>License</td>
<td> ✔️ No license checks! It works even after you got unsubscribed
<br />
<span class='text-muted fs-6'>
(as long as WhatsApp doesn't make backward incompatible changes, or you need to reinstall it on new server).
</span>
</td>
<td> ➖ One month</td>
</tr>
<tr>
<td>Messages</td>
<td>✔️ No message limits!</td>
<td>➖ Some solutions have a price for messages, like $1 every 1,000 messages.</td>
</tr>
<tr>
<td>Source Code</td>
<td>✔️ Available for <a href='#tier-pro'>PRO</a> patrons!</td>
<td>➖ No access to verify the code or adjust it for your needs.</td>
</tr>
<tr>
<td>Price</td>
<td>✔️ <b>19$</b></td>
<td>➖ Monthly payment starts from $50</td>
</tr>
</table>
</div>
</section>
<section class='section section-md pb-0' id='donations'>
<div class='text-center'>
<h1 class='display-5 fw-normal mt-1'>Donations</h1>
</div>
<div class='row justify-content-center'>
<div class='col-11 col-lg-9' style='min-width: 25rem'>
<p>WAHA Plus version is available through <strong>donations</strong> (subscriptions).</p>
<p><strong>It doesn't require monthly subscriptions, once installed on your server - it always works!</strong>
(until WhatsApp made backward-incompatible changes, and you have to update the image,
or you need to reinstall it on new server
)</p>
<div class='alert' style='display: flex; align-items: center;'>
<span style='margin-right: 10px;'>💡</span>
<span>No licence checks or expiration on already installed instances!</span>
</div>
<p>We do not sell <strong>WAHA</strong>, it's not a purchase. It's a donation.</p>
<p>We treat our projects like art. You donate to the project and get a bit more from it as a thank-you. 😊</p>
<p>Treat <strong>WAHA Plus</strong> it as an additional episode, behind-the-scenes videos, our nude photos 😊</p>
<div class='alert' style='display: flex; align-items: center;'>
<span style='margin-right: 10px;'>💡</span>
<span>WAHA does not have license checks and expiration - because art can not expire! Enjoy it till it works!</span>
</div>
<p>We donate most of the donations down to the stream to the underlying libraries and tools - JS-community, Node,
other libraries authors, personal contributors.<br>
By donating to the <strong>WAHA</strong> you donate to the Open Source world!</p>
</div>
</div>
</section>
<section class='section section-md pb-0' id='how-to-donate'>
<div class='text-center'>
<h2 class='display-5 fw-normal mt-1'>How to donate?</h2>
</div>
<div class='row justify-content-center'>
<div class='col-11 col-lg-9 text-center' style='min-width: 25rem'>
<p>Choose the platform that suits you best to support the project.</p>
</div>
</div>
<div class='row justify-content-center mt-4'>
<!-- Crypto -->
<div
class='col-12 col-lg-4 pros-card pros-card--highlighted h-full d-flex flex-column justify-content-between'
id='crypto'
>
<div>
<div class='text-center mb-4'>
<img
src='/logos/tether-usdt-logo.svg' alt='Tether' style='height: 5rem'
/>
</div>
<p>
<b>Cryptocurrency</b> - support the project with crypto!
<br />
</p>
<div>
<p>
If you wish to donate in crypto (any currencies, any network) - please contact us at <a
href='mailto:crypto@devlike.pro'>crypto@devlike.pro</a>.
</p>
<blockquote>
<p>e.g. "I want to donate as PRO patron in crypto."</p>
</blockquote>
<hr>
<p class='text-center mx-0'>
<b>⚡50% OFF Yearly Offer!⚡</b>
</p>
<ul style='margin-left: 0'>
<li><b>Plus</b> -
<del>$228</del>
<b>$110</b></li>
<li><b>PRO</b> -
<del>$1,188</del>
<b>$590</b></li>
</ul>
<p>
Save the fees and get <b>Plus</b> or <b>PRO</b> for a year donating in crypto!
Mention the Yearly offer in the email if you want to get it.
</p>
<hr>
</div>
</div>
<div class='text-center pt-4'>
<a
class='btn btn-outline-info btn-lg'
href='mailto:crypto@devlike.pro?subject=I%20want%20to%20donate%20as%20PRO%20patron.'
target='_blank'
role='button'>
Support with Crypto →
</a>
</div>
</div>
<!-- Boosty -->
<div
class='col-12 col-lg-4 pros-card h-full d-flex flex-column justify-content-between'
>
<div>
<div class='text-center mb-4'>
<img src='/logos/boosty.svg' alt='Boosty' style='height: 5rem' />
</div>
<p>
<b>Boosty</b> - Patreon-like service for donations with fewer fees.
<br />
</p>
<div>
Go ahead and get your own WhatsApp HTTP API!
</div>
</div>
<div class='text-center pt-4'>
<a
class='btn btn-outline-dark btn-lg'
href='https://boosty.to/wa-http-api'
target='_blank'
role='button'>Support on Boosty →</a>
</div>
</div>
<!-- Patreon -->
<div
class='col-12 col-lg-4 pros-card h-full d-flex flex-column justify-content-between'
>
<div>
<div class='text-center mb-4'>
<img src='/logos/patreon.png' alt='Patreon' style='height: 5rem' />
</div>
<p>
<b>Patreon</b> - well-known service for donations.
<br />
</p>
<div>
Please consider using <b>Boosty</b> or <b>Crypto</b> instead of Patreon due to its lower fees 🙏
</div>
</div>
<div class='text-center pt-4'>
<a
class='btn btn-outline-danger btn-lg'
href='https://www.patreon.com/wa_http_api'
target='_blank'
role='button'>Support on Patreon →</a>
</div>
</div>
</div>
</section>
<section class='section section-md' id='what-next'>
<div class='text-center'>
<h2 class='display-5 fw-normal mt-1'>
What's next?
</h2>
</div>
<div class='row justify-content-center text-center'>
<div class='col-11 col-lg-9' style='min-width: 25rem'>
Read more about
<a href='{{ relref . "/docs/how-to/plus-version" }}'>
how to get WAHA Plus using Patron Portal ->
</a>
</div>
</div>
</section>
{{ end }}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

+289
View File
@@ -0,0 +1,289 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Dashboard | WAHA</title>
<link rel="icon" href="./favicon.ico" />
<style>
:root {
--surface-card: #1f2937;
--surface-border: #374151;
--card-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
}
body,
html {
height: 100%;
padding: 0;
margin: 0;
}
* {
box-sizing: border-box;
}
.bg-image {
/* The image used */
background-image: url('./waha-dashboard.png');
/* Add the blur effect */
filter: blur(2px);
-webkit-filter: blur(2px);
/* Full height */
height: 100%;
/* Center and scale the image nicely */
background-position: center;
background-repeat: no-repeat;
background-size: cover;
}
body {
background-color: #111827;
color: rgba(255, 255, 255, 0.87);
}
svg {
width: 100px;
height: 100px;
}
.message {
font-size: 20px;
margin: 20px;
}
a {
color: rgb(158, 158, 255);
text-decoration-color: rgb(158, 158, 255);
}
.upgrade-link {
text-decoration: none;
font-size: 1.5rem;
}
.link-button {
background-color: #4ade80;
padding: 10px 20px;
border-radius: 5px;
color: #052e16;
text-decoration: none;
margin-top: 50px;
}
.card {
min-width: 25rem;
background: var(--surface-card);
border: 1px solid var(--surface-border);
box-shadow: var(--card-shadow);
padding: 2rem;
border-radius: 12px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 2;
text-align: center;
}
</style>
</head>
<body>
<div class="bg-image"></div>
<div class="card">
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"
width="1080"
height="1080"
viewBox="0 0 1080 1080"
xml:space="preserve"
>
<desc>Created with Fabric.js 5.2.4</desc>
<defs></defs>
<g
transform="matrix(1 0 0 1 540 540)"
id="c3cb5d1b-8350-492a-8567-8c1ee2307b9a"
></g>
<g
transform="matrix(1 0 0 1 540 540)"
id="054ae9ae-db12-4435-8648-8bfb02267690"
>
<rect
style="
stroke: none;
stroke-width: 1;
stroke-dasharray: none;
stroke-linecap: butt;
stroke-dashoffset: 0;
stroke-linejoin: miter;
stroke-miterlimit: 4;
fill: rgb(255, 255, 255);
fill-rule: nonzero;
opacity: 1;
visibility: hidden;
"
vector-effect="non-scaling-stroke"
x="-540"
y="-540"
rx="0"
ry="0"
width="1080"
height="1080"
/>
</g>
<g transform="matrix(1 0 0 1 540 540)">
<rect
style="
stroke: none;
stroke-width: 1;
stroke-dasharray: none;
stroke-linecap: butt;
stroke-dashoffset: 0;
stroke-linejoin: miter;
stroke-miterlimit: 4;
fill: rgb(255, 255, 255);
fill-rule: nonzero;
opacity: 1;
visibility: hidden;
"
vector-effect="non-scaling-stroke"
x="-540"
y="-540"
rx="0"
ry="0"
width="1080"
height="1080"
/>
</g>
<g transform="matrix(2.02 0 0 2.02 540 540)">
<rect
style="
stroke: none;
stroke-width: 1;
stroke-dasharray: none;
stroke-linecap: butt;
stroke-dashoffset: 0;
stroke-linejoin: miter;
stroke-miterlimit: 4;
fill: rgb(255, 255, 255);
fill-rule: nonzero;
opacity: 1;
visibility: hidden;
"
vector-effect="non-scaling-stroke"
x="-540"
y="-540"
rx="0"
ry="0"
width="1080"
height="1080"
/>
</g>
<g transform="matrix(3.68 0 0 3.68 540.38 540.48)">
<path
style="
stroke: none;
stroke-width: 1;
stroke-dasharray: none;
stroke-linecap: butt;
stroke-dashoffset: 0;
stroke-linejoin: miter;
stroke-miterlimit: 4;
fill: rgb(74, 173, 32);
fill-rule: nonzero;
opacity: 1;
"
vector-effect="non-scaling-stroke"
transform=" translate(-392.21, -570.16)"
d="M 392.26 705.96 C 376.77 705.96 361.28999999999996 706.0400000000001 345.8 705.95 C 318.16 705.7900000000001 297.6 685.2700000000001 297.22 657.57 C 297.15000000000003 652.24 297.07000000000005 646.9100000000001 297.25 641.59 C 297.36 638.23 296.3 636.6 292.72 636.89 C 290.24 637.09 287.73 636.98 285.23 636.9 C 277.1 636.63 271.70000000000005 631.65 271.38 623.49 C 271.06 615.1800000000001 271.06 606.83 271.37 598.52 C 271.69 590.05 277.04 585.23 285.58 585.01 C 297.21 584.72 297.19 584.72 297.21999999999997 573.01 C 297.22999999999996 567.36 297.14 561.72 297.97999999999996 556.0699999999999 C 301.25999999999993 533.93 320.72999999999996 516.4599999999999 343.09 516.04 C 355.07 515.81 367.07 515.86 379.04999999999995 516.02 C 382.72999999999996 516.0699999999999 384.02 514.87 383.96 511.15 C 383.77 500.65999999999997 383.76 490.16999999999996 383.96999999999997 479.67999999999995 C 384.04999999999995 476.00999999999993 382.96 473.65999999999997 379.92999999999995 471.37999999999994 C 372.23999999999995 465.5799999999999 369.78 456.25999999999993 373.06999999999994 447.7199999999999 C 376.18999999999994 439.5999999999999 385.13999999999993 433.7399999999999 393.4599999999999 434.3599999999999 C 402.63999999999993 435.0399999999999 410.43999999999994 441.3499999999999 412.4599999999999 450.2199999999999 C 414.4799999999999 459.0299999999999 411.7099999999999 466.4299999999999 404.4699999999999 471.7899999999999 C 401.8699999999999 473.7199999999999 400.9199999999999 475.69999999999993 400.9699999999999 478.8299999999999 C 401.1199999999999 489.1499999999999 401.2499999999999 499.4799999999999 400.9299999999999 509.79999999999995 C 400.7899999999999 514.5 402.0299999999999 516.24 406.9999999999999 516.0799999999999 C 417.8099999999999 515.7299999999999 428.6399999999999 515.91 439.4699999999999 515.9899999999999 C 466.5199999999999 516.2099999999999 486.7199999999999 536.2299999999999 487.2399999999999 563.3 C 487.3399999999999 568.29 487.2599999999999 573.29 487.2799999999999 578.29 C 487.2999999999999 585 487.3099999999999 585 493.7899999999999 585.02 C 495.94999999999993 585.03 498.1199999999999 584.96 500.2799999999999 585.06 C 507.94999999999993 585.43 512.9999999999999 590.42 513.1499999999999 598.1199999999999 C 513.3199999999998 606.6099999999999 513.3099999999998 615.1099999999999 513.1599999999999 623.5999999999999 C 513.0299999999999 631.3599999999999 508.1999999999999 636.31 500.47999999999985 636.8699999999999 C 498.15999999999985 637.0399999999998 495.77999999999986 637.2199999999999 493.49999999999983 636.8899999999999 C 488.1999999999998 636.1299999999999 486.86999999999983 638.5399999999998 487.1999999999998 643.3999999999999 C 487.54999999999984 648.5399999999998 487.3499999999998 653.7199999999999 487.23999999999984 658.8799999999999 C 486.67999999999984 685.6599999999999 466.4599999999998 705.7399999999999 439.71999999999986 705.9599999999999 C 423.9 706.06 408.08 705.95 392.26 705.96 z"
stroke-linecap="round"
/>
</g>
<g transform="matrix(-3.68 0 0 -3.68 546.38 845.01)">
<path
style="
stroke: none;
stroke-width: 1;
stroke-dasharray: none;
stroke-linecap: butt;
stroke-dashoffset: 0;
stroke-linejoin: miter;
stroke-miterlimit: 4;
fill: rgb(56, 134, 22);
fill-rule: nonzero;
opacity: 1;
"
vector-effect="non-scaling-stroke"
transform=" translate(-394.07, -654.42)"
d="M 394.26 632.93 C 404.75 632.93 415.23 632.9 425.71999999999997 632.9399999999999 C 431.92999999999995 632.9599999999999 433.52 634.7399999999999 432.90999999999997 640.7099999999999 C 430.99999999999994 659.66 414.40999999999997 675.2199999999999 395.38 675.91 C 376.87 676.5799999999999 359.57 662.65 356 644.1899999999999 C 355.72 642.7199999999999 355.33 641.26 355.19 639.78 C 354.71 634.9 356.32 633.01 361.3 632.97 C 372.29 632.87 383.28 632.93 394.26 632.93 z"
stroke-linecap="round"
/>
</g>
<g transform="matrix(3.68 0 0 3.68 673.99 594.08)">
<path
style="
stroke: none;
stroke-width: 1;
stroke-dasharray: none;
stroke-linecap: butt;
stroke-dashoffset: 0;
stroke-linejoin: miter;
stroke-miterlimit: 4;
fill: rgb(56, 135, 22);
fill-rule: nonzero;
opacity: 1;
"
vector-effect="non-scaling-stroke"
transform=" translate(-428.75, -584.99)"
d="M 428.83 602 C 419.12 601.96 411.59999999999997 594.6 411.53 585.07 C 411.46999999999997 575.4100000000001 419.21 567.9100000000001 429.16999999999996 567.98 C 438.33 568.0500000000001 445.93999999999994 575.71 445.97999999999996 584.91 C 446.02 594.33 438.29 602.04 428.83 602 z"
stroke-linecap="round"
/>
</g>
<g transform="matrix(3.68 0 0 3.68 406.92 594.18)">
<path
style="
stroke: none;
stroke-width: 1;
stroke-dasharray: none;
stroke-linecap: butt;
stroke-dashoffset: 0;
stroke-linejoin: miter;
stroke-miterlimit: 4;
fill: rgb(56, 135, 22);
fill-rule: nonzero;
opacity: 1;
"
vector-effect="non-scaling-stroke"
transform=" translate(-356.06, -584.99)"
d="M 339.05 584.57 C 339.19 574.94 346.67 567.84 356.53000000000003 567.99 C 366.26000000000005 568.14 373.21000000000004 575.46 373.07000000000005 585.42 C 372.94000000000005 595.16 365.62000000000006 602.13 355.68000000000006 602 C 346.04 601.87 338.91 594.4 339.05 584.57 z"
stroke-linecap="round"
/>
</g>
</svg>
<div class="message">
Sorry,
<a
href="https://waha.devlike.pro/docs/how-to/waha-dashboard"
target="_blank"
>Dashboard</a
>
is not available in <strong>WAHA Core</strong> version.
<br />
Please consider upgrading to <strong>WAHA Plus</strong>.
</div>
<div style="margin-top: 2rem; margin-bottom: 1rem">
<a
class="upgrade-link link-button"
href="https://waha.devlike.pro/docs/how-to/plus-version/"
target="_blank"
>Upgrade to WAHA Plus</a
>
</div>
</div>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 646 B

After

Width:  |  Height:  |  Size: 807 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M15 19L17 21L21 17M13 3H8.2C7.0799 3 6.51984 3 6.09202 3.21799C5.71569 3.40973 5.40973 3.71569 5.21799 4.09202C5 4.51984 5 5.0799 5 6.2V17.8C5 18.9201 5 19.4802 5.21799 19.908C5.40973 20.2843 5.71569 20.5903 6.09202 20.782C6.51984 21 7.0799 21 8.2 21H11.5M13 3L19 9M13 3V7.4C13 7.96005 13 8.24008 13.109 8.45399C13.2049 8.64215 13.3578 8.79513 13.546 8.89101C13.7599 9 14.0399 9 14.6 9H19M19 9V13.4M9 17H11.5M9 13H15M9 9H10" stroke="#388716" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 747 B

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="800px" height="800px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15 19L17 21L21 17M13 3H8.2C7.0799 3 6.51984 3 6.09202 3.21799C5.71569 3.40973 5.40973 3.71569 5.21799 4.09202C5 4.51984 5 5.0799 5 6.2V17.8C5 18.9201 5 19.4802 5.21799 19.908C5.40973 20.2843 5.71569 20.5903 6.09202 20.782C6.51984 21 7.0799 21 8.2 21H11.5M13 3L19 9M13 3V7.4C13 7.96005 13 8.24008 13.109 8.45399C13.2049 8.64215 13.3578 8.79513 13.546 8.89101C13.7599 9 14.0399 9 14.6 9H19M19 9V13.4M9 17H11.5M9 13H15M9 9H10" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 744 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Loaded 100 of 221 files, more files were not shown because too many files have changed in this diff. Show more