Closes #1154 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added authentication functionality for user sessions in chat API. - Introduced chat-related API endpoints for starting, previewing, and continuing chat sessions, and streaming messages. - Implemented WhatsApp API webhook handling for receiving and processing messages. - Added environment variable `NEXT_PUBLIC_CHAT_API_URL` for chat API URL configuration. - **Bug Fixes** - Adjusted file upload logic to correctly determine the API host. - Fixed message streaming URL in chat integration with OpenAI. - **Documentation** - Updated guides for creating blocks, local installation, self-hosting, and deployment to use `bun` instead of `pnpm`. - **Refactor** - Refactored chat API functionalities to use modular architecture. - Simplified client log saving and session update functionalities by using external functions. - Transitioned package management and workflow commands to use `bun`. - **Chores** - Switched to `bun` for package management in Dockerfiles and GitHub workflows. - Added new Dockerfile for chat API service setup with Bun framework. - Updated `.prettierignore` and documentation with new commands. - **Style** - No visible changes to end-users. - **Tests** - No visible changes to end-users. - **Revert** - No reverts in this release. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import { WhatsAppWebhookRequestBody } from '@typebot.io/schemas/features/whatsapp'
|
|
import { isNotDefined } from '@typebot.io/lib'
|
|
import { TRPCError } from '@trpc/server'
|
|
import { env } from '@typebot.io/env'
|
|
import { resumeWhatsAppFlow } from '../whatsapp/resumeWhatsAppFlow'
|
|
|
|
type Props = {
|
|
entry: WhatsAppWebhookRequestBody['entry']
|
|
}
|
|
export const receiveMessagePreview = ({ entry }: Props) => {
|
|
if (!env.WHATSAPP_PREVIEW_FROM_PHONE_NUMBER_ID)
|
|
throw new TRPCError({
|
|
code: 'INTERNAL_SERVER_ERROR',
|
|
message: 'WHATSAPP_PREVIEW_FROM_PHONE_NUMBER_ID is not defined',
|
|
})
|
|
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,
|
|
},
|
|
})
|
|
}
|