Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

⚡ (setVariable) Add "Environment name" value in Set variable block #850

Merged
merged 2 commits into from
Sep 26, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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'
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A new case 'Environment name' is added which returns 'whatsapp' or 'web' based on the truthiness of state.whatsApp?.contact.name. This logic seems to be assuming that the presence of a contact name implies a WhatsApp environment, which might not always be accurate. Consider refining this logic to more accurately determine the environment.

- return state.whatsApp?.contact.name ? 'whatsapp' : 'web'
+ return state.whatsApp ? '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