More Whatsapp Docker updates

This commit is contained in:
Darren Clarke 2024-05-17 09:20:00 +02:00
parent 3da103c010
commit e26e5832ff
8 changed files with 63 additions and 21 deletions

View file

@ -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

View file

@ -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 });

View file

@ -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);
},
},
});

View file

@ -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<void> {
async register(
botID: string,
callback?: AuthCompleteCallback,
): Promise<void> {
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(

View file

@ -1,8 +1,8 @@
{
"extends": "ts-config",
"compilerOptions": {
"module": "esnext",
"target": "esnext",
"module": "commonjs",
"target": "es2018",
"esModuleInterop": true,
"moduleResolution": "node",
"outDir": "build/main",

View file

@ -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<void> => {
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;

View file

@ -95,12 +95,12 @@ export class Service {
{ params: { service, token } }: ServiceParams,
): Promise<NextResponse> {
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" });

View file

@ -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);
}
}