36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
![]() |
import { WhatsAppWebhookRequestBody } from '@typebot.io/schemas/features/whatsapp'
|
||
|
import { isNotDefined } from '@typebot.io/lib'
|
||
|
import { resumeWhatsAppFlow } from '../whatsapp/resumeWhatsAppFlow'
|
||
|
|
||
|
type Props = {
|
||
|
entry: WhatsAppWebhookRequestBody['entry']
|
||
|
credentialsId: string
|
||
|
workspaceId: string
|
||
|
}
|
||
|
|
||
|
export const receiveMessage = async ({
|
||
|
entry,
|
||
|
credentialsId,
|
||
|
workspaceId,
|
||
|
}: Props) => {
|
||
|
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 ?? ''
|
||
|
const phoneNumberId = entry.at(0)?.changes.at(0)?.value
|
||
|
.metadata.phone_number_id
|
||
|
if (!phoneNumberId) return { message: 'No phone number id found' }
|
||
|
return resumeWhatsAppFlow({
|
||
|
receivedMessage,
|
||
|
sessionId: `wa-${phoneNumberId}-${receivedMessage.from}`,
|
||
|
credentialsId,
|
||
|
workspaceId,
|
||
|
contact: {
|
||
|
name: contactName,
|
||
|
phoneNumber: contactPhoneNumber,
|
||
|
},
|
||
|
})
|
||
|
}
|