chore: import upstream snapshot with attribution

This commit is contained in:
wehub-resource-sync
2026-07-13 13:34:48 +08:00
commit 77bb5bf71f
3762 changed files with 353249 additions and 0 deletions
@@ -0,0 +1,253 @@
import { posthogHelper } from '@botpress/common'
import { z, IntegrationDefinition } from '@botpress/sdk'
import * as sdk from '@botpress/sdk'
import proactiveConversation from 'bp_modules/proactive-conversation'
import proactiveUser from 'bp_modules/proactive-user'
import typingIndicator from 'bp_modules/typing-indicator'
import { actions } from './definitions/actions'
import { messages } from './definitions/channels/channel/messages'
export const INTEGRATION_NAME = 'messenger'
export const INTEGRATION_VERSION = '5.1.12'
const commonConfigSchema = z.object({
downloadMedia: z
.boolean()
.default(false)
.title('Download Media')
.describe(
'Automatically download media files using the Files API for content access. If disabled, Messenger media URLs will be used.'
),
downloadedMediaExpiry: z
.number()
.default(24)
.optional()
.title('Downloaded Media Expiry')
.describe(
'Expiry time in hours for downloaded media files. An expiry time of 0 means the files will never expire.'
),
})
const replyToCommentsSchema = z.object({
replyToComments: z
.boolean()
.default(false)
.title('Reply to Comments')
.describe('Whether to reply to comments on Facebook posts (limited to 1 reply per top-level comment)'),
})
export default new IntegrationDefinition({
name: INTEGRATION_NAME,
version: INTEGRATION_VERSION,
title: 'Messenger and Facebook',
description:
'Give your bot access to one of the worlds largest messaging platforms and manage your Facebook page content in one place.',
icon: 'icon.svg',
readme: 'hub.md',
configuration: {
identifier: {
linkTemplateScript: 'linkTemplate.vrl',
required: true,
},
schema: commonConfigSchema.merge(replyToCommentsSchema),
},
configurations: {
manual: {
title: 'Manual Configuration',
description: 'Configure by manually supplying the Meta app details',
schema: z
.object({
clientId: z.string().title('Client ID').min(1).describe('Meta app client id'),
clientSecret: z
.string()
.title('Client Secret')
.optional()
.describe('Meta App secret used for webhook signature check. Leave empty to disable signature check.'),
verifyToken: z
.string()
.title('Verify Token')
.min(1)
.describe(
'Token used for verification when subscribing to webhooks on the Meta app (enter a random string of your choice)'
),
accessToken: z
.string()
.title('Access Token')
.min(1)
.describe('Page access token that with permissions to access the Facebook page'),
pageId: z.string().min(1).describe('Id from the Facebook page').title('Page ID'),
shouldGetUserProfile: z
.boolean()
.default(true)
.optional()
.describe('Whether to get the user profile infos from Messenger when creating a new user')
.title('Get User Profile'),
})
.merge(commonConfigSchema)
.merge(replyToCommentsSchema),
},
sandbox: {
title: 'Sandbox Configuration',
description: 'Sandbox configuration, for testing purposes only',
schema: commonConfigSchema,
identifier: {
linkTemplateScript: 'sandboxLinkTemplate.vrl',
},
},
},
identifier: {
extractScript: 'extract.vrl',
fallbackHandlerScript: 'fallbackHandler.vrl',
},
channels: {
channel: {
title: 'Messenger conversation',
description: 'Channel for a Messenger conversation',
messages,
message: {
tags: {
id: { title: 'Message ID', description: 'The Messenger ID of the message' },
commentId: {
title: 'Comment ID',
description: 'The Messenger ID of the comment for which the message is a private-reply to',
},
recipientId: { title: 'Recipient ID', description: 'The Messenger ID of the recipient' },
senderId: { title: 'Sender ID', description: 'The Messenger ID of the sender' },
},
},
conversation: {
tags: {
id: { title: 'Conversation ID', description: 'The Messenger user ID of the user in the conversation' },
commentId: {
title: 'Comment ID',
description: 'The Messenger ID of the comment from which the private-reply conversation was created',
},
lastCommentId: {
title: 'Last Comment ID',
description: 'The Messenger ID of the comment from which a private-reply message was last sent',
},
},
},
},
commentReplies: {
title: 'Comment Replies',
description: 'Channel for replies to comments on Facebook posts',
messages: { text: sdk.messages.defaults.text },
message: {
tags: {
id: { title: 'Comment ID', description: 'The unique ID of the comment' },
postId: { title: 'Post ID', description: 'The Facebook post ID where the comment was posted' },
},
},
conversation: {
tags: {
id: { title: 'Comment ID', description: 'The Facebook comment ID under which the reply was posted' },
postId: { title: 'Post ID', description: 'The Facebook post ID where the comment was posted' },
userId: { title: 'User ID', description: 'The Facebook user ID of the user who posted the comment' },
},
},
},
},
actions,
events: {},
states: {
oauth: {
type: 'integration',
schema: z.object({
// TODO: Rename to 'userToken' if we bump a major
accessToken: z.string().optional().title('Access token').describe('The access token obtained by OAuth'),
pageToken: z
.string()
.optional()
.title('Page token')
.describe('The token used to authenticate API calls related to the page'),
pageId: z.string().optional().title('Page ID').describe('The page ID'),
}),
},
},
secrets: {
...posthogHelper.COMMON_SECRET_NAMES,
CLIENT_ID: {
description: 'The client ID of your Meta app',
},
CLIENT_SECRET: {
description: 'The client secret of your Meta app',
},
OAUTH_CONFIG_ID: {
description: 'The OAuth configuration ID for the OAuth Meta app',
},
VERIFY_TOKEN: {
description: 'The verify token for the Meta Webhooks subscription',
},
ACCESS_TOKEN: {
description: 'Access token for internal Meta App',
},
SHOULD_GET_USER_PROFILE: {
description: "Whether to get the user profile infos from Messenger when creating a new user ('true' or 'false')",
},
SANDBOX_CLIENT_ID: {
description: 'The client ID of the Sandbox Meta app',
},
SANDBOX_CLIENT_SECRET: {
description: 'The client secret of the Sandbox Meta app',
},
SANDBOX_VERIFY_TOKEN: {
description: 'The verify token for the Sandbox Meta App Webhooks subscription',
},
SANDBOX_ACCESS_TOKEN: {
description: 'Access token for the Sandbox Meta App',
},
SANDBOX_PAGE_ID: {
description: 'Page ID for the Sandbox Facebook page',
},
SANDBOX_SHOULD_GET_USER_PROFILE: {
description: "Whether to get the user profile infos from Messenger when creating a new user ('true' or 'false')",
},
},
user: {
tags: { id: { title: 'User ID', description: 'The Messenger ID of the user' } },
},
entities: {
user: {
schema: z
.object({
id: z.string().title('User ID').describe('The Messenger ID of the user'),
})
.title('User')
.describe('The user object fields'),
title: 'User',
description: 'A Messenger user',
},
conversation: {
schema: z
.object({
userId: z.string().title('User ID').describe('The Messenger user ID of the user in the conversation'),
commentId: z
.string()
.optional()
.title('Comment ID')
.describe('The Messenger ID of the comment for which the private-reply conversation should be created'),
})
.title('Conversation')
.describe('The conversation object fields'),
title: 'Conversation',
description: 'A conversation with a Messenger user',
},
},
attributes: {
category: 'Communication & Channels',
guideSlug: 'messenger',
repo: 'botpress',
},
})
.extend(typingIndicator, () => ({ entities: {} }))
.extend(proactiveUser, ({ entities }) => ({
entities: {
user: entities.user,
},
}))
.extend(proactiveConversation, ({ entities }) => ({
entities: {
conversation: entities.conversation,
},
}))