2024-06-05 08:52:41 +02:00
|
|
|
import { db } from "@link-stack/bridge-common";
|
2025-08-20 11:37:39 +02:00
|
|
|
import { createLogger } from "@link-stack/logger";
|
|
|
|
|
|
|
|
|
|
const logger = createLogger('bridge-worker-send-facebook-message');
|
2024-04-30 13:13:49 +02:00
|
|
|
|
|
|
|
|
interface SendFacebookMessageTaskOptions {
|
|
|
|
|
token: string;
|
2024-07-18 11:08:01 +02:00
|
|
|
to: string;
|
|
|
|
|
message: string;
|
2024-04-30 13:13:49 +02:00
|
|
|
}
|
2024-04-21 16:59:50 +02:00
|
|
|
|
|
|
|
|
const sendFacebookMessageTask = async (
|
|
|
|
|
options: SendFacebookMessageTaskOptions,
|
|
|
|
|
): Promise<void> => {
|
2024-07-18 11:08:01 +02:00
|
|
|
const { token, to, message } = options;
|
2024-04-30 13:13:49 +02:00
|
|
|
const { pageId, pageAccessToken } = await db
|
2024-04-30 11:39:16 +02:00
|
|
|
.selectFrom("FacebookBot")
|
|
|
|
|
.selectAll()
|
2024-04-30 13:13:49 +02:00
|
|
|
.where("token", "=", token)
|
|
|
|
|
.executeTakeFirstOrThrow();
|
2024-04-30 11:39:16 +02:00
|
|
|
|
|
|
|
|
const endpoint = `https://graph.facebook.com/v19.0/${pageId}/messages`;
|
2024-04-30 13:13:49 +02:00
|
|
|
|
2024-04-30 11:39:16 +02:00
|
|
|
const outgoingMessage = {
|
2024-07-18 11:08:01 +02:00
|
|
|
recipient: { id: to },
|
|
|
|
|
message: { text: message },
|
2024-04-30 11:39:16 +02:00
|
|
|
messaging_type: "RESPONSE",
|
2024-04-30 13:13:49 +02:00
|
|
|
access_token: pageAccessToken,
|
2024-04-30 11:39:16 +02:00
|
|
|
};
|
2024-04-30 13:13:49 +02:00
|
|
|
|
2024-07-18 11:08:01 +02:00
|
|
|
try {
|
|
|
|
|
const response = await fetch(endpoint, {
|
|
|
|
|
method: "POST",
|
|
|
|
|
headers: { "Content-Type": "application/json" },
|
|
|
|
|
body: JSON.stringify(outgoingMessage),
|
|
|
|
|
});
|
|
|
|
|
} catch (error) {
|
2025-08-20 11:37:39 +02:00
|
|
|
logger.error({ error });
|
2024-07-18 11:08:01 +02:00
|
|
|
throw error;
|
|
|
|
|
}
|
2024-04-21 16:59:50 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default sendFacebookMessageTask;
|