diff --git a/apps/bridge-whatsapp/Dockerfile b/apps/bridge-whatsapp/Dockerfile index c074784..eefb62a 100644 --- a/apps/bridge-whatsapp/Dockerfile +++ b/apps/bridge-whatsapp/Dockerfile @@ -32,6 +32,7 @@ RUN chown -R node:node ${APP_DIR} WORKDIR ${APP_DIR}/apps/bridge-whatsapp/ RUN chmod +x docker-entrypoint.sh USER node +RUN mkdir /home/node/baileys EXPOSE 5000 ENV PORT 5000 ENV NODE_ENV production diff --git a/apps/bridge-whatsapp/src/index.ts b/apps/bridge-whatsapp/src/index.ts index 23d9b7b..21814f4 100644 --- a/apps/bridge-whatsapp/src/index.ts +++ b/apps/bridge-whatsapp/src/index.ts @@ -10,7 +10,7 @@ import { ReceiveMessageRoute, } from "./routes.js"; -const server = Hapi.server({ host: "localhost", port: 5000 }); +const server = Hapi.server({ port: 5000 }); const startServer = async () => { await server.register({ plugin: hapiPino }); diff --git a/apps/bridge-whatsapp/src/routes.ts b/apps/bridge-whatsapp/src/routes.ts index 8043bdc..10c9757 100644 --- a/apps/bridge-whatsapp/src/routes.ts +++ b/apps/bridge-whatsapp/src/routes.ts @@ -72,7 +72,9 @@ export const RegisterBotRoute = withDefaults({ const { id } = request.params; const whatsappService = getService(request); - await whatsappService.register(id, (error: string) => { + await whatsappService.register(id); + /* + , (error: string) => { if (error) { return _h.response(error).code(500); } @@ -80,6 +82,9 @@ export const RegisterBotRoute = withDefaults({ return _h.response().code(200); }); + */ + + return _h.response().code(200); }, }, }); diff --git a/apps/bridge-whatsapp/src/service.ts b/apps/bridge-whatsapp/src/service.ts index b25bf30..87143f6 100644 --- a/apps/bridge-whatsapp/src/service.ts +++ b/apps/bridge-whatsapp/src/service.ts @@ -28,8 +28,12 @@ export default class WhatsappService extends Service { super(server, options); } + getBaseDirectory(): string { + return `/home/node/baileys`; + } + getBotDirectory(id: string): string { - return `/baileys/${id}`; + return `${this.getBaseDirectory()}/${id}`; } getAuthDirectory(id: string): string { @@ -141,7 +145,8 @@ export default class WhatsappService extends Service { private async updateConnections() { this.resetConnections(); - const botIDs = fs.readdirSync("/baileys"); + const baseDirectory = this.getBaseDirectory(); + const botIDs = fs.readdirSync(baseDirectory); console.log({ botIDs }); for await (const botID of botIDs) { const directory = this.getBotDirectory(botID); @@ -220,6 +225,17 @@ export default class WhatsappService extends Service { whatsappBotId: botID, }; + const message = + webMessageInfo?.message?.conversation ?? + webMessageInfo?.message?.extendedTextMessage?.text ?? + webMessageInfo?.message?.imageMessage?.caption ?? + webMessageInfo?.message?.videoMessage?.caption; + + const payload = { + message, + sender: webMessageInfo.key.remoteJid?.split("@")[0], + }; + await fetch( `${process.env.BRIDGE_FRONTEND_URL}/api/whatsapp/bots/${botID}/receive`, { @@ -227,7 +243,7 @@ export default class WhatsappService extends Service { headers: { "Content-Type": "application/json", }, - body: JSON.stringify(receivedMessage), + body: JSON.stringify(payload), }, ); } @@ -258,10 +274,18 @@ export default class WhatsappService extends Service { fs.rmSync(botDirectory, { recursive: true, force: true }); } - async register(botID: string, callback: AuthCompleteCallback): Promise { + async register( + botID: string, + callback?: AuthCompleteCallback, + ): Promise { const { version } = await fetchLatestBaileysVersion(); - await this.createConnection(botID, this.server, { version }, callback); - callback(); + await this.createConnection( + botID, + this.server, + { version, browser: WhatsappService.browserDescription }, + callback, + ); + callback?.(); } async send( diff --git a/apps/bridge-whatsapp/tsconfig.json b/apps/bridge-whatsapp/tsconfig.json index b828499..162c4cb 100644 --- a/apps/bridge-whatsapp/tsconfig.json +++ b/apps/bridge-whatsapp/tsconfig.json @@ -1,8 +1,8 @@ { "extends": "ts-config", "compilerOptions": { - "module": "esnext", - "target": "esnext", + "module": "commonjs", + "target": "es2018", "esModuleInterop": true, "moduleResolution": "node", "outDir": "build/main", diff --git a/apps/bridge-worker/tasks/whatsapp/receive-whatsapp-message.ts b/apps/bridge-worker/tasks/whatsapp/receive-whatsapp-message.ts index 4eee24a..06f4b19 100644 --- a/apps/bridge-worker/tasks/whatsapp/receive-whatsapp-message.ts +++ b/apps/bridge-worker/tasks/whatsapp/receive-whatsapp-message.ts @@ -1,21 +1,33 @@ import { db, getWorkerUtils } from "bridge-common"; interface ReceiveWhatsappMessageTaskOptions { - token; - message: any; + token: string; + sender: string; + message: string; } const receiveWhatsappMessageTask = async ({ token, + sender, message, }: ReceiveWhatsappMessageTaskOptions): Promise => { - const bot = await db + console.log({ token, sender, message }); + const worker = await getWorkerUtils(); + const row = await db .selectFrom("WhatsappBot") .selectAll() - .where((eb) => eb.or([eb("token", "=", token), eb("id", "=", token)])) + .where("id", "=", token) .executeTakeFirstOrThrow(); - console.log(bot); + console.log(row); + + const backendId = row.id; + const payload = { + message, + recipient: sender, + }; + + await worker.addJob("common/notify-webhooks", { backendId, payload }); }; export default receiveWhatsappMessageTask; diff --git a/packages/bridge-ui/lib/service.ts b/packages/bridge-ui/lib/service.ts index 75f8a9e..a49edef 100644 --- a/packages/bridge-ui/lib/service.ts +++ b/packages/bridge-ui/lib/service.ts @@ -95,12 +95,12 @@ export class Service { { params: { service, token } }: ServiceParams, ): Promise { console.log("INTO receiveMessage"); - const message = await req.json(); - console.log({ message }); + const json = await req.json(); + console.log({ json }); const worker = await getWorkerUtils(); await worker.addJob(`${service}/receive-${service}-message`, { token, - message, + ...json, }); return NextResponse.json({ response: "ok" }); diff --git a/packages/bridge-ui/lib/whatsapp.ts b/packages/bridge-ui/lib/whatsapp.ts index 4e40327..2f3af00 100644 --- a/packages/bridge-ui/lib/whatsapp.ts +++ b/packages/bridge-ui/lib/whatsapp.ts @@ -22,14 +22,14 @@ export class Whatsapp extends Service { .where("id", "=", id) .execute(); - revalidatePath(`/whatsapp/${id}`); - if (!json.verified) { const url = `${process.env.BRIDGE_WHATSAPP_URL}/api/bots/${id}/register`; - const result = await fetch(url, { method: "POST", cache: "no-store" }); + const result = await fetch(url, { method: "POST" }); console.log({ result2: result }); } + revalidatePath(`/whatsapp/${id}`); + return NextResponse.json(json); } }