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:
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"extends": [
|
||||
"../../../../.eslintrc.base.json"
|
||||
],
|
||||
"ignorePatterns": [
|
||||
"!**/*"
|
||||
],
|
||||
"overrides": [
|
||||
{
|
||||
"files": [
|
||||
"*.ts",
|
||||
"*.tsx",
|
||||
"*.js",
|
||||
"*.jsx"
|
||||
],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"*.ts",
|
||||
"*.tsx"
|
||||
],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"*.js",
|
||||
"*.jsx"
|
||||
],
|
||||
"rules": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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.
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "@activepieces/piece-acuity-scheduling",
|
||||
"version": "0.0.7"
|
||||
}
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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": "カレンダー"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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": "Календарь"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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],
|
||||
});
|
||||
@@ -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;
|
||||
},
|
||||
});
|
||||
@@ -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;
|
||||
},
|
||||
});
|
||||
@@ -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';
|
||||
|
||||
export const createClientAction = createAction({
|
||||
auth: acuitySchedulingAuth,
|
||||
name: 'create_client',
|
||||
displayName: 'Create Client',
|
||||
description: 'Creates a new client.',
|
||||
props: {
|
||||
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,
|
||||
}),
|
||||
phone: Property.ShortText({
|
||||
displayName: 'Phone',
|
||||
description: "Client's phone number.",
|
||||
required: false,
|
||||
}),
|
||||
email: Property.ShortText({
|
||||
displayName: 'Email',
|
||||
description: "Client's email address.",
|
||||
required: false,
|
||||
}),
|
||||
notes: Property.LongText({
|
||||
displayName: 'Notes',
|
||||
description: 'Notes about the client.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const props = context.propsValue;
|
||||
|
||||
const body: Record<string, unknown> = {
|
||||
firstName: props.firstName,
|
||||
lastName: props.lastName,
|
||||
};
|
||||
|
||||
if (props.phone) body['phone'] = props.phone;
|
||||
if (props.email) body['email'] = props.email;
|
||||
if (props.notes) body['notes'] = props.notes;
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${API_URL}/clients`,
|
||||
body,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,146 @@
|
||||
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 { appointmentTypeIdDropdown, calendarIdDropdown } from '../common/props';
|
||||
|
||||
export const findAppointmentAction = createAction({
|
||||
auth: acuitySchedulingAuth,
|
||||
name: 'find_appointment',
|
||||
displayName: 'Find Appointment(s)',
|
||||
description: 'Find appointments based on various criteria, including client information.',
|
||||
props: {
|
||||
// Client Info Filters
|
||||
firstName: Property.ShortText({
|
||||
displayName: 'Client First Name',
|
||||
description: 'Filter appointments by client first name.',
|
||||
required: false,
|
||||
}),
|
||||
lastName: Property.ShortText({
|
||||
displayName: 'Client Last Name',
|
||||
description: 'Filter appointments by client last name.',
|
||||
required: false,
|
||||
}),
|
||||
email: Property.ShortText({
|
||||
displayName: 'Client Email',
|
||||
description: 'Filter appointments by client e-mail address.',
|
||||
required: false,
|
||||
}),
|
||||
phone: Property.ShortText({
|
||||
displayName: 'Client Phone',
|
||||
description:
|
||||
"Filter appointments by client phone number. URL encode '+' if using country codes (e.g., %2B1234567890).",
|
||||
required: false,
|
||||
}),
|
||||
// Date Filters
|
||||
minDate: Property.DateTime({
|
||||
displayName: 'Min Date',
|
||||
description: 'Only get appointments on or after this date.',
|
||||
required: false,
|
||||
}),
|
||||
maxDate: Property.DateTime({
|
||||
displayName: 'Max Date',
|
||||
description: 'Only get appointments on or before this date.',
|
||||
required: false,
|
||||
}),
|
||||
// Other Filters
|
||||
calendarID: calendarIdDropdown({
|
||||
displayName: 'Calendar ID',
|
||||
description: 'Show only appointments on the calendar with this ID.',
|
||||
required: false,
|
||||
}),
|
||||
appointmentTypeID: appointmentTypeIdDropdown({
|
||||
displayName: 'Appointment Type',
|
||||
description: 'Show only appointments of this type.',
|
||||
required: false,
|
||||
}),
|
||||
status: Property.StaticDropdown({
|
||||
displayName: 'Appointment Status',
|
||||
description: 'Filter by appointment status.',
|
||||
required: false,
|
||||
defaultValue: 'scheduled',
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Scheduled', value: 'scheduled' },
|
||||
{ label: 'Canceled', value: 'canceled' },
|
||||
{ label: 'All (Scheduled & Canceled)', value: 'all' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
// Result Control
|
||||
maxResults: Property.Number({
|
||||
displayName: 'Max Results',
|
||||
description: 'Maximum number of results to return (default 100).',
|
||||
required: false,
|
||||
}),
|
||||
direction: Property.StaticDropdown({
|
||||
displayName: 'Sort Direction',
|
||||
description: 'Sort direction for the results.',
|
||||
required: false,
|
||||
defaultValue: 'DESC',
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Descending (DESC)', value: 'DESC' },
|
||||
{ label: 'Ascending (ASC)', value: 'ASC' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const props = context.propsValue;
|
||||
|
||||
const queryParams: Record<string, string> = {};
|
||||
|
||||
if (props.firstName) queryParams['firstName'] = props.firstName;
|
||||
if (props.lastName) queryParams['lastName'] = props.lastName;
|
||||
if (props.email) queryParams['email'] = props.email;
|
||||
if (props.phone) queryParams['phone'] = props.phone;
|
||||
|
||||
// Dates are expected in YYYY-MM-DD by Acuity from examples, Property.DateTime returns ISO string
|
||||
if (props.minDate) queryParams['minDate'] = props.minDate.split('T')[0];
|
||||
if (props.maxDate) queryParams['maxDate'] = props.maxDate.split('T')[0];
|
||||
|
||||
if (props.calendarID) queryParams['calendarID'] = props.calendarID.toString();
|
||||
if (props.appointmentTypeID)
|
||||
queryParams['appointmentTypeID'] = props.appointmentTypeID.toString();
|
||||
|
||||
if (props.status === 'canceled') {
|
||||
queryParams['canceled'] = 'true';
|
||||
} else if (props.status === 'all') {
|
||||
queryParams['showall'] = 'true';
|
||||
} // 'scheduled' is default, no param needed
|
||||
|
||||
if (props.maxResults) queryParams['max'] = props.maxResults.toString();
|
||||
if (props.direction) queryParams['direction'] = props.direction;
|
||||
|
||||
// Ensure at least one client identifier or a broad filter like calendarID/appointmentTypeID is used to avoid fetching all appointments if not intended.
|
||||
// This is a soft validation suggestion for the user, not a hard error.
|
||||
if (
|
||||
!props.firstName &&
|
||||
!props.lastName &&
|
||||
!props.email &&
|
||||
!props.phone &&
|
||||
!props.calendarID &&
|
||||
!props.appointmentTypeID
|
||||
) {
|
||||
console.warn(
|
||||
"Acuity Scheduling 'Find Appointments': No specific client or calendar/type filters provided. This might return a large number of appointments up to the maximum limit.",
|
||||
);
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest<Array<Record<string, any>>>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${API_URL}/appointments`,
|
||||
queryParams,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
found: response.body.length > 0,
|
||||
data: response.body,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,41 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { AuthenticationType, HttpMethod, httpClient } from '@activepieces/pieces-common';
|
||||
import { acuitySchedulingAuth } from '../../index';
|
||||
import { API_URL } from '../common';
|
||||
|
||||
export const findClientAction = createAction({
|
||||
auth: acuitySchedulingAuth,
|
||||
name: 'find_client',
|
||||
displayName: 'Find Client',
|
||||
description: 'Finds client based on seach term.',
|
||||
props: {
|
||||
search: Property.ShortText({
|
||||
displayName: 'Search Term',
|
||||
description: 'Filter client list by first name, last name, or phone number.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const props = context.propsValue;
|
||||
|
||||
const queryParams: Record<string, string> = {};
|
||||
if (props.search) {
|
||||
queryParams['search'] = props.search;
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest<Array<Record<string, any>>>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${API_URL}/clients`,
|
||||
queryParams,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
found: response.body.length > 0,
|
||||
data: response.body,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,7 @@
|
||||
export * from './create-appointment';
|
||||
export * from './reschedule-appointment';
|
||||
export * from './create-client';
|
||||
export * from './update-client';
|
||||
export * from './add-blocked-time';
|
||||
export * from './find-appointments';
|
||||
export * from './find-client';
|
||||
@@ -0,0 +1,89 @@
|
||||
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 { appointmentTypeIdDropdown, calendarIdDropdown } from '../common/props';
|
||||
|
||||
export const rescheduleAppointmentAction = createAction({
|
||||
auth: acuitySchedulingAuth,
|
||||
name: 'reschedule_appointment',
|
||||
displayName: 'Reschedule Appointment',
|
||||
description: 'Reschedules an existing appointment to a new date/time.',
|
||||
props: {
|
||||
id: Property.Number({
|
||||
displayName: 'Appointment ID',
|
||||
description: 'The ID of the appointment to reschedule.',
|
||||
required: true,
|
||||
}),
|
||||
appointmentTypeID: appointmentTypeIdDropdown({
|
||||
displayName: 'Appointment Type',
|
||||
description: 'Select the type of appointment (used for finding new available slots).',
|
||||
required: true,
|
||||
}),
|
||||
datetime: Property.DateTime({
|
||||
displayName: 'DateTime',
|
||||
description: 'New Date and time of the appointment.',
|
||||
required: true,
|
||||
}),
|
||||
timezone: Property.ShortText({
|
||||
displayName: 'Timezone',
|
||||
description: "Client's timezone (e.g., America/New_York).",
|
||||
required: true,
|
||||
defaultValue: 'UTC',
|
||||
}),
|
||||
calendarID: calendarIdDropdown({
|
||||
displayName: 'New Calendar ID',
|
||||
description:
|
||||
'Numeric ID of the new calendar to reschedule to. If blank, stays on current calendar. Submit 0 to auto-assign.',
|
||||
required: false,
|
||||
}),
|
||||
adminReschedule: Property.Checkbox({
|
||||
displayName: 'Reschedule as Admin',
|
||||
description: 'Set to true to reschedule as an admin. Disables availability validations.',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
noEmail: Property.Checkbox({
|
||||
displayName: 'Suppress Rescheduling Email/SMS',
|
||||
description: 'If true, rescheduling emails or SMS will not be sent.',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const props = context.propsValue;
|
||||
|
||||
const queryParams: Record<string, string> = {};
|
||||
if (props.adminReschedule) {
|
||||
queryParams['admin'] = 'true';
|
||||
}
|
||||
if (props.noEmail) {
|
||||
queryParams['noEmail'] = 'true';
|
||||
}
|
||||
|
||||
const body: Record<string, unknown> = {
|
||||
datetime: props.datetime,
|
||||
};
|
||||
|
||||
if (props.calendarID !== undefined) {
|
||||
// Allow 0 for auto-assign
|
||||
body['calendarID'] = props.calendarID === 0 ? null : props.calendarID;
|
||||
}
|
||||
if (props.timezone) {
|
||||
body['timezone'] = props.timezone;
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.PUT,
|
||||
url: `${API_URL}/appointments/${props.id}/reschedule`,
|
||||
queryParams,
|
||||
body,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,91 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { AuthenticationType, HttpMethod, httpClient } from '@activepieces/pieces-common';
|
||||
import { acuitySchedulingAuth } from '../../index';
|
||||
import { API_URL } from '../common';
|
||||
|
||||
export const updateClientAction = createAction({
|
||||
auth: acuitySchedulingAuth,
|
||||
name: 'update_client',
|
||||
displayName: 'Update Client',
|
||||
description: 'Updates an existing client.',
|
||||
props: {
|
||||
currentFirstName: Property.ShortText({
|
||||
displayName: 'Current First Name (Identifier)',
|
||||
description: 'The current first name of the client to update.',
|
||||
required: true,
|
||||
}),
|
||||
currentLastName: Property.ShortText({
|
||||
displayName: 'Current Last Name (Identifier)',
|
||||
description: 'The current last name of the client to update.',
|
||||
required: true,
|
||||
}),
|
||||
currentPhone: Property.ShortText({
|
||||
displayName: 'Current Phone (Identifier, Optional)',
|
||||
description:
|
||||
'The current phone number of the client to update. Helps identify the client if names are not unique.',
|
||||
required: false,
|
||||
}),
|
||||
newFirstName: Property.ShortText({
|
||||
displayName: 'New First Name',
|
||||
description: "Client's new first name. Leave blank to keep current.",
|
||||
required: false,
|
||||
}),
|
||||
newLastName: Property.ShortText({
|
||||
displayName: 'New Last Name',
|
||||
description: "Client's new last name. Leave blank to keep current.",
|
||||
required: false,
|
||||
}),
|
||||
newEmail: Property.ShortText({
|
||||
displayName: 'New Email',
|
||||
description: "Client's new email address. Leave blank to keep current.",
|
||||
required: false,
|
||||
}),
|
||||
newPhone: Property.ShortText({
|
||||
displayName: 'New Phone',
|
||||
description: "Client's new phone number. Leave blank to keep current.",
|
||||
required: false,
|
||||
}),
|
||||
newNotes: Property.LongText({
|
||||
displayName: 'New Notes',
|
||||
description: 'New notes about the client. Leave blank to keep current.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const props = context.propsValue;
|
||||
|
||||
const queryParams: Record<string, string> = {
|
||||
firstName: props.currentFirstName,
|
||||
lastName: props.currentLastName,
|
||||
};
|
||||
if (props.currentPhone) {
|
||||
queryParams['phone'] = props.currentPhone;
|
||||
}
|
||||
|
||||
const body: Record<string, unknown> = {};
|
||||
if (props.newFirstName) body['firstName'] = props.newFirstName;
|
||||
if (props.newLastName) body['lastName'] = props.newLastName;
|
||||
if (props.newEmail) body['email'] = props.newEmail;
|
||||
if (props.newPhone) body['phone'] = props.newPhone;
|
||||
if (props.newNotes) body['notes'] = props.newNotes;
|
||||
|
||||
if (Object.keys(body).length === 0) {
|
||||
throw new Error(
|
||||
'At least one field to update (New First Name, New Last Name, etc.) must be provided.',
|
||||
);
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.PUT,
|
||||
url: `${API_URL}/clients`,
|
||||
queryParams,
|
||||
body,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,232 @@
|
||||
import {
|
||||
HttpMethod,
|
||||
httpClient,
|
||||
HttpRequest,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
|
||||
export const API_URL = 'https://acuityscheduling.com/api/v1';
|
||||
|
||||
export async function fetchAvailableDates(
|
||||
accessToken: string,
|
||||
appointmentTypeId: number,
|
||||
month: string,
|
||||
timezone?: string,
|
||||
calendarId?: number,
|
||||
) {
|
||||
const queryParams: Record<string, string> = {
|
||||
month,
|
||||
appointmentTypeID: appointmentTypeId.toString(),
|
||||
};
|
||||
|
||||
if (timezone) queryParams['timezone'] = timezone;
|
||||
if (calendarId) queryParams['calendarID'] = calendarId.toString();
|
||||
|
||||
const response = await httpClient.sendRequest<Array<{ date: string }>>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${API_URL}/availability/dates`,
|
||||
queryParams,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: accessToken,
|
||||
},
|
||||
});
|
||||
|
||||
if (Array.isArray(response.body)) {
|
||||
return response.body.map((item) => item.date);
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
export async function fetchAvailableTimes(
|
||||
accessToken: string,
|
||||
appointmentTypeId: number,
|
||||
date: string,
|
||||
timezone?: string,
|
||||
calendarId?: number,
|
||||
ignoreAppointmentIDs?: number[],
|
||||
) {
|
||||
const params = new URLSearchParams();
|
||||
params.append('date', date);
|
||||
params.append('appointmentTypeID', appointmentTypeId.toString());
|
||||
|
||||
if (timezone) params.append('timezone', timezone);
|
||||
if (calendarId) params.append('calendarID', calendarId.toString());
|
||||
if (ignoreAppointmentIDs && ignoreAppointmentIDs.length > 0) {
|
||||
ignoreAppointmentIDs.forEach((id) => params.append('ignoreAppointmentIDs[]', id.toString()));
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest<Array<{ time: string; datetime: string }>>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${API_URL}/availability/times?${params.toString()}`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: accessToken,
|
||||
},
|
||||
});
|
||||
|
||||
return response.body;
|
||||
}
|
||||
|
||||
// Helper function to get full appointment details
|
||||
export async function getAppointmentDetails(appointmentId: string, accessToken: string) {
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.GET,
|
||||
url: `${API_URL}/appointments/${appointmentId}`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: accessToken,
|
||||
},
|
||||
};
|
||||
const response = await httpClient.sendRequest(request);
|
||||
return response.body;
|
||||
}
|
||||
|
||||
export async function fetchAppointmentTypes(accessToken: string, includeDeleted = false) {
|
||||
const queryParams: Record<string, string> = {};
|
||||
if (includeDeleted) {
|
||||
queryParams['includeDeleted'] = 'true';
|
||||
}
|
||||
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.GET,
|
||||
url: `${API_URL}/appointment-types`,
|
||||
queryParams,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: accessToken,
|
||||
},
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest<
|
||||
Array<{ id: number; name: string; active: boolean | string }>
|
||||
>(request);
|
||||
|
||||
if (Array.isArray(response.body)) {
|
||||
// Filter for active types unless includeDeleted is true, and map to dropdown options
|
||||
return response.body
|
||||
.filter((type) => includeDeleted || type.active === true || type.active === 'true')
|
||||
.map((type) => ({ label: type.name, value: type.id }));
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
export async function fetchCalendars(accessToken: string) {
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.GET,
|
||||
url: `${API_URL}/calendars`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: accessToken,
|
||||
},
|
||||
};
|
||||
const response = await httpClient.sendRequest<Array<{ id: number; name: string }>>(request);
|
||||
|
||||
if (Array.isArray(response.body)) {
|
||||
return response.body.map((calendar) => ({ label: calendar.name, value: calendar.id }));
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
export async function fetchFormFields(accessToken: string) {
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.GET,
|
||||
url: `${API_URL}/forms`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: accessToken,
|
||||
},
|
||||
};
|
||||
const response = await httpClient.sendRequest<
|
||||
Array<{ id: number; name: string; fields: Array<{ id: number; name: string }> }>
|
||||
>(request);
|
||||
|
||||
if (Array.isArray(response.body)) {
|
||||
const formFields: Array<{ label: string; value: number }> = [];
|
||||
response.body.forEach((form) => {
|
||||
if (Array.isArray(form.fields)) {
|
||||
form.fields.forEach((field) => {
|
||||
formFields.push({ label: `${form.name} - ${field.name}`, value: field.id });
|
||||
});
|
||||
}
|
||||
});
|
||||
return formFields;
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
export async function fetchAddons(accessToken: string, appointmentTypeId?: number) {
|
||||
// First, fetch all addons
|
||||
const allAddonsRequest: HttpRequest = {
|
||||
method: HttpMethod.GET,
|
||||
url: `${API_URL}/appointment-addons`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: accessToken,
|
||||
},
|
||||
};
|
||||
const allAddonsResponse = await httpClient.sendRequest<Array<{ id: number; name: string }>>(
|
||||
allAddonsRequest,
|
||||
);
|
||||
|
||||
if (!Array.isArray(allAddonsResponse.body)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
let compatibleAddonIds: number[] | null = null;
|
||||
|
||||
// If appointmentTypeId is provided, fetch the specific appointment type to get its compatible addonIDs
|
||||
if (appointmentTypeId) {
|
||||
const appointmentTypeRequest: HttpRequest = {
|
||||
method: HttpMethod.GET,
|
||||
url: `${API_URL}/appointment-types/${appointmentTypeId}`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: accessToken,
|
||||
},
|
||||
};
|
||||
try {
|
||||
const appointmentTypeResponse = await httpClient.sendRequest<{ addonIDs: number[] }>(
|
||||
appointmentTypeRequest,
|
||||
);
|
||||
if (appointmentTypeResponse.body && Array.isArray(appointmentTypeResponse.body.addonIDs)) {
|
||||
compatibleAddonIds = appointmentTypeResponse.body.addonIDs;
|
||||
}
|
||||
} catch (e) {
|
||||
// Log error or handle if type not found, but still proceed with all addons if necessary
|
||||
console.warn(
|
||||
`Could not fetch compatible addons for appointment type ${appointmentTypeId}, returning all addons. Error: ${e}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const allAddons = allAddonsResponse.body.map((addon) => ({ label: addon.name, value: addon.id }));
|
||||
|
||||
if (compatibleAddonIds) {
|
||||
return allAddons.filter((addon) => compatibleAddonIds.includes(addon.value));
|
||||
}
|
||||
|
||||
return allAddons;
|
||||
}
|
||||
|
||||
export async function fetchLabels(accessToken: string) {
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.GET,
|
||||
url: `${API_URL}/labels`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: accessToken,
|
||||
},
|
||||
};
|
||||
const response = await httpClient.sendRequest<Array<{ id: number; name: string; color: string }>>(
|
||||
request,
|
||||
);
|
||||
|
||||
if (Array.isArray(response.body)) {
|
||||
return response.body.map((label) => ({
|
||||
label: `${label.name} (${label.color})`,
|
||||
value: label.id,
|
||||
}));
|
||||
}
|
||||
return [];
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
import { OAuth2PropertyValue, Property } from '@activepieces/pieces-framework';
|
||||
import { fetchAddons, fetchAppointmentTypes, fetchCalendars, fetchLabels } from '.';
|
||||
import { acuitySchedulingAuth } from '../..';
|
||||
|
||||
interface DropdownParams {
|
||||
displayName: string;
|
||||
description?: string;
|
||||
required: boolean;
|
||||
}
|
||||
|
||||
export const appointmentTypeIdDropdown = (params: DropdownParams) =>
|
||||
Property.Dropdown({
|
||||
auth: acuitySchedulingAuth,
|
||||
displayName: params.displayName,
|
||||
description: params.description,
|
||||
required: params.required,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Please authenticate first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
const { access_token } = auth as OAuth2PropertyValue;
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: await fetchAppointmentTypes(access_token),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const calendarIdDropdown = (params: DropdownParams) =>
|
||||
Property.Dropdown({
|
||||
auth: acuitySchedulingAuth,
|
||||
displayName: params.displayName,
|
||||
description: params.description,
|
||||
required: params.required,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Please authenticate first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
const { access_token } = auth as OAuth2PropertyValue;
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: await fetchCalendars(access_token),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const addonIdsDropdown = (params: DropdownParams) =>
|
||||
Property.MultiSelectDropdown({
|
||||
auth: acuitySchedulingAuth,
|
||||
displayName: params.displayName,
|
||||
description: params.description,
|
||||
required: params.required,
|
||||
refreshers: ['appointmentTypeID'],
|
||||
options: async ({ auth, appointmentTypeID }) => {
|
||||
if (!auth || !appointmentTypeID) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Please authenticate first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
const { access_token } = auth as OAuth2PropertyValue;
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: await fetchAddons(access_token, appointmentTypeID as number),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const labelIdDropdown = (params: DropdownParams) =>
|
||||
Property.Dropdown({
|
||||
auth: acuitySchedulingAuth,
|
||||
displayName: params.displayName,
|
||||
description: params.description,
|
||||
required: params.required,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Please authenticate first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
const { access_token } = auth as OAuth2PropertyValue;
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: await fetchLabels(access_token),
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,136 @@
|
||||
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
AuthenticationType,
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
HttpRequest,
|
||||
QueryParams,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { acuitySchedulingAuth } from '../../index';
|
||||
import { API_URL, getAppointmentDetails } from '../common';
|
||||
import { appointmentTypeIdDropdown, calendarIdDropdown } from '../common/props';
|
||||
|
||||
const TRIGGER_KEY = 'trigger_appointment_canceled';
|
||||
|
||||
export const appointmentCanceledTrigger = createTrigger({
|
||||
auth: acuitySchedulingAuth,
|
||||
name: 'appointment_canceled',
|
||||
displayName: 'Appointment Canceled',
|
||||
description: 'Triggers when an appointment is canceled.',
|
||||
props: {
|
||||
calendarId: calendarIdDropdown({
|
||||
displayName: 'Calendar',
|
||||
required: false,
|
||||
}),
|
||||
appointmentTypeId: appointmentTypeIdDropdown({
|
||||
displayName: 'Appointment Type',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
async onEnable(context) {
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.POST,
|
||||
url: `${API_URL}/webhooks`,
|
||||
body: {
|
||||
target: context.webhookUrl,
|
||||
event: 'appointment.canceled',
|
||||
},
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
};
|
||||
const response = await httpClient.sendRequest<{ id: string }>(request);
|
||||
await context.store.put<string>(TRIGGER_KEY, response.body.id);
|
||||
},
|
||||
async onDisable(context) {
|
||||
const webhookId = await context.store.get<string>(TRIGGER_KEY);
|
||||
if (webhookId) {
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.DELETE,
|
||||
url: `${API_URL}/webhooks/${webhookId}`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
};
|
||||
await httpClient.sendRequest(request);
|
||||
await context.store.delete(TRIGGER_KEY);
|
||||
}
|
||||
},
|
||||
async test(context) {
|
||||
const { calendarId, appointmentTypeId } = context.propsValue;
|
||||
|
||||
const qs: QueryParams = {
|
||||
max: '10',
|
||||
canceled: 'true',
|
||||
};
|
||||
|
||||
if (calendarId) qs['calendarID'] = calendarId.toString();
|
||||
if (appointmentTypeId) qs['appointmentTypeID'] = appointmentTypeId.toString();
|
||||
|
||||
const response = await httpClient.sendRequest<Array<Record<string, any>>>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${API_URL}/appointments`,
|
||||
queryParams: qs,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
async run(context) {
|
||||
const { calendarId, appointmentTypeId } = context.propsValue;
|
||||
|
||||
const payload = context.payload.body as {
|
||||
action: string;
|
||||
id: number;
|
||||
calendarID: number;
|
||||
appointmentTypeID: number;
|
||||
};
|
||||
|
||||
// Check for 'canceled' action
|
||||
if (
|
||||
payload.action === 'appointment.canceled' &&
|
||||
payload.id &&
|
||||
(!calendarId || calendarId === payload.calendarID) &&
|
||||
(!appointmentTypeId || appointmentTypeId === payload.appointmentTypeID)
|
||||
) {
|
||||
try {
|
||||
const appointmentDetails = await getAppointmentDetails(
|
||||
payload.id.toString(),
|
||||
context.auth.access_token,
|
||||
);
|
||||
return [appointmentDetails];
|
||||
} catch (error) {
|
||||
console.error(`Failed to fetch appointment details for ID ${payload.id}:`, error);
|
||||
return [];
|
||||
}
|
||||
} else {
|
||||
console.log('Received webhook for non-canceled event or missing ID:', payload.action);
|
||||
return [];
|
||||
}
|
||||
},
|
||||
sampleData: {
|
||||
id: 67890,
|
||||
firstName: 'Jane',
|
||||
lastName: 'Smith',
|
||||
email: 'jane.smith@example.com',
|
||||
phone: '555-5678',
|
||||
date: '2023-12-05',
|
||||
time: '02:00 PM',
|
||||
datetime: '2023-12-05T14:00:00-0500',
|
||||
endTime: '03:00 PM',
|
||||
datetimeCreated: '2023-11-30T10:15:00-0500',
|
||||
appointmentTypeID: 102,
|
||||
calendarID: 2,
|
||||
notes: 'Follow-up meeting.',
|
||||
price: '75.00',
|
||||
paid: 'no',
|
||||
status: 'canceled',
|
||||
noShow: false,
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,132 @@
|
||||
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
AuthenticationType,
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
HttpRequest,
|
||||
QueryParams,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { acuitySchedulingAuth } from '../../index';
|
||||
import { API_URL, getAppointmentDetails } from '../common';
|
||||
import { appointmentTypeIdDropdown, calendarIdDropdown } from '../common/props';
|
||||
|
||||
const TRIGGER_KEY = 'trigger_new_appointment';
|
||||
|
||||
export const appointmentScheduledTrigger = createTrigger({
|
||||
auth: acuitySchedulingAuth,
|
||||
name: 'new_appointment',
|
||||
displayName: 'New Appointment',
|
||||
description: 'Triggers when a new appointment is scheduled.',
|
||||
props: {
|
||||
calendarId: calendarIdDropdown({
|
||||
displayName: 'Calendar',
|
||||
required: false,
|
||||
}),
|
||||
appointmentTypeId: appointmentTypeIdDropdown({
|
||||
displayName: 'Appointment Type',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
async onEnable(context) {
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.POST,
|
||||
url: `${API_URL}/webhooks`,
|
||||
body: {
|
||||
target: context.webhookUrl,
|
||||
event: 'appointment.scheduled',
|
||||
},
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
};
|
||||
const response = await httpClient.sendRequest<{ id: string }>(request);
|
||||
await context.store.put(TRIGGER_KEY, response.body.id);
|
||||
},
|
||||
async onDisable(context) {
|
||||
const webhookId = await context.store.get<string>(TRIGGER_KEY);
|
||||
if (webhookId) {
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.DELETE,
|
||||
url: `${API_URL}/webhooks/${webhookId}`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
};
|
||||
await httpClient.sendRequest(request);
|
||||
await context.store.delete(TRIGGER_KEY);
|
||||
}
|
||||
},
|
||||
async test(context) {
|
||||
const { calendarId, appointmentTypeId } = context.propsValue;
|
||||
|
||||
const qs: QueryParams = {
|
||||
max: '10',
|
||||
};
|
||||
|
||||
if (calendarId) qs['calendarID'] = calendarId.toString();
|
||||
if (appointmentTypeId) qs['appointmentTypeID'] = appointmentTypeId.toString();
|
||||
|
||||
const response = await httpClient.sendRequest<Array<Record<string, any>>>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${API_URL}/appointments`,
|
||||
queryParams: qs,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
async run(context) {
|
||||
const { calendarId, appointmentTypeId } = context.propsValue;
|
||||
|
||||
const payload = context.payload.body as {
|
||||
action: string;
|
||||
id: number;
|
||||
calendarID: number;
|
||||
appointmentTypeID: number;
|
||||
};
|
||||
if (
|
||||
payload.action === 'appointment.scheduled' &&
|
||||
payload.id &&
|
||||
(!calendarId || calendarId === payload.calendarID) &&
|
||||
(!appointmentTypeId || appointmentTypeId === payload.appointmentTypeID)
|
||||
) {
|
||||
try {
|
||||
const appointmentDetails = await getAppointmentDetails(
|
||||
payload.id.toString(),
|
||||
context.auth.access_token,
|
||||
);
|
||||
return [appointmentDetails];
|
||||
} catch (error) {
|
||||
console.error(`Failed to fetch appointment details for ID ${payload.id}:`, error);
|
||||
return [];
|
||||
}
|
||||
} else {
|
||||
console.log('Received webhook for non-scheduled event or missing ID:', payload.action);
|
||||
return [];
|
||||
}
|
||||
},
|
||||
sampleData: {
|
||||
id: 12345,
|
||||
firstName: 'John',
|
||||
lastName: 'Doe',
|
||||
email: 'john.doe@example.com',
|
||||
phone: '555-1234',
|
||||
date: '2023-12-01',
|
||||
time: '10:00 AM',
|
||||
datetime: '2023-12-01T10:00:00-0500',
|
||||
endTime: '11:00 AM',
|
||||
datetimeCreated: '2023-11-28T14:30:00-0500',
|
||||
appointmentTypeID: 101,
|
||||
calendarID: 1,
|
||||
notes: 'First appointment.',
|
||||
price: '50.00',
|
||||
paid: 'yes',
|
||||
status: 'scheduled',
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,2 @@
|
||||
export * from './appointment-scheduled';
|
||||
export * from './appointment-canceled'
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"extends": "../../../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"noImplicitOverride": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noPropertyAccessFromIndexSignature": true
|
||||
},
|
||||
"files": [],
|
||||
"include": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.lib.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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"]
|
||||
}
|
||||
Reference in New Issue
Block a user