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,33 @@
{
"extends": [
"../../../../.eslintrc.json"
],
"ignorePatterns": [
"!**/*"
],
"overrides": [
{
"files": [
"*.ts",
"*.tsx",
"*.js",
"*.jsx"
],
"rules": {}
},
{
"files": [
"*.ts",
"*.tsx"
],
"rules": {}
},
{
"files": [
"*.js",
"*.jsx"
],
"rules": {}
}
]
}

View File

@@ -0,0 +1,7 @@
# pieces-activecampaign
This library was generated with [Nx](https://nx.dev).
## Building
Run `nx build pieces-activecampaign` to build the library.

View File

@@ -0,0 +1,4 @@
{
"name": "@activepieces/piece-activecampaign",
"version": "0.0.11"
}

View File

@@ -0,0 +1,57 @@
{
"name": "pieces-activecampaign",
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "packages/pieces/community/activecampaign/src",
"projectType": "library",
"targets": {
"build": {
"executor": "@nx/js:tsc",
"outputs": [
"{options.outputPath}"
],
"options": {
"outputPath": "dist/packages/pieces/community/activecampaign",
"tsConfig": "packages/pieces/community/activecampaign/tsconfig.lib.json",
"packageJson": "packages/pieces/community/activecampaign/package.json",
"main": "packages/pieces/community/activecampaign/src/index.ts",
"assets": [
"packages/pieces/community/activecampaign/*.md",
{
"input": "packages/pieces/community/activecampaign/src/i18n",
"output": "./src/i18n",
"glob": "**/!(i18n.json)"
}
],
"buildableProjectDepsInPackageJsonType": "dependencies",
"updateBuildableProjectDepsInPackageJson": true
},
"dependsOn": [
"^build",
"prebuild"
]
},
"publish": {
"command": "node tools/scripts/publish.mjs pieces-activecampaign {args.ver} {args.tag}",
"dependsOn": [
"build"
]
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": [
"{options.outputFile}"
]
},
"prebuild": {
"executor": "nx:run-commands",
"options": {
"cwd": "packages/pieces/community/activecampaign",
"command": "bun install --no-save --silent"
},
"dependsOn": [
"^build"
]
}
},
"tags": []
}

View File

@@ -0,0 +1,54 @@
{
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "E-Mail-Marketing, Marketing-Automatisierung und CRM-Tools benötigen Sie, um unglaubliche Kundenerlebnisse zu schaffen.",
"API URL": "API URL",
"API Key": "API-Schlüssel",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nUm Ihre ActiveCampaign API URL und Ihren Schlüssel zu erhalten, folgen Sie diesen Schritten:\n\n1. Loggen Sie sich in Ihr ActiveCampaign Konto ein.\n2. Navigieren Sie zu **Einstellungen->Entwickler** Abschnitt.\n3. Unter **API Zugriff** finden Sie Ihre API-URL und Schlüssel.\n",
"Add Contact to Account": "Kontakt zum Konto hinzufügen",
"Add Tag to Contact": "Tag zu Kontakt hinzufügen",
"Create Account": "Konto erstellen",
"Create Contact": "Kontakt erstellen",
"Update Account": "Konto aktualisieren",
"Update Contact": "Kontakt aktualisieren",
"Subscribe or Unsubscribe Contact From List": "Kontaktliste abonnieren oder abbestellen",
"Adds a contact to an ActiveCampaign account.": "Fügt einen Kontakt zu einem ActiveCampaign Konto hinzu.",
"Adds a tag to contact.": "Fügt einen Tag zum Kontakt hinzu.",
"Creates a new account.": "Erstellt ein neues Konto.",
"Creates a new contact.": "Erstellt einen neuen Kontakt.",
"Updates an account.": "Aktualisiert ein Konto.",
"Updates an existing contact.": "Aktualisiert einen bestehenden Kontakt.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Abonniert einen Kontakt zu einer Liste, der er derzeit nicht zugeordnet ist, oder löscht einen Kontakt aus einer Liste aus.",
"Contact ID": "Kontakt-ID",
"Account ID": "Konto-ID",
"Job Title": "Job Titel",
"Tag ID": "Tag ID",
"Account Name": "Kontoname",
"Account URL": "Account-URL",
"Account Custom Fields": "Benutzerdefinierte Felder",
"Email": "E-Mail",
"First Name": "Vorname",
"Last Name": "Nachname",
"Phone": "Telefon",
"Contact Custom Fields": "Benutzerdefinierte Kontaktfelder",
"List": "Liste",
"Action": "Aktion",
"Subscribe": "Abonnieren",
"Unsubscribe": "Abmelden",
"Deal Task Completed": "Angebotsaufgabe abgeschlossen",
"New Contact Note": "Neue Kontakt-Notiz",
"New Contact Task": "Neue Kontaktaufgabe",
"New Deal Added or Updated": "Neuer Deal hinzugefügt oder aktualisiert",
"New or Updated Account": "Neues oder aktualisiertes Konto",
"New Deal Note": "Neue Deal-Notiz",
"New Deal Task": "Neue Angebotsaufgabe",
"Tag Added or Removed From Contact": "Tag hinzugefügt oder vom Kontakt entfernt",
"Updated Contact": "Kontakt aktualisiert",
"Triggers when a deal task has been completed.": "Löst aus, wenn eine Deal-Aufgabe erledigt wurde.",
"Triggers when a new contact note is added.": "Wird ausgelöst, wenn eine neue Kontakt-Notiz hinzugefügt wird.",
"Triggers when a new contact task is added.": "Wird ausgelöst, wenn eine neue Kontaktaufgabe hinzugefügt wird.",
"Triggers when a new deal is created or existing deal is updated.": "Wird ausgelöst, wenn einen neuen Deal erstellt oder ein bestehender Deal aktualisiert wird.",
"Triggers when a new account is added or an existing accounts details are updated": "Wird ausgelöst, wenn ein neues Konto hinzugefügt wird oder die Daten eines bestehenden Kontos aktualisiert werden",
"Triggers when a new deal note is created.": "Wird ausgelöst, wenn ein neuer Deal-Hinweis erstellt wird.",
"Triggers when a new deal task is created.": "Wird ausgelöst, wenn eine neue Deal-Aufgabe erstellt wird.",
"Triggers when a a Tag is added or removed from a Contact": "Wird ausgelöst, wenn ein Tag hinzugefügt oder von einem Kontakt entfernt wird",
"Triggers when an existing contact details are updated.": "Wird ausgelöst, wenn eine existierende Kontaktinformation aktualisiert wird."
}

View File

@@ -0,0 +1,54 @@
{
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "Herramientas de marketing por correo electrónico, automatización de marketing y CRM que necesita para crear increíbles experiencias de clientes.",
"API URL": "API URL",
"API Key": "Clave API",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nPara obtener la llave de API URL de Campaña Activa, debes seguir estos pasos:\n\n1. Iniciar sesión en tu cuenta Campaña Activa.\n2. Navegar a la sección **Ajustes -> Desarrollador**.\n3. Debajo de ** Acceso API**, puedes encontrar tu API URL y la llave.\n",
"Add Contact to Account": "Añadir contacto a cuenta",
"Add Tag to Contact": "Añadir etiqueta al contacto",
"Create Account": "Crear cuenta",
"Create Contact": "Crear contacto",
"Update Account": "Actualizar cuenta",
"Update Contact": "Actualizar contacto",
"Subscribe or Unsubscribe Contact From List": "Suscribirse o cancelar contacto de la lista",
"Adds a contact to an ActiveCampaign account.": "Añade un contacto a una cuenta de Campaña Activa.",
"Adds a tag to contact.": "Añade una etiqueta al contacto.",
"Creates a new account.": "Crea una nueva cuenta.",
"Creates a new contact.": "Crea un nuevo contacto.",
"Updates an account.": "Actualiza una cuenta.",
"Updates an existing contact.": "Actualiza un contacto existente.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Suscribirse a un contacto a una lista con la que no está asociada actualmente, o Cancelar suscripciones a un contacto de una lista está asociado actualmente.",
"Contact ID": "ID de contacto",
"Account ID": "ID de cuenta",
"Job Title": "Trabajo",
"Tag ID": "Etiqueta ID",
"Account Name": "Nombre de cuenta",
"Account URL": "URL de la cuenta",
"Account Custom Fields": "Campos personalizados del cliente",
"Email": "E-mail",
"First Name": "Nombre",
"Last Name": "Apellido",
"Phone": "Teléfono",
"Contact Custom Fields": "Contactar campos personalizados",
"List": "Lista",
"Action": "Accin",
"Subscribe": "Suscribirse",
"Unsubscribe": "Darse de baja",
"Deal Task Completed": "Tarea de oferta completada",
"New Contact Note": "Nueva nota de contacto",
"New Contact Task": "Nueva Tarea de Contacto",
"New Deal Added or Updated": "Nueva oferta añadida o actualizada",
"New or Updated Account": "Cuenta nueva o actualizada",
"New Deal Note": "Nueva nota de oferta",
"New Deal Task": "Nueva tarea de oferta",
"Tag Added or Removed From Contact": "Etiqueta añadida o eliminada del contacto",
"Updated Contact": "Contacto actualizado",
"Triggers when a deal task has been completed.": "Se activa cuando se ha completado una tarea de acuerdo.",
"Triggers when a new contact note is added.": "Se activa cuando se añade una nueva nota de contacto.",
"Triggers when a new contact task is added.": "Se activa cuando se añade una nueva tarea de contacto.",
"Triggers when a new deal is created or existing deal is updated.": "Se activa cuando se crea una nueva operación o se actualiza una operación existente.",
"Triggers when a new account is added or an existing accounts details are updated": "Dispara cuando se agrega una nueva cuenta o se actualizan los detalles de una cuenta existente",
"Triggers when a new deal note is created.": "Se activa cuando se crea una nueva nota de negocio.",
"Triggers when a new deal task is created.": "Se activa cuando se crea una nueva tarea de trato.",
"Triggers when a a Tag is added or removed from a Contact": "Dispara cuando se agrega o elimina una etiqueta de un contacto",
"Triggers when an existing contact details are updated.": "Se activa cuando se actualizan los datos de contacto existentes."
}

View File

@@ -0,0 +1,54 @@
{
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "Le marketing par courriel, l'automatisation du marketing et les outils CRM dont vous avez besoin pour créer des expériences clients incroyables.",
"API URL": "API URL",
"API Key": "Clé API",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n",
"Add Contact to Account": "Ajouter un contact au compte",
"Add Tag to Contact": "Ajouter un tag au contact",
"Create Account": "Créer un compte",
"Create Contact": "Créer un contact",
"Update Account": "Mettre à jour le compte",
"Update Contact": "Mettre à jour le contact",
"Subscribe or Unsubscribe Contact From List": "S'abonner ou se désabonner de la liste des contacts",
"Adds a contact to an ActiveCampaign account.": "Ajoute un contact à un compte ActiveCampagne.",
"Adds a tag to contact.": "Ajoute un tag au contact.",
"Creates a new account.": "Crée un nouveau compte.",
"Creates a new contact.": "Crée un nouveau contact.",
"Updates an account.": "Met à jour un compte.",
"Updates an existing contact.": "Met à jour un contact existant.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Abonne un Contact à une Liste avec laquelle il n'est actuellement pas associé ou désabonne un Contact d'une liste est actuellement associé.",
"Contact ID": "ID du contact",
"Account ID": "ID du compte client",
"Job Title": "Titre du poste",
"Tag ID": "Tag ID",
"Account Name": "Nom du compte",
"Account URL": "URL du compte",
"Account Custom Fields": "Champs personnalisés du cpte client",
"Email": "Courriel",
"First Name": "First Name",
"Last Name": "Last Name",
"Phone": "Téléphone",
"Contact Custom Fields": "Champs personnalisés du contact",
"List": "Liste",
"Action": "Action",
"Subscribe": "S'abonner",
"Unsubscribe": "Se désabonner",
"Deal Task Completed": "Tâche de transaction terminée",
"New Contact Note": "Nouvelle note de contact",
"New Contact Task": "Nouvelle tâche de contact",
"New Deal Added or Updated": "Nouvelle offre ajoutée ou mise à jour",
"New or Updated Account": "Nouveau ou mis à jour du compte",
"New Deal Note": "Note sur la nouvelle offre",
"New Deal Task": "Nouvelle tâche",
"Tag Added or Removed From Contact": "Étiquette ajoutée ou retirée du contact",
"Updated Contact": "Contact mis à jour",
"Triggers when a deal task has been completed.": "Déclenche quand une tâche de transaction est terminée.",
"Triggers when a new contact note is added.": "Déclenche quand une nouvelle note de contact est ajoutée.",
"Triggers when a new contact task is added.": "Déclenche quand une nouvelle tâche de contact est ajoutée.",
"Triggers when a new deal is created or existing deal is updated.": "Déclenche lorsqu'une nouvelle transaction est créée ou qu'une transaction existante est mise à jour.",
"Triggers when a new account is added or an existing accounts details are updated": "Déclenche lorsqu'un nouveau compte est ajouté ou les coordonnées d'un compte existant sont mises à jour",
"Triggers when a new deal note is created.": "Déclenche quand une nouvelle note d'affaire est créée.",
"Triggers when a new deal task is created.": "Déclenche quand une nouvelle tâche de transaction est créée.",
"Triggers when a a Tag is added or removed from a Contact": "Déclenche lorsqu'un Tag est ajouté ou retiré d'un Contact",
"Triggers when an existing contact details are updated.": "Déclenche lorsqu'un contact existant est mis à jour."
}

View File

@@ -0,0 +1,54 @@
{
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "メールマーケティング、マーケティングオートメーション、CRMツールを活用することで、驚くほどのカスタマーエクスペリエンスを実現できます。",
"API URL": "API URL",
"API Key": "API キー",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n",
"Add Contact to Account": "アカウントに連絡先を追加",
"Add Tag to Contact": "連絡先にタグを追加",
"Create Account": "アカウントを作成",
"Create Contact": "連絡先を作成",
"Update Account": "アカウントを更新",
"Update Contact": "連絡先を更新",
"Subscribe or Unsubscribe Contact From List": "一覧から連絡先を購読または購読解除する",
"Adds a contact to an ActiveCampaign account.": "ActiveCampaignアカウントに連絡先を追加します。",
"Adds a tag to contact.": "連絡先にタグを追加",
"Creates a new account.": "新しいアカウントを作成します。",
"Creates a new contact.": "新しい連絡先を作成します。",
"Updates an account.": "アカウントを更新する。",
"Updates an existing contact.": "既存のコンタクトを更新します。",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "現在関連付けられていないリストに連絡先を登録したり、リストから連絡先を登録解除したりします。",
"Contact ID": "連絡先ID",
"Account ID": "アカウントID",
"Job Title": "役職名",
"Tag ID": "Tag ID",
"Account Name": "口座名",
"Account URL": "アカウントのURL",
"Account Custom Fields": "アカウントのカスタムフィールド",
"Email": "Eメールアドレス",
"First Name": "名",
"Last Name": "姓",
"Phone": "電話番号",
"Contact Custom Fields": "連絡のカスタムフィールド",
"List": "リスト",
"Action": "アクション",
"Subscribe": "購読する",
"Unsubscribe": "購読解除",
"Deal Task Completed": "タスクを処理しました",
"New Contact Note": "新しい連絡先メモ",
"New Contact Task": "新しい連絡先タスク",
"New Deal Added or Updated": "新しい取引が追加または更新されました",
"New or Updated Account": "新規または更新されたアカウント",
"New Deal Note": "新しい取引メモ",
"New Deal Task": "新しい取引タスク",
"Tag Added or Removed From Contact": "連絡先からタグが追加または削除されました",
"Updated Contact": "連絡先の更新",
"Triggers when a deal task has been completed.": "ディールタスクが完了したときに発生します。",
"Triggers when a new contact note is added.": "新しい連絡先ノートが追加されたときにトリガーされます。",
"Triggers when a new contact task is added.": "新しい連絡先タスクが追加されたときにトリガーします。",
"Triggers when a new deal is created or existing deal is updated.": "新しい取引が作成されたり、既存の取引が更新されたときに発生します。",
"Triggers when a new account is added or an existing accounts details are updated": "新しいアカウントが追加された時、または既存のアカウントの詳細が更新されたときにトリガーされます。",
"Triggers when a new deal note is created.": "新しいディールノートが作成されたときにトリガーされます。",
"Triggers when a new deal task is created.": "新しい取引タスクが作成されたときにトリガーされます。",
"Triggers when a a Tag is added or removed from a Contact": "連絡先からタグが追加または削除されたときにトリガーします",
"Triggers when an existing contact details are updated.": "既存の連絡先詳細が更新されたときにトリガーされます。"
}

View File

@@ -0,0 +1,54 @@
{
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "E-mail marketing, marketing automatisering en CRM tools die u nodig heeft om ongelooflijke klanten ervaringen te maken.",
"API URL": "API URL",
"API Key": "API Sleutel",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nOm uw ActiveCampaign API URL en Key te verkrijgen, volg de volgende stappen:\n\n1. Log in op uw ActiveCampaign account.\n2. Navigeer naar **Instellingen->Ontwikkelaar** sectie.\n3. Onder **API Access** ,vind je je API URL en Key.\n",
"Add Contact to Account": "Contactpersoon toevoegen aan account",
"Add Tag to Contact": "Tag aan contactpersoon toevoegen",
"Create Account": "Account Aanmaken",
"Create Contact": "Contactpersoon aanmaken",
"Update Account": "Account bijwerken",
"Update Contact": "Contactpersoon bijwerken",
"Subscribe or Unsubscribe Contact From List": "Abonneren of uitschrijven van contact van lijst",
"Adds a contact to an ActiveCampaign account.": "Voegt een contactpersoon toe aan een ActiveCampaign account.",
"Adds a tag to contact.": "Voegt een tag toe om contact op te nemen",
"Creates a new account.": "Maakt een nieuwe account aan.",
"Creates a new contact.": "Maakt een nieuw contact aan.",
"Updates an account.": "Een account bijwerken.",
"Updates an existing contact.": "Werkt een bestaand contact bij.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Abonneert u een contactpersoon op een lijst die momenteel niet gekoppeld is aan of meldt u af van een contactpersoon uit een lijst.",
"Contact ID": "Contact ID",
"Account ID": "ID klant",
"Job Title": "Job titel",
"Tag ID": "Tag ID",
"Account Name": "Klant naam",
"Account URL": "Account URL",
"Account Custom Fields": "Klant aangepaste velden",
"Email": "E-mail",
"First Name": "Voornaam",
"Last Name": "Achternaam",
"Phone": "Telefoonnummer",
"Contact Custom Fields": "Contact Custom Velden",
"List": "Klantenlijst",
"Action": "actie",
"Subscribe": "Abonneren",
"Unsubscribe": "Afmelden",
"Deal Task Completed": "Deal Taak voltooid",
"New Contact Note": "Nieuwe contact notitie",
"New Contact Task": "Nieuwe contacttaak",
"New Deal Added or Updated": "Nieuwe deal toegevoegd of bijgewerkt",
"New or Updated Account": "Nieuw of geüpdatet account",
"New Deal Note": "Nieuwe deal notitie",
"New Deal Task": "Nieuwe aanbieding taak",
"Tag Added or Removed From Contact": "Tag toegevoegd of verwijderd van contact",
"Updated Contact": "Contact bijgewerkt",
"Triggers when a deal task has been completed.": "Triggert wanneer een transactie taak is voltooid.",
"Triggers when a new contact note is added.": "Triggert wanneer een nieuwe contactnotitie wordt toegevoegd.",
"Triggers when a new contact task is added.": "Activeert wanneer een nieuwe contacttaak is toegevoegd.",
"Triggers when a new deal is created or existing deal is updated.": "Triggert wanneer een nieuwe transactie wordt aangemaakt of een bestaande deal wordt bijgewerkt.",
"Triggers when a new account is added or an existing accounts details are updated": "Triggert wanneer een nieuw account is toegevoegd of bestaande accountgegevens worden bijgewerkt",
"Triggers when a new deal note is created.": "Triggert wanneer een nieuwe transactienotitie wordt aangemaakt.",
"Triggers when a new deal task is created.": "Triggert wanneer een nieuwe transactie taak wordt aangemaakt.",
"Triggers when a a Tag is added or removed from a Contact": "Triggert wanneer een Tag wordt toegevoegd of verwijderd uit een contactpersoon",
"Triggers when an existing contact details are updated.": "Triggert wanneer bestaande contactgegevens worden bijgewerkt."
}

View File

@@ -0,0 +1,54 @@
{
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "Marketing por e-mail, automação de marketing e ferramentas de CRM que você precisa para criar experiências incríveis para o cliente.",
"API URL": "API URL",
"API Key": "Chave de API",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nPara obter sua Campanha Ativa API URL e chave, seguir esses passos:\n1. Acessar sua conta Campanha Ativa.\n2. Navegar para seção **Configurações->Desenvolvedor**\n3. Sob **Acesso API** você encontrará sua API URL e Chave.\n",
"Add Contact to Account": "Adicionar contato a conta",
"Add Tag to Contact": "Adicionar Tag ao Contato",
"Create Account": "Criar conta",
"Create Contact": "Criar contato",
"Update Account": "Atualizar conta",
"Update Contact": "Atualizar contato",
"Subscribe or Unsubscribe Contact From List": "Inscrever-se ou Cancelar Contato na Lista de Contatos",
"Adds a contact to an ActiveCampaign account.": "Adiciona um contato a uma conta ActiveCampaign",
"Adds a tag to contact.": "Adiciona uma etiqueta para contato.",
"Creates a new account.": "Cria uma nova conta.",
"Creates a new contact.": "Cria um novo contato.",
"Updates an account.": "Atualiza uma conta.",
"Updates an existing contact.": "Atualiza um contato existente.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Assinar um Contato a uma Lista com quem ele não está atualmente associado, ou cancelar a assinatura de um Contato a partir de uma lista está atualmente associado.",
"Contact ID": "ID do contato",
"Account ID": "ID da Conta",
"Job Title": "Título do Cargo",
"Tag ID": "Tag ID",
"Account Name": "Nome da Conta",
"Account URL": "URL da Conta",
"Account Custom Fields": "Campos personalizados de clientes",
"Email": "e-mail",
"First Name": "Nome",
"Last Name": "Sobrenome",
"Phone": "Smartphone",
"Contact Custom Fields": "Campos personalizados de contato",
"List": "Lista",
"Action": "Acão",
"Subscribe": "Inscrever-se",
"Unsubscribe": "Desinscrever",
"Deal Task Completed": "Tarefa de negócio concluída",
"New Contact Note": "Nova Nota de Contato",
"New Contact Task": "Nova tarefa de contato",
"New Deal Added or Updated": "Nova Oferta adicionada ou atualizada",
"New or Updated Account": "Conta nova ou atualizada",
"New Deal Note": "Nova Nota de Oferta",
"New Deal Task": "Nova tarefa de negócio",
"Tag Added or Removed From Contact": "Tag adicionada ou removida do contato",
"Updated Contact": "Contato atualizado",
"Triggers when a deal task has been completed.": "Dispara quando uma tarefa de negócio for concluída.",
"Triggers when a new contact note is added.": "Aciona quando uma nova nota de contato é adicionada.",
"Triggers when a new contact task is added.": "Aciona quando uma nova tarefa de contato é adicionada.",
"Triggers when a new deal is created or existing deal is updated.": "Aciona quando uma nova operação é criada ou uma operação existente é atualizada.",
"Triggers when a new account is added or an existing accounts details are updated": "Dispara quando uma nova conta é adicionada ou os detalhes de uma conta existente são atualizados",
"Triggers when a new deal note is created.": "Aciona quando uma nova nota de negócio é criada.",
"Triggers when a new deal task is created.": "Aciona quando uma nova tarefa de negócio é criada.",
"Triggers when a a Tag is added or removed from a Contact": "Aciona quando uma Tag é adicionada ou removida de um Contato",
"Triggers when an existing contact details are updated.": "Aciona quando detalhes de contato existentes são atualizados."
}

View File

@@ -0,0 +1,55 @@
{
"ActiveCampaign": "Активная Кампания",
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "Электронный маркетинг, маркетинговая автоматизация и CRM инструменты, необходимые для создания невероятных впечатлений от клиентов.",
"API URL": "API URL",
"API Key": "Ключ API",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n",
"Add Contact to Account": "Добавить контакт в аккаунт",
"Add Tag to Contact": "Добавить тег в контакт",
"Create Account": "Создать Аккаунт",
"Create Contact": "Создать контакт",
"Update Account": "Обновить аккаунт",
"Update Contact": "Обновить контакт",
"Subscribe or Unsubscribe Contact From List": "Подписаться или Отписаться от контакта из списка",
"Adds a contact to an ActiveCampaign account.": "Добавляет контакт с учетной записью Activeкампании.",
"Adds a tag to contact.": "Добавляет тег контакту.",
"Creates a new account.": "Создать новую учетную запись.",
"Creates a new contact.": "Создает новый контакт.",
"Updates an account.": "Обновление учетной записи.",
"Updates an existing contact.": "Обновляет существующий контакт.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Подписаться на контакт из списка, с которым он в настоящее время не связан или отписаться от контакта из списка в настоящее время связан с.",
"Contact ID": "ID контакта",
"Account ID": "ID клиента",
"Job Title": "Заголовок",
"Tag ID": "Tag ID",
"Account Name": "Имя аккаунта",
"Account URL": "URL аккаунта",
"Account Custom Fields": "Пользовательские поля клиента",
"Email": "Почта",
"First Name": "First Name",
"Last Name": "Last Name",
"Phone": "Телефон",
"Contact Custom Fields": "Пользовательские поля контакта",
"List": "Список",
"Action": "Действие",
"Subscribe": "Подписаться",
"Unsubscribe": "Отписаться",
"Deal Task Completed": "Задача на сделку выполнена",
"New Contact Note": "Новая контактная заметка",
"New Contact Task": "Новая задача Контакта",
"New Deal Added or Updated": "Новая сделка добавлена или обновлена",
"New or Updated Account": "Новый или обновленный аккаунт",
"New Deal Note": "Новая заметка о сделке",
"New Deal Task": "Новая сделка",
"Tag Added or Removed From Contact": "Тег добавлен или удален из контакта",
"Updated Contact": "Контакт обновлен",
"Triggers when a deal task has been completed.": "Триггеры по завершении сделки.",
"Triggers when a new contact note is added.": "Включает при добавлении новой контактной заметки.",
"Triggers when a new contact task is added.": "Триггеры при добавлении новой задачи контакта.",
"Triggers when a new deal is created or existing deal is updated.": "Триггеры при создании новой сделки или обновлении существующей сделки.",
"Triggers when a new account is added or an existing accounts details are updated": "Триггеры при добавлении новой учетной записи или обновлении данных существующего аккаунта",
"Triggers when a new deal note is created.": "Триггеры при создании новой заметки о сделке.",
"Triggers when a new deal task is created.": "Триггеры при создании новой сделки.",
"Triggers when a a Tag is added or removed from a Contact": "Триггеры при добавлении или удалении тега из контакта",
"Triggers when an existing contact details are updated.": "Включает при обновлении существующих контактных данных."
}

View File

@@ -0,0 +1,54 @@
{
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.",
"API URL": "API URL",
"API Key": "API Key",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n",
"Add Contact to Account": "Add Contact to Account",
"Add Tag to Contact": "Add Tag to Contact",
"Create Account": "Create Account",
"Create Contact": "Create Contact",
"Update Account": "Update Account",
"Update Contact": "Update Contact",
"Subscribe or Unsubscribe Contact From List": "Subscribe or Unsubscribe Contact From List",
"Adds a contact to an ActiveCampaign account.": "Adds a contact to an ActiveCampaign account.",
"Adds a tag to contact.": "Adds a tag to contact.",
"Creates a new account.": "Creates a new account.",
"Creates a new contact.": "Creates a new contact.",
"Updates an account.": "Updates an account.",
"Updates an existing contact.": "Updates an existing contact.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.",
"Contact ID": "Contact ID",
"Account ID": "Account ID",
"Job Title": "Job Title",
"Tag ID": "Tag ID",
"Account Name": "Account Name",
"Account URL": "Account URL",
"Account Custom Fields": "Account Custom Fields",
"Email": "Email",
"First Name": "First Name",
"Last Name": "Last Name",
"Phone": "Phone",
"Contact Custom Fields": "Contact Custom Fields",
"List": "List",
"Action": "Action",
"Subscribe": "Subscribe",
"Unsubscribe": "Unsubscribe",
"Deal Task Completed": "Deal Task Completed",
"New Contact Note": "New Contact Note",
"New Contact Task": "New Contact Task",
"New Deal Added or Updated": "New Deal Added or Updated",
"New or Updated Account": "New or Updated Account",
"New Deal Note": "New Deal Note",
"New Deal Task": "New Deal Task",
"Tag Added or Removed From Contact": "Tag Added or Removed From Contact",
"Updated Contact": "Updated Contact",
"Triggers when a deal task has been completed.": "Triggers when a deal task has been completed.",
"Triggers when a new contact note is added.": "Triggers when a new contact note is added.",
"Triggers when a new contact task is added.": "Triggers when a new contact task is added.",
"Triggers when a new deal is created or existing deal is updated.": "Triggers when a new deal is created or existing deal is updated.",
"Triggers when a new account is added or an existing accounts details are updated": "Triggers when a new account is added or an existing accounts details are updated",
"Triggers when a new deal note is created.": "Triggers when a new deal note is created.",
"Triggers when a new deal task is created.": "Triggers when a new deal task is created.",
"Triggers when a a Tag is added or removed from a Contact": "Triggers when a a Tag is added or removed from a Contact",
"Triggers when an existing contact details are updated.": "Triggers when an existing contact details are updated."
}

View File

@@ -0,0 +1,55 @@
{
"ActiveCampaign": "ActiveCampaign",
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.",
"API URL": "API URL",
"API Key": "API Key",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n",
"Add Contact to Account": "Add Contact to Account",
"Add Tag to Contact": "Add Tag to Contact",
"Create Account": "Create Account",
"Create Contact": "Create Contact",
"Update Account": "Update Account",
"Update Contact": "Update Contact",
"Subscribe or Unsubscribe Contact From List": "Subscribe or Unsubscribe Contact From List",
"Adds a contact to an ActiveCampaign account.": "Adds a contact to an ActiveCampaign account.",
"Adds a tag to contact.": "Adds a tag to contact.",
"Creates a new account.": "Creates a new account.",
"Creates a new contact.": "Creates a new contact.",
"Updates an account.": "Updates an account.",
"Updates an existing contact.": "Updates an existing contact.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.",
"Contact ID": "Contact ID",
"Account ID": "Account ID",
"Job Title": "Job Title",
"Tag ID": "Tag ID",
"Account Name": "Account Name",
"Account URL": "Account URL",
"Account Custom Fields": "Account Custom Fields",
"Email": "Email",
"First Name": "First Name",
"Last Name": "Last Name",
"Phone": "Phone",
"Contact Custom Fields": "Contact Custom Fields",
"List": "List",
"Action": "Action",
"Subscribe": "Subscribe",
"Unsubscribe": "Unsubscribe",
"Deal Task Completed": "Deal Task Completed",
"New Contact Note": "New Contact Note",
"New Contact Task": "New Contact Task",
"New Deal Added or Updated": "New Deal Added or Updated",
"New or Updated Account": "New or Updated Account",
"New Deal Note": "New Deal Note",
"New Deal Task": "New Deal Task",
"Tag Added or Removed From Contact": "Tag Added or Removed From Contact",
"Updated Contact": "Updated Contact",
"Triggers when a deal task has been completed.": "Triggers when a deal task has been completed.",
"Triggers when a new contact note is added.": "Triggers when a new contact note is added.",
"Triggers when a new contact task is added.": "Triggers when a new contact task is added.",
"Triggers when a new deal is created or existing deal is updated.": "Triggers when a new deal is created or existing deal is updated.",
"Triggers when a new account is added or an existing accounts details are updated": "Triggers when a new account is added or an existing accounts details are updated",
"Triggers when a new deal note is created.": "Triggers when a new deal note is created.",
"Triggers when a new deal task is created.": "Triggers when a new deal task is created.",
"Triggers when a a Tag is added or removed from a Contact": "Triggers when a a Tag is added or removed from a Contact",
"Triggers when an existing contact details are updated.": "Triggers when an existing contact details are updated."
}

View File

@@ -0,0 +1,54 @@
{
"Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.": "Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.",
"API URL": "API URL",
"API Key": "API 密钥",
"\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n": "\nTo obtain your ActiveCampaign API URL and Key, follow these steps:\n\n1. Log in to your ActiveCampaign account.\n2. Navigate to **Settings->Developer** section.\n3. Under **API Access** ,you'll find your API URL and Key.\n",
"Add Contact to Account": "Add Contact to Account",
"Add Tag to Contact": "Add Tag to Contact",
"Create Account": "Create Account",
"Create Contact": "Create Contact",
"Update Account": "Update Account",
"Update Contact": "Update Contact",
"Subscribe or Unsubscribe Contact From List": "Subscribe or Unsubscribe Contact From List",
"Adds a contact to an ActiveCampaign account.": "Adds a contact to an ActiveCampaign account.",
"Adds a tag to contact.": "Adds a tag to contact.",
"Creates a new account.": "Creates a new account.",
"Creates a new contact.": "Creates a new contact.",
"Updates an account.": "Updates an account.",
"Updates an existing contact.": "Updates an existing contact.",
"Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.": "Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.",
"Contact ID": "Contact ID",
"Account ID": "Account ID",
"Job Title": "Job Title",
"Tag ID": "Tag ID",
"Account Name": "Account Name",
"Account URL": "Account URL",
"Account Custom Fields": "Account Custom Fields",
"Email": "电子邮件地址",
"First Name": "First Name",
"Last Name": "名字",
"Phone": "Phone",
"Contact Custom Fields": "Contact Custom Fields",
"List": "List",
"Action": "行 动",
"Subscribe": "Subscribe",
"Unsubscribe": "Unsubscribe",
"Deal Task Completed": "Deal Task Completed",
"New Contact Note": "New Contact Note",
"New Contact Task": "New Contact Task",
"New Deal Added or Updated": "New Deal Added or Updated",
"New or Updated Account": "New or Updated Account",
"New Deal Note": "New Deal Note",
"New Deal Task": "New Deal Task",
"Tag Added or Removed From Contact": "Tag Added or Removed From Contact",
"Updated Contact": "Updated Contact",
"Triggers when a deal task has been completed.": "Triggers when a deal task has been completed.",
"Triggers when a new contact note is added.": "Triggers when a new contact note is added.",
"Triggers when a new contact task is added.": "Triggers when a new contact task is added.",
"Triggers when a new deal is created or existing deal is updated.": "Triggers when a new deal is created or existing deal is updated.",
"Triggers when a new account is added or an existing accounts details are updated": "Triggers when a new account is added or an existing accounts details are updated",
"Triggers when a new deal note is created.": "Triggers when a new deal note is created.",
"Triggers when a new deal task is created.": "Triggers when a new deal task is created.",
"Triggers when a a Tag is added or removed from a Contact": "Triggers when a a Tag is added or removed from a Contact",
"Triggers when an existing contact details are updated.": "Triggers when an existing contact details are updated."
}

View File

@@ -0,0 +1,89 @@
import {
createPiece,
PieceAuth,
Property,
} from '@activepieces/pieces-framework';
import { PieceCategory } from '@activepieces/shared';
import { newDealAddedOrUpdatedTrigger } from './lib/triggers/new-deal-added-or-updated';
import { createAccountAction } from './lib/actions/accounts/create-account';
import { updateAccountAction } from './lib/actions/accounts/update-account';
import { subscribeOrUnsubscribeContactFromListAction } from './lib/actions/contacts/subscribe-or-unsubscribe-contact-from-list';
import { createContactAction } from './lib/actions/contacts/create-contact';
import { updateContactAction } from './lib/actions/contacts/update-contact';
import { addContactToAccountAction } from './lib/actions/contacts/add-contact-to-account';
import { addTagToContactAction } from './lib/actions/contacts/add-tag-to-contact';
import { makeClient } from './lib/common';
import { newDealNoteTrigger } from './lib/triggers/new-deal-note';
import { newDealTaskTrigger } from './lib/triggers/new-deal-task';
import { dealTaskCompletedTrigger } from './lib/triggers/deal-task-completed';
import { newtagAddedOrRemovedFromContactTrigger } from './lib/triggers/tag-added-or-removed-from-contact';
import { newOrUpdatedAccountTrigger } from './lib/triggers/new-or-updated-account';
import { newContactNoteTrigger } from './lib/triggers/new-contact-note';
import { newContactTaskTrigger } from './lib/triggers/new-contact-task';
import { updatedContactTrigger } from './lib/triggers/updated-contact';
const authGuide = `
To obtain your ActiveCampaign API URL and Key, follow these steps:
1. Log in to your ActiveCampaign account.
2. Navigate to **Settings->Developer** section.
3. Under **API Access** ,you'll find your API URL and Key.
`;
export const activeCampaignAuth = PieceAuth.CustomAuth({
required: true,
description: authGuide,
props: {
apiUrl: Property.ShortText({
displayName: 'API URL',
required: true,
}),
apiKey: Property.ShortText({
displayName: 'API Key',
required: true,
}),
},
validate: async ({ auth }) => {
try {
const client = makeClient(auth);
await client.authenticate();
return { valid: true };
} catch (error) {
return {
valid: false,
error: 'Invalid API credentials',
};
}
},
});
export const activecampaign = createPiece({
displayName: 'ActiveCampaign',
description:
'Email marketing, marketing automation, and CRM tools you need to create incredible customer experiences.',
auth: activeCampaignAuth,
minimumSupportedRelease: '0.30.0',
logoUrl: 'https://cdn.activepieces.com/pieces/activecampaign.png',
categories: [PieceCategory.MARKETING, PieceCategory.SALES_AND_CRM],
authors: ["kishanprmr","abuaboud"],
actions: [
addContactToAccountAction,
addTagToContactAction,
createAccountAction,
createContactAction,
updateAccountAction,
updateContactAction,
subscribeOrUnsubscribeContactFromListAction,
],
triggers: [
dealTaskCompletedTrigger,
newContactNoteTrigger,
newContactTaskTrigger,
newDealAddedOrUpdatedTrigger,
newOrUpdatedAccountTrigger,
newDealNoteTrigger,
newDealTaskTrigger,
newtagAddedOrRemovedFromContactTrigger,
updatedContactTrigger,
],
});

View File

@@ -0,0 +1,37 @@
import { activeCampaignAuth } from '../../..';
import { Property, createAction } from '@activepieces/pieces-framework';
import { activecampaignCommon, makeClient } from '../../common';
import { CreateAccountRequest } from '../../common/types';
export const createAccountAction = createAction({
auth: activeCampaignAuth,
name: 'activecampaign_create_account',
displayName: 'Create Account',
description: 'Creates a new account.',
props: {
name: Property.ShortText({
displayName: 'Account Name',
required: true,
}),
accountUrl: Property.ShortText({
displayName: 'Account URL',
required: false,
}),
accountCustomFields: activecampaignCommon.accountCustomFields,
},
async run(context) {
const { name, accountUrl, accountCustomFields } = context.propsValue;
const createAccountParams: CreateAccountRequest = {
name,
accountUrl,
fields: [],
};
Object.entries(accountCustomFields).forEach(([key, value]) => {
createAccountParams.fields?.push({ customFieldId: Number(key), fieldValue: value });
});
const client = makeClient(context.auth.props);
return await client.createAccount(createAccountParams);
},
});

View File

@@ -0,0 +1,38 @@
import { activeCampaignAuth } from '../../..';
import { Property, createAction } from '@activepieces/pieces-framework';
import { activecampaignCommon, makeClient } from '../../common';
import { CreateAccountRequest } from '../../common/types';
export const updateAccountAction = createAction({
auth: activeCampaignAuth,
name: 'activecampaign_update_account',
displayName: 'Update Account',
description: 'Updates an account.',
props: {
accountId: activecampaignCommon.accountId,
name: Property.ShortText({
displayName: 'Account Name',
required: false,
}),
accountUrl: Property.ShortText({
displayName: 'Account URL',
required: false,
}),
accountCustomFields: activecampaignCommon.accountCustomFields,
},
async run(context) {
const { accountId, name, accountUrl, accountCustomFields } = context.propsValue;
const updateAccountParams: Partial<CreateAccountRequest> = {
name,
accountUrl,
fields: [],
};
Object.entries(accountCustomFields).forEach(([key, value]) => {
updateAccountParams.fields?.push({ customFieldId: Number(key), fieldValue: value });
});
const client = makeClient(context.auth.props);
return await client.updateAccount(Number(accountId), updateAccountParams);
},
});

View File

@@ -0,0 +1,29 @@
import { activeCampaignAuth } from '../../..';
import { Property, createAction } from '@activepieces/pieces-framework';
import { activecampaignCommon, makeClient } from '../../common';
export const addContactToAccountAction = createAction({
auth: activeCampaignAuth,
name: 'activecampaign_add_contact_to_account',
displayName: 'Add Contact to Account',
description: 'Adds a contact to an ActiveCampaign account.',
props: {
contactId: activecampaignCommon.contactId,
accountId: activecampaignCommon.accountId,
jobTitle: Property.ShortText({
displayName: 'Job Title',
required: false,
}),
},
async run(context) {
const { contactId, accountId, jobTitle } = context.propsValue;
const client = makeClient(context.auth.props);
return await client.createAccountContactAssociation(
Number(contactId),
Number(accountId),
jobTitle,
);
},
});

View File

@@ -0,0 +1,20 @@
import { activeCampaignAuth } from '../../..';
import { createAction } from '@activepieces/pieces-framework';
import { activecampaignCommon, makeClient } from '../../common';
export const addTagToContactAction = createAction({
auth: activeCampaignAuth,
name: 'activecampaign_add_tag_to_contact',
displayName: 'Add Tag to Contact',
description: 'Adds a tag to contact.',
props: {
contactId: activecampaignCommon.contactId,
tagId: activecampaignCommon.tagId,
},
async run(context) {
const { contactId, tagId } = context.propsValue;
const client = makeClient(context.auth.props);
return await client.addTagToContact(contactId, tagId);
},
});

View File

@@ -0,0 +1,48 @@
import { activeCampaignAuth } from '../../../';
import { Property, createAction } from '@activepieces/pieces-framework';
import { activecampaignCommon, makeClient } from '../../common';
import { CreateContactRequest } from '../../common/types';
export const createContactAction = createAction({
auth: activeCampaignAuth,
name: 'activecampaign_create_contact',
displayName: 'Create Contact',
description: 'Creates a new contact.',
props: {
email: Property.ShortText({
displayName: 'Email',
required: true,
}),
firstName: Property.ShortText({
displayName: 'First Name',
required: false,
}),
lastName: Property.ShortText({
displayName: 'Last Name',
required: false,
}),
phone: Property.ShortText({
displayName: 'Phone',
required: false,
}),
contactCustomFields: activecampaignCommon.contactCustomFields,
},
async run(context) {
const { email, firstName, lastName, phone, contactCustomFields } = context.propsValue;
const createContactParams: CreateContactRequest = {
email,
firstName,
lastName,
phone,
fieldValues: [],
};
Object.entries(contactCustomFields).forEach(([key, value]) => {
createContactParams.fieldValues.push({ field: key, value: value });
});
const client = makeClient(context.auth.props);
return await client.createContact(createContactParams);
},
});

View File

@@ -0,0 +1,41 @@
import { activeCampaignAuth } from '../../../';
import { Property, createAction } from '@activepieces/pieces-framework';
import { activecampaignCommon, makeClient } from '../../common';
export const subscribeOrUnsubscribeContactFromListAction = createAction({
auth: activeCampaignAuth,
name: 'activecampaign_subscribe_or_unsubscribe_contact_from_list',
displayName: 'Subscribe or Unsubscribe Contact From List',
description:
'Subscribes a Contact to a List it is not currently associated with, or Unsubscribes a Contact from a list is currently associated with.',
props: {
listId: activecampaignCommon.listId(true),
status: Property.StaticDropdown({
displayName: 'Action',
required: true,
options: {
disabled: false,
options: [
{
label: 'Subscribe',
value: '1',
},
{
label: 'Unsubscribe',
value: '2',
},
],
},
}),
contactId: Property.ShortText({
displayName: 'Contact ID',
required: true,
}),
},
async run(context) {
const { listId, status, contactId } = context.propsValue;
const client = makeClient(context.auth.props);
return await client.addContactToList(listId!, contactId, status);
},
});

View File

@@ -0,0 +1,50 @@
import { activeCampaignAuth } from '../../../';
import { Property, createAction } from '@activepieces/pieces-framework';
import { activecampaignCommon, makeClient } from '../../common';
import { CreateContactRequest } from '../../common/types';
export const updateContactAction = createAction({
auth: activeCampaignAuth,
name: 'activecampaign_update_contact',
displayName: 'Update Contact',
description: 'Updates an existing contact.',
props: {
contactId: activecampaignCommon.contactId,
email: Property.ShortText({
displayName: 'Email',
required: false,
}),
firstName: Property.ShortText({
displayName: 'First Name',
required: false,
}),
lastName: Property.ShortText({
displayName: 'Last Name',
required: false,
}),
phone: Property.ShortText({
displayName: 'Phone',
required: false,
}),
contactCustomFields: activecampaignCommon.contactCustomFields,
},
async run(context) {
const { email, contactId, firstName, lastName, phone, contactCustomFields } =
context.propsValue;
const updateContactParams: Partial<CreateContactRequest> = {
email,
firstName,
lastName,
phone,
fieldValues: [],
};
Object.entries(contactCustomFields).forEach(([key, value]) => {
updateContactParams.fieldValues?.push({ field: key, value: value });
});
const client = makeClient(context.auth.props);
return await client.updateContact(Number(contactId), updateContactParams);
},
});

View File

@@ -0,0 +1,148 @@
import {
HttpMessageBody,
HttpMethod,
QueryParams,
httpClient,
HttpRequest,
} from '@activepieces/pieces-common';
import {
AccountCustomFieldsResponse,
ContactCustomFieldsResponse,
ContactList,
CreateAccountRequest,
CreateContactRequest,
CreateWebhookRequest,
CreateWebhookResponse,
ListAccountsResponse,
ListContactsResponse,
ListTagsResponse,
} from './types';
function emptyValueFilter(accessor: (key: string) => any): (key: string) => boolean {
return (key: string) => {
const val = accessor(key);
return val !== null && val !== undefined && (typeof val != 'string' || val.length > 0);
};
}
export function prepareQuery(request?: Record<string, any>): QueryParams {
const params: QueryParams = {};
if (!request) return params;
Object.keys(request)
.filter(emptyValueFilter((k) => request[k]))
.forEach((k: string) => {
params[k] = (request as Record<string, any>)[k].toString();
});
return params;
}
export class ActiveCampaignClient {
constructor(private apiUrl: string, private apiKey: string) {}
async makeRequest<T extends HttpMessageBody>(
method: HttpMethod,
resourceUri: string,
query?: QueryParams,
body: any | undefined = undefined,
): Promise<T> {
const baseUrl = this.apiUrl.replace(/\/$/, '');
const request: HttpRequest = {
method: method,
url: baseUrl + '/api/3' + resourceUri,
headers: {
'Api-Token': this.apiKey,
},
queryParams: query,
body: body,
};
const res = await httpClient.sendRequest<T>(request);
return res.body;
}
async authenticate() {
return await this.makeRequest(HttpMethod.GET, '/users/me');
}
async subscribeWebhook(request: CreateWebhookRequest): Promise<CreateWebhookResponse> {
return await this.makeRequest<CreateWebhookResponse>(HttpMethod.POST, '/webhooks', undefined, {
webhook: request,
});
}
async unsubscribeWebhook(webhookId: string) {
return await this.makeRequest(HttpMethod.DELETE, `/webhooks/${webhookId}`);
}
async listContactLists() {
return await this.makeRequest<{ lists: ContactList[] }>(
HttpMethod.GET,
'/lists',
prepareQuery({ limit: 20 }),
);
}
async createAccount(request: CreateAccountRequest) {
return await this.makeRequest(HttpMethod.POST, '/accounts', undefined, { account: request });
}
async updateAccount(accountId: number, request: Partial<CreateAccountRequest>) {
return await this.makeRequest(HttpMethod.PUT, `/accounts/${accountId}`, undefined, {
account: request,
});
}
async listAccounts(search?: string): Promise<ListAccountsResponse> {
return await this.makeRequest<ListAccountsResponse>(
HttpMethod.GET,
'/accounts',
prepareQuery({ search: search }),
);
}
async listAccountCustomFields() {
return await this.makeRequest<{ accountCustomFieldMeta: AccountCustomFieldsResponse[] }>(
HttpMethod.GET,
'/accountCustomFieldMeta',
);
}
async createContact(request: CreateContactRequest) {
return await this.makeRequest(HttpMethod.POST, '/contacts', undefined, { contact: request });
}
async updateContact(contactId: number, request: Partial<CreateContactRequest>) {
return await this.makeRequest(HttpMethod.PUT, `/contacts/${contactId}`, undefined, {
contact: request,
});
}
async listContacts(): Promise<ListContactsResponse> {
return await this.makeRequest<ListContactsResponse>(HttpMethod.GET, '/contacts');
}
async listContactCustomFields(): Promise<ContactCustomFieldsResponse> {
return await this.makeRequest<ContactCustomFieldsResponse>(HttpMethod.GET, '/fields');
}
async addContactToList(listId: string, contactId: string, status: string) {
return await this.makeRequest(HttpMethod.POST, '/contactLists', undefined, {
contactList: { list: listId, contact: contactId, status: status },
});
}
async createAccountContactAssociation(contactId: number, accountId: number, jobTitle?: string) {
return await this.makeRequest(HttpMethod.POST, '/accountContacts', undefined, {
accountContact: { contact: contactId, account: accountId, jobTitle: jobTitle },
});
}
async addTagToContact(contactId: string, tagId: string) {
return await this.makeRequest(HttpMethod.POST, '/contactTags', undefined, {
contactTag: { contact: contactId, tag: tagId },
});
}
async listTags(): Promise<ListTagsResponse> {
return await this.makeRequest<ListTagsResponse>(HttpMethod.GET, '/tags');
}
}

View File

@@ -0,0 +1,16 @@
export const WEBHOOK_SOURCES = ['public', 'admin', 'api', 'system'];
export enum CUSTOM_FIELD_TYPE {
TEXT = 'text',
DROPDOWN = 'dropdown',
TEXTAREA = 'textarea',
NUMBER = 'number',
MONEY = 'currency',
DATE = 'date',
DATETIME = 'datetime',
LIST_BOX = 'listbox',
MULTISELECT = 'multiselect',
RADIO = 'radio',
CHECKBOX = 'checkbox',
HIDDEN = 'hidden',
}

View File

@@ -0,0 +1,299 @@
import { activeCampaignAuth } from '../../';
import { AppConnectionValueForAuthProperty, DynamicPropsValue, PiecePropValueSchema, Property } from '@activepieces/pieces-framework';
import { ActiveCampaignClient } from './client';
import { CUSTOM_FIELD_TYPE } from './constants';
export function makeClient(auth: PiecePropValueSchema<typeof activeCampaignAuth>) {
const client = new ActiveCampaignClient(auth.apiUrl, auth.apiKey);
return client;
}
export const activecampaignCommon = {
listId: (required = false) =>
Property.Dropdown({
auth: activeCampaignAuth,
displayName: 'List',
required,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please connect your account first',
options: [],
};
}
const client = makeClient(auth.props);
const res = await client.listContactLists();
return {
disabled: false,
options: res.lists.map((list) => {
return {
label: list.name,
value: list.id,
};
}),
};
},
}),
accountId: Property.Dropdown({
auth: activeCampaignAuth,
displayName: 'Account ID',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please connect your account first',
options: [],
};
}
const client = makeClient(auth.props);
const res = await client.listAccounts();
return {
disabled: false,
options: res.accounts.map((account) => {
return {
label: account.name,
value: account.id,
};
}),
};
},
}),
contactId: Property.Dropdown({
auth: activeCampaignAuth,
displayName: 'Contact ID',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please connect your account first',
options: [],
};
}
const client = makeClient((auth as AppConnectionValueForAuthProperty<typeof activeCampaignAuth>).props);
const res = await client.listContacts();
return {
disabled: false,
options: res.contacts.map((contact) => {
return {
label: contact.firstName && contact.lastName ? `${contact.firstName} ${contact.lastName}` : contact.email,
value: contact.id,
};
}),
};
},
}),
tagId: Property.Dropdown({
auth: activeCampaignAuth,
displayName: 'Tag ID',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please connect your account first',
options: [],
};
}
const client = makeClient(auth.props);
const res = await client.listTags();
return {
disabled: false,
options: res.tags.map((tag) => {
return {
label: tag.tag,
value: tag.id,
};
}),
};
},
}),
accountCustomFields: Property.DynamicProperties({
auth: activeCampaignAuth,
displayName: 'Account Custom Fields',
refreshers: [],
required: true,
props: async ({ auth }) => {
if (!auth) return {};
const client = makeClient(auth.props);
const res = await client.listAccountCustomFields();
const fields: DynamicPropsValue = {};
for (const field of res.accountCustomFieldMeta) {
switch (field.fieldType) {
case CUSTOM_FIELD_TYPE.TEXT:
case CUSTOM_FIELD_TYPE.HIDDEN:
fields[field.id] = Property.ShortText({
displayName: field.fieldLabel,
required: false,
});
break;
case CUSTOM_FIELD_TYPE.TEXTAREA:
fields[field.id] = Property.LongText({
displayName: field.fieldLabel,
required: false,
});
break;
case CUSTOM_FIELD_TYPE.DATE:
fields[field.id] = Property.DateTime({
displayName: field.fieldLabel,
description: 'Please use YYYY-MM-DD format.',
required: false,
});
break;
case CUSTOM_FIELD_TYPE.DATETIME:
fields[field.id] = Property.DateTime({
displayName: field.fieldLabel,
required: false,
});
break;
case CUSTOM_FIELD_TYPE.MONEY:
case CUSTOM_FIELD_TYPE.NUMBER:
fields[field.id] = Property.Number({
displayName: field.fieldLabel,
required: false,
});
break;
case CUSTOM_FIELD_TYPE.DROPDOWN:
case CUSTOM_FIELD_TYPE.RADIO:
fields[field.id] = Property.StaticDropdown({
displayName: field.fieldLabel,
required: false,
options: {
disabled: false,
options: field.fieldOptions
? field.fieldOptions?.map((option) => {
return {
label: option,
value: option,
};
})
: [],
},
});
break;
case CUSTOM_FIELD_TYPE.CHECKBOX:
case CUSTOM_FIELD_TYPE.LIST_BOX:
case CUSTOM_FIELD_TYPE.MULTISELECT:
fields[field.id] = Property.StaticMultiSelectDropdown({
displayName: field.fieldLabel,
required: false,
options: {
disabled: false,
options: field.fieldOptions
? field.fieldOptions?.map((option) => {
return {
label: option,
value: option,
};
})
: [],
},
});
break;
}
}
return fields;
},
}),
contactCustomFields: Property.DynamicProperties({
auth: activeCampaignAuth,
displayName: 'Contact Custom Fields',
refreshers: [],
required: true,
props: async ({ auth }) => {
if (!auth) return {};
const client = makeClient(auth.props);
const res = await client.listContactCustomFields();
const fields: DynamicPropsValue = {};
for (const field of res.fields) {
switch (field.type) {
case CUSTOM_FIELD_TYPE.TEXT:
case CUSTOM_FIELD_TYPE.HIDDEN:
fields[field.id] = Property.ShortText({
displayName: field.title,
required: false,
});
break;
case CUSTOM_FIELD_TYPE.TEXTAREA:
fields[field.id] = Property.LongText({
displayName: field.title,
required: false,
});
break;
case CUSTOM_FIELD_TYPE.DATE:
fields[field.id] = Property.DateTime({
displayName: field.title,
description: 'Please use YYYY-MM-DD format.',
required: false,
});
break;
case CUSTOM_FIELD_TYPE.DATETIME:
fields[field.id] = Property.DateTime({
displayName: field.title,
required: false,
});
break;
case CUSTOM_FIELD_TYPE.MONEY:
case CUSTOM_FIELD_TYPE.NUMBER:
fields[field.id] = Property.Number({
displayName: field.title,
required: false,
});
break;
case CUSTOM_FIELD_TYPE.DROPDOWN:
case CUSTOM_FIELD_TYPE.RADIO:
fields[field.id] = Property.StaticDropdown({
displayName: field.title,
required: false,
options: {
disabled: false,
options: res.fieldOptions
.filter((option) => option.field === field.id)
.map((option) => {
return {
label: option.label,
value: option.value,
};
}),
},
});
break;
case CUSTOM_FIELD_TYPE.CHECKBOX:
case CUSTOM_FIELD_TYPE.LIST_BOX:
case CUSTOM_FIELD_TYPE.MULTISELECT:
fields[field.id] = Property.StaticMultiSelectDropdown({
displayName: field.title,
required: false,
options: {
disabled: false,
options: res.fieldOptions
.filter((option) => option.field === field.id)
.map((option) => {
return {
label: option.label,
value: option.value,
};
}),
},
});
break;
}
}
return fields;
},
}),
};

View File

@@ -0,0 +1,83 @@
import { CUSTOM_FIELD_TYPE } from './constants';
export type CreateWebhookRequest = {
name: string;
url: string;
events: string[];
sources: string[];
listid?: string;
};
export type CreateWebhookResponse = {
webhook: {
name: string;
url: string;
events: string[];
sources: string[];
listid: string;
cdate: string;
state: string;
id: string;
};
};
export type ContactList = {
id: string;
name: string;
};
export type CreateAccountRequest = {
name: string;
accountUrl?: string;
fields?: {
customFieldId: number;
fieldValue: any;
}[];
};
export type CreateContactRequest = {
email: string;
firstName?: string;
lastName?: string;
phone?: string;
fieldValues: {
field: string;
value: any;
}[];
};
export type ListAccountsResponse = {
accounts: {
name: string;
id: string;
}[];
};
export type ListContactsResponse = {
contacts: {
email: string;
firstName: string;
lastName: string;
id: string;
}[];
};
export type ListTagsResponse = {
tags: {
tagType: string;
tag: string;
id: string;
}[];
};
export type AccountCustomFieldsResponse = {
id: string;
fieldLabel: string;
fieldType: CUSTOM_FIELD_TYPE;
fieldOptions?: string[];
fieldDefaultCurrency?: string;
fieldDefault?: number | string | string[];
};
export type ContactCustomFieldsResponse = {
fieldOptions: { field: string; value: string; label: string; id: string }[];
fields: { id: string; title: string; type: CUSTOM_FIELD_TYPE; options: string[] }[];
};

View File

@@ -0,0 +1,84 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const campaignLinkClickedTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_campaign_link_clicked',
displayName: 'New Campaign Link Click',
description:
'Triggers when a contact clicks a link in a campaign message (will only run once for each unique link).',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces Deal Task Completed Hook`,
url: context.webhookUrl,
events: ['click'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_campaign_link_clicked', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_campaign_link_clicked',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'deal_update',
date_time: '2024-02-28T04:45:41-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'John',
last_name: 'Wick',
phone: '',
ip: '0.0.0.0',
tags: '1233',
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
deal: {
id: '1',
title: 'Test Deal',
create_date: '2024-02-28 04:36:09',
create_date_iso: '2024-02-28T04:36:09-06:00',
orgid: '1',
orgname: 'John Wick',
stageid: '1',
stage_title: 'To Contact',
pipelineid: '1',
pipeline_title: 'Test Pipeline',
value: '1,044,055.00',
value_raw: '1044055',
currency: 'usd',
currency_symbol: '$',
owner: '1',
owner_firstname: 'John',
owner_lastname: 'Wick',
contactid: '3',
contact_email: 'code.test@gmail.com',
contact_firstname: 'John',
contact_lastname: 'Wick',
status: '0',
fields: [{ id: '1', key: 'Forecasted Close Date', value: '2024-02-08 00:00:00' }],
},
updated_fields: ['value'],
},
});

View File

@@ -0,0 +1,83 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const dealTaskCompletedTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_deal_task_completed',
displayName: 'Deal Task Completed',
description: 'Triggers when a deal task has been completed.',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces Deal Task Completed Hook`,
url: context.webhookUrl,
events: ['deal_task_complete'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_deal_task_completed', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_deal_task_completed',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'deal_update',
date_time: '2024-02-28T04:45:41-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'John',
last_name: 'Wick',
phone: '',
ip: '0.0.0.0',
tags: '1233',
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
deal: {
id: '1',
title: 'Test Deal',
create_date: '2024-02-28 04:36:09',
create_date_iso: '2024-02-28T04:36:09-06:00',
orgid: '1',
orgname: 'John Wick',
stageid: '1',
stage_title: 'To Contact',
pipelineid: '1',
pipeline_title: 'Test Pipeline',
value: '1,044,055.00',
value_raw: '1044055',
currency: 'usd',
currency_symbol: '$',
owner: '1',
owner_firstname: 'John',
owner_lastname: 'Wick',
contactid: '3',
contact_email: 'code.test@gmail.com',
contact_firstname: 'John',
contact_lastname: 'Wick',
status: '0',
fields: [{ id: '1', key: 'Forecasted Close Date', value: '2024-02-08 00:00:00' }],
},
updated_fields: ['value'],
},
});

View File

@@ -0,0 +1,83 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const newCampaignBounceTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_new_campaign_bounce',
displayName: 'New Campaign Bounce',
description: 'Triggers when a contact email address bounces from a sent campaign.',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces Campaign Bounce Hook`,
url: context.webhookUrl,
events: ['bounce'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_new_campaign_bounce', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_new_campaign_bounce',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'deal_update',
date_time: '2024-02-28T04:45:41-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'John',
last_name: 'Wick',
phone: '',
ip: '0.0.0.0',
tags: '1233',
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
deal: {
id: '1',
title: 'Test Deal',
create_date: '2024-02-28 04:36:09',
create_date_iso: '2024-02-28T04:36:09-06:00',
orgid: '1',
orgname: 'John Wick',
stageid: '1',
stage_title: 'To Contact',
pipelineid: '1',
pipeline_title: 'Test Pipeline',
value: '1,044,055.00',
value_raw: '1044055',
currency: 'usd',
currency_symbol: '$',
owner: '1',
owner_firstname: 'John',
owner_lastname: 'Wick',
contactid: '3',
contact_email: 'code.test@gmail.com',
contact_firstname: 'John',
contact_lastname: 'Wick',
status: '0',
fields: [{ id: '1', key: 'Forecasted Close Date', value: '2024-02-08 00:00:00' }],
},
updated_fields: ['value'],
},
});

View File

@@ -0,0 +1,58 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const newContactNoteTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_new_contact_note',
displayName: 'New Contact Note',
description: 'Triggers when a new contact note is added.',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces New Contact Note Hook`,
url: context.webhookUrl,
events: ['subscriber_note'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_new_contact_note', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_new_contact_note',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'subscriber_note',
date_time: '2024-02-28T06:58:11-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
note: 'test note',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'john',
last_name: 'wick',
phone: '',
ip: '0.0.0.0',
tags: '1233',
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
},
});

View File

@@ -0,0 +1,68 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const newContactTaskTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_new_contact_task',
displayName: 'New Contact Task',
description: 'Triggers when a new contact task is added.',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces New Contact Task Hook`,
url: context.webhookUrl,
events: ['contact_task_add'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_new_contact_task', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_new_contact_task',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'contact_task_add',
date_time: '2024-02-28T07:00:57-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'John',
last_name: 'Wick',
phone: '',
ip: '0.0.0.0',
tags: '1233',
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
task: {
id: '7',
type_id: '1',
title: 'test task',
note: 'Desc',
duedate: '2024-02-28 07:00:48',
duedate_iso: '2024-02-28T07:00:48-06:00',
edate: '2024-02-28 07:15:48',
edate_iso: '2024-02-28T07:15:48-06:00',
type_title: 'Call',
},
},
});

View File

@@ -0,0 +1,83 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const newDealAddedOrUpdatedTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_new_deal_added_or_updated',
displayName: 'New Deal Added or Updated',
description: 'Triggers when a new deal is created or existing deal is updated.',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces New Deal Hook`,
url: context.webhookUrl,
events: ['deal_add', 'deal_update'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_new_deal_added_or_updated', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_new_deal_added_or_updated',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'deal_update',
date_time: '2024-02-28T04:45:41-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'John',
last_name: 'Wick',
phone: '',
ip: '0.0.0.0',
tags: '1233',
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
deal: {
id: '1',
title: 'Test Deal',
create_date: '2024-02-28 04:36:09',
create_date_iso: '2024-02-28T04:36:09-06:00',
orgid: '1',
orgname: 'John Wick',
stageid: '1',
stage_title: 'To Contact',
pipelineid: '1',
pipeline_title: 'Test Pipeline',
value: '1,044,055.00',
value_raw: '1044055',
currency: 'usd',
currency_symbol: '$',
owner: '1',
owner_firstname: 'John',
owner_lastname: 'Wick',
contactid: '3',
contact_email: 'code.test@gmail.com',
contact_firstname: 'John',
contact_lastname: 'Wick',
status: '0',
fields: [{ id: '1', key: 'Forecasted Close Date', value: '2024-02-08 00:00:00' }],
},
updated_fields: ['value'],
},
});

View File

@@ -0,0 +1,67 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const newDealNoteTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_new_deal_note',
displayName: 'New Deal Note',
description: 'Triggers when a new deal note is created.',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces New Deal Note Hook`,
url: context.webhookUrl,
events: ['deal_note_add'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_new_deal_note', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>('activecampaign_new_deal_note');
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'deal_note_add',
date_time: '2024-02-28T05:58:27-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
note: { id: '1', text: 'Tst node' },
deal: {
id: '1',
title: 'Test Deal updated',
create_date: '2024-02-28 04:36:09',
create_date_iso: '2024-02-28T04:36:09-06:00',
orgid: '1',
orgname: 'John wick',
stageid: '1',
stage_title: 'To Contact',
pipelineid: '1',
pipeline_title: 'Test Pipeline',
value: '14,055.00',
value_raw: '14055',
currency: 'usd',
currency_symbol: '$',
owner: '1',
owner_firstname: 'John',
owner_lastname: 'wick',
contactid: '3',
contact_email: 'code.test@gmail.com',
contact_firstname: 'John',
contact_lastname: 'wick',
status: '0',
fields: [{ id: '1', key: 'Forecasted Close Date', value: '2024-02-08 00:00:00' }],
},
},
});

View File

@@ -0,0 +1,91 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const newDealTaskTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_new_deal_task',
displayName: 'New Deal Task',
description: 'Triggers when a new deal task is created.',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces New Deal Task Hook`,
url: context.webhookUrl,
events: ['deal_task_add'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_new_deal_task', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>('activecampaign_new_deal_task');
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'deal_task_add',
date_time: '2024-02-28T06:38:49-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'john',
last_name: 'wick',
phone: '',
ip: '0.0.0.0',
tags: '1233',
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
deal: {
id: '1',
title: 'Test Deal updated',
create_date: '2024-02-28 04:36:09',
create_date_iso: '2024-02-28T04:36:09-06:00',
orgid: '1',
orgname: 'john wick',
stageid: '1',
stage_title: 'To Contact',
pipelineid: '1',
pipeline_title: 'Test Pipeline',
value: '14,055.00',
value_raw: '14055',
currency: 'usd',
currency_symbol: '$',
owner: '1',
owner_firstname: 'john',
owner_lastname: 'wick',
contactid: '3',
contact_email: 'code.test@gmail.com',
contact_firstname: 'john',
contact_lastname: 'wick',
status: '0',
fields: [{ id: '1', key: 'Forecasted Close Date', value: '2024-02-08 00:00:00' }],
},
task: {
id: '6',
type_id: '1',
title: 'TEST TASK',
note: 'fsfssssf',
duedate: '2024-02-28 06:38:41',
duedate_iso: '2024-02-28T06:38:41-06:00',
edate: '2024-02-28 06:53:41',
edate_iso: '2024-02-28T06:53:41-06:00',
type_title: 'Call',
},
},
});

View File

@@ -0,0 +1,75 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const newOrUpdatedAccountTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_new_or_updated_account',
displayName: 'New or Updated Account',
description: 'Triggers when a new account is added or an existing accounts details are updated',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces New Account Hook`,
url: context.webhookUrl,
events: ['account_add', 'account_update'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_new_or_updated_account', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_new_or_updated_account',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'account_update',
date_time: '2024-02-28T06:44:32-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
account: {
id: '1',
name: 'John Wick',
account_url: 'https://www.github.com',
created_timestamp: '2024-02-28 01:09:17',
updated_timestamp: '2024-02-28 06:44:32',
fields: {
'0': { id: '1', key: 'Description', value: 'Desc' },
'1': { id: '2', key: 'Address 1', value: 'Address 1' },
'2': { id: '3', key: 'Address 2', value: 'Address 2' },
'3': { id: '4', key: 'City', value: 'City' },
'4': { id: '5', key: 'State/Province', value: 'State' },
'5': { id: '6', key: 'Postal Code', value: '75156' },
'6': { id: '7', key: 'Country', value: 'India' },
'7': { id: '8', key: 'Number of Employees', value: '101 - 500' },
'8': { id: '9', key: 'Annual Revenue', value: 'Less than 100K' },
'9': { id: '10', key: 'Industry/Vertical', value: 'Accounting/Financial' },
'10': { key: 'Phone Number', value: '' },
'11': { id: '11', key: 'Text Input', value: 'Text Input' },
'12': { id: '12', key: 'Text Area', value: 'Text Area' },
'13': { id: '13', key: 'Number', value: '18.000' },
'14': { id: '14', key: 'money', value: '18' },
'15': { id: '15', key: 'Date', value: '2024-02-28 00:00:00' },
'16': { key: 'Date Time', value: '' },
'17': { id: '16', key: 'Drop Down', value: 'Option 3' },
'18': { id: '17', key: 'List box', value: ['Option 1', 'Option 2'] },
'19': { id: '18', key: 'Radio Buttons', value: 'Option 1' },
'20': { id: '19', key: 'Check Box', value: ['Option 1', 'Option 2'] },
'21': { id: '20', key: 'Hidden', value: 'Hidden' },
},
},
updated_fields: ['name'],
},
});

View File

@@ -0,0 +1,61 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const newtagAddedOrRemovedFromContactTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_new_tag_added_or_removed_from_contact',
displayName: 'Tag Added or Removed From Contact',
description: 'Triggers when a a Tag is added or removed from a Contact',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces Contact Tag Hook`,
url: context.webhookUrl,
events: ['contact_tag_added', 'contact_tag_removed'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>(
'activecampaign_new_tag_added_or_removed_from_contact',
res,
);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_new_tag_added_or_removed_from_contact',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'contact_tag_added',
date_time: '2024-02-28T07:04:13-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'John',
last_name: 'Wick',
phone: '',
ip: '0.0.0.0',
tags: 'tag1, tag2',
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
tag: 'tag2',
},
});

View File

@@ -0,0 +1,58 @@
import { activeCampaignAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { makeClient } from '../common';
import { CreateWebhookResponse } from '../common/types';
import { WEBHOOK_SOURCES } from '../common/constants';
export const updatedContactTrigger = createTrigger({
auth: activeCampaignAuth,
name: 'activecampaign_updated_contact',
displayName: 'Updated Contact',
description: 'Triggers when an existing contact details are updated.',
type: TriggerStrategy.WEBHOOK,
props: {},
async onEnable(context) {
const client = makeClient(context.auth.props);
const res = await client.subscribeWebhook({
name: `Activepieces Updated Contact Hook`,
url: context.webhookUrl,
events: ['update'],
sources: WEBHOOK_SOURCES,
});
await context.store.put<CreateWebhookResponse>('activecampaign_updated_contact', res);
},
async run(context) {
return [context.payload.body];
},
async onDisable(context) {
const webhook = await context.store.get<CreateWebhookResponse>(
'activecampaign_updated_contact',
);
if (webhook != null) {
const client = makeClient(context.auth.props);
await client.unsubscribeWebhook(webhook.webhook.id);
}
},
sampleData: {
type: 'update',
date_time: '2024-02-28T07:16:48-06:00',
initiated_from: 'admin',
initiated_by: 'admin',
list: '0',
contact: {
id: '3',
email: 'code.test@gmail.com',
first_name: 'John',
last_name: 'Wick',
phone: '',
ip: '0.0.0.0',
tags: 'tag1, tag2',
fields: ['Option 1', '||Option 1||Option 2||'],
customer_acct_name: '',
orgname: '',
},
customer_acct_name: '',
customer_acct_id: '0',
orgname: '',
},
});

View File

@@ -0,0 +1,19 @@
{
"extends": "../../../../tsconfig.base.json",
"compilerOptions": {
"module": "commonjs",
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitOverride": true,
"noPropertyAccessFromIndexSignature": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true
},
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
}
]
}

View File

@@ -0,0 +1,11 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"module": "commonjs",
"outDir": "../../../../dist/out-tsc",
"declaration": true,
"types": ["node"]
},
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"],
"include": ["src/**/*.ts"]
}

View File

@@ -0,0 +1,18 @@
{
"extends": ["../../../../.eslintrc.json"],
"ignorePatterns": ["!**/*"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {}
},
{
"files": ["*.ts", "*.tsx"],
"rules": {}
},
{
"files": ["*.js", "*.jsx"],
"rules": {}
}
]
}

View File

@@ -0,0 +1,7 @@
# pieces-activepieces
This library was generated with [Nx](https://nx.dev).
## Building
Run `nx build pieces-activepieces` to build the library.

View File

@@ -0,0 +1,4 @@
{
"name": "@activepieces/piece-activepieces",
"version": "0.3.1"
}

View File

@@ -0,0 +1,57 @@
{
"name": "pieces-activepieces",
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "packages/pieces/community/activepieces/src",
"projectType": "library",
"targets": {
"build": {
"executor": "@nx/js:tsc",
"outputs": [
"{options.outputPath}"
],
"options": {
"outputPath": "dist/packages/pieces/community/activepieces",
"tsConfig": "packages/pieces/community/activepieces/tsconfig.lib.json",
"packageJson": "packages/pieces/community/activepieces/package.json",
"main": "packages/pieces/community/activepieces/src/index.ts",
"assets": [
"packages/pieces/community/activepieces/*.md",
{
"input": "packages/pieces/community/activepieces/src/i18n",
"output": "./src/i18n",
"glob": "**/!(i18n.json)"
}
],
"buildableProjectDepsInPackageJsonType": "dependencies",
"updateBuildableProjectDepsInPackageJson": true
},
"dependsOn": [
"^build",
"prebuild"
]
},
"publish": {
"command": "node tools/scripts/publish.mjs pieces-activepieces {args.ver} {args.tag}",
"dependsOn": [
"build"
]
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": [
"{options.outputFile}"
]
},
"prebuild": {
"executor": "nx:run-commands",
"options": {
"cwd": "packages/pieces/community/activepieces",
"command": "bun install --no-save --silent"
},
"dependsOn": [
"^build"
]
}
},
"tags": []
}

View File

@@ -0,0 +1,36 @@
{
"Open source no-code business automation": "Open Source no-code Business Automation",
"Base URL": "Basis-URL",
"API Key": "API-Schlüssel",
"\nActivepieces Platform API is available under the Platform Edition.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Note**: The API Key is available in the Platform Dashboard.\n\n": "\nActivepieces Platform-API ist unter der Plattform-Edition verfügbar.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Hinweis**: Der API-Schlüssel ist im Plattform-Dashboard verfügbar.\n\n",
"Create Project": "Projekt erstellen",
"Update Project": "Projekt aktualisieren",
"List Projects": "Projekte auflisten",
"Custom API Call": "Eigener API-Aufruf",
"Create a new project": "Neues Projekt erstellen",
"Update a project": "Projekt aktualisieren",
"List all projects": "Alle Projekte auflisten",
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
"Display Name": "Anzeigename",
"Id": "Id",
"Notify Status": "Benachrichtigungsstatus",
"Team Members": "Teammitglieder",
"Method": "Methode",
"Headers": "Kopfzeilen",
"Query Parameters": "Abfrageparameter",
"Body": "Körper",
"Response is Binary ?": "Antwort ist binär?",
"No Error on Failure": "Kein Fehler bei Fehler",
"Timeout (in seconds)": "Timeout (in Sekunden)",
"Id of the project": "Id des Projekts",
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
"Always notify": "Immer benachrichtigen",
"Never notify": "Nie benachrichtigen",
"GET": "ERHALTEN",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "LÖSCHEN",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,36 @@
{
"Open source no-code business automation": "Código Abierto no-código automatización de negocios",
"Base URL": "URL base",
"API Key": "Clave API",
"\nActivepieces Platform API is available under the Platform Edition.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Note**: The API Key is available in the Platform Dashboard.\n\n": "\nLa API de Plataforma Activepieces está disponible en la Edición de Plataforma.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Nota**: La clave API está disponible en el panel de Plataforma.\n\n",
"Create Project": "Crear proyecto",
"Update Project": "Actualizar proyecto",
"List Projects": "Lista de proyectos",
"Custom API Call": "Llamada API personalizada",
"Create a new project": "Crear un nuevo proyecto",
"Update a project": "Actualizar un proyecto",
"List all projects": "Listar todos los proyectos",
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
"Display Name": "Mostrar nombre",
"Id": "Id",
"Notify Status": "Notificar estado",
"Team Members": "Miembros del equipo",
"Method": "Método",
"Headers": "Encabezados",
"Query Parameters": "Parámetros de consulta",
"Body": "Cuerpo",
"Response is Binary ?": "¿Respuesta es binaria?",
"No Error on Failure": "No hay ningún error en fallo",
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
"Id of the project": "Id del proyecto",
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDF, imágenes, etc.",
"Always notify": "Notificar siempre",
"Never notify": "Nunca notificar",
"GET": "RECOGER",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "BORRAR",
"HEAD": "LIMPIO"
}

View File

@@ -0,0 +1,36 @@
{
"Open source no-code business automation": "Automatisation professionnelle no-code et open source",
"Base URL": "URL de base",
"API Key": "Clé API",
"\nActivepieces Platform API is available under the Platform Edition.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Note**: The API Key is available in the Platform Dashboard.\n\n": "\nL'API de la plateforme Activepieces est disponible dans l'édition de la Platfeorme.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Note** : La clé API est disponible dans le tableau de bord de la plateforme.\n\n",
"Create Project": "Créer un projet",
"Update Project": "Mettre à jour le projet",
"List Projects": "Lister les projets",
"Custom API Call": "Appel d'API personnalisé",
"Create a new project": "Créer un nouveau projet",
"Update a project": "Mettre à jour un projet",
"List all projects": "Lister tous les projets",
"Make a custom API call to a specific endpoint": "Passer un appel API personnalisé à un endpoint spécifique",
"Display Name": "Nom affiché",
"Id": "Id",
"Notify Status": "Notifier le statut",
"Team Members": "Membres de l'équipe",
"Method": "Méthode",
"Headers": "Headers",
"Query Parameters": "Paramètres de requête",
"Body": "Body",
"Response is Binary ?": "La réponse est Binaire ?",
"No Error on Failure": "Aucune erreur en cas d'échec",
"Timeout (in seconds)": "Délai d'expiration (en secondes)",
"Id of the project": "Id du projet",
"Authorization headers are injected automatically from your connection.": "Les headers d'autorisation sont injectés automatiquement à partir de votre connexion.",
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDF, les images, etc.",
"Always notify": "Toujours notifier",
"Never notify": "Ne jamais notifier",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,36 @@
{
"Open source no-code business automation": "オープンソースコードのない業務自動化",
"Base URL": "ベースURL",
"API Key": "API キー",
"\nActivepieces Platform API is available under the Platform Edition.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Note**: The API Key is available in the Platform Dashboard.\n\n": "\nActiveepieces Platform API is available under the Platform Edition.\n(https://www.activeeces.com/docs/admin-console/overview)\n\n**Note**: The API Key is available in the Platform Dashboard.\n\n",
"Create Project": "プロジェクトを作成",
"Update Project": "プロジェクトを更新",
"List Projects": "プロジェクト一覧",
"Custom API Call": "カスタムAPI通話",
"Create a new project": "新しいプロジェクトを作成",
"Update a project": "プロジェクトを更新",
"List all projects": "すべてのプロジェクトの一覧",
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
"Display Name": "表示名",
"Id": "Id",
"Notify Status": "ステータスを通知する",
"Team Members": "チーム メンバー",
"Method": "方法",
"Headers": "ヘッダー",
"Query Parameters": "クエリパラメータ",
"Body": "本文",
"Response is Binary ?": "応答はバイナリですか?",
"No Error on Failure": "失敗時にエラーはありません",
"Timeout (in seconds)": "タイムアウト(秒)",
"Id of the project": "プロジェクトの Id",
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
"Always notify": "常に通知",
"Never notify": "通知しない",
"GET": "取得",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "削除",
"HEAD": "頭"
}

View File

@@ -0,0 +1,36 @@
{
"Open source no-code business automation": "Open source zakelijke automatisering zonder code",
"Base URL": "Basis URL",
"API Key": "API Sleutel",
"\nActivepieces Platform API is available under the Platform Edition.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Note**: The API Key is available in the Platform Dashboard.\n\n": "\nActivepieces Platform API is beschikbaar onder de Platform Edition.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Let op**: De API Key is beschikbaar in het Platform Dashboard.\n\n",
"Create Project": "Project aanmaken",
"Update Project": "Project bijwerken",
"List Projects": "Projecten weergeven",
"Custom API Call": "Custom API Call",
"Create a new project": "Maak een nieuw project",
"Update a project": "Update een project",
"List all projects": "Toon alle projecten",
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
"Display Name": "Weergavenaam",
"Id": "Id",
"Notify Status": "Notificatie status",
"Team Members": "Team leden",
"Method": "Methode",
"Headers": "Kopteksten",
"Query Parameters": "Query parameters",
"Body": "Lichaam",
"Response is Binary ?": "Antwoord is binair?",
"No Error on Failure": "Geen fout bij fout",
"Timeout (in seconds)": "Time-out (in seconden)",
"Id of the project": "Id van het project",
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
"Always notify": "Altijd melden",
"Never notify": "Nooit melden",
"GET": "KRIJG",
"POST": "POSTE",
"PATCH": "BEKIJK",
"PUT": "PUT",
"DELETE": "VERWIJDEREN",
"HEAD": "HOOFD"
}

View File

@@ -0,0 +1,36 @@
{
"Open source no-code business automation": "Automação de código aberto sem código aberto",
"Base URL": "URL Base",
"API Key": "Chave de API",
"\nActivepieces Platform API is available under the Platform Edition.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Note**: The API Key is available in the Platform Dashboard.\n\n": "\nActivepieces Platform API está disponível sob a Edição de Plataforma.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Nota**: A API Key está disponível no Painel da Plataforma.\n\n",
"Create Project": "Criar Projeto",
"Update Project": "Atualizar Projeto",
"List Projects": "Listar Projetos",
"Custom API Call": "Chamada de API personalizada",
"Create a new project": "Criar um novo projeto",
"Update a project": "Atualizar um projeto",
"List all projects": "Listar todos os projetos",
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
"Display Name": "Nome de Exibição",
"Id": "Id",
"Notify Status": "Notificar Status",
"Team Members": "Membros da equipe",
"Method": "Método",
"Headers": "Cabeçalhos",
"Query Parameters": "Parâmetros da consulta",
"Body": "Conteúdo",
"Response is Binary ?": "A resposta é binária ?",
"No Error on Failure": "Nenhum erro no Failure",
"Timeout (in seconds)": "Tempo limite (em segundos)",
"Id of the project": "ID do projeto",
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
"Always notify": "Sempre notificar",
"Never notify": "Nunca notificar",
"GET": "OBTER",
"POST": "POSTAR",
"PATCH": "COMPRAR",
"PUT": "COLOCAR",
"DELETE": "EXCLUIR",
"HEAD": "CABEÇA"
}

View File

@@ -0,0 +1,36 @@
{
"Activepieces Platform": "Платформа активных частей",
"Open source no-code business automation": "Открытый исходный код бизнес-автоматизация",
"Base URL": "Базовый URL",
"API Key": "Ключ API",
"\nActivepieces Platform API is available under the Platform Edition.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Note**: The API Key is available in the Platform Dashboard.\n\n": "\nActivepieces Platform API доступен под версией платформы.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Примечание**: API ключ доступен в панели управления платформой.\n\n",
"Create Project": "Создать проект",
"Update Project": "Обновить проект",
"List Projects": "Список проектов",
"Custom API Call": "Пользовательский вызов API",
"Create a new project": "Создать новый проект",
"Update a project": "Изменить проект",
"List all projects": "Список всех проектов",
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
"Display Name": "Показать имя",
"Id": "Id",
"Notify Status": "Статус уведомления",
"Tasks": "Задачи",
"Team Members": "Члены команды",
"Method": "Метод",
"Headers": "Заголовки",
"Query Parameters": "Параметры запроса",
"Body": "Тело",
"No Error on Failure": "Нет ошибок при ошибке",
"Timeout (in seconds)": "Таймаут (в секундах)",
"Id of the project": "Id проекта",
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
"Always notify": "Всегда уведомлять",
"Never notify": "Никогда не уведомлять",
"GET": "ПОЛУЧИТЬ",
"POST": "ПОСТ",
"PATCH": "ПАТЧ",
"PUT": "ПОКУПИТЬ",
"DELETE": "УДАЛИТЬ",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,36 @@
{
"Open source no-code business automation": "Open source no-code business automation",
"Base URL": "Base URL",
"API Key": "API Key",
"\nActivepieces Platform API is available under the Platform Edition.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Note**: The API Key is available in the Platform Dashboard.\n\n": "\nActivepieces Platform API is available under the Platform Edition.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Note**: The API Key is available in the Platform Dashboard.\n\n",
"Create Project": "Create Project",
"Update Project": "Update Project",
"List Projects": "List Projects",
"Custom API Call": "Custom API Call",
"Create a new project": "Create a new project",
"Update a project": "Update a project",
"List all projects": "List all projects",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Display Name": "Display Name",
"Id": "Id",
"Notify Status": "Notify Status",
"Team Members": "Team Members",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Id of the project": "Id of the project",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"Always notify": "Always notify",
"Never notify": "Never notify",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,36 @@
{
"Activepieces Platform": "Activepieces Platform",
"Open source no-code business automation": "Open source no-code business automation",
"Base URL": "Base URL",
"API Key": "API Key",
"\nActivepieces Platform API is available under the Platform Edition.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Note**: The API Key is available in the Platform Dashboard.\n\n": "\nActivepieces Platform API is available under the Platform Edition.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Note**: The API Key is available in the Platform Dashboard.\n\n",
"Create Project": "Create Project",
"Update Project": "Update Project",
"List Projects": "List Projects",
"Custom API Call": "Custom API Call",
"Create a new project": "Create a new project",
"Update a project": "Update a project",
"List all projects": "List all projects",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Display Name": "Display Name",
"Id": "Id",
"Notify Status": "Notify Status",
"Tasks": "Tasks",
"Team Members": "Team Members",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Id of the project": "Id of the project",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"Always notify": "Always notify",
"Never notify": "Never notify",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,36 @@
{
"Open source no-code business automation": "Open source no-code business automation",
"Base URL": "基本网址",
"API Key": "API 密钥",
"\nActivepieces Platform API is available under the Platform Edition.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Note**: The API Key is available in the Platform Dashboard.\n\n": "\nActivepieces Platform API is available under the Platform Edition.\n(https://www.activepieces.com/docs/admin-console/overview)\n\n**Note**: The API Key is available in the Platform Dashboard.\n\n",
"Create Project": "Create Project",
"Update Project": "Update Project",
"List Projects": "List Projects",
"Custom API Call": "自定义 API 呼叫",
"Create a new project": "Create a new project",
"Update a project": "Update a project",
"List all projects": "List all projects",
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
"Display Name": "显示名称",
"Id": "Id",
"Notify Status": "Notify Status",
"Team Members": "Team Members",
"Method": "方法",
"Headers": "信头",
"Query Parameters": "查询参数",
"Body": "正文内容",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "失败时没有错误",
"Timeout (in seconds)": "超时(秒)",
"Id of the project": "Id of the project",
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"Always notify": "Always notify",
"Never notify": "Never notify",
"GET": "获取",
"POST": "帖子",
"PATCH": "PATCH",
"PUT": "弹出",
"DELETE": "删除",
"HEAD": "黑色"
}

View File

@@ -0,0 +1,57 @@
import {
createPiece,
PieceAuth,
Property,
} from '@activepieces/pieces-framework';
import { createProject } from './lib/actions/create-project';
import { listProject } from './lib/actions/list-project';
import { updateProject } from './lib/actions/update-project';
import { createCustomApiCallAction } from '@activepieces/pieces-common';
const markdown = `
Activepieces Platform API is available under the Platform Edition.
(https://www.activepieces.com/docs/admin-console/overview)
**Note**: The API Key is available in the Platform Dashboard.
`;
export const activePieceAuth = PieceAuth.CustomAuth({
description: markdown,
required: true,
props: {
baseApiUrl: Property.ShortText({
displayName: 'Base URL',
required: true,
defaultValue: 'https://cloud.activepieces.com/api/v1',
}),
apiKey: PieceAuth.SecretText({
displayName: 'API Key',
required: true,
}),
},
});
export const activepieces = createPiece({
displayName: 'Activepieces Platform',
description: 'Open source no-code business automation',
auth: activePieceAuth,
minimumSupportedRelease: '0.30.0',
logoUrl: 'https://cdn.activepieces.com/pieces/activepieces.png',
authors: ['doskyft', 'abuaboud', 'AdamSelene'],
actions: [
createProject,
updateProject,
listProject,
createCustomApiCallAction({
baseUrl: (auth) => {
return `${auth?.props.baseApiUrl}`;
},
auth: activePieceAuth,
authMapping: async (auth) => ({
Authorization: `Bearer ${auth.props.apiKey}`,
}),
}),
],
triggers: [],
});

View File

@@ -0,0 +1,36 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
AuthenticationType,
httpClient,
HttpMethod,
} from '@activepieces/pieces-common';
import { activePieceAuth } from '../../index';
export const createProject = createAction({
name: 'create_project',
auth: activePieceAuth,
displayName: 'Create Project',
description: 'Create a new project',
props: {
display_name: Property.ShortText({
displayName: 'Display Name',
description: undefined,
required: true,
}),
},
async run({ propsValue, auth }) {
const response = await httpClient.sendRequest<string[]>({
method: HttpMethod.POST,
url: `${auth.props.baseApiUrl}/projects`,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.props.apiKey,
},
body: {
displayName: propsValue['display_name'],
},
});
return response.body;
},
});

View File

@@ -0,0 +1,27 @@
import { createAction } from '@activepieces/pieces-framework';
import {
AuthenticationType,
httpClient,
HttpMethod,
} from '@activepieces/pieces-common';
import { activePieceAuth } from '../../index';
export const listProject = createAction({
name: 'list_project',
auth: activePieceAuth,
displayName: 'List Projects',
description: 'List all projects',
props: {},
async run({ auth }) {
const response = await httpClient.sendRequest<string[]>({
method: HttpMethod.GET,
url: `${auth.props.baseApiUrl}/projects`,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.props.apiKey,
},
});
return response.body;
},
});

View File

@@ -0,0 +1,66 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
AuthenticationType,
httpClient,
HttpMethod,
} from '@activepieces/pieces-common';
import { activePieceAuth } from '../../index';
export const updateProject = createAction({
name: 'update_project',
auth: activePieceAuth,
displayName: 'Update Project',
description: 'Update a project',
props: {
id: Property.ShortText({
displayName: 'Id',
description: 'Id of the project',
required: true,
}),
display_name: Property.ShortText({
displayName: 'Display Name',
description: undefined,
required: true,
}),
notify_status: Property.StaticDropdown({
displayName: 'Notify Status',
description: undefined,
required: true,
options: {
options: [
{
label: 'Always notify',
value: 'ALWAYS',
},
{
label: 'Never notify',
value: 'NEVER',
},
],
},
}),
team_members: Property.Number({
displayName: 'Team Members',
description: undefined,
required: true,
}),
},
async run({ propsValue, auth }) {
const response = await httpClient.sendRequest<string[]>({
method: HttpMethod.POST,
url: `${auth.props.baseApiUrl}/projects/${propsValue['id']}`,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: auth.props.apiKey,
},
body: {
displayName: propsValue['display_name'],
plan: {
teamMembers: propsValue['team_members'],
},
},
});
return response.body;
},
});

View File

@@ -0,0 +1,19 @@
{
"extends": "../../../../tsconfig.base.json",
"compilerOptions": {
"module": "commonjs",
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitOverride": true,
"noPropertyAccessFromIndexSignature": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true
},
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
}
]
}

View File

@@ -0,0 +1,11 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"module": "commonjs",
"outDir": "../../../../dist/out-tsc",
"declaration": true,
"types": ["node"]
},
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"],
"include": ["src/**/*.ts"]
}

View File

@@ -0,0 +1,33 @@
{
"extends": [
"../../../../.eslintrc.base.json"
],
"ignorePatterns": [
"!**/*"
],
"overrides": [
{
"files": [
"*.ts",
"*.tsx",
"*.js",
"*.jsx"
],
"rules": {}
},
{
"files": [
"*.ts",
"*.tsx"
],
"rules": {}
},
{
"files": [
"*.js",
"*.jsx"
],
"rules": {}
}
]
}

View File

@@ -0,0 +1,7 @@
# pieces-actualbudget
This library was generated with [Nx](https://nx.dev).
## Building
Run `nx build pieces-actualbudget` to build the library.

View File

@@ -0,0 +1,10 @@
{
"name": "@activepieces/piece-actualbudget",
"version": "0.0.12",
"dependencies": {
"@actual-app/api": "25.3.1"
},
"devDependencies": {
"@types/node": "^20.14.9"
}
}

View File

@@ -0,0 +1,65 @@
{
"name": "pieces-actualbudget",
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "packages/pieces/community/actualbudget/src",
"projectType": "library",
"release": {
"version": {
"currentVersionResolver": "git-tag",
"preserveLocalDependencyProtocols": false,
"manifestRootsToUpdate": [
"dist/{projectRoot}"
]
}
},
"tags": [],
"targets": {
"build": {
"executor": "@nx/js:tsc",
"outputs": [
"{options.outputPath}"
],
"options": {
"outputPath": "dist/packages/pieces/community/actualbudget",
"tsConfig": "packages/pieces/community/actualbudget/tsconfig.lib.json",
"packageJson": "packages/pieces/community/actualbudget/package.json",
"main": "packages/pieces/community/actualbudget/src/index.ts",
"assets": [
"packages/pieces/community/actualbudget/*.md",
{
"input": "packages/pieces/community/actualbudget/src/i18n",
"output": "./src/i18n",
"glob": "**/!(i18n.json)"
}
],
"buildableProjectDepsInPackageJsonType": "dependencies",
"updateBuildableProjectDepsInPackageJson": true
},
"dependsOn": [
"prebuild",
"^build"
]
},
"nx-release-publish": {
"options": {
"packageRoot": "dist/{projectRoot}"
}
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": [
"{options.outputFile}"
]
},
"prebuild": {
"executor": "nx:run-commands",
"options": {
"cwd": "packages/pieces/community/actualbudget",
"command": "bun install --no-save --silent"
},
"dependsOn": [
"^build"
]
}
}
}

View File

@@ -0,0 +1,75 @@
{
"2015": "2015",
"2016": "2016",
"2017": "2017",
"2018": "2018",
"2019": "2019",
"2020": "2020",
"2021": "2021",
"2022": "2022",
"2023": "2023",
"2024": "2024",
"2025": "2025",
"2026": "2026",
"2027": "2027",
"2028": "2028",
"2029": "2029",
"2030": "2030",
"Personal finance app": "Persönliche Finanz-App",
"Server URL": "Server-URL",
"Password": "Kennwort",
"Sync ID": "Sync-ID",
"End-to-end encryption password": "Ende-zu-Ende-Verschlüsselungspasswort",
"This is the URL of your running server": "Dies ist die URL Ihres laufenden Servers",
"This is the password you use to log into the server": "Dies ist das Passwort, mit dem Sie sich beim Server anmelden",
"This is the ID from Settings → Show advanced settings → Sync ID": "Dies ist die ID von Einstellungen → Erweiterte Einstellungen anzeigen → Sync-ID",
"if you have end-to-end encryption enabled": "wenn Ende-zu-Ende-Verschlüsselung aktiviert ist",
"Enter authentication details": "Anmeldedaten eingeben",
"Get Budget": "Budget holen",
"Import Transaction": "Transaktion importieren",
"Import Transactions": "Transaktionen importieren",
"Get Categories": "Kategorien erhalten",
"Get Accounts": "Konten abrufen",
"Get your monthly budget": "Hol dir dein monatliches Budget",
"Add a transaction": "Transaktion hinzufügen",
"Get your categories": "Kategorien erhalten",
"Get your accounts": "Hol dir deine Konten",
"Month": "Monat",
"Year": "Jahr",
"Account ID": "Konto-ID",
"Date": "Datum",
"Payee Name": "Name des Zahlers",
"Amount": "Betrag",
"Category ID": "Kategorie-ID",
"Notes": "Notizen",
"Imported ID": "Importierte ID",
"Transfer ID": "Überweisungs-ID",
"Cleared": "Gelöscht",
"Imported Payee": "Importierter Zahler",
"Transactions": "Transaktionen",
"The month of the budget you want to get": "Der Monat des Budgets, den Sie erhalten möchten",
"The year of the budget you want to get": "Das Jahr des Budgets, das du erhalten möchtest",
"ID of the account you want to import a transaction to": "ID des Kontos in das eine Transaktion importiert werden soll",
"Date the transaction took place": "Datum der Transaktion",
"Name of the payee": "Name des Zahlers",
"The dollar value of the transaction": "Der Dollar-Wert der Transaktion",
"ID of the transaction category": "ID der Überweisungskategorie",
"Additional notes about the transaction": "Zusätzliche Notizen zur Transaktion",
"Unique ID given by the bank for importing": "Eindeutige ID von der Bank für den Import angegeben",
"ID of the transaction in the other account for the transfer": "ID der Transaktion im anderen Konto für die Überweisung",
"Flag indicating if the transaction has cleared or not": "Markierung zeigt an, ob die Transaktion gelöscht wurde oder nicht",
"Raw description when importing, representing the original value": "Rohe Beschreibung beim Importieren, repräsentiert den ursprünglichen Wert",
"A json array of the transaction object": "Ein json Array des Transaktionsobjekts",
"January": "Januar",
"February": "Februar",
"March": "Marsch",
"April": "Ascherz",
"May": "Mai",
"June": "Juni",
"July": "Juli",
"August": "Luciano",
"September": "September",
"October": "Oktober",
"November": "November",
"December": "Dezember"
}

View File

@@ -0,0 +1,75 @@
{
"2015": "2015",
"2016": "2016",
"2017": "2017",
"2018": "2018",
"2019": "2019",
"2020": "2020",
"2021": "2021",
"2022": "2022",
"2023": "2023",
"2024": "2024",
"2025": "2025",
"2026": "2026",
"2027": "2027",
"2028": "2028",
"2029": "2029",
"2030": "2030",
"Personal finance app": "Aplicación de finanzas personales",
"Server URL": "URL del servidor",
"Password": "Contraseña",
"Sync ID": "Sincronizar ID",
"End-to-end encryption password": "Contraseña de cifrado de extremo a extremo",
"This is the URL of your running server": "Esta es la URL de tu servidor en ejecución",
"This is the password you use to log into the server": "Esta es la contraseña que utiliza para iniciar sesión en el servidor",
"This is the ID from Settings → Show advanced settings → Sync ID": "Este es el ID de Ajustes → Mostrar configuración avanzada → Sincronizar ID",
"if you have end-to-end encryption enabled": "si tiene el cifrado de extremo a extremo habilitado",
"Enter authentication details": "Introducir detalles de autenticación",
"Get Budget": "Obtener presupuesto",
"Import Transaction": "Importar transacción",
"Import Transactions": "Importar transacciones",
"Get Categories": "Obtener categorías",
"Get Accounts": "Obtener cuentas",
"Get your monthly budget": "Obtén tu presupuesto mensual",
"Add a transaction": "Añadir una transacción",
"Get your categories": "Obtén tus categorías",
"Get your accounts": "Obtén tus cuentas",
"Month": "Mes",
"Year": "Año",
"Account ID": "ID de cuenta",
"Date": "Fecha",
"Payee Name": "Nombre del beneficiario",
"Amount": "Cantidad",
"Category ID": "ID de categoría",
"Notes": "Notas",
"Imported ID": "ID importado",
"Transfer ID": "ID de transacción",
"Cleared": "Limpiado",
"Imported Payee": "Beneficiario importado",
"Transactions": "Transacciones",
"The month of the budget you want to get": "El mes del presupuesto que quieres obtener",
"The year of the budget you want to get": "El año del presupuesto que quieres obtener",
"ID of the account you want to import a transaction to": "ID de la cuenta a la que desea importar una transacción",
"Date the transaction took place": "Fecha en que la transacción tuvo lugar",
"Name of the payee": "Nombre del beneficiario",
"The dollar value of the transaction": "El valor en dólares de la transacción",
"ID of the transaction category": "ID de la categoría de transacción",
"Additional notes about the transaction": "Notas adicionales sobre la transacción",
"Unique ID given by the bank for importing": "ID único dado por el banco para importar",
"ID of the transaction in the other account for the transfer": "ID de la transacción en la otra cuenta para la transferencia",
"Flag indicating if the transaction has cleared or not": "Marca que indica si la transacción se ha borrado o no",
"Raw description when importing, representing the original value": "Descripción incorrecta al importar, representando el valor original",
"A json array of the transaction object": "Una matriz json del objeto de transacción",
"January": "Enero",
"February": "Febrero",
"March": "Marzo",
"April": "Abril",
"May": "Mayo",
"June": "Junio",
"July": "Julio",
"August": "Agosto",
"September": "Septiembre",
"October": "Octubre",
"November": "Noviembre",
"December": "Diciembre"
}

View File

@@ -0,0 +1,75 @@
{
"2015": "2015",
"2016": "2016",
"2017": "2017",
"2018": "2018",
"2019": "2019",
"2020": "2020",
"2021": "2021",
"2022": "2022",
"2023": "2023",
"2024": "2024",
"2025": "2025",
"2026": "2026",
"2027": "2027",
"2028": "2028",
"2029": "2029",
"2030": "2030",
"Personal finance app": "Application de finance personnelle",
"Server URL": "URL du serveur",
"Password": "Password",
"Sync ID": "ID de synchronisation",
"End-to-end encryption password": "Mot de passe de chiffrement de bout en bout",
"This is the URL of your running server": "Ceci est l'URL de votre serveur en cours d'exécution",
"This is the password you use to log into the server": "C'est le mot de passe que vous utilisez pour vous connecter au serveur",
"This is the ID from Settings → Show advanced settings → Sync ID": "Ceci est l'ID dans Paramètres → Afficher les paramètres avancés → ID de synchronisation",
"if you have end-to-end encryption enabled": "si vous avez activé le chiffrement de bout en bout",
"Enter authentication details": "Entrez les détails d'authentification",
"Get Budget": "Obtenir un budget",
"Import Transaction": "Importer une transaction",
"Import Transactions": "Importer des transactions",
"Get Categories": "Obtenir des catégories",
"Get Accounts": "Obtenir des comptes",
"Get your monthly budget": "Obtenez votre budget mensuel",
"Add a transaction": "Ajouter une transaction",
"Get your categories": "Obtenez vos catégories",
"Get your accounts": "Obtenez vos comptes",
"Month": "Mois",
"Year": "Année",
"Account ID": "ID du compte client",
"Date": "Date",
"Payee Name": "Nom du bénéficiaire",
"Amount": "Montant",
"Category ID": "ID de la catégorie",
"Notes": "Notes",
"Imported ID": "ID importé",
"Transfer ID": "ID de transfert",
"Cleared": "Nettoyé",
"Imported Payee": "bénéficiaire importé",
"Transactions": "Transactions",
"The month of the budget you want to get": "Le mois du budget que vous voulez obtenir",
"The year of the budget you want to get": "L'année du budget que vous voulez obtenir",
"ID of the account you want to import a transaction to": "ID du compte vers lequel vous voulez importer une transaction",
"Date the transaction took place": "Date de la transaction",
"Name of the payee": "Nom du bénéficiaire",
"The dollar value of the transaction": "La valeur en dollars de la transaction",
"ID of the transaction category": "ID de la catégorie de transaction",
"Additional notes about the transaction": "Notes supplémentaires sur la transaction",
"Unique ID given by the bank for importing": "Identifiant unique donné par la banque pour l'importation",
"ID of the transaction in the other account for the transfer": "ID de la transaction dans l'autre compte pour le transfert",
"Flag indicating if the transaction has cleared or not": "Indicateur indiquant si la transaction a été effacée ou non",
"Raw description when importing, representing the original value": "Description brute lors de l'importation, représentant la valeur d'origine",
"A json array of the transaction object": "Un tableau json de l'objet transaction",
"January": "Janvier",
"February": "Février",
"March": "Mars",
"April": "Avril",
"May": "Mai",
"June": "Juin",
"July": "Juillet",
"August": "Août",
"September": "Septembre",
"October": "Octobre",
"November": "Novembre",
"December": "Décembre"
}

View File

@@ -0,0 +1,75 @@
{
"2015": "2015",
"2016": "2016",
"2017": "2017",
"2018": "2018",
"2019": "2019",
"2020": "2020",
"2021": "2021",
"2022": "2022",
"2023": "2023",
"2024": "2024",
"2025": "2025",
"2026": "2026",
"2027": "2027",
"2028": "2028",
"2029": "2029",
"2030": "2030",
"Personal finance app": "パーソナルファイナンスアプリ",
"Server URL": "サーバー URL",
"Password": "パスワード",
"Sync ID": "同期ID",
"End-to-end encryption password": "エンドツーエンドの暗号化パスワード",
"This is the URL of your running server": "これは実行中のサーバーのURLです",
"This is the password you use to log into the server": "サーバーへのログインに使用するパスワード",
"This is the ID from Settings → Show advanced settings → Sync ID": "これは設定 → 詳細設定の表示 → 同期ID",
"if you have end-to-end encryption enabled": "エンドツーエンドの暗号化が有効になっている場合",
"Enter authentication details": "認証情報を入力してください",
"Get Budget": "予算を取得する",
"Import Transaction": "トランザクションをインポート",
"Import Transactions": "トランザクションをインポート",
"Get Categories": "カテゴリを取得",
"Get Accounts": "アカウントを取得",
"Get your monthly budget": "毎月の予算を取得する",
"Add a transaction": "取引を追加",
"Get your categories": "カテゴリを取得する",
"Get your accounts": "アカウントを取得する",
"Month": "月",
"Year": "年",
"Account ID": "アカウントID",
"Date": "日付",
"Payee Name": "支払先名",
"Amount": "金額",
"Category ID": "カテゴリID",
"Notes": "メモ",
"Imported ID": "インポートされたID",
"Transfer ID": "転送ID",
"Cleared": "消去しました",
"Imported Payee": "インポートされた支払先",
"Transactions": "取引",
"The month of the budget you want to get": "取得したい予算の月",
"The year of the budget you want to get": "あなたが得たい予算の年",
"ID of the account you want to import a transaction to": "トランザクションをインポートしたいアカウントのID",
"Date the transaction took place": "取引が行われた日付",
"Name of the payee": "支払先の名前",
"The dollar value of the transaction": "取引のドル価値",
"ID of the transaction category": "取引カテゴリのID",
"Additional notes about the transaction": "取引に関する追加メモ",
"Unique ID given by the bank for importing": "インポートのための銀行によって与えられた一意のID",
"ID of the transaction in the other account for the transfer": "転送のための他のアカウントの取引のID",
"Flag indicating if the transaction has cleared or not": "トランザクションがクリアされたかどうかを示すフラグ",
"Raw description when importing, representing the original value": "インポート時の生の説明、元の値を表す",
"A json array of the transaction object": "トランザクションオブジェクトの json 配列",
"January": "1月",
"February": "2月",
"March": "3月",
"April": "4月",
"May": "5月",
"June": "6月",
"July": "7月",
"August": "8月",
"September": "9月",
"October": "10月",
"November": "11月",
"December": "12月"
}

View File

@@ -0,0 +1,75 @@
{
"2015": "2015",
"2016": "2016",
"2017": "2017",
"2018": "2018",
"2019": "2019",
"2020": "2020",
"2021": "2021",
"2022": "2022",
"2023": "2023",
"2024": "2024",
"2025": "2025",
"2026": "2026",
"2027": "2027",
"2028": "2028",
"2029": "2029",
"2030": "2030",
"Personal finance app": "Persoonlijke financiële app",
"Server URL": "Server URL",
"Password": "Wachtwoord",
"Sync ID": "Synchroniseer ID",
"End-to-end encryption password": "End-to-end encryptie wachtwoord",
"This is the URL of your running server": "Dit is de URL van uw server",
"This is the password you use to log into the server": "Dit is het wachtwoord dat u gebruikt om in te loggen op de server",
"This is the ID from Settings → Show advanced settings → Sync ID": "Dit is de ID van Instellingen → Toon geavanceerde instellingen → Sync ID",
"if you have end-to-end encryption enabled": "als u end-to-end versleuteling hebt ingeschakeld",
"Enter authentication details": "Voer authenticatiegegevens in",
"Get Budget": "Krijg budget",
"Import Transaction": "Importeer transactie",
"Import Transactions": "Importeer transacties",
"Get Categories": "Categorieën ophalen",
"Get Accounts": "Accounts ophalen",
"Get your monthly budget": "Ontvang je maandelijkse budget",
"Add a transaction": "Voeg een transactie toe",
"Get your categories": "Krijg je categorieën",
"Get your accounts": "Vraag je accounts aan",
"Month": "maand",
"Year": "jaar",
"Account ID": "ID klant",
"Date": "Datum:",
"Payee Name": "Naam begunstigde",
"Amount": "Hoeveelheid",
"Category ID": "Categorie ID",
"Notes": "Opmerkingen",
"Imported ID": "Geïmporteerde ID",
"Transfer ID": "Transactie ID",
"Cleared": "Opgeruimd",
"Imported Payee": "Geïmporteerde begunstigde",
"Transactions": "Transacties",
"The month of the budget you want to get": "De maand van het budget dat u wilt krijgen",
"The year of the budget you want to get": "Het jaar van het budget dat u wilt krijgen",
"ID of the account you want to import a transaction to": "ID van het account waar je een transactie naar wilt importeren",
"Date the transaction took place": "Datum waarop de transactie plaatsvond",
"Name of the payee": "Naam van de begunstigde",
"The dollar value of the transaction": "De waarde van de dollar van de transactie",
"ID of the transaction category": "ID van de transactie categorie",
"Additional notes about the transaction": "Aanvullende notities over de transactie",
"Unique ID given by the bank for importing": "Unieke ID gegeven door de bank voor het importeren",
"ID of the transaction in the other account for the transfer": "ID van de transactie in het andere account voor de overschrijving",
"Flag indicating if the transaction has cleared or not": "Melding die aangeeft of de transactie is gewist of niet",
"Raw description when importing, representing the original value": "Ruwe beschrijving bij het importeren, die de originele waarde weergeeft",
"A json array of the transaction object": "Een json array van het transactie object",
"January": "januari",
"February": "februari",
"March": "maart",
"April": "april",
"May": "mei",
"June": "juni",
"July": "juli",
"August": "augustus",
"September": "september",
"October": "oktober",
"November": "november",
"December": "december"
}

View File

@@ -0,0 +1,75 @@
{
"2015": "2015",
"2016": "2016",
"2017": "2017",
"2018": "2018",
"2019": "2019",
"2020": "2020",
"2021": "2021",
"2022": "2022",
"2023": "2023",
"2024": "2024",
"2025": "2025",
"2026": "2026",
"2027": "2027",
"2028": "2028",
"2029": "2029",
"2030": "2030",
"Personal finance app": "Aplicativo financeiro pessoal",
"Server URL": "URL do servidor",
"Password": "Senha",
"Sync ID": "ID de sincronização",
"End-to-end encryption password": "Senha de criptografia ponto-a-ponta",
"This is the URL of your running server": "Esta é a URL do seu servidor em execução",
"This is the password you use to log into the server": "Esta é a senha que você usa para entrar no servidor",
"This is the ID from Settings → Show advanced settings → Sync ID": "Este é o ID em Configurações → Mostrar configurações avançadas → ID de sincronização",
"if you have end-to-end encryption enabled": "se você tem criptografia de ponta a ponta ativada",
"Enter authentication details": "Digite detalhes de autenticação",
"Get Budget": "Obter orçamento",
"Import Transaction": "Importar Transação",
"Import Transactions": "Importar Transações",
"Get Categories": "Obter categorias",
"Get Accounts": "Obter Contas",
"Get your monthly budget": "Obtenha seu orçamento mensal",
"Add a transaction": "Adicionar uma transação",
"Get your categories": "Obtenha suas categorias",
"Get your accounts": "Obtenha suas contas",
"Month": "Mês",
"Year": "ano",
"Account ID": "ID da Conta",
"Date": "Encontro",
"Payee Name": "Nome do beneficiário",
"Amount": "Quantidade",
"Category ID": "ID da Categoria",
"Notes": "Observações",
"Imported ID": "ID importado",
"Transfer ID": "ID de transferência",
"Cleared": "Apagado",
"Imported Payee": "Favorecido Importado",
"Transactions": "Transações",
"The month of the budget you want to get": "O mês do orçamento que você deseja obter",
"The year of the budget you want to get": "O ano do orçamento que você quer obter",
"ID of the account you want to import a transaction to": "ID da conta da qual você deseja importar uma transação para",
"Date the transaction took place": "Data em que a transação foi realizada",
"Name of the payee": "Nome do beneficiário",
"The dollar value of the transaction": "O valor em dólar da transação",
"ID of the transaction category": "ID da categoria de transação",
"Additional notes about the transaction": "Anotações adicionais sobre a transação",
"Unique ID given by the bank for importing": "ID único fornecido pelo banco para importar",
"ID of the transaction in the other account for the transfer": "ID da transação na outra conta para a transferência",
"Flag indicating if the transaction has cleared or not": "Bandeira indicando se a transação foi liquidada ou não",
"Raw description when importing, representing the original value": "Descrição Bruta ao importar, representando o valor original",
"A json array of the transaction object": "Um array JSON do objeto de transação",
"January": "janeiro",
"February": "fevereiro",
"March": "março",
"April": "abril",
"May": "maio",
"June": "junho",
"July": "julho",
"August": "agosto",
"September": "setembro",
"October": "outubro",
"November": "novembro",
"December": "dezembro"
}

View File

@@ -0,0 +1,76 @@
{
"2015": "2015",
"2016": "2016",
"2017": "2017",
"2018": "2018",
"2019": "2019",
"2020": "2020",
"2021": "2021",
"2022": "2022",
"2023": "2023",
"2024": "2024",
"2025": "2025",
"2026": "2026",
"2027": "2027",
"2028": "2028",
"2029": "2029",
"2030": "2030",
"Actual Budget": "Фактический бюджет",
"Personal finance app": "Личное финансовое приложение",
"Server URL": "URL сервера",
"Password": "Пароль",
"Sync ID": "Синхр. ID",
"End-to-end encryption password": "Конечный пароль шифрования",
"This is the URL of your running server": "Это URL вашего запущенного сервера",
"This is the password you use to log into the server": "Пароль для входа на сервер",
"This is the ID from Settings → Show advanced settings → Sync ID": "Это ID из настроек → Показать расширенные настройки → Sync ID",
"if you have end-to-end encryption enabled": "если у вас включено сквозное шифрование",
"Enter authentication details": "Введите данные проверки подлинности",
"Get Budget": "Получить бюджет",
"Import Transaction": "Импорт транзакции",
"Import Transactions": "Импорт проводок",
"Get Categories": "Получить категории",
"Get Accounts": "Получить аккаунты",
"Get your monthly budget": "Получите свой ежемесячный бюджет",
"Add a transaction": "Добавить транзакцию",
"Get your categories": "Получите свои категории",
"Get your accounts": "Получить аккаунты",
"Month": "Месяц",
"Year": "Год",
"Account ID": "ID клиента",
"Date": "Дата",
"Payee Name": "Имя получателя",
"Amount": "Сумма",
"Category ID": "ID категории",
"Notes": "Примечания",
"Imported ID": "Импортированный ID",
"Transfer ID": "ID перевода",
"Cleared": "Очищено",
"Imported Payee": "Импортированный получатель",
"Transactions": "Транзакции",
"The month of the budget you want to get": "Месяц бюджета, который вы хотите получить",
"The year of the budget you want to get": "Год бюджета, который вы хотите получить",
"ID of the account you want to import a transaction to": "ID аккаунта, который вы хотите импортировать транзакцию в",
"Date the transaction took place": "Дата проведения транзакции",
"Name of the payee": "Имя получателя",
"The dollar value of the transaction": "Долговая стоимость транзакции",
"ID of the transaction category": "ID категории транзакций",
"Additional notes about the transaction": "Дополнительные заметки о транзакции",
"Unique ID given by the bank for importing": "Уникальный идентификатор, присвоенный банком для импорта",
"ID of the transaction in the other account for the transfer": "ID транзакции на другом счете для перевода",
"Flag indicating if the transaction has cleared or not": "Флаг, указывающий, если транзакция очищена или нет",
"Raw description when importing, representing the original value": "Исходное описание при импорте, представляющее оригинальное значение",
"A json array of the transaction object": "Json массив объекта транзакции",
"January": "Январь",
"February": "Февраль",
"March": "Март",
"April": "Апрель",
"May": "Май",
"June": "Июнь",
"July": "Июль",
"August": "Август",
"September": "Сентябрь",
"October": "Октябрь",
"November": "Ноябрь",
"December": "Декабрь"
}

View File

@@ -0,0 +1,75 @@
{
"2015": "2015",
"2016": "2016",
"2017": "2017",
"2018": "2018",
"2019": "2019",
"2020": "2020",
"2021": "2021",
"2022": "2022",
"2023": "2023",
"2024": "2024",
"2025": "2025",
"2026": "2026",
"2027": "2027",
"2028": "2028",
"2029": "2029",
"2030": "2030",
"Personal finance app": "Personal finance app",
"Server URL": "Server URL",
"Password": "Password",
"Sync ID": "Sync ID",
"End-to-end encryption password": "End-to-end encryption password",
"This is the URL of your running server": "This is the URL of your running server",
"This is the password you use to log into the server": "This is the password you use to log into the server",
"This is the ID from Settings → Show advanced settings → Sync ID": "This is the ID from Settings → Show advanced settings → Sync ID",
"if you have end-to-end encryption enabled": "if you have end-to-end encryption enabled",
"Enter authentication details": "Enter authentication details",
"Get Budget": "Get Budget",
"Import Transaction": "Import Transaction",
"Import Transactions": "Import Transactions",
"Get Categories": "Get Categories",
"Get Accounts": "Get Accounts",
"Get your monthly budget": "Get your monthly budget",
"Add a transaction": "Add a transaction",
"Get your categories": "Get your categories",
"Get your accounts": "Get your accounts",
"Month": "Month",
"Year": "Year",
"Account ID": "Account ID",
"Date": "Date",
"Payee Name": "Payee Name",
"Amount": "Amount",
"Category ID": "Category ID",
"Notes": "Notes",
"Imported ID": "Imported ID",
"Transfer ID": "Transfer ID",
"Cleared": "Cleared",
"Imported Payee": "Imported Payee",
"Transactions": "Transactions",
"The month of the budget you want to get": "The month of the budget you want to get",
"The year of the budget you want to get": "The year of the budget you want to get",
"ID of the account you want to import a transaction to": "ID of the account you want to import a transaction to",
"Date the transaction took place": "Date the transaction took place",
"Name of the payee": "Name of the payee",
"The dollar value of the transaction": "The dollar value of the transaction",
"ID of the transaction category": "ID of the transaction category",
"Additional notes about the transaction": "Additional notes about the transaction",
"Unique ID given by the bank for importing": "Unique ID given by the bank for importing",
"ID of the transaction in the other account for the transfer": "ID of the transaction in the other account for the transfer",
"Flag indicating if the transaction has cleared or not": "Flag indicating if the transaction has cleared or not",
"Raw description when importing, representing the original value": "Raw description when importing, representing the original value",
"A json array of the transaction object": "A json array of the transaction object",
"January": "January",
"February": "February",
"March": "March",
"April": "April",
"May": "May",
"June": "June",
"July": "July",
"August": "August",
"September": "September",
"October": "October",
"November": "November",
"December": "December"
}

View File

@@ -0,0 +1,76 @@
{
"2015": "2015",
"2016": "2016",
"2017": "2017",
"2018": "2018",
"2019": "2019",
"2020": "2020",
"2021": "2021",
"2022": "2022",
"2023": "2023",
"2024": "2024",
"2025": "2025",
"2026": "2026",
"2027": "2027",
"2028": "2028",
"2029": "2029",
"2030": "2030",
"Actual Budget": "Actual Budget",
"Personal finance app": "Personal finance app",
"Server URL": "Server URL",
"Password": "Password",
"Sync ID": "Sync ID",
"End-to-end encryption password": "End-to-end encryption password",
"This is the URL of your running server": "This is the URL of your running server",
"This is the password you use to log into the server": "This is the password you use to log into the server",
"This is the ID from Settings → Show advanced settings → Sync ID": "This is the ID from Settings → Show advanced settings → Sync ID",
"if you have end-to-end encryption enabled": "if you have end-to-end encryption enabled",
"Enter authentication details": "Enter authentication details",
"Get Budget": "Get Budget",
"Import Transaction": "Import Transaction",
"Import Transactions": "Import Transactions",
"Get Categories": "Get Categories",
"Get Accounts": "Get Accounts",
"Get your monthly budget": "Get your monthly budget",
"Add a transaction": "Add a transaction",
"Get your categories": "Get your categories",
"Get your accounts": "Get your accounts",
"Month": "Month",
"Year": "Year",
"Account ID": "Account ID",
"Date": "Date",
"Payee Name": "Payee Name",
"Amount": "Amount",
"Category ID": "Category ID",
"Notes": "Notes",
"Imported ID": "Imported ID",
"Transfer ID": "Transfer ID",
"Cleared": "Cleared",
"Imported Payee": "Imported Payee",
"Transactions": "Transactions",
"The month of the budget you want to get": "The month of the budget you want to get",
"The year of the budget you want to get": "The year of the budget you want to get",
"ID of the account you want to import a transaction to": "ID of the account you want to import a transaction to",
"Date the transaction took place": "Date the transaction took place",
"Name of the payee": "Name of the payee",
"The dollar value of the transaction": "The dollar value of the transaction",
"ID of the transaction category": "ID of the transaction category",
"Additional notes about the transaction": "Additional notes about the transaction",
"Unique ID given by the bank for importing": "Unique ID given by the bank for importing",
"ID of the transaction in the other account for the transfer": "ID of the transaction in the other account for the transfer",
"Flag indicating if the transaction has cleared or not": "Flag indicating if the transaction has cleared or not",
"Raw description when importing, representing the original value": "Raw description when importing, representing the original value",
"A json array of the transaction object": "A json array of the transaction object",
"January": "January",
"February": "February",
"March": "March",
"April": "April",
"May": "May",
"June": "June",
"July": "July",
"August": "August",
"September": "September",
"October": "October",
"November": "November",
"December": "December"
}

View File

@@ -0,0 +1,75 @@
{
"2015": "2015",
"2016": "2016",
"2017": "2017",
"2018": "2018",
"2019": "2019",
"2020": "2020",
"2021": "2021",
"2022": "2022",
"2023": "2023",
"2024": "2024",
"2025": "2025",
"2026": "2026",
"2027": "2027",
"2028": "2028",
"2029": "2029",
"2030": "2030",
"Personal finance app": "Personal finance app",
"Server URL": "服务器 URL",
"Password": "密码",
"Sync ID": "Sync ID",
"End-to-end encryption password": "End-to-end encryption password",
"This is the URL of your running server": "This is the URL of your running server",
"This is the password you use to log into the server": "This is the password you use to log into the server",
"This is the ID from Settings → Show advanced settings → Sync ID": "This is the ID from Settings → Show advanced settings → Sync ID",
"if you have end-to-end encryption enabled": "if you have end-to-end encryption enabled",
"Enter authentication details": "Enter authentication details",
"Get Budget": "Get Budget",
"Import Transaction": "Import Transaction",
"Import Transactions": "Import Transactions",
"Get Categories": "Get Categories",
"Get Accounts": "Get Accounts",
"Get your monthly budget": "Get your monthly budget",
"Add a transaction": "Add a transaction",
"Get your categories": "Get your categories",
"Get your accounts": "Get your accounts",
"Month": "Month",
"Year": "Year",
"Account ID": "Account ID",
"Date": "Date",
"Payee Name": "Payee Name",
"Amount": "Amount",
"Category ID": "Category ID",
"Notes": "Notes",
"Imported ID": "Imported ID",
"Transfer ID": "Transfer ID",
"Cleared": "Cleared",
"Imported Payee": "Imported Payee",
"Transactions": "Transactions",
"The month of the budget you want to get": "The month of the budget you want to get",
"The year of the budget you want to get": "The year of the budget you want to get",
"ID of the account you want to import a transaction to": "ID of the account you want to import a transaction to",
"Date the transaction took place": "Date the transaction took place",
"Name of the payee": "Name of the payee",
"The dollar value of the transaction": "The dollar value of the transaction",
"ID of the transaction category": "ID of the transaction category",
"Additional notes about the transaction": "Additional notes about the transaction",
"Unique ID given by the bank for importing": "Unique ID given by the bank for importing",
"ID of the transaction in the other account for the transfer": "ID of the transaction in the other account for the transfer",
"Flag indicating if the transaction has cleared or not": "Flag indicating if the transaction has cleared or not",
"Raw description when importing, representing the original value": "Raw description when importing, representing the original value",
"A json array of the transaction object": "A json array of the transaction object",
"January": "January",
"February": "February",
"March": "March",
"April": "April",
"May": "May",
"June": "June",
"July": "July",
"August": "August",
"September": "September",
"October": "October",
"November": "November",
"December": "December"
}

View File

@@ -0,0 +1,58 @@
import {
createPiece,
PieceAuth,
Property,
} from '@activepieces/pieces-framework';
import { getBudget } from './lib/actions/get-budget';
import { importTransaction } from './lib/actions/import-transaction';
import { getCategories } from './lib/actions/get-categories';
import { importTransactions } from './lib/actions/import-transactions';
import { getAccounts } from './lib/actions/get-accounts';
import { PieceCategory } from '@activepieces/shared';
export const actualBudgetAuth = PieceAuth.CustomAuth({
description: 'Enter authentication details',
props: {
server_url: Property.ShortText({
displayName: 'Server URL',
description: 'This is the URL of your running server',
required: true,
}),
password: PieceAuth.SecretText({
displayName: 'Password',
description: 'This is the password you use to log into the server',
required: true,
}),
sync_id: PieceAuth.SecretText({
displayName: 'Sync ID',
description:
'This is the ID from Settings → Show advanced settings → Sync ID',
required: true,
}),
encryption_password: PieceAuth.SecretText({
displayName: 'End-to-end encryption password',
description: 'if you have end-to-end encryption enabled',
required: false,
}),
},
required: true,
});
export const actualbudget = createPiece({
displayName: 'Actual Budget',
description: 'Personal finance app',
auth: actualBudgetAuth,
minimumSupportedRelease: '0.30.0',
logoUrl: 'https://cdn.activepieces.com/pieces/actualbudget.png',
categories: [PieceCategory.ACCOUNTING],
authors: ['hugh-codes'],
actions: [
getBudget,
importTransaction,
importTransactions,
getCategories,
getAccounts,
],
triggers: [],
});

View File

@@ -0,0 +1,19 @@
import { actualBudgetAuth } from '../..';
import { createAction } from '@activepieces/pieces-framework';
import * as api from '@actual-app/api';
import { initializeAndDownloadBudget } from '../common/common';
export const getAccounts = createAction({
auth: actualBudgetAuth,
name: 'get_accounts',
displayName: 'Get Accounts',
description: 'Get your accounts',
props: {},
async run(context) {
await initializeAndDownloadBudget(api, context.auth.props)
const accounts = await api.getAccounts();
await api.shutdown();
return accounts;
},
});

View File

@@ -0,0 +1,36 @@
import { actualBudgetAuth } from '../..';
import { Property, createAction } from '@activepieces/pieces-framework';
import * as api from '@actual-app/api';
import { getMonths, getYears, initializeAndDownloadBudget } from '../common/common';
export const getBudget = createAction({
auth: actualBudgetAuth,
name: 'get_budget',
displayName: 'Get Budget',
description: 'Get your monthly budget',
props: {
month: Property.StaticDropdown({
displayName: 'Month',
description: 'The month of the budget you want to get',
required: true,
options: {
options: getMonths()
}
}),
year: Property.StaticDropdown({
displayName: 'Year',
description: 'The year of the budget you want to get',
required: true,
options: {
options: getYears()
}
})
},
async run(context) {
await initializeAndDownloadBudget(api, context.auth.props)
const budget = await api.getBudgetMonth(`${context.propsValue.year}-${context.propsValue.month}`);
await api.shutdown();
return budget;
},
});

View File

@@ -0,0 +1,19 @@
import { actualBudgetAuth } from '../..';
import { createAction } from '@activepieces/pieces-framework';
import * as api from '@actual-app/api';
import { initializeAndDownloadBudget } from '../common/common';
export const getCategories = createAction({
auth: actualBudgetAuth,
name: 'get_categories',
displayName: 'Get Categories',
description: 'Get your categories',
props: {},
async run(context) {
await initializeAndDownloadBudget(api, context.auth.props)
const categories = await api.getCategories();
await api.shutdown();
return categories;
},
});

View File

@@ -0,0 +1,90 @@
import { actualBudgetAuth } from '../..';
import {
Property,
createAction,
} from '@activepieces/pieces-framework';
import { Transaction } from '../common/models';
import * as api from '@actual-app/api';
import { initializeAndDownloadBudget } from '../common/common';
export const importTransaction = createAction({
auth: actualBudgetAuth,
name: 'import_transaction',
displayName: 'Import Transaction',
description: 'Add a transaction',
props: {
account_id: Property.ShortText({
displayName: 'Account ID',
description: 'ID of the account you want to import a transaction to',
required: true,
}),
date: Property.DateTime({
displayName: 'Date',
description: 'Date the transaction took place',
required: true,
}),
payee_name: Property.ShortText({
displayName: 'Payee Name',
description: 'Name of the payee',
required: false,
}),
amount: Property.Number({
displayName: 'Amount',
description: 'The dollar value of the transaction',
required: false,
}),
category: Property.ShortText({
displayName: 'Category ID',
description: 'ID of the transaction category',
required: false,
}),
notes: Property.LongText({
displayName: 'Notes',
description: 'Additional notes about the transaction',
required: false,
}),
imported_id: Property.ShortText({
displayName: 'Imported ID',
description: 'Unique ID given by the bank for importing',
required: false,
}),
transfer_id: Property.ShortText({
displayName: 'Transfer ID',
description: 'ID of the transaction in the other account for the transfer',
required: false,
}),
cleared: Property.Checkbox({
displayName: 'Cleared',
description: 'Flag indicating if the transaction has cleared or not',
required: false,
}),
imported_payee: Property.ShortText({
displayName: 'Imported Payee',
description: 'Raw description when importing, representing the original value',
required: false,
}),
},
async run({ auth, propsValue: { account_id, payee_name, date, amount, category, notes, imported_id, transfer_id, cleared, imported_payee } }) {
const formattedDate = new Date(date).toISOString().split('T')[0];
const transaction: Transaction = {
payee_name,
date: formattedDate,
amount: amount !== undefined ? api.utils.amountToInteger(amount): undefined,
category,
account: account_id,
notes,
imported_id,
transfer_id,
cleared,
imported_payee,
};
await initializeAndDownloadBudget(api, auth.props)
const res = await api.importTransactions(account_id,[transaction]);
await api.shutdown();
return res;
},
});

View File

@@ -0,0 +1,31 @@
import { actualBudgetAuth } from '../..';
import { Property, createAction } from '@activepieces/pieces-framework';
import * as api from '@actual-app/api';
import { initializeAndDownloadBudget } from '../common/common';
export const importTransactions = createAction({
auth: actualBudgetAuth,
name: 'import_transactions',
displayName: 'Import Transactions',
description: 'Import Transactions',
props: {
account_id: Property.ShortText({
displayName: 'Account ID',
description: 'ID of the account you want to import a transaction to',
required: true,
}),
transactions: Property.Json({
displayName: 'Transactions',
description: 'A json array of the transaction object',
required: true,
defaultValue: [{"payee_name": "Kroger", "date": "2026-12-25", "amount": 1200 }]
})
},
async run({ auth, propsValue: { account_id, transactions } }) {
await initializeAndDownloadBudget(api, auth.props)
const res = await api.importTransactions(account_id, transactions);
await api.shutdown();
return res;
},
});

View File

@@ -0,0 +1,80 @@
import { DropdownOption } from '@activepieces/pieces-framework';
import os from 'os';
export async function initializeAndDownloadBudget(api: any, auth: any): Promise<void> {
await api.init({
// Budget data will be cached locally here, in subdirectories for each file.
dataDir: os.tmpdir(),
serverURL: auth.server_url,
password: auth.password,
});
await api.downloadBudget(auth.sync_id, { password: auth.encryption_password ?? undefined });
}
export function getYears(): DropdownOption<string>[] {
const dropDownOptions: DropdownOption<string>[] = [];
const currentDate = new Date();
const currentYear = currentDate.getFullYear();
const startYear = currentYear-10;
for (let year = startYear; year <= currentYear + 5; year++) {
dropDownOptions.push({ label: year.toString(), value: year.toString() });
}
return dropDownOptions;
}
export function getMonths(): DropdownOption<string>[] {
return [
{
label: 'January',
value: '01'
},
{
label: 'February',
value: '02'
},
{
label: 'March',
value: '03'
},
{
label: 'April',
value: '04'
},
{
label: 'May',
value: '05'
},
{
label: 'June',
value: '06'
},
{
label: 'July',
value: '07'
},
{
label: 'August',
value: '08'
},
{
label: 'September',
value: '09'
},
{
label: 'October',
value: '10'
},
{
label: 'November',
value: '11'
},
{
label: 'December',
value: '12'
}
]
}

View File

@@ -0,0 +1,15 @@
export interface Transaction {
id?: string;
account?: string;
date: string;
amount?: number;
payee?: string;
payee_name?: string; // Only available in a create request
imported_payee?: string;
category?: string;
notes?: string;
imported_id?: string;
transfer_id?: string;
cleared?: boolean;
}

View File

@@ -0,0 +1,19 @@
{
"extends": "../../../../tsconfig.base.json",
"compilerOptions": {
"module": "commonjs",
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitOverride": true,
"noPropertyAccessFromIndexSignature": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true
},
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
}
]
}

View File

@@ -0,0 +1,11 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"module": "commonjs",
"outDir": "../../../../dist/out-tsc",
"declaration": true,
"types": ["node"]
},
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"],
"include": ["src/**/*.ts"]
}

View File

@@ -0,0 +1,33 @@
{
"extends": [
"../../../../.eslintrc.base.json"
],
"ignorePatterns": [
"!**/*"
],
"overrides": [
{
"files": [
"*.ts",
"*.tsx",
"*.js",
"*.jsx"
],
"rules": {}
},
{
"files": [
"*.ts",
"*.tsx"
],
"rules": {}
},
{
"files": [
"*.js",
"*.jsx"
],
"rules": {}
}
]
}

View File

@@ -0,0 +1,7 @@
# pieces-acuity-scheduling
This library was generated with [Nx](https://nx.dev).
## Building
Run `nx build pieces-acuity-scheduling` to build the library.

View File

@@ -0,0 +1,4 @@
{
"name": "@activepieces/piece-acuity-scheduling",
"version": "0.0.7"
}

View File

@@ -0,0 +1,65 @@
{
"name": "pieces-acuity-scheduling",
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "packages/pieces/community/acuity-scheduling/src",
"projectType": "library",
"release": {
"version": {
"currentVersionResolver": "git-tag",
"preserveLocalDependencyProtocols": false,
"manifestRootsToUpdate": [
"dist/{projectRoot}"
]
}
},
"tags": [],
"targets": {
"build": {
"executor": "@nx/js:tsc",
"outputs": [
"{options.outputPath}"
],
"options": {
"outputPath": "dist/packages/pieces/community/acuity-scheduling",
"tsConfig": "packages/pieces/community/acuity-scheduling/tsconfig.lib.json",
"packageJson": "packages/pieces/community/acuity-scheduling/package.json",
"main": "packages/pieces/community/acuity-scheduling/src/index.ts",
"assets": [
"packages/pieces/community/acuity-scheduling/*.md",
{
"input": "packages/pieces/community/acuity-scheduling/src/i18n",
"output": "./src/i18n",
"glob": "**/!(i18n.json)"
}
],
"buildableProjectDepsInPackageJsonType": "dependencies",
"updateBuildableProjectDepsInPackageJson": true
},
"dependsOn": [
"^build",
"prebuild"
]
},
"nx-release-publish": {
"options": {
"packageRoot": "dist/{projectRoot}"
}
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": [
"{options.outputFile}"
]
},
"prebuild": {
"executor": "nx:run-commands",
"options": {
"cwd": "packages/pieces/community/acuity-scheduling",
"command": "bun install --no-save --silent"
},
"dependsOn": [
"^build"
]
}
}
}

View File

@@ -0,0 +1,130 @@
{
"Add Blocked Off Time": "Blockierte Auslaufzeit hinzufügen",
"Create Appointment": "Termin erstellen",
"Create Client": "Kunde erstellen",
"Reschedule Appointment": "Termin neu planen",
"Update Client": "Kunde aktualisieren",
"Find Appointment(s)": "Termin finden(n)",
"Find Client": "Kunde finden",
"Custom API Call": "Eigener API-Aufruf",
"Block off a specific time range on a calendar.": "Einen bestimmten Zeitbereich auf einem Kalender sperren.",
"Creates a new appointment.": "Erstellt einen neuen Termin.",
"Creates a new client.": "Erstellt einen neuen Client.",
"Reschedules an existing appointment to a new date/time.": "Ändert einen bestehenden Termin zu einem neuen Datum/Zeitpunkt.",
"Updates an existing client.": "Aktualisiert einen bestehenden Client.",
"Find appointments based on various criteria, including client information.": "Finden Sie Termine basierend auf verschiedenen Kriterien, einschließlich Kundeninformationen.",
"Finds client based on seach term.": "Findet Client basierend auf Suchbegriff.",
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
"Start Time": "Startzeit",
"End Time": "Endzeit",
"Calendar ID": "Kalender-ID",
"Notes": "Notizen",
"DateTime": "Datumszeit",
"Appointment Type": "Termin-Typ",
"First Name": "Vorname",
"Last Name": "Nachname",
"Email": "E-Mail",
"Phone": "Telefon",
"Timezone": "Timezone",
"Book as Admin": "Als Admin buchen",
"Suppress Confirmation Email/SMS": "E-Mail/SMS unterdrücken",
"Certificate Code": "Zertifikatscode",
"SMS Opt-In": "SMS Opt-In",
"Addons": "Addons",
"Label": "Label",
"Appointment ID": "Termin-ID",
"New Calendar ID": "Neue Kalender-ID",
"Reschedule as Admin": "Als Admin neu planen",
"Suppress Rescheduling Email/SMS": "Unterdrücken Sie Umschichtung von E-Mail/SMS",
"Current First Name (Identifier)": "Aktueller Vorname (Bezeichner)",
"Current Last Name (Identifier)": "Aktueller Nachname (Bezeichner)",
"Current Phone (Identifier, Optional)": "Aktuelles Telefon (Identifikator, Optional)",
"New First Name": "Neuer Vorname",
"New Last Name": "Neuer Nachname",
"New Email": "Neue E-Mail",
"New Phone": "Neues Telefon",
"New Notes": "Neue Notizen",
"Client First Name": "Vorname des Kunden",
"Client Last Name": "Nachname des Kunden",
"Client Email": "Kunden-E-Mail",
"Client Phone": "Klienten-Telefon",
"Min Date": "Min. Datum",
"Max Date": "Max. Datum",
"Appointment Status": "Terminstatus",
"Max Results": "Maximale Ergebnisse",
"Sort Direction": "Sortierrichtung",
"Search Term": "Suchbegriff",
"Method": "Methode",
"Headers": "Kopfzeilen",
"Query Parameters": "Abfrageparameter",
"Body": "Körper",
"Response is Binary ?": "Antwort ist binär?",
"No Error on Failure": "Kein Fehler bei Fehler",
"Timeout (in seconds)": "Timeout (in Sekunden)",
"The start date and time for the block (ISO 8601 format).": "Das Startdatum und die Uhrzeit für den Block (ISO 8601 Format).",
"The end date and time for the block (ISO 8601 format).": "Das Enddatum und die Uhrzeit für den Block (ISO 8601 Format).",
"The numeric ID of the calendar to add this block to.": "Die numerische ID des Kalenders, der diesen Block hinzufügen soll.",
"Optional notes for the blocked off time.": "Optionale Notizen für die gesperrte Zeit.",
"Date and time of the appointment.": "Datum und Uhrzeit des Termins.",
"Select the type of appointment.": "Wählen Sie den Typ des Termins.",
"Client's first name.": "Vorname des Kunden.",
"Client's last name.": "Nachname des Kunden.",
"Client's email address. (Optional if booking as admin).": "E-Mail-Adresse des Kunden (Optional bei der Buchung als Admin).",
"Client's phone number.": "Telefonnummer des Kunden.",
"Client's timezone (e.g., America/New_York). Required for accurate availability checking.": "Zeitzone des Kunden (z. B. America/New_York).",
"Set to true to book as an admin. Disables availability/attribute validations, allows setting notes, and makes Calendar ID required.": "Auf true setzen, um als Admin zu buchen. Deaktiviert Verfügbarkeit/Attribut-Validierungen, erlaubt die Einstellung von Notizen und macht Kalender-ID erforderlich.",
"Numeric ID of the calendar. Required if booking as admin. If not provided, Acuity tries to find an available calendar automatically for non-admin bookings.": "Numerische ID des Kalenders. Benötigt bei der Buchung als Administrator. Wenn nicht angegeben, versucht Acuity automatisch einen verfügbaren Kalender für Nicht-Administrator-Buchungen zu finden.",
"If true, confirmation emails or SMS will not be sent.": "Wenn dies wahr ist, werden Bestätigungs-E-Mails oder SMS nicht gesendet.",
"Package or coupon certificate code.": "Paket- oder Gutschein-Zertifikatscode.",
"Appointment notes. Only settable if booking as admin.": "Terminhinweise. Nur bei Buchung als Administrator zu vereinbaren.",
"Indicates whether the client has explicitly given permission to receive SMS messages.": "Gibt an, ob der Client explizit die Erlaubnis zum Empfang von SMS-Nachrichten erteilt hat.",
"Select addons for the appointment. Addons are filtered by selected Appointment Type if available.": "Wählen Sie Addons für den Termin. Addons werden nach dem ausgewählten Termin-Typ gefiltert, falls verfügbar.",
"Apply a label to the appointment. The API currently supports one label.": "Wenden Sie ein Label für den Termin an. Die API unterstützt derzeit ein Label.",
"Client's email address.": "E-Mail-Adresse des Kunden.",
"Notes about the client.": "Hinweise zum Client.",
"The ID of the appointment to reschedule.": "Die ID des Termins zu verschieben.",
"Select the type of appointment (used for finding new available slots).": "Wählen Sie die Art des Termins (verwendet um neue verfügbare Plätze zu finden).",
"New Date and time of the appointment.": "Neues Datum und Uhrzeit des Termins.",
"Client's timezone (e.g., America/New_York).": "Zeitzone des Kunden (z.B. Amerika/New_York).",
"Numeric ID of the new calendar to reschedule to. If blank, stays on current calendar. Submit 0 to auto-assign.": "Numerische ID des neuen Kalenders, der neu festgelegt werden soll. Falls leer, bleibt der aktuelle Kalender. Geben Sie 0 automatisch zu.",
"Set to true to reschedule as an admin. Disables availability validations.": "Auf true setzen um als Admin neu zu planen. Deaktiviert Verfügbarkeitsprüfungen.",
"If true, rescheduling emails or SMS will not be sent.": "Falls aktiviert, werden E-Mails oder SMS nicht neu konfiguriert.",
"The current first name of the client to update.": "Der aktuelle Vorname des zu aktualisierenden Clients.",
"The current last name of the client to update.": "Der aktuelle Nachname des zu aktualisierenden Clients.",
"The current phone number of the client to update. Helps identify the client if names are not unique.": "Die aktuelle Telefonnummer des zu aktualisierenden Clients. Hilft den Client zu identifizieren, wenn Namen nicht eindeutig sind.",
"Client's new first name. Leave blank to keep current.": "Neuer Vorname des Kunden. Leer lassen, um aktuell zu bleiben.",
"Client's new last name. Leave blank to keep current.": "Neuer Nachname des Kunden. Leer lassen, um aktuell zu bleiben.",
"Client's new email address. Leave blank to keep current.": "Neue E-Mail-Adresse des Client. Leer lassen um aktuell zu bleiben.",
"Client's new phone number. Leave blank to keep current.": "Neue Telefonnummer des Client. Leer lassen, um aktuell zu bleiben.",
"New notes about the client. Leave blank to keep current.": "Neue Notizen über den Client. Leer lassen, um aktuell zu bleiben.",
"Filter appointments by client first name.": "Termine nach Kunden-Vornamen filtern.",
"Filter appointments by client last name.": "Termine nach KundenNachnamen filtern.",
"Filter appointments by client e-mail address.": "Termine nach Kunden-E-Mail-Adresse filtern.",
"Filter appointments by client phone number. URL encode '+' if using country codes (e.g., %2B1234567890).": "Filter Termine nach Client-Telefonnummer. URL-Code '+' bei Verwendung von Ländercodes (z.B. %2B1234567890).",
"Only get appointments on or after this date.": "Erhalten Sie nur Termine am oder nach diesem Datum.",
"Only get appointments on or before this date.": "Erhalten Sie nur Termine vor oder vor diesem Datum.",
"Show only appointments on the calendar with this ID.": "Nur Termine im Kalender mit dieser ID anzeigen.",
"Show only appointments of this type.": "Nur Termine dieses Typs anzeigen.",
"Filter by appointment status.": "Nach Terminstatus filtern.",
"Maximum number of results to return (default 100).": "Maximale Anzahl der zurückzugebenden Ergebnisse (Standard 100).",
"Sort direction for the results.": "Sortiere Richtung für die Ergebnisse.",
"Filter client list by first name, last name, or phone number.": "Clientliste nach Vorname, Nachname oder Telefonnummer filtern.",
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
"Scheduled": "Geplant",
"Canceled": "Abgebrochen",
"All (Scheduled & Canceled)": "Alle (geplant & abgebrochen)",
"Descending (DESC)": "Absteigend (DESC)",
"Ascending (ASC)": "Aufsteigend (ASC)",
"GET": "ERHALTEN",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "LÖSCHEN",
"HEAD": "HEAD",
"Appointment Canceled": "Termin abgebrochen",
"New Appointment": "Neuer Termin",
"Triggers when an appointment is canceled.": "Wird ausgelöst, wenn ein Termin storniert wird.",
"Triggers when a new appointment is scheduled.": "Wird ausgelöst, wenn ein neuer Termin geplant ist.",
"Calendar": "Kalender"
}

View File

@@ -0,0 +1,130 @@
{
"Add Blocked Off Time": "Añadir Tiempo de Apagado",
"Create Appointment": "Crear cita",
"Create Client": "Crear cliente",
"Reschedule Appointment": "Reprogramar cita",
"Update Client": "Actualizar cliente",
"Find Appointment(s)": "Buscar cita(s)",
"Find Client": "Buscar cliente",
"Custom API Call": "Llamada API personalizada",
"Block off a specific time range on a calendar.": "Bloquear un intervalo de tiempo específico en un calendario.",
"Creates a new appointment.": "Crea una nueva cita.",
"Creates a new client.": "Crea un nuevo cliente.",
"Reschedules an existing appointment to a new date/time.": "Reprogramar una cita existente a una nueva fecha/hora.",
"Updates an existing client.": "Actualiza un cliente existente.",
"Find appointments based on various criteria, including client information.": "Encuentre citas basadas en varios criterios, incluida la información del cliente.",
"Finds client based on seach term.": "Encuentra el cliente basado en el término \"seach\".",
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
"Start Time": "Hora de inicio",
"End Time": "Hora de fin",
"Calendar ID": "ID de Calendario",
"Notes": "Notas",
"DateTime": "Fecha y hora",
"Appointment Type": "Tipo de cita",
"First Name": "Nombre",
"Last Name": "Apellido",
"Email": "E-mail",
"Phone": "Teléfono",
"Timezone": "Timezone",
"Book as Admin": "Reservar como administrador",
"Suppress Confirmation Email/SMS": "Suprimir email de confirmación/SMS",
"Certificate Code": "Código de certificación",
"SMS Opt-In": "SMS opt-In",
"Addons": "Addons",
"Label": "Etiqueta",
"Appointment ID": "ID de cita",
"New Calendar ID": "Nuevo ID de calendario",
"Reschedule as Admin": "Reprogramar como administrador",
"Suppress Rescheduling Email/SMS": "Suprimir reprogramación de correo electrónico/SMS",
"Current First Name (Identifier)": "Nombre actual (identificador)",
"Current Last Name (Identifier)": "Apellido actual (identificador)",
"Current Phone (Identifier, Optional)": "Teléfono actual (identificador, opcional)",
"New First Name": "Nuevo Nombre",
"New Last Name": "Nuevo Apellido",
"New Email": "Nuevo Email",
"New Phone": "Nuevo Teléfono",
"New Notes": "Nuevas Notas",
"Client First Name": "Nombre del cliente",
"Client Last Name": "Apellido del cliente",
"Client Email": "Email del cliente",
"Client Phone": "Teléfono cliente",
"Min Date": "Fecha mínima",
"Max Date": "Fecha máxima",
"Appointment Status": "Estado de la cita",
"Max Results": "Resultados máximos",
"Sort Direction": "Ordenar dirección",
"Search Term": "Buscar término",
"Method": "Método",
"Headers": "Encabezados",
"Query Parameters": "Parámetros de consulta",
"Body": "Cuerpo",
"Response is Binary ?": "¿Respuesta es binaria?",
"No Error on Failure": "No hay ningún error en fallo",
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
"The start date and time for the block (ISO 8601 format).": "Fecha y hora de inicio para el bloque (formato ISO 8601).",
"The end date and time for the block (ISO 8601 format).": "Fecha y hora de fin del bloque (formato ISO 8601).",
"The numeric ID of the calendar to add this block to.": "El ID numérico del calendario al que añadir este bloque.",
"Optional notes for the blocked off time.": "Notas opcionales para el tiempo de apagado bloqueado.",
"Date and time of the appointment.": "Fecha y hora de la cita.",
"Select the type of appointment.": "Seleccione el tipo de cita.",
"Client's first name.": "Nombre del cliente.",
"Client's last name.": "Apellido del cliente.",
"Client's email address. (Optional if booking as admin).": "Dirección de correo electrónico del cliente. (Opcional si reserva como administrador).",
"Client's phone number.": "Número de teléfono del cliente.",
"Client's timezone (e.g., America/New_York). Required for accurate availability checking.": "Zona horaria del cliente (por ej., América/Nuevo)). Requerida para comprobación precisa de la disponibilidad.",
"Set to true to book as an admin. Disables availability/attribute validations, allows setting notes, and makes Calendar ID required.": "Establecer como verdadero para reservar como administrador. Deshabilita las validaciones de disponibilidad/atributo, permite configurar notas y hace necesario el ID del calendario.",
"Numeric ID of the calendar. Required if booking as admin. If not provided, Acuity tries to find an available calendar automatically for non-admin bookings.": "ID numérico del calendario. Requerido si reserva como administrador. Si no se proporciona, Acuity intenta encontrar un calendario disponible automáticamente para las reservas no administrativas.",
"If true, confirmation emails or SMS will not be sent.": "Si es verdadero, los correos electrónicos de confirmación o SMS no serán enviados.",
"Package or coupon certificate code.": "Código de certificado de paquete o cupón.",
"Appointment notes. Only settable if booking as admin.": "Notas de cita. Sólo configurable si se reserva como administrador.",
"Indicates whether the client has explicitly given permission to receive SMS messages.": "Indica si el cliente ha dado permiso explícito para recibir mensajes SMS.",
"Select addons for the appointment. Addons are filtered by selected Appointment Type if available.": "Seleccione complementos para la cita. Los complementos son filtrados por el tipo de cita seleccionado si están disponibles.",
"Apply a label to the appointment. The API currently supports one label.": "Aplicar una etiqueta a la cita. La API actualmente soporta una etiqueta.",
"Client's email address.": "Dirección de correo electrónico del cliente.",
"Notes about the client.": "Notas sobre el cliente.",
"The ID of the appointment to reschedule.": "El ID de la cita para reprogramar.",
"Select the type of appointment (used for finding new available slots).": "Seleccione el tipo de cita (usado para encontrar nuevas ranuras disponibles).",
"New Date and time of the appointment.": "Nueva fecha y hora de la cita.",
"Client's timezone (e.g., America/New_York).": "Zona horaria del cliente (por ej., América/Nuevo_Parlamento).",
"Numeric ID of the new calendar to reschedule to. If blank, stays on current calendar. Submit 0 to auto-assign.": "ID numérico del nuevo calendario al que reprogramar. Si está en blanco, permanece en el calendario actual. Enviar 0 a auto-asignado.",
"Set to true to reschedule as an admin. Disables availability validations.": "Establecer como verdadero para reprogramar como administrador. Deshabilita validaciones de disponibilidad.",
"If true, rescheduling emails or SMS will not be sent.": "Si es verdadero, no se enviarán correos electrónicos o SMS de reprogramación.",
"The current first name of the client to update.": "El nombre actual del cliente a actualizar.",
"The current last name of the client to update.": "El apellido actual del cliente a actualizar.",
"The current phone number of the client to update. Helps identify the client if names are not unique.": "El número de teléfono actual del cliente a actualizar. Ayuda a identificar al cliente si los nombres no son únicos.",
"Client's new first name. Leave blank to keep current.": "Nombre nuevo del cliente. Dejar en blanco para mantener actualizado.",
"Client's new last name. Leave blank to keep current.": "Apellido del cliente. Deje en blanco para mantener actualizado.",
"Client's new email address. Leave blank to keep current.": "Dirección de correo electrónico del cliente. Déjalo en blanco para mantenerlo actualizado.",
"Client's new phone number. Leave blank to keep current.": "Nuevo número de teléfono del cliente. Déjalo en blanco para mantenerlo actualizado.",
"New notes about the client. Leave blank to keep current.": "Nuevas notas sobre el cliente. Dejar en blanco para mantener actualizado.",
"Filter appointments by client first name.": "Filtrar citas por nombre del cliente.",
"Filter appointments by client last name.": "Filtrar citas por apellidos del cliente.",
"Filter appointments by client e-mail address.": "Filtrar citas por dirección de correo electrónico del cliente.",
"Filter appointments by client phone number. URL encode '+' if using country codes (e.g., %2B1234567890).": "Filtrar citas por número de teléfono del cliente. URL codifica '+' si se utilizan códigos de país (por ejemplo, %2B1234567890).",
"Only get appointments on or after this date.": "Sólo obtener citas en o después de esta fecha.",
"Only get appointments on or before this date.": "Sólo obtener citas en o antes de esta fecha.",
"Show only appointments on the calendar with this ID.": "Mostrar sólo citas en el calendario con este ID.",
"Show only appointments of this type.": "Mostrar sólo citas de este tipo.",
"Filter by appointment status.": "Filtrar por estado de cita.",
"Maximum number of results to return (default 100).": "Número máximo de resultados a devolver (por defecto 100).",
"Sort direction for the results.": "Ordenar la dirección de los resultados.",
"Filter client list by first name, last name, or phone number.": "Filtrar la lista de clientes por nombre, apellido o número de teléfono.",
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDFs, imágenes, etc.",
"Scheduled": "Programado",
"Canceled": "Cancelado",
"All (Scheduled & Canceled)": "Todos (Agendados y cancelados)",
"Descending (DESC)": "Descendente (DESC)",
"Ascending (ASC)": "Ascendente (ASC)",
"GET": "RECOGER",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "BORRAR",
"HEAD": "LIMPIO",
"Appointment Canceled": "Cita cancelada",
"New Appointment": "Nueva cita",
"Triggers when an appointment is canceled.": "Dispara cuando una cita es cancelada.",
"Triggers when a new appointment is scheduled.": "Dispara cuando se programe una nueva cita.",
"Calendar": "Calendario"
}

View File

@@ -0,0 +1,130 @@
{
"Add Blocked Off Time": "Ajouter le temps d'arrêt bloqué",
"Create Appointment": "Créer Rendez-vous",
"Create Client": "Créer un client",
"Reschedule Appointment": "Replanifier le rendez-vous",
"Update Client": "Mettre à jour le client",
"Find Appointment(s)": "Trouver Rendez-vous",
"Find Client": "Trouver un client",
"Custom API Call": "Appel d'API personnalisé",
"Block off a specific time range on a calendar.": "Bloquer une période spécifique sur un calendrier.",
"Creates a new appointment.": "Crée un nouveau rendez-vous.",
"Creates a new client.": "Crée un nouveau client.",
"Reschedules an existing appointment to a new date/time.": "Replanifie un rendez-vous existant à une nouvelle date/heure.",
"Updates an existing client.": "Met à jour un client existant.",
"Find appointments based on various criteria, including client information.": "Trouver des rendez-vous en fonction de différents critères, y compris des renseignements sur les clients.",
"Finds client based on seach term.": "Trouve le client en fonction du terme de recherche.",
"Make a custom API call to a specific endpoint": "Passer un appel API personnalisé à un endpoint spécifique",
"Start Time": "Start Time",
"End Time": "Heure de fin",
"Calendar ID": "ID du calendrier",
"Notes": "Notes",
"DateTime": "DateHeure",
"Appointment Type": "Type de rendez-vous",
"First Name": "First Name",
"Last Name": "Last Name",
"Email": "Courriel",
"Phone": "Téléphone",
"Timezone": "Fuseau horaire",
"Book as Admin": "Réserver en tant qu'administrateur",
"Suppress Confirmation Email/SMS": "Supprimer l'Email/SMS de confirmation",
"Certificate Code": "Code de certificat",
"SMS Opt-In": "SMS d'activation",
"Addons": "Addons",
"Label": "Libellé",
"Appointment ID": "ID du rendez-vous",
"New Calendar ID": "Nouvel ID de calendrier",
"Reschedule as Admin": "Replanifier en tant qu'administrateur",
"Suppress Rescheduling Email/SMS": "Supprimer la replanification de l'e-mail/SMS",
"Current First Name (Identifier)": "Prénom actuel (identificateur)",
"Current Last Name (Identifier)": "Nom de famille actuel (identificateur)",
"Current Phone (Identifier, Optional)": "Téléphone actuel (identifiant, facultatif)",
"New First Name": "Nouveau prénom",
"New Last Name": "Nouveau nom",
"New Email": "Nouvel e-mail",
"New Phone": "Nouveau téléphone",
"New Notes": "Nouvelles notes",
"Client First Name": "Prénom du client",
"Client Last Name": "Nom du client",
"Client Email": "E-mail du client",
"Client Phone": "Téléphone du client",
"Min Date": "Date min",
"Max Date": "Date max",
"Appointment Status": "Statut du rendez-vous",
"Max Results": "Nombre maximum de résultats",
"Sort Direction": "Direction de tri",
"Search Term": "Terme de recherche",
"Method": "Méthode",
"Headers": "En-têtes",
"Query Parameters": "Paramètres de requête",
"Body": "Corps",
"Response is Binary ?": "La réponse est Binaire ?",
"No Error on Failure": "Aucune erreur en cas d'échec",
"Timeout (in seconds)": "Délai d'expiration (en secondes)",
"The start date and time for the block (ISO 8601 format).": "La date et l'heure de début du bloc (format ISO 8601).",
"The end date and time for the block (ISO 8601 format).": "La date et l'heure de fin du bloc (format ISO 8601).",
"The numeric ID of the calendar to add this block to.": "L'ID numérique du calendrier auquel ajouter ce bloc.",
"Optional notes for the blocked off time.": "Notes optionnelles pour le temps d'arrêt bloqué.",
"Date and time of the appointment.": "Date et heure du rendez-vous.",
"Select the type of appointment.": "Sélectionnez le type de rendez-vous.",
"Client's first name.": "Prénom du client.",
"Client's last name.": "Nom du client",
"Client's email address. (Optional if booking as admin).": "Adresse e-mail du client. (Optionnel si vous réservez en tant qu'administrateur).",
"Client's phone number.": "Numéro de téléphone du client",
"Client's timezone (e.g., America/New_York). Required for accurate availability checking.": "Le fuseau horaire du client (par exemple, Amérique/New_York). Requis pour une vérification précise de la disponibilité.",
"Set to true to book as an admin. Disables availability/attribute validations, allows setting notes, and makes Calendar ID required.": "Définir à vrai pour réserver en tant qu'administrateur. Désactive les validations de disponibilité/attribut, permet de définir des notes, et rend l'ID du calendrier obligatoire.",
"Numeric ID of the calendar. Required if booking as admin. If not provided, Acuity tries to find an available calendar automatically for non-admin bookings.": "ID numérique du calendrier. Requis en tant qu'administrateur. Si non fourni, Acuity essaye de trouver automatiquement un calendrier disponible pour les réservations non administratives.",
"If true, confirmation emails or SMS will not be sent.": "Si vrai, les e-mails de confirmation ou les SMS ne seront pas envoyés.",
"Package or coupon certificate code.": "Code du colis ou du bon de réduction.",
"Appointment notes. Only settable if booking as admin.": "Notes de rendez-vous. Ne peut être réglée que si vous réservez en tant qu'administrateur.",
"Indicates whether the client has explicitly given permission to receive SMS messages.": "Indique si le client a explicitement donné l'autorisation de recevoir des messages SMS.",
"Select addons for the appointment. Addons are filtered by selected Appointment Type if available.": "Sélectionnez les modules complémentaires pour le rendez-vous. Les modules sont filtrés par le type de rendez-vous sélectionné, si disponible.",
"Apply a label to the appointment. The API currently supports one label.": "Appliquer une étiquette au rendez-vous. L'API supporte actuellement une étiquette.",
"Client's email address.": "Adresse e-mail du client.",
"Notes about the client.": "Notes sur le client.",
"The ID of the appointment to reschedule.": "L'ID du rendez-vous à replanifier.",
"Select the type of appointment (used for finding new available slots).": "Sélectionnez le type de rendez-vous (utilisé pour trouver de nouveaux créneaux disponibles).",
"New Date and time of the appointment.": "Nouvelle date et heure du rendez-vous.",
"Client's timezone (e.g., America/New_York).": "Fuseau horaire du client (par exemple, Amérique/New_York).",
"Numeric ID of the new calendar to reschedule to. If blank, stays on current calendar. Submit 0 to auto-assign.": "ID numérique du nouveau calendrier à reprogrammer. Si vide, reste sur le calendrier actuel. Soumettre 0 pour l'assignation automatique.",
"Set to true to reschedule as an admin. Disables availability validations.": "Définir à vrai pour reprogrammer en tant qu'administrateur. Désactive les validations de disponibilité.",
"If true, rescheduling emails or SMS will not be sent.": "Si vrai, la replanification des emails ou des SMS ne sera pas envoyée.",
"The current first name of the client to update.": "Le prénom actuel du client à mettre à jour.",
"The current last name of the client to update.": "Le nom de famille actuel du client à mettre à jour.",
"The current phone number of the client to update. Helps identify the client if names are not unique.": "Le numéro de téléphone actuel du client à mettre à jour. Aide à identifier le client si les noms ne sont pas uniques.",
"Client's new first name. Leave blank to keep current.": "Nouveau prénom du client. Laisser vide pour garder le courant.",
"Client's new last name. Leave blank to keep current.": "Nouveau nom de famille du client. Laisser vide pour garder le courant.",
"Client's new email address. Leave blank to keep current.": "Nouvelle adresse e-mail du client. Laissez vide pour garder à jour.",
"Client's new phone number. Leave blank to keep current.": "Nouveau numéro de téléphone du client. Laissez vide pour garder à jour.",
"New notes about the client. Leave blank to keep current.": "Nouvelles notes sur le client. Laissez vide pour garder à jour.",
"Filter appointments by client first name.": "Filtrer les rendez-vous par prénom du client.",
"Filter appointments by client last name.": "Filtrer les rendez-vous par nom de famille du client.",
"Filter appointments by client e-mail address.": "Filtrer les rendez-vous par adresse e-mail du client.",
"Filter appointments by client phone number. URL encode '+' if using country codes (e.g., %2B1234567890).": "Filtrer les rendez-vous par numéro de téléphone du client. URL encoder '+' si vous utilisez les codes de pays (par exemple, %2B1234567890).",
"Only get appointments on or after this date.": "N'obtenir que les rendez-vous à ou après cette date.",
"Only get appointments on or before this date.": "N'obtenir que les rendez-vous à ou avant cette date.",
"Show only appointments on the calendar with this ID.": "Afficher uniquement les rendez-vous sur le calendrier avec cet ID.",
"Show only appointments of this type.": "Afficher uniquement les rendez-vous de ce type.",
"Filter by appointment status.": "Filtrer par statut de rendez-vous.",
"Maximum number of results to return (default 100).": "Nombre maximum de résultats à retourner (par défaut 100).",
"Sort direction for the results.": "Direction de tri pour les résultats.",
"Filter client list by first name, last name, or phone number.": "Filtrer la liste des clients par prénom, nom ou numéro de téléphone.",
"Authorization headers are injected automatically from your connection.": "Les en-têtes d'autorisation sont injectés automatiquement à partir de votre connexion.",
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDF, les images, etc.",
"Scheduled": "Planifié",
"Canceled": "Annulé",
"All (Scheduled & Canceled)": "Tout (Planifié & Annulé)",
"Descending (DESC)": "Descendant (DESC)",
"Ascending (ASC)": "Ascendant (ASC)",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"Appointment Canceled": "Rendez-vous annulé",
"New Appointment": "Nouveau Rendez-vous",
"Triggers when an appointment is canceled.": "Déclenche lorsqu'un rendez-vous est annulé.",
"Triggers when a new appointment is scheduled.": "Déclenche lorsqu'un nouveau rendez-vous est programmé.",
"Calendar": "Calendrier"
}

View File

@@ -0,0 +1,130 @@
{
"Add Blocked Off Time": "ブロックオフ時間を追加",
"Create Appointment": "予約を作成",
"Create Client": "クライアントを作成",
"Reschedule Appointment": "予定の再スケジュール",
"Update Client": "クライアントを更新",
"Find Appointment(s)": "予約を検索",
"Find Client": "クライアントを検索",
"Custom API Call": "カスタムAPI通話",
"Block off a specific time range on a calendar.": "カレンダー上の特定の時間範囲をブロックします。",
"Creates a new appointment.": "新しい予定を作成します。",
"Creates a new client.": "新しいクライアントを作成します。",
"Reschedules an existing appointment to a new date/time.": "既存の予定を新しい日時に変更します。",
"Updates an existing client.": "既存のクライアントを更新します。",
"Find appointments based on various criteria, including client information.": "クライアント情報を含むさまざまな基準に基づいて予定を検索します。",
"Finds client based on seach term.": "seach term に基づいてクライアントを検索します。",
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
"Start Time": "開始時刻",
"End Time": "終了時刻",
"Calendar ID": "カレンダー ID",
"Notes": "メモ",
"DateTime": "日時",
"Appointment Type": "予約タイプ",
"First Name": "名",
"Last Name": "姓",
"Email": "Eメールアドレス",
"Phone": "電話番号",
"Timezone": "Timezone",
"Book as Admin": "ブックを管理者として表示",
"Suppress Confirmation Email/SMS": "確認メール/SMSを無効にする",
"Certificate Code": "Certificate Code",
"SMS Opt-In": "SMSオプトイン",
"Addons": "Addons",
"Label": "ラベル",
"Appointment ID": "予約ID",
"New Calendar ID": "新しいカレンダー ID",
"Reschedule as Admin": "管理者として再スケジュール",
"Suppress Rescheduling Email/SMS": "メール/SMSの変更を抑制する",
"Current First Name (Identifier)": "現在の姓(識別子)",
"Current Last Name (Identifier)": "現在の姓 (識別子)",
"Current Phone (Identifier, Optional)": "現在の電話番号 (ID、オプション)",
"New First Name": "新しい名",
"New Last Name": "新しい姓",
"New Email": "新しいメール",
"New Phone": "新しい電話番号",
"New Notes": "新しいメモ",
"Client First Name": "クライアント名",
"Client Last Name": "クライアントの姓",
"Client Email": "クライアントのメールアドレス",
"Client Phone": "クライアント電話",
"Min Date": "最小日付",
"Max Date": "最大日付",
"Appointment Status": "予約状況",
"Max Results": "最大結果",
"Sort Direction": "並べ替え方向",
"Search Term": "検索用語",
"Method": "方法",
"Headers": "ヘッダー",
"Query Parameters": "クエリパラメータ",
"Body": "本文",
"Response is Binary ?": "応答はバイナリですか?",
"No Error on Failure": "失敗時にエラーはありません",
"Timeout (in seconds)": "タイムアウト(秒)",
"The start date and time for the block (ISO 8601 format).": "ブロックの開始日時ISO 8601形式。",
"The end date and time for the block (ISO 8601 format).": "ブロックの終了日時ISO 8601形式。",
"The numeric ID of the calendar to add this block to.": "このブロックを追加するカレンダーの数値ID。",
"Optional notes for the blocked off time.": "ブロックされたオフ時間のためのオプションのノート。",
"Date and time of the appointment.": "任命日時。",
"Select the type of appointment.": "予定の種類を選択します。",
"Client's first name.": "クライアントの名",
"Client's last name.": "クライアントの姓。",
"Client's email address. (Optional if booking as admin).": "クライアントのメールアドレス(管理者として予約する場合はオプション)。",
"Client's phone number.": "クライアントの電話番号",
"Client's timezone (e.g., America/New_York). Required for accurate availability checking.": "クライアントのタイムゾーン(例:アメリカ/ニュー_ヨーク。正確な可用性のチェックに必要です。",
"Set to true to book as an admin. Disables availability/attribute validations, allows setting notes, and makes Calendar ID required.": "管理者としてブックにtrueを設定します。可用性/属性のバリデーションを無効にし、メモの設定を許可し、カレンダーIDを必須にします。",
"Numeric ID of the calendar. Required if booking as admin. If not provided, Acuity tries to find an available calendar automatically for non-admin bookings.": "カレンダーの数値ID。管理者として予約する場合に必要です。指定されていない場合、Acuity は管理者以外の予約に対して自動的に利用可能なカレンダーを検索しようとします。",
"If true, confirmation emails or SMS will not be sent.": "true の場合、確認メールまたは SMS は送信されません。",
"Package or coupon certificate code.": "パッケージまたはクーポン証明書コード。",
"Appointment notes. Only settable if booking as admin.": "予約メモ 予約が管理者の場合のみ設定可能です。",
"Indicates whether the client has explicitly given permission to receive SMS messages.": "SMSメッセージを受信する権限をクライアントに明示的に与えたかどうかを示します。",
"Select addons for the appointment. Addons are filtered by selected Appointment Type if available.": "予定のアドオンを選択します。アドオンは、可能な場合は選択した予定タイプでフィルタリングされます。",
"Apply a label to the appointment. The API currently supports one label.": "予定にラベルを適用します。APIは現在1つのラベルをサポートしています。",
"Client's email address.": "クライアントのメールアドレス。",
"Notes about the client.": "クライアントに関する注意事項。",
"The ID of the appointment to reschedule.": "スケジュールを変更する予定の ID",
"Select the type of appointment (used for finding new available slots).": "予定の種類を選択します (新しい利用可能なスロットを見つけるために使用します)。",
"New Date and time of the appointment.": "予定の新しい日付と時刻",
"Client's timezone (e.g., America/New_York).": "クライアントのタイムゾーン(例:アメリカ/ニュー_ヨーク。",
"Numeric ID of the new calendar to reschedule to. If blank, stays on current calendar. Submit 0 to auto-assign.": "再スケジュールする新しいカレンダーの数値ID。空白の場合はカレンダーのままです。0を自動割り当てに送信します。",
"Set to true to reschedule as an admin. Disables availability validations.": "管理者としてリスケジュールする場合は true に設定します。可用性の検証を無効にします。",
"If true, rescheduling emails or SMS will not be sent.": "true の場合、メールやSMSのスケジュール変更は送信されません。",
"The current first name of the client to update.": "更新するクライアントの現在の名",
"The current last name of the client to update.": "更新するクライアントの現在の姓",
"The current phone number of the client to update. Helps identify the client if names are not unique.": "更新するクライアントの現在の電話番号。名前が一意でない場合、クライアントを識別するのに役立ちます。",
"Client's new first name. Leave blank to keep current.": "クライアントの新しい名称です。空白のままにすると最新の名称になります。",
"Client's new last name. Leave blank to keep current.": "クライアントの新しい苗字です。空白のままにすると最新のままになります。",
"Client's new email address. Leave blank to keep current.": "クライアントの新しいメールアドレス。空白のままにしてください。",
"Client's new phone number. Leave blank to keep current.": "クライアントの新しい電話番号。空白のままにすると最新の状態になります。",
"New notes about the client. Leave blank to keep current.": "クライアントに関する新しいメモ。現在のままにするには空白のままにしてください。",
"Filter appointments by client first name.": "クライアントの名で予定をフィルタリングします。",
"Filter appointments by client last name.": "クライアントの姓で予定をフィルタリングします。",
"Filter appointments by client e-mail address.": "クライアントの電子メール アドレスで予定をフィルタリングします。",
"Filter appointments by client phone number. URL encode '+' if using country codes (e.g., %2B1234567890).": "クライアントの電話番号で予定をフィルタリングします。国コードを使用する場合、URLは「+」をエンコードします(例: %2B1234567890。",
"Only get appointments on or after this date.": "この日付以降の予約のみを取得します。",
"Only get appointments on or before this date.": "この日付以前の予約のみを取得します。",
"Show only appointments on the calendar with this ID.": "このIDでカレンダーに予定のみを表示します。",
"Show only appointments of this type.": "このタイプの予定のみを表示します。",
"Filter by appointment status.": "予約ステータスで絞り込みます。",
"Maximum number of results to return (default 100).": "返す結果の最大数デフォルトは100。",
"Sort direction for the results.": "結果の並べ替え方向。",
"Filter client list by first name, last name, or phone number.": "クライアントのリストを姓、姓、電話番号で絞り込みます。",
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
"Scheduled": "スケジュール済み",
"Canceled": "キャンセルしました",
"All (Scheduled & Canceled)": "すべて (スケジュールとキャンセル)",
"Descending (DESC)": "降順",
"Ascending (ASC)": "昇順",
"GET": "取得",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "削除",
"HEAD": "頭",
"Appointment Canceled": "予約がキャンセルされました",
"New Appointment": "新しい予約",
"Triggers when an appointment is canceled.": "予約がキャンセルされたときにトリガーします。",
"Triggers when a new appointment is scheduled.": "新しい予約がスケジュールされたときにトリガーします。",
"Calendar": "カレンダー"
}

View File

@@ -0,0 +1,130 @@
{
"Add Blocked Off Time": "Geblokkeerde Tijd toevoegen",
"Create Appointment": "Nieuwe afspraak",
"Create Client": "Client aanmaken",
"Reschedule Appointment": "Opnieuw Plannen Afspraak",
"Update Client": "Klant bijwerken",
"Find Appointment(s)": "Afspraken(s) zoeken",
"Find Client": "Klant zoeken",
"Custom API Call": "Custom API Call",
"Block off a specific time range on a calendar.": "Blokkeer van een specifieke tijdsperiode op een kalender.",
"Creates a new appointment.": "Maakt een nieuwe afspraak aan.",
"Creates a new client.": "Maakt een nieuwe cliënt aan.",
"Reschedules an existing appointment to a new date/time.": "Een bestaande afspraak terugzetten naar een nieuwe datum/tijd.",
"Updates an existing client.": "Werkt een bestaande client bij.",
"Find appointments based on various criteria, including client information.": "Vind afspraken op basis van verschillende criteria, met inbegrip van klantinformatie.",
"Finds client based on seach term.": "Vindt klant gebaseerd op zoekterm.",
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
"Start Time": "Starttijd",
"End Time": "Eind Tijd",
"Calendar ID": "Kalender ID",
"Notes": "Opmerkingen",
"DateTime": "DatumTijd",
"Appointment Type": "Afspraak Type",
"First Name": "Voornaam",
"Last Name": "Achternaam",
"Email": "E-mail",
"Phone": "Telefoonnummer",
"Timezone": "Timezone",
"Book as Admin": "Boek als Admin",
"Suppress Confirmation Email/SMS": "Bevestiging onderdrukken E-mail/SMS",
"Certificate Code": "Certificaat Code",
"SMS Opt-In": "SMS Inschrijven",
"Addons": "Addons",
"Label": "Omschrijving",
"Appointment ID": "Afspraak ID",
"New Calendar ID": "Nieuwe kalender ID",
"Reschedule as Admin": "Plannen als Admin",
"Suppress Rescheduling Email/SMS": "Onderdruk E-mail/SMS opnieuw instellen",
"Current First Name (Identifier)": "Huidige voornaam (Identifier)",
"Current Last Name (Identifier)": "Huidige achternaam (Identifier)",
"Current Phone (Identifier, Optional)": "Huidige telefoon (Identifier, Optioneel)",
"New First Name": "Nieuwe voornaam",
"New Last Name": "Nieuwe achternaam",
"New Email": "Nieuw e-mailadres",
"New Phone": "Nieuwe telefoon",
"New Notes": "Nieuwe notities",
"Client First Name": "Voornaam klant",
"Client Last Name": "Achternaam klant",
"Client Email": "Klant e-mail",
"Client Phone": "Telefoonnummer klant",
"Min Date": "Min. datum",
"Max Date": "Max Datum",
"Appointment Status": "Afspraak Status",
"Max Results": "Max. aantal resultaten",
"Sort Direction": "Sorteer richting",
"Search Term": "Zoek term",
"Method": "Methode",
"Headers": "Kopteksten",
"Query Parameters": "Query parameters",
"Body": "Lichaam",
"Response is Binary ?": "Antwoord is binair?",
"No Error on Failure": "Geen fout bij fout",
"Timeout (in seconds)": "Time-out (in seconden)",
"The start date and time for the block (ISO 8601 format).": "De startdatum en tijd voor het blok (ISO 8601 formaat).",
"The end date and time for the block (ISO 8601 format).": "De einddatum en tijd voor het blok (ISO 8601 formaat).",
"The numeric ID of the calendar to add this block to.": "De numerieke ID van de kalender aan dit blok toe te voegen.",
"Optional notes for the blocked off time.": "Optionele notities voor de geblokkeerde uittijd.",
"Date and time of the appointment.": "Datum en tijd van de afspraak.",
"Select the type of appointment.": "Selecteer het type afspraak.",
"Client's first name.": "Voornaam klant.",
"Client's last name.": "Client's achternaam.",
"Client's email address. (Optional if booking as admin).": "E-mailadres van klant. (Optioneel indien reserveren als admin).",
"Client's phone number.": "Telefoonnummer van klant.",
"Client's timezone (e.g., America/New_York). Required for accurate availability checking.": "Client's tijdzone (bijv. Amerika/New_York). Vereist voor nauwkeurige beschikbaarheidscontrole.",
"Set to true to book as an admin. Disables availability/attribute validations, allows setting notes, and makes Calendar ID required.": "Stel in op true om te reserveren als een admin. Schakelt beschikbaarheid/attribuut-validaties uit, staat instelling notities toe en maakt Agenda ID vereist.",
"Numeric ID of the calendar. Required if booking as admin. If not provided, Acuity tries to find an available calendar automatically for non-admin bookings.": "Numerieke ID van de kalender. Vereist als reservering als admin. Indien niet opgegeven, probeert om een beschikbare kalender automatisch te vinden voor boekingen die niet beheerders zijn.",
"If true, confirmation emails or SMS will not be sent.": "Indien waar, bevestiging van e-mails of SMS zullen niet worden verzonden.",
"Package or coupon certificate code.": "Pakket of coupon certificaatcode.",
"Appointment notes. Only settable if booking as admin.": "Afspraak notities. Alleen settable bij boekingen als admin.",
"Indicates whether the client has explicitly given permission to receive SMS messages.": "Geeft aan of de klant expliciet toestemming heeft gegeven om SMS-berichten te ontvangen.",
"Select addons for the appointment. Addons are filtered by selected Appointment Type if available.": "Selecteer addons voor de afspraak. Addons worden gefilterd op de geselecteerde Afspraak Type indien beschikbaar.",
"Apply a label to the appointment. The API currently supports one label.": "Pas een label toe op de afspraak. De API ondersteunt momenteel één label.",
"Client's email address.": "Klant e-mail adres.",
"Notes about the client.": "Opmerkingen over de client.",
"The ID of the appointment to reschedule.": "Het nummer van de te herschikte benoeming.",
"Select the type of appointment (used for finding new available slots).": "Selecteer het type afspraak (gebruikt voor het vinden van nieuwe beschikbare slots).",
"New Date and time of the appointment.": "Nieuwe datum en tijd van de afspraak.",
"Client's timezone (e.g., America/New_York).": "Klant tijdzone (bijv. Amerika/New_York).",
"Numeric ID of the new calendar to reschedule to. If blank, stays on current calendar. Submit 0 to auto-assign.": "Numerieke ID van de nieuwe agenda om naar te verschuiven. Indien leeg blijft op de huidige kalender. Dien 0 in voor auto-toewijzing.",
"Set to true to reschedule as an admin. Disables availability validations.": "Stel in op juist om te plannen als een admin. Schakelt beschikbaarheidsvalidaties uit.",
"If true, rescheduling emails or SMS will not be sent.": "Indien waar, zal het herplannen van e-mails of SMS niet worden verzonden.",
"The current first name of the client to update.": "De huidige voornaam van de bij te werken cliënt.",
"The current last name of the client to update.": "De huidige achternaam van de aan te werken client",
"The current phone number of the client to update. Helps identify the client if names are not unique.": "Het huidige telefoonnummer van de bij te werken adverteerder. Helpt de client te identificeren als de namen niet uniek zijn.",
"Client's new first name. Leave blank to keep current.": "Klant nieuwe voornaam. Laat leeg om stroom te houden.",
"Client's new last name. Leave blank to keep current.": "Client's nieuwe achternaam. Laat leeg om stroom te houden.",
"Client's new email address. Leave blank to keep current.": "Klant nieuwe e-mailadres. Laat leeg om het huidige e-mailadres te behouden.",
"Client's new phone number. Leave blank to keep current.": "Klant is nieuw telefoonnummer. Laat leeg om het huidige nummer te behouden.",
"New notes about the client. Leave blank to keep current.": "Nieuwe notities over de adverteerder. Laat leeg om stroom te behouden.",
"Filter appointments by client first name.": "Afspraken filteren op voornaam adverteerder.",
"Filter appointments by client last name.": "Afspraken filteren op voornaam adverteerder.",
"Filter appointments by client e-mail address.": "Afspraken filteren op e-mailadres van client.",
"Filter appointments by client phone number. URL encode '+' if using country codes (e.g., %2B1234567890).": "Filter afspraken op telefoonnummer van klant. URL codeert '+' als je landcodes gebruikt (bijv. %2B1234567890).",
"Only get appointments on or after this date.": "Alleen afspraken krijgen op of na deze datum.",
"Only get appointments on or before this date.": "Alleen afspraken krijgen op of voor deze datum.",
"Show only appointments on the calendar with this ID.": "Toon alleen afspraken op de kalender met dit ID.",
"Show only appointments of this type.": "Toon alleen afspraken van dit type.",
"Filter by appointment status.": "Filter op afspraakstatus.",
"Maximum number of results to return (default 100).": "Maximum aantal resultaten om te retourneren (standaard 100).",
"Sort direction for the results.": "Sorteer de richting voor de resultaten.",
"Filter client list by first name, last name, or phone number.": "Filter klantenlijst op voornaam, achternaam of telefoonnummer.",
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
"Scheduled": "Gepland",
"Canceled": "Geannuleerd",
"All (Scheduled & Canceled)": "Alles (gepland & geannuleerd)",
"Descending (DESC)": "Aflopend (DESC)",
"Ascending (ASC)": "Oplopend (ASC)",
"GET": "KRIJG",
"POST": "POSTE",
"PATCH": "BEKIJK",
"PUT": "PUT",
"DELETE": "VERWIJDEREN",
"HEAD": "HOOFD",
"Appointment Canceled": "Afspraak geannuleerd",
"New Appointment": "Nieuwe afspraak",
"Triggers when an appointment is canceled.": "Triggert wanneer een afspraak geannuleerd wordt.",
"Triggers when a new appointment is scheduled.": "Triggert wanneer een nieuwe afspraak gepland is.",
"Calendar": "Kalender"
}

View File

@@ -0,0 +1,130 @@
{
"Add Blocked Off Time": "Adicionar hora de bloqueio",
"Create Appointment": "Criar Compromisso",
"Create Client": "Criar Cliente",
"Reschedule Appointment": "Nomeação reagendada",
"Update Client": "Atualizar Cliente",
"Find Appointment(s)": "Localizar Compromisso(s)",
"Find Client": "Encontrar Cliente",
"Custom API Call": "Chamada de API personalizada",
"Block off a specific time range on a calendar.": "Bloqueie um intervalo de tempo específico em um calendário.",
"Creates a new appointment.": "Cria um novo compromisso.",
"Creates a new client.": "Cria um novo cliente.",
"Reschedules an existing appointment to a new date/time.": "Reagendar uma consulta existente para uma nova data/hora.",
"Updates an existing client.": "Atualiza um cliente existente.",
"Find appointments based on various criteria, including client information.": "Encontre compromissos com base em vários critérios, incluindo informações do cliente.",
"Finds client based on seach term.": "Localiza o cliente com base em um termo.",
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
"Start Time": "Hora de início",
"End Time": "Hora de término",
"Calendar ID": "ID do calendário",
"Notes": "Observações",
"DateTime": "Data",
"Appointment Type": "Tipo de Compromisso",
"First Name": "Nome",
"Last Name": "Sobrenome",
"Email": "e-mail",
"Phone": "Smartphone",
"Timezone": "Timezone",
"Book as Admin": "Agende como Administrador",
"Suppress Confirmation Email/SMS": "Suprimir E-mail/SMS de confirmação",
"Certificate Code": "Código do certificado",
"SMS Opt-In": "Optar por SMS",
"Addons": "Addons",
"Label": "Descrição",
"Appointment ID": "Nomeação ID",
"New Calendar ID": "Novo ID do Calendário",
"Reschedule as Admin": "Reagendar como Administrador",
"Suppress Rescheduling Email/SMS": "Suprimir Reagendamento de E-mail/SMS",
"Current First Name (Identifier)": "Primeiro Nome Atual (Identificador)",
"Current Last Name (Identifier)": "Sobrenome Atual (Identificador)",
"Current Phone (Identifier, Optional)": "Telefone atual (opcional)",
"New First Name": "Novo Nome",
"New Last Name": "Novo sobrenome",
"New Email": "Novo E-mail",
"New Phone": "Novo Telefone",
"New Notes": "Novas Notas",
"Client First Name": "Primeiro Nome do Cliente",
"Client Last Name": "Último Nome do Cliente",
"Client Email": "Email do Cliente",
"Client Phone": "Telefone do Cliente",
"Min Date": "Data Mínima",
"Max Date": "Data máx.",
"Appointment Status": "Situação do Compromisso",
"Max Results": "Resultados no Máx.",
"Sort Direction": "Ordenar direção",
"Search Term": "Termo para pesquisa",
"Method": "Método",
"Headers": "Cabeçalhos",
"Query Parameters": "Parâmetros da consulta",
"Body": "Conteúdo",
"Response is Binary ?": "A resposta é binária ?",
"No Error on Failure": "Nenhum erro no Failure",
"Timeout (in seconds)": "Tempo limite (em segundos)",
"The start date and time for the block (ISO 8601 format).": "A data e hora de início do bloco (formato ISO 8601).",
"The end date and time for the block (ISO 8601 format).": "A data e hora de término do bloco (formato ISO 8601)",
"The numeric ID of the calendar to add this block to.": "O ID numérico do calendário a adicionar este bloco.",
"Optional notes for the blocked off time.": "Notas opcionais para o tempo bloqueado",
"Date and time of the appointment.": "Data e hora do compromisso.",
"Select the type of appointment.": "Selecione o tipo de compromisso.",
"Client's first name.": "Primeiro nome do cliente.",
"Client's last name.": "Sobrenome do cliente.",
"Client's email address. (Optional if booking as admin).": "Endereço de e-mail do cliente. (Opcional, se reservar como administrador).",
"Client's phone number.": "Número de telefone do cliente.",
"Client's timezone (e.g., America/New_York). Required for accurate availability checking.": "Fuso horário do cliente (por exemplo, América/New_York). Necessário para uma verificação precisa da disponibilidade.",
"Set to true to book as an admin. Disables availability/attribute validations, allows setting notes, and makes Calendar ID required.": "Definir como verdadeiro para o livro como administrador. Desativa a disponibilidade/validações de atributo, permite configuração de notas e torna o ID do calendário obrigatório.",
"Numeric ID of the calendar. Required if booking as admin. If not provided, Acuity tries to find an available calendar automatically for non-admin bookings.": "ID numérico do calendário. Necessário se agendar como administrador. Se não for fornecido, o usuário tenta encontrar automaticamente um calendário disponível para reservas que não são administrativas.",
"If true, confirmation emails or SMS will not be sent.": "Se verdadeiro, e-mails de confirmação ou SMS não serão enviados.",
"Package or coupon certificate code.": "Código do certificado de pacote ou cupom.",
"Appointment notes. Only settable if booking as admin.": "Compromisso notas. Só é possível determinar se reservar como administrador.",
"Indicates whether the client has explicitly given permission to receive SMS messages.": "Indica se o cliente deu permissão explícita para receber mensagens SMS.",
"Select addons for the appointment. Addons are filtered by selected Appointment Type if available.": "Selecione addons para o compromisso. Complementos são filtrados pelo tipo de agendamento selecionado, se disponível.",
"Apply a label to the appointment. The API currently supports one label.": "Aplicar um rótulo ao compromisso. A API atualmente suporta um rótulo.",
"Client's email address.": "Endereço de e-mail do cliente",
"Notes about the client.": "Notas sobre o cliente",
"The ID of the appointment to reschedule.": "O ID da nomeação para reagendar.",
"Select the type of appointment (used for finding new available slots).": "Selecione o tipo de agendamento (usado para encontrar novos espaços disponíveis).",
"New Date and time of the appointment.": "Nova data e hora do compromisso.",
"Client's timezone (e.g., America/New_York).": "Fuso horário do cliente (por exemplo, América/New_York).",
"Numeric ID of the new calendar to reschedule to. If blank, stays on current calendar. Submit 0 to auto-assign.": "ID numérica do novo calendário para reagendar. Se em branco, permanecerá no calendário atual. Envie 0 para auto-atribuir.",
"Set to true to reschedule as an admin. Disables availability validations.": "Defina como verdadeiro para reagendar como um administrador. Desativa as validações da disponibilidade.",
"If true, rescheduling emails or SMS will not be sent.": "Se verdadeiro, o reagendamento de e-mails ou SMS não serão enviados.",
"The current first name of the client to update.": "O atual primeiro nome do cliente a atualizar.",
"The current last name of the client to update.": "O atual sobrenome do cliente a ser atualizado.",
"The current phone number of the client to update. Helps identify the client if names are not unique.": "O número de telefone atual do cliente a ser atualizado. Ajuda a identificar o cliente se os nomes não são únicos.",
"Client's new first name. Leave blank to keep current.": "Novo nome do cliente. Deixe em branco para manter o atual.",
"Client's new last name. Leave blank to keep current.": "Novo sobrenome do cliente. Deixe em branco para manter o atual.",
"Client's new email address. Leave blank to keep current.": "Novo endereço de e-mail. Deixe em branco para manter a corrente.",
"Client's new phone number. Leave blank to keep current.": "Novo número de telefone do cliente. Deixe em branco para manter o atual.",
"New notes about the client. Leave blank to keep current.": "Novas notas sobre o cliente. Deixe em branco para manter a corrente.",
"Filter appointments by client first name.": "Filtrar compromissos por nome do cliente.",
"Filter appointments by client last name.": "Filtrar compromissos por último nome do cliente.",
"Filter appointments by client e-mail address.": "Filtrar compromissos por endereço de e-mail do cliente.",
"Filter appointments by client phone number. URL encode '+' if using country codes (e.g., %2B1234567890).": "Filtrar compromissos por número de telefone do cliente. URL codifica '+' se usando códigos de país (por exemplo, %2B1234567890).",
"Only get appointments on or after this date.": "Receba apenas compromissos em ou após esta data.",
"Only get appointments on or before this date.": "Receba apenas compromissos em ou antes desta data.",
"Show only appointments on the calendar with this ID.": "Mostrar apenas compromissos na agenda com esta ID.",
"Show only appointments of this type.": "Mostrar apenas compromissos deste tipo.",
"Filter by appointment status.": "Filtrar por estado da nomeação.",
"Maximum number of results to return (default 100).": "Número máximo de resultados a retornar (padrão 100).",
"Sort direction for the results.": "Direção de classificação para os resultados.",
"Filter client list by first name, last name, or phone number.": "Filtrar lista de clientes por nome, sobrenome ou número de telefone.",
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
"Scheduled": "Agendado",
"Canceled": "Cancelado",
"All (Scheduled & Canceled)": "Todos (Padrão & Cancelado)",
"Descending (DESC)": "Descendente (DESC)",
"Ascending (ASC)": "Crescente (ASC)",
"GET": "OBTER",
"POST": "POSTAR",
"PATCH": "COMPRAR",
"PUT": "COLOCAR",
"DELETE": "EXCLUIR",
"HEAD": "CABEÇA",
"Appointment Canceled": "Nomeação Cancelada",
"New Appointment": "Novo Compromisso",
"Triggers when an appointment is canceled.": "Dispara quando um agendamento é cancelado.",
"Triggers when a new appointment is scheduled.": "Aciona quando um novo agendamento é agendado.",
"Calendar": "calendário"
}

View File

@@ -0,0 +1,129 @@
{
"Acuity Scheduling": "Планирование доступности",
"Add Blocked Off Time": "Добавить заблокированное время",
"Create Appointment": "Назначить встречу",
"Create Client": "Создать клиента",
"Reschedule Appointment": "Перенос назначения",
"Update Client": "Обновить клиента",
"Find Appointment(s)": "Найти назначение",
"Find Client": "Найти клиента",
"Custom API Call": "Пользовательский вызов API",
"Block off a specific time range on a calendar.": "Блокировать из определенного диапазона времени в календаре.",
"Creates a new appointment.": "Создает новое назначение.",
"Creates a new client.": "Создает нового клиента.",
"Reschedules an existing appointment to a new date/time.": "Перераспределяет существующую встречу на новую дату/время.",
"Updates an existing client.": "Обновление существующего клиента.",
"Find appointments based on various criteria, including client information.": "Найдите встречи, основанные на различных критериях, включая информацию о клиенте.",
"Finds client based on seach term.": "Ищет клиент на основе условия для себя.",
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
"Start Time": "Время начала",
"End Time": "Конец времени",
"Calendar ID": "ID календаря",
"Notes": "Примечания",
"DateTime": "Дата",
"Appointment Type": "Тип встречи",
"First Name": "First Name",
"Last Name": "Last Name",
"Email": "Почта",
"Phone": "Телефон",
"Timezone": "Timezone",
"Book as Admin": "Книга как администратор",
"Suppress Confirmation Email/SMS": "Отключить подтверждение Email/SMS",
"Certificate Code": "Код сертификата",
"SMS Opt-In": "SMS-заявка",
"Addons": "Addons",
"Label": "Метка",
"Appointment ID": "Назначение ID",
"New Calendar ID": "Новый ID календаря",
"Reschedule as Admin": "Перенести звонок как Администратор",
"Suppress Rescheduling Email/SMS": "Отключить перепланировку эл.почты/SMS",
"Current First Name (Identifier)": "Текущее имя (идентификатор)",
"Current Last Name (Identifier)": "Текущая Фамилия (идентификатор)",
"Current Phone (Identifier, Optional)": "Текущий телефон (идентификатор, необязательно)",
"New First Name": "Новое имя",
"New Last Name": "Новая фамилия",
"New Email": "Новое письмо",
"New Phone": "Новый телефон",
"New Notes": "Новые заметки",
"Client First Name": "Имя клиента",
"Client Last Name": "Фамилия клиента",
"Client Email": "Email клиента",
"Client Phone": "Телефон клиента",
"Min Date": "Мин. дата",
"Max Date": "Макс. Дата",
"Appointment Status": "Статус назначения",
"Max Results": "Макс. результатов",
"Sort Direction": "Направление сортировки",
"Search Term": "Поиск термина",
"Method": "Метод",
"Headers": "Заголовки",
"Query Parameters": "Параметры запроса",
"Body": "Тело",
"No Error on Failure": "Нет ошибок при ошибке",
"Timeout (in seconds)": "Таймаут (в секундах)",
"The start date and time for the block (ISO 8601 format).": "Дата и время начала блока (формат ISO 8601).",
"The end date and time for the block (ISO 8601 format).": "Дата и время окончания блока (формат ISO 8601).",
"The numeric ID of the calendar to add this block to.": "Цифровой идентификатор календаря для добавления этого блока.",
"Optional notes for the blocked off time.": "Необязательные заметки для заблокированного времени.",
"Date and time of the appointment.": "Дата и время назначения.",
"Select the type of appointment.": "Выберите тип встречи.",
"Client's first name.": "Имя клиента.",
"Client's last name.": "Фамилия клиента.",
"Client's email address. (Optional if booking as admin).": "Адрес электронной почты клиента. (опционально, если бронирование осуществляется администратором).",
"Client's phone number.": "Номер телефона клиента.",
"Client's timezone (e.g., America/New_York). Required for accurate availability checking.": "Часовой пояс клиента (например, Америка/Нью-Йорк). Требуется для точной проверки доступности.",
"Set to true to book as an admin. Disables availability/attribute validations, allows setting notes, and makes Calendar ID required.": "Отметьте для книги как администратор. Отключает проверку доступности/атрибутов, позволяет установить заметки и сделать идентификатор календаря.",
"Numeric ID of the calendar. Required if booking as admin. If not provided, Acuity tries to find an available calendar automatically for non-admin bookings.": "Числовой идентификатор календаря. Обязательно если бронирование производится как администратор. Если оно не указано, Acuity попытается автоматически найти календарь для бронирования не-администратора.",
"If true, confirmation emails or SMS will not be sent.": "Если введено значение true, сообщения с подтверждением или SMS не будут отправлены.",
"Package or coupon certificate code.": "Код сертификата на пакет или купон.",
"Appointment notes. Only settable if booking as admin.": "Назначение заметки. Задайте значение только при бронировании как admin.",
"Indicates whether the client has explicitly given permission to receive SMS messages.": "Указывает, предоставил ли клиент явное разрешение на получение SMS-сообщений.",
"Select addons for the appointment. Addons are filtered by selected Appointment Type if available.": "Выберите аддоны для назначения. Аддоны фильтруются по выбранному типу назначения, если таковые имеются.",
"Apply a label to the appointment. The API currently supports one label.": "Применить метку к назначению. В настоящее время API поддерживает одну метку.",
"Client's email address.": "Адрес электронной почты клиента.",
"Notes about the client.": "Примечания о клиенте.",
"The ID of the appointment to reschedule.": "Идентификатор записи на прием для перепланировки.",
"Select the type of appointment (used for finding new available slots).": "Выберите тип назначения (используется для поиска новых доступных слотов).",
"New Date and time of the appointment.": "Новая дата и время назначения.",
"Client's timezone (e.g., America/New_York).": "Часовой пояс клиента (например, Америка/Нью-Йорк).",
"Numeric ID of the new calendar to reschedule to. If blank, stays on current calendar. Submit 0 to auto-assign.": "Числовой идентификатор нового календаря для изменения планировки. Если пустой, остаётся в текущем календаре. Отправьте 0 для автоматического назначения.",
"Set to true to reschedule as an admin. Disables availability validations.": "Отметьте значение true, чтобы перепланировать как администратор. Отключает проверки доступности.",
"If true, rescheduling emails or SMS will not be sent.": "Если включено, перепланировка писем или SMS не будет отправлена.",
"The current first name of the client to update.": "Текущее имя обновления клиента.",
"The current last name of the client to update.": "Текущее имя обновления клиента.",
"The current phone number of the client to update. Helps identify the client if names are not unique.": "Текущий номер телефона клиента для обновления. Помогает идентифицировать клиента, если имена не уникальны.",
"Client's new first name. Leave blank to keep current.": "Новое имя клиента. Оставьте пустым для сохранения.",
"Client's new last name. Leave blank to keep current.": "Фамилия клиента. Оставьте пустым, чтобы сохранять актуальность.",
"Client's new email address. Leave blank to keep current.": "Новый адрес электронной почты клиента. Оставьте пустым, чтобы держать в курсе событий.",
"Client's new phone number. Leave blank to keep current.": "Новый номер телефона клиента. Оставьте пустым, чтобы оставаться в курсе.",
"New notes about the client. Leave blank to keep current.": "Новые заметки о клиенте. Оставьте пустым для сохранения.",
"Filter appointments by client first name.": "Фильтровать встречи по имени клиента.",
"Filter appointments by client last name.": "Фильтровать встречи по фамилии клиента.",
"Filter appointments by client e-mail address.": "Фильтровать встречи по электронной почте клиента.",
"Filter appointments by client phone number. URL encode '+' if using country codes (e.g., %2B1234567890).": "Фильтровать встречи по номеру телефона. URL кодировать '+', если используется код страны (например, %2B1234567890).",
"Only get appointments on or after this date.": "Получать встречи только на или после этой даты.",
"Only get appointments on or before this date.": "Получать только встречи на или раньше этой даты.",
"Show only appointments on the calendar with this ID.": "Показывать только встречи в календаре с этим идентификатором.",
"Show only appointments of this type.": "Показать только встречи этого типа.",
"Filter by appointment status.": "Фильтр по статусу назначения.",
"Maximum number of results to return (default 100).": "Максимальное количество результатов возврата (по умолчанию 100).",
"Sort direction for the results.": "Направление сортировки результатов.",
"Filter client list by first name, last name, or phone number.": "Фильтровать список клиентов по имени, фамилии, или номеру телефона.",
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
"Scheduled": "Запланированный",
"Canceled": "Отменено",
"All (Scheduled & Canceled)": "Все (Спланировано & Отменено)",
"Descending (DESC)": "По убыванию (DESC)",
"Ascending (ASC)": "По возрастанию (ASC)",
"GET": "ПОЛУЧИТЬ",
"POST": "ПОСТ",
"PATCH": "ПАТЧ",
"PUT": "ПОКУПИТЬ",
"DELETE": "УДАЛИТЬ",
"HEAD": "HEAD",
"Appointment Canceled": "Назначение отменено",
"New Appointment": "Новая встреча",
"Triggers when an appointment is canceled.": "Срабатывает при отмене назначения.",
"Triggers when a new appointment is scheduled.": "Вызывает, когда запланирована новая запись.",
"Calendar": "Календарь"
}

View File

@@ -0,0 +1,130 @@
{
"Add Blocked Off Time": "Add Blocked Off Time",
"Create Appointment": "Create Appointment",
"Create Client": "Create Client",
"Reschedule Appointment": "Reschedule Appointment",
"Update Client": "Update Client",
"Find Appointment(s)": "Find Appointment(s)",
"Find Client": "Find Client",
"Custom API Call": "Custom API Call",
"Block off a specific time range on a calendar.": "Block off a specific time range on a calendar.",
"Creates a new appointment.": "Creates a new appointment.",
"Creates a new client.": "Creates a new client.",
"Reschedules an existing appointment to a new date/time.": "Reschedules an existing appointment to a new date/time.",
"Updates an existing client.": "Updates an existing client.",
"Find appointments based on various criteria, including client information.": "Find appointments based on various criteria, including client information.",
"Finds client based on seach term.": "Finds client based on seach term.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Start Time": "Start Time",
"End Time": "End Time",
"Calendar ID": "Calendar ID",
"Notes": "Notes",
"DateTime": "DateTime",
"Appointment Type": "Appointment Type",
"First Name": "First Name",
"Last Name": "Last Name",
"Email": "Email",
"Phone": "Phone",
"Timezone": "Timezone",
"Book as Admin": "Book as Admin",
"Suppress Confirmation Email/SMS": "Suppress Confirmation Email/SMS",
"Certificate Code": "Certificate Code",
"SMS Opt-In": "SMS Opt-In",
"Addons": "Addons",
"Label": "Label",
"Appointment ID": "Appointment ID",
"New Calendar ID": "New Calendar ID",
"Reschedule as Admin": "Reschedule as Admin",
"Suppress Rescheduling Email/SMS": "Suppress Rescheduling Email/SMS",
"Current First Name (Identifier)": "Current First Name (Identifier)",
"Current Last Name (Identifier)": "Current Last Name (Identifier)",
"Current Phone (Identifier, Optional)": "Current Phone (Identifier, Optional)",
"New First Name": "New First Name",
"New Last Name": "New Last Name",
"New Email": "New Email",
"New Phone": "New Phone",
"New Notes": "New Notes",
"Client First Name": "Client First Name",
"Client Last Name": "Client Last Name",
"Client Email": "Client Email",
"Client Phone": "Client Phone",
"Min Date": "Min Date",
"Max Date": "Max Date",
"Appointment Status": "Appointment Status",
"Max Results": "Max Results",
"Sort Direction": "Sort Direction",
"Search Term": "Search Term",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"The start date and time for the block (ISO 8601 format).": "The start date and time for the block (ISO 8601 format).",
"The end date and time for the block (ISO 8601 format).": "The end date and time for the block (ISO 8601 format).",
"The numeric ID of the calendar to add this block to.": "The numeric ID of the calendar to add this block to.",
"Optional notes for the blocked off time.": "Optional notes for the blocked off time.",
"Date and time of the appointment.": "Date and time of the appointment.",
"Select the type of appointment.": "Select the type of appointment.",
"Client's first name.": "Client's first name.",
"Client's last name.": "Client's last name.",
"Client's email address. (Optional if booking as admin).": "Client's email address. (Optional if booking as admin).",
"Client's phone number.": "Client's phone number.",
"Client's timezone (e.g., America/New_York). Required for accurate availability checking.": "Client's timezone (e.g., America/New_York). Required for accurate availability checking.",
"Set to true to book as an admin. Disables availability/attribute validations, allows setting notes, and makes Calendar ID required.": "Set to true to book as an admin. Disables availability/attribute validations, allows setting notes, and makes Calendar ID required.",
"Numeric ID of the calendar. Required if booking as admin. If not provided, Acuity tries to find an available calendar automatically for non-admin bookings.": "Numeric ID of the calendar. Required if booking as admin. If not provided, Acuity tries to find an available calendar automatically for non-admin bookings.",
"If true, confirmation emails or SMS will not be sent.": "If true, confirmation emails or SMS will not be sent.",
"Package or coupon certificate code.": "Package or coupon certificate code.",
"Appointment notes. Only settable if booking as admin.": "Appointment notes. Only settable if booking as admin.",
"Indicates whether the client has explicitly given permission to receive SMS messages.": "Indicates whether the client has explicitly given permission to receive SMS messages.",
"Select addons for the appointment. Addons are filtered by selected Appointment Type if available.": "Select addons for the appointment. Addons are filtered by selected Appointment Type if available.",
"Apply a label to the appointment. The API currently supports one label.": "Apply a label to the appointment. The API currently supports one label.",
"Client's email address.": "Client's email address.",
"Notes about the client.": "Notes about the client.",
"The ID of the appointment to reschedule.": "The ID of the appointment to reschedule.",
"Select the type of appointment (used for finding new available slots).": "Select the type of appointment (used for finding new available slots).",
"New Date and time of the appointment.": "New Date and time of the appointment.",
"Client's timezone (e.g., America/New_York).": "Client's timezone (e.g., America/New_York).",
"Numeric ID of the new calendar to reschedule to. If blank, stays on current calendar. Submit 0 to auto-assign.": "Numeric ID of the new calendar to reschedule to. If blank, stays on current calendar. Submit 0 to auto-assign.",
"Set to true to reschedule as an admin. Disables availability validations.": "Set to true to reschedule as an admin. Disables availability validations.",
"If true, rescheduling emails or SMS will not be sent.": "If true, rescheduling emails or SMS will not be sent.",
"The current first name of the client to update.": "The current first name of the client to update.",
"The current last name of the client to update.": "The current last name of the client to update.",
"The current phone number of the client to update. Helps identify the client if names are not unique.": "The current phone number of the client to update. Helps identify the client if names are not unique.",
"Client's new first name. Leave blank to keep current.": "Client's new first name. Leave blank to keep current.",
"Client's new last name. Leave blank to keep current.": "Client's new last name. Leave blank to keep current.",
"Client's new email address. Leave blank to keep current.": "Client's new email address. Leave blank to keep current.",
"Client's new phone number. Leave blank to keep current.": "Client's new phone number. Leave blank to keep current.",
"New notes about the client. Leave blank to keep current.": "New notes about the client. Leave blank to keep current.",
"Filter appointments by client first name.": "Filter appointments by client first name.",
"Filter appointments by client last name.": "Filter appointments by client last name.",
"Filter appointments by client e-mail address.": "Filter appointments by client e-mail address.",
"Filter appointments by client phone number. URL encode '+' if using country codes (e.g., %2B1234567890).": "Filter appointments by client phone number. URL encode '+' if using country codes (e.g., %2B1234567890).",
"Only get appointments on or after this date.": "Only get appointments on or after this date.",
"Only get appointments on or before this date.": "Only get appointments on or before this date.",
"Show only appointments on the calendar with this ID.": "Show only appointments on the calendar with this ID.",
"Show only appointments of this type.": "Show only appointments of this type.",
"Filter by appointment status.": "Filter by appointment status.",
"Maximum number of results to return (default 100).": "Maximum number of results to return (default 100).",
"Sort direction for the results.": "Sort direction for the results.",
"Filter client list by first name, last name, or phone number.": "Filter client list by first name, last name, or phone number.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"Scheduled": "Scheduled",
"Canceled": "Canceled",
"All (Scheduled & Canceled)": "All (Scheduled & Canceled)",
"Descending (DESC)": "Descending (DESC)",
"Ascending (ASC)": "Ascending (ASC)",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"Appointment Canceled": "Appointment Canceled",
"New Appointment": "New Appointment",
"Triggers when an appointment is canceled.": "Triggers when an appointment is canceled.",
"Triggers when a new appointment is scheduled.": "Triggers when a new appointment is scheduled.",
"Calendar": "Calendar"
}

View File

@@ -0,0 +1,129 @@
{
"Acuity Scheduling": "Acuity Scheduling",
"Add Blocked Off Time": "Add Blocked Off Time",
"Create Appointment": "Create Appointment",
"Create Client": "Create Client",
"Reschedule Appointment": "Reschedule Appointment",
"Update Client": "Update Client",
"Find Appointment(s)": "Find Appointment(s)",
"Find Client": "Find Client",
"Custom API Call": "Custom API Call",
"Block off a specific time range on a calendar.": "Block off a specific time range on a calendar.",
"Creates a new appointment.": "Creates a new appointment.",
"Creates a new client.": "Creates a new client.",
"Reschedules an existing appointment to a new date/time.": "Reschedules an existing appointment to a new date/time.",
"Updates an existing client.": "Updates an existing client.",
"Find appointments based on various criteria, including client information.": "Find appointments based on various criteria, including client information.",
"Finds client based on seach term.": "Finds client based on seach term.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Start Time": "Start Time",
"End Time": "End Time",
"Calendar ID": "Calendar ID",
"Notes": "Notes",
"DateTime": "DateTime",
"Appointment Type": "Appointment Type",
"First Name": "First Name",
"Last Name": "Last Name",
"Email": "Email",
"Phone": "Phone",
"Timezone": "Timezone",
"Book as Admin": "Book as Admin",
"Suppress Confirmation Email/SMS": "Suppress Confirmation Email/SMS",
"Certificate Code": "Certificate Code",
"SMS Opt-In": "SMS Opt-In",
"Addons": "Addons",
"Label": "Label",
"Appointment ID": "Appointment ID",
"New Calendar ID": "New Calendar ID",
"Reschedule as Admin": "Reschedule as Admin",
"Suppress Rescheduling Email/SMS": "Suppress Rescheduling Email/SMS",
"Current First Name (Identifier)": "Current First Name (Identifier)",
"Current Last Name (Identifier)": "Current Last Name (Identifier)",
"Current Phone (Identifier, Optional)": "Current Phone (Identifier, Optional)",
"New First Name": "New First Name",
"New Last Name": "New Last Name",
"New Email": "New Email",
"New Phone": "New Phone",
"New Notes": "New Notes",
"Client First Name": "Client First Name",
"Client Last Name": "Client Last Name",
"Client Email": "Client Email",
"Client Phone": "Client Phone",
"Min Date": "Min Date",
"Max Date": "Max Date",
"Appointment Status": "Appointment Status",
"Max Results": "Max Results",
"Sort Direction": "Sort Direction",
"Search Term": "Search Term",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"The start date and time for the block (ISO 8601 format).": "The start date and time for the block (ISO 8601 format).",
"The end date and time for the block (ISO 8601 format).": "The end date and time for the block (ISO 8601 format).",
"The numeric ID of the calendar to add this block to.": "The numeric ID of the calendar to add this block to.",
"Optional notes for the blocked off time.": "Optional notes for the blocked off time.",
"Date and time of the appointment.": "Date and time of the appointment.",
"Select the type of appointment.": "Select the type of appointment.",
"Client's first name.": "Client's first name.",
"Client's last name.": "Client's last name.",
"Client's email address. (Optional if booking as admin).": "Client's email address. (Optional if booking as admin).",
"Client's phone number.": "Client's phone number.",
"Client's timezone (e.g., America/New_York). Required for accurate availability checking.": "Client's timezone (e.g., America/New_York). Required for accurate availability checking.",
"Set to true to book as an admin. Disables availability/attribute validations, allows setting notes, and makes Calendar ID required.": "Set to true to book as an admin. Disables availability/attribute validations, allows setting notes, and makes Calendar ID required.",
"Numeric ID of the calendar. Required if booking as admin. If not provided, Acuity tries to find an available calendar automatically for non-admin bookings.": "Numeric ID of the calendar. Required if booking as admin. If not provided, Acuity tries to find an available calendar automatically for non-admin bookings.",
"If true, confirmation emails or SMS will not be sent.": "If true, confirmation emails or SMS will not be sent.",
"Package or coupon certificate code.": "Package or coupon certificate code.",
"Appointment notes. Only settable if booking as admin.": "Appointment notes. Only settable if booking as admin.",
"Indicates whether the client has explicitly given permission to receive SMS messages.": "Indicates whether the client has explicitly given permission to receive SMS messages.",
"Select addons for the appointment. Addons are filtered by selected Appointment Type if available.": "Select addons for the appointment. Addons are filtered by selected Appointment Type if available.",
"Apply a label to the appointment. The API currently supports one label.": "Apply a label to the appointment. The API currently supports one label.",
"Client's email address.": "Client's email address.",
"Notes about the client.": "Notes about the client.",
"The ID of the appointment to reschedule.": "The ID of the appointment to reschedule.",
"Select the type of appointment (used for finding new available slots).": "Select the type of appointment (used for finding new available slots).",
"New Date and time of the appointment.": "New Date and time of the appointment.",
"Client's timezone (e.g., America/New_York).": "Client's timezone (e.g., America/New_York).",
"Numeric ID of the new calendar to reschedule to. If blank, stays on current calendar. Submit 0 to auto-assign.": "Numeric ID of the new calendar to reschedule to. If blank, stays on current calendar. Submit 0 to auto-assign.",
"Set to true to reschedule as an admin. Disables availability validations.": "Set to true to reschedule as an admin. Disables availability validations.",
"If true, rescheduling emails or SMS will not be sent.": "If true, rescheduling emails or SMS will not be sent.",
"The current first name of the client to update.": "The current first name of the client to update.",
"The current last name of the client to update.": "The current last name of the client to update.",
"The current phone number of the client to update. Helps identify the client if names are not unique.": "The current phone number of the client to update. Helps identify the client if names are not unique.",
"Client's new first name. Leave blank to keep current.": "Client's new first name. Leave blank to keep current.",
"Client's new last name. Leave blank to keep current.": "Client's new last name. Leave blank to keep current.",
"Client's new email address. Leave blank to keep current.": "Client's new email address. Leave blank to keep current.",
"Client's new phone number. Leave blank to keep current.": "Client's new phone number. Leave blank to keep current.",
"New notes about the client. Leave blank to keep current.": "New notes about the client. Leave blank to keep current.",
"Filter appointments by client first name.": "Filter appointments by client first name.",
"Filter appointments by client last name.": "Filter appointments by client last name.",
"Filter appointments by client e-mail address.": "Filter appointments by client e-mail address.",
"Filter appointments by client phone number. URL encode '+' if using country codes (e.g., %2B1234567890).": "Filter appointments by client phone number. URL encode '+' if using country codes (e.g., %2B1234567890).",
"Only get appointments on or after this date.": "Only get appointments on or after this date.",
"Only get appointments on or before this date.": "Only get appointments on or before this date.",
"Show only appointments on the calendar with this ID.": "Show only appointments on the calendar with this ID.",
"Show only appointments of this type.": "Show only appointments of this type.",
"Filter by appointment status.": "Filter by appointment status.",
"Maximum number of results to return (default 100).": "Maximum number of results to return (default 100).",
"Sort direction for the results.": "Sort direction for the results.",
"Filter client list by first name, last name, or phone number.": "Filter client list by first name, last name, or phone number.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"Scheduled": "Scheduled",
"Canceled": "Canceled",
"All (Scheduled & Canceled)": "All (Scheduled & Canceled)",
"Descending (DESC)": "Descending (DESC)",
"Ascending (ASC)": "Ascending (ASC)",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"Appointment Canceled": "Appointment Canceled",
"New Appointment": "New Appointment",
"Triggers when an appointment is canceled.": "Triggers when an appointment is canceled.",
"Triggers when a new appointment is scheduled.": "Triggers when a new appointment is scheduled.",
"Calendar": "Calendar"
}

View File

@@ -0,0 +1,130 @@
{
"Add Blocked Off Time": "Add Blocked Off Time",
"Create Appointment": "Create Appointment",
"Create Client": "Create Client",
"Reschedule Appointment": "Reschedule Appointment",
"Update Client": "Update Client",
"Find Appointment(s)": "Find Appointment(s)",
"Find Client": "Find Client",
"Custom API Call": "自定义 API 呼叫",
"Block off a specific time range on a calendar.": "Block off a specific time range on a calendar.",
"Creates a new appointment.": "Creates a new appointment.",
"Creates a new client.": "Creates a new client.",
"Reschedules an existing appointment to a new date/time.": "Reschedules an existing appointment to a new date/time.",
"Updates an existing client.": "Updates an existing client.",
"Find appointments based on various criteria, including client information.": "Find appointments based on various criteria, including client information.",
"Finds client based on seach term.": "Finds client based on seach term.",
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
"Start Time": "开始时间",
"End Time": "End Time",
"Calendar ID": "Calendar ID",
"Notes": "Notes",
"DateTime": "DateTime",
"Appointment Type": "Appointment Type",
"First Name": "名字",
"Last Name": "名字",
"Email": "电子邮件地址",
"Phone": "Phone",
"Timezone": "Timezone",
"Book as Admin": "Book as Admin",
"Suppress Confirmation Email/SMS": "Suppress Confirmation Email/SMS",
"Certificate Code": "Certificate Code",
"SMS Opt-In": "SMS Opt-In",
"Addons": "Addons",
"Label": "Label",
"Appointment ID": "Appointment ID",
"New Calendar ID": "New Calendar ID",
"Reschedule as Admin": "Reschedule as Admin",
"Suppress Rescheduling Email/SMS": "Suppress Rescheduling Email/SMS",
"Current First Name (Identifier)": "Current First Name (Identifier)",
"Current Last Name (Identifier)": "Current Last Name (Identifier)",
"Current Phone (Identifier, Optional)": "Current Phone (Identifier, Optional)",
"New First Name": "New First Name",
"New Last Name": "New Last Name",
"New Email": "New Email",
"New Phone": "New Phone",
"New Notes": "New Notes",
"Client First Name": "Client First Name",
"Client Last Name": "Client Last Name",
"Client Email": "Client Email",
"Client Phone": "Client Phone",
"Min Date": "Min Date",
"Max Date": "Max Date",
"Appointment Status": "Appointment Status",
"Max Results": "Max Results",
"Sort Direction": "Sort Direction",
"Search Term": "Search Term",
"Method": "方法",
"Headers": "信头",
"Query Parameters": "查询参数",
"Body": "正文内容",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "失败时没有错误",
"Timeout (in seconds)": "超时(秒)",
"The start date and time for the block (ISO 8601 format).": "The start date and time for the block (ISO 8601 format).",
"The end date and time for the block (ISO 8601 format).": "The end date and time for the block (ISO 8601 format).",
"The numeric ID of the calendar to add this block to.": "The numeric ID of the calendar to add this block to.",
"Optional notes for the blocked off time.": "Optional notes for the blocked off time.",
"Date and time of the appointment.": "Date and time of the appointment.",
"Select the type of appointment.": "Select the type of appointment.",
"Client's first name.": "Client's first name.",
"Client's last name.": "Client's last name.",
"Client's email address. (Optional if booking as admin).": "Client's email address. (Optional if booking as admin).",
"Client's phone number.": "Client's phone number.",
"Client's timezone (e.g., America/New_York). Required for accurate availability checking.": "Client's timezone (e.g., America/New_York). Required for accurate availability checking.",
"Set to true to book as an admin. Disables availability/attribute validations, allows setting notes, and makes Calendar ID required.": "Set to true to book as an admin. Disables availability/attribute validations, allows setting notes, and makes Calendar ID required.",
"Numeric ID of the calendar. Required if booking as admin. If not provided, Acuity tries to find an available calendar automatically for non-admin bookings.": "Numeric ID of the calendar. Required if booking as admin. If not provided, Acuity tries to find an available calendar automatically for non-admin bookings.",
"If true, confirmation emails or SMS will not be sent.": "If true, confirmation emails or SMS will not be sent.",
"Package or coupon certificate code.": "Package or coupon certificate code.",
"Appointment notes. Only settable if booking as admin.": "Appointment notes. Only settable if booking as admin.",
"Indicates whether the client has explicitly given permission to receive SMS messages.": "Indicates whether the client has explicitly given permission to receive SMS messages.",
"Select addons for the appointment. Addons are filtered by selected Appointment Type if available.": "Select addons for the appointment. Addons are filtered by selected Appointment Type if available.",
"Apply a label to the appointment. The API currently supports one label.": "Apply a label to the appointment. The API currently supports one label.",
"Client's email address.": "Client's email address.",
"Notes about the client.": "Notes about the client.",
"The ID of the appointment to reschedule.": "The ID of the appointment to reschedule.",
"Select the type of appointment (used for finding new available slots).": "Select the type of appointment (used for finding new available slots).",
"New Date and time of the appointment.": "New Date and time of the appointment.",
"Client's timezone (e.g., America/New_York).": "Client's timezone (e.g., America/New_York).",
"Numeric ID of the new calendar to reschedule to. If blank, stays on current calendar. Submit 0 to auto-assign.": "Numeric ID of the new calendar to reschedule to. If blank, stays on current calendar. Submit 0 to auto-assign.",
"Set to true to reschedule as an admin. Disables availability validations.": "Set to true to reschedule as an admin. Disables availability validations.",
"If true, rescheduling emails or SMS will not be sent.": "If true, rescheduling emails or SMS will not be sent.",
"The current first name of the client to update.": "The current first name of the client to update.",
"The current last name of the client to update.": "The current last name of the client to update.",
"The current phone number of the client to update. Helps identify the client if names are not unique.": "The current phone number of the client to update. Helps identify the client if names are not unique.",
"Client's new first name. Leave blank to keep current.": "Client's new first name. Leave blank to keep current.",
"Client's new last name. Leave blank to keep current.": "Client's new last name. Leave blank to keep current.",
"Client's new email address. Leave blank to keep current.": "Client's new email address. Leave blank to keep current.",
"Client's new phone number. Leave blank to keep current.": "Client's new phone number. Leave blank to keep current.",
"New notes about the client. Leave blank to keep current.": "New notes about the client. Leave blank to keep current.",
"Filter appointments by client first name.": "Filter appointments by client first name.",
"Filter appointments by client last name.": "Filter appointments by client last name.",
"Filter appointments by client e-mail address.": "Filter appointments by client e-mail address.",
"Filter appointments by client phone number. URL encode '+' if using country codes (e.g., %2B1234567890).": "Filter appointments by client phone number. URL encode '+' if using country codes (e.g., %2B1234567890).",
"Only get appointments on or after this date.": "Only get appointments on or after this date.",
"Only get appointments on or before this date.": "Only get appointments on or before this date.",
"Show only appointments on the calendar with this ID.": "Show only appointments on the calendar with this ID.",
"Show only appointments of this type.": "Show only appointments of this type.",
"Filter by appointment status.": "Filter by appointment status.",
"Maximum number of results to return (default 100).": "Maximum number of results to return (default 100).",
"Sort direction for the results.": "Sort direction for the results.",
"Filter client list by first name, last name, or phone number.": "Filter client list by first name, last name, or phone number.",
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"Scheduled": "Scheduled",
"Canceled": "Canceled",
"All (Scheduled & Canceled)": "All (Scheduled & Canceled)",
"Descending (DESC)": "Descending (DESC)",
"Ascending (ASC)": "Ascending (ASC)",
"GET": "获取",
"POST": "帖子",
"PATCH": "PATCH",
"PUT": "弹出",
"DELETE": "删除",
"HEAD": "黑色",
"Appointment Canceled": "Appointment Canceled",
"New Appointment": "New Appointment",
"Triggers when an appointment is canceled.": "Triggers when an appointment is canceled.",
"Triggers when a new appointment is scheduled.": "Triggers when a new appointment is scheduled.",
"Calendar": "Calendar"
}

View File

@@ -0,0 +1,49 @@
import { OAuth2PropertyValue, PieceAuth, createPiece } from '@activepieces/pieces-framework';
import {
addBlockedTimeAction,
createAppointmentAction,
createClientAction,
findAppointmentAction,
findClientAction,
rescheduleAppointmentAction,
updateClientAction,
} from './lib/actions';
import { PieceCategory } from '@activepieces/shared';
import { createCustomApiCallAction } from '@activepieces/pieces-common';
import { API_URL } from './lib/common';
import { appointmentCanceledTrigger, appointmentScheduledTrigger } from './lib/triggers';
export const acuitySchedulingAuth = PieceAuth.OAuth2({
required: true,
authUrl: 'https://acuityscheduling.com/oauth2/authorize',
tokenUrl: 'https://acuityscheduling.com/oauth2/token',
scope: ['api-v1'],
});
export const acuityScheduling = createPiece({
displayName: 'Acuity Scheduling',
logoUrl: 'https://cdn.activepieces.com/pieces/acuity-scheduling.png',
auth: acuitySchedulingAuth,
categories: [PieceCategory.PRODUCTIVITY, PieceCategory.SALES_AND_CRM],
minimumSupportedRelease: '0.36.1',
authors: ['onyedikachi-david', 'kishanprmr'],
actions: [
addBlockedTimeAction,
createAppointmentAction,
createClientAction,
rescheduleAppointmentAction,
updateClientAction,
findAppointmentAction,
findClientAction,
createCustomApiCallAction({
auth: acuitySchedulingAuth,
baseUrl: () => API_URL,
authMapping: async (auth) => {
return {
Authorization: `Bearer ${auth.access_token}`,
};
},
}),
],
triggers: [appointmentCanceledTrigger, appointmentScheduledTrigger],
});

View File

@@ -0,0 +1,62 @@
import { Property, createAction } from '@activepieces/pieces-framework';
import { AuthenticationType, HttpMethod, httpClient } from '@activepieces/pieces-common';
import { acuitySchedulingAuth } from '../../index';
import { API_URL } from '../common';
import { calendarIdDropdown } from '../common/props';
export const addBlockedTimeAction = createAction({
auth: acuitySchedulingAuth,
name: 'add_blocked_time',
displayName: 'Add Blocked Off Time',
description: 'Block off a specific time range on a calendar.',
props: {
start: Property.DateTime({
displayName: 'Start Time',
description: 'The start date and time for the block (ISO 8601 format).',
required: true,
}),
end: Property.DateTime({
displayName: 'End Time',
description: 'The end date and time for the block (ISO 8601 format).',
required: true,
}),
calendarID: calendarIdDropdown({
displayName: 'Calendar ID',
description: 'The numeric ID of the calendar to add this block to.',
required: true,
}),
notes: Property.LongText({
displayName: 'Notes',
description: 'Optional notes for the blocked off time.',
required: false,
}),
},
async run(context) {
const props = context.propsValue;
// Basic validation: end time must be after start time
if (new Date(props.start) >= new Date(props.end)) {
throw new Error('End time must be after start time.');
}
const body: Record<string, unknown> = {
start: props.start,
end: props.end,
calendarID: props.calendarID,
};
if (props.notes) body['notes'] = props.notes;
const response = await httpClient.sendRequest({
method: HttpMethod.POST,
url: `${API_URL}/blocks`,
body,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: context.auth.access_token,
},
});
return response.body;
},
});

View File

@@ -0,0 +1,156 @@
import { Property, createAction } from '@activepieces/pieces-framework';
import { AuthenticationType, HttpMethod, httpClient } from '@activepieces/pieces-common';
import { acuitySchedulingAuth } from '../../index';
import { API_URL } from '../common';
import {
addonIdsDropdown,
appointmentTypeIdDropdown,
calendarIdDropdown,
labelIdDropdown,
} from '../common/props';
export const createAppointmentAction = createAction({
auth: acuitySchedulingAuth,
name: 'create_appointment',
displayName: 'Create Appointment',
description: 'Creates a new appointment.',
props: {
datetime: Property.DateTime({
displayName: 'DateTime',
description: 'Date and time of the appointment.',
required: true,
}),
appointmentTypeID: appointmentTypeIdDropdown({
displayName: 'Appointment Type',
description: 'Select the type of appointment.',
required: true,
}),
firstName: Property.ShortText({
displayName: 'First Name',
description: "Client's first name.",
required: true,
}),
lastName: Property.ShortText({
displayName: 'Last Name',
description: "Client's last name.",
required: true,
}),
email: Property.ShortText({
displayName: 'Email',
description: "Client's email address. (Optional if booking as admin).",
required: false,
}),
phone: Property.ShortText({
displayName: 'Phone',
description: "Client's phone number.",
required: false,
}),
timezone: Property.ShortText({
displayName: 'Timezone',
description:
"Client's timezone (e.g., America/New_York). Required for accurate availability checking.",
required: true,
defaultValue: 'UTC',
}),
adminBooking: Property.Checkbox({
displayName: 'Book as Admin',
description:
'Set to true to book as an admin. Disables availability/attribute validations, allows setting notes, and makes Calendar ID required.',
required: false,
defaultValue: false,
}),
calendarID: calendarIdDropdown({
displayName: 'Calendar ID',
description:
'Numeric ID of the calendar. Required if booking as admin. If not provided, Acuity tries to find an available calendar automatically for non-admin bookings.',
required: false,
}),
noEmail: Property.Checkbox({
displayName: 'Suppress Confirmation Email/SMS',
description: 'If true, confirmation emails or SMS will not be sent.',
required: false,
defaultValue: false,
}),
certificate: Property.ShortText({
displayName: 'Certificate Code',
description: 'Package or coupon certificate code.',
required: false,
}),
notes: Property.LongText({
displayName: 'Notes',
description: 'Appointment notes. Only settable if booking as admin.',
required: false,
}),
smsOptIn: Property.Checkbox({
displayName: 'SMS Opt-In',
description:
'Indicates whether the client has explicitly given permission to receive SMS messages.',
required: false,
defaultValue: false,
}),
addonIDs: addonIdsDropdown({
displayName: 'Addons',
description:
'Select addons for the appointment. Addons are filtered by selected Appointment Type if available.',
required: false,
}),
labelId: labelIdDropdown({
displayName: 'Label',
description: 'Apply a label to the appointment. The API currently supports one label.',
required: false,
}),
},
async run(context) {
const props = context.propsValue;
const queryParams: Record<string, string> = {};
if (props.adminBooking) {
queryParams['admin'] = 'true';
}
if (props.noEmail) {
queryParams['noEmail'] = 'true';
}
const body: Record<string, unknown> = {
datetime: props.datetime,
appointmentTypeID: props.appointmentTypeID,
firstName: props.firstName,
lastName: props.lastName,
email: props.email,
};
if (props.calendarID) body['calendarID'] = props.calendarID;
if (props.phone) body['phone'] = props.phone;
if (props.timezone) body['timezone'] = props.timezone;
if (props.certificate) body['certificate'] = props.certificate;
if (props.adminBooking && props.notes) body['notes'] = props.notes;
if (props.smsOptIn) body['smsOptIn'] = props.smsOptIn;
if (props.addonIDs && props.addonIDs.length > 0) {
body['addonIDs'] = props.addonIDs;
}
if (props.labelId) {
body['labelID'] = [{ id: props.labelId }];
}
if (props.adminBooking && !props.calendarID) {
throw new Error('Calendar ID is required when booking as admin.');
}
if (props.adminBooking && props.email === '') {
delete body['email'];
}
const response = await httpClient.sendRequest({
method: HttpMethod.POST,
url: `${API_URL}/appointments`,
queryParams: queryParams,
body: body,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: context.auth.access_token,
},
});
return response.body;
},
});

Some files were not shown because too many files have changed in this diff Show More