diff --git a/packages/bot-engine/executeGroup.ts b/packages/bot-engine/executeGroup.ts index 821c7b636..ce519fbab 100644 --- a/packages/bot-engine/executeGroup.ts +++ b/packages/bot-engine/executeGroup.ts @@ -119,7 +119,7 @@ export const executeGroup = } } - if (!nextEdgeId && state.typebotsQueue.length === 1) + if (!nextEdgeId && newSessionState.typebotsQueue.length === 1) return { messages, newSessionState, clientSideActions, logs } const nextGroup = await getNextGroup(newSessionState)( diff --git a/packages/bot-engine/getNextGroup.ts b/packages/bot-engine/getNextGroup.ts index b3826bf8b..212331c04 100644 --- a/packages/bot-engine/getNextGroup.ts +++ b/packages/bot-engine/getNextGroup.ts @@ -23,7 +23,7 @@ export const getNextGroup = isCompleted: true, hasStarted: state.typebotsQueue[0].answers.length > 0, }) - const newSessionState = { + let newSessionState = { ...state, typebotsQueue: [ { @@ -69,6 +69,7 @@ export const getNextGroup = ], } satisfies SessionState const nextGroup = await getNextGroup(newSessionState)(nextEdgeId) + newSessionState = nextGroup.newSessionState if (!nextGroup) return { newSessionState, diff --git a/packages/bot-engine/startBotFlow.ts b/packages/bot-engine/startBotFlow.ts index 88ee436b9..68edf7d56 100644 --- a/packages/bot-engine/startBotFlow.ts +++ b/packages/bot-engine/startBotFlow.ts @@ -7,6 +7,7 @@ export const startBotFlow = async ( state: SessionState, startGroupId?: string ): Promise => { + let newSessionState = state if (startGroupId) { const group = state.typebotsQueue[0].typebot.groups.find( (group) => group.id === startGroupId @@ -16,12 +17,13 @@ export const startBotFlow = async ( code: 'BAD_REQUEST', message: "startGroupId doesn't exist", }) - return executeGroup(state)(group) + return executeGroup(newSessionState)(group) } const firstEdgeId = - state.typebotsQueue[0].typebot.groups[0].blocks[0].outgoingEdgeId - if (!firstEdgeId) return { messages: [], newSessionState: state } - const nextGroup = await getNextGroup(state)(firstEdgeId) - if (!nextGroup.group) return { messages: [], newSessionState: state } - return executeGroup(state)(nextGroup.group) + newSessionState.typebotsQueue[0].typebot.groups[0].blocks[0].outgoingEdgeId + if (!firstEdgeId) return { messages: [], newSessionState } + const nextGroup = await getNextGroup(newSessionState)(firstEdgeId) + newSessionState = nextGroup.newSessionState + if (!nextGroup.group) return { messages: [], newSessionState } + return executeGroup(newSessionState)(nextGroup.group) } diff --git a/packages/bot-engine/whatsapp/startWhatsAppSession.ts b/packages/bot-engine/whatsapp/startWhatsAppSession.ts index 0140d7d6e..c79731b79 100644 --- a/packages/bot-engine/whatsapp/startWhatsAppSession.ts +++ b/packages/bot-engine/whatsapp/startWhatsAppSession.ts @@ -88,12 +88,13 @@ export const startWhatsAppSession = async ({ }, }) - const sessionState: SessionState = chatReply.newSessionState + let sessionState: SessionState = chatReply.newSessionState // If first block is an input block, we can directly continue the bot flow const firstEdgeId = sessionState.typebotsQueue[0].typebot.groups[0].blocks[0].outgoingEdgeId const nextGroup = await getNextGroup(sessionState)(firstEdgeId) + sessionState = nextGroup.newSessionState const firstBlock = nextGroup.group?.blocks.at(0) if (firstBlock && isInputBlock(firstBlock)) { const resultId = sessionState.typebotsQueue[0].resultId