Compare commits

..

285 Commits

Author SHA1 Message Date
cheveguerra
36a7d9a0b7 ci(providers): check provider versions 2023-01-17 09:15:20 +00:00
Leifer Mendez
168b81315b Merge pull request #503 from codigoencasa/dev
Dev
2023-01-16 14:48:47 +01:00
Leifer Mendez
8520b09dac Merge pull request #502 from codigoencasa/feature/providers-major
chore: autopublish 2023-01-16T11:39:58Z
2023-01-16 12:43:08 +01:00
Leifer Mendez
adb0e49029 Merge pull request #501 from codigoencasa/feature/breaking-change
Feature/breaking change
2023-01-16 12:42:27 +01:00
github-actions[bot]
464dd44ce2 chore: autopublish 2023-01-16T11:39:58Z 2023-01-16 11:39:58 +00:00
Leifer Mendez
e3c94a49d7 Merge branch 'feature/breaking-change' of github.com:leifermendez/bot-whatsapp into feature/breaking-change 2023-01-16 12:38:55 +01:00
Leifer Mendez
a29b9d4e1f fix(cli): refactor 2023-01-16 12:38:47 +01:00
Leifer Mendez
e036817e84 Merge branch 'dev' into feature/breaking-change 2023-01-16 12:34:50 +01:00
Leifer Mendez
18ef4e9d72 fix(cli): refactor 2023-01-16 12:30:53 +01:00
Leifer Mendez
fe129f62fe Merge branch 'feature/providers-major' into feature/breaking-change 2023-01-16 12:28:16 +01:00
Leifer Mendez
bb6ed4a084 fix(bot): 🐛 body undefined 2023-01-16 12:20:51 +01:00
Leifer Mendez
9234cf1c5d fix(bot): 🐛 body undefined 2023-01-16 11:44:23 +01:00
Leifer Mendez
a118bbbf7f fix(bot): 🐛 body undefined 2023-01-16 11:30:36 +01:00
Leifer Mendez
f54dea52b0 fix(bot): 🐛 body undefined 2023-01-16 11:28:45 +01:00
Leifer Mendez
72e0a91050 fix(bot): 🐛 body undefined 2023-01-16 11:25:42 +01:00
Leifer Mendez
70dd4d73e8 fix(bot): 🐛 body undefined 2023-01-16 11:17:25 +01:00
Leifer Mendez
ecf0eef928 fix(bot): 🐛 body undefined 2023-01-16 11:11:33 +01:00
Leifer Mendez
345f256a1b fix(provider): wwebjs upgrade
fix(cli):  refactor
2023-01-16 11:00:32 +01:00
leifermendez
3648757fa0 fix(cli): refactor 2023-01-16 09:58:30 +00:00
Leifer Mendez
32f6a70f8f fix(cli): refactor 2023-01-16 10:56:34 +01:00
Leifer Mendez
8c825e7f6b fix(cli): refactor 2023-01-16 10:49:58 +01:00
Leifer Mendez
0c0f4375b8 fix(cli): refactor 2023-01-16 10:45:29 +01:00
Leifer Mendez
039ce5dd7c fix(cli): refactor 2023-01-16 10:41:40 +01:00
Leifer Mendez
5e879188b8 fix(cli): refactor 2023-01-16 10:36:22 +01:00
Leifer Mendez
21a7270281 fix(cli): refactor 2023-01-16 10:34:19 +01:00
Leifer Mendez
82a99b2c80 fix(cli): refactor 2023-01-16 10:12:00 +01:00
Leifer Mendez
cc19974579 fix(cli): refactor 2023-01-16 10:04:07 +01:00
Leifer Mendez
56fcb8fb72 fix(cli): refactor 2023-01-16 09:58:46 +01:00
Leifer Mendez
f36cff1eef fix(cli): refactor 2023-01-16 09:54:10 +01:00
Leifer Mendez
09fd0dd2e1 Merge pull request #497 from codigoencasa/feature/breaking-change
Feature/breaking change
2023-01-16 09:44:35 +01:00
Leifer Mendez
b393c11af6 fix(cli): refactor 2023-01-16 09:42:43 +01:00
Leifer Mendez
6683715ad6 fix(cli): refactor 2023-01-16 09:21:26 +01:00
leifermendez
e72794a296 ci(version): automatic - "${date}" updated versions every packages 2023-01-13 21:36:53 +00:00
Leifer Mendez
e5ee70f088 Merge branch 'release/next' into dev 2023-01-13 22:34:34 +01:00
Leifer Mendez
bb1f60c6e3 Merge pull request #492 from codigoencasa/fix/refactor-cb
Fix/refactor cb
2023-01-13 22:34:09 +01:00
Leifer Mendez
b9a1703b20 Merge branch 'dev' into fix/refactor-cb 2023-01-13 22:34:03 +01:00
Leifer Mendez
f274379c53 chore(release): 0.1.17 2023-01-13 22:32:23 +01:00
Leifer Mendez
d18efc88a9 chore: improvement cli 2023-01-13 22:31:45 +01:00
leifermendez
03b5b441de ci(version): automatic - "${date}" updated versions every packages 2023-01-13 20:42:36 +00:00
Leifer Mendez
06862abece Merge pull request #491 from codigoencasa/dev
Dev
2023-01-13 21:40:11 +01:00
Leifer Mendez
d25307dd2d Merge branch 'release/next' into dev 2023-01-13 21:40:04 +01:00
Leifer Mendez
5362fcec7a Merge pull request #490 from codigoencasa/fix/refactor-cb
ci: 🐛 add message cli GIT
2023-01-13 21:36:55 +01:00
Leifer Mendez
2f8d5a3fb3 ci: 🐛 add message cli GIT 2023-01-13 21:34:40 +01:00
Leifer Mendez
4f32e6f2c2 Merge pull request #488 from codigoencasa/main
docs(git): added git
2023-01-13 21:28:37 +01:00
Leifer Mendez
553d7fcba9 Merge pull request #487 from cheveguerra/patch-2
docs: git como requisito e instrucciones de instalación
2023-01-13 21:27:29 +01:00
d483b91359 git como requisito e instrucciones
Se agregó Git como requisito e instrucciones para instalarlo en Windows
2023-01-13 13:41:19 -06:00
leifermendez
6aed100d96 ci(version): automatic - "${date}" updated versions every packages 2023-01-13 19:08:08 +00:00
Leifer Mendez
c8335c37c2 Merge pull request #486 from codigoencasa/dev
Dev
2023-01-13 20:06:13 +01:00
Leifer Mendez
4a7c2fe553 Merge branch 'release/next' into dev 2023-01-13 20:06:07 +01:00
Leifer Mendez
a02e373cd9 Merge pull request #485 from cheveguerra/dev
fix:  Se agregó @bot-whatsapp/portal a package.json
2023-01-13 20:05:33 +01:00
a9755da8c9 Merge branch 'dev' of https://github.com/cheveguerra/bot-whatsapp into dev 2023-01-13 11:57:57 -06:00
46a9fa6793 fix: se agrego @bot-whatsapp/portal a package.json
se agrego @bot-whatsapp/portal a package.json
2023-01-13 11:57:42 -06:00
Leifer Mendez
4ee1136115 Merge pull request #481 from codigoencasa/release/production
Release/production
2023-01-12 21:47:07 +01:00
Leifer Mendez
b60db404a9 Merge pull request #480 from codigoencasa/release/next
Release/next
2023-01-12 21:41:22 +01:00
Leifer Mendez
44efbd8518 Merge branch 'release/production' into release/next 2023-01-12 21:41:13 +01:00
leifermendez
8357eda573 ci(version): automatic - "${date}" updated versions every packages 2023-01-12 20:10:58 +00:00
Leifer Mendez
05dbf2f240 Merge pull request #478 from codigoencasa/dev
Dev
2023-01-12 21:09:04 +01:00
Leifer Mendez
b65c40e59b Merge branch 'release/next' into dev 2023-01-12 21:08:57 +01:00
Leifer Mendez
d8bb1418dd Merge pull request #477 from codigoencasa/fix/refactor-cb
Fix/refactor cb
2023-01-12 21:08:33 +01:00
Leifer Mendez
8f27d34081 ci(cli): fix 2023-01-12 21:04:44 +01:00
Leifer Mendez
ee30df73b8 ci(cli): fix 2023-01-12 21:04:04 +01:00
Leifer Mendez
8a1bdc5878 refactor(bot): 🔥 fallback 2023-01-12 16:35:43 +01:00
Leifer Mendez
f742caa9a4 refactor(bot): async callbacks 2023-01-12 11:43:58 +01:00
Leifer Mendez
a1ce98bdc8 docs: 🎨 more doc 2023-01-12 10:31:41 +01:00
Leifer Mendez
230981e267 fix(starters): added dockerfile 2023-01-12 09:35:06 +01:00
Leifer Mendez
7242ab92f7 Merge remote-tracking branch 'origin/dev' into fix/githubaction 2023-01-12 09:28:29 +01:00
Leifer Mendez
d3c937579a Merge pull request #469 from cheveguerra/dev
[feat] Modificación de Starters para agregar el portal del código QR
2023-01-12 09:27:49 +01:00
1302491869 Merge branch 'codigoencasa:dev' into dev 2023-01-11 16:08:35 -06:00
Leifer Mendez
45cbc09b0e Merge branch 'dev' of github.com:leifermendez/bot-whatsapp into fix/githubaction 2023-01-11 21:18:16 +01:00
Leifer Mendez
aaec075140 fix(ci): pre-release 2023-01-11 21:17:32 +01:00
Leifer Mendez
42b98801db chore(release): 0.1.16 2023-01-11 21:16:19 +01:00
Leifer Mendez
b681be3f11 Merge pull request #476 from codigoencasa/fix/githubaction
Fix/githubaction
2023-01-11 21:04:45 +01:00
Leifer Mendez
e442d05aa4 chore(version): launch release 2023-01-11 21:04:00 +01:00
Leifer Mendez
b682b0b6ba chore(release): 0.1.15 2023-01-11 21:03:43 +01:00
Leifer Mendez
96b6430efe Merge pull request #475 from codigoencasa/fix/githubaction
chore(release): 0.1.14
2023-01-11 20:49:47 +01:00
Leifer Mendez
9723e9d908 chore(release): 0.1.14 2023-01-11 20:49:04 +01:00
Leifer Mendez
1bea3401dc Merge pull request #474 from codigoencasa/release/next
Release/next
2023-01-11 20:44:37 +01:00
leifermendez
0f9e57df37 ci(version): automatic - "${date}" updated versions every packages 2023-01-11 19:44:10 +00:00
Leifer Mendez
49b9b77543 Merge pull request #473 from codigoencasa/dev
Dev
2023-01-11 20:42:01 +01:00
Leifer Mendez
804ea2b258 Merge branch 'release/next' into dev 2023-01-11 20:41:55 +01:00
Leifer Mendez
939cea03cc Merge pull request #472 from codigoencasa:fix/githubaction
ci: 🔥 fix github action
2023-01-11 20:41:12 +01:00
Leifer Mendez
89cf909888 ci: 🔥 fix github action 2023-01-11 20:40:41 +01:00
Leifer Mendez
f323184b34 Merge pull request #471 from codigoencasa/dev
Dev
2023-01-11 20:36:24 +01:00
Leifer Mendez
65ad00e4ec Merge branch 'release/next' into dev 2023-01-11 20:36:16 +01:00
Leifer Mendez
c4158cbac6 Merge pull request #470 from codigoencasa/feat/docs-modal-video
Feat/docs modal video
2023-01-11 20:35:52 +01:00
Leifer Mendez
5a06d2cf88 Merge branch 'feat/docs-modal-video' of github.com:leifermendez/bot-whatsapp into feat/docs-modal-video 2023-01-11 20:35:11 +01:00
Leifer Mendez
675046cc58 ci: 🔥 fix github action 2023-01-11 20:34:59 +01:00
f430380b4f fix: correccion en starters app.js para portal QR
correccion en starters app.js para portal QR
2023-01-11 10:49:48 -06:00
8a1c9f3b0e Merge branch 'codigoencasa:dev' into dev 2023-01-11 10:37:55 -06:00
eceb170df0 feat: mod de starters para habiltar portal
Modificacion de starters para habiltar el portal para el QR
2023-01-11 10:36:18 -06:00
leifermendez
ef03478683 ci(version): automatic - "${date}" updated versions every packages 2023-01-11 15:36:27 +00:00
Leifer Mendez
fb3e2913e3 Merge pull request #468 from codigoencasa/release/production
Release/production
2023-01-11 16:32:27 +01:00
leifermendez
9fb34cc9e0 ci(providers): 👍 updated versions stable providers 2023-01-11 15:30:38 +00:00
Leifer Mendez
3d2c3e1452 Merge pull request #467 from codigoencasa/dev
Dev
2023-01-11 16:27:57 +01:00
Leifer Mendez
83e262b818 Merge pull request #466 from codigoencasa/feat/docs-modal-video
Feat/docs modal video
2023-01-11 16:27:36 +01:00
Leifer Mendez
389169fc58 Merge branch 'feat/docs-modal-video' of github.com:leifermendez/bot-whatsapp into feat/docs-modal-video 2023-01-11 16:26:25 +01:00
Leifer Mendez
f80a051fa9 chore(release): 0.1.13 2023-01-11 16:26:16 +01:00
Leifer Mendez
9688ec1844 chore(release): 0.1.13 2023-01-11 16:26:04 +01:00
leifermendez
288894ee8e ci(providers): 👍 updated versions stable providers 2023-01-11 15:22:46 +00:00
Leifer Mendez
f3151850d5 Merge pull request #465 from codigoencasa/dev
Dev
2023-01-11 16:19:49 +01:00
Leifer Mendez
49e9c70d7c Merge pull request #464 from codigoencasa/feat/docs-modal-video
Feat/docs modal video
2023-01-11 16:19:28 +01:00
Leifer Mendez
6a156183ad Merge branch 'feat/docs-modal-video' of github.com:leifermendez/bot-whatsapp into feat/docs-modal-video 2023-01-11 16:18:55 +01:00
Leifer Mendez
f029c7317a chore(release): 0.1.12 2023-01-11 16:18:47 +01:00
leifermendez
fea6276b89 ci(providers): 👍 updated versions stable providers 2023-01-11 15:16:00 +00:00
Leifer Mendez
4b8c1d0ec6 Merge pull request #463 from codigoencasa/dev
Dev
2023-01-11 16:13:54 +01:00
Leifer Mendez
552a425cc0 Merge pull request #462 from codigoencasa/feat/docs-modal-video
Feat/docs modal video
2023-01-11 16:13:21 +01:00
Leifer Mendez
7566059073 Merge branch 'feat/docs-modal-video' of github.com:leifermendez/bot-whatsapp into feat/docs-modal-video 2023-01-11 16:12:32 +01:00
Leifer Mendez
b321b03b2a chore(release): 0.1.12 2023-01-11 16:12:24 +01:00
Leifer Mendez
edf5fdcbdc chore(release): 0.1.12 2023-01-11 16:12:09 +01:00
Leifer Mendez
eb1fcbff22 chore(release): 0.1.11 2023-01-11 16:11:55 +01:00
leifermendez
68a6e4b241 ci(providers): 👍 updated versions stable providers 2023-01-11 14:39:57 +00:00
Leifer Mendez
837bbf3c36 Merge pull request #461 from codigoencasa/dev
Dev
2023-01-11 15:37:34 +01:00
Leifer Mendez
c8c5a03bad Merge pull request #460 from codigoencasa/feat/docs-modal-video
Feat/docs modal video
2023-01-11 15:37:06 +01:00
Leifer Mendez
353e25c204 Merge branch 'feat/docs-modal-video' of github.com:leifermendez/bot-whatsapp into feat/docs-modal-video 2023-01-11 15:36:27 +01:00
Leifer Mendez
be6c609570 chore: set MANUAL version to bypass 2023-01-11 15:36:19 +01:00
Leifer Mendez
c6f58e913d chore(release): 0.1.10 2023-01-11 15:35:47 +01:00
leifermendez
e2fec5d521 ci(providers): 👍 updated versions stable providers 2023-01-11 14:33:19 +00:00
Leifer Mendez
681ec2e1ab Merge pull request #459 from codigoencasa/dev
Dev
2023-01-11 15:31:37 +01:00
Leifer Mendez
0dc5f99089 Merge pull request #458 from codigoencasa/feat/docs-modal-video
Feat/docs modal video
2023-01-11 15:30:19 +01:00
Leifer Mendez
5c880eddf1 Merge branch 'dev' into feat/docs-modal-video 2023-01-11 15:30:04 +01:00
Leifer Mendez
57fc150331 Merge branch 'feat/docs-modal-video' of github.com:leifermendez/bot-whatsapp into feat/docs-modal-video 2023-01-11 15:28:41 +01:00
Leifer Mendez
9704bc0f02 docs: 📝 meta added 2023-01-11 15:28:30 +01:00
Leifer Mendez
7d65fee978 Merge pull request #457 from codigoencasa/dev
Dev
2023-01-11 15:16:41 +01:00
leifermendez
faa3a21ffe ci(providers): 👍 updated versions stable providers 2023-01-11 14:16:19 +00:00
Leifer Mendez
84f689cee1 Merge pull request #456 from codigoencasa/feat/docs-modal-video
Feat/docs modal video
2023-01-11 15:16:18 +01:00
Leifer Mendez
5175f66dd0 Merge branch 'feat/docs-modal-video' of github.com:leifermendez/bot-whatsapp into feat/docs-modal-video 2023-01-11 15:15:03 +01:00
Leifer Mendez
0af9ef2dae ci: 🔥 fix ci version name 2023-01-11 15:14:51 +01:00
leifermendez
787cdc69a0 ci(providers): 👍 updated versions stable providers 2023-01-11 13:45:16 +00:00
Leifer Mendez
f8ceb01eca Merge branch 'feat/docs-modal-video' of github.com:leifermendez/bot-whatsapp into feat/docs-modal-video 2023-01-11 14:41:22 +01:00
Leifer Mendez
d52951adf9 ci: 🔥 fix ci version name 2023-01-11 14:41:13 +01:00
leifermendez
c621d0ee24 ci(providers): 👍 updated versions stable providers 2023-01-11 13:36:55 +00:00
Leifer Mendez
f047ba6e71 ci: add github release
Dev
2023-01-11 14:34:09 +01:00
Leifer Mendez
401c012e00 ci: add github release
ci:  add github release
2023-01-11 14:33:46 +01:00
Leifer Mendez
39859f819c Merge branch 'feat/docs-modal-video' of github.com:leifermendez/bot-whatsapp into feat/docs-modal-video 2023-01-11 14:33:08 +01:00
Leifer Mendez
5b3e7cefde ci: add github release 2023-01-11 14:32:59 +01:00
Leifer Mendez
8436d7b0d3 ci: add github release
ci:  add github release
2023-01-11 14:27:34 +01:00
Leifer Mendez
135961daf0 ci: add github release
ci:  add github release
2023-01-11 14:26:21 +01:00
leifermendez
375a997f25 ci(providers): 👍 updated versions stable providers 2023-01-11 12:49:52 +00:00
Leifer Mendez
625ca405fc Merge branch 'feat/docs-modal-video' of github.com:leifermendez/bot-whatsapp into feat/docs-modal-video 2023-01-11 13:48:45 +01:00
Leifer Mendez
8e3413ca80 ci: add github release 2023-01-11 13:48:33 +01:00
Leifer Mendez
09407401eb ci: add github release
ci:  add github release
2023-01-11 13:39:03 +01:00
Leifer Mendez
1fa17dc601 ci: add github release
ci:  add github release
2023-01-11 13:38:31 +01:00
Leifer Mendez
73f3e6245d Merge branch 'release/next' into dev 2023-01-11 13:38:17 +01:00
leifermendez
afb127278a ci(providers): 👍 updated versions stable providers 2023-01-11 12:38:01 +00:00
Leifer Mendez
15bfb19853 Merge branch 'feat/docs-modal-video' of github.com:leifermendez/bot-whatsapp into feat/docs-modal-video 2023-01-11 13:34:01 +01:00
Leifer Mendez
d90a42b962 ci: add github release 2023-01-11 13:33:52 +01:00
leifermendez
0619641f82 ci(providers): 👍 updated versions stable providers 2023-01-11 12:33:39 +00:00
Leifer Mendez
d00547866a ci: add github release 2023-01-11 13:31:34 +01:00
Leifer Mendez
ca978867ff ci: add github release
ci:  add github release
2023-01-11 13:30:38 +01:00
Leifer Mendez
af44ed1268 ci: add github release 2023-01-11 13:25:18 +01:00
Leifer Mendez
2a416bf751 docs: 📝 meta added
docs: 📝 meta added
2023-01-11 11:59:59 +01:00
Leifer Mendez
2fc274725d docs: 📝 meta added 2023-01-11 11:58:25 +01:00
Leifer Mendez
ecde23fdea fix: 🔥 update qr package 2023-01-10 22:46:08 +01:00
Leifer Mendez
a73ff9c217 chore(release): 0.1.8
chore(release): 0.1.8
2023-01-10 19:46:46 +01:00
Leifer Mendez
16e4575777 chore(release): 0.1.8 2023-01-10 19:45:31 +01:00
Leifer Mendez
74a1301342 chore(release): 0.1.7 2023-01-10 19:45:17 +01:00
Leifer Mendez
210c013290 ci: change set commit
ci:  change set commit
2023-01-10 19:43:17 +01:00
Leifer Mendez
bfb76c87a1 ci: change set commit 2023-01-10 19:42:35 +01:00
Leifer Mendez
8f2eb6d4f2 Merge pull request #440 from codigoencasa/feat/docs-twilio
ci(version):  automatic - "${date}" updated versions every packages
2023-01-10 19:28:55 +01:00
Leifer Mendez
44dfe8ed1a ci(version): automatic - "${date}" updated versions every packages 2023-01-10 19:28:00 +01:00
Leifer Mendez
63ecac6f2b Merge pull request #438 from codigoencasa/feat/docs-twilio
Feat/docs twilio
2023-01-10 19:25:56 +01:00
Leifer Mendez
ac72c5e4e7 ci: change set commit 2023-01-10 19:25:17 +01:00
Leifer Mendez
50d64596c7 Merge commit '4289b7c3ddb35492aa83f75510c2e0477bbebe98' into feat/docs-twilio 2023-01-10 19:22:05 +01:00
Leifer Mendez
a7801d1fa2 Merge branch 'feat/docs-twilio' of github.com:leifermendez/bot-whatsapp into feat/docs-twilio 2023-01-10 19:21:46 +01:00
Leifer Mendez
74e6aae631 Merge commit 'a6607f1896c951474be8a72b78bf65d123bd4879' into feat/docs-twilio 2023-01-10 19:21:13 +01:00
Leifer Mendez
c913d5ee5c ci: change set commit 2023-01-10 19:21:02 +01:00
leifermendez
eafd27c25a ci(version): automatic - "${date}" updated versions every packages 2023-01-10 18:17:47 +00:00
Leifer Mendez
4289b7c3dd Merge pull request #436 from codigoencasa/next-release
ci(providers): 👍 updated versions stable providers
2023-01-10 19:16:30 +01:00
leifermendez
c793890c50 ci(providers): 👍 updated versions stable providers 2023-01-10 18:16:18 +00:00
Leifer Mendez
48a87fff26 ci(providers): 👍 updated versions stable providers
ci(providers): 👍 updated versions stable providers
2023-01-10 19:16:07 +01:00
Leifer Mendez
98bff0285d Merge branch 'next-release' into dev 2023-01-10 19:15:55 +01:00
Leifer Mendez
f5b8e42608 ci(providers): 👍 updated versions stable providers
ci(providers): 👍 updated versions stable providers
2023-01-10 19:15:30 +01:00
Leifer Mendez
6469c83552 Merge branch 'feat/docs-twilio' of github.com:leifermendez/bot-whatsapp into feat/docs-twilio 2023-01-10 19:14:33 +01:00
Leifer Mendez
dba33359a0 ci: push tag pre- 2023-01-10 19:14:18 +01:00
leifermendez
14f3893727 ci(providers): 👍 updated versions stable providers 2023-01-10 17:54:00 +00:00
Leifer Mendez
a6607f1896 ci: change set commit
ci:  change set commit
2023-01-10 18:53:37 +01:00
Leifer Mendez
9669cc0807 ci: change set commit
ci:  change set commit
2023-01-10 18:53:10 +01:00
Leifer Mendez
1ee05d925a Merge branch 'feat/docs-twilio' of github.com:leifermendez/bot-whatsapp into feat/docs-twilio 2023-01-10 18:52:18 +01:00
Leifer Mendez
3e18bc1f57 ci: change set commit 2023-01-10 18:52:01 +01:00
leifermendez
5872d860c9 ci(version): automatic - "${date}" updated versions every packages 2023-01-10 17:44:02 +00:00
Leifer Mendez
caa2a42933 chore(release): 0.1.6
chore(release): 0.1.6
2023-01-10 18:42:09 +01:00
leifermendez
6b407a1d72 ci(providers): 👍 updated versions stable providers 2023-01-10 17:42:02 +00:00
Leifer Mendez
da67b75d98 chore(release): 0.1.6
chore(release): 0.1.6
2023-01-10 18:41:37 +01:00
Leifer Mendez
28b5739f3f Merge branch 'next-release' into dev 2023-01-10 18:41:29 +01:00
Leifer Mendez
2d9da1e584 chore(release): 0.1.6
chore(release): 0.1.6
2023-01-10 18:41:07 +01:00
Leifer Mendez
11bcb3f2c8 Merge branch 'feat/docs-twilio' of github.com:leifermendez/bot-whatsapp into feat/docs-twilio 2023-01-10 18:40:10 +01:00
Leifer Mendez
7731f4149e chore(release): 0.1.6 2023-01-10 18:39:07 +01:00
Leifer Mendez
ae645643d5 chore(release): 0.1.5 2023-01-10 18:38:57 +01:00
leifermendez
9960227006 ci(version): automatic - "${date}" updated versions every packages 2023-01-10 17:38:41 +00:00
Leifer Mendez
c0bbf5c48f chore(release): 0.1.4 2023-01-10 18:38:41 +01:00
Leifer Mendez
512207207c docs: 📝 add more documentation about twilio
docs: 📝 add more documentation about twilio
2023-01-10 18:37:13 +01:00
Leifer Mendez
200dd6b187 docs: 📝 add more documentation about twilio
docs: 📝 add more documentation about twilio
2023-01-10 18:36:38 +01:00
Leifer Mendez
cad73dca99 Merge branch 'next-release' into dev 2023-01-10 18:36:29 +01:00
leifermendez
2114f997db ci(providers): 👍 updated versions stable providers 2023-01-10 17:11:25 +00:00
Leifer Mendez
c5d4d82538 docs: 📝 add more documentation about twilio
docs: 📝 add more documentation about twilio
2023-01-10 18:10:38 +01:00
Leifer Mendez
fdab223786 docs: 📝 add more documentation about twilio 2023-01-10 18:07:55 +01:00
Leifer Mendez
f4d1ae3199 docs: 📝 add more documentation about twilio 2023-01-10 18:04:34 +01:00
Leifer Mendez
527eac4962 Merge pull request #418 from codigoencasa/next-release
Next release
2023-01-10 11:07:31 +01:00
leifermendez
8ef6d6b560 ci(version): automatic - "${date}" updated versions every packages 2023-01-10 09:57:06 +00:00
Leifer Mendez
0d588f067f Merge pull request #417 from codigoencasa/dev
Dev
2023-01-10 10:54:50 +01:00
Leifer Mendez
b4368fd30a Merge branch 'next-release' into dev 2023-01-10 10:54:39 +01:00
Leifer Mendez
b0dd007918 Merge pull request #415 from codigoencasa/feature/qr-file-name
Feature/qr file name
2023-01-10 10:52:18 +01:00
Leifer Mendez
246ecdc11a feat: qr portal 2023-01-10 10:44:49 +01:00
Leifer Mendez
891ea75f62 Merge branch 'feature/qr-file-name' of github.com:leifermendez/bot-whatsapp into feature/qr-file-name 2023-01-10 10:42:08 +01:00
Leifer Mendez
af8b401d07 feat: qr portal 2023-01-10 10:41:56 +01:00
leifermendez
3658efd98a ci(version): automatic - "${date}" updated versions every packages 2023-01-09 21:30:46 +00:00
leifermendez
fd044fb169 ci(providers): 👍 updated versions stable providers 2023-01-09 21:28:34 +00:00
Leifer Mendez
3fb0f2282c Merge pull request #414 from codigoencasa/dev
Dev
2023-01-09 22:28:20 +01:00
Leifer Mendez
46ef98cb23 Merge branch 'next-release' into dev 2023-01-09 22:28:13 +01:00
Leifer Mendez
b61a4d7fa0 Merge pull request #412 from codigoencasa/feature/qr-file-name
Feature/qr file name
2023-01-09 22:27:42 +01:00
Leifer Mendez
6417f8e63b Merge branch 'feature/qr-file-name' of github.com:leifermendez/bot-whatsapp into feature/qr-file-name 2023-01-09 22:26:46 +01:00
Leifer Mendez
20f752e6c1 fix: fix inject port args 2023-01-09 22:26:34 +01:00
leifermendez
2b37e5a29d ci(providers): 👍 updated versions stable providers 2023-01-09 20:29:26 +00:00
Leifer Mendez
8ec7c2108a Merge pull request #410 from codigoencasa/feature/qr-file-name
fix:  fix inject port args
2023-01-09 21:28:32 +01:00
Leifer Mendez
dfc7847573 Merge branch 'feature/qr-file-name' of github.com:leifermendez/bot-whatsapp into feature/qr-file-name 2023-01-09 21:27:45 +01:00
Leifer Mendez
7a23eb0cc6 fix: fix inject port args 2023-01-09 21:27:35 +01:00
leifermendez
ab2a21ee42 ci(providers): 👍 updated versions stable providers 2023-01-09 18:48:23 +00:00
leifermendez
249a97862f ci(version): automatic - "${date}" updated versions every packages 2023-01-09 18:48:18 +00:00
Leifer Mendez
feb9ede912 Merge pull request #409 from codigoencasa/dev
Dev
2023-01-09 19:46:21 +01:00
Leifer Mendez
03918fb091 Merge branch 'next-release' into dev 2023-01-09 19:46:12 +01:00
Leifer Mendez
1fee5b6bfa Merge pull request #407 from codigoencasa/feature/qr-file-name
feat:  qr code filename
2023-01-09 19:45:03 +01:00
Leifer Mendez
131d3b7f03 Merge pull request #405 from codigoencasa:feature/qr-file-name
Feature/qr-file-name
2023-01-09 19:43:58 +01:00
Leifer Mendez
d794f604ac feat: qr code filename 2023-01-09 19:43:22 +01:00
leifermendez
b2559731da ci(version): automatic - "${date}" updated versions every packages 2023-01-09 18:04:14 +00:00
Leifer Mendez
f0c332e278 Merge pull request #404 from codigoencasa/dev
Dev
2023-01-09 18:59:49 +01:00
Leifer Mendez
4450245d91 Merge branch 'next-release' into dev 2023-01-09 18:59:41 +01:00
Leifer Mendez
ca960cd80c Merge pull request #402 from codigoencasa/feature/portal
Feature/portal
2023-01-09 18:55:18 +01:00
Leifer Mendez
4d721f99e2 Merge branch 'feature/portal' of github.com:leifermendez/bot-whatsapp into feature/portal 2023-01-09 18:54:47 +01:00
Leifer Mendez
cb2e8692a3 feat: new portal web for qr scan 2023-01-09 18:54:04 +01:00
leifermendez
969ffe177f ci(providers): 👍 updated versions stable providers 2023-01-09 17:51:39 +00:00
Leifer Mendez
83383e2022 Merge pull request #400 from codigoencasa/feature/portal
Feature/portal
2023-01-09 18:48:46 +01:00
Leifer Mendez
09aa3c8ca9 Merge branch 'feature/portal' of github.com:leifermendez/bot-whatsapp into feature/portal 2023-01-09 18:47:02 +01:00
Leifer Mendez
9e93795e6f feat: new portal web for qr scan 2023-01-09 18:46:54 +01:00
Leifer Mendez
3c178ea113 feat: new portal web for qr scan 2023-01-09 18:44:52 +01:00
Leifer Mendez
1f1f564f4e feat: new portal web for qr scan 2023-01-09 18:44:38 +01:00
leifermendez
21cc0e3c7d ci(providers): 👍 updated versions stable providers 2023-01-09 17:42:14 +00:00
Leifer Mendez
40c51236db feat: new portal web for qr scan
feat:  new portal web for qr scan
2023-01-09 18:38:39 +01:00
Leifer Mendez
3de5f4b77a feat: new portal web for qr scan 2023-01-09 18:37:58 +01:00
Leifer Mendez
c6af472d42 Merge pull request #396 from codigoencasa/next-release
Next release
2023-01-08 17:01:13 +01:00
leifermendez
1c5da9cc6a ci(version): automatic - "${date}" updated versions every packages 2023-01-08 15:52:28 +00:00
Leifer Mendez
96bfb9af4e fix: add Dockerfile, starter
fix:  add Dockerfile, starter
2023-01-08 16:51:06 +01:00
Leifer Mendez
dd07526a3d Merge branch 'next-release' into dev 2023-01-08 16:50:58 +01:00
Leifer Mendez
fd935b9785 fix: add Dockerfile, starter
fix:  add Dockerfile, starter
2023-01-08 16:48:17 +01:00
Leifer Mendez
4e0d33c6bb fix: add Dockerfile, starter 2023-01-08 16:47:28 +01:00
Leifer Mendez
5e6077dd8f Merge commit '41de8b9b5af5ffa31d8a1212c03d446d3611f24d' into feat/ci-02 2023-01-08 16:11:33 +01:00
Leifer Mendez
41de8b9b5a Merge pull request #390 from cheveguerra/dev
Se agregan dockerfile y web server para código QR a Starters
2023-01-08 16:11:20 +01:00
Leifer Mendez
5d0929efb4 Merge pull request #391 from codigoencasa/fix/wweb-docker
Fix/wweb docker
2023-01-08 16:11:02 +01:00
Leifer Mendez
5a033da83a fix(provider): fix error docker as root user 2023-01-08 15:54:32 +01:00
Leifer Mendez
8ff9cacae0 Merge remote-tracking branch 'origin/dev' into feat/ci-02 2023-01-08 14:30:04 +01:00
f9e3bbc665 feat: agregamos dockerfile y webserver a starters
agregamos  dockerfile y webserver a starters
2023-01-08 04:57:27 -06:00
e5f6cf8563 Merge branch 'codigoencasa:dev' into dev 2023-01-07 17:03:27 -06:00
leifermendez
2ad57a8be1 ci(version): automatic - "${date}" updated versions every packages 2023-01-07 16:57:52 +00:00
leifermendez
4f2fbaf21b ci(providers): 👍 updated versions stable providers 2023-01-07 16:57:18 +00:00
Leifer Mendez
b7694d7857 build: fix
build:  fix
2023-01-07 17:56:38 +01:00
Leifer Mendez
b3eec37fa9 Merge branch 'next-release' into dev 2023-01-07 17:56:32 +01:00
Leifer Mendez
bdbf529cb6 build: fix
build:  fix
2023-01-07 17:56:13 +01:00
Leifer Mendez
4ff02d2bfa build: fix 2023-01-07 17:55:11 +01:00
Leifer Mendez
2ddea5468d fix(provider): fix send image baileys 2023-01-07 14:59:48 +01:00
Leifer Mendez
391e11ce73 fix(provider): fix send image baileys 2023-01-07 14:59:25 +01:00
Leifer Mendez
5d10cb9026 fix(provider): fix send image baileys 2023-01-07 14:34:17 +01:00
leifermendez
716349a839 ci(providers): 🚩 Check BREAKING CHANGE 2023-01-07 09:08:56 +00:00
Leifer Mendez
9e0a61b7ba Merge branch 'feat/ci-02' of github.com:leifermendez/bot-whatsapp into feat/ci-02 2023-01-06 21:20:18 +01:00
Leifer Mendez
6ea377e9e5 build: working fallback, flowDynamic 2023-01-06 21:20:08 +01:00
leifermendez
8017426cfc ci(version): automatic - "${date}" updated versions every packages 2023-01-06 19:18:41 +00:00
leifermendez
b588479fd1 ci(providers): 👍 updated versions stable providers 2023-01-06 19:17:18 +00:00
Leifer Mendez
25f90e4162 Merge pull request #385 from codigoencasa/dev
Dev
2023-01-06 20:16:58 +01:00
Leifer Mendez
b2e57396fb Merge branch 'next-release' into dev 2023-01-06 20:16:52 +01:00
Leifer Mendez
df786f7d34 Merge pull request #384 from codigoencasa/feat/ci-02
ci(providers): 👍 updated versions stable providers
2023-01-06 20:16:31 +01:00
leifermendez
930e120d70 ci(version): automatic - "${date}" updated versions every packages 2023-01-06 15:09:04 +00:00
Leifer Mendez
0ebead27f5 Merge pull request #383 from codigoencasa/dev
Dev
2023-01-06 16:07:48 +01:00
Leifer Mendez
397c143952 Merge branch 'next-release' into dev 2023-01-06 16:07:42 +01:00
leifermendez
0451043a21 ci(providers): 👍 updated versions stable providers 2023-01-06 15:05:32 +00:00
Leifer Mendez
2cb032a5da Merge pull request #381 from codigoencasa/feat/ci-02
Feat/ci 02
2023-01-06 16:04:29 +01:00
Leifer Mendez
a31ded6b02 Merge branch 'feat/ci-02' of github.com:leifermendez/bot-whatsapp into feat/ci-02 2023-01-06 16:03:42 +01:00
Leifer Mendez
e8e14d3b65 build: ready for video 2023-01-06 15:12:33 +01:00
Leifer Mendez
a6c10fe414 chore: 🎨 working 2023-01-06 14:31:04 +01:00
b040790129 Merge branch 'codigoencasa:dev' into dev 2023-01-06 07:01:34 -06:00
leifermendez
a71566f2ad ci(version): automatic - "${date}" updated versions every packages 2023-01-06 11:45:52 +00:00
leifermendez
2040f857a5 ci(providers): 👍 updated versions stable providers 2023-01-06 11:44:19 +00:00
cheveguerra
ec2041b75a ci(providers): 👍 updated versions stable providers 2023-01-06 06:46:09 +00:00
d3eb10d1b3 Merge branch 'dev' of https://github.com/cheveguerra/bot-whatsapp into dev 2023-01-06 00:44:48 -06:00
cheveguerra
983db5c7b8 ci(providers): 👍 updated versions stable providers 2023-01-06 06:29:55 +00:00
95947cdefc Merge branch 'codigoencasa:dev' into dev 2023-01-06 00:29:05 -06:00
cheveguerra
8dad0a49b1 ci(providers): 👍 updated versions stable providers 2023-01-05 15:33:48 +00:00
cheveguerra
faa4ea0152 ci(providers): 👍 updated versions stable providers 2023-01-05 00:44:27 +00:00
145 changed files with 4794 additions and 1505 deletions

View File

@@ -1 +1,2 @@
packages/docs/*
packages/docs/*
packages/portal/*

View File

@@ -39,8 +39,14 @@ jobs:
- name: Check Twilio
run: yarn node ./scripts/checker.js --name=twilio --stable=true
- name: Add and commit changes to gh-pages branch
run: |
git config --local user.email 'action@github.com'
git config --local user.name 'GitHub Action'
git add .
- uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: 'ci(providers): 🚩 Check BREAKING CHANGE'
commit_message: 'ci(providers): check provider versions'
create_branch: true
branch: feature/breaking-change
branch: feature/providers-major

View File

@@ -1,45 +0,0 @@
name: Rev Providers
on:
pull_request:
branches:
- dev
jobs:
check-npm:
name: Install Dependencies
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 16.x
cache: 'yarn'
registry-url: https://registry.npmjs.org/
- run: corepack enable
- name: Install NPM Dependencies
run: yarn install --immutable --network-timeout 300000
- name: Check Baileys
run: yarn node ./scripts/checker.js --name=baileys --stable=true
- name: Check Venom
run: yarn node ./scripts/checker.js --name=venom --stable=true
- name: Check web-whatsapp
run: yarn node ./scripts/checker.js --name=web-whatsapp --stable=true
- name: Check Meta
run: yarn node ./scripts/checker.js --name=meta --stable=true
- name: Check Twilio
run: yarn node ./scripts/checker.js --name=twilio --stable=true
- uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: 'ci(providers): 👍 updated versions stable providers'

View File

@@ -29,7 +29,7 @@ jobs:
run: yarn install --immutable --network-timeout 300000
- name: Build Package
run: yarn build
run: yarn build:full
- name: Build Eslint rules
run: yarn lint:fix
@@ -56,3 +56,55 @@ jobs:
- name: Unit Tests
run: yarn test
############ UNIT TEST ############
check-providers:
name: Check Providers Versions
runs-on: ubuntu-latest
outputs:
commit: ${{ steps.vars.outputs.commit }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
ref: ${{github.event.after}}
persist-credentials: false
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: 16.x
cache: 'yarn'
registry-url: https://registry.npmjs.org/
- run: corepack enable
- name: Install NPM Dependencies
run: yarn install --immutable --network-timeout 300000
- name: Check Baileys
run: yarn node ./scripts/checker.js --name=baileys --stable=true
- name: Check Venom
run: yarn node ./scripts/checker.js --name=venom --stable=true
- name: Check web-whatsapp
run: yarn node ./scripts/checker.js --name=web-whatsapp --stable=true
- name: Check Meta
run: yarn node ./scripts/checker.js --name=meta --stable=true
- name: Check Twilio
run: yarn node ./scripts/checker.js --name=twilio --stable=true
- name: Set output
id: vars
run: echo "commit=$(git log --format=%B -n 1 ${{github.event.after}})" >> $GITHUB_OUTPUT
- name: Commit & Push changes
uses: actions-js/push@master
with:
branch: feature/providers-major
github_token: ${{ secrets.GITHUB_TOKEN }}
force: true

View File

@@ -13,7 +13,7 @@ name: 'CodeQL'
on:
push:
branches: ['main', dev, next-release]
branches: [release/next]
pull_request:
# The branches below must be a subset of the branches above
branches: ['main']
@@ -22,6 +22,7 @@ on:
jobs:
analyze:
if: ${{ !github.event.act }}
name: Analyze
runs-on: ubuntu-latest
permissions:

View File

@@ -1,12 +1,8 @@
name: Revisando Colaboradores
on:
push:
branches:
- main
pull_request:
branches:
- dev
types: [closed]
schedule:
- cron: '0 9 * * *'
jobs:
contrib-readme-job:

View File

@@ -13,6 +13,7 @@ on:
jobs:
############ DOCUMENTATION BUILD ############
build-documentation:
if: ${{ !github.event.act }}
name: Build Package
runs-on: ubuntu-latest

View File

@@ -3,12 +3,11 @@ name: 📄 (PROD) Desplegando documentacion
on:
push:
branches:
- main
- next-release
- release/next
jobs:
############ DOCUMENTATION BUILD ############
build-documentation:
build-documentation-prod:
name: Build Package
runs-on: ubuntu-latest

View File

@@ -3,7 +3,7 @@ name: 🚀 (DEV) Liberando versiones
on:
push:
branches:
- next-release
- release/next
jobs:
############ RELEASE ############
@@ -27,7 +27,7 @@ jobs:
run: yarn install --immutable --network-timeout 300000
- name: Build Package
run: yarn build
run: yarn build:full
- name: Release @bot-whatsapp/bot
run: yarn node ./scripts/release.js --name=bot --version= --token="${{ secrets.NPM_TOKEN }}"
@@ -44,6 +44,12 @@ jobs:
- name: Release @bot-whatsapp/provider
run: yarn node ./scripts/release.js --name=provider --version= --token="${{ secrets.NPM_TOKEN }}"
- name: Release @bot-whatsapp/contexts
run: yarn node ./scripts/release.js --name=contexts --version= --token="${{ secrets.NPM_TOKEN }}"
- name: Release @bot-whatsapp/portal
run: yarn node ./scripts/release.js --name=portal --version= --token="${{ secrets.NPM_TOKEN }}"
- name: Commit Versioning & Push changes
uses: stefanzweifel/git-auto-commit-action@v4
with:

View File

@@ -2,12 +2,12 @@ name: 🚀⚡ Liberando versiones
on:
push:
tags:
- 'v*.*.*'
branches:
- release/production
jobs:
############ RELEASE ############
release:
release-prod:
if: ${{ !github.event.act }}
name: Release
runs-on: ubuntu-latest
steps:
@@ -27,32 +27,53 @@ jobs:
- run: corepack enable
- name: Set User
run: git config --global user.email "leifer.contacto@gmail.com" && git config --global user.name "Leifer Mendez"
- name: Install NPM Dependencies
run: yarn install --immutable --network-timeout 300000
- name: Build Package
run: yarn build
- name: Release @bot-whatsapp/bot
run: yarn node ./scripts/release.js --name=bot --version="${{ steps.vars.outputs.tag }}" --token="${{ secrets.NPM_TOKEN }}"
- name: Release @bot-whatsapp/cli
run: yarn node ./scripts/release.js --name=cli --version="${{ steps.vars.outputs.tag }}" --token="${{ secrets.NPM_TOKEN }}"
- name: Release @bot-whatsapp/create-bot-whatsapp
run: yarn node ./scripts/release.js --name=create-bot-whatsapp --version="${{ steps.vars.outputs.tag }}" --token="${{ secrets.NPM_TOKEN }}"
- name: Release @bot-whatsapp/database
run: yarn node ./scripts/release.js --name=database --version="${{ steps.vars.outputs.tag }}" --token="${{ secrets.NPM_TOKEN }}"
- name: Release @bot-whatsapp/provider
run: yarn node ./scripts/release.js --name=provider --version="${{ steps.vars.outputs.tag }}" --token="${{ secrets.NPM_TOKEN }}"
- name: Set CHANGELOG
run: yarn release
- name: get-npm-version
id: package-version
uses: martinbeentjes/npm-get-version-action@main
- name: Build Package
run: yarn build:full
- name: Release @bot-whatsapp/bot
run: yarn node ./scripts/release.js --name=bot --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
- name: Release @bot-whatsapp/cli
run: yarn node ./scripts/release.js --name=cli --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
- name: Release @bot-whatsapp/create-bot-whatsapp
run: yarn node ./scripts/release.js --name=create-bot-whatsapp --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
- name: Release @bot-whatsapp/database
run: yarn node ./scripts/release.js --name=database --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
- name: Release @bot-whatsapp/provider
run: yarn node ./scripts/release.js --name=provider --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
- name: Release @bot-whatsapp/contexts
run: yarn node ./scripts/release.js --name=contexts --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
- name: Release @bot-whatsapp/portal
run: yarn node ./scripts/release.js --name=portal --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}"
- name: Release Github
run: yarn node ./scripts/github.js --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.OCTO_TOKEN }}"
- name: 'Run if changes have been detected'
run: |
git add .
git commit -m "chore(version): pre release"
- name: Commit Versioning & Push changes
if: github.event_name == 'push'
uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: 'release(version): 🚀 - "${{ steps.vars.outputs.tag }}" release'
branch: dev
commit_message: 'chore(version): launch release 🚀 "${{ steps.package-version.outputs.current-version}}"'

5
.gitignore vendored
View File

@@ -14,6 +14,10 @@ mediaSend/*
!mediaSend/nota-de-voz.mp3
.env
.wwebjs_auth
/session
/session/*
/tokens
/tokens/*
packages/cli/config.json
config.json
.yarnrc.yml
@@ -38,3 +42,4 @@ yarn-error.log
.npmrc
# Local Netlify folder
.netlify
.secrets

View File

@@ -2,6 +2,107 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [0.1.17](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.16...v0.1.17) (2023-01-13)
### Features
* mod de starters para habiltar portal ([eceb170](https://github.com/leifermendez/bot-whatsapp/commit/eceb170df03721dca4183b658c863b94fa04bc84))
### Bug Fixes
* **ci:** pre-release ([aaec075](https://github.com/leifermendez/bot-whatsapp/commit/aaec0751408ab49483d428810d94aaf7d46acb94))
* correccion en starters app.js para portal QR ([f430380](https://github.com/leifermendez/bot-whatsapp/commit/f430380b4f23d41702395c96c628bf13bf443278))
* **starters:** :zap: added dockerfile ([230981e](https://github.com/leifermendez/bot-whatsapp/commit/230981e2676361149cb2a99def7f705e75009260))
### [0.1.16](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.15...v0.1.16) (2023-01-11)
### [0.1.15](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.14...v0.1.15) (2023-01-11)
### [0.1.14](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.13...v0.1.14) (2023-01-11)
### [0.1.13](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.12...v0.1.13) (2023-01-11)
### [0.1.12](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.10...v0.1.12) (2023-01-11)
### [0.1.9-pre](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.9...v0.1.9-pre) (2023-01-10)
### [0.1.7-pre-1](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-alpha...v0.1.7-pre-1) (2023-01-10)
### [0.1.7-alpha](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-pre...v0.1.7-alpha) (2023-01-10)
### [0.1.11](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.10...v0.1.11) (2023-01-11)
### [0.1.9-pre](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.9...v0.1.9-pre) (2023-01-10)
### [0.1.7-pre-1](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-alpha...v0.1.7-pre-1) (2023-01-10)
### [0.1.7-alpha](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-pre...v0.1.7-alpha) (2023-01-10)
### [0.1.10](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.8...v0.1.10) (2023-01-11)
### Bug Fixes
* :fire: update qr package ([ecde23f](https://github.com/leifermendez/bot-whatsapp/commit/ecde23fdea65def209aa874af35a3f293e6b1a91))
### [0.1.8](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-pre...v0.1.8) (2023-01-10)
### [0.1.7](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-pre...v0.1.7) (2023-01-10)
### [0.1.6](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.5...v0.1.6) (2023-01-10)
### Features
* :zap: new portal web for qr scan ([cb2e869](https://github.com/leifermendez/bot-whatsapp/commit/cb2e8692a3f94c8b24993cd11dd564f094b0e4ef))
* :zap: new portal web for qr scan ([9e93795](https://github.com/leifermendez/bot-whatsapp/commit/9e93795e6fce38890045389da95184fef1fbe0da))
* :zap: new portal web for qr scan ([3c178ea](https://github.com/leifermendez/bot-whatsapp/commit/3c178ea113b140535a51f5dcd521dbb66251670e))
* :zap: new portal web for qr scan ([1f1f564](https://github.com/leifermendez/bot-whatsapp/commit/1f1f564f4e2e3aa13b84de500fe215e0c45c2770))
* :zap: new portal web for qr scan ([3de5f4b](https://github.com/leifermendez/bot-whatsapp/commit/3de5f4b77a10e30632ff7555f5af5d8e93cb2019))
* :zap: qr code filename ([d794f60](https://github.com/leifermendez/bot-whatsapp/commit/d794f604ac8a835e523709dbf18c9b1609bbd00e))
* :zap: qr portal ([246ecdc](https://github.com/leifermendez/bot-whatsapp/commit/246ecdc11a8c4e652867c842b612dc4ce73f9828))
* :zap: qr portal ([af8b401](https://github.com/leifermendez/bot-whatsapp/commit/af8b401d075e1c35065589ede61476461ce86b4d))
* agregamos dockerfile y webserver a starters ([f9e3bbc](https://github.com/leifermendez/bot-whatsapp/commit/f9e3bbc6655060408e4fdbe1d7e920c2ed4fca53))
### Bug Fixes
* :zap: add Dockerfile, starter ([4e0d33c](https://github.com/leifermendez/bot-whatsapp/commit/4e0d33c6bb46ad259774f6d0c38c6c0b5f8ca4a9))
* :zap: fix inject port args ([20f752e](https://github.com/leifermendez/bot-whatsapp/commit/20f752e6c1b1f7d11948fc4f2f8950f7834df7d9))
* :zap: fix inject port args ([7a23eb0](https://github.com/leifermendez/bot-whatsapp/commit/7a23eb0cc6f93ec21c5ab34e46981ae7a93f42ff))
* **provider:** :zap: fix send image baileys ([2ddea54](https://github.com/leifermendez/bot-whatsapp/commit/2ddea5468d235035478d4e91e63c821da19da179))
* **provider:** :zap: fix send image baileys ([391e11c](https://github.com/leifermendez/bot-whatsapp/commit/391e11ce738cd64792b5237d69f3739b0263c198))
* **provider:** :zap: fix send image baileys ([5d10cb9](https://github.com/leifermendez/bot-whatsapp/commit/5d10cb9026da60043e9a2f86117ebb04d0631a3f))
* **provider:** fix error docker as root user ([5a033da](https://github.com/leifermendez/bot-whatsapp/commit/5a033da83aee1f614120bccf27c9f330500cc7b0))
### [0.1.4](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.5...v0.1.4) (2023-01-10)
### Features
* :zap: new portal web for qr scan ([cb2e869](https://github.com/leifermendez/bot-whatsapp/commit/cb2e8692a3f94c8b24993cd11dd564f094b0e4ef))
* :zap: new portal web for qr scan ([9e93795](https://github.com/leifermendez/bot-whatsapp/commit/9e93795e6fce38890045389da95184fef1fbe0da))
* :zap: new portal web for qr scan ([3c178ea](https://github.com/leifermendez/bot-whatsapp/commit/3c178ea113b140535a51f5dcd521dbb66251670e))
* :zap: new portal web for qr scan ([1f1f564](https://github.com/leifermendez/bot-whatsapp/commit/1f1f564f4e2e3aa13b84de500fe215e0c45c2770))
* :zap: new portal web for qr scan ([3de5f4b](https://github.com/leifermendez/bot-whatsapp/commit/3de5f4b77a10e30632ff7555f5af5d8e93cb2019))
* :zap: qr code filename ([d794f60](https://github.com/leifermendez/bot-whatsapp/commit/d794f604ac8a835e523709dbf18c9b1609bbd00e))
* :zap: qr portal ([246ecdc](https://github.com/leifermendez/bot-whatsapp/commit/246ecdc11a8c4e652867c842b612dc4ce73f9828))
* :zap: qr portal ([af8b401](https://github.com/leifermendez/bot-whatsapp/commit/af8b401d075e1c35065589ede61476461ce86b4d))
* agregamos dockerfile y webserver a starters ([f9e3bbc](https://github.com/leifermendez/bot-whatsapp/commit/f9e3bbc6655060408e4fdbe1d7e920c2ed4fca53))
### Bug Fixes
* :zap: add Dockerfile, starter ([4e0d33c](https://github.com/leifermendez/bot-whatsapp/commit/4e0d33c6bb46ad259774f6d0c38c6c0b5f8ca4a9))
* :zap: fix inject port args ([20f752e](https://github.com/leifermendez/bot-whatsapp/commit/20f752e6c1b1f7d11948fc4f2f8950f7834df7d9))
* :zap: fix inject port args ([7a23eb0](https://github.com/leifermendez/bot-whatsapp/commit/7a23eb0cc6f93ec21c5ab34e46981ae7a93f42ff))
* **provider:** :zap: fix send image baileys ([2ddea54](https://github.com/leifermendez/bot-whatsapp/commit/2ddea5468d235035478d4e91e63c821da19da179))
* **provider:** :zap: fix send image baileys ([391e11c](https://github.com/leifermendez/bot-whatsapp/commit/391e11ce738cd64792b5237d69f3739b0263c198))
* **provider:** :zap: fix send image baileys ([5d10cb9](https://github.com/leifermendez/bot-whatsapp/commit/5d10cb9026da60043e9a2f86117ebb04d0631a3f))
* **provider:** fix error docker as root user ([5a033da](https://github.com/leifermendez/bot-whatsapp/commit/5a033da83aee1f614120bccf27c9f330500cc7b0))
### [0.1.3](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.2...v0.1.3) (2023-01-04)

View File

@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/root",
"version": "0.1.3",
"version": "0.1.17",
"description": "Bot de wahtsapp open source para MVP o pequeños negocios",
"main": "app.js",
"private": true,
@@ -13,12 +13,15 @@
"contexts:rollup": "rollup --config ./packages/contexts/rollup-contexts.config.js",
"database:rollup": "rollup --config ./packages/database/rollup-database.config.js",
"create-bot-whatsapp:rollup": "rollup --config ./packages/create-bot-whatsapp/rollup-create.config.js",
"portal:rollup": "rollup --config ./packages/portal/rollup-portal.config.js",
"format:check": "prettier --check ./packages",
"format:write": "prettier --write ./packages",
"fmt.staged": "pretty-quick --staged",
"lint:check": "eslint ./packages",
"lint:fix": "eslint --fix ./packages",
"build": "yarn run cli:rollup && yarn run bot:rollup && yarn run provider:rollup && yarn run database:rollup && yarn run contexts:rollup && yarn run create-bot-whatsapp:rollup",
"build:portal-web": "cd ./packages/portal/ && yarn run build.types && yarn run build.client && yarn run build.server && yarn run lint --fix",
"build:full": "yarn run build:portal-web && yarn run cli:rollup && yarn run bot:rollup && yarn run provider:rollup && yarn run database:rollup && yarn run contexts:rollup && yarn run create-bot-whatsapp:rollup && yarn run portal:rollup",
"build": "yarn run cli:rollup && yarn run bot:rollup && yarn run provider:rollup && yarn run database:rollup && yarn run contexts:rollup && yarn run create-bot-whatsapp:rollup && yarn run portal:rollup",
"copy.lib": "node ./scripts/move.js",
"test.unit": "node ./node_modules/uvu/bin.js packages test",
"test.coverage": "node ./node_modules/c8/bin/c8.js npm run test.unit",
@@ -39,6 +42,7 @@
"packages/database",
"packages/provider",
"packages/contexts",
"packages/portal",
"packages/docs"
],
"keywords": [
@@ -63,6 +67,7 @@
"devDependencies": {
"@commitlint/cli": "^17.3.0",
"@commitlint/config-conventional": "^17.3.0",
"@octokit/core": "^4.1.0",
"@rollup/plugin-commonjs": "^23.0.2",
"@rollup/plugin-json": "^5.0.1",
"@rollup/plugin-node-resolve": "^15.0.1",

View File

@@ -8,6 +8,9 @@ const { createWriteStream } = require('fs')
const logger = new Console({
stdout: createWriteStream(`${process.cwd()}/core.class.log`),
})
const QueuePrincipal = new Queue()
/**
* [ ] Escuchar eventos del provider asegurarte que los provider emitan eventos
* [ ] Guardar historial en db
@@ -67,7 +70,7 @@ class CoreClass {
const { body, from } = messageCtxInComming
let msgToSend = []
let fallBackFlag = false
if (!body) return
if (!body.length) return
const prevMsg = await this.databaseClass.getPrevByNumber(from)
@@ -84,20 +87,40 @@ class CoreClass {
this.databaseClass.save(ctxByNumber)
}
// 📄 Esta funcion se encarga de enviar un array de mensajes dentro de este ctx
const sendFlow = async (messageToSend, numberOrId) => {
const queue = []
for (const ctxMessage of messageToSend) {
const delayMs = ctxMessage?.options?.delay || 0
if (delayMs) await delay(delayMs)
QueuePrincipal.enqueue(() =>
Promise.all([
this.sendProviderAndSave(numberOrId, ctxMessage),
resolveCbEveryCtx(ctxMessage),
])
)
}
return Promise.all(queue)
}
// 📄 [options: fallBack]: esta funcion se encarga de repetir el ultimo mensaje
const fallBack = () => {
const fallBack = async () => {
fallBackFlag = true
msgToSend = this.flowClass.find(refToContinue?.keyword, true) || []
this.sendFlow(msgToSend, from)
await this.sendProviderAndSave(from, refToContinue)
QueuePrincipal.queue = []
return refToContinue
}
// 📄 [options: flowDynamic]: esta funcion se encarga de responder un array de respuesta esta limitado a 5 mensajes
// para evitar bloque de whatsapp
const flowDynamic = (listMsg = [], optListMsg = { limit: 3 }) => {
const flowDynamic = async (
listMsg = [],
optListMsg = { limit: 5, fallback: false }
) => {
if (!Array.isArray(listMsg))
throw new Error('Esto debe ser un ARRAY')
fallBackFlag = optListMsg.fallback
const parseListMsg = listMsg
.map(({ body }, index) =>
toCtx({
@@ -108,26 +131,38 @@ class CoreClass {
})
)
.slice(0, optListMsg.limit)
msgToSend = parseListMsg
this.sendFlow(msgToSend, from)
for (const msg of parseListMsg) {
await this.sendProviderAndSave(from, msg)
}
return
}
// 📄 Se encarga de revisar si el contexto del mensaje tiene callback o fallback
const resolveCbEveryCtx = async (ctxMessage) => {
if (prevMsg?.options?.capture) return cbEveryCtx(prevMsg?.ref)
if (!ctxMessage?.options?.capture)
return await cbEveryCtx(ctxMessage?.ref)
}
// 📄 Se encarga de revisar si el contexto del mensaje tiene callback y ejecutarlo
const cbEveryCtx = (inRef) => {
this.flowClass.allCallbacks[inRef](messageCtxInComming, {
const cbEveryCtx = async (inRef) => {
if (!this.flowClass.allCallbacks[inRef]) return Promise.resolve()
return this.flowClass.allCallbacks[inRef](messageCtxInComming, {
fallBack,
flowDynamic,
})
}
if (prevMsg?.ref) resolveCbEveryCtx(prevMsg)
// 📄 [options: callback]: Si se tiene un callback se ejecuta
if (!fallBackFlag) {
if (refToContinue?.options?.capture) cbEveryCtx(refToContinue?.ref)
for (const ite of this.flowClass.find(body)) {
if (!ite?.options?.capture) cbEveryCtx(ite?.ref)
}
}
//TODO AQUI
// if (!fallBackFlag) {
// if (prevMsg?.options?.capture) cbEveryCtx(prevMsg?.ref)
// for (const ite of this.flowClass.find(body)) {
// if (!ite?.options?.capture) cbEveryCtx(ite?.ref)
// }
// }
// 📄🤘(tiene return) [options: nested(array)]: Si se tiene flujos hijos los implementa
if (!fallBackFlag && prevMsg?.options?.nested?.length) {
@@ -138,11 +173,12 @@ class CoreClass {
msgToSend = this.flowClass.find(body, false, flowStandalone) || []
for (const ite of msgToSend) {
cbEveryCtx(ite?.ref)
}
// //TODO AQUI
// for (const ite of msgToSend) {
// cbEveryCtx(ite?.ref)
// }
this.sendFlow(msgToSend, from)
sendFlow(msgToSend, from)
return
}
@@ -153,13 +189,13 @@ class CoreClass {
if (['string', 'boolean'].includes(typeCapture) && valueCapture) {
msgToSend = this.flowClass.find(refToContinue?.ref, true) || []
this.sendFlow(msgToSend, from)
sendFlow(msgToSend, from)
return
}
}
msgToSend = this.flowClass.find(body) || []
this.sendFlow(msgToSend, from)
sendFlow(msgToSend, from)
}
/**
@@ -176,18 +212,6 @@ class CoreClass {
])
}
sendFlow = async (messageToSend, numberOrId) => {
const queue = []
for (const ctxMessage of messageToSend) {
const delayMs = ctxMessage?.options?.delay || 0
if (delayMs) await delay(delayMs)
Queue.enqueue(() =>
this.sendProviderAndSave(numberOrId, ctxMessage)
)
}
return Promise.all(queue)
}
/**
* @private
* @param {*} message

View File

@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/bot",
"version": "0.0.41-alpha.0",
"version": "0.0.66-alpha.0",
"description": "",
"main": "./lib/bundle.bot.cjs",
"scripts": {
@@ -28,5 +28,9 @@
},
"dependencies": {
"dotenv": "^16.0.3"
},
"repository": {
"type": "git",
"url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/bot"
}
}

View File

@@ -10,6 +10,7 @@ module.exports = [
banner: banner['banner.output'].join(''),
file: join(__dirname, 'lib', 'bundle.bot.cjs'),
format: 'cjs',
sourcemap: true,
},
plugins: [commonjs(), nodeResolve()],
},

View File

@@ -1,8 +1,8 @@
class Queue {
static queue = []
static pendingPromise = false
queue = []
pendingPromise = false
static enqueue(promise) {
enqueue(promise) {
return new Promise((resolve, reject) => {
this.queue.push({
promise,
@@ -13,7 +13,7 @@ class Queue {
})
}
static dequeue() {
dequeue() {
if (this.workingOnPromise) {
return false
}

View File

@@ -1,38 +1,65 @@
const { red, yellow, green, bgCyan } = require('kleur')
const { exec } = require('node:child_process')
const checkNodeVersion = () => {
console.log(bgCyan('🚀 Revisando tu Node.js'))
const version = process.version
const majorVersion = parseInt(version.replace('v', '').split('.').shift())
if (majorVersion < 16) {
console.error(
red(
`🔴 Se require Node.js 16 o superior. Actualmente esta ejecutando Node.js ${version}`
)
return new Promise((resolve, reject) => {
console.log(bgCyan('🚀 Revisando tu Node.js'))
const version = process.version
const majorVersion = parseInt(
version.replace('v', '').split('.').shift()
)
process.exit(1)
}
console.log(green(`Node.js compatible ${version}`))
console.log(``)
if (majorVersion < 16) {
console.error(
red(
`🔴 Se require Node.js 16 o superior. Actualmente esta ejecutando Node.js ${version}`
)
)
console.log(``)
reject('ERROR_NODE')
}
console.log(green(`Node.js: ${version} compatible ✅`))
console.log(``)
resolve()
})
}
const checkOs = () => {
console.log(bgCyan('🙂 Revisando tu sistema operativo'))
const os = process.platform
if (!os.includes('win32')) {
const messages = [
`El sistema operativo actual (${os}) posiblemente requiera`,
`una configuración adicional referente al puppeteer`,
``,
`Recuerda pasar por el WIKI`,
`🔗 https://github.com/leifermendez/bot-whatsapp/wiki/Instalación`,
``,
]
return new Promise((resolve) => {
console.log(bgCyan('🙂 Revisando tu sistema operativo'))
const os = process.platform
if (!os.includes('win32')) {
const messages = [
`El sistema operativo actual (${os}) posiblemente requiera`,
`una configuración adicional referente al puppeteer`,
``,
`Recuerda pasar por el WIKI`,
`🔗 https://github.com/leifermendez/bot-whatsapp/wiki/Instalación`,
``,
]
console.log(yellow(messages.join(' \n')))
}
console.log(``)
console.log(yellow(messages.join(' \n')))
}
console.log(green(`OS: compatible ✅`))
console.log(``)
resolve()
})
}
module.exports = { checkNodeVersion, checkOs }
const checkGit = () => {
return new Promise((resolve, reject) => {
console.log(bgCyan('🤓 Revisando GIT'))
exec('git --version', (error) => {
if (error) {
console.error(red(`🔴 Se require instalar GIT`))
console.log(``)
reject('ERROR_GIT')
} else {
console.log(green(`Git: Compatible ✅`))
console.log(``)
resolve()
}
})
})
}
module.exports = { checkNodeVersion, checkOs, checkGit }

View File

@@ -1,9 +1,9 @@
const prompts = require('prompts')
const { join } = require('path')
const { yellow, red, cyan, bgMagenta } = require('kleur')
const { yellow, red, cyan, bgMagenta, bgRed } = require('kleur')
const { existsSync } = require('fs')
const { copyBaseApp } = require('../create-app')
const { checkNodeVersion, checkOs } = require('../check')
const { checkNodeVersion, checkOs, checkGit } = require('../check')
const bannerDone = () => {
console.log(``)
@@ -21,6 +21,22 @@ const bannerDone = () => {
}
const startInteractive = async () => {
try {
console.clear()
await checkNodeVersion()
checkOs()
await checkGit()
console.clear()
await nextSteps()
} catch (e) {
console.error(bgRed(`Ups! 🙄 algo no va bien.`))
console.error(
bgRed(`Revisa los requerimientos minimos en la documentacion`)
)
}
}
const nextSteps = async () => {
const questions = [
{
type: 'text',
@@ -58,9 +74,6 @@ const startInteractive = async () => {
},
]
console.clear()
checkNodeVersion()
checkOs()
const onCancel = () => {
console.log('¡Proceso cancelado!')
return true

View File

@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/cli",
"version": "0.0.48-alpha.0",
"version": "0.0.72-alpha.0",
"description": "",
"main": "index.js",
"devDependencies": {
@@ -15,5 +15,9 @@
],
"bin": {
"bot": "./bin/cli.js"
},
"repository": {
"type": "git",
"url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/cli"
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/contexts",
"version": "0.0.1",
"version": "0.0.16-alpha.0",
"description": "",
"main": "./lib/bundle.contexts.cjs",
"files": [
@@ -13,5 +13,9 @@
},
"dependencies": {
"@bot-whatsapp/bot": "*"
},
"repository": {
"type": "git",
"url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/contexts"
}
}

View File

@@ -97,13 +97,21 @@ class DialogFlowContext extends CoreClass {
})
customPayload = {
media: fields?.media?.stringValue,
buttons: mapButtons,
options: {
media: fields?.media?.stringValue,
buttons: mapButtons,
},
}
const ctxFromDX = {
...customPayload,
answer: fields?.answer?.stringValue,
}
this.sendFlow([ctxFromDX], from)
return
}
const ctxFromDX = {
...customPayload,
answer: queryResult?.fulfillmentText,
}

View File

@@ -1,6 +1,6 @@
{
"name": "create-bot-whatsapp",
"version": "0.0.59-alpha.0",
"version": "0.0.93-alpha.0",
"description": "",
"main": "./lib/bundle.create-bot-whatsapp.cjs",
"files": [
@@ -11,5 +11,9 @@
"bin": "./bin/create.js",
"dependencies": {
"@bot-whatsapp/cli": "*"
},
"repository": {
"type": "git",
"url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/create-bot-whatsapp"
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/database",
"version": "0.0.40-alpha.0",
"version": "0.0.64-alpha.0",
"description": "Esto es el conector a mysql, pg, mongo",
"main": "./lib/mock/index.cjs",
"keywords": [],
@@ -19,5 +19,9 @@
"./mongo": "./lib/mongo/index.cjs",
"./json": "./lib/json/index.cjs",
"./mysql": "./lib/mysql/index.cjs"
},
"repository": {
"type": "git",
"url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/database"
}
}

View File

@@ -47,13 +47,20 @@ export default component$(() => {
npm create bot-whatsapp@latest
</code>
</div>
<div class="flex w-full sm:w-auto">
<div class="flex w-full sm:w-auto gap-3">
<a
href="/docs"
class="btn bg-gray-50 dark:bg-transparent"
>
Ver documentación
</a>
<a
target={'_blank'}
href="https://youtu.be/DEIyGyJNGa8"
class="btn bg-gray-50 dark:bg-transparent"
>
Ver video
</a>
</div>
</div>
</div>

View File

@@ -1,8 +1,8 @@
import Navigation from '../../../components/widgets/Navigation'
# Flow (Flujos)
# Flow
Los flujos hacen referencia al hecho de construir un flujo de conversación. Estos son flows y en ellos podemos observar que estan presente dos metodos importantes **addKeyword** y el **addAnswer**.
Los flujos hace referencia al hecho de construir un flujo de conversion. Esto es un flow podemos observar que estan presente dos metodos importantes **addKeyword** y el **addAnswer**.
Tan sencillo como decir **palabra/s clave** y **mensaje a responder**
@@ -23,6 +23,142 @@ const flowPrincipal = addKeyword(['hola', 'alo'])
---
## addKeyword()
Esta funcion se utliza para iniciar un flujo de conversion. <br /> Recibe un `string` o un `array`
de string `['hola','buenas']`.
**Opciones**
- sensitive: Sensible a mayusculas y minusculas por defecto `false`
```js
const { addKeyword } = require('@bot-whatsapp/bot')
const flowString = addKeyword('hola')
const flowArray = addKeyword(['hola', 'alo'])
const flowSensitive = addKeyword(['hola', 'alo'], {
sensitive: true,
})
```
---
## addAnswer()
Esta funcion se utliza para responder un mensaje despues del `addKeyword()`
**Opciones**
- delay: 0 (milisegundos)
- media: url de imagen
- buttons: array `[{body:'Boton1'}, {body:'Boton2'}, {body:'Boton3'}]`
- capture: false (para esperar respuesta)
- child: Objecto tipo flujo o arra de flujos hijos
```js
const { addKeyword } = require('@bot-whatsapp/bot')
const flowString = addKeyword('hola').addAnswer(
'Este mensaje se enviara 1 segundo despues',
{
delay: 1000,
}
)
const flowString = addKeyword('hola').addAnswer(
'Este mensaje envia una imagen',
{
media: 'https://i.imgur.com/0HpzsEm.png',
}
)
const flowString = addKeyword('hola').addAnswer(
'Este mensaje envia tres botones',
{
buttons: [
{ body: 'Boton 1' },
{ body: 'Boton 2' },
{ body: 'Boton 3' },
],
}
)
const flowString = addKeyword('hola').addAnswer(
'Este mensaje espera una respueta del usuario',
{
capture: true,
}
)
```
---
## ctx
Este argumento se utiliza para obtener el contexto de la conversación
```js
const { addKeyword } = require('@bot-whatsapp/bot')
const flowString = addKeyword('hola').addAnswer(
'Indica cual es tu email',
null,
(ctx) => {
console.log('👉 Informacion del contexto: ', ctx)
}
)
```
---
## fallBack()
Esta funcion se utliza para volver a enviar el ultimo mensaje abajo un ejemplo.
En el ejemplo de abajo esperamos que el usuario ingrese un mensaje que contenga `@` sino contiene
se repetira el mensaje `Indica cual es tu email`
```js
const { addKeyword } = require('@bot-whatsapp/bot')
const flowString = addKeyword('hola').addAnswer(
'Indica cual es tu email',
null,
(ctx, { fallBack }) => {
if (!ctx.body.includes('@')) return fallBack()
}
)
```
---
## flowDynamic()
Esta funcion se utliza para devolver mensajes dinamicos que pueden venir de una API o Base de datos.
La funcion recibe un array que debe contener la siguiente estrucutura:
`[{body:'Mensaje}, {body:'Mensaje2}]`
```js
const { addKeyword } = require('@bot-whatsapp/bot')
const flowString = addKeyword('hola')
.addAnswer('Indica cual es tu email', null, async (ctx, {flowDynamic}) => {
const mensajesDB = () => {
const categories = db.find(...)
const mapDatos = categories.map((c) => ({body:c.name}))
return mapDatos
}
await flowDynamic(mensajesDB())
})
```
---
<Navigation
pages={[
{ name: 'Conceptos', link: '/docs/essential' },

View File

@@ -1,7 +1,7 @@
import Alert from '../../../components/widgets/Alert'
import Navigation from '../../../components/widgets/Navigation'
# Provider (Proveedor)
# Proveedores
<Alert>
⚡ Dependiendo del tipo de proveedor que utlices puede que necesites pasar
@@ -33,9 +33,21 @@ Los proveedores disponibles hasta el momento son los siguientes:
---
### Twilio: Configuración
Estamos trabajando en el apartado de la documentación lo más claro posible. Puedes encontrar los [detalles aquí](/docs/providers/twilio)
---
### Meta: Configuración
Estamos trabajando en el apartado de la documentación lo más claro posible. Puedes encontrar los [detalles aquí](/docs/providers/meta)
---
<Navigation
pages={[
{ name: 'Conversaciones', link: '/docs/flows' },
{ name: 'Conversaciones', link: '/docs/providers' },
{ name: 'Base de datos', link: '/docs/database' },
]}
/>

View File

@@ -0,0 +1,159 @@
import Alert from '../../../../components/widgets/Alert'
import Navigation from '../../../../components/widgets/Navigation'
# Meta
La Plataforma de WhatsApp Business permite a medianas y grandes empresas comunicarse con sus clientes a gran escala.
Puedes iniciar conversaciones con clientes en apenas unos minutos, enviarles notificaciones de atención al cliente o actualizaciones de compras, ofrecerles un nivel de servicio personalizado y
prestarles ayuda a través del canal que ellos prefieran.
### Requerimientos
- Registrar una cuenta de [facebook developers](https://developers.facebook.com/apps)
---
### Requerimientos
Debes crear una aplicación nueva. Para ello haz clic en el botón **Crear aplicación**
![](https://i.imgur.com/DKgjwj9.png)
---
En esta pantalla debes de seleccionar **Empresa o Business**
![](https://i.imgur.com/tapmpMk.png)
---
En el siguiente paso debes escribir un nombre al tu aplicación también colocar un email de contacto y seleccionar la aplicación de Test Business
![](https://i.imgur.com/cfHLJTJ.png)
---
Ahora dirígete a la sección de Ajustes de WhatsApp.
![](https://i.imgur.com/37gMMM5.png)
---
Está la parte donde encontraras el token acceso y también puedes ver el número **desde donde** se envía los mensajes de WhatsApp
y **a donde** se va a enviar.
Como estás en la versión de prueba, deberás dar de alta los números a los que quieres enviar.
![](https://i.imgur.com/bkSAZn2.png)
---
En esta misma página puedes encontrar el apartado de **Webhook** que pronto necesitaremos usar
![](https://i.imgur.com/L3PRcj7.png)
---
En el **archivo principal** del bot donde estás implementando la función del adaptador de meta vas a colocar los siguientes datos:
- **numberId:** Lo puedes encontrar en la pagina anterior
- **jwtToken:** Lo puedes encontrar en la pagina anterior
- **verifyToken:** Puedes escribir lo que quieras es como una palabra clave
<Alert>
En el ejemplo de abajo puedes ver como una sugerencia de como puede ser
utilizando variables de entorno
</Alert>
```js
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(MetaProvider, {
jwtToken: process.env.JWTOKEN, //EAARBW3ZBGU0UBAACDjtQIzI8JuEa.............
numberId: process.env.NUMBER_ID, //103975305758520
verifyToken: process.env.VERIFY_TOKEN, //LO_QUE_SEA
})
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
}
main()
```
---
Luego de ejecutar el bot encontraras un mensaje en la consola similar al siguiente.
Donde podrás encontrar la URL para tu **webhook**
```shell
$ npm start
> bot-whatsapp-base-meta-memory@1.0.0 start
> node app.js
[meta]: Agregar esta url "WHEN A MESSAGE COMES IN"
[meta]: POST http://localhost:3000/webhook
[meta]: Más información en la documentacion
```
---
## ¿Ahora que hago?
Podrás observar que el bot inicia un servicio HTTP (endpoint) que debe estar en un servidor en linea para que puedas conectarlo con Meta.
---
### Opción 1:
Puedes hacer pruebas en local atrevés de un servidor proxy tunnel. 
Descarga **[ngork](https://ngrok.com/download)** es una herramienta gratuita que nos ayudara con esto.
![](https://i.imgur.com/TjjBtRh.png)
---
Esto genera una URL en línea que podemos usar en la parte de **WebHook** de Meta
![](https://i.imgur.com/NXHMDsf.png)
---
![](https://i.imgur.com/tpov3D1.png)
---
![](https://i.imgur.com/haRGylR.png)
---
![](https://i.imgur.com/cMaIzeC.png)
---
### Opción 2:
Si ya tienes desplegado tu bot en un servidor tienes que obtener la IP publica o subdominio que te proporcionaron. **Ejemplo** si estas usando
[Railway](https://railway.app/) puedes ir a la seccion de ajustes y generar un subdominio. Ya tendriamos el **WebHook**
`https://base-twilio-memory-production.up.railway.app/twilio-hook`
![](https://i.imgur.com/Yg2BYqB.png)
---
![](https://i.imgur.com/dIbyEwp.png)
---
<Navigation
pages={[
{ name: 'Proveedores', link: '/docs/providers' },
{ name: 'Meta', link: '/docs/providers/meta' },
]}
/>

View File

@@ -0,0 +1,152 @@
import Alert from '../../../../components/widgets/Alert'
import Navigation from '../../../../components/widgets/Navigation'
# Twilio
Twilio es una plataforma de desarrollo que permite a los desarrolladores construir aplicaciones de comunicación en la nube y sistemas web. Las API de comunicaciones de Twilio permiten a las empresas proporcionar la experiencia de comunicación adecuada para sus clientes dentro de la web y las aplicaciones móviles. Al usar las API de Twilio, los desarrolladores pueden agregar rápidamente esta funcionalidad a una aplicación, como mensajes de voz, videollamadas, mensajes de texto y más.
<Alert>
Twilio te proporciona una cuenta **Sandbox** para que puedas probar
gratuitamente el servicio
</Alert>
### Requerimientos
- Registrar una cuenta de [twilio](https://www.twilio.com/try-twilio)
---
### Requerimientos
Debemos aceptar los términos y condiciones y luego activar la cuenta sandbox
![](https://i.imgur.com/53RyhZD.png)
---
Observamos que ahora tenemos un número de WhatsApp y una frase. El número proporcionado es un **número de pruebas** que te ofrece Twilio, luego que actives un plan de pago puedes comprar un número para tu uso. 
Guarda ese número como un contacto de WhatsApp en tu móvil y después envíale el mensaje que te asignan. En el ejemplo de la pantalla sale **join score-state**
![](https://i.imgur.com/Eb69grk.png)
---
Luego Twilio te responde con un mensaje confirmando la verificación de la conexión. **Este paso solo es necesario cuando estás en modo Sandbox.**
![](https://i.imgur.com/cTWNxBF.png)
---
Ahora dirígete a la sección de Ajustes de WhatsApp ubicada en la consola de Twilio.
![](https://i.imgur.com/UQG8LkW.png)
---
En esta sección puedes configurar los **Webhook** que conectaran con el chatbot.
**¿No sabes cuál es tu link?** continúa leyendo esta guía más adelante entenderás
![](https://i.imgur.com/WovZGPm.png)
---
También necesitarás el **Account SID y Auth Token** estos datos los consigues [console.twilio.com](https://console.twilio.com).
**¿Que hago con estos datos?** guardalos o tenlos ubicados porque los necesitaremos en las siguientes pantallas
![](https://i.imgur.com/RxlxEEm.png)
---
En el **archivo principal** del bot donde estás implementando la función del adaptador de twilio vas a colocar los siguientes datos:
- **ACC_SID:** Lo encontraras en console.twilio puedes ver la pantalla anterior
- **ACC_TOKEN:** Lo encontraras en console.twilio puedes ver la pantalla anterior
- **ACC_VENDOR:** Es el numero de whatsapp (si ya tienes el plan de pago de Twilio usa el numero que compraste), si aun estas en modo
sandbox utliza el numero proporcionado en el paso numero 2
<Alert>
En el ejemplo de abajo puedes ver como una sugerencia de como puede ser
utilizando variables de entorno
</Alert>
```js
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(TwilioProvider, {
accountSid: process.env.ACC_SID, //AC4695aa720b4d700a***************
authToken: process.env.ACC_TOKEN, //3f6fae09f7a1c3534***************
vendorNumber: process.env.ACC_VENDOR, //+14155238886
})
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
}
```
---
Luego de ejecutar el bot encontraras un mensaje en la consola similar al siguiente.
Donde podrás encontrar la URL para tu **webhook**
```shell
$ npm start
> bot-whatsapp-base-twilio-memory@1.0.0 start
> node app.js
[Twilio]: Agregar esta url "WHEN A MESSAGE COMES IN"
[Twilio]: POST http://localhost:3000/twilio-hook
[Twilio]: Más información en la documentacion
```
---
## ¿Ahora que hago?
Podrás observar que el bot inicia un servicio HTTP (endpoint) que debe estar en un servidor en linea para que puedas conectarlo con Twilio.
---
### Opción 1:
Puedes hacer pruebas en local atrevés de un servidor proxy tunnel. 
Descarga **[ngork](https://ngrok.com/download)** es una herramienta gratuita que nos ayudara con esto.
![](https://i.imgur.com/TjjBtRh.png)
---
Esto genera una URL en línea que podemos usar en la parte de **WebHook** de Twilio
![](https://i.imgur.com/S9zXROt.png)
---
### Opción 2:
Si ya tienes desplegado tu bot en un servidor tienes que obtener la IP publica o subdominio que te proporcionaron. **Ejemplo** si estas usando
[Railway](https://railway.app/) puedes ir a la seccion de ajustes y generar un subdominio. Ya tendriamos el **WebHook**
`https://base-twilio-memory-production.up.railway.app/twilio-hook`
![](https://i.imgur.com/Yg2BYqB.png)
---
![](https://i.imgur.com/dpv6RTR.png)
---
<Navigation
pages={[
{ name: 'Proveedores', link: '/docs/providers' },
{ name: 'Meta', link: '/docs/providers/meta' },
]}
/>

View File

@@ -4,14 +4,8 @@ import Navigation from '../../../components/widgets/Navigation'
A continuación se describen los puntos técnicos que debes de tener en cuenta antes de trabajar con esta herramienta
- Node v16 o superior **[descargar node](https://nodejs.org/es/download/)**
---
## ¿Como instalar Node?
- **Windows**: [Ver video](https://youtu.be/xRXHQlqA3Ak?t=376). Necesita ayuda para instalar Node en Windows. A continuación te comparto un video en el minuto exacto donde explico como instalar.
- **Ubuntu**: Te comparto un recurso de **[Digital Ocean](https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-20-04-es)** donde explica como instalar node en Ubuntu.
- Node v16 o superior - **[descargar node](https://nodejs.org/es/download/)**
- Git - **[descargar Git](https://git-scm.com/download/win)**
---
@@ -26,6 +20,34 @@ v18.12.1
---
## ¿Como instalar Node?
- **Windows**: [Ver video](https://youtu.be/xRXHQlqA3Ak?t=376). Si necesitas ayuda para instalar Node en Windows. A continuación te comparto un video en el minuto exacto donde explico como instalar.
- **Ubuntu**: Te comparto un recurso de **[Digital Ocean](https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-20-04-es)** donde explica como instalar node en Ubuntu.
---
## ¿Como saber que tengo Git?
Solo debes ejecutar el siguiente comando y esperar que te mande la versión que tienes instalada, si te manda un error de comando no reconocido es que no lo tienes instalado.
```shell
$ git -v
git
```
---
## ¿Como instalar Git?
- Solo es necesario instalar Git si estás usando **Windows**, ya que Mac y Linux lo traen preinstalado.
- Lo puedes descargar desde esta **[liga](https://git-scm.com/download/win)** .
- Descarga la versión necesaria para tu sistema operativo (32-bit o 64-bit).
- Una vez terminada la descarga, ejecuta el archivo descargado y dale "Siguiente" en todas las pantallas.
- Haz clic en el botón de "Finalizar".
---
<Navigation
pages={[
{ name: 'Vista rápida', link: '/docs' },

View File

@@ -0,0 +1,33 @@
**/*.log
**/.DS_Store
*.
.vscode/settings.json
.history
.yarn
bazel-*
bazel-bin
bazel-out
bazel-qwik
bazel-testlogs
dist
dist-dev
lib
lib-types
etc
external
node_modules
temp
tsc-out
tsdoc-metadata.json
target
output
rollup.config.js
build
.cache
.vscode
.rollup.cache
dist
tsconfig.tsbuildinfo
vite.config.ts
*.spec.tsx
*.spec.ts

View File

@@ -0,0 +1,41 @@
module.exports = {
root: true,
env: {
browser: true,
es2021: true,
node: true,
},
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:qwik/recommended',
],
parser: '@typescript-eslint/parser',
parserOptions: {
tsconfigRootDir: __dirname,
project: ['./tsconfig.json'],
ecmaVersion: 2021,
sourceType: 'module',
ecmaFeatures: {
jsx: true,
},
},
plugins: ['@typescript-eslint'],
rules: {
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-inferrable-types': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/no-empty-interface': 'off',
'@typescript-eslint/no-namespace': 'off',
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/no-this-alias': 'off',
'@typescript-eslint/ban-types': 'off',
'@typescript-eslint/ban-ts-comment': 'off',
'prefer-spread': 'off',
'no-case-declarations': 'off',
'no-console': 'off',
'@typescript-eslint/no-unused-vars': ['error'],
'@typescript-eslint/consistent-type-imports': 'warn',
},
};

38
packages/portal/.gitignore vendored Normal file
View File

@@ -0,0 +1,38 @@
# Build
/dist
/lib
/lib-types
/server
# Development
node_modules
# Cache
.cache
.mf
.vscode
.rollup.cache
tsconfig.tsbuildinfo
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
# Editor
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# Yarn
.yarn/*
!.yarn/releases

View File

@@ -0,0 +1,6 @@
# Files Prettier should not format
**/*.log
**/.DS_Store
*.
dist
node_modules

View File

@@ -0,0 +1,4 @@
{
"recommendations": ["dbaeumer.vscode-eslint", "unifiedjs.vscode-mdx"],
"unwantedRecommendations": []
}

View File

@@ -0,0 +1,32 @@
{
"onGet": {
"scope": "javascriptreact,typescriptreact",
"prefix": "q:onGet",
"description": "onGet function for a route index",
"body": [
"export const onGet: RequestHandler = (request) => {",
" $0",
"};"
]
},
"onGet (typed)": {
"scope": "javascriptreact,typescriptreact",
"prefix": "q:onGet typed",
"description": "onGet function for a route index",
"body": [
"export interface ${1:PageData} {",
" $2",
"};",
"",
"export const onGet: RequestHandler<$1> = (request) => {",
" $4",
"};"
]
},
"useEndpoint": {
"scope": "javascriptreact,typescriptreact",
"prefix": "q:useEndpoint",
"description": "useEndpoint declaration",
"body": "const $1 = useEndpoint<typeof onGet>();"
}
}

View File

@@ -0,0 +1,84 @@
{
"Qwik component (simple)": {
"scope": "javascriptreact,typescriptreact",
"prefix": "q:component",
"description": "Simple Qwik component",
"body": [
"export const ${1:${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/}} = component$(() => {",
" return <${2:div}>$4</$2>",
"});"
]
},
"Qwik component (props)": {
"scope": "typescriptreact",
"prefix": "q:component w/props",
"description": "Qwik component w/ props",
"body": [
"export interface ${1:${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/}}Props {",
" $2",
"}",
"",
"export const $1 = component$<$1Props>((props) => {",
" const ${2:count} = useSignal(0);",
" return (",
" <${3:div} on${4:Click}$={(ev) => {$5}}>",
" $6",
" </${3}>",
" );",
"});"
]
},
"Qwik signal": {
"scope": "javascriptreact,typescriptreact",
"prefix": "q:useSignal",
"description": "useSignal() declaration",
"body": ["const ${1:foo} = useSignal($2);", "$0"]
},
"Qwik store": {
"scope": "javascriptreact,typescriptreact",
"prefix": "q:useStore",
"description": "useStore() declaration",
"body": ["const ${1:state} = useStore({", " $2", "});", "$0"]
},
"$ hook": {
"scope": "javascriptreact,typescriptreact",
"prefix": "q:$",
"description": "$() function hook",
"body": ["$(() => {", " $0", "});", ""]
},
"useClientEffect": {
"scope": "javascriptreact,typescriptreact",
"prefix": "q:useClientEffect",
"description": "useClientEffect$() function hook",
"body": ["useClientEffect$(({ track }) => {", " $0", "});", ""]
},
"useTask": {
"scope": "javascriptreact,typescriptreact",
"prefix": "q:useTask",
"description": "useTask$() function hook",
"body": [
"useTask$(({ track }) => {",
" track(() => $1);",
" $0",
"});",
""
]
},
"useResource": {
"scope": "javascriptreact,typescriptreact",
"prefix": "q:useResource",
"description": "useResource$() declaration",
"body": [
"const $1 = useResource$(({ track, cleanup }) => {",
" $0",
"});",
""
]
},
"useServerMount": {
"scope": "javascriptreact,typescriptreact",
"prefix": "q:useServerMount",
"description": "useServerMount$() function hook",
"body": ["useServerMount$(() => {", " $0", "});", ""]
}
}

71
packages/portal/README.md Normal file
View File

@@ -0,0 +1,71 @@
# Qwik City App ⚡️
- [Qwik Docs](https://qwik.builder.io/)
- [Discord](https://qwik.builder.io/chat)
- [Qwik GitHub](https://github.com/BuilderIO/qwik)
- [@QwikDev](https://twitter.com/QwikDev)
- [Vite](https://vitejs.dev/)
---
## Project Structure
This project is using Qwik with [QwikCity](https://qwik.builder.io/qwikcity/overview/). QwikCity is just a extra set of tools on top of Qwik to make it easier to build a full site, including directory-based routing, layouts, and more.
Inside your project, you'll see the following directory structure:
```
├── public/
│ └── ...
└── src/
├── components/
│ └── ...
└── routes/
└── ...
```
- `src/routes`: Provides the directory based routing, which can include a hierarchy of `layout.tsx` layout files, and an `index.tsx` file as the page. Additionally, `index.ts` files are endpoints. Please see the [routing docs](https://qwik.builder.io/qwikcity/routing/overview/) for more info.
- `src/components`: Recommended directory for components.
- `public`: Any static assets, like images, can be placed in the public directory. Please see the [Vite public directory](https://vitejs.dev/guide/assets.html#the-public-directory) for more info.
## Add Integrations and deployment
Use the `npm run qwik add` command to add additional integrations. Some examples of integrations include: Cloudflare, Netlify or Express server, and the [Static Site Generator (SSG)](https://qwik.builder.io/qwikcity/static-site-generation/static-site-config/).
```shell
npm run qwik add # or `yarn qwik add`
```
## Development
Development mode uses [Vite's development server](https://vitejs.dev/). During development, the `dev` command will server-side render (SSR) the output.
```shell
npm start # or `yarn start`
```
> Note: during dev mode, Vite may request a significant number of `.js` files. This does not represent a Qwik production build.
## Preview
The preview command will create a production build of the client modules, a production build of `src/entry.preview.tsx`, and run a local server. The preview server is only for convenience to locally preview a production build, and it should not be used as a production server.
```shell
npm run preview # or `yarn preview`
```
## Production
The production build will generate client and server modules by running both client and server build commands. Additionally, the build command will use Typescript to run a type check on the source code.
```shell
npm run build # or `yarn build`
```
## Static Site Generator (Node.js)
```
npm run build.server
```

View File

@@ -0,0 +1,19 @@
import { staticAdaptor } from '@builder.io/qwik-city/adaptors/static/vite'
import { extendConfig } from '@builder.io/qwik-city/vite'
import baseConfig from '../../vite.config'
export default extendConfig(baseConfig, () => {
return {
build: {
ssr: true,
rollupOptions: {
input: ['@qwik-city-plan'],
},
},
plugins: [
staticAdaptor({
origin: 'https://bot-whatsapp.netlify.app',
}),
],
}
})

View File

@@ -0,0 +1,52 @@
{
"name": "@bot-whatsapp/portal",
"version": "0.0.22-alpha.0",
"description": "Portal WEB para escanear QR",
"main": "./lib/portal.http.cjs",
"scripts": {
"build": "qwik build",
"build.client": "vite build",
"build.preview": "vite build --ssr src/entry.preview.tsx",
"build.server": "vite build -c adaptors/static/vite.config.ts",
"build.types": "tsc --incremental --noEmit",
"deploy": "echo 'Run \"npm run qwik add\" to install a server adaptor'",
"dev": "vite --mode ssr",
"dev.debug": "node --inspect-brk ./node_modules/vite/bin/vite.js --mode ssr --force",
"fmt": "prettier --write .",
"fmt.check": "prettier --check .",
"lint": "eslint \"src/**/*.ts*\"",
"preview": "qwik build preview && vite preview --open",
"start": "vite --open --mode ssr",
"qwik": "qwik"
},
"files": [
"./dist/*",
"./lib/portal.http.cjs"
],
"devDependencies": {
"@builder.io/qwik": "0.16.2",
"@builder.io/qwik-city": "0.0.128",
"@types/eslint": "8.4.10",
"@types/node": "^18.11.18",
"@types/node-fetch": "latest",
"@typescript-eslint/eslint-plugin": "5.48.0",
"@typescript-eslint/parser": "5.48.0",
"eslint": "8.31.0",
"eslint-plugin-qwik": "0.16.2",
"node-fetch": "3.3.0",
"prettier": "2.8.1",
"typescript": "4.9.4",
"undici": "5.14.0",
"vite": "4.0.3",
"vite-tsconfig-paths": "3.5.0"
},
"dependencies": {
"kleur": "^4.1.5",
"polka": "^0.5.2",
"serve-static": "^1.13.1"
},
"repository": {
"type": "git",
"url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/portal"
}
}

View File

@@ -0,0 +1,67 @@
const { join } = require('path')
const { createReadStream, existsSync } = require('fs')
const { bgYellow, cyan, yellow } = require('kleur')
const polka = require('polka')
const HTTP_PORT = process.env.PORT || 3000
const QR_FILE = process.env.QR_FILE ?? 'bot'
const PUBLIC_URL =
process.env.PUBLIC_URL ??
process.env.RAILWAY_STATIC_URL ??
'http://localhost'
const dir = [join(__dirname, 'dist'), join(__dirname, '..', 'dist')].find((i) =>
existsSync(i)
)
const serve = require('serve-static')(dir)
/**
* Iniciamos Portal WEB para escanear QR
* @param {port:3000, publicSite:'http://mistio.com', qrFile:'qr.png', dir:__dirname}
*/
const start = (args) => {
const injectArgs = {
port: HTTP_PORT,
publicSite: PUBLIC_URL,
name: QR_FILE,
...args,
}
const { port, publicSite, name } = injectArgs
const banner = () => {
console.log(``)
console.log(bgYellow(`🚩 ESCANEAR QR 🚩`))
console.log(cyan(`Existen varias maneras de escanear el QR code`))
console.log(
cyan(`- Tambien puedes visitar `),
yellow(`${publicSite}:${port}`)
)
console.log(
cyan(`- Se ha creado un archivo que finaliza `),
yellow('qr.png')
)
console.log(``)
}
polka()
.use(serve)
.get('qr.png', (_, res) => {
const qrSource = [
join(process.cwd(), `${name}.qr.png`),
join(__dirname, '..', `${name}.qr.png`),
join(__dirname, `${name}.qr.png`),
].find((i) => existsSync(i))
const qrMark = [
join(__dirname, 'dist', 'water-mark.png'),
join(__dirname, '..', 'dist', 'water-mark.png'),
].find((i) => existsSync(i))
const fileStream = createReadStream(qrSource ?? qrMark)
res.writeHead(200, { 'Content-Type': 'image/png' })
fileStream.pipe(res)
})
.listen(port, () => banner())
}
module.exports = start

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 500 500"><g clip-path="url(#a)"><circle cx="250" cy="250" r="250" fill="#fff"/><path fill="#18B6F6" d="m367.87 418.45-61.17-61.18-.94.13v-.67L175.7 227.53l32.05-31.13L188.9 87.73 99.56 199.09c-15.22 15.42-18.03 40.51-7.08 59.03l55.83 93.11a46.82 46.82 0 0 0 40.73 22.81l27.65-.27 151.18 44.68Z"/><path fill="#AC7EF4" d="m401.25 196.94-12.29-22.81-6.41-11.67-2.54-4.56-.26.26-33.66-58.63a47.07 47.07 0 0 0-41.27-23.75l-29.51.8-88.01.28a47.07 47.07 0 0 0-40.33 23.34L93.4 207l95.76-119.54L314.7 226.19l-22.3 22.67 13.35 108.54.13-.26v.26h-.26l.26.27 10.42 10.2 50.62 49.78c2.13 2 5.6-.4 4.13-2.96l-31.25-61.85 54.5-101.3 1.73-2c.67-.81 1.33-1.62 1.87-2.42a46.8 46.8 0 0 0 3.34-50.18Z"/><path fill="#fff" d="M315.1 225.65 189.18 87.6l17.9 108.14L175 227l130.5 130.27-11.75-108.14 21.37-23.48Z"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h500v500H0z"/></clipPath></defs></svg>

After

Width:  |  Height:  |  Size: 947 B

View File

@@ -0,0 +1,9 @@
{
"$schema": "https://json.schemastore.org/web-manifest-combined.json",
"name": "qwik-project-name",
"short_name": "Welcome to Qwik",
"start_url": ".",
"display": "standalone",
"background_color": "#fff",
"description": "A Qwik project app."
}

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

View File

@@ -0,0 +1,13 @@
const banner = require('../../config/banner.rollup.json')
const { join } = require('path')
const commonjs = require('@rollup/plugin-commonjs')
module.exports = {
input: join(__dirname, 'portal.http.js'),
output: {
banner: banner['banner.output'].join(''),
file: join(__dirname, 'lib', 'portal.http.cjs'),
format: 'cjs',
},
plugins: [commonjs()],
}

View File

@@ -0,0 +1,15 @@
const notFounds = [
[
'/',
'<!DOCTYPE html>\n<html>\n<head>\n <meta charset="utf-8">\n <meta http-equiv="Status" content="404"/>\n <title>404 Resource Not Found</title>\n <meta name="viewport" content="width=device-width,initial-scale=1">\n <style>\n body { color: #006ce9; background-color: #fafafa; padding: 30px; font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Roboto, sans-serif; }\n p { max-width: 600px; margin: 60px auto 30px auto; background: white; border-radius: 4px; box-shadow: 0px 0px 50px -20px #006ce9; overflow: hidden; }\n strong { display: inline-block; padding: 15px; background: #006ce9; color: white; }\n span { display: inline-block; padding: 15px; }\n pre { max-width: 580px; margin: 0 auto; }\n </style>\n</head>\n<body>\n <p><strong>404</strong> <span>Resource Not Found</span></p>\n</body>\n</html>',
],
]
function getNotFound(p) {
for (const r of notFounds) {
if (p.startsWith(r[0])) {
return r[1]
}
}
return 'Resource Not Found'
}
export { getNotFound }

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,23 @@
const staticPaths = new Set([
'/',
'/favicon.svg',
'/manifest.json',
'/q-manifest.json',
'/robots.txt',
'/service-worker.js',
'/sitemap.xml',
'/water-mark.png',
])
function isStaticPath(p) {
if (p.startsWith('/build/')) {
return true
}
if (p.startsWith('/assets/')) {
return true
}
if (staticPaths.has(p)) {
return true
}
return false
}
export { isStaticPath }

View File

@@ -0,0 +1 @@
export * from './entry.ssr.mjs'

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,3 @@
{
"type": "module"
}

View File

@@ -0,0 +1,36 @@
header {
display: flex;
background: white;
}
header .logo a {
display: inline-block;
padding: 10px 10px 7px 20px;
text-decoration: none;
}
header ul {
margin: 0;
padding: 3px 10px 0 0;
list-style: none;
flex: 1;
text-align: right;
}
header li {
display: inline-block;
margin: 0;
padding: 0;
}
header li a {
display: inline-block;
padding: 15px 10px;
text-decoration: none;
color: #1a1a1a;
font-weight: 500;
}
header li a:hover {
text-decoration: underline;
}

View File

@@ -0,0 +1,47 @@
import { component$, useStylesScoped$ } from '@builder.io/qwik'
import { BotLogo } from '../icons/bot'
import styles from './header.css?inline'
export default component$(() => {
useStylesScoped$(styles)
return (
<header>
<div class="logo">
<a
href="https://github.com/codigoencasa/bot-whatsapp"
target="_blank"
title="qwik"
>
<BotLogo />
</a>
</div>
<ul>
<li>
<a
href="https://github.com/codigoencasa/bot-whatsapp"
target="_blank"
>
Docs
</a>
</li>
<li>
<a
href="https://github.com/codigoencasa/bot-whatsapp/tree/main/starters/apps"
target="_blank"
>
Examples
</a>
</li>
<li>
<a
href="https://www.youtube.com/watch?v=1u0TTbjK5bo&list=PL_WGMLcL4jzViIlmyDZPnhAdkc8RXGkFh"
target="_blank"
>
Tutorials
</a>
</li>
</ul>
</header>
)
})

View File

@@ -0,0 +1,12 @@
.logo {
display: flex;
gap: 0.5rem;
align-items: center;
align-content: center;
color: #1a1a1a;
}
.logo h1 {
font-size: 1.5rem;
margin: 0;
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,38 @@
export const QwikLogo = () => (
<svg
width="100"
height="35"
viewBox="0 0 167 53"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M81.9545 46.5859H75.5513V35.4045C73.4363 36.8579 71.0496 37.5749 68.4884 37.5749C65.0151 37.5749 62.4344 36.6253 60.8239 34.6487C59.2134 32.6915 58.3984 29.2034 58.3984 24.2231C58.3984 19.1266 59.3492 15.5997 61.2702 13.5456C63.23 11.4721 66.3734 10.4644 70.7004 10.4644C74.7946 10.4644 78.5201 11.0264 81.9545 12.131V46.5859ZM75.5513 16.278C74.096 15.8323 72.4661 15.6191 70.7004 15.6191C68.5272 15.6191 66.9749 16.1811 66.1017 17.3244C65.2479 18.4871 64.7823 20.6962 64.7823 23.9712C64.7823 27.0524 65.1897 29.1065 66.0435 30.2304C66.8973 31.335 68.3719 31.897 70.5452 31.897C73.3781 31.897 75.5513 30.7343 75.5513 29.2809V16.278Z"
fill="black"
/>
<path
d="M91.133 11.1426C93.4033 17.4406 95.3242 23.7386 96.993 30.0948C99.205 23.5836 101.087 17.2856 102.542 11.1426H108.15C110.265 17.4406 112.031 23.7386 113.447 30.0948C115.97 23.196 117.949 16.8787 119.404 11.1426H125.71C123.033 20.173 120.064 28.777 116.785 36.8966H109.256C108.402 32.3039 107.044 26.7617 105.22 20.1536C104.056 25.2889 102.445 30.8893 100.33 36.8966H92.8018C90.2793 27.5174 87.5434 18.9522 84.6328 11.1426H91.133Z"
fill="black"
/>
<path
d="M132.832 7.55758C129.999 7.55758 129.203 6.85996 129.203 3.97257C129.203 1.39523 130.018 0.794495 132.832 0.794495C135.665 0.794495 136.46 1.39523 136.46 3.97257C136.46 6.85996 135.665 7.55758 132.832 7.55758ZM129.649 11.1426H136.053V36.8966H129.649V11.1426Z"
fill="black"
/>
<path
d="M166.303 11.1426C161.763 17.5956 158.581 21.5295 156.815 22.9441C158.27 23.8937 162.17 28.8933 167.002 36.916H159.628C153.613 27.7887 150.742 23.8549 149.325 23.2542V36.916H142.922V0H149.325V23.2348C150.78 22.169 153.963 18.1382 158.872 11.1426H166.303Z"
fill="black"
/>
<path
d="M40.973 52.5351L32.0861 43.6985L31.9503 43.7179V43.621L13.0511 24.9595L17.708 20.4637L14.9721 4.76715L1.99103 20.8513C-0.220992 23.0798 -0.628467 26.7036 0.962635 29.3778L9.07337 42.8265C10.3152 44.9 12.566 46.1402 14.9915 46.1208L19.0081 46.082L40.973 52.5351Z"
fill="#18B6F6"
/>
<path
d="M45.8232 20.5411L44.038 17.2468L43.1066 15.5609L42.738 14.902L42.6992 14.9408L37.8094 6.47238C36.587 4.34075 34.2974 3.02301 31.8137 3.04239L27.5255 3.15865L14.7384 3.19741C12.313 3.21679 10.101 4.49577 8.87853 6.56927L1.09766 21.9945L15.0101 4.72831L33.2496 24.7656L30.0091 28.0406L31.9495 43.7178L31.9689 43.679V43.7178H31.9301L31.9689 43.7565L33.4824 45.2293L40.8364 52.4187C41.1469 52.7094 41.6514 52.3606 41.4379 51.9924L36.8975 43.0589L44.8142 28.4282L45.0664 28.1375C45.1634 28.0212 45.2604 27.905 45.3381 27.7887C46.8904 25.6764 47.1038 22.8472 45.8232 20.5411Z"
fill="#AC7EF4"
/>
<path
d="M33.3076 24.6882L15.0099 4.74774L17.61 20.3668L12.9531 24.882L31.9105 43.6985L30.203 28.0794L33.3076 24.6882Z"
fill="white"
/>
</svg>
)

View File

@@ -0,0 +1,12 @@
div img {
display: block;
background-color: #f0f0f0;
width: 350px;
height: 350px;
object-fit: contain;
border-radius: 10px;
}
div {
display: flex;
justify-content: center;
}

View File

@@ -0,0 +1,31 @@
import {
component$,
useClientEffect$,
useStore,
useStylesScoped$,
} from '@builder.io/qwik'
import style from './qr.css?inline'
export const QR = component$(() => {
useStylesScoped$(style)
const state = useStore({
count: 0,
})
useClientEffect$(() => {
setInterval(() => {
state.count++
}, 800)
})
return (
<div>
<img
width={350}
height={350}
src={'qr.png?time=' + state.count}
alt="QR"
/>
</div>
)
})

View File

@@ -0,0 +1,32 @@
import { component$ } from '@builder.io/qwik'
import { useDocumentHead, useLocation } from '@builder.io/qwik-city'
export const RouterHead = component$(() => {
const head = useDocumentHead()
const loc = useLocation()
return (
<>
<title>{head.title}</title>
<link rel="canonical" href={loc.href} />
<meta
name="viewport"
content="width=device-width, initial-scale=1.0"
/>
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
{head.meta.map((m) => (
<meta {...m} />
))}
{head.links.map((l) => (
<link {...l} />
))}
{head.styles.map((s) => (
<style {...s.props} dangerouslySetInnerHTML={s.style} />
))}
</>
)
})

View File

@@ -0,0 +1,18 @@
/*
* WHAT IS THIS FILE?
*
* Development entry point using only client-side modules:
* - Do not use this mode in production!
* - No SSR
* - No portion of the application is pre-rendered on the server.
* - All of the application is running eagerly in the browser.
* - More code is transferred to the browser than in SSR mode.
* - Optimizer/Serialization/Deserialization code is not exercised!
*/
import type { RenderOptions } from '@builder.io/qwik'
import { render } from '@builder.io/qwik'
import Root from './root'
export default function (opts: RenderOptions) {
return render(document, <Root />, opts)
}

View File

@@ -0,0 +1,20 @@
/*
* WHAT IS THIS FILE?
*
* It's the bundle entry point for `npm run preview`.
* That is, serving your app built in production mode.
*
* Feel free to modify this file, but don't remove it!
*
* Learn more about Vite's preview command:
* - https://vitejs.dev/config/preview-options.html#preview-options
*
*/
import { createQwikCity } from '@builder.io/qwik-city/middleware/node'
import render from './entry.ssr'
import qwikCityPlan from '@qwik-city-plan'
/**
* The default export is the QwikCity adaptor used by Vite preview.
*/
export default createQwikCity({ render, qwikCityPlan })

View File

@@ -0,0 +1,28 @@
/**
* WHAT IS THIS FILE?
*
* SSR entry point, in all cases the application is render outside the browser, this
* entry point will be the common one.
*
* - Server (express, cloudflare...)
* - npm run start
* - npm run preview
* - npm run build
*
*/
import type { RenderToStreamOptions } from '@builder.io/qwik/server'
import { renderToStream } from '@builder.io/qwik/server'
import { manifest } from '@qwik-client-manifest'
import Root from './root'
export default function (opts: RenderToStreamOptions) {
return renderToStream(<Root />, {
manifest,
...opts,
// Use container attributes to set attributes on the html tag.
containerAttributes: {
lang: 'en-us',
...opts.containerAttributes,
},
})
}

View File

@@ -0,0 +1,125 @@
/**
* WHAT IS THIS FILE?
*
* Globally applied styles. No matter which components are in the page or matching route,
* the styles in here will be applied to the Document, without any sort of CSS scoping.
*
*/
:root {
--qwik-dark-blue: #1a1a1a;
--qwik-light-blue: #349713;
--qwik-light-purple: #73da51;
--qwik-dark-purple: #3f9622;
}
body {
background-color: #fafafa;
font-family: 'Inter', sans-serif, ui-sans-serif, system-ui, -apple-system,
BlinkMacSystemFont, sans-serif;
padding: 20px 20px 40px 20px;
}
main {
max-width: 760px;
margin: 0 auto;
background-color: white;
border-radius: 5px;
box-shadow: rgba(17, 12, 46, 0.15) 0px 48px 100px 0px;
overflow: hidden;
}
h1,
h2 {
margin: 0 0 5px 0;
}
.lightning {
filter: hue-rotate(180deg);
}
section {
padding: 20px;
}
ul {
list-style-type: square;
margin: 5px 0 30px 0;
padding-left: 25px;
}
li {
padding: 8px 0;
}
li::marker {
color: var(--qwik-light-blue);
}
a,
a:visited {
color: var(--qwik-dark-blue);
}
a:hover {
text-decoration: none;
}
table.commands {
margin: 0 0 30px 0;
}
.commands td {
padding: 5px;
}
.commands td:first-child {
white-space: nowrap;
padding-right: 20px;
}
code {
font-family: Menlo, Monaco, Courier New, monospace;
font-size: 0.9em;
background-color: rgb(224, 224, 224);
padding: 2px 4px;
border-radius: 3px;
border-bottom: 2px solid #bfbfbf;
}
footer {
padding: 15px;
text-align: center;
font-size: 0.8em;
}
footer a {
text-decoration: none;
}
footer a:hover {
text-decoration: underline;
}
a.mindblow {
margin: 0 auto;
display: block;
background: var(--qwik-dark-purple);
padding: 10px 20px;
border-radius: 10px;
border: 0;
color: white;
text-decoration: none;
font-size: 20px;
width: fit-content;
border-bottom: 4px solid black;
cursor: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='48' viewport='0 0 100 100' style='fill:black;font-size:24px;'><text y='50%'>🤯</text></svg>")
16 0,
auto; /*!emojicursor.app*/
}
a.mindblow:hover {
border-bottom-width: 0px;
margin-bottom: 4px;
transform: translateY(4px);
}

View File

@@ -0,0 +1,29 @@
import { component$, useStyles$ } from '@builder.io/qwik'
import { QwikCityProvider, RouterOutlet } from '@builder.io/qwik-city'
import { RouterHead } from './components/router-head/router-head'
import globalStyles from './global.css?inline'
export default component$(() => {
/**
* The root of a QwikCity site always start with the <QwikCityProvider> component,
* immediately followed by the document's <head> and <body>.
*
* Dont remove the `<head>` and `<body>` elements.
*/
useStyles$(globalStyles)
return (
<QwikCityProvider>
<head>
<meta charSet="utf-8" />
<link rel="preconnect" href="https://rsms.me/" />
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
<RouterHead />
</head>
<body lang="en">
<RouterOutlet />
</body>
</QwikCityProvider>
)
})

View File

@@ -0,0 +1,23 @@
.page {
display: grid;
padding: 1rem;
gap: 2rem;
}
.page .qr-section.links {
display: flex;
gap: 1rem;
flex-wrap: wrap;
}
.page .btn-link {
background: white;
box-shadow: rgb(0 0 0 / 16%) 0px 10px 36px 0px,
rgb(0 0 0 / 6%) 0px 0px 0px 1px;
padding: 10px;
border-radius: 5px;
font-weight: 600;
text-decoration: none;
color: #1a1a1a;
border: solid 1px #afafaf;
}

View File

@@ -0,0 +1,61 @@
import { component$, useStylesScoped$ } from '@builder.io/qwik'
import type { DocumentHead } from '@builder.io/qwik-city'
import { QR } from '~/components/qr/qr'
import style from './index.css?inline'
export default component$(() => {
useStylesScoped$(style)
return (
<div class={'page'}>
<div class={'qr-section'}>
<QR />
</div>
<div class={'qr-section intructions'}>
<h1>Whatsapp QR</h1>
<p>
Con esta libreria, puedes configurar respuestas
automatizadas para preguntas frecuentes, recibir y responder
mensajes de manera automatizada, y hacer un seguimiento de
las interacciones con los clientes. <br /> Además, nuestro
Chatbot se integra fácilmente con otros sistemas y
herramientas que ya esté utilizando en su negocio.
</p>
<div class={'qr-section links'}>
<a
class={'btn-link '}
target="_blank"
href="https://bot-whatsapp.netlify.app/"
>
Ver documentación
</a>
<a
class={'btn-link '}
target="_blank"
href="https://www.youtube.com/watch?v=1u0TTbjK5bo&list=PL_WGMLcL4jzViIlmyDZPnhAdkc8RXGkFh"
>
Ver videos
</a>
<a
class={'btn-link '}
target="_blank"
href="https://opencollective.com/bot-whatsapp"
>
Comprar café
</a>
</div>
</div>
</div>
)
})
export const head: DocumentHead = {
title: '🤖 Crear chatbot WhatsApp en minutos',
meta: [
{
name: 'description',
content: '🤖 Crear chatbot WhatsApp en minutos',
},
],
}

View File

@@ -0,0 +1,20 @@
import { component$, Slot } from '@builder.io/qwik'
import Header from '../components/header/header'
export default component$(() => {
return (
<>
<main>
<Header />
<section>
<Slot />
</section>
</main>
<footer>
<a href="https://qwik.builder.io/" target="_blank">
Made with <strong>Qwik</strong>
</a>
</footer>
</>
)
})

View File

@@ -0,0 +1,18 @@
/*
* WHAT IS THIS FILE?
*
* The service-worker.ts file is used to have state of the art prefetching.
* https://qwik.builder.io/qwikcity/prefetching/overview/
*
* Qwik uses a service worker to speed up your site and reduce latency, ie, not used in the traditional way of offline.
* You can also use this file to add more functionality that runs in the service worker.
*/
import { setupServiceWorker } from '@builder.io/qwik-city/service-worker'
setupServiceWorker()
addEventListener('install', () => self.skipWaiting())
addEventListener('activate', () => self.clients.claim())
declare const self: ServiceWorkerGlobalScope

View File

@@ -0,0 +1,26 @@
{
"compilerOptions": {
"allowJs": true,
"target": "ES2017",
"module": "ES2020",
"lib": ["es2020", "DOM", "WebWorker", "DOM.Iterable"],
"jsx": "react-jsx",
"jsxImportSource": "@builder.io/qwik",
"strict": true,
"forceConsistentCasingInFileNames": true,
"resolveJsonModule": true,
"moduleResolution": "node",
"esModuleInterop": true,
"skipLibCheck": true,
"incremental": true,
"isolatedModules": true,
"outDir": "tmp",
"noEmit": true,
"types": ["node", "vite/client"],
"paths": {
"~/*": ["./src/*"]
}
},
"files": ["./.eslintrc.cjs"],
"include": ["src"]
}

View File

@@ -0,0 +1,23 @@
import { defineConfig } from 'vite'
import { qwikVite } from '@builder.io/qwik/optimizer'
import { qwikCity } from '@builder.io/qwik-city/vite'
import tsconfigPaths from 'vite-tsconfig-paths'
export default defineConfig(() => {
return {
plugins: [
qwikCity(),
qwikVite({
entryStrategy: {
type: 'single',
},
}),
tsconfigPaths(),
],
preview: {
headers: {
'Cache-Control': 'public, max-age=600',
},
},
}
})

View File

@@ -1,6 +1,6 @@
{
"name": "@bot-whatsapp/provider",
"version": "0.0.46-alpha.0",
"version": "0.0.70-alpha.0",
"description": "Esto es el conector a Twilio, Meta, etc...",
"main": "./lib/mock/index.cjs",
"keywords": [],
@@ -22,5 +22,9 @@
"./venom": "./lib/venom/index.cjs",
"./baileys": "./lib/baileys/index.cjs",
"./meta": "./lib/meta/index.cjs"
},
"repository": {
"type": "git",
"url": "https://github.com/codigoencasa/bot-whatsapp/tree/main/packages/provider"
}
}

View File

@@ -4,7 +4,7 @@ const pino = require('pino')
const rimraf = require('rimraf')
const mime = require('mime-types')
const { join } = require('path')
const { existsSync, createWriteStream } = require('fs')
const { existsSync, createWriteStream, readFileSync } = require('fs')
const { Console } = require('console')
const {
@@ -24,19 +24,18 @@ const logger = new Console({
stdout: createWriteStream(`${process.cwd()}/baileys.log`),
})
const NAME_DIR_SESSION = `sessions`
const PATH_BASE = join(process.cwd(), NAME_DIR_SESSION)
/**
* ⚙️ BaileysProvider: Es una clase tipo adaptor
* que extiende clases de ProviderClass (la cual es como interfaz para sber que funciones rqueridas)
* https://github.com/adiwajshing/Baileys
*/
class BaileysProvider extends ProviderClass {
globalVendorArgs = { name: `bot` }
vendor
saveCredsGlobal = null
constructor() {
constructor(args) {
super()
this.globalVendorArgs = { ...this.globalVendorArgs, ...args }
this.initBailey().then()
}
@@ -44,6 +43,7 @@ class BaileysProvider extends ProviderClass {
* Iniciar todo Bailey
*/
initBailey = async () => {
const NAME_DIR_SESSION = `${this.globalVendorArgs.name}_sessions`
const { state, saveCreds } = await useMultiFileAuthState(
NAME_DIR_SESSION
)
@@ -70,6 +70,7 @@ class BaileysProvider extends ProviderClass {
}
if (statusCode === DisconnectReason.loggedOut) {
const PATH_BASE = join(process.cwd(), NAME_DIR_SESSION)
rimraf(PATH_BASE, (err) => {
if (err) return
})
@@ -88,12 +89,15 @@ class BaileysProvider extends ProviderClass {
if (qr) {
this.emit('require_action', {
instructions: [
`Debes escanear el QR Code para iniciar session reivsa qr.png`,
`Debes escanear el QR Code para iniciar ${this.globalVendorArgs.name}.qr.png`,
`Recuerda que el QR se actualiza cada minuto `,
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
],
})
await baileyGenerateImage(qr)
await baileyGenerateImage(
qr,
`${this.globalVendorArgs.name}.qr.png`
)
}
})
@@ -137,7 +141,7 @@ class BaileysProvider extends ProviderClass {
}
const btnCtx =
payload?.message?.templateButtonReplyMessage
payload?.message?.buttonsResponseMessage
?.selectedDisplayText
if (btnCtx) payload.body = btnCtx
@@ -167,8 +171,8 @@ class BaileysProvider extends ProviderClass {
sendMedia = async (number, imageUrl, text) => {
const fileDownloaded = await baileyDownloadMedia(imageUrl)
return this.vendor.sendMessage(number, {
image: { url: fileDownloaded },
text,
image: readFileSync(fileDownloaded),
caption: text,
})
}
@@ -229,20 +233,22 @@ class BaileysProvider extends ProviderClass {
*/
sendButtons = async (number, text, buttons) => {
const numberClean = number.replace('+', '')
const numberClean = baileyCleanNumber(number)
const templateButtons = buttons.map((btn, i) => ({
index: `${i}`,
quickReplyButton: {
displayText: btn.body,
id: `id-btn-${i}`,
},
buttonId: `id-btn-${i}`,
buttonText: { displayText: btn.body },
type: 1,
}))
return this.vendor.sendMessage(`${numberClean}@c.us`, {
const buttonMessage = {
text,
footer: '',
templateButtons: templateButtons,
})
buttons: templateButtons,
headerType: 1,
}
return this.vendor.sendMessage(numberClean, buttonMessage)
}
/**

View File

@@ -15,8 +15,8 @@ const baileyCleanNumber = (number, full = false) => {
* Hace promesa el write
* @param {*} base64
*/
const baileyGenerateImage = async (base64) => {
const PATH_QR = `${process.cwd()}/qr.png`
const baileyGenerateImage = async (base64, name = 'qr.png') => {
const PATH_QR = `${process.cwd()}/${name}`
let qr_svg = qr.image(base64, { type: 'png', margin: 4 })
const writeFilePromise = () =>

View File

@@ -1,5 +1,5 @@
{
"dependencies": {
"twilio": "3.84.0"
"twilio": "3.84.1"
}
}

View File

@@ -20,9 +20,11 @@ const logger = new Console({
* https://github.com/orkestral/venom
*/
class VenomProvider extends ProviderClass {
globalVendorArgs = { name: `bot` }
vendor
constructor() {
constructor(args) {
super()
this.globalVendorArgs = { ...this.globalVendorArgs, ...args }
this.init().then(() => this.initBusEvents())
}
@@ -30,15 +32,19 @@ class VenomProvider extends ProviderClass {
* Iniciamos el Proveedor Venom
*/
init = async () => {
const NAME_DIR_SESSION = `${this.globalVendorArgs.name}_sessions`
try {
const client = await venom.create(
{
session: 'session-base',
session: NAME_DIR_SESSION,
multidevice: true,
disableSpins: true,
disableWelcome: true,
logger,
logQR: false,
},
(base) => this.generateQr(base),
undefined,
{ logQR: false }
undefined
)
this.vendor = client
} catch (e) {
@@ -61,12 +67,12 @@ class VenomProvider extends ProviderClass {
console.clear()
this.emit('require_action', {
instructions: [
`Debes escanear el QR Code para iniciar session reivsa qr.png`,
`Debes escanear el QR Code para iniciar ${this.globalVendorArgs.name}.qr.png`,
`Recuerda que el QR se actualiza cada minuto `,
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
],
})
await venomGenerateImage(qr)
await venomGenerateImage(qr, `${this.globalVendorArgs.name}.qr.png`)
}
/**

View File

@@ -10,8 +10,8 @@ const venomCleanNumber = (number, full = false) => {
return number
}
const venomGenerateImage = async (base) => {
const PATH_QR = `${process.cwd()}/qr.png`
const venomGenerateImage = async (base, name = 'qr.png') => {
const PATH_QR = `${process.cwd()}/${name}`
const matches = base.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/)
if (matches.length !== 3) {
return new Error('Invalid input string')

View File

@@ -19,11 +19,23 @@ const logger = new Console({
* https://github.com/pedroslopez/whatsapp-web.js
*/
class WebWhatsappProvider extends ProviderClass {
globalVendorArgs = { name: `bot` }
vendor
constructor() {
constructor(args) {
super()
this.globalVendorArgs = { ...this.globalVendorArgs, ...args }
this.vendor = new Client({
authStrategy: new LocalAuth(),
authStrategy: new LocalAuth({
clientId: `${this.globalVendorArgs.name}_sessions`,
}),
puppeteer: {
headless: true,
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
'--unhandled-rejections=strict',
],
},
})
const listEvents = this.busEvents()
@@ -60,12 +72,15 @@ class WebWhatsappProvider extends ProviderClass {
func: async (qr) => {
this.emit('require_action', {
instructions: [
`Debes escanear el QR Code para iniciar session reivsa qr.png`,
`Debes escanear el QR Code para iniciar ${this.globalVendorArgs.name}.qr.png`,
`Recuerda que el QR se actualiza cada minuto `,
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
],
})
await wwebGenerateImage(qr)
await wwebGenerateImage(
qr,
`${this.globalVendorArgs.name}.qr.png`
)
},
},
{

View File

@@ -1,5 +1,5 @@
{
"dependencies": {
"whatsapp-web.js": "1.18.4"
"whatsapp-web.js": "1.19.2"
}
}

View File

@@ -11,8 +11,8 @@ const wwebCleanNumber = (number, full = false) => {
return number
}
const wwebGenerateImage = async (base64) => {
const PATH_QR = `${process.cwd()}/qr.png`
const wwebGenerateImage = async (base64, name = 'qr.png') => {
const PATH_QR = `${process.cwd()}/${name}`
let qr_svg = qr.image(base64, { type: 'png', margin: 4 })
const writeFilePromise = () =>

47
scripts/github.js Normal file
View File

@@ -0,0 +1,47 @@
const process = require('node:process')
const { Octokit } = require('@octokit/core')
const [PKG_ARG, GITHUB_TOKEN] = process.argv.slice(2) || [null]
/**
* Publicar Release en Github
* @param {*} name
* @param {*} tag_name
* @param {*} auth
* @param {*} owner
* @param {*} repo
*/
const githubGithubRelease = async (
name = '',
tag_name = '',
auth = '',
owner = 'codigoencasa',
repo = 'bot-whatsapp'
) => {
const octokit = new Octokit({
auth,
})
await octokit.request(`POST /repos/${owner}/${repo}/releases`, {
owner,
repo,
tag_name,
name,
body: 'Description of the release',
draft: false,
prerelease: false,
generate_release_notes: true,
})
}
const main = async () => {
if (PKG_ARG) {
const githubToken = GITHUB_TOKEN ? GITHUB_TOKEN.split('=').at(1) : null
const pkgNumber = PKG_ARG ? PKG_ARG.split('=').at(1) : null
if (pkgNumber)
await githubGithubRelease(`v${pkgNumber}`, pkgNumber, githubToken)
}
}
main()

View File

@@ -10,10 +10,20 @@ const copyLibPkg = async (pkgName, to) => {
await fs.copy(FROM, TO)
}
Promise.all([
copyLibPkg('create-bot-whatsapp', appDir),
copyLibPkg('bot', appDir),
copyLibPkg('database', appDir),
copyLibPkg('provider', appDir),
copyLibPkg('contexts', appDir),
]).then(() => console.log('Todas las librerías copiadas'))
const listLib = [
'create-bot-whatsapp',
'bot',
'database',
'provider',
'contexts',
'portal',
]
const main = async () => {
for (const iterator of listLib) {
await copyLibPkg(iterator, appDir)
console.log(`${iterator}: Copiado ✅`)
}
}
main()

View File

@@ -0,0 +1,9 @@
FROM node:18-bullseye as bot
WORKDIR /app
COPY package*.json ./
RUN npm i
COPY . .
ARG RAILWAY_STATIC_URL
ARG PUBLIC_URL
ARG PORT
CMD ["npm", "start"]

View File

@@ -5,26 +5,8 @@
</p>
**Con esta librería, puedes construir flujos automatizados de conversación de manera agnóstica al proveedor de WhatsApp,** configurar respuestas automatizadas para preguntas frecuentes, recibir y responder mensajes de manera automatizada, y hacer un seguimiento de las interacciones con los clientes.  Además, puedes configurar fácilmente disparadores que te ayudaran a expandir las funcionalidades sin límites. **[Ver más informacion](https://bot-whatsapp.netlify.app/)**
**Con esta librería, puedes construir flujos automatizados de conversación de manera agnóstica al proveedor de WhatsApp,** configurar respuestas automatizadas para preguntas frecuentes, recibir y responder mensajes de manera automatizada, y hacer un seguimiento de las interacciones con los clientes.  Además, puedes configurar fácilmente disparadores que te ayudaran a expandir las funcionalidades sin límites. **[Ver documentación](https://bot-whatsapp.netlify.app/)**
```js
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(BaileysProvider, {
accountSid: process.env.ACC_SID,
authToken: process.env.ACC_TOKEN,
vendorNumber: process.env.ACC_VENDOR,
})
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
}
```
```
npm install

View File

@@ -5,84 +5,90 @@ const {
addKeyword,
} = require('@bot-whatsapp/bot')
const QRPortalWeb = require('@bot-whatsapp/portal')
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
const JsonFileAdapter = require('@bot-whatsapp/database/json')
/**
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
*
* Menu Principal
* - SubMenu 1
* - Submenu 1.1
* - Submenu 2
* - Submenu 2.1
*
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
'📄 Aquí tenemos el flujo secundario',
])
const flowBolsos2 = addKeyword(['bolsos2', '2'])
.addAnswer('🤯 *MUCHOS* bolsos ...')
.addAnswer('y mas bolsos... bla bla')
const flowDocs = addKeyword([
'doc',
'documentacion',
'documentación',
]).addAnswer(
[
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
'https://bot-whatsapp.netlify.app/',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
[
'🙌 Aquí encontras un ejemplo rapido',
'https://bot-whatsapp.netlify.app/docs/example/',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
['Manda:', '*(2) Zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[flowZapatos2]
)
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
[
'🚀 Puedes aportar tu granito de arena a este proyecto',
'[*opencollective*] https://opencollective.com/bot-whatsapp',
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
'[*patreon*] https://www.patreon.com/leifermendez',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[flowBolsos2]
)
/**
* Declarando flujo principal
*/
const flowDiscord = addKeyword(['discord']).addAnswer(
[
'🤪 Únete al discord',
'https://link.codigoencasa.com/DISCORD',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.addAnswer(
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[flowBolsos, flowZapatos]
[
'te comparto los siguientes links de interes sobre el proyecto',
'👉 *doc* para ver la documentación',
'👉 *gracias* para ver la lista de videos',
'👉 *discord* unirte al discord',
],
null,
null,
[flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
const adapterDB = new JsonFileAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(BaileysProvider)
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
QRPortalWeb()
}
main()

View File

@@ -1,5 +1,5 @@
{
"name": "bot-whatsapp-base-bailey-json",
"name": "base-bailey-json",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -13,6 +13,7 @@
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
"@bot-whatsapp/portal": "latest",
"@adiwajshing/baileys": "4.4.0",
"mime-types": "2.1.35",
"wa-sticker-formatter": "4.3.2"

View File

@@ -0,0 +1,9 @@
FROM node:18-bullseye as bot
WORKDIR /app
COPY package*.json ./
RUN npm i
COPY . .
ARG RAILWAY_STATIC_URL
ARG PUBLIC_URL
ARG PORT
CMD ["npm", "start"]

View File

@@ -5,26 +5,8 @@
</p>
**Con esta librería, puedes construir flujos automatizados de conversación de manera agnóstica al proveedor de WhatsApp,** configurar respuestas automatizadas para preguntas frecuentes, recibir y responder mensajes de manera automatizada, y hacer un seguimiento de las interacciones con los clientes.  Además, puedes configurar fácilmente disparadores que te ayudaran a expandir las funcionalidades sin límites. **[Ver más informacion](https://bot-whatsapp.netlify.app/)**
**Con esta librería, puedes construir flujos automatizados de conversación de manera agnóstica al proveedor de WhatsApp,** configurar respuestas automatizadas para preguntas frecuentes, recibir y responder mensajes de manera automatizada, y hacer un seguimiento de las interacciones con los clientes.  Además, puedes configurar fácilmente disparadores que te ayudaran a expandir las funcionalidades sin límites. **[Ver documentación](https://bot-whatsapp.netlify.app/)**
```js
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(BaileysProvider, {
accountSid: process.env.ACC_SID,
authToken: process.env.ACC_TOKEN,
vendorNumber: process.env.ACC_VENDOR,
})
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
}
```
```
npm install

View File

@@ -5,84 +5,90 @@ const {
addKeyword,
} = require('@bot-whatsapp/bot')
const QRPortalWeb = require('@bot-whatsapp/portal')
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
const MockAdapter = require('@bot-whatsapp/database/mock')
/**
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
*
* Menu Principal
* - SubMenu 1
* - Submenu 1.1
* - Submenu 2
* - Submenu 2.1
*
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
'📄 Aquí tenemos el flujo secundario',
])
const flowBolsos2 = addKeyword(['bolsos2', '2'])
.addAnswer('🤯 *MUCHOS* bolsos ...')
.addAnswer('y mas bolsos... bla bla')
const flowDocs = addKeyword([
'doc',
'documentacion',
'documentación',
]).addAnswer(
[
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
'https://bot-whatsapp.netlify.app/',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
[
'🙌 Aquí encontras un ejemplo rapido',
'https://bot-whatsapp.netlify.app/docs/example/',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
['Manda:', '*(2) Zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[flowZapatos2]
)
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
[
'🚀 Puedes aportar tu granito de arena a este proyecto',
'[*opencollective*] https://opencollective.com/bot-whatsapp',
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
'[*patreon*] https://www.patreon.com/leifermendez',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[flowBolsos2]
)
/**
* Declarando flujo principal
*/
const flowDiscord = addKeyword(['discord']).addAnswer(
[
'🤪 Únete al discord',
'https://link.codigoencasa.com/DISCORD',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.addAnswer(
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[flowBolsos, flowZapatos]
[
'te comparto los siguientes links de interes sobre el proyecto',
'👉 *doc* para ver la documentación',
'👉 *gracias* para ver la lista de videos',
'👉 *discord* unirte al discord',
],
null,
null,
[flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(BaileysProvider)
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
QRPortalWeb()
}
main()

View File

@@ -1,5 +1,5 @@
{
"name": "bot-whatsapp-base-bailey-memory",
"name": "base-bailey-memory",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -13,6 +13,7 @@
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
"@bot-whatsapp/portal": "latest",
"@adiwajshing/baileys": "4.4.0",
"mime-types": "2.1.35",
"wa-sticker-formatter": "4.3.2"

View File

@@ -0,0 +1,9 @@
FROM node:18-bullseye as bot
WORKDIR /app
COPY package*.json ./
RUN npm i
COPY . .
ARG RAILWAY_STATIC_URL
ARG PUBLIC_URL
ARG PORT
CMD ["npm", "start"]

View File

@@ -5,6 +5,7 @@ const {
addKeyword,
} = require('@bot-whatsapp/bot')
const QRPortalWeb = require('@bot-whatsapp/portal')
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
const MongoAdapter = require('@bot-whatsapp/database/mongo')
@@ -27,58 +28,72 @@ const MONGO_DB_NAME = 'db_bot'
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
const flowBolsos2 = addKeyword(['bolsos2', '2'])
.addAnswer('🤯 *MUCHOS* bolsos ...')
.addAnswer('y mas bolsos... bla bla')
const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
'📄 Aquí tenemos el flujo secundario',
])
const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
const flowDocs = addKeyword([
'doc',
'documentacion',
'documentación',
]).addAnswer(
[
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
'https://bot-whatsapp.netlify.app/',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
['Manda:', '*(2) Zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[flowZapatos2]
)
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
[
'🙌 Aquí encontras un ejemplo rapido',
'https://bot-whatsapp.netlify.app/docs/example/',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[flowBolsos2]
)
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
[
'🚀 Puedes aportar tu granito de arena a este proyecto',
'[*opencollective*] https://opencollective.com/bot-whatsapp',
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
'[*patreon*] https://www.patreon.com/leifermendez',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
/**
* Declarando flujo principal
*/
const flowDiscord = addKeyword(['discord']).addAnswer(
[
'🤪 Únete al discord',
'https://link.codigoencasa.com/DISCORD',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.addAnswer(
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[flowBolsos, flowZapatos]
[
'te comparto los siguientes links de interes sobre el proyecto',
'👉 *doc* para ver la documentación',
'👉 *gracias* para ver la lista de videos',
'👉 *discord* unirte al discord',
],
null,
null,
[flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
@@ -93,6 +108,7 @@ const main = async () => {
provider: adapterProvider,
database: adapterDB,
})
QRPortalWeb()
}
main()

View File

@@ -1,5 +1,5 @@
{
"name": "bot-whatsapp-base-bailey-mongo",
"name": "base-bailey-mongo",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -13,6 +13,7 @@
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
"@bot-whatsapp/portal": "latest",
"@adiwajshing/baileys": "4.4.0",
"mime-types": "2.1.35",
"mongodb": "^4.12.1",

View File

@@ -0,0 +1,9 @@
FROM node:18-bullseye as bot
WORKDIR /app
COPY package*.json ./
RUN npm i
COPY . .
ARG RAILWAY_STATIC_URL
ARG PUBLIC_URL
ARG PORT
CMD ["npm", "start"]

View File

@@ -5,6 +5,7 @@ const {
addKeyword,
} = require('@bot-whatsapp/bot')
const QRPortalWeb = require('@bot-whatsapp/portal')
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
const MySQLAdapter = require('@bot-whatsapp/database/mysql')
@@ -28,58 +29,72 @@ const MYSQL_DB_NAME = 'bot'
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
const flowBolsos2 = addKeyword(['bolsos2', '2'])
.addAnswer('🤯 *MUCHOS* bolsos ...')
.addAnswer('y mas bolsos... bla bla')
const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
'📄 Aquí tenemos el flujo secundario',
])
const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
const flowDocs = addKeyword([
'doc',
'documentacion',
'documentación',
]).addAnswer(
[
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
'https://bot-whatsapp.netlify.app/',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
['Manda:', '*(2) Zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[flowZapatos2]
)
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
[
'🙌 Aquí encontras un ejemplo rapido',
'https://bot-whatsapp.netlify.app/docs/example/',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[flowBolsos2]
)
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
[
'🚀 Puedes aportar tu granito de arena a este proyecto',
'[*opencollective*] https://opencollective.com/bot-whatsapp',
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
'[*patreon*] https://www.patreon.com/leifermendez',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
/**
* Declarando flujo principal
*/
const flowDiscord = addKeyword(['discord']).addAnswer(
[
'🤪 Únete al discord',
'https://link.codigoencasa.com/DISCORD',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.addAnswer(
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[flowBolsos, flowZapatos]
[
'te comparto los siguientes links de interes sobre el proyecto',
'👉 *doc* para ver la documentación',
'👉 *gracias* para ver la lista de videos',
'👉 *discord* unirte al discord',
],
null,
null,
[flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {
@@ -96,6 +111,7 @@ const main = async () => {
provider: adapterProvider,
database: adapterDB,
})
QRPortalWeb()
}
main()

View File

@@ -1,5 +1,5 @@
{
"name": "bot-whatsapp-base-bailey-mysql",
"name": "base-bailey-mysql",
"version": "1.0.0",
"description": "",
"main": "app.js",
@@ -13,6 +13,7 @@
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest",
"@bot-whatsapp/portal": "latest",
"@adiwajshing/baileys": "4.4.0",
"mime-types": "2.1.35",
"mysql2": "^2.3.3",

View File

@@ -0,0 +1,9 @@
FROM node:18-bullseye as bot
WORKDIR /app
COPY package*.json ./
RUN npm i
COPY . .
ARG RAILWAY_STATIC_URL
ARG PUBLIC_URL
ARG PORT
CMD ["npm", "start"]

View File

@@ -20,58 +20,72 @@ const JsonFileAdapter = require('@bot-whatsapp/database/json')
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
*/
const flowBolsos2 = addKeyword(['bolsos2', '2'])
.addAnswer('🤯 *MUCHOS* bolsos ...')
.addAnswer('y mas bolsos... bla bla')
const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
'📄 Aquí tenemos el flujo secundario',
])
const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
const flowDocs = addKeyword([
'doc',
'documentacion',
'documentación',
]).addAnswer(
[
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
'https://bot-whatsapp.netlify.app/',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
['Manda:', '*(2) Zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[flowZapatos2]
)
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
[
'🙌 Aquí encontras un ejemplo rapido',
'https://bot-whatsapp.netlify.app/docs/example/',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[flowBolsos2]
)
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
[
'🚀 Puedes aportar tu granito de arena a este proyecto',
'[*opencollective*] https://opencollective.com/bot-whatsapp',
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
'[*patreon*] https://www.patreon.com/leifermendez',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
/**
* Declarando flujo principal
*/
const flowDiscord = addKeyword(['discord']).addAnswer(
[
'🤪 Únete al discord',
'https://link.codigoencasa.com/DISCORD',
'\n*2* Para siguiente paso.',
],
null,
null,
[flowSecundario]
)
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
.addAnswer(
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[flowBolsos, flowZapatos]
[
'te comparto los siguientes links de interes sobre el proyecto',
'👉 *doc* para ver la documentación',
'👉 *gracias* para ver la lista de videos',
'👉 *discord* unirte al discord',
],
null,
null,
[flowDocs, flowGracias, flowTuto, flowDiscord]
)
const main = async () => {

View File

@@ -1,5 +1,5 @@
{
"name": "bot-whatsapp-base-meta-json",
"name": "base-meta-json",
"version": "1.0.0",
"description": "",
"main": "app.js",

View File

@@ -0,0 +1,9 @@
FROM node:18-bullseye as bot
WORKDIR /app
COPY package*.json ./
RUN npm i
COPY . .
ARG RAILWAY_STATIC_URL
ARG PUBLIC_URL
ARG PORT
CMD ["npm", "start"]

Some files were not shown because too many files have changed in this diff Show More