2
0
Files
bot/apps/builder/api/v1/whatsapp/preview/webhook.ts

42 lines
1.4 KiB
TypeScript

import {
WhatsAppWebhookRequestBody,
whatsAppWebhookRequestBodySchema,
} from '@typebot.io/schemas/features/whatsapp'
import { resumeWhatsAppFlow } from '@typebot.io/bot-engine/whatsapp/resumeWhatsAppFlow'
import { isNotDefined } from '@typebot.io/lib'
import { env } from '@typebot.io/env'
import type { RequestContext } from '@vercel/edge'
const processWhatsAppReply = async (
entry: WhatsAppWebhookRequestBody['entry']
) => {
const receivedMessage = entry.at(0)?.changes.at(0)?.value.messages?.at(0)
if (isNotDefined(receivedMessage)) return { message: 'No message found' }
const contactName =
entry.at(0)?.changes.at(0)?.value?.contacts?.at(0)?.profile?.name ?? ''
const contactPhoneNumber =
entry.at(0)?.changes.at(0)?.value?.messages?.at(0)?.from ?? ''
return resumeWhatsAppFlow({
receivedMessage,
sessionId: `wa-preview-${receivedMessage.from}`,
contact: {
name: contactName,
phoneNumber: contactPhoneNumber,
},
})
}
export async function POST(request: Request, context: RequestContext) {
if (!env.WHATSAPP_PREVIEW_FROM_PHONE_NUMBER_ID)
return new Response(
'WHATSAPP_PREVIEW_FROM_PHONE_NUMBER_ID is not defined',
{
status: 500,
}
)
const body = await request.json()
const { entry } = whatsAppWebhookRequestBodySchema.parse(body)
context.waitUntil(processWhatsAppReply(entry))
return new Response('Message is being processed.', { status: 200 })
}