diff --git a/.github/scripts/utils/docs-generator.js b/.github/scripts/utils/docs-generator.js
index 4261f869..8f35b763 100644
--- a/.github/scripts/utils/docs-generator.js
+++ b/.github/scripts/utils/docs-generator.js
@@ -3,197 +3,198 @@ import { join, dirname } from 'path'
import { fileURLToPath } from 'url'
function fileExists(filePath) {
- try {
- return existsSync(filePath);
- } catch {
- return false;
- }
+ try {
+ return existsSync(filePath)
+ } catch {
+ return false
+ }
}
function getFileHash(content) {
- // Simple hash function for content comparison
- let hash = 0;
- for (let i = 0; i < content.length; i++) {
- const char = content.charCodeAt(i);
- hash = ((hash << 5) - hash) + char;
- hash = hash & hash; // Convert to 32-bit integer
- }
- return hash.toString();
+ // Simple hash function for content comparison
+ let hash = 0
+ for (let i = 0; i < content.length; i++) {
+ const char = content.charCodeAt(i)
+ hash = (hash << 5) - hash + char
+ hash = hash & hash // Convert to 32-bit integer
+ }
+ return hash.toString()
}
function capitalize(str) {
- // Add spaces before uppercase letters (for camelCase) and capitalize first letter
- return str
- .replace(/([a-z])([A-Z])/g, '$1 $2')
- .charAt(0).toUpperCase() + str.replace(/([a-z])([A-Z])/g, '$1 $2').slice(1)
+ // Add spaces before uppercase letters (for camelCase) and capitalize first letter
+ return (
+ str
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
+ .charAt(0)
+ .toUpperCase() + str.replace(/([a-z])([A-Z])/g, '$1 $2').slice(1)
+ )
}
function preserveEscaping(text) {
- if (!text) return '';
- const escapedText = JSON.stringify(text)
- return `{${escapedText}}`;
+ if (!text) return ''
+ const escapedText = JSON.stringify(text)
+ return `{${escapedText}}`
}
function generateResponseField(name, field, required = []) {
- const isRequired = required.includes(name)
- const title = field['x-zui']?.title || name
-
- // Handle type display with multiple types and enums
- let typeDisplay = 'string' // default
- let enumOptions = null
-
- if (field.type) {
- if (Array.isArray(field.type)) {
- // Multiple types - join with " | "
- typeDisplay = field.type.join(' | ')
- } else {
- typeDisplay = field.type
- }
- }
-
- // Handle anyOf/oneOf for multiple types
- if (field.anyOf || field.oneOf) {
- const schemas = field.anyOf || field.oneOf
- const types = schemas.map(schema => {
- if (schema.type === 'null') return 'null'
- return schema.type || 'string'
- })
- typeDisplay = types.join(' | ')
- }
-
- // Handle format
- if (field.format && !field.enum) {
- typeDisplay = `${typeDisplay} (${field.format})`
- }
-
- // Handle enums - use enum format
- if (field.enum) {
- const baseType = field.type || 'string'
- typeDisplay = `enum<${baseType}>`
- enumOptions = field.enum
- }
-
- const requiredProp = isRequired ? '\n required' : ''
- let defaultProp = ''
- if (field.default !== undefined) {
- if (typeof field.default === 'string') {
- defaultProp = `\n default="${field.default}"`
- } else {
- defaultProp = `\n default={${JSON.stringify(field.default)}}`
- }
+ const isRequired = required.includes(name)
+ const title = field['x-zui']?.title || name
+
+ // Handle type display with multiple types and enums
+ let typeDisplay = 'string' // default
+ let enumOptions = null
+
+ if (field.type) {
+ if (Array.isArray(field.type)) {
+ // Multiple types - join with " | "
+ typeDisplay = field.type.join(' | ')
+ } else {
+ typeDisplay = field.type
}
- let description = preserveEscaping(field.description || '')
-
- // Add enum options to description if present
- if (enumOptions) {
- const formattedOptions = enumOptions.map(option => `\`${option}\``).join(', ')
- const enumText = `\n\nAvailable options: ${formattedOptions}`
- description = description ? description + enumText : enumText.trim()
+ }
+
+ // Handle anyOf/oneOf for multiple types
+ if (field.anyOf || field.oneOf) {
+ const schemas = field.anyOf || field.oneOf
+ const types = schemas.map((schema) => {
+ if (schema.type === 'null') return 'null'
+ return schema.type || 'string'
+ })
+ typeDisplay = types.join(' | ')
+ }
+
+ // Handle format
+ if (field.format && !field.enum) {
+ typeDisplay = `${typeDisplay} (${field.format})`
+ }
+
+ // Handle enums - use enum format
+ if (field.enum) {
+ const baseType = field.type || 'string'
+ typeDisplay = `enum<${baseType}>`
+ enumOptions = field.enum
+ }
+
+ const requiredProp = isRequired ? '\n required' : ''
+ let defaultProp = ''
+ if (field.default !== undefined) {
+ if (typeof field.default === 'string') {
+ defaultProp = `\n default="${field.default}"`
+ } else {
+ defaultProp = `\n default={${JSON.stringify(field.default)}}`
}
-
- let fieldContent = ` `\`${option}\``).join(', ')
+ const enumText = `\n\nAvailable options: ${formattedOptions}`
+ description = description ? description + enumText : enumText.trim()
+ }
+
+ let fieldContent = `
${description}`
-
- // Handle nested properties for objects
- if (field.type === 'object' && field.properties) {
- const nestedRequired = field.required || []
- const nestedFields = Object.entries(field.properties)
- .map(([nestedName, nestedField]) => generateResponseField(nestedName, nestedField, nestedRequired))
- .join('\n')
-
- if (nestedFields) {
- fieldContent += `\n\n \n${nestedFields}\n `
- }
+
+ // Handle nested properties for objects
+ if (field.type === 'object' && field.properties) {
+ const nestedRequired = field.required || []
+ const nestedFields = Object.entries(field.properties)
+ .map(([nestedName, nestedField]) => generateResponseField(nestedName, nestedField, nestedRequired))
+ .join('\n')
+
+ if (nestedFields) {
+ fieldContent += `\n\n \n${nestedFields}\n `
}
-
- // Handle arrays with object items
- if (field.type === 'array' && field.items) {
- let arrayItemContent = ''
-
- // Handle simple object items
- if (field.items.properties) {
- const nestedRequired = field.items.required || []
- const nestedFields = Object.entries(field.items.properties)
- .map(([nestedName, nestedField]) => generateResponseField(nestedName, nestedField, nestedRequired))
- .join('\n')
-
- if (nestedFields) {
- arrayItemContent = `\n\n \n${nestedFields}\n `
- }
- }
-
- // Handle anyOf/oneOf schemas (multiple possible item types)
- else if (field.items.anyOf || field.items.oneOf) {
- const schemas = field.items.anyOf || field.items.oneOf
- let tabContent = ''
-
- schemas.forEach((schema, index) => {
- if (schema.properties) {
- const schemaRequired = schema.required || []
- const schemaFields = Object.entries(schema.properties)
- .map(([nestedName, nestedField]) => generateResponseField(nestedName, nestedField, schemaRequired))
- .join('\n')
-
- if (schemaFields) {
- const tabTitle = schema.properties.type?.const
- ? schema.properties.type.const
- : `Option ${index + 1}`
- tabContent += `\n
+ }
+
+ // Handle arrays with object items
+ if (field.type === 'array' && field.items) {
+ let arrayItemContent = ''
+
+ // Handle simple object items
+ if (field.items.properties) {
+ const nestedRequired = field.items.required || []
+ const nestedFields = Object.entries(field.items.properties)
+ .map(([nestedName, nestedField]) => generateResponseField(nestedName, nestedField, nestedRequired))
+ .join('\n')
+
+ if (nestedFields) {
+ arrayItemContent = `\n\n \n${nestedFields}\n `
+ }
+ }
+
+ // Handle anyOf/oneOf schemas (multiple possible item types)
+ else if (field.items.anyOf || field.items.oneOf) {
+ const schemas = field.items.anyOf || field.items.oneOf
+ let tabContent = ''
+
+ schemas.forEach((schema, index) => {
+ if (schema.properties) {
+ const schemaRequired = schema.required || []
+ const schemaFields = Object.entries(schema.properties)
+ .map(([nestedName, nestedField]) => generateResponseField(nestedName, nestedField, schemaRequired))
+ .join('\n')
+
+ if (schemaFields) {
+ const tabTitle = schema.properties.type?.const ? schema.properties.type.const : `Option ${index + 1}`
+ tabContent += `\n
${schemaFields}
`
- }
- }
- })
-
- if (tabContent) {
- arrayItemContent = `\n\n ${tabContent}\n `
- }
- }
-
- if (arrayItemContent) {
- fieldContent += arrayItemContent
+ }
}
+ })
+
+ if (tabContent) {
+ arrayItemContent = `\n\n ${tabContent}\n `
+ }
+ }
+
+ if (arrayItemContent) {
+ fieldContent += arrayItemContent
}
-
- fieldContent += `\n `
-
- return fieldContent
+ }
+
+ fieldContent += `\n `
+
+ return fieldContent
}
function generateExpandableSection(schema, title) {
- if (!schema?.properties) {
- return `\n \n No specific fields documented.\n \n`
- }
-
- const required = schema.required || []
- const fields = Object.entries(schema.properties)
- .map(([name, field]) => generateResponseField(name, field, required))
- .join('\n')
-
- return `\n${fields}\n`
+ if (!schema?.properties) {
+ return `\n \n No specific fields documented.\n \n`
+ }
+
+ const required = schema.required || []
+ const fields = Object.entries(schema.properties)
+ .map(([name, field]) => generateResponseField(name, field, required))
+ .join('\n')
+
+ return `\n${fields}\n`
}
function generateActionSection(actionName, actionData) {
- const title = actionData.title || capitalize(actionName)
- const description = preserveEscaping(actionData.description || '')
-
- // Generate input section wrapped in ResponseField
- let inputSection = ''
- if (actionData.input?.schema?.properties && Object.keys(actionData.input.schema.properties).length > 0) {
- const required = actionData.input.schema.required || []
- const fields = Object.entries(actionData.input.schema.properties)
- .map(([name, field]) => generateResponseField(name, field, required))
- .join('\n')
-
- const inputDescription = preserveEscaping(actionData.input.schema.description || '')
- const descriptionSection = inputDescription ? ` ${inputDescription}\n\n` : ''
-
- inputSection = ` 0) {
+ const required = actionData.input.schema.required || []
+ const fields = Object.entries(actionData.input.schema.properties)
+ .map(([name, field]) => generateResponseField(name, field, required))
+ .join('\n')
+
+ const inputDescription = preserveEscaping(actionData.input.schema.description || '')
+ const descriptionSection = inputDescription ? ` ${inputDescription}\n\n` : ''
+
+ inputSection = `
@@ -201,27 +202,27 @@ ${descriptionSection}
${fields}
`
- } else {
- inputSection = `
This Card has no input fields.
`
- }
-
- // Generate output section wrapped in ResponseField
- let outputSection = ''
- if (actionData.output?.schema?.properties && Object.keys(actionData.output.schema.properties).length > 0) {
- const required = actionData.output.schema.required || []
- const fields = Object.entries(actionData.output.schema.properties)
- .map(([name, field]) => generateResponseField(name, field, required))
- .join('\n')
-
- const outputDescription = preserveEscaping(actionData.output.schema.description || '')
- const descriptionSection = outputDescription ? ` ${outputDescription}\n\n` : ''
-
- outputSection = ` 0) {
+ const required = actionData.output.schema.required || []
+ const fields = Object.entries(actionData.output.schema.properties)
+ .map(([name, field]) => generateResponseField(name, field, required))
+ .join('\n')
+
+ const outputDescription = preserveEscaping(actionData.output.schema.description || '')
+ const descriptionSection = outputDescription ? ` ${outputDescription}\n\n` : ''
+
+ outputSection = `
@@ -229,40 +230,40 @@ ${descriptionSection}
${fields}
`
- } else {
- outputSection = `
This Card has no output.
`
- }
-
- // Build the section with optional description
- let section = `### ${title}\n\n`
-
- if (description) {
- section += `${description}\n\n`
- }
-
- section += `${inputSection}\n\n${outputSection}\n\n`
-
- return section
+ }
+
+ // Build the section with optional description
+ let section = `### ${title}\n\n`
+
+ if (description) {
+ section += `${description}\n\n`
+ }
+
+ section += `${inputSection}\n\n${outputSection}\n\n`
+
+ return section
}
function generateTriggerSection(eventName, eventData) {
- const title = eventData.title || capitalize(eventName)
- const description = preserveEscaping(eventData.description || '')
-
- // Generate payload section
- let payloadSection
- if (eventData.schema?.properties && Object.keys(eventData.schema.properties).length > 0) {
- const required = eventData.schema.required || []
- const fields = Object.entries(eventData.schema.properties)
- .map(([name, field]) => generateResponseField(name, field, required))
- .join('\n')
-
- payloadSection = ` 0) {
+ const required = eventData.schema.required || []
+ const fields = Object.entries(eventData.schema.properties)
+ .map(([name, field]) => generateResponseField(name, field, required))
+ .join('\n')
+
+ payloadSection = `
@@ -272,48 +273,53 @@ function generateTriggerSection(eventName, eventData) {
${fields}
`
- } else {
- payloadSection = `
This Trigger has no payload.
`
- }
-
- // Build the section with optional description
- let section = `### ${title}\n\n`
-
- if (description) {
- section += `${description}\n\n`
- }
-
- section += `${payloadSection}\n\n`
-
- return section
+ }
+
+ // Build the section with optional description
+ let section = `### ${title}\n\n`
+
+ if (description) {
+ section += `${description}\n\n`
+ }
+
+ section += `${payloadSection}\n\n`
+
+ return section
}
function generateCardDocumentation(integrationName, actions) {
- let mdxContent = `{/* This file is auto-generated. Do not edit directly. */}
+ let mdxContent = `{/* This file is auto-generated. Do not edit directly. */}
{/* vale off */}
Here's a reference for all [Cards](/studio/concepts/cards/introduction) available with the integration:
`
-
- // Generate action sections
- for (const [actionName, actionData] of Object.entries(actions)) {
- mdxContent += generateActionSection(actionName, actionData)
+
+ // Generate action sections
+ for (const [actionName, actionData] of Object.entries(actions)) {
+ // Skip actions hidden in studio (API returns string "true", not boolean)
+ const isHidden = actionData.attributes?.bpActionHiddenInStudio
+ if (isHidden === true || isHidden === 'true') {
+ continue
}
-
- // Add vale on comment at the end
- mdxContent += '\n{/* vale on */}'
-
- return mdxContent
+ mdxContent += generateActionSection(actionName, actionData)
+ }
+
+ // Add vale on comment at the end
+ mdxContent += '\n{/* vale on */}'
+
+ return mdxContent
}
function generateTriggerDocumentation(integrationName, events) {
- let mdxContent = `{/* This file is auto-generated. Do not edit directly. */}
+ let mdxContent = `{/* This file is auto-generated. Do not edit directly. */}
{/* vale off */}
Here's a reference for all [Triggers](/studio/concepts/triggers/) available with the integration:
@@ -325,16 +331,21 @@ You can access data returned from any of these Triggers by reading \`event.paylo
`
-
- // Generate trigger sections
- for (const [eventName, eventData] of Object.entries(events)) {
- mdxContent += generateTriggerSection(eventName, eventData)
+
+ // Generate trigger sections
+ for (const [eventName, eventData] of Object.entries(events)) {
+ // Skip events hidden in studio (API returns string "true", not boolean)
+ const isHidden = eventData.attributes?.bpActionHiddenInStudio
+ if (isHidden === true || isHidden === 'true') {
+ continue
}
-
- // Add vale on comment at the end
- mdxContent += '\n{/* vale on */}'
-
- return mdxContent
+ mdxContent += generateTriggerSection(eventName, eventData)
+ }
+
+ // Add vale on comment at the end
+ mdxContent += '\n{/* vale on */}'
+
+ return mdxContent
}
/**
@@ -345,59 +356,58 @@ You can access data returned from any of these Triggers by reading \`event.paylo
* @param {string} [baseDir] - Base directory for the script (defaults to current script's directory)
*/
async function updateVersionsFile(integrationName, version, id, baseDir = null) {
- // Get the directory of the current script or use provided baseDir
- const __filename = fileURLToPath(import.meta.url)
- const __dirname = baseDir || dirname(__filename)
-
- // Path to versions.mdx file
- const versionsFilePath = join(__dirname, '../../../snippets/integrations/versions.mdx')
-
- if (!existsSync(versionsFilePath)) {
- console.log(`versions.mdx file not found at ${versionsFilePath}`)
- return false
+ // Get the directory of the current script or use provided baseDir
+ const __filename = fileURLToPath(import.meta.url)
+ const __dirname = baseDir || dirname(__filename)
+
+ // Path to versions.mdx file
+ const versionsFilePath = join(__dirname, '../../../snippets/integrations/versions.mdx')
+
+ if (!existsSync(versionsFilePath)) {
+ console.log(`versions.mdx file not found at ${versionsFilePath}`)
+ return false
+ }
+
+ try {
+ // Read and evaluate the versions.mdx file to get the integrationVersions object
+ const fileContent = readFileSync(versionsFilePath, 'utf8')
+
+ // Extract the integrationVersions object from the file content
+ // The file exports: export const integrationVersions = { ... }
+ const match = fileContent.match(/export const integrationVersions = ({[\s\S]*})/m)
+ if (!match) {
+ throw new Error('Could not find integrationVersions export in versions.mdx')
}
-
- try {
- // Read and evaluate the versions.mdx file to get the integrationVersions object
- const fileContent = readFileSync(versionsFilePath, 'utf8')
-
- // Extract the integrationVersions object from the file content
- // The file exports: export const integrationVersions = { ... }
- const match = fileContent.match(/export const integrationVersions = ({[\s\S]*})/m)
- if (!match) {
- throw new Error('Could not find integrationVersions export in versions.mdx')
- }
-
- // Parse the JSON object
- const integrationVersions = JSON.parse(match[1])
-
- // Check if this is an update or new entry
- const isUpdate = integrationVersions.hasOwnProperty(integrationName)
-
- // Update the object
- integrationVersions[integrationName] = {
- version: version,
- id: id
- }
-
- // Generate the new file content
- const newContent = `export const integrationVersions = ${JSON.stringify(integrationVersions, null, 2)}\n`
-
- // Write the updated content back to the file
- writeFileSync(versionsFilePath, newContent, 'utf8')
-
- if (isUpdate) {
- console.log(`Updated ${integrationName} version (${version})...`)
- } else {
- console.log(`Added ${integrationName} version (${version})...`)
- }
-
- return true
-
- } catch (error) {
- console.error(`Error updating version for ${integrationName}:`, error.message)
- return false
+
+ // Parse the JSON object
+ const integrationVersions = JSON.parse(match[1])
+
+ // Check if this is an update or new entry
+ const isUpdate = integrationVersions.hasOwnProperty(integrationName)
+
+ // Update the object
+ integrationVersions[integrationName] = {
+ version: version,
+ id: id,
+ }
+
+ // Generate the new file content
+ const newContent = `export const integrationVersions = ${JSON.stringify(integrationVersions, null, 2)}\n`
+
+ // Write the updated content back to the file
+ writeFileSync(versionsFilePath, newContent, 'utf8')
+
+ if (isUpdate) {
+ console.log(`Updated ${integrationName} version (${version})...`)
+ } else {
+ console.log(`Added ${integrationName} version (${version})...`)
}
+
+ return true
+ } catch (error) {
+ console.error(`Error updating version for ${integrationName}:`, error.message)
+ return false
+ }
}
/**
@@ -408,121 +418,121 @@ async function updateVersionsFile(integrationName, version, id, baseDir = null)
* @returns {Object} Result object with update information
*/
export async function processIntegration(integrationName, integrationData, baseDir = null) {
- // Get the directory of the current script or use provided baseDir
- const __filename = fileURLToPath(import.meta.url)
- const __dirname = baseDir || dirname(__filename)
-
- // Create the paths to the cards and triggers directories
- const cardsDir = join(__dirname, '../../../snippets/integrations/cards')
- const triggersDir = join(__dirname, '../../../snippets/integrations/triggers')
-
- const result = {
- cards: { updated: false, isNew: false, count: 0 },
- triggers: { updated: false, isNew: false, count: 0 }
+ // Get the directory of the current script or use provided baseDir
+ const __filename = fileURLToPath(import.meta.url)
+ const __dirname = baseDir || dirname(__filename)
+
+ // Create the paths to the cards and triggers directories
+ const cardsDir = join(__dirname, '../../../snippets/integrations/cards')
+ const triggersDir = join(__dirname, '../../../snippets/integrations/triggers')
+
+ const result = {
+ cards: { updated: false, isNew: false, count: 0 },
+ triggers: { updated: false, isNew: false, count: 0 },
+ }
+
+ const { actions: integrationActions, events: integrationEvents, workspace, version, id } = integrationData
+
+ // Sanitize integration name for file system (replace slashes with hyphens)
+ const sanitizedName = integrationName.replace(/\//g, '-')
+
+ // Handle Cards documentation
+ if (integrationActions && Object.keys(integrationActions).length > 0) {
+ // Create workspace subdirectory for cards
+ const cardsWorkspaceDir = join(cardsDir, workspace)
+ if (!existsSync(cardsWorkspaceDir)) {
+ mkdirSync(cardsWorkspaceDir, { recursive: true })
}
-
- const { actions: integrationActions, events: integrationEvents, workspace, version, id } = integrationData
-
- // Sanitize integration name for file system (replace slashes with hyphens)
- const sanitizedName = integrationName.replace(/\//g, '-')
-
- // Handle Cards documentation
- if (integrationActions && Object.keys(integrationActions).length > 0) {
- // Create workspace subdirectory for cards
- const cardsWorkspaceDir = join(cardsDir, workspace)
- if (!existsSync(cardsWorkspaceDir)) {
- mkdirSync(cardsWorkspaceDir, { recursive: true })
- }
-
- // Generate new card content
- const cardFilePath = join(cardsWorkspaceDir, `${sanitizedName}.mdx`)
- const newCardContent = generateCardDocumentation(integrationName, integrationActions)
-
- // Check if file exists and content has changed
- const cardFileExisted = fileExists(cardFilePath)
- let cardHasChanged = true
-
- if (cardFileExisted) {
- try {
- const existingContent = readFileSync(cardFilePath, 'utf8')
- const existingHash = getFileHash(existingContent)
- const newHash = getFileHash(newCardContent)
- cardHasChanged = existingHash !== newHash
- } catch (error) {
- console.log(`Could not read existing card file ${cardFilePath}, treating as new...`)
- cardHasChanged = true
- }
- }
-
- if (cardHasChanged || !cardFileExisted) {
- writeFileSync(cardFilePath, newCardContent, 'utf8')
-
- const actionCount = Object.keys(integrationActions).length
- result.cards.updated = true
- result.cards.isNew = !cardFileExisted
- result.cards.count = actionCount
-
- if (!cardFileExisted) {
- console.log(`Created ${sanitizedName} Cards reference...`)
- } else {
- console.log(`Updated ${sanitizedName} Cards reference...`)
- }
- }
+
+ // Generate new card content
+ const cardFilePath = join(cardsWorkspaceDir, `${sanitizedName}.mdx`)
+ const newCardContent = generateCardDocumentation(integrationName, integrationActions)
+
+ // Check if file exists and content has changed
+ const cardFileExisted = fileExists(cardFilePath)
+ let cardHasChanged = true
+
+ if (cardFileExisted) {
+ try {
+ const existingContent = readFileSync(cardFilePath, 'utf8')
+ const existingHash = getFileHash(existingContent)
+ const newHash = getFileHash(newCardContent)
+ cardHasChanged = existingHash !== newHash
+ } catch (error) {
+ console.log(`Could not read existing card file ${cardFilePath}, treating as new...`)
+ cardHasChanged = true
+ }
}
-
- // Handle Triggers documentation
- if (integrationEvents && Object.keys(integrationEvents).length > 0) {
- // Create workspace subdirectory for triggers
- const triggersWorkspaceDir = join(triggersDir, workspace)
- if (!existsSync(triggersWorkspaceDir)) {
- mkdirSync(triggersWorkspaceDir, { recursive: true })
- }
-
- // Generate new trigger content
- const triggerFilePath = join(triggersWorkspaceDir, `${sanitizedName}.mdx`)
- const newTriggerContent = generateTriggerDocumentation(integrationName, integrationEvents)
-
- // Check if file exists and content has changed
- const triggerFileExisted = fileExists(triggerFilePath)
- let triggerHasChanged = true
-
- if (triggerFileExisted) {
- try {
- const existingContent = readFileSync(triggerFilePath, 'utf8')
- const existingHash = getFileHash(existingContent)
- const newHash = getFileHash(newTriggerContent)
- triggerHasChanged = existingHash !== newHash
- } catch (error) {
- console.log(`Could not read existing trigger file ${triggerFilePath}, treating as new...`)
- triggerHasChanged = true
- }
- }
-
- if (triggerHasChanged || !triggerFileExisted) {
- writeFileSync(triggerFilePath, newTriggerContent, 'utf8')
-
- const eventCount = Object.keys(integrationEvents).length
- result.triggers.updated = true
- result.triggers.isNew = !triggerFileExisted
- result.triggers.count = eventCount
-
- if (!triggerFileExisted) {
- console.log(`Created ${sanitizedName} Triggers reference...`)
- } else {
- console.log(`Updated ${sanitizedName} Triggers reference...`)
- }
- }
+
+ if (cardHasChanged || !cardFileExisted) {
+ writeFileSync(cardFilePath, newCardContent, 'utf8')
+
+ const actionCount = Object.keys(integrationActions).length
+ result.cards.updated = true
+ result.cards.isNew = !cardFileExisted
+ result.cards.count = actionCount
+
+ if (!cardFileExisted) {
+ console.log(`Created ${sanitizedName} Cards reference...`)
+ } else {
+ console.log(`Updated ${sanitizedName} Cards reference...`)
+ }
}
-
- // Update versions.mdx file if we have version and id information
- if (version && id && (result.cards.updated || result.triggers.updated)) {
- const versionUpdated = await updateVersionsFile(integrationName, version, id, baseDir)
- if (versionUpdated) {
- result.versionUpdated = true
- }
+ }
+
+ // Handle Triggers documentation
+ if (integrationEvents && Object.keys(integrationEvents).length > 0) {
+ // Create workspace subdirectory for triggers
+ const triggersWorkspaceDir = join(triggersDir, workspace)
+ if (!existsSync(triggersWorkspaceDir)) {
+ mkdirSync(triggersWorkspaceDir, { recursive: true })
}
-
- return result
+
+ // Generate new trigger content
+ const triggerFilePath = join(triggersWorkspaceDir, `${sanitizedName}.mdx`)
+ const newTriggerContent = generateTriggerDocumentation(integrationName, integrationEvents)
+
+ // Check if file exists and content has changed
+ const triggerFileExisted = fileExists(triggerFilePath)
+ let triggerHasChanged = true
+
+ if (triggerFileExisted) {
+ try {
+ const existingContent = readFileSync(triggerFilePath, 'utf8')
+ const existingHash = getFileHash(existingContent)
+ const newHash = getFileHash(newTriggerContent)
+ triggerHasChanged = existingHash !== newHash
+ } catch (error) {
+ console.log(`Could not read existing trigger file ${triggerFilePath}, treating as new...`)
+ triggerHasChanged = true
+ }
+ }
+
+ if (triggerHasChanged || !triggerFileExisted) {
+ writeFileSync(triggerFilePath, newTriggerContent, 'utf8')
+
+ const eventCount = Object.keys(integrationEvents).length
+ result.triggers.updated = true
+ result.triggers.isNew = !triggerFileExisted
+ result.triggers.count = eventCount
+
+ if (!triggerFileExisted) {
+ console.log(`Created ${sanitizedName} Triggers reference...`)
+ } else {
+ console.log(`Updated ${sanitizedName} Triggers reference...`)
+ }
+ }
+ }
+
+ // Update versions.mdx file if we have version and id information
+ if (version && id && (result.cards.updated || result.triggers.updated)) {
+ const versionUpdated = await updateVersionsFile(integrationName, version, id, baseDir)
+ if (versionUpdated) {
+ result.versionUpdated = true
+ }
+ }
+
+ return result
}
/**
@@ -532,35 +542,35 @@ export async function processIntegration(integrationName, integrationData, baseD
* @returns {Object} Summary of all updates
*/
export async function processIntegrations(integrations, baseDir = null) {
- const updatedCards = []
- const newCards = []
- const updatedTriggers = []
- const newTriggers = []
-
- for (const [integrationName, integrationData] of Object.entries(integrations)) {
- const result = await processIntegration(integrationName, integrationData, baseDir)
-
- if (result.cards.updated) {
- if (result.cards.isNew) {
- newCards.push(integrationName)
- } else {
- updatedCards.push(integrationName)
- }
- }
-
- if (result.triggers.updated) {
- if (result.triggers.isNew) {
- newTriggers.push(integrationName)
- } else {
- updatedTriggers.push(integrationName)
- }
- }
+ const updatedCards = []
+ const newCards = []
+ const updatedTriggers = []
+ const newTriggers = []
+
+ for (const [integrationName, integrationData] of Object.entries(integrations)) {
+ const result = await processIntegration(integrationName, integrationData, baseDir)
+
+ if (result.cards.updated) {
+ if (result.cards.isNew) {
+ newCards.push(integrationName)
+ } else {
+ updatedCards.push(integrationName)
+ }
}
-
- return {
- updatedCards,
- newCards,
- updatedTriggers,
- newTriggers
+
+ if (result.triggers.updated) {
+ if (result.triggers.isNew) {
+ newTriggers.push(integrationName)
+ } else {
+ updatedTriggers.push(integrationName)
+ }
}
+ }
+
+ return {
+ updatedCards,
+ newCards,
+ updatedTriggers,
+ newTriggers,
+ }
}
diff --git a/snippets/integrations/cards/botpress/confluence.mdx b/snippets/integrations/cards/botpress/confluence.mdx
index b40380a8..094e1a6c 100644
--- a/snippets/integrations/cards/botpress/confluence.mdx
+++ b/snippets/integrations/cards/botpress/confluence.mdx
@@ -233,286 +233,6 @@ Available options: `current`, `draft`, `archived`, `historical`, `trashed`, `any
This Card has no output.
-### List items in folder
-
-{"List the files and folders in a folder"}
-
-
-
-
- {"The folder's ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique."}
-
-
- {"Optional search filters"}
-
-
-
- {"The entity type"}
-
-Available options: `file`, `folder`
-
-
- {"Filter the items by maximum size (in bytes)"}
-
-
- {"Filter the items modified after the given date"}
-
-
-
-
- {"The token to get the next page of items. Leave empty to get the first page."}
-
-
-
-
-
-
-
- {"The files and folders in the folder"}
-
-
-
-
-
- {"The file's ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique."}
-
-
-
-
-
- {"The file's name. This will be displayed in the Botpress UI and be used as the file's name on Files API.\""}
-
-
- {"The parent folder ID. Leave empty if the file is in the root folder."}
-
-
- {"The absolute path of the file. Leave empty if not available."}
-
-
- {"The file size in bytes, if available"}
-
-
- {"The last modified date of the file, if available"}
-
-
- {"The hash of the file content, or version/revision number, if available"}
-
-
-
-
-
-
- {"The folder's ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique."}
-
-
-
-
-
- {"The folder's name. This will be displayed in the Botpress UI and be used as the folder's name on Files API.\""}
-
-
- {"The parent folder ID. Leave empty if the folder is in the root folder."}
-
-
- {"The absolute path of the folder. Leave empty if not available."}
-
-
-
-
-
-
-
-
-
-
- {"The token to get the next page of items."}
-
-
-
-
-
-
-### Transfer file to Botpress
-
-{"Transfer a file from an external service to Botpress"}
-
-
-
-
- {"The file to transfer"}
-
-
-
- {"The file's ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique."}
-
-
-
-
-
- {"The file's name. This will be displayed in the Botpress UI and be used as the file's name on Files API.\""}
-
-
- {"The parent folder ID. Leave empty if the file is in the root folder."}
-
-
- {"The absolute path of the file. Leave empty if not available."}
-
-
- {"The file size in bytes, if available"}
-
-
- {"The last modified date of the file, if available"}
-
-
- {"The hash of the file content, or version/revision number, if available"}
-
-
-
-
- {"The file key to use in Botpress"}
-
-
- {"Whether to index the file in vector storage"}
-
-
-
-
-
-
-
- {"The file ID of the uploaded file on Botpress"}
-
-
-
-
### Get Page
-### List items in folder
-
-{"List the files and folders in a folder"}
-
-
-
-
- {"The folder's ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique."}
-
-
- {"Optional search filters"}
-
-
-
- {"The entity type"}
-
-Available options: `file`, `folder`
-
-
- {"Filter the items by maximum size (in bytes)"}
-
-
- {"Filter the items modified after the given date"}
-
-
-
-
- {"The token to get the next page of items. Leave empty to get the first page."}
-
-
-
-
-
-
-
- {"The files and folders in the folder"}
-
-
-
-
-
- {"The file's ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique."}
-
-
-
-
-
- {"The file's name. This will be displayed in the Botpress UI and be used as the file's name on Files API.\""}
-
-
- {"The parent folder ID. Leave empty if the file is in the root folder."}
-
-
- {"The absolute path of the file. Leave empty if not available."}
-
-
- {"The file size in bytes, if available"}
-
-
- {"The last modified date of the file, if available"}
-
-
- {"The hash of the file content, or version/revision number, if available"}
-
-
-
-
-
-
- {"The folder's ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique."}
-
-
-
-
-
- {"The folder's name. This will be displayed in the Botpress UI and be used as the folder's name on Files API.\""}
-
-
- {"The parent folder ID. Leave empty if the folder is in the root folder."}
-
-
- {"The absolute path of the folder. Leave empty if not available."}
-
-
-
-
-
-
-
-
-
-
- {"The token to get the next page of items."}
-
-
-
-
-
-
-### Transfer file to Botpress
-
-{"Transfer a file from an external service to Botpress"}
-
-
-
-
- {"The file to transfer"}
-
-
-
- {"The file's ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique."}
-
-
-
-
-
- {"The file's name. This will be displayed in the Botpress UI and be used as the file's name on Files API.\""}
-
-
- {"The parent folder ID. Leave empty if the file is in the root folder."}
-
-
- {"The absolute path of the file. Leave empty if not available."}
-
-
- {"The file size in bytes, if available"}
-
-
- {"The last modified date of the file, if available"}
-
-
- {"The hash of the file content, or version/revision number, if available"}
-
-
-
-
- {"The file key to use in Botpress"}
-
-
- {"Whether to index the file in vector storage"}
-
-
-
-
-
-
-
- {"The file ID of the uploaded file on Botpress"}
-
-
-
-
### List items in a folder
{"List files and folders in dropbox within a directory"}
diff --git a/snippets/integrations/cards/botpress/freshchat.mdx b/snippets/integrations/cards/botpress/freshchat.mdx
index 7da9efe5..355f6533 100644
--- a/snippets/integrations/cards/botpress/freshchat.mdx
+++ b/snippets/integrations/cards/botpress/freshchat.mdx
@@ -3,963 +3,5 @@
Here's a reference for all [Cards](/studio/concepts/cards/introduction) available with the integration:
-### Create external user
-
-{"Create an end user in the external service and in Botpress"}
-
-
-
-
- {"Display name of the end user"}
-
-
- {"URL of the end user's avatar"}
-
-
- {"Email address of the end user"}
-
-
-
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
-
-
-### Start new HITL session
-
-{"Create a new HITL session in the external service and in Botpress"}
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
- {"Title of the HITL session. This corresponds to a ticket title in systems that use tickets."}
-
-
- {"Description of the HITL session. This corresponds to a ticket description in systems that use tickets."}
-
-
-
-
-
-
- {"Priority of the conversation. Leave empty for default priority."}
-
-Available options: `Low`, `Medium`, `High`, `Urgent`
-
-
-
-
- {"History of all messages in the conversation up to this point. Should be displayed to the human agent in the external service."}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-### Stop HITL session
-
-{"Stop an existing HITL session in the external service"}
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-
- This Card has no output.
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/cards/botpress/googledrive.mdx b/snippets/integrations/cards/botpress/googledrive.mdx
index 0ae320dc..fdd586db 100644
--- a/snippets/integrations/cards/botpress/googledrive.mdx
+++ b/snippets/integrations/cards/botpress/googledrive.mdx
@@ -165,286 +165,6 @@ Here's a reference for all [Cards](/studio/concepts/cards/introduction) availabl
-### List items in folder
-
-{"List the files and folders in a folder"}
-
-
-
-
- {"The folder's ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique."}
-
-
- {"Optional search filters"}
-
-
-
- {"The entity type"}
-
-Available options: `file`, `folder`
-
-
- {"Filter the items by maximum size (in bytes)"}
-
-
- {"Filter the items modified after the given date"}
-
-
-
-
- {"The token to get the next page of items. Leave empty to get the first page."}
-
-
-
-
-
-
-
- {"The files and folders in the folder"}
-
-
-
-
-
- {"The file's ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique."}
-
-
-
-
-
- {"The file's name. This will be displayed in the Botpress UI and be used as the file's name on Files API.\""}
-
-
- {"The parent folder ID. Leave empty if the file is in the root folder."}
-
-
- {"The absolute path of the file. Leave empty if not available."}
-
-
- {"The file size in bytes, if available"}
-
-
- {"The last modified date of the file, if available"}
-
-
- {"The hash of the file content, or version/revision number, if available"}
-
-
-
-
-
-
- {"The folder's ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique."}
-
-
-
-
-
- {"The folder's name. This will be displayed in the Botpress UI and be used as the folder's name on Files API.\""}
-
-
- {"The parent folder ID. Leave empty if the folder is in the root folder."}
-
-
- {"The absolute path of the folder. Leave empty if not available."}
-
-
-
-
-
-
-
-
-
-
- {"The token to get the next page of items."}
-
-
-
-
-
-
-### Transfer file to Botpress
-
-{"Transfer a file from an external service to Botpress"}
-
-
-
-
- {"The file to transfer"}
-
-
-
- {"The file's ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique."}
-
-
-
-
-
- {"The file's name. This will be displayed in the Botpress UI and be used as the file's name on Files API.\""}
-
-
- {"The parent folder ID. Leave empty if the file is in the root folder."}
-
-
- {"The absolute path of the file. Leave empty if not available."}
-
-
- {"The file size in bytes, if available"}
-
-
- {"The last modified date of the file, if available"}
-
-
- {"The hash of the file content, or version/revision number, if available"}
-
-
-
-
- {"The file key to use in Botpress"}
-
-
- {"Whether to index the file in vector storage"}
-
-
-
-
-
-
-
- {"The file ID of the uploaded file on Botpress"}
-
-
-
-
### List Files
{"List files in Google Drive"}
diff --git a/snippets/integrations/cards/botpress/hitl.mdx b/snippets/integrations/cards/botpress/hitl.mdx
index 1f7cd9ad..355f6533 100644
--- a/snippets/integrations/cards/botpress/hitl.mdx
+++ b/snippets/integrations/cards/botpress/hitl.mdx
@@ -3,952 +3,5 @@
Here's a reference for all [Cards](/studio/concepts/cards/introduction) available with the integration:
-### Create external user
-
-{"Create an end user in the external service and in Botpress"}
-
-
-
-
- {"Display name of the end user"}
-
-
- {"URL of the end user's avatar"}
-
-
- {"Email address of the end user"}
-
-
-
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
-
-
-### Start new HITL session
-
-{"Create a new HITL session in the external service and in Botpress"}
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
- {"Title of the HITL session. This corresponds to a ticket title in systems that use tickets."}
-
-
- {"Description of the HITL session. This corresponds to a ticket description in systems that use tickets."}
-
-
-
-
-
- {"History of all messages in the conversation up to this point. Should be displayed to the human agent in the external service."}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-### Stop HITL session
-
-{"Stop an existing HITL session in the external service"}
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-
- This Card has no output.
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/cards/botpress/line.mdx b/snippets/integrations/cards/botpress/line.mdx
index b11530e3..6774fc45 100644
--- a/snippets/integrations/cards/botpress/line.mdx
+++ b/snippets/integrations/cards/botpress/line.mdx
@@ -116,73 +116,5 @@ Here's a reference for all [Cards](/studio/concepts/cards/introduction) availabl
-### Start Typing Indicator
-
-
-
-
-
-
-
- {"The message ID to which the typing indicator should be attached"}
-
-
- {"The timeout in milliseconds after which the typing indicator should stop"}
-
-
-
-
-
- This Card has no output.
-
-
-### Stop Typing Indicator
-
-
-
-
-
-
-
- {"The message ID from which the typing indicator should be removed"}
-
-
-
-
-
- This Card has no output.
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/cards/botpress/messenger.mdx b/snippets/integrations/cards/botpress/messenger.mdx
index 8e946c30..c714ae42 100644
--- a/snippets/integrations/cards/botpress/messenger.mdx
+++ b/snippets/integrations/cards/botpress/messenger.mdx
@@ -148,73 +148,5 @@ Here's a reference for all [Cards](/studio/concepts/cards/introduction) availabl
This Card has no output.
-### Start Typing Indicator
-
-
-
-
-
-
-
- {"The message ID to which the typing indicator should be attached"}
-
-
- {"The timeout in milliseconds after which the typing indicator should stop"}
-
-
-
-
-
- This Card has no output.
-
-
-### Stop Typing Indicator
-
-
-
-
-
-
-
- {"The message ID from which the typing indicator should be removed"}
-
-
-
-
-
- This Card has no output.
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/cards/botpress/notion.mdx b/snippets/integrations/cards/botpress/notion.mdx
index d12f7e09..0e9cedbb 100644
--- a/snippets/integrations/cards/botpress/notion.mdx
+++ b/snippets/integrations/cards/botpress/notion.mdx
@@ -128,286 +128,6 @@ Here's a reference for all [Cards](/studio/concepts/cards/introduction) availabl
This Card has no output.
-### List items in folder
-
-{"List the files and folders in a folder"}
-
-
-
-
- {"The folder's ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique."}
-
-
- {"Optional search filters"}
-
-
-
- {"The entity type"}
-
-Available options: `file`, `folder`
-
-
- {"Filter the items by maximum size (in bytes)"}
-
-
- {"Filter the items modified after the given date"}
-
-
-
-
- {"The token to get the next page of items. Leave empty to get the first page."}
-
-
-
-
-
-
-
- {"The files and folders in the folder"}
-
-
-
-
-
- {"The file's ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique."}
-
-
-
-
-
- {"The file's name. This will be displayed in the Botpress UI and be used as the file's name on Files API.\""}
-
-
- {"The parent folder ID. Leave empty if the file is in the root folder."}
-
-
- {"The absolute path of the file. Leave empty if not available."}
-
-
- {"The file size in bytes, if available"}
-
-
- {"The last modified date of the file, if available"}
-
-
- {"The hash of the file content, or version/revision number, if available"}
-
-
-
-
-
-
- {"The folder's ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique."}
-
-
-
-
-
- {"The folder's name. This will be displayed in the Botpress UI and be used as the folder's name on Files API.\""}
-
-
- {"The parent folder ID. Leave empty if the folder is in the root folder."}
-
-
- {"The absolute path of the folder. Leave empty if not available."}
-
-
-
-
-
-
-
-
-
-
- {"The token to get the next page of items."}
-
-
-
-
-
-
-### Transfer file to Botpress
-
-{"Transfer a file from an external service to Botpress"}
-
-
-
-
- {"The file to transfer"}
-
-
-
- {"The file's ID. This could be a unique identifier from the external service, or a relative or absolute path, so long as it's unique."}
-
-
-
-
-
- {"The file's name. This will be displayed in the Botpress UI and be used as the file's name on Files API.\""}
-
-
- {"The parent folder ID. Leave empty if the file is in the root folder."}
-
-
- {"The absolute path of the file. Leave empty if not available."}
-
-
- {"The file size in bytes, if available"}
-
-
- {"The last modified date of the file, if available"}
-
-
- {"The hash of the file content, or version/revision number, if available"}
-
-
-
-
- {"The file key to use in Botpress"}
-
-
- {"Whether to index the file in vector storage"}
-
-
-
-
-
-
-
- {"The file ID of the uploaded file on Botpress"}
-
-
-
-
### Get Database
{"Get a database from Notion"}
diff --git a/snippets/integrations/cards/botpress/slack.mdx b/snippets/integrations/cards/botpress/slack.mdx
index a38adfe5..992bbb09 100644
--- a/snippets/integrations/cards/botpress/slack.mdx
+++ b/snippets/integrations/cards/botpress/slack.mdx
@@ -293,74 +293,6 @@ Available options: `dm`, `channel`
-### Start Typing Indicator
-
-
-
-
-
-
-
- {"The message ID to which the typing indicator should be attached"}
-
-
- {"The timeout in milliseconds after which the typing indicator should stop"}
-
-
-
-
-
- This Card has no output.
-
-
-### Stop Typing Indicator
-
-
-
-
-
-
-
- {"The message ID from which the typing indicator should be removed"}
-
-
-
-
-
- This Card has no output.
-
-
### Sync Members
{"Sync Slack workspace members to Botpress users. This action keeps track of the last sync timestamp and will only sync updated members since the last sync."}
diff --git a/snippets/integrations/cards/botpress/sunco.mdx b/snippets/integrations/cards/botpress/sunco.mdx
index 5084c66b..f9fc0976 100644
--- a/snippets/integrations/cards/botpress/sunco.mdx
+++ b/snippets/integrations/cards/botpress/sunco.mdx
@@ -109,73 +109,5 @@ Here's a reference for all [Cards](/studio/concepts/cards/introduction) availabl
-### Start Typing Indicator
-
-
-
-
-
-
-
- {"The message ID to which the typing indicator should be attached"}
-
-
- {"The timeout in milliseconds after which the typing indicator should stop"}
-
-
-
-
-
- This Card has no output.
-
-
-### Stop Typing Indicator
-
-
-
-
-
-
-
- {"The message ID from which the typing indicator should be removed"}
-
-
-
-
-
- This Card has no output.
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/cards/botpress/teams.mdx b/snippets/integrations/cards/botpress/teams.mdx
index fc9e909a..037c2fde 100644
--- a/snippets/integrations/cards/botpress/teams.mdx
+++ b/snippets/integrations/cards/botpress/teams.mdx
@@ -55,73 +55,5 @@ Here's a reference for all [Cards](/studio/concepts/cards/introduction) availabl
-### Start Typing Indicator
-
-
-
-
-
-
-
- {"The message ID to which the typing indicator should be attached"}
-
-
- {"The timeout in milliseconds after which the typing indicator should stop"}
-
-
-
-
-
- This Card has no output.
-
-
-### Stop Typing Indicator
-
-
-
-
-
-
-
- {"The message ID from which the typing indicator should be removed"}
-
-
-
-
-
- This Card has no output.
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/cards/botpress/telegram.mdx b/snippets/integrations/cards/botpress/telegram.mdx
index fdd6a0a4..355f6533 100644
--- a/snippets/integrations/cards/botpress/telegram.mdx
+++ b/snippets/integrations/cards/botpress/telegram.mdx
@@ -3,73 +3,5 @@
Here's a reference for all [Cards](/studio/concepts/cards/introduction) available with the integration:
-### Start Typing Indicator
-
-
-
-
-
-
-
- {"The message ID to which the typing indicator should be attached"}
-
-
- {"The timeout in milliseconds after which the typing indicator should stop"}
-
-
-
-
-
- This Card has no output.
-
-
-### Stop Typing Indicator
-
-
-
-
-
-
-
- {"The message ID from which the typing indicator should be removed"}
-
-
-
-
-
- This Card has no output.
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/cards/botpress/webchat.mdx b/snippets/integrations/cards/botpress/webchat.mdx
index 5e524784..cf1ce74d 100644
--- a/snippets/integrations/cards/botpress/webchat.mdx
+++ b/snippets/integrations/cards/botpress/webchat.mdx
@@ -223,74 +223,6 @@ Here's a reference for all [Cards](/studio/concepts/cards/introduction) availabl
This Card has no output.
-### Start Typing Indicator
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- This Card has no output.
-
-
-### Stop Typing Indicator
-
-
-
-
-
-
-
-
-
-
-
-
-
- This Card has no output.
-
-
### Toggle Webchat
{"Toggle the visibility of the webchat widget"}
diff --git a/snippets/integrations/cards/botpress/whatsapp.mdx b/snippets/integrations/cards/botpress/whatsapp.mdx
index d4b010f1..16dc324f 100644
--- a/snippets/integrations/cards/botpress/whatsapp.mdx
+++ b/snippets/integrations/cards/botpress/whatsapp.mdx
@@ -141,73 +141,5 @@ Here's a reference for all [Cards](/studio/concepts/cards/introduction) availabl
-### Start Typing Indicator
-
-
-
-
-
-
-
- {"The message ID to which the typing indicator should be attached"}
-
-
- {"The timeout in milliseconds after which the typing indicator should stop"}
-
-
-
-
-
- This Card has no output.
-
-
-### Stop Typing Indicator
-
-
-
-
-
-
-
- {"The message ID from which the typing indicator should be removed"}
-
-
-
-
-
- This Card has no output.
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/cards/botpress/zendesk.mdx b/snippets/integrations/cards/botpress/zendesk.mdx
index 31b28882..691c355a 100644
--- a/snippets/integrations/cards/botpress/zendesk.mdx
+++ b/snippets/integrations/cards/botpress/zendesk.mdx
@@ -417,52 +417,6 @@ Available options: `GET`, `POST`, `PUT`, `PATCH`, `DELETE`
-### Create external user
-
-{"Create an end user in the external service and in Botpress"}
-
-
-
-
- {"Display name of the end user"}
-
-
- {"URL of the end user's avatar"}
-
-
- {"Email address of the end user"}
-
-
-
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
-
-
### Find Customer
{"Find a Customer in Zendesk"}
@@ -853,942 +807,6 @@ Available options: `GET`, `POST`, `PUT`, `PATCH`, `DELETE`
-### Start new HITL session
-
-{"Create a new HITL session in the external service and in Botpress"}
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
- {"Title of the HITL session. This corresponds to a ticket title in systems that use tickets."}
-
-
- {"Description of the HITL session. This corresponds to a ticket description in systems that use tickets."}
-
-
-
-
-
-
- {"Priority of the ticket. Leave empty for default priority."}
-
-Available options: `low`, `normal`, `high`, `urgent`
-
-
- {"Name of the chatbot that will be used in the Zendesk ticket. Defaults to \"Botpress\"."}
-
-
- {"Photo URL of the chatbot that will be used in the Zendesk ticket. Must be a publicly-accessible PNG image. Defaults to Botpress logo."}
-
-
- {"The name of the requester the bot was talking to. This will be set in zendesk."}
-
-
- {"⚠️This needs a requester name to work. The email of the requester the bot was talking to. This will be set in zendesk."}
-
-
-
-
- {"History of all messages in the conversation up to this point. Should be displayed to the human agent in the external service."}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-### Stop HITL session
-
-{"Stop an existing HITL session in the external service"}
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-
- This Card has no output.
-
-
### Sync Knowledge Base
{"Sync Zendesk knowledge base to bot knowledge base"}
diff --git a/snippets/integrations/cards/plus/plus-brevo-hitl.mdx b/snippets/integrations/cards/plus/plus-brevo-hitl.mdx
index e0aa0084..355f6533 100644
--- a/snippets/integrations/cards/plus/plus-brevo-hitl.mdx
+++ b/snippets/integrations/cards/plus/plus-brevo-hitl.mdx
@@ -3,946 +3,5 @@
Here's a reference for all [Cards](/studio/concepts/cards/introduction) available with the integration:
-### Create User
-
-
-
-
- {"Display name of the end user"}
-
-
- {"URL of the end user's avatar"}
-
-
- {"Email address of the end user"}
-
-
-
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
-
-
-### Start Hitl
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
- {"Title of the HITL session. This corresponds to a ticket title in systems that use tickets."}
-
-
- {"Description of the HITL session. This corresponds to a ticket description in systems that use tickets."}
-
-
-
-
-
- {"History of all messages in the conversation up to this point. Should be displayed to the human agent in the external service."}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-### Stop Hitl
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-
- This Card has no output.
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/cards/plus/plus-chatwoot.mdx b/snippets/integrations/cards/plus/plus-chatwoot.mdx
index 1f7cd9ad..355f6533 100644
--- a/snippets/integrations/cards/plus/plus-chatwoot.mdx
+++ b/snippets/integrations/cards/plus/plus-chatwoot.mdx
@@ -3,952 +3,5 @@
Here's a reference for all [Cards](/studio/concepts/cards/introduction) available with the integration:
-### Create external user
-
-{"Create an end user in the external service and in Botpress"}
-
-
-
-
- {"Display name of the end user"}
-
-
- {"URL of the end user's avatar"}
-
-
- {"Email address of the end user"}
-
-
-
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
-
-
-### Start new HITL session
-
-{"Create a new HITL session in the external service and in Botpress"}
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
- {"Title of the HITL session. This corresponds to a ticket title in systems that use tickets."}
-
-
- {"Description of the HITL session. This corresponds to a ticket description in systems that use tickets."}
-
-
-
-
-
- {"History of all messages in the conversation up to this point. Should be displayed to the human agent in the external service."}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-### Stop HITL session
-
-{"Stop an existing HITL session in the external service"}
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-
- This Card has no output.
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/cards/plus/plus-hubspot-help-desk-hitl.mdx b/snippets/integrations/cards/plus/plus-hubspot-help-desk-hitl.mdx
index e0aa0084..355f6533 100644
--- a/snippets/integrations/cards/plus/plus-hubspot-help-desk-hitl.mdx
+++ b/snippets/integrations/cards/plus/plus-hubspot-help-desk-hitl.mdx
@@ -3,946 +3,5 @@
Here's a reference for all [Cards](/studio/concepts/cards/introduction) available with the integration:
-### Create User
-
-
-
-
- {"Display name of the end user"}
-
-
- {"URL of the end user's avatar"}
-
-
- {"Email address of the end user"}
-
-
-
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
-
-
-### Start Hitl
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
- {"Title of the HITL session. This corresponds to a ticket title in systems that use tickets."}
-
-
- {"Description of the HITL session. This corresponds to a ticket description in systems that use tickets."}
-
-
-
-
-
- {"History of all messages in the conversation up to this point. Should be displayed to the human agent in the external service."}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-### Stop Hitl
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-
- This Card has no output.
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/cards/plus/plus-hubspot-hitl.mdx b/snippets/integrations/cards/plus/plus-hubspot-hitl.mdx
index e0aa0084..355f6533 100644
--- a/snippets/integrations/cards/plus/plus-hubspot-hitl.mdx
+++ b/snippets/integrations/cards/plus/plus-hubspot-hitl.mdx
@@ -3,946 +3,5 @@
Here's a reference for all [Cards](/studio/concepts/cards/introduction) available with the integration:
-### Create User
-
-
-
-
- {"Display name of the end user"}
-
-
- {"URL of the end user's avatar"}
-
-
- {"Email address of the end user"}
-
-
-
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
-
-
-### Start Hitl
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
- {"Title of the HITL session. This corresponds to a ticket title in systems that use tickets."}
-
-
- {"Description of the HITL session. This corresponds to a ticket description in systems that use tickets."}
-
-
-
-
-
- {"History of all messages in the conversation up to this point. Should be displayed to the human agent in the external service."}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-### Stop Hitl
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-
- This Card has no output.
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/cards/plus/plus-intercom-hitl.mdx b/snippets/integrations/cards/plus/plus-intercom-hitl.mdx
index e0aa0084..355f6533 100644
--- a/snippets/integrations/cards/plus/plus-intercom-hitl.mdx
+++ b/snippets/integrations/cards/plus/plus-intercom-hitl.mdx
@@ -3,946 +3,5 @@
Here's a reference for all [Cards](/studio/concepts/cards/introduction) available with the integration:
-### Create User
-
-
-
-
- {"Display name of the end user"}
-
-
- {"URL of the end user's avatar"}
-
-
- {"Email address of the end user"}
-
-
-
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
-
-
-### Start Hitl
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
- {"Title of the HITL session. This corresponds to a ticket title in systems that use tickets."}
-
-
- {"Description of the HITL session. This corresponds to a ticket description in systems that use tickets."}
-
-
-
-
-
- {"History of all messages in the conversation up to this point. Should be displayed to the human agent in the external service."}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-### Stop Hitl
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-
- This Card has no output.
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/cards/plus/plus-livechat-hitl.mdx b/snippets/integrations/cards/plus/plus-livechat-hitl.mdx
index e0aa0084..355f6533 100644
--- a/snippets/integrations/cards/plus/plus-livechat-hitl.mdx
+++ b/snippets/integrations/cards/plus/plus-livechat-hitl.mdx
@@ -3,946 +3,5 @@
Here's a reference for all [Cards](/studio/concepts/cards/introduction) available with the integration:
-### Create User
-
-
-
-
- {"Display name of the end user"}
-
-
- {"URL of the end user's avatar"}
-
-
- {"Email address of the end user"}
-
-
-
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
-
-
-### Start Hitl
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
- {"Title of the HITL session. This corresponds to a ticket title in systems that use tickets."}
-
-
- {"Description of the HITL session. This corresponds to a ticket description in systems that use tickets."}
-
-
-
-
-
- {"History of all messages in the conversation up to this point. Should be displayed to the human agent in the external service."}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-### Stop Hitl
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-
- This Card has no output.
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/cards/plus/plus-zoho-sales-iq-hitl.mdx b/snippets/integrations/cards/plus/plus-zoho-sales-iq-hitl.mdx
index e0aa0084..355f6533 100644
--- a/snippets/integrations/cards/plus/plus-zoho-sales-iq-hitl.mdx
+++ b/snippets/integrations/cards/plus/plus-zoho-sales-iq-hitl.mdx
@@ -3,946 +3,5 @@
Here's a reference for all [Cards](/studio/concepts/cards/introduction) available with the integration:
-### Create User
-
-
-
-
- {"Display name of the end user"}
-
-
- {"URL of the end user's avatar"}
-
-
- {"Email address of the end user"}
-
-
-
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
-
-
-### Start Hitl
-
-
-
-
- {"ID of the Botpress user representing the end user"}
-
-
- {"Title of the HITL session. This corresponds to a ticket title in systems that use tickets."}
-
-
- {"Description of the HITL session. This corresponds to a ticket description in systems that use tickets."}
-
-
-
-
-
- {"History of all messages in the conversation up to this point. Should be displayed to the human agent in the external service."}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Available options: `postback`, `url`, `say`
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-### Stop Hitl
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
-
- This Card has no output.
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/triggers/botpress/freshchat.mdx b/snippets/integrations/triggers/botpress/freshchat.mdx
index b65429db..3962fad5 100644
--- a/snippets/integrations/triggers/botpress/freshchat.mdx
+++ b/snippets/integrations/triggers/botpress/freshchat.mdx
@@ -9,50 +9,5 @@ You can access data returned from any of these Triggers by reading `event.payloa
-### Hitl Assigned
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
- {"ID of the Botpress user representing the human agent assigned to the HITL session"}
-
-
-
-
-### Hitl Stopped
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/triggers/botpress/hitl.mdx b/snippets/integrations/triggers/botpress/hitl.mdx
index b65429db..3962fad5 100644
--- a/snippets/integrations/triggers/botpress/hitl.mdx
+++ b/snippets/integrations/triggers/botpress/hitl.mdx
@@ -9,50 +9,5 @@ You can access data returned from any of these Triggers by reading `event.payloa
-### Hitl Assigned
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
- {"ID of the Botpress user representing the human agent assigned to the HITL session"}
-
-
-
-
-### Hitl Stopped
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/triggers/botpress/zendesk.mdx b/snippets/integrations/triggers/botpress/zendesk.mdx
index ea0da46c..8e6c95b9 100644
--- a/snippets/integrations/triggers/botpress/zendesk.mdx
+++ b/snippets/integrations/triggers/botpress/zendesk.mdx
@@ -58,50 +58,5 @@ You can access data returned from any of these Triggers by reading `event.payloa
-### Hitl Assigned
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
- {"ID of the Botpress user representing the human agent assigned to the HITL session"}
-
-
-
-
-### Hitl Stopped
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/triggers/plus/plus-brevo-hitl.mdx b/snippets/integrations/triggers/plus/plus-brevo-hitl.mdx
index 16641e17..a38d1e7a 100644
--- a/snippets/integrations/triggers/plus/plus-brevo-hitl.mdx
+++ b/snippets/integrations/triggers/plus/plus-brevo-hitl.mdx
@@ -9,32 +9,6 @@ You can access data returned from any of these Triggers by reading `event.payloa
-### Hitl Assigned
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
- {"ID of the Botpress user representing the human agent assigned to the HITL session"}
-
-
-
-
### HITL Started
{"Triggered when a HITL Session started"}
@@ -76,24 +50,5 @@ You can access data returned from any of these Triggers by reading `event.payloa
-### Hitl Stopped
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/triggers/plus/plus-chatwoot.mdx b/snippets/integrations/triggers/plus/plus-chatwoot.mdx
index 2a072f03..7104f340 100644
--- a/snippets/integrations/triggers/plus/plus-chatwoot.mdx
+++ b/snippets/integrations/triggers/plus/plus-chatwoot.mdx
@@ -9,32 +9,6 @@ You can access data returned from any of these Triggers by reading `event.payloa
-### Hitl Assigned
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
- {"ID of the Botpress user representing the human agent assigned to the HITL session"}
-
-
-
-
### HITL Started
{"Triggered when a HITL session started"}
@@ -76,24 +50,5 @@ You can access data returned from any of these Triggers by reading `event.payloa
-### Hitl Stopped
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/triggers/plus/plus-hubspot-help-desk-hitl.mdx b/snippets/integrations/triggers/plus/plus-hubspot-help-desk-hitl.mdx
index b65429db..3962fad5 100644
--- a/snippets/integrations/triggers/plus/plus-hubspot-help-desk-hitl.mdx
+++ b/snippets/integrations/triggers/plus/plus-hubspot-help-desk-hitl.mdx
@@ -9,50 +9,5 @@ You can access data returned from any of these Triggers by reading `event.payloa
-### Hitl Assigned
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
- {"ID of the Botpress user representing the human agent assigned to the HITL session"}
-
-
-
-
-### Hitl Stopped
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/triggers/plus/plus-hubspot-hitl.mdx b/snippets/integrations/triggers/plus/plus-hubspot-hitl.mdx
index b65429db..3962fad5 100644
--- a/snippets/integrations/triggers/plus/plus-hubspot-hitl.mdx
+++ b/snippets/integrations/triggers/plus/plus-hubspot-hitl.mdx
@@ -9,50 +9,5 @@ You can access data returned from any of these Triggers by reading `event.payloa
-### Hitl Assigned
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
- {"ID of the Botpress user representing the human agent assigned to the HITL session"}
-
-
-
-
-### Hitl Stopped
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/triggers/plus/plus-intercom-hitl.mdx b/snippets/integrations/triggers/plus/plus-intercom-hitl.mdx
index 16641e17..a38d1e7a 100644
--- a/snippets/integrations/triggers/plus/plus-intercom-hitl.mdx
+++ b/snippets/integrations/triggers/plus/plus-intercom-hitl.mdx
@@ -9,32 +9,6 @@ You can access data returned from any of these Triggers by reading `event.payloa
-### Hitl Assigned
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
- {"ID of the Botpress user representing the human agent assigned to the HITL session"}
-
-
-
-
### HITL Started
{"Triggered when a HITL Session started"}
@@ -76,24 +50,5 @@ You can access data returned from any of these Triggers by reading `event.payloa
-### Hitl Stopped
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/triggers/plus/plus-livechat-hitl.mdx b/snippets/integrations/triggers/plus/plus-livechat-hitl.mdx
index 16641e17..a38d1e7a 100644
--- a/snippets/integrations/triggers/plus/plus-livechat-hitl.mdx
+++ b/snippets/integrations/triggers/plus/plus-livechat-hitl.mdx
@@ -9,32 +9,6 @@ You can access data returned from any of these Triggers by reading `event.payloa
-### Hitl Assigned
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
- {"ID of the Botpress user representing the human agent assigned to the HITL session"}
-
-
-
-
### HITL Started
{"Triggered when a HITL Session started"}
@@ -76,24 +50,5 @@ You can access data returned from any of these Triggers by reading `event.payloa
-### Hitl Stopped
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/triggers/plus/plus-zoho-sales-iq-hitl.mdx b/snippets/integrations/triggers/plus/plus-zoho-sales-iq-hitl.mdx
index b65429db..3962fad5 100644
--- a/snippets/integrations/triggers/plus/plus-zoho-sales-iq-hitl.mdx
+++ b/snippets/integrations/triggers/plus/plus-zoho-sales-iq-hitl.mdx
@@ -9,50 +9,5 @@ You can access data returned from any of these Triggers by reading `event.payloa
-### Hitl Assigned
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
- {"ID of the Botpress user representing the human agent assigned to the HITL session"}
-
-
-
-
-### Hitl Stopped
-
-
-
-
-
-
- {"ID of the Botpress conversation representing the HITL session"}
-
-
-
-
{/* vale on */}
\ No newline at end of file
diff --git a/snippets/integrations/versions.mdx b/snippets/integrations/versions.mdx
index 29fca2bf..ae960045 100644
--- a/snippets/integrations/versions.mdx
+++ b/snippets/integrations/versions.mdx
@@ -380,8 +380,8 @@ export const integrationVersions = {
"id": "intver_01KB60NV614CV1YH4C711K4KNT"
},
"messenger": {
- "version": "5.1.1",
- "id": "intver_01KCVJT1XHFAWZVYFQR7FGK1K7"
+ "version": "5.1.2",
+ "id": "intver_01KE9TQKQRSNX2CYGETW4KQDYZ"
},
"mindtickle": {
"version": "2.0.0",
@@ -644,8 +644,8 @@ export const integrationVersions = {
"id": "intver_01KB69TJV9B8T0WPEEKZP36E1K"
},
"sunco": {
- "version": "1.2.0",
- "id": "intver_01KCA0211FC20EHTYCSVFPFHER"
+ "version": "1.3.0",
+ "id": "intver_01KE7TGBW3KKHR88ZAA7EC9JJX"
},
"surveymonkey": {
"version": "2.0.0",