246 lines
7.3 KiB
TypeScript
246 lines
7.3 KiB
TypeScript
import { posthogHelper } from '@botpress/common'
|
|
import { z, IntegrationDefinition, messages } from '@botpress/sdk'
|
|
import proactiveConversation from 'bp_modules/proactive-conversation'
|
|
import proactiveUser from 'bp_modules/proactive-user'
|
|
import { dmChannelMessages } from './definitions/channel'
|
|
|
|
export const INTEGRATION_NAME = 'instagram'
|
|
export const INTEGRATION_VERSION = '4.1.11'
|
|
|
|
const commonConfigSchema = z.object({
|
|
replyToComments: z
|
|
.boolean()
|
|
.default(false)
|
|
.title('Reply to Comments')
|
|
.describe('If enabled, the bot will reply to comments on posts.'),
|
|
})
|
|
|
|
export default new IntegrationDefinition({
|
|
name: INTEGRATION_NAME,
|
|
version: INTEGRATION_VERSION,
|
|
title: 'Instagram',
|
|
description: 'Automate interactions, manage comments, and send/receive messages all in real-time.',
|
|
icon: 'icon.svg',
|
|
readme: 'hub.md',
|
|
configuration: {
|
|
identifier: {
|
|
linkTemplateScript: 'linkTemplate.vrl',
|
|
},
|
|
schema: commonConfigSchema,
|
|
},
|
|
configurations: {
|
|
manual: {
|
|
title: 'Manual Configuration',
|
|
description: 'Configure by manually supplying the Meta app details',
|
|
schema: z
|
|
.object({
|
|
clientSecret: z
|
|
.string()
|
|
.secret()
|
|
.title('Client Secret')
|
|
.describe('Instagram App secret from API setup View used for webhook signature check'),
|
|
verifyToken: z
|
|
.string()
|
|
.secret()
|
|
.title('Verify Token')
|
|
.describe('Token used for verifying the Callback URL at API setup View'),
|
|
accessToken: z
|
|
.string()
|
|
.secret()
|
|
.title('Access token')
|
|
.describe('Access Token for the Instagram Account from the API setup View'),
|
|
instagramId: z.string().title('Instagram account ID').describe('Instagram Account Id from API setup View'),
|
|
})
|
|
.merge(commonConfigSchema),
|
|
},
|
|
sandbox: {
|
|
title: 'Sandbox Configuration',
|
|
description: 'Sandbox configuration, for testing purposes only',
|
|
schema: z.object({}),
|
|
identifier: {
|
|
linkTemplateScript: 'sandboxLinkTemplate.vrl',
|
|
},
|
|
},
|
|
},
|
|
states: {
|
|
oauth: {
|
|
type: 'integration',
|
|
schema: z.object({
|
|
accessToken: z
|
|
.string()
|
|
.title('Access token')
|
|
.describe('Access token used to authenticate requests to the Instagram API'),
|
|
instagramId: z
|
|
.string()
|
|
.title('Instagram account ID')
|
|
.describe('The Instagram account ID associated with the access token'),
|
|
expirationTime: z
|
|
.number()
|
|
.title('Expiration time')
|
|
.describe('The time when the access token expires, expressed as a Unix timestamp (epoch) in milliseconds'),
|
|
}),
|
|
},
|
|
},
|
|
identifier: {
|
|
extractScript: 'extract.vrl',
|
|
fallbackHandlerScript: 'fallbackHandler.vrl',
|
|
},
|
|
channels: {
|
|
channel: {
|
|
title: 'Direct Message',
|
|
description: 'Direct message conversation between an Instagram user and the bot',
|
|
messages: dmChannelMessages,
|
|
message: {
|
|
tags: {
|
|
id: {
|
|
title: 'Message ID',
|
|
description: 'The Instagram message ID',
|
|
},
|
|
senderId: {
|
|
title: 'Sender ID',
|
|
description: 'The Instagram user ID of the message sender',
|
|
},
|
|
recipientId: {
|
|
title: 'Recipient ID',
|
|
description: 'The Instagram user ID of the message recipient',
|
|
},
|
|
commentId: {
|
|
title: 'Comment ID',
|
|
description: 'The Instagram comment ID under which the direct message conversation was started',
|
|
},
|
|
},
|
|
},
|
|
conversation: {
|
|
tags: {
|
|
id: {
|
|
title: 'Conversation ID',
|
|
description: 'The Instagram user ID of the user in the conversation',
|
|
},
|
|
commentId: {
|
|
title: 'Comment ID',
|
|
description: 'The Instagram comment ID under which the direct message conversation was started',
|
|
},
|
|
lastCommentId: {
|
|
title: 'Last Comment ID',
|
|
description: 'The Instagram comment ID of the last comment from which a direct message was sent',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
commentReplies: {
|
|
title: 'Comment Replies',
|
|
description: 'Replies to comments on an Instagram post',
|
|
messages: {
|
|
text: messages.defaults.text,
|
|
},
|
|
message: {
|
|
tags: {
|
|
id: {
|
|
title: 'Comment ID',
|
|
description: 'The unique ID of the comment',
|
|
},
|
|
postId: {
|
|
title: 'Post ID',
|
|
description: 'The Instagram post ID where the comment was posted',
|
|
},
|
|
},
|
|
},
|
|
conversation: {
|
|
tags: {
|
|
id: {
|
|
title: 'Comment ID',
|
|
description: 'The Instagram comment ID under which the reply was posted',
|
|
},
|
|
postId: {
|
|
title: 'Post ID',
|
|
description: 'The Instagram post ID where the comment was posted',
|
|
},
|
|
userId: {
|
|
title: 'User ID',
|
|
description: 'The Instagram user ID of the user who sent the comment',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
actions: {},
|
|
events: {},
|
|
secrets: {
|
|
...posthogHelper.COMMON_SECRET_NAMES,
|
|
CLIENT_ID: {
|
|
description: 'The client ID of the OAuth Meta app.',
|
|
},
|
|
CLIENT_SECRET: {
|
|
description: 'The client secret of the OAuth Meta app.',
|
|
},
|
|
VERIFY_TOKEN: {
|
|
description: 'The verify token of the OAuth 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_INSTAGRAM_ID: {
|
|
description: 'Instagram ID for the Sandbox Instagram profile',
|
|
},
|
|
},
|
|
user: {
|
|
tags: {
|
|
id: {
|
|
title: 'User ID',
|
|
description: 'The Instagram user ID',
|
|
},
|
|
},
|
|
},
|
|
entities: {
|
|
user: {
|
|
title: 'User',
|
|
description: 'An Instagram user',
|
|
schema: z
|
|
.object({
|
|
id: z.string().title('ID').describe('The Instagram user ID'),
|
|
})
|
|
.title('User')
|
|
.describe('The user object fields'),
|
|
},
|
|
dm: {
|
|
title: 'Direct Message',
|
|
description: 'An Instagram direct message conversation',
|
|
schema: z
|
|
.object({
|
|
id: z.string().title('User ID').describe('The Instagram user ID of the user in the conversation'),
|
|
commentId: z
|
|
.string()
|
|
.optional()
|
|
.title('Comment ID')
|
|
.describe('The Instagram comment ID under which the direct message conversation was started'),
|
|
})
|
|
.title('Conversation')
|
|
.describe('The conversation object fields'),
|
|
},
|
|
},
|
|
attributes: {
|
|
category: 'Communication & Channels',
|
|
guideSlug: 'instagram',
|
|
repo: 'botpress',
|
|
},
|
|
})
|
|
.extend(proactiveUser, ({ entities }) => ({
|
|
entities: {
|
|
user: entities.user,
|
|
},
|
|
}))
|
|
.extend(proactiveConversation, ({ entities }) => ({
|
|
entities: {
|
|
conversation: entities.dm,
|
|
},
|
|
actions: {
|
|
getOrCreateConversation: { name: 'getOrCreateConversationDm' },
|
|
},
|
|
}))
|