Add Activepieces integration for workflow automation

- Add Activepieces fork with SmoothSchedule custom piece
- Create integrations app with Activepieces service layer
- Add embed token endpoint for iframe integration
- Create Automations page with embedded workflow builder
- Add sidebar visibility fix for embed mode
- Add list inactive customers endpoint to Public API
- Include SmoothSchedule triggers: event created/updated/cancelled
- Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-18 22:59:37 -05:00
parent 9848268d34
commit 3aa7199503
16292 changed files with 1284892 additions and 4708 deletions

View File

@@ -0,0 +1,11 @@
{
"Helps you search, summarize, and translate knowledge from hundreds of documents to help you produce trustworthy research.": "Hilft Ihnen bei der Suche, Zusammenfassung und Übersetzung von Wissen aus hunderten von Dokumenten, um Ihnen bei der Erstellung vertrauenswürdiger Recherchen zu helfen.",
"\n To obtain your API Key, follow these steps:\n 1. Log in to your Afforai account.\n 2. Navigate to **API** section on left panel.\n 3. On the top-right, you can find you API key.\n ": "\n Um Ihren API-Schlüssel zu erhalten, folgen Sie diesen Schritten:\n 1. Melden Sie sich bei Ihrem Afforai-Konto an.\n 2. Navigiere zum Abschnitt **API** im linken Fenster.\n 3. Auf der oberen rechten Seite findest du den API-Schlüssel.\n ",
"Ask Chatbot": "Chatbot fragen",
"Gets AI-generated completions for a given chatbot.": "Ruft die KI-generierte Vervollständigung für einen gegebenen Chatbot ab.",
"Chatbot ID": "Chatbot-ID",
"Chat History": "Chatverlauf",
"AI should search more deeply for information in the given files ?": "AI sollte tiefer nach Informationen in den angegebenen Dateien suchen ?",
"AI to search for information on Google?": "KI nach Informationen über Google suchen?",
"You can find Chatbot ID by clicking settings button under **Actions** for given chatbot.": "Du kannst Chatbot-ID finden, indem du auf Einstellungen klickst unter **Aktionen** für den angegebenen Chatbot."
}

View File

@@ -0,0 +1,11 @@
{
"Helps you search, summarize, and translate knowledge from hundreds of documents to help you produce trustworthy research.": "Le ayuda a buscar, resumir y traducir conocimientos de cientos de documentos para ayudarle a producir una investigación fiable.",
"\n To obtain your API Key, follow these steps:\n 1. Log in to your Afforai account.\n 2. Navigate to **API** section on left panel.\n 3. On the top-right, you can find you API key.\n ": "\n Para obtener tu clave API, sigue estos pasos:\n 1. Inicie sesión en su cuenta Afforai.\n 2. Vaya a la sección **API** del panel izquierdo.\n 3. En la parte superior derecha, puede encontrar la clave API.\n ",
"Ask Chatbot": "Preguntar a Chatbot",
"Gets AI-generated completions for a given chatbot.": "Obtiene terminaciones generadas por AIs para un determinado chatbot.",
"Chatbot ID": "ID del Chatbot",
"Chat History": "Historial de Chat",
"AI should search more deeply for information in the given files ?": "AI debería buscar más a fondo la información en los archivos proporcionados?",
"AI to search for information on Google?": "¿AI para buscar información sobre Google?",
"You can find Chatbot ID by clicking settings button under **Actions** for given chatbot.": "Puedes encontrar la ID de Chatbot haciendo clic en el botón de configuración debajo de **Acciones** para un chatbot determinado."
}

View File

@@ -0,0 +1,11 @@
{
"Helps you search, summarize, and translate knowledge from hundreds of documents to help you produce trustworthy research.": "Vous aide à rechercher, résumer et traduire les connaissances à partir de centaines de documents afin de vous aider à réaliser des recherches dignes de confiance.",
"\n To obtain your API Key, follow these steps:\n 1. Log in to your Afforai account.\n 2. Navigate to **API** section on left panel.\n 3. On the top-right, you can find you API key.\n ": "\n To obtain your API Key, follow these steps:\n 1. Log in to your Afforai account.\n 2. Navigate to **API** section on left panel.\n 3. On the top-right, you can find you API key.\n ",
"Ask Chatbot": "Demander à Chatbot",
"Gets AI-generated completions for a given chatbot.": "Récupère les complétions générées par AI pour un chatbot donné.",
"Chatbot ID": "ID Chatbot",
"Chat History": "Historique du chat",
"AI should search more deeply for information in the given files ?": "Amnesty International devrait rechercher plus en profondeur les informations dans les fichiers donnés ?",
"AI to search for information on Google?": "AI pour rechercher des informations sur Google ?",
"You can find Chatbot ID by clicking settings button under **Actions** for given chatbot.": "Vous pouvez trouver l'ID de Chatbot en cliquant sur le bouton Paramètres sous **Actions** pour un chatbot donné."
}

View File

@@ -0,0 +1,11 @@
{
"Helps you search, summarize, and translate knowledge from hundreds of documents to help you produce trustworthy research.": "信頼できる研究を生み出すのに役立つ数百の文書からの知識を検索、要約、翻訳するのに役立ちます。",
"\n To obtain your API Key, follow these steps:\n 1. Log in to your Afforai account.\n 2. Navigate to **API** section on left panel.\n 3. On the top-right, you can find you API key.\n ": "\n To obtain your API Key, follow these steps:\n 1. Log in to your Afforai account.\n 2. Navigate to **API** section on left panel.\n 3. On the top-right, you can find you API key.\n ",
"Ask Chatbot": "チャットボットに聞く",
"Gets AI-generated completions for a given chatbot.": "特定のチャットボットのAI生成完了を取得します。",
"Chatbot ID": "チャットボットID",
"Chat History": "チャット履歴",
"AI should search more deeply for information in the given files ?": "AIは指定されたファイル内の情報をもっと深く検索するべきですか?",
"AI to search for information on Google?": "Googleで情報を検索するAI?",
"You can find Chatbot ID by clicking settings button under **Actions** for given chatbot.": "チャットボットの **Actions** の下の設定ボタンをクリックするとチャットボットIDが表示されます。"
}

View File

@@ -0,0 +1,11 @@
{
"Helps you search, summarize, and translate knowledge from hundreds of documents to help you produce trustworthy research.": "Helpt u bij het zoeken, samenvatten en vertalen van kennis van honderden documenten om u te helpen betrouwbare onderzoeken te produceren.",
"\n To obtain your API Key, follow these steps:\n 1. Log in to your Afforai account.\n 2. Navigate to **API** section on left panel.\n 3. On the top-right, you can find you API key.\n ": "\n Om uw API-sleutel te verkrijgen, volg deze stappen:\n 1. Log in op je Afforai-account.\n 2. Navigeer naar **API** sectie op linker paneel.\n 3. Hier bovenaan rechts vind je een API-sleutel.\n ",
"Ask Chatbot": "Chatbot vragen",
"Gets AI-generated completions for a given chatbot.": "Haalt AI-gegenereerde completies op voor een bepaalde chatbot.",
"Chatbot ID": "Chatbot ID",
"Chat History": "Chat geschiedenis",
"AI should search more deeply for information in the given files ?": "AI moet dieper zoeken naar informatie in de gegeven dossiers?",
"AI to search for information on Google?": "AI om te zoeken naar informatie op Google?",
"You can find Chatbot ID by clicking settings button under **Actions** for given chatbot.": "Je kunt Chatbot ID vinden door op de instellingen knop onder **Acties** te klikken voor deze chatbot."
}

View File

@@ -0,0 +1,11 @@
{
"Helps you search, summarize, and translate knowledge from hundreds of documents to help you produce trustworthy research.": "Ajuda a pesquisar, resumir e traduzir conhecimento de centenas de documentos para ajudá-lo a produzir pesquisas dignas de confiança.",
"\n To obtain your API Key, follow these steps:\n 1. Log in to your Afforai account.\n 2. Navigate to **API** section on left panel.\n 3. On the top-right, you can find you API key.\n ": "\n Para obter sua chave de API, siga estes passos:\n 1. Entrar em sua conta Afforai.\n 2. Navegue até a seção de **API** no painel esquerdo.\n 3. Na parte superior direita, você pode encontrar a sua chave API.\n ",
"Ask Chatbot": "Pergunte ao Chatbot",
"Gets AI-generated completions for a given chatbot.": "Obtém compleções geradas por IA para um determinado chatbot.",
"Chatbot ID": "ID do Chatbot",
"Chat History": "Histórico de bate-papo",
"AI should search more deeply for information in the given files ?": "AI deve procurar mais profundamente informação nos arquivos indicados ?",
"AI to search for information on Google?": "AI para procurar informações no Google?",
"You can find Chatbot ID by clicking settings button under **Actions** for given chatbot.": "Você pode encontrar o ID do Chatbot clicando no botão de configurações em **Ações** para o ChatBot indicado."
}

View File

@@ -0,0 +1,12 @@
{
"Afforai": "Аффорай",
"Helps you search, summarize, and translate knowledge from hundreds of documents to help you produce trustworthy research.": "Помогает вам искать, обобщать и переводить знания из сотен документов, чтобы помочь вам в проведении надежных исследований.",
"\n To obtain your API Key, follow these steps:\n 1. Log in to your Afforai account.\n 2. Navigate to **API** section on left panel.\n 3. On the top-right, you can find you API key.\n ": "\n To obtain your API Key, follow these steps:\n 1. Log in to your Afforai account.\n 2. Navigate to **API** section on left panel.\n 3. On the top-right, you can find you API key.\n ",
"Ask Chatbot": "Спросить Чатбота",
"Gets AI-generated completions for a given chatbot.": "Получает AI дополнения для данного чатбота.",
"Chatbot ID": "ID Чатбота",
"Chat History": "История чата",
"AI should search more deeply for information in the given files ?": "Им следует более глубоко искать информацию в данных файлах?",
"AI to search for information on Google?": "Искать информацию в Google?",
"You can find Chatbot ID by clicking settings button under **Actions** for given chatbot.": "Вы можете найти Chatbot ID, нажав кнопку \"Настройки\" в **Actions** для данного чатбота."
}

View File

@@ -0,0 +1,11 @@
{
"Helps you search, summarize, and translate knowledge from hundreds of documents to help you produce trustworthy research.": "Helps you search, summarize, and translate knowledge from hundreds of documents to help you produce trustworthy research.",
"\n To obtain your API Key, follow these steps:\n 1. Log in to your Afforai account.\n 2. Navigate to **API** section on left panel.\n 3. On the top-right, you can find you API key.\n ": "\n To obtain your API Key, follow these steps:\n 1. Log in to your Afforai account.\n 2. Navigate to **API** section on left panel.\n 3. On the top-right, you can find you API key.\n ",
"Ask Chatbot": "Ask Chatbot",
"Gets AI-generated completions for a given chatbot.": "Gets AI-generated completions for a given chatbot.",
"Chatbot ID": "Chatbot ID",
"Chat History": "Chat History",
"AI should search more deeply for information in the given files ?": "AI should search more deeply for information in the given files ?",
"AI to search for information on Google?": "AI to search for information on Google?",
"You can find Chatbot ID by clicking settings button under **Actions** for given chatbot.": "You can find Chatbot ID by clicking settings button under **Actions** for given chatbot."
}

View File

@@ -0,0 +1,12 @@
{
"Afforai": "Afforai",
"Helps you search, summarize, and translate knowledge from hundreds of documents to help you produce trustworthy research.": "Helps you search, summarize, and translate knowledge from hundreds of documents to help you produce trustworthy research.",
"\n To obtain your API Key, follow these steps:\n 1. Log in to your Afforai account.\n 2. Navigate to **API** section on left panel.\n 3. On the top-right, you can find you API key.\n ": "\n To obtain your API Key, follow these steps:\n 1. Log in to your Afforai account.\n 2. Navigate to **API** section on left panel.\n 3. On the top-right, you can find you API key.\n ",
"Ask Chatbot": "Ask Chatbot",
"Gets AI-generated completions for a given chatbot.": "Gets AI-generated completions for a given chatbot.",
"Chatbot ID": "Chatbot ID",
"Chat History": "Chat History",
"AI should search more deeply for information in the given files ?": "AI should search more deeply for information in the given files ?",
"AI to search for information on Google?": "AI to search for information on Google?",
"You can find Chatbot ID by clicking settings button under **Actions** for given chatbot.": "You can find Chatbot ID by clicking settings button under **Actions** for given chatbot."
}

View File

@@ -0,0 +1,11 @@
{
"Helps you search, summarize, and translate knowledge from hundreds of documents to help you produce trustworthy research.": "Helps you search, summarize, and translate knowledge from hundreds of documents to help you produce trustworthy research.",
"\n To obtain your API Key, follow these steps:\n 1. Log in to your Afforai account.\n 2. Navigate to **API** section on left panel.\n 3. On the top-right, you can find you API key.\n ": "\n To obtain your API Key, follow these steps:\n 1. Log in to your Afforai account.\n 2. Navigate to **API** section on left panel.\n 3. On the top-right, you can find you API key.\n ",
"Ask Chatbot": "Ask Chatbot",
"Gets AI-generated completions for a given chatbot.": "Gets AI-generated completions for a given chatbot.",
"Chatbot ID": "Chatbot ID",
"Chat History": "Chat History",
"AI should search more deeply for information in the given files ?": "AI should search more deeply for information in the given files ?",
"AI to search for information on Google?": "AI to search for information on Google?",
"You can find Chatbot ID by clicking settings button under **Actions** for given chatbot.": "You can find Chatbot ID by clicking settings button under **Actions** for given chatbot."
}

View File

@@ -0,0 +1,26 @@
import { createPiece, PieceAuth } from '@activepieces/pieces-framework';
import { askChatbotAction } from './lib/actions/ask-chatbot';
import { PieceCategory } from '@activepieces/shared';
export const afforaiAuth = PieceAuth.SecretText({
displayName: 'API Key',
required: true,
description: `
To obtain your API Key, follow these steps:
1. Log in to your Afforai account.
2. Navigate to **API** section on left panel.
3. On the top-right, you can find you API key.
`,
});
export const afforai = createPiece({
displayName: 'Afforai',
description:
'Helps you search, summarize, and translate knowledge from hundreds of documents to help you produce trustworthy research.',
auth: afforaiAuth,
minimumSupportedRelease: '0.30.0',
logoUrl: 'https://cdn.activepieces.com/pieces/afforai.png',
categories: [PieceCategory.ARTIFICIAL_INTELLIGENCE],
authors: ["kishanprmr","abuaboud"],
actions: [askChatbotAction],
triggers: [],
});

View File

@@ -0,0 +1,83 @@
import { afforaiAuth } from '../../';
import { Property, createAction } from '@activepieces/pieces-framework';
import {
HttpMethod,
HttpRequest,
httpClient,
} from '@activepieces/pieces-common';
export const askChatbotAction = createAction({
auth: afforaiAuth,
name: 'afforai_ask_chatbot',
displayName: 'Ask Chatbot',
description: 'Gets AI-generated completions for a given chatbot.',
props: {
sessionID: Property.ShortText({
displayName: 'Chatbot ID',
required: true,
description: `You can find Chatbot ID by clicking settings button under **Actions** for given chatbot.`,
}),
history: Property.Array({
displayName: 'Chat History',
required: true,
properties: {
role: Property.StaticDropdown({
displayName: 'Role',
description: 'The role of the message sender.',
required: true,
options: {
disabled: false,
options: [
{
label: 'user',
value: 'user',
},
{
label: 'assistant',
value: 'assistant',
},
],
},
}),
content: Property.LongText({
displayName: 'Message',
description: 'The content of the message.',
required: true,
}),
},
}),
powerful: Property.Checkbox({
displayName:
'AI should search more deeply for information in the given files ?',
required: true,
}),
google: Property.Checkbox({
displayName: 'AI to search for information on Google?',
required: true,
}),
},
async run(context) {
const { sessionID, powerful, google } = context.propsValue;
const history = context.propsValue.history as ChatHistory[];
const request: HttpRequest = {
method: HttpMethod.POST,
url: 'https://api.afforai.com/api/api_completion',
body: {
apiKey: context.auth,
sessionID: sessionID,
history: history,
powerful: powerful,
google: google,
},
};
const res = await httpClient.sendRequest(request);
return res.body;
},
});
type ChatHistory = {
role: string;
content: string;
};