Skip to content

Commit

Permalink
⚡ (setVariable) Add "Environment name" value in Set variable block
Browse files Browse the repository at this point in the history
Closes #848
  • Loading branch information
baptisteArno committed Sep 25, 2023
1 parent b81fcf0 commit fea86ce
Show file tree
Hide file tree
Showing 9 changed files with 58 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ const Expression = ({
case 'Tomorrow':
case 'User ID':
case 'Moment of the day':
case 'Environment name':
case 'Yesterday': {
return (
<Text as="span">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,17 @@ const SetVariableValue = ({
</Alert>
)
}
case 'Environment name': {
return (
<Alert fontSize="sm">
<AlertIcon />
<Text>
Will return either <Tag size="sm">web</Tag> or{' '}
<Tag size="sm">whatsapp</Tag>.
</Text>
</Alert>
)
}
case 'Contact name':
case 'Phone number':
case 'Random ID':
Expand Down
7 changes: 7 additions & 0 deletions apps/docs/openapi/builder/_spec_.json
Original file line number Diff line number Diff line change
Expand Up @@ -1979,6 +1979,7 @@
"enum": [
"Custom",
"Empty",
"Environment name",
"User ID",
"Now",
"Today",
Expand Down Expand Up @@ -6367,6 +6368,7 @@
"enum": [
"Custom",
"Empty",
"Environment name",
"User ID",
"Now",
"Today",
Expand Down Expand Up @@ -10396,6 +10398,7 @@
"enum": [
"Custom",
"Empty",
"Environment name",
"User ID",
"Now",
"Today",
Expand Down Expand Up @@ -14565,6 +14568,7 @@
"enum": [
"Custom",
"Empty",
"Environment name",
"User ID",
"Now",
"Today",
Expand Down Expand Up @@ -18614,6 +18618,7 @@
"enum": [
"Custom",
"Empty",
"Environment name",
"User ID",
"Now",
"Today",
Expand Down Expand Up @@ -22718,6 +22723,7 @@
"enum": [
"Custom",
"Empty",
"Environment name",
"User ID",
"Now",
"Today",
Expand Down Expand Up @@ -26885,6 +26891,7 @@
"enum": [
"Custom",
"Empty",
"Environment name",
"User ID",
"Now",
"Today",
Expand Down
1 change: 1 addition & 0 deletions apps/docs/openapi/chat/_spec_.json
Original file line number Diff line number Diff line change
Expand Up @@ -1574,6 +1574,7 @@
"enum": [
"Custom",
"Empty",
"Environment name",
"User ID",
"Now",
"Today",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,11 @@ const getExpressionToEvaluate =
(options: SetVariableBlock['options']): string | null => {
switch (options.type) {
case 'Contact name':
return state.whatsApp?.contact.name ?? ''
case 'Phone number':
return `"${state.whatsApp?.contact.phoneNumber}"` ?? ''
return state.whatsApp?.contact.name ?? null
case 'Phone number': {
const phoneNumber = state.whatsApp?.contact.phoneNumber
return phoneNumber ? `"${state.whatsApp?.contact.phoneNumber}"` : null
}
case 'Now':
case 'Today':
return 'new Date().toISOString()'
Expand Down Expand Up @@ -112,6 +114,9 @@ const getExpressionToEvaluate =
if(now.getHours() >= 18) return 'evening'
if(now.getHours() >= 22 || now.getHours() < 6) return 'night'`
}
case 'Environment name': {
return state.whatsApp?.contact.name ? 'whatsapp' : 'web'
}
case 'Custom':
case undefined: {
return options.expressionToEvaluate ?? null
Expand Down
3 changes: 3 additions & 0 deletions packages/bot-engine/startSession.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,13 @@ import { injectVariablesFromExistingResult } from './variables/injectVariablesFr
type Props = {
startParams: StartParams
userId: string | undefined
initialSessionState?: Pick<SessionState, 'whatsApp' | 'expiryTimeout'>
}

export const startSession = async ({
startParams,
userId,
initialSessionState,
}: Props): Promise<ChatReply & { newSessionState: SessionState }> => {
if (!startParams)
throw new TRPCError({
Expand Down Expand Up @@ -108,6 +110,7 @@ export const startSession = async ({
dynamicTheme: parseDynamicThemeInState(typebot.theme),
isStreamEnabled: startParams.isStreamEnabled,
typingEmulation: typebot.settings.typingEmulation,
...initialSessionState,
}

if (startParams.isOnlyRegistering) {
Expand Down
14 changes: 2 additions & 12 deletions packages/bot-engine/whatsapp/resumeWhatsAppFlow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,6 @@ export const resumeWhatsAppFlow = async ({
typebotId: typebot?.id,
})

const sessionState =
isPreview && session?.state
? ({
...session?.state,
whatsApp: {
contact,
},
} satisfies SessionState)
: session?.state

const credentials = await getCredentials({ credentialsId, isPreview })

if (!credentials) {
Expand All @@ -71,8 +61,8 @@ export const resumeWhatsAppFlow = async ({
session?.updatedAt.getTime() + session.state.expiryTimeout < Date.now()

const resumeResponse =
sessionState && !isSessionExpired
? await continueBotFlow(sessionState)(messageContent)
session && !isSessionExpired
? await continueBotFlow(session.state)(messageContent)
: workspaceId
? await startWhatsAppSession({
incomingMessage: messageContent,
Expand Down
46 changes: 24 additions & 22 deletions packages/bot-engine/whatsapp/startWhatsAppSession.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import {
} from '@typebot.io/schemas'
import {
WhatsAppCredentials,
WhatsAppIncomingMessage,
defaultSessionExpiryTimeout,
} from '@typebot.io/schemas/features/whatsapp'
import { isInputBlock, isNotDefined } from '@typebot.io/lib/utils'
Expand Down Expand Up @@ -73,47 +72,50 @@ export const startWhatsAppSession = async ({

if (isNotDefined(publicTypebot)) return

let session = await startSession({
const sessionExpiryTimeoutHours =
publicTypebot.settings.whatsApp?.sessionExpiryTimeout ??
defaultSessionExpiryTimeout

const session = await startSession({
startParams: {
typebot: publicTypebot.typebot.publicId as string,
},
userId: undefined,
initialSessionState: {
whatsApp: {
contact,
},
expiryTimeout: sessionExpiryTimeoutHours * 60 * 60 * 1000,
},
})

let newSessionState: SessionState = session.newSessionState

// If first block is an input block, we can directly continue the bot flow
const firstEdgeId =
session.newSessionState.typebotsQueue[0].typebot.groups[0].blocks[0]
.outgoingEdgeId
const nextGroup = await getNextGroup(session.newSessionState)(firstEdgeId)
newSessionState.typebotsQueue[0].typebot.groups[0].blocks[0].outgoingEdgeId
const nextGroup = await getNextGroup(newSessionState)(firstEdgeId)
const firstBlock = nextGroup.group?.blocks.at(0)
if (firstBlock && isInputBlock(firstBlock)) {
const resultId = session.newSessionState.typebotsQueue[0].resultId
const resultId = newSessionState.typebotsQueue[0].resultId
if (resultId)
await upsertResult({
hasStarted: true,
isCompleted: false,
resultId,
typebot: session.newSessionState.typebotsQueue[0].typebot,
typebot: newSessionState.typebotsQueue[0].typebot,
})
session = await continueBotFlow({
...session.newSessionState,
currentBlock: { groupId: firstBlock.groupId, blockId: firstBlock.id },
})(incomingMessage)
newSessionState = (
await continueBotFlow({
...newSessionState,
currentBlock: { groupId: firstBlock.groupId, blockId: firstBlock.id },
})(incomingMessage)
).newSessionState
}

const sessionExpiryTimeoutHours =
publicTypebot.settings.whatsApp?.sessionExpiryTimeout ??
defaultSessionExpiryTimeout

return {
...session,
newSessionState: {
...session.newSessionState,
whatsApp: {
contact,
},
expiryTimeout: sessionExpiryTimeoutHours * 60 * 60 * 1000,
},
newSessionState,
}
}

Expand Down
1 change: 1 addition & 0 deletions packages/schemas/features/blocks/logic/setVariable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { LogicBlockType } from './enums'
export const valueTypes = [
'Custom',
'Empty',
'Environment name',
'User ID',
'Now',
'Today',
Expand Down

0 comments on commit fea86ce

Please sign in to comment.