main.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. const { WhasAppClient } = require('./whatsapp-client.js');
  2. const express = require('express');
  3. const axios = require('axios')
  4. const map = new Map();
  5. const duplicateMap = new Map();
  6. const app = express();
  7. app.use(express.json());
  8. app.get("/api/qr/:be", (req, res) => {
  9. try {
  10. console.log(`params:${req.params.be}`);
  11. const be = req.params.be;
  12. const waMap = map.get(be);
  13. if (waMap != null) {
  14. res.json({ status: '00', be: be });
  15. return;
  16. }
  17. const duplicate = duplicateMap.get(be);
  18. if (duplicate != null) {
  19. res.json({ status: '02', be: be, description: 'Duplicate request' });
  20. return;
  21. }
  22. duplicateMap.set(be, be);
  23. const wa = new WhasAppClient(be, res);
  24. wa.client.on('ready', () => {
  25. console.log(`be:${wa.clientId}:Client is ready!`);
  26. map.set(wa.clientId, wa.client);
  27. if (!wa.isGenerateQr) {
  28. res.json({ status: '00', be: wa.clientId });
  29. }
  30. });
  31. } catch (error) {
  32. console.log(`error:${error}`);
  33. }
  34. });
  35. app.post("/api/send/:be", async (req, res) => {
  36. try {
  37. console.log(`params:${req.params.be}, body:${JSON.stringify(req.body)}`);
  38. const be = req.params.be;
  39. const client = map.get(be);
  40. if (client == null) {
  41. res.json({ status: '01', be: be, description: 'Unauthorize access' });
  42. return;
  43. }
  44. const to = req.body.to;
  45. const message = req.body.message;
  46. if (Object.hasOwn(message, 'media')) {
  47. const media = req.body.message.media;
  48. const data = req.body.message.data;
  49. const caption = req.body.message.caption;
  50. let messageMedia = await new MessageMedia(media, data, caption)
  51. await client.sendMessage(`${to}@c.us`, messageMedia,);
  52. res.json({ status: '00', be: be });
  53. return;
  54. }
  55. await client.sendMessage(`${to}@c.us`, message);
  56. res.json({ status: '00', be: be });
  57. } catch (error) {
  58. console.log(`error:${error}`);
  59. }
  60. });
  61. const https = require('https');
  62. const fs = require('fs');
  63. const port = process.env.PORT || 9009;
  64. const options = {
  65. key: fs.readFileSync('./server.key'),
  66. cert: fs.readFileSync('./server.crt'),
  67. rejectUnauthorized: false,
  68. requestCert: true,
  69. agent: false
  70. };
  71. https.createServer(options, app).listen(port, () => {
  72. console.log(`Server running on port ${port}`);
  73. });