More Whatsapp Docker updates
This commit is contained in:
parent
3da103c010
commit
e26e5832ff
8 changed files with 63 additions and 21 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 });
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
},
|
||||
},
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"extends": "ts-config",
|
||||
"compilerOptions": {
|
||||
"module": "esnext",
|
||||
"target": "esnext",
|
||||
"module": "commonjs",
|
||||
"target": "es2018",
|
||||
"esModuleInterop": true,
|
||||
"moduleResolution": "node",
|
||||
"outDir": "build/main",
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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" });
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue