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,9 @@
{
"Measure and boost customer happiness": "Kundenzufriedenheit messen und steigern",
"Trigger Wootric Survey": "Wootric-Umfrage auslösen",
"Trigger a survey from Wootric": "Eine Umfrage von Wootric auslösen",
"Emails": "E-Mails",
"Survey Immediately": "Umfrage sofort",
"End user emails, where you want the survey to be received": "Endbenutzer-E-Mails, wo die Umfrage empfangen werden soll",
"Enter \"true\" to survey immediately to bypass checks, otherwise \"false\"": "Geben Sie \"true\" zur Umfrage sofort ein, um Prüfungen zu umgehen, ansonsten \"falsch\""
}

View File

@@ -0,0 +1,9 @@
{
"Measure and boost customer happiness": "Medir y mejorar la felicidad del cliente",
"Trigger Wootric Survey": "Encuesta sanguinaria de activación",
"Trigger a survey from Wootric": "Activar una encuesta desde Wootric",
"Emails": "Correos",
"Survey Immediately": "Encuesta inmediatamente",
"End user emails, where you want the survey to be received": "Correos de usuario final, donde quieres que la encuesta sea recibida",
"Enter \"true\" to survey immediately to bypass checks, otherwise \"false\"": "Introduzca \"verdadero\" para la encuesta inmediatamente para eludir las comprobaciones, de lo contrario \"falso\""
}

View File

@@ -0,0 +1,9 @@
{
"Measure and boost customer happiness": "Mesurer et améliorer le bonheur des clients",
"Trigger Wootric Survey": "Déclencher Wootric Survey",
"Trigger a survey from Wootric": "Déclencher une enquête de Wootric",
"Emails": "E-mails",
"Survey Immediately": "Enquête immédiate",
"End user emails, where you want the survey to be received": "Emails de l'utilisateur final, où vous voulez que l'enquête soit reçue",
"Enter \"true\" to survey immediately to bypass checks, otherwise \"false\"": "Entrez \"true\" pour l'enquête immédiatement pour contourner les vérifications, sinon \"false\""
}

View File

@@ -0,0 +1,9 @@
{
"Measure and boost customer happiness": "顧客の幸せを測定し、向上させる",
"Trigger Wootric Survey": "トリガーWootric Survey",
"Trigger a survey from Wootric": "Wootric からアンケートをトリガーする",
"Emails": "E-mail",
"Survey Immediately": "すぐにアンケートする",
"End user emails, where you want the survey to be received": "アンケートを受信したいユーザーのメールを終了します。",
"Enter \"true\" to survey immediately to bypass checks, otherwise \"false\"": "チェックをバイパスするにはすぐにアンケートに「true」を入力してください。そうでない場合は「false」を入力してください"
}

View File

@@ -0,0 +1,9 @@
{
"Measure and boost customer happiness": "Meet en verhoog het klantgeluk",
"Trigger Wootric Survey": "Trigger Wootrisch Survey",
"Trigger a survey from Wootric": "Trigger een enquête van Wootric",
"Emails": "E-mails",
"Survey Immediately": "Onmiddellijk onderzoek",
"End user emails, where you want the survey to be received": "Einde gebruikerse-mails, waar u de enquête wilt ontvangen",
"Enter \"true\" to survey immediately to bypass checks, otherwise \"false\"": "Voer \"true\" in om direct te onderzoeken om controles te omzeilen, anders \"false\""
}

View File

@@ -0,0 +1,9 @@
{
"Measure and boost customer happiness": "Medir e melhorar a felicidade do cliente",
"Trigger Wootric Survey": "Ativar Pesquisa Wootric",
"Trigger a survey from Wootric": "Acionar uma pesquisa no Wootric",
"Emails": "e-mails",
"Survey Immediately": "Pesquisa imediatamente",
"End user emails, where you want the survey to be received": "Fim de email de usuário, onde você quer que a pesquisa seja recebida",
"Enter \"true\" to survey immediately to bypass checks, otherwise \"false\"": "Digite \"true\" para a pesquisa imediatamente para ignorar as verificações, caso contrário \"false\""
}

View File

@@ -0,0 +1,10 @@
{
"Wootric": "Вурическая",
"Measure and boost customer happiness": "Измерьте и ускорьте счастье клиента",
"Trigger Wootric Survey": "Триггер Wootric Survey",
"Trigger a survey from Wootric": "Запустить опрос из Wootric",
"Emails": "Письма",
"Survey Immediately": "Опрос немедленно",
"End user emails, where you want the survey to be received": "Электронная почта конечного пользователя, где вы хотите получить опрос",
"Enter \"true\" to survey immediately to bypass checks, otherwise \"false\"": "Введите \"true\", чтобы немедленно пропустить проверки, в противном случае \"false\""
}

View File

@@ -0,0 +1,9 @@
{
"Measure and boost customer happiness": "Measure and boost customer happiness",
"Trigger Wootric Survey": "Trigger Wootric Survey",
"Trigger a survey from Wootric": "Trigger a survey from Wootric",
"Emails": "Emails",
"Survey Immediately": "Survey Immediately",
"End user emails, where you want the survey to be received": "End user emails, where you want the survey to be received",
"Enter \"true\" to survey immediately to bypass checks, otherwise \"false\"": "Enter \"true\" to survey immediately to bypass checks, otherwise \"false\""
}

View File

@@ -0,0 +1,10 @@
{
"Wootric": "Wootric",
"Measure and boost customer happiness": "Measure and boost customer happiness",
"Trigger Wootric Survey": "Trigger Wootric Survey",
"Trigger a survey from Wootric": "Trigger a survey from Wootric",
"Emails": "Emails",
"Survey Immediately": "Survey Immediately",
"End user emails, where you want the survey to be received": "End user emails, where you want the survey to be received",
"Enter \"true\" to survey immediately to bypass checks, otherwise \"false\"": "Enter \"true\" to survey immediately to bypass checks, otherwise \"false\""
}

View File

@@ -0,0 +1,9 @@
{
"Measure and boost customer happiness": "Measure and boost customer happiness",
"Trigger Wootric Survey": "Trigger Wootric Survey",
"Trigger a survey from Wootric": "Trigger a survey from Wootric",
"Emails": "电子邮件",
"Survey Immediately": "Survey Immediately",
"End user emails, where you want the survey to be received": "End user emails, where you want the survey to be received",
"Enter \"true\" to survey immediately to bypass checks, otherwise \"false\"": "Enter \"true\" to survey immediately to bypass checks, otherwise \"false\""
}

View File

@@ -0,0 +1,27 @@
import { createPiece, PieceAuth } from '@activepieces/pieces-framework';
import { createWootricSurvey } from './lib/actions/create-survey';
import { OAuth2GrantType } from '@activepieces/shared';
export const WOOTRIC_API_URL = 'https://api.wootric.com';
export const WOOTRIC_IMAGE_URL =
'https://assets-production.wootric.com/assets/wootric-is-now-inmoment-250x108-85cb4900c62ff4d33200abafee7d63372d410abc5bf0cab90e80a07d4f4e5a31.png';
export const wootricAuth = PieceAuth.OAuth2({
required: true,
grantType: OAuth2GrantType.CLIENT_CREDENTIALS,
authUrl: '',
tokenUrl: `${WOOTRIC_API_URL}/oauth/token`,
scope: [],
});
export const wootric = createPiece({
displayName: 'Wootric',
description: 'Measure and boost customer happiness',
auth: wootricAuth,
minimumSupportedRelease: '0.30.0',
logoUrl: WOOTRIC_IMAGE_URL,
authors: ["abuaboud"],
actions: [createWootricSurvey],
triggers: [],
});

View File

@@ -0,0 +1,47 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { wootricAuth, WOOTRIC_API_URL } from '../../';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
export const sendSurvey = async (surveyRequestPayload: object) => {
const EMAIL_SURVEY = `${WOOTRIC_API_URL}/v1/email_survey`;
return await httpClient.sendRequest({
method: HttpMethod.POST,
url: EMAIL_SURVEY,
body: surveyRequestPayload,
});
};
export const createWootricSurvey = createAction({
name: 'trigger_wootric_survey',
auth: wootricAuth,
displayName: 'Trigger Wootric Survey',
description: 'Trigger a survey from Wootric',
props: {
emails: Property.Array({
displayName: 'Emails',
description: 'End user emails, where you want the survey to be received',
required: true,
defaultValue: [],
}),
surveyImmediately: Property.Checkbox({
displayName: 'Survey Immediately',
description:
'Enter "true" to survey immediately to bypass checks, otherwise "false"',
required: true,
}),
},
async run(context) {
const { surveyImmediately, emails } = context.propsValue;
const { access_token } = context.auth;
const surveyRequestPayload = {
emails: emails,
survey_immediately: surveyImmediately,
access_token: access_token,
};
const surveyResponse = await sendSurvey(surveyRequestPayload);
return surveyResponse.body;
},
});