Add Activepieces integration for workflow automation

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

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

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

View File

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

View File

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

View File

@@ -0,0 +1,10 @@
{
"name": "@activepieces/piece-bigin-by-zoho",
"version": "0.0.6",
"type": "commonjs",
"main": "./src/index.js",
"types": "./src/index.d.ts",
"dependencies": {
"tslib": "^2.3.0"
}
}

View File

@@ -0,0 +1,65 @@
{
"name": "pieces-bigin-by-zoho",
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "packages/pieces/community/bigin-by-zoho/src",
"projectType": "library",
"release": {
"version": {
"manifestRootsToUpdate": [
"dist/{projectRoot}"
],
"currentVersionResolver": "git-tag",
"fallbackCurrentVersionResolver": "disk"
}
},
"tags": [],
"targets": {
"build": {
"executor": "@nx/js:tsc",
"outputs": [
"{options.outputPath}"
],
"options": {
"outputPath": "dist/packages/pieces/community/bigin-by-zoho",
"tsConfig": "packages/pieces/community/bigin-by-zoho/tsconfig.lib.json",
"packageJson": "packages/pieces/community/bigin-by-zoho/package.json",
"main": "packages/pieces/community/bigin-by-zoho/src/index.ts",
"assets": [
"packages/pieces/community/bigin-by-zoho/*.md",
{
"input": "packages/pieces/community/bigin-by-zoho/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/bigin-by-zoho",
"command": "bun install --no-save --silent"
},
"dependsOn": [
"^build"
]
}
}
}

View File

@@ -0,0 +1,250 @@
{
"Bigin by Zoho CRM is a lightweight CRM designed for small businesses to manage contacts, companies, deals (pipeline records), tasks, calls, and events.": "Bigin von Zoho CRM ist ein leichtes CRM, das für kleine Unternehmen entwickelt wurde, um Kontakte, Firmen, Transaktionen (Pipeline-Records), Aufgaben, Anrufe und Events zu verwalten.",
"Your Data Center Region": "Ihre Rechenzentren Region",
"Select your Zoho data center region for your account": "Wählen Sie Ihre Zoho Data Center Region für Ihren Account aus",
"United States (.com)": "Vereinigte Staaten (.com)",
"Australia (.com.au)": "Australien (.com.au)",
"Europe (.eu)": "Europa (.eu)",
"India (.in)": "Indien (.in)",
"China (.com.cn)": "China (.com.cn)",
"Japan (.jp)": "Japan (.jp)",
"Saudi Arabia (.sa)": "Saudi Arabia (.sa)",
"Canada (.ca)": "Kanada (.ca)",
"Create Company": "Firma erstellen",
"Update Company": "Firma aktualisieren",
"Create Contact": "Kontakt erstellen",
"Update Contact": "Kontakt aktualisieren",
"Create Task": "Aufgabe erstellen",
"Update Task": "Aufgabe aktualisieren",
"Create Call": "Anruf erstellen",
"Create Event": "Ereignis erstellen",
"Update Event": "Ereignis aktualisieren",
"Create Pipeline": "Pipeline erstellen",
"Update Pipeline": "Pipeline aktualisieren",
"Search Pipeline Record": "Pipeline-Datensatz suchen",
"Search Company Record": "Unternehmensdatensatz durchsuchen",
"Search Contact Record": "Kontaktdatensatz suchen",
"Search Product Record": "Produktrekord suchen",
"Search User": "Benutzer suchen",
"Creates a Company Record": "Erstellt einen Unternehmenseintrag",
"Updates an existing Company and prepopulates its fields for editing.": "Aktualisiert ein bestehendes Unternehmen und bevölkert seine Felder zur Bearbeitung.",
"Creates a Contact Record": "Erstellt einen Kontakt-Eintrag",
"Select and update an existing Contact record.": "Wählen und aktualisieren Sie einen vorhandenen Kontakt-Datensatz.",
"Creates a new Task": "Erstellt eine neue Aufgabe",
"updates a Task": "aktualisiert eine Aufgabe",
"Creates a Call Log Entry Record": "Erstellt einen Anrufprotokolleintrag",
"Creates a new event in Bigin": "Erstellt ein neues Ereignis in Bigin",
"Updates an existing event in Bigin": "Aktualisiert ein vorhandenes Ereignis in Bigin",
"Creates a new pipeline record in Bigin": "Erstellt einen neuen Pipeline-Rekord in Bigin",
"updates a pipeline record in Bigin": "aktualisiert einen Pipeline-Datensatz in Bigin",
"Searches deals by name via criteria or word": "Suche nach Namen nach Kriterien oder Wort",
"Searches companies by full name (criteria) or word": "Durchsucht Unternehmen mit vollem Namen (Kriterien) oder Wort",
"Searches contacts by criteria, email, phone, or word": "Sucht Kontakte nach Kriterien, E-Mail, Telefon oder Wort",
"Searches products by name/code via criteria or word": "Sucht Produkte nach Name/Code nach Kriterien oder Wort",
"Locate users by email.": "Benutzer per E-Mail finden.",
"Account Name": "Kontoname",
"Phone": "Telefon",
"Website": "Webseite",
"Tags": "Tags",
"Description": "Beschreibung",
"Owner": "Besitzer",
"Billing Street": "Rechnungsstraße",
"Billing City": "Rechnungsort",
"Billing State": "Rechnungsstatus",
"Billing Country": "Rechnungsland",
"Billing Code": "Rechnungscode",
"Select Company": "Firma auswählen",
"Company Details": "Firmendetails",
"First Name": "Vorname",
"Last Name": "Nachname",
"Title": "Titel",
"Email": "E-Mail",
"Mobile": "Mobil",
"Email Opt Out": "E-Mail Abmeldung",
"Company": "Firma",
"Mailing Street": "Mailing-Straße",
"Mailing City": "Mailing-Stadt",
"Mailing State": "Versandstatus",
"Mailing Country": "Versandland",
"Mailing Zip": "Mailing-Zip",
"Select Contact": "Kontakt auswählen",
"Contact Fields": "Kontaktfelder",
"Subject": "Betreff",
"Due Date": "Fälligkeitsdatum",
"Make Task Recurring": "Aufgabe wiedergeben",
"Recurring Info": "Wiederkehrende Info",
"Enable Reminder": "Erinnerung aktivieren",
"Reminder Information": "Erinnerungsinformationen",
"Related Module": "Verwandtes Modul",
"Related To": "Ähnlich zu",
"Priority": "Priorität",
"Status": "Status",
"Select Task": "Aufgabe auswählen",
"Task Details": "Aufgabendetails",
"Call Start Time": "Anrufstart",
"Call Duration (minutes)": "Anrufdauer (Minuten)",
"Call Type": "Anruftyp",
"Contacts": "Kontakte",
"Call Agenda": "Tagesordnung anrufen",
"Reminder": "Erinnerung",
"Dialed Number": "Nummer gewählt",
"Event Title": "Ereignis-Titel",
"Start Date & Time": "Startdatum & -zeit",
"End Date & Time": "Enddatum & -zeit",
"All Day Event": "Ganztägige Veranstaltung",
"Make Event Recurring": "Ereignis wiedergeben",
"Venue": "Ort",
"Participants": "Teilnehmer",
"Select Event": "Ereignis auswählen",
"Event Fields": "Ereignisfelder",
"Deal Name": "Angebotsname",
"Pipelines": "Pipeline",
"Sub Pipeline": "Unterpipeline",
"Stage": "Teil",
"Amount": "Betrag",
"Secondary Contacts": "Sekundäre Kontakte",
"Closing Date": "Enddatum",
"Associated Products": "Verknüpfte Produkte",
"Additional Fields": "Zusätzliche Felder",
"Pipeline Record": "Pipeline-Datensatz",
"Pipeline Details": "Pipeline-Details",
"Search Mode": "Suchmodus",
"Search Term": "Suchbegriff",
"User Type (optional)": "Benutzertyp (optional)",
"Page": "Seite",
"Per Page": "Pro Seite",
"Provide the name of the company": "Geben Sie den Namen des Unternehmens an",
"Provide a phone number for the company": "Geben Sie eine Telefonnummer für die Firma ein",
"Provide a website URL for the company": "Geben Sie eine Website-URL für das Unternehmen an",
"Select tags to associate with this module, \"Accounts\".": "Wählen Sie Tags aus, die mit diesem Modul \"Accounts\" verknüpft werden sollen.",
"Provide additional descriptions or notes related to the company": "Geben Sie zusätzliche Beschreibungen oder Notizen im Zusammenhang mit dem Unternehmen an",
"Select the owner to which the record will be assigned.": "Wählen Sie den Eigentümer, dem der Datensatz zugewiesen werden soll.",
"The street address of the company": "Die Adresse des Unternehmens",
"The city where the company is located": "Die Stadt, in der sich das Unternehmen befindet",
"The state or province where the company is located": "Der Staat oder die Provinz, in der das Unternehmen seinen Sitz hat",
"The country of the company": "Das Land des Unternehmens",
"The ZIP or postal code of the company": "Die Postleitzahl oder Postleitzahl des Unternehmens",
"Choose a company to update": "Wählen Sie eine Firma zum Aktualisieren",
"These fields will be prepopulated with company data": "Diese Felder werden mit Firmendaten überfüllt sein",
"First name of the contact": "Vorname des Kontakts",
"Last name of the contact": "Nachname des Kontakts",
"Job title of the contact": "Jobtitel des Kontakts",
"Email address of the contact": "E-Mail-Adresse des Kontakts",
"Mobile phone number": "Mobiltelefonnummer",
"Whether the contact has opted out of emails": "Gibt an, ob der Kontakt aus E-Mails ausgetreten ist",
"The ID of the company to which the record will be associated. If not provided, the record will not be associated with any company.": "Die ID des Unternehmens, mit dem der Datensatz verknüpft wird. Wenn nicht angegeben wird, wird der Datensatz keinem Unternehmen zugeordnet.",
"Select tags to associate with this module, \"Contacts\".": "Wählen Sie Tags aus, die mit diesem Modul \"Kontakte\" assoziiert werden sollen.",
"Provide additional descriptions or notes related to the contact": "Geben Sie zusätzliche Beschreibungen oder Notizen zum Kontakt an",
"Street address for mailing": "Straße für Mailing",
"City for mailing address": "Stadt für Postadresse",
"State for mailing address": "Status der Postadresse",
"Country for mailing address": "Land für Postadresse",
"ZIP/postal code": "Postleitzahl",
"Choose a contact to update": "Kontakt zum Update auswählen",
"Edit any of these fields": "Eines dieser Felder bearbeiten",
"Provide the subject or title of the task": "Betreff oder Titel der Aufgabe angeben",
"Provide the due date of the task (YYYY-MM-DD format)": "Geben Sie das Abgabedatum der Aufgabe an (Format JJJJ-MM-TT Format)",
"make this task recurring": "diese Aufgabe wiederholen",
"Please note: Due Date must be set above for recurring tasks": "Bitte beachten Sie: Für wiederholte Aufgaben muss das Enddatum oben festgelegt werden",
"Enable reminder for this task": "Erinnerung für diese Aufgabe aktivieren",
"Select the type of entity the task is related to. Options: Contacts, Pipelines, Companies.": "Wählen Sie die Art der Entität, mit der die Aufgabe verknüpft ist. Optionen: Kontakte, Pipelines, Unternehmen.",
"Select the specific record the task is related to.": "Wählen Sie den spezifischen Datensatz, mit dem die Aufgabe verknüpft ist.",
"Provide additional descriptions or notes related to the task": "Geben Sie zusätzliche Beschreibungen oder Notizen zu dieser Aufgabe an",
"Provide the priority level of the task": "Geben Sie die Prioritätsebene der Aufgabe an",
"Provide the current status of the task.": "Geben Sie den aktuellen Status der Aufgabe an.",
"Select tags to associate with this module, \"Tasks\".": "Wählen Sie Tags aus, die mit diesem Modul \"Aufgaben\" assoziiert werden sollen.",
"Choose a task to update": "Aufgabe zum Aktualisieren auswählen",
"These fields will be prepopulated with task data": "Diese Felder werden mit Aufgabendaten vorbelegt",
"Provide the start time of the call in ISO8601 format.": "Geben Sie die Startzeit des Aufrufs im ISO8601-Format an.",
"Provide the duration of the call in minutes (numeric). For example, 30 for a 30-minute call.": "Geben Sie die Dauer des Anrufs in Minuten ein (numerisch). Zum Beispiel 30 Minuten für einen Anruf.",
"Type of call": "Art des Anrufs",
"The ID of the contact to which the record will be associated. If not provided, the record will not be associated with any contact.": "Die ID des Kontakts, mit dem der Datensatz verknüpft wird. Wenn nicht angegeben wird, wird der Datensatz keinem Kontakt zugeordnet.",
"Subject of the call": "Gegenstand des Anrufs",
"Description or notes about the call": "Beschreibung oder Notizen über den Anruf",
"Agenda or purpose of the call": "Tagesordnung oder Zweck des Gesprächs",
"Reminder date and time for the call": "Erinnerungsdatum und -zeit für den Anruf",
"Provide the number dialed for the call.": "Geben Sie die für den Anruf gewählte Nummer an.",
"Select the type of entity the call is related to.": "Wählen Sie die Art der Entität, mit der der Anruf verbunden ist.",
"Select the specific record the call is related to.": "Wählen Sie den Datensatz, mit dem der Anruf verbunden ist.",
"Select tags to associate with this module, \"Calls\".": "Wählen Sie Tags aus, die diesem Modul zugeordnet werden sollen, \"Calls\".",
"Provide the title or name of the event": "Geben Sie den Titel oder den Namen des Events an",
"Start date and time of the event": "Startdatum und -zeit des Ereignisses",
"End date and time of the event": "Enddatum und -zeit des Ereignisses",
"Mark this as an all-day event": "Als Ganztagsereignis markieren",
"Make this event recurring": "Diesen Termin wiederholen",
"Enable reminder for this event": "Erinnerung für dieses Ereignis aktivieren",
"Location or venue of the event": "Ort oder Ort des Ereignisses",
"Select the type of entity the event is related to": "Wählen Sie den Typ der Entität, mit der das Ereignis verknüpft ist",
"Select the specific record the event is related to": "Wählen Sie den bestimmten Datensatz, mit dem das Ereignis verbunden ist",
"Add participants to the event": "Teilnehmer zum Event hinzufügen",
"Additional descriptions or notes related to the event": "Zusätzliche Beschreibungen oder Notizen zum Ereignis",
"Select tags to associate with this module, \"Events\".": "Wählen Sie Tags aus, die mit diesem Modul \"Events\" verknüpft werden sollen.",
"Choose the event to update": "Wählen Sie das zu aktualisierende Ereignis",
"Provide the name for the pipeline record (deal)": "Geben Sie den Namen für den Pipeline-Datensatz an (Deal)",
"Provide the Team Pipeline to which the pipeline record (deal) belongs": "Geben Sie die Team-Pipeline an, zu der der Pipeline-Datensatz (Deal) gehört",
"Pick one of the configured sub-pipelines": "Wähle eine der konfigurierten Unterpipelines",
"Provide the current stage of the pipeline record (deal) within the Sub-Pipeline": "Geben Sie die aktuelle Phase des Pipeline-Datensatzes (Deals) innerhalb der Unter-Pipeline an",
"The amount of the pipeline record (deal)": "Die Menge des Pipeline-Datensatzes (Deals)",
"Provide a list of additional contacts associated with the record": "Geben Sie eine Liste zusätzlicher Kontakte an, die mit dem Datensatz verknüpft sind",
"Provide the expected or actual closing date of the pipeline record (deal) in YYYY-MM-DD format": "Geben Sie das erwartete oder tatsächliche Schließdatum des Pipeline-Datensatzes (Deal) im Format JJJ-MM-TT an",
"Provide a list of products associated with the record": "Geben Sie eine Liste der mit dem Datensatz verknüpften Produkte an",
"Select tags to associate with this module, \"Pipelines\".": "Wählen Sie Tags aus, die mit diesem Modul \"Pipelines\" verknüpft werden sollen.",
"Optional fields from the Pipelines module": "Optionale Felder aus dem Pipeline-Modul",
"Select a pipeline record": "Wähle einen Pipeline-Eintrag",
"These fields will be prepopulated with pipeline data": "Diese Felder werden mit Pipeline-Daten überfüllt sein",
"Deal Name (criteria) or word": "Deal-Name (Kriterien) oder Wort",
"Company full name (criteria) or word": "Firmenname (Kriterien) oder Wort",
"Choose how to search Contacts": "Wählen Sie die Suche nach Kontakten",
"Text, email, phone, or word based on the selected mode": "Text, E-Mail, Telefon oder Wort basierend auf dem gewählten Modus",
"Product name/code (criteria) or word": "Produktname/-code (Kriterien) oder Wort",
"User email address (full or partial, case-insensitive match)": "E-Mail-Adresse des Benutzers (vollständige oder partielle, unbeachtete Übereinstimmung)",
"Page index (default 1)": "Seitenindex (Standard 1)",
"Records per page (max 200, default 200)": "Datensätze pro Seite (max 200, Standard 200)",
"Companies": "Firmen",
"High": "Hoch",
"Normal": "Normal",
"Low": "Niedrig",
"Lowest": "Niedrigste",
"Highest": "Höchste",
"In Progress": "In Bearbeitung",
"Completed": "Abgeschlossen",
"Deferred": "Aufgeschoben",
"Waiting for input": "Warte auf Eingabe",
"Not Started": "Nicht gestartet",
"Outbound": "Ausgehend",
"Inbound": "Eingehend",
"Missed": "Verpasst",
"Criteria (Deal Name)": "Kriterien (Deal Name)",
"Word": "Wort",
"Criteria (full name)": "Kriterien (vollständiger Name)",
"Criteria (name/email/mobile)": "Kriterien (Name/E-Mail/Mobil)",
"Criteria (name/code)": "Kriterien (Name/Code)",
"All Users": "Alle Benutzer",
"Active Users": "Aktive Benutzer",
"Deactive Users": "Deaktive Benutzer",
"Confirmed Users": "Bestätigte Benutzer",
"Not Confirmed Users": "Nicht bestätigte Benutzer",
"Deleted Users": "Gelöschte Benutzer",
"Active Confirmed Users": "Aktive Benutzer bestätigt",
"Admin Users": "Admin-Benutzer",
"Active Confirmed Admins": "Aktive Administratoren",
"Current User": "Aktueller Benutzer",
"New Contact Created": "Neuer Kontakt erstellt",
"Contact Updated": "Kontakt aktualisiert",
"New Company Created": "Neue Firma erstellt",
"Company Updated": "Firma aktualisiert",
"New Call Created": "Neuer Anruf erstellt",
"New Task Created": "Neue Aufgabe erstellt",
"New Event Created": "Neues Ereignis erstellt",
"New Pipeline Record Created": "Neuer Pipeline-Datensatz erstellt",
"Pipeline Record Updated": "Pipeline-Datensatz aktualisiert",
"Triggers when a new contact is created": "Wird ausgelöst, wenn ein neuer Kontakt erstellt wird",
"Triggers when a contact is updated": "Wird ausgelöst, wenn ein Kontakt aktualisiert wird",
"Triggers when a new company record is created": "Löst aus, wenn ein neuer Firmeneintrag erstellt wird",
"Triggers when a company record is updated": "Löst aus, wenn ein Unternehmensdatensatz aktualisiert wird",
"Triggers when a new call log is created": "Wird ausgelöst, wenn ein neues Anrufliste erstellt wird",
"Triggers when a new task is created": "Wird ausgelöst, wenn eine neue Aufgabe erstellt wird",
"Triggers when a new event is created": "Wird ausgelöst, wenn ein neues Ereignis erstellt wird",
"Triggers when a new pipeline record is created": "Wird ausgelöst, wenn ein neuer Pipeline-Datensatz erstellt wird",
"Triggers when a pipeline record is updated": "Wird ausgelöst, wenn ein Pipeline-Datensatz aktualisiert wird"
}

View File

@@ -0,0 +1,250 @@
{
"Bigin by Zoho CRM is a lightweight CRM designed for small businesses to manage contacts, companies, deals (pipeline records), tasks, calls, and events.": "Bigin by Zoho CRM es un CRM ligero diseñado para pequeñas empresas para gestionar contactos, empresas, transacciones (registros de pipelina), tareas, llamadas y eventos.",
"Your Data Center Region": "Región de tu Centro de Datos",
"Select your Zoho data center region for your account": "Seleccione la región del centro de datos de Zoho para su cuenta",
"United States (.com)": "Estados Unidos (.com)",
"Australia (.com.au)": "Australia (.com.au)",
"Europe (.eu)": "Europa (.eu)",
"India (.in)": "India (.in)",
"China (.com.cn)": "China (.com.cn)",
"Japan (.jp)": "Japón (.jp)",
"Saudi Arabia (.sa)": "Saudi Arabia (.sa)",
"Canada (.ca)": "Canadá (.ca)",
"Create Company": "Crear empresa",
"Update Company": "Actualizar Compañía",
"Create Contact": "Crear contacto",
"Update Contact": "Actualizar contacto",
"Create Task": "Crear tarea",
"Update Task": "Actualizar tarea",
"Create Call": "Crear llamada",
"Create Event": "Crear Evento",
"Update Event": "Actualizar evento",
"Create Pipeline": "Crear tubería",
"Update Pipeline": "Actualizar Pipeline",
"Search Pipeline Record": "Registro de tuberías de búsqueda",
"Search Company Record": "Buscar registro de empresa",
"Search Contact Record": "Buscar registro de contacto",
"Search Product Record": "Buscar registro de producto",
"Search User": "Buscar usuario",
"Creates a Company Record": "Crea un registro de empresa",
"Updates an existing Company and prepopulates its fields for editing.": "Actualiza una empresa existente y prellena sus campos de edición.",
"Creates a Contact Record": "Crea un registro de contacto",
"Select and update an existing Contact record.": "Seleccione y actualice un registro de contacto existente.",
"Creates a new Task": "Crea una nueva tarea",
"updates a Task": "actualiza una tarea",
"Creates a Call Log Entry Record": "Crea un registro de registro de llamadas",
"Creates a new event in Bigin": "Crea un nuevo evento en Bigin",
"Updates an existing event in Bigin": "Actualiza un evento existente en Bigin",
"Creates a new pipeline record in Bigin": "Crea un nuevo registro de pipeline en Bigin",
"updates a pipeline record in Bigin": "actualiza un registro de pipeline en Bigin",
"Searches deals by name via criteria or word": "Busca ofertas por nombre por criterios o palabra",
"Searches companies by full name (criteria) or word": "Busca empresas con nombre completo (criterio) o palabra",
"Searches contacts by criteria, email, phone, or word": "Busca contactos por criterios, email, teléfono o palabra",
"Searches products by name/code via criteria or word": "Busca productos por nombre/código mediante criterios o palabras",
"Locate users by email.": "Localizar usuarios por correo electrónico.",
"Account Name": "Nombre de cuenta",
"Phone": "Teléfono",
"Website": "Sitio web",
"Tags": "Etiquetas",
"Description": "Descripción",
"Owner": "Propietario",
"Billing Street": "Calle de facturación",
"Billing City": "Ciudad de facturación",
"Billing State": "Estado de facturación",
"Billing Country": "País de facturación",
"Billing Code": "Código de facturación",
"Select Company": "Seleccionar empresa",
"Company Details": "Detalles de la empresa",
"First Name": "Nombre",
"Last Name": "Apellido",
"Title": "Título",
"Email": "E-mail",
"Mobile": "Móvil",
"Email Opt Out": "Email no",
"Company": "Empresa",
"Mailing Street": "Calle de Correo",
"Mailing City": "Ciudad de Correo",
"Mailing State": "Estado de correo",
"Mailing Country": "País de envío",
"Mailing Zip": "Correo postal",
"Select Contact": "Seleccionar contacto",
"Contact Fields": "Campos de contacto",
"Subject": "Asunto",
"Due Date": "Fecha de fin",
"Make Task Recurring": "Hacer la tarea recurrente",
"Recurring Info": "Información recurrente",
"Enable Reminder": "Activar recordatorio",
"Reminder Information": "Información de recordatorio",
"Related Module": "Módulo relacionado",
"Related To": "Relacionado con",
"Priority": "Prioridad",
"Status": "Estado",
"Select Task": "Seleccionar tarea",
"Task Details": "Detalles de la tarea",
"Call Start Time": "Hora de inicio de llamada",
"Call Duration (minutes)": "Duración de la llamada (minutos)",
"Call Type": "Tipo de llamada",
"Contacts": "Contactos",
"Call Agenda": "Llamar a agenda",
"Reminder": "Recordatorio",
"Dialed Number": "Número marcado",
"Event Title": "Título del evento",
"Start Date & Time": "Fecha y hora de inicio",
"End Date & Time": "Fecha y hora de fin",
"All Day Event": "Evento de todo el día",
"Make Event Recurring": "Hacer evento recurrente",
"Venue": "Lugar",
"Participants": "Participantes",
"Select Event": "Seleccionar evento",
"Event Fields": "Campos de evento",
"Deal Name": "Nombre de la oferta",
"Pipelines": "Pipelines",
"Sub Pipeline": "Subtubería",
"Stage": "Etapa",
"Amount": "Cantidad",
"Secondary Contacts": "Contactos secundarios",
"Closing Date": "Fecha de cierre",
"Associated Products": "Productos asociados",
"Additional Fields": "Campos adicionales",
"Pipeline Record": "Registro de tuberías",
"Pipeline Details": "Detalles del gasoducto",
"Search Mode": "Modo de búsqueda",
"Search Term": "Buscar término",
"User Type (optional)": "Tipo de usuario (opcional)",
"Page": "Pgina",
"Per Page": "Por página",
"Provide the name of the company": "Proporcionar el nombre de la empresa",
"Provide a phone number for the company": "Proporcionar un número de teléfono para la empresa",
"Provide a website URL for the company": "Proporcionar una URL del sitio web para la empresa",
"Select tags to associate with this module, \"Accounts\".": "Seleccione etiquetas para asociar con este módulo, \"Cuentas\".",
"Provide additional descriptions or notes related to the company": "Proporcionar descripciones o notas adicionales relacionadas con la empresa",
"Select the owner to which the record will be assigned.": "Seleccione el propietario al que se asignará el registro.",
"The street address of the company": "La dirección de la empresa",
"The city where the company is located": "La ciudad donde se encuentra la empresa",
"The state or province where the company is located": "El estado o provincia donde se encuentra la empresa",
"The country of the company": "El país de la empresa",
"The ZIP or postal code of the company": "El ZIP o código postal de la empresa",
"Choose a company to update": "Elija una empresa para actualizar",
"These fields will be prepopulated with company data": "Estos campos serán prellenados con datos de la empresa",
"First name of the contact": "Nombre del contacto",
"Last name of the contact": "Apellido del contacto",
"Job title of the contact": "Título del trabajo del contacto",
"Email address of the contact": "Dirección de correo del contacto",
"Mobile phone number": "Número de teléfono móvil",
"Whether the contact has opted out of emails": "Si el contacto ha optado por no recibir correos electrónicos",
"The ID of the company to which the record will be associated. If not provided, the record will not be associated with any company.": "El ID de la empresa a la que se asociará el registro. Si no se proporciona, el registro no se asociará con ninguna empresa.",
"Select tags to associate with this module, \"Contacts\".": "Seleccione etiquetas para asociar con este módulo, \"Contactos\".",
"Provide additional descriptions or notes related to the contact": "Proporcionar descripciones adicionales o notas relacionadas con el contacto",
"Street address for mailing": "Dirección de correo",
"City for mailing address": "Ciudad para dirección postal",
"State for mailing address": "Estado de la dirección de correo",
"Country for mailing address": "País para dirección postal",
"ZIP/postal code": "Código postal",
"Choose a contact to update": "Elige un contacto para actualizar",
"Edit any of these fields": "Editar cualquiera de estos campos",
"Provide the subject or title of the task": "Proporcionar el asunto o título de la tarea",
"Provide the due date of the task (YYYY-MM-DD format)": "Proporciona la fecha límite de la tarea (formato AAA-MM-DD)",
"make this task recurring": "hacer esta tarea recurrente",
"Please note: Due Date must be set above for recurring tasks": "Nota: la fecha de vencimiento debe establecerse arriba para las tareas recurrentes",
"Enable reminder for this task": "Habilitar recordatorio para esta tarea",
"Select the type of entity the task is related to. Options: Contacts, Pipelines, Companies.": "Seleccione el tipo de entidad a la que la tarea está relacionada. Opciones: Contactos, tuberías, empresas.",
"Select the specific record the task is related to.": "Seleccione el registro específico al que está relacionada la tarea.",
"Provide additional descriptions or notes related to the task": "Proporcionar descripciones adicionales o notas relacionadas con la tarea",
"Provide the priority level of the task": "Proporciona el nivel de prioridad de la tarea",
"Provide the current status of the task.": "Proporcionar el estado actual de la tarea.",
"Select tags to associate with this module, \"Tasks\".": "Seleccione etiquetas para asociar con este módulo, \"Tareas\".",
"Choose a task to update": "Elija una tarea para actualizar",
"These fields will be prepopulated with task data": "Estos campos serán rellenados con datos de tareas",
"Provide the start time of the call in ISO8601 format.": "Proporcione la hora de inicio de la llamada en formato ISO8601.",
"Provide the duration of the call in minutes (numeric). For example, 30 for a 30-minute call.": "Proporcione la duración de la llamada en minutos (por ejemplo, 30 para una llamada de 30 minutos.",
"Type of call": "Tipo de llamada",
"The ID of the contact to which the record will be associated. If not provided, the record will not be associated with any contact.": "El ID del contacto al que se asociará el registro. Si no se proporciona, el registro no se asociará con ningún contacto.",
"Subject of the call": "Asunto de la llamada",
"Description or notes about the call": "Descripción o notas sobre la llamada",
"Agenda or purpose of the call": "Agenda o propósito de la llamada",
"Reminder date and time for the call": "Recordar fecha y hora para la llamada",
"Provide the number dialed for the call.": "Proporcione el número marcado para la llamada.",
"Select the type of entity the call is related to.": "Seleccione el tipo de entidad a la que está relacionada la llamada.",
"Select the specific record the call is related to.": "Seleccione el registro específico al que está relacionada la llamada.",
"Select tags to associate with this module, \"Calls\".": "Seleccione etiquetas para asociar con este módulo, \"Llamadas\".",
"Provide the title or name of the event": "Proporcionar el título o nombre del evento",
"Start date and time of the event": "Fecha y hora de inicio del evento",
"End date and time of the event": "Fecha y hora de fin del evento",
"Mark this as an all-day event": "Marcar esto como un evento de todo el día",
"Make this event recurring": "Hacer este evento recurrente",
"Enable reminder for this event": "Habilitar recordatorio para este evento",
"Location or venue of the event": "Ubicación o lugar del evento",
"Select the type of entity the event is related to": "Seleccione el tipo de entidad a la que el evento está relacionado",
"Select the specific record the event is related to": "Seleccione el registro específico al que el evento está relacionado",
"Add participants to the event": "Añadir participantes al evento",
"Additional descriptions or notes related to the event": "Descripciones adicionales o notas relacionadas con el evento",
"Select tags to associate with this module, \"Events\".": "Selecciona etiquetas para asociar con este módulo, \"Eventos\".",
"Choose the event to update": "Elija el evento a actualizar",
"Provide the name for the pipeline record (deal)": "Proporciona el nombre para el registro del pipeline (trato)",
"Provide the Team Pipeline to which the pipeline record (deal) belongs": "Proporciona el Team Pipeline al que pertenece el registro de pipeline (trato)",
"Pick one of the configured sub-pipelines": "Elija uno de los subtuberías configurados",
"Provide the current stage of the pipeline record (deal) within the Sub-Pipeline": "Proporciona la etapa actual del registro del pipeline (trato) dentro del Sub-Pipeline",
"The amount of the pipeline record (deal)": "La cantidad del registro del pipeline (trato)",
"Provide a list of additional contacts associated with the record": "Proporcionar una lista de contactos adicionales asociados con el registro",
"Provide the expected or actual closing date of the pipeline record (deal) in YYYY-MM-DD format": "Proporcione la fecha de cierre esperada o real del registro de pipeline (trato) en formato AAAA-MM-DD",
"Provide a list of products associated with the record": "Proporcionar una lista de productos asociados con el registro",
"Select tags to associate with this module, \"Pipelines\".": "Seleccione etiquetas para asociar con este módulo, \"Pipelines\".",
"Optional fields from the Pipelines module": "Campos opcionales del módulo Pipelines",
"Select a pipeline record": "Seleccione un registro de pipeline",
"These fields will be prepopulated with pipeline data": "Estos campos serán prellenados con datos de pipeline",
"Deal Name (criteria) or word": "Nombre de la transacción (criterio) o palabra",
"Company full name (criteria) or word": "Nombre completo de la empresa (criterio) o palabra",
"Choose how to search Contacts": "Elegir cómo buscar contactos",
"Text, email, phone, or word based on the selected mode": "Texto, correo electrónico, teléfono o palabra basado en el modo seleccionado",
"Product name/code (criteria) or word": "Nombre del producto/código (criterio) o palabra",
"User email address (full or partial, case-insensitive match)": "Dirección de correo electrónico del usuario (total o parcial, coincidencia entre mayúsculas y minúsculas)",
"Page index (default 1)": "Índice de página (por defecto 1)",
"Records per page (max 200, default 200)": "Registros por página (máximo 200, por defecto 200)",
"Companies": "Empresas",
"High": "Alta",
"Normal": "Normal",
"Low": "Baja",
"Lowest": "Más bajo",
"Highest": "Más alto",
"In Progress": "En curso",
"Completed": "Completado",
"Deferred": "Aplazado",
"Waiting for input": "Esperando por entrada",
"Not Started": "No iniciado",
"Outbound": "Salida",
"Inbound": "Entrante",
"Missed": "Perdido",
"Criteria (Deal Name)": "Criterios (Nombre de la oferta)",
"Word": "Palabra",
"Criteria (full name)": "Criterios (nombre completo)",
"Criteria (name/email/mobile)": "Criterios (nombre/email/móvil)",
"Criteria (name/code)": "Criterios (nombre/código)",
"All Users": "Todos los usuarios",
"Active Users": "Usuarios Activos",
"Deactive Users": "Usuarios desactivados",
"Confirmed Users": "Usuarios confirmados",
"Not Confirmed Users": "Usuarios no confirmados",
"Deleted Users": "Usuarios eliminados",
"Active Confirmed Users": "Usuarios activos confirmados",
"Admin Users": "Administrar usuarios",
"Active Confirmed Admins": "Administradores confirmados activos",
"Current User": "Usuario actual",
"New Contact Created": "Nuevo contacto creado",
"Contact Updated": "Contacto actualizado",
"New Company Created": "Nueva empresa creada",
"Company Updated": "Empresa Actualizada",
"New Call Created": "Nueva llamada creada",
"New Task Created": "Nueva tarea creada",
"New Event Created": "Nuevo evento creado",
"New Pipeline Record Created": "Nuevo registro de tuberías creado",
"Pipeline Record Updated": "Registro de tuberías actualizado",
"Triggers when a new contact is created": "Dispara cuando se crea un nuevo contacto",
"Triggers when a contact is updated": "Dispara cuando se actualiza un contacto",
"Triggers when a new company record is created": "Dispara cuando se crea un nuevo registro de empresa",
"Triggers when a company record is updated": "Dispara cuando se actualiza el registro de una empresa",
"Triggers when a new call log is created": "Dispara cuando se crea un nuevo registro de llamadas",
"Triggers when a new task is created": "Dispara cuando se crea una nueva tarea",
"Triggers when a new event is created": "Dispara cuando se crea un nuevo evento",
"Triggers when a new pipeline record is created": "Dispara cuando se crea un nuevo registro de pipeline",
"Triggers when a pipeline record is updated": "Dispara cuando se actualiza un registro de pipeline"
}

View File

@@ -0,0 +1,250 @@
{
"Bigin by Zoho CRM is a lightweight CRM designed for small businesses to manage contacts, companies, deals (pipeline records), tasks, calls, and events.": "Bigin by Zoho CRM est un CRM léger conçu pour les petites entreprises pour gérer les contacts, les entreprises, les affaires (enregistrements de pipeline), les tâches, les appels et les événements.",
"Your Data Center Region": "Région de votre centre de données",
"Select your Zoho data center region for your account": "Sélectionnez la région de votre centre de données Zoho pour votre compte",
"United States (.com)": "États-Unis (.com)",
"Australia (.com.au)": "Australie (.com.au)",
"Europe (.eu)": "Europe (.eu)",
"India (.in)": "Inde (.in)",
"China (.com.cn)": "Chine (.com.cn)",
"Japan (.jp)": "Japon (.jp)",
"Saudi Arabia (.sa)": "Saudi Arabia (.sa)",
"Canada (.ca)": "Canada (.ca)",
"Create Company": "Créer une entreprise",
"Update Company": "Mettre à jour la société",
"Create Contact": "Créer un contact",
"Update Contact": "Mettre à jour le contact",
"Create Task": "Créer une tâche",
"Update Task": "Tâche de mise à jour",
"Create Call": "Créer un appel",
"Create Event": "Créer un événement",
"Update Event": "Mettre à jour l'événement",
"Create Pipeline": "Créer un pipeline",
"Update Pipeline": "Mise à jour du Pipeline",
"Search Pipeline Record": "Rechercher l'enregistrement du pipeline",
"Search Company Record": "Rechercher dans les dossiers de la société",
"Search Contact Record": "Rechercher un dossier de contact",
"Search Product Record": "Rechercher un enregistrement de produit",
"Search User": "Rechercher un utilisateur",
"Creates a Company Record": "Crée un dossier d'entreprise",
"Updates an existing Company and prepopulates its fields for editing.": "Met à jour une entreprise existante et préremplit ses champs pour édition.",
"Creates a Contact Record": "Crée une fiche de contact",
"Select and update an existing Contact record.": "Sélectionner et mettre à jour un dossier de contact existant.",
"Creates a new Task": "Crée une nouvelle tâche",
"updates a Task": "Met à jour une tâche",
"Creates a Call Log Entry Record": "Crée un enregistrement du journal d'appel",
"Creates a new event in Bigin": "Crée un nouvel événement dans Bigin",
"Updates an existing event in Bigin": "Met à jour un événement existant dans Bigin",
"Creates a new pipeline record in Bigin": "Crée un nouvel enregistrement de pipeline dans Bigin",
"updates a pipeline record in Bigin": "Met à jour un enregistrement de pipeline dans Bigin",
"Searches deals by name via criteria or word": "Recherche des transactions par nom par critère ou mot",
"Searches companies by full name (criteria) or word": "Recherche les entreprises par nom complet (critères) ou mot",
"Searches contacts by criteria, email, phone, or word": "Recherche des contacts par critère, e-mail, téléphone ou mot",
"Searches products by name/code via criteria or word": "Recherche des produits par nom/code par critère ou mot",
"Locate users by email.": "Localiser les utilisateurs par e-mail.",
"Account Name": "Nom du compte",
"Phone": "Téléphone",
"Website": "Site Web",
"Tags": "Tags",
"Description": "Libellé",
"Owner": "Propriétaire",
"Billing Street": "Rue de facturation",
"Billing City": "Ville de facturation",
"Billing State": "État de facturation",
"Billing Country": "Pays de facturation",
"Billing Code": "Code de facturation",
"Select Company": "Sélectionner une entreprise",
"Company Details": "Détails de la société",
"First Name": "First Name",
"Last Name": "Last Name",
"Title": "Titre de la page",
"Email": "Courriel",
"Mobile": "Téléphone mobile",
"Email Opt Out": "Courriel de désinscription",
"Company": "Entreprise",
"Mailing Street": "Rue du Courrier",
"Mailing City": "Ville d'envoi",
"Mailing State": "État de la messagerie",
"Mailing Country": "Pays d'envoi",
"Mailing Zip": "Zip d'envoi",
"Select Contact": "Sélectionner un contact",
"Contact Fields": "Champs de contact",
"Subject": "Sujet",
"Due Date": "Date de fin",
"Make Task Recurring": "Rendre la tâche récurrente",
"Recurring Info": "Infos récurrentes",
"Enable Reminder": "Activer le rappel",
"Reminder Information": "Informations de rappel",
"Related Module": "Module lié",
"Related To": "Lié à",
"Priority": "Priorité",
"Status": "Statut",
"Select Task": "Sélectionner une tâche",
"Task Details": "Détails de la tâche",
"Call Start Time": "Heure de début de l'appel",
"Call Duration (minutes)": "Durée de l'appel (minutes)",
"Call Type": "Type d'appel",
"Contacts": "Contacts",
"Call Agenda": "Agenda d'appel",
"Reminder": "Rappel",
"Dialed Number": "Numéro de téléphone",
"Event Title": "Titre de l'événement",
"Start Date & Time": "Date et heure de début",
"End Date & Time": "Date et heure de fin",
"All Day Event": "Evénement de toute la journée",
"Make Event Recurring": "Rendre l'événement récurrent",
"Venue": "Lieu",
"Participants": "Participants",
"Select Event": "Sélectionner un événement",
"Event Fields": "Champs de l'événement",
"Deal Name": "Nom de la transaction",
"Pipelines": "Pipelines",
"Sub Pipeline": "Sous-Pipeline",
"Stage": "Étape",
"Amount": "Montant",
"Secondary Contacts": "Contacts secondaires",
"Closing Date": "Date de clôture",
"Associated Products": "Produits associés",
"Additional Fields": "Champs supplémentaires",
"Pipeline Record": "Enregistrement du pipeline",
"Pipeline Details": "Détails du Pipeline",
"Search Mode": "Mode de recherche",
"Search Term": "Terme de recherche",
"User Type (optional)": "Type d'utilisateur (optionnel)",
"Page": "Page",
"Per Page": "Par page",
"Provide the name of the company": "Indiquez le nom de la société",
"Provide a phone number for the company": "Fournir un numéro de téléphone à l'entreprise",
"Provide a website URL for the company": "Fournir une URL de site web pour l'entreprise",
"Select tags to associate with this module, \"Accounts\".": "Sélectionnez les tags à associer à ce module, \"Comptes\".",
"Provide additional descriptions or notes related to the company": "Fournir des descriptions supplémentaires ou des notes relatives à l'entreprise",
"Select the owner to which the record will be assigned.": "Sélectionnez le propriétaire auquel le dossier sera assigné.",
"The street address of the company": "L'adresse de la société",
"The city where the company is located": "La ville où se trouve l'entreprise",
"The state or province where the company is located": "L'état ou la province où se trouve l'entreprise",
"The country of the company": "Le pays de la société",
"The ZIP or postal code of the company": "Le code postal de la société",
"Choose a company to update": "Choisissez une entreprise à mettre à jour",
"These fields will be prepopulated with company data": "Ces champs seront préremplis avec les données de l'entreprise",
"First name of the contact": "Prénom du contact",
"Last name of the contact": "Nom du contact",
"Job title of the contact": "Titre du poste du contact",
"Email address of the contact": "Adresse e-mail du contact",
"Mobile phone number": "Numéro de téléphone portable",
"Whether the contact has opted out of emails": "Si le contact a choisi de ne plus recevoir d'e-mails",
"The ID of the company to which the record will be associated. If not provided, the record will not be associated with any company.": "L'ID de la société à laquelle le dossier sera associé. Si non fourni, le dossier ne sera associé à aucune entreprise.",
"Select tags to associate with this module, \"Contacts\".": "Sélectionnez les tags à associer à ce module, \"Contacts\".",
"Provide additional descriptions or notes related to the contact": "Fournir des descriptions supplémentaires ou des notes relatives à la personne-ressource",
"Street address for mailing": "Adresse postale",
"City for mailing address": "Ville pour adresse postale",
"State for mailing address": "État pour l'adresse postale",
"Country for mailing address": "Pays pour l'adresse postale",
"ZIP/postal code": "Code postal",
"Choose a contact to update": "Choisissez un contact à mettre à jour",
"Edit any of these fields": "Modifier l'un de ces champs",
"Provide the subject or title of the task": "Indiquer le sujet ou le titre de la tâche",
"Provide the due date of the task (YYYY-MM-DD format)": "Indiquez la date d'échéance de la tâche (format AAAA-MM-JJ)",
"make this task recurring": "rendre cette tâche récurrente",
"Please note: Due Date must be set above for recurring tasks": "Remarque : La date d'échéance doit être définie ci-dessus pour les tâches récurrentes",
"Enable reminder for this task": "Activer le rappel pour cette tâche",
"Select the type of entity the task is related to. Options: Contacts, Pipelines, Companies.": "Sélectionnez le type d'entité à laquelle la tâche est liée. Options : Contacts, Pipelines, Entreprises.",
"Select the specific record the task is related to.": "Sélectionnez l'enregistrement spécifique auquel la tâche est liée.",
"Provide additional descriptions or notes related to the task": "Fournir des descriptions supplémentaires ou des notes liées à la tâche",
"Provide the priority level of the task": "Fournir le niveau de priorité de la tâche",
"Provide the current status of the task.": "Indiquez le statut actuel de la tâche.",
"Select tags to associate with this module, \"Tasks\".": "Sélectionnez les tags à associer à ce module, \"Tâches\".",
"Choose a task to update": "Choisissez une tâche à mettre à jour",
"These fields will be prepopulated with task data": "Ces champs seront préremplis avec les données de la tâche",
"Provide the start time of the call in ISO8601 format.": "Indiquez l'heure de début de l'appel au format ISO8601.",
"Provide the duration of the call in minutes (numeric). For example, 30 for a 30-minute call.": "Indiquez la durée de l'appel en minutes (numérique). Par exemple, 30 minutes pour un appel de 30 minutes.",
"Type of call": "Type d'appel",
"The ID of the contact to which the record will be associated. If not provided, the record will not be associated with any contact.": "L'ID du contact auquel l'enregistrement sera associé. S'il n'est pas fourni, l'enregistrement ne sera associé à aucun contact.",
"Subject of the call": "Sujet de l'appel",
"Description or notes about the call": "Description ou notes sur l'appel",
"Agenda or purpose of the call": "Agenda ou objet de l'appel",
"Reminder date and time for the call": "Date et heure de rappel de l'appel",
"Provide the number dialed for the call.": "Indiquez le numéro composé pour l'appel.",
"Select the type of entity the call is related to.": "Sélectionnez le type d'entité à laquelle l'appel est lié.",
"Select the specific record the call is related to.": "Sélectionnez l'enregistrement spécifique auquel l'appel est lié.",
"Select tags to associate with this module, \"Calls\".": "Sélectionnez les tags à associer à ce module, \"Appels\".",
"Provide the title or name of the event": "Indiquez le titre ou le nom de l'événement",
"Start date and time of the event": "Date et heure de début de l'événement",
"End date and time of the event": "Date et heure de fin de l'événement",
"Mark this as an all-day event": "Marquer ceci comme un événement de toute la journée",
"Make this event recurring": "Rendre cet événement récurrent",
"Enable reminder for this event": "Activer le rappel pour cet événement",
"Location or venue of the event": "Lieu ou lieu de l'événement",
"Select the type of entity the event is related to": "Sélectionnez le type d'entité à laquelle l'événement est lié",
"Select the specific record the event is related to": "Sélectionnez l'enregistrement spécifique auquel l'événement est lié",
"Add participants to the event": "Ajouter des participants à l'événement",
"Additional descriptions or notes related to the event": "Descriptions supplémentaires ou notes liées à l'événement",
"Select tags to associate with this module, \"Events\".": "Sélectionnez les tags à associer à ce module, \"Événements\".",
"Choose the event to update": "Choisissez l'événement à mettre à jour",
"Provide the name for the pipeline record (deal)": "Indiquez le nom de l'enregistrement du pipeline (deal)",
"Provide the Team Pipeline to which the pipeline record (deal) belongs": "Fournir le pipeline d'équipe auquel appartient l'enregistrement du pipeline (deal)",
"Pick one of the configured sub-pipelines": "Choisissez l'un des sous-pipelines configurés",
"Provide the current stage of the pipeline record (deal) within the Sub-Pipeline": "Fournir l'étape actuelle de l'enregistrement du pipeline (deal) au sein du sous-pipeline",
"The amount of the pipeline record (deal)": "Le montant de l'enregistrement du pipeline (deal)",
"Provide a list of additional contacts associated with the record": "Fournir une liste de contacts supplémentaires associés à l'enregistrement",
"Provide the expected or actual closing date of the pipeline record (deal) in YYYY-MM-DD format": "Fournir la date de clôture prévue ou réelle du dossier du pipeline (deal) au format AAAA-MM-JJ",
"Provide a list of products associated with the record": "Fournir une liste de produits associés à l'enregistrement",
"Select tags to associate with this module, \"Pipelines\".": "Sélectionnez les balises à associer à ce module, \"Pipelines\".",
"Optional fields from the Pipelines module": "Champs optionnels du module Pipelines",
"Select a pipeline record": "Sélectionnez un enregistrement de pipeline",
"These fields will be prepopulated with pipeline data": "Ces champs seront préremplis avec les données du pipeline",
"Deal Name (criteria) or word": "Nom de la transaction (critères) ou mot",
"Company full name (criteria) or word": "Nom complet de la société (critères) ou mot",
"Choose how to search Contacts": "Choisir comment rechercher des contacts",
"Text, email, phone, or word based on the selected mode": "Texte, e-mail, téléphone ou mot basé sur le mode sélectionné",
"Product name/code (criteria) or word": "Nom du produit/code (critères) ou mot",
"User email address (full or partial, case-insensitive match)": "Adresse e-mail de l'utilisateur (correspondance complète ou partielle, insensible à la casse)",
"Page index (default 1)": "Index de la page (par défaut 1)",
"Records per page (max 200, default 200)": "Enregistrements par page (max 200, par défaut 200)",
"Companies": "Entreprises",
"High": "Élevé",
"Normal": "Normale",
"Low": "Bas",
"Lowest": "Le plus bas",
"Highest": "Le plus haut",
"In Progress": "En cours",
"Completed": "Terminé",
"Deferred": "Retardé",
"Waiting for input": "En attente de saisie",
"Not Started": "Non démarré",
"Outbound": "Sortant",
"Inbound": "Entrants",
"Missed": "Manqué",
"Criteria (Deal Name)": "Critères (Deal Name)",
"Word": "Mot",
"Criteria (full name)": "Critères (nom complet)",
"Criteria (name/email/mobile)": "Critères (nom/email/mobile)",
"Criteria (name/code)": "Critères (nom/code)",
"All Users": "Tous les utilisateurs",
"Active Users": "Utilisateurs actifs",
"Deactive Users": "Utilisateurs désactivés",
"Confirmed Users": "Utilisateurs confirmés",
"Not Confirmed Users": "Utilisateurs non confirmés",
"Deleted Users": "Utilisateurs supprimés",
"Active Confirmed Users": "Utilisateurs Actifs confirmés",
"Admin Users": "Administrateurs",
"Active Confirmed Admins": "Administrateurs confirmés actifs",
"Current User": "Utilisateur actuel",
"New Contact Created": "Nouveau contact créé",
"Contact Updated": "Contact mis à jour",
"New Company Created": "Nouvelle entreprise créée",
"Company Updated": "Société mise à jour",
"New Call Created": "Nouvel appel créé",
"New Task Created": "Nouvelle tâche créée",
"New Event Created": "Nouvel événement créé",
"New Pipeline Record Created": "Nouvel enregistrement de pipeline créé",
"Pipeline Record Updated": "Enregistrement du pipeline mis à jour",
"Triggers when a new contact is created": "Déclenche lorsqu'un nouveau contact est créé",
"Triggers when a contact is updated": "Déclenche lorsqu'un contact est mis à jour",
"Triggers when a new company record is created": "Déclenche lorsqu'un nouvel enregistrement d'entreprise est créé",
"Triggers when a company record is updated": "Déclenche quand un enregistrement d'entreprise est mis à jour",
"Triggers when a new call log is created": "Déclenche lorsqu'un nouveau journal d'appel est créé",
"Triggers when a new task is created": "Déclenche quand une nouvelle tâche est créée",
"Triggers when a new event is created": "Déclenche lorsqu'un nouvel événement est créé",
"Triggers when a new pipeline record is created": "Déclenche lorsqu'un nouvel enregistrement de pipeline est créé",
"Triggers when a pipeline record is updated": "Déclenche lorsqu'un enregistrement de pipeline est mis à jour"
}

View File

@@ -0,0 +1,250 @@
{
"Bigin by Zoho CRM is a lightweight CRM designed for small businesses to manage contacts, companies, deals (pipeline records), tasks, calls, and events.": "Bigin by Zoho CRM は、連絡先、企業、取引先(パイプラインレコード)、タスク、電話、イベントを管理するための小規模企業向けに設計された軽量CRMです。",
"Your Data Center Region": "データセンターの地域",
"Select your Zoho data center region for your account": "アカウントのZohoデータセンターの地域を選択してください",
"United States (.com)": "アメリカ (.com)",
"Australia (.com.au)": "オーストラリア (.com.au)",
"Europe (.eu)": "ヨーロッパ (.eu)",
"India (.in)": "インド (.in)",
"China (.com.cn)": "中国 (.com.cn)",
"Japan (.jp)": "日本 (.jp)",
"Saudi Arabia (.sa)": "Saudi Arabia (.sa)",
"Canada (.ca)": "カナダ (.ca)",
"Create Company": "所属を作成",
"Update Company": "所属を更新",
"Create Contact": "連絡先を作成",
"Update Contact": "連絡先を更新",
"Create Task": "タスクを作成",
"Update Task": "タスクの更新",
"Create Call": "通話を作成",
"Create Event": "イベントを作成",
"Update Event": "予定を更新",
"Create Pipeline": "パイプラインを作成",
"Update Pipeline": "パイプラインを更新",
"Search Pipeline Record": "パイプラインレコードの検索",
"Search Company Record": "会社レコードを検索",
"Search Contact Record": "連絡先レコードを検索",
"Search Product Record": "製品レコードを検索",
"Search User": "ユーザーを検索",
"Creates a Company Record": "会社記録を作成",
"Updates an existing Company and prepopulates its fields for editing.": "既存の会社を更新し、そのフィールドに編集用に事前に入力します。",
"Creates a Contact Record": "連絡先レコードを作成します。",
"Select and update an existing Contact record.": "既存の連絡先レコードを選択して更新します。",
"Creates a new Task": "新しいタスクを作成",
"updates a Task": "タスクを更新",
"Creates a Call Log Entry Record": "コールログエントリーレコードを作成",
"Creates a new event in Bigin": "Bigin で新しいイベントを作成します",
"Updates an existing event in Bigin": "Bigin の既存のイベントを更新します",
"Creates a new pipeline record in Bigin": "Bigin に新しいパイプラインレコードを作成します。",
"updates a pipeline record in Bigin": "Bigin のパイプラインレコードを更新",
"Searches deals by name via criteria or word": "条件または単語で取引を検索します。",
"Searches companies by full name (criteria) or word": "会社をフルネーム (基準) または単語で検索",
"Searches contacts by criteria, email, phone, or word": "連絡先を基準、メール、電話、単語で検索します。",
"Searches products by name/code via criteria or word": "基準または単語で製品を名前/コードで検索",
"Locate users by email.": "メールでユーザーを探します。",
"Account Name": "口座名",
"Phone": "電話番号",
"Website": "ウェブサイト",
"Tags": "タグ",
"Description": "説明",
"Owner": "所有者",
"Billing Street": "住所(請求先)",
"Billing City": "市区町村名",
"Billing State": "請求ステータス",
"Billing Country": "請求先の国",
"Billing Code": "請求コード",
"Select Company": "所属を選択",
"Company Details": "会社詳細",
"First Name": "名",
"Last Name": "Last Name",
"Title": "タイトル",
"Email": "Eメールアドレス",
"Mobile": "モバイル",
"Email Opt Out": "オプトアウトのメール",
"Company": "会社名",
"Mailing Street": "住所1(郵送先)",
"Mailing City": "市区町村(郵送先 ",
"Mailing State": "都道府県(郵送先 ",
"Mailing Country": "国名",
"Mailing Zip": "郵送先郵便番号",
"Select Contact": "連絡先を選択",
"Contact Fields": "連絡先フィールド",
"Subject": "件名",
"Due Date": "締切日",
"Make Task Recurring": "タスクを繰り返し実行",
"Recurring Info": "定期的な情報",
"Enable Reminder": "リマインダーを有効にする",
"Reminder Information": "リマインダー情報",
"Related Module": "関連モジュール",
"Related To": "関連先",
"Priority": "優先度",
"Status": "ステータス",
"Select Task": "タスクを選択",
"Task Details": "タスクの詳細",
"Call Start Time": "通話開始時刻",
"Call Duration (minutes)": "通話時間 (分)",
"Call Type": "通話タイプ",
"Contacts": "連絡先",
"Call Agenda": "予定を呼んでください",
"Reminder": "リマインダ",
"Dialed Number": "ダイヤル番号",
"Event Title": "イベントタイトル",
"Start Date & Time": "開始日時",
"End Date & Time": "終了日時",
"All Day Event": "終日イベント",
"Make Event Recurring": "イベントを繰り返します",
"Venue": "会場",
"Participants": "参加者",
"Select Event": "イベントを選択",
"Event Fields": "イベントフィールド",
"Deal Name": "取引名",
"Pipelines": "パイプライン",
"Sub Pipeline": "サブパイプライン",
"Stage": "ステージ",
"Amount": "金額",
"Secondary Contacts": "セカンダリ連絡先",
"Closing Date": "終了日",
"Associated Products": "関連製品",
"Additional Fields": "追加項目",
"Pipeline Record": "パイプラインレコード",
"Pipeline Details": "パイプラインの詳細",
"Search Mode": "検索モード",
"Search Term": "検索用語",
"User Type (optional)": "ユーザータイプ (オプション)",
"Page": "ページ",
"Per Page": "ページごと",
"Provide the name of the company": "会社名を入力してください",
"Provide a phone number for the company": "会社の電話番号を入力してください",
"Provide a website URL for the company": "会社のウェブサイトURLを入力してください",
"Select tags to associate with this module, \"Accounts\".": "このモジュール「アカウント」に関連付けるタグを選択します。",
"Provide additional descriptions or notes related to the company": "会社に関する追加の説明またはメモを入力してください",
"Select the owner to which the record will be assigned.": "レコードを割り当てる所有者を選択します。",
"The street address of the company": "会社の住所",
"The city where the company is located": "会社のある都市",
"The state or province where the company is located": "会社が所在する州または地域",
"The country of the company": "会社の国",
"The ZIP or postal code of the company": "会社の郵便番号",
"Choose a company to update": "更新する会社を選択",
"These fields will be prepopulated with company data": "これらのフィールドには、企業データが事前に入力されます",
"First name of the contact": "連絡先の名",
"Last name of the contact": "連絡先の姓",
"Job title of the contact": "担当者の職名",
"Email address of the contact": "連絡先のメールアドレス",
"Mobile phone number": "携帯電話番号",
"Whether the contact has opted out of emails": "連絡先が電子メールからオプトアウトしているかどうか",
"The ID of the company to which the record will be associated. If not provided, the record will not be associated with any company.": "レコードが関連付けられる会社のID。指定されていない場合、レコードは会社に関連付けられません。",
"Select tags to associate with this module, \"Contacts\".": "このモジュール「連絡先」に関連付けるタグを選択します。",
"Provide additional descriptions or notes related to the contact": "連絡先に関連する追加の説明またはメモを入力してください",
"Street address for mailing": "郵送先の住所です。",
"City for mailing address": "住所の市区町村名",
"State for mailing address": "都道府県(州)",
"Country for mailing address": "配送先住所の国",
"ZIP/postal code": "郵便番号/郵便番号",
"Choose a contact to update": "更新する連絡先を選択してください",
"Edit any of these fields": "いずれかのフィールドを編集",
"Provide the subject or title of the task": "タスクの件名またはタイトルを入力してください",
"Provide the due date of the task (YYYY-MM-DD format)": "タスクの期日(YYYY-MM-DD形式)を入力してください",
"make this task recurring": "このタスクを繰り返しにする",
"Please note: Due Date must be set above for recurring tasks": "ご注意ください: 繰り返しタスクの期日は上記で設定する必要があります",
"Enable reminder for this task": "このタスクのリマインダーを有効にする",
"Select the type of entity the task is related to. Options: Contacts, Pipelines, Companies.": "オプション: 連絡先, パイプライン, 企業.",
"Select the specific record the task is related to.": "タスクに関連する特定のレコードを選択します。",
"Provide additional descriptions or notes related to the task": "タスクに関連する追加の説明またはメモを入力してください",
"Provide the priority level of the task": "タスクの優先度レベルを指定します",
"Provide the current status of the task.": "タスクの現在のステータスを指定します。",
"Select tags to associate with this module, \"Tasks\".": "このモジュール「タスク」に関連付けるタグを選択します。",
"Choose a task to update": "更新するタスクを選択してください",
"These fields will be prepopulated with task data": "これらのフィールドにはタスクデータが事前に入力されます",
"Provide the start time of the call in ISO8601 format.": "ISO8601形式で呼び出しの開始時刻を指定します。",
"Provide the duration of the call in minutes (numeric). For example, 30 for a 30-minute call.": "通話の長さを分単位(数値)で指定します。たとえば、30分間の通話の場合は30分です。",
"Type of call": "通話の種類",
"The ID of the contact to which the record will be associated. If not provided, the record will not be associated with any contact.": "レコードが関連付けられる連絡先のID。指定されていない場合、レコードは連絡先に関連付けられません。",
"Subject of the call": "通話の件名",
"Description or notes about the call": "通話についての説明またはメモ",
"Agenda or purpose of the call": "通話の予定または目的",
"Reminder date and time for the call": "通話の日付と時刻",
"Provide the number dialed for the call.": "電話番号を入力します。",
"Select the type of entity the call is related to.": "通話に関連するエンティティの種類を選択します。",
"Select the specific record the call is related to.": "通話に関連する特定のレコードを選択します。",
"Select tags to associate with this module, \"Calls\".": "このモジュール「通話」に関連付けるタグを選択します。",
"Provide the title or name of the event": "イベントのタイトルまたは名前を入力してください",
"Start date and time of the event": "イベントの開始日時",
"End date and time of the event": "イベントの終了日時",
"Mark this as an all-day event": "終日イベントとしてマークする",
"Make this event recurring": "この予定を繰り返します",
"Enable reminder for this event": "このイベントのリマインダーを有効にする",
"Location or venue of the event": "イベントの開催地または会場",
"Select the type of entity the event is related to": "イベントに関連するエンティティの種類を選択します",
"Select the specific record the event is related to": "イベントに関連する特定のレコードを選択します。",
"Add participants to the event": "イベントに参加者を追加",
"Additional descriptions or notes related to the event": "イベントに関連する追加の説明またはメモ",
"Select tags to associate with this module, \"Events\".": "このモジュール「イベント」に関連付けるタグを選択します。",
"Choose the event to update": "更新する予定を選択",
"Provide the name for the pipeline record (deal)": "パイプラインレコードの名前を入力してください (取引)",
"Provide the Team Pipeline to which the pipeline record (deal) belongs": "パイプライン記録(取引)が属するチームパイプラインを提供する",
"Pick one of the configured sub-pipelines": "構成されたサブパイプラインのいずれかを選択",
"Provide the current stage of the pipeline record (deal) within the Sub-Pipeline": "サブパイプライン内のパイプラインレコードの現在のステージ (取引) を提供します",
"The amount of the pipeline record (deal)": "パイプラインレコードの量 (取引)",
"Provide a list of additional contacts associated with the record": "レコードに関連付けられている追加の連絡先のリストを提供します",
"Provide the expected or actual closing date of the pipeline record (deal) in YYYY-MM-DD format": "パイプラインレコードの予想または実際の終了日をYYYY-MM-DD形式で入力してください",
"Provide a list of products associated with the record": "レコードに関連付けられている製品のリストを提供します",
"Select tags to associate with this module, \"Pipelines\".": "このモジュール「Pipelines」に関連付けるタグを選択します。",
"Optional fields from the Pipelines module": "パイプラインモジュールのオプションフィールド",
"Select a pipeline record": "パイプラインレコードを選択",
"These fields will be prepopulated with pipeline data": "これらのフィールドにはパイプラインデータが事前に入力されます",
"Deal Name (criteria) or word": "取引名(基準)または単語",
"Company full name (criteria) or word": "会社のフルネーム(基準)または単語",
"Choose how to search Contacts": "連絡先を検索する方法を選択",
"Text, email, phone, or word based on the selected mode": "選択したモードに基づいてテキスト、電子メール、電話、または単語。",
"Product name/code (criteria) or word": "製品名/コード(基準)または単語",
"User email address (full or partial, case-insensitive match)": "ユーザーのメールアドレス(大文字と小文字を区別しない一致)",
"Page index (default 1)": "ページインデックス (デフォルト 1)",
"Records per page (max 200, default 200)": "ページあたりのレコード数最大200、デフォルト200",
"Companies": "会社名",
"High": "高い",
"Normal": "標準",
"Low": "低い",
"Lowest": "最低値",
"Highest": "最高値",
"In Progress": "進行中",
"Completed": "完了",
"Deferred": "遅延しました",
"Waiting for input": "入力待機中",
"Not Started": "未開始",
"Outbound": "Outbound",
"Inbound": "Inbound",
"Missed": "不在です",
"Criteria (Deal Name)": "基準(取引名)",
"Word": "単語",
"Criteria (full name)": "条件 (フルネーム)",
"Criteria (name/email/mobile)": "基準 (名前/電子メール/モバイル)",
"Criteria (name/code)": "基準 (名前/コード)",
"All Users": "すべてのユーザー",
"Active Users": "アクティブなユーザー",
"Deactive Users": "無効なユーザー",
"Confirmed Users": "確認済みユーザー",
"Not Confirmed Users": "未確認",
"Deleted Users": "削除されたユーザー",
"Active Confirmed Users": "アクティブな確認済みユーザー",
"Admin Users": "管理者ユーザー",
"Active Confirmed Admins": "アクティブな管理者確認",
"Current User": "現在のユーザー",
"New Contact Created": "新しい連絡先が作成されました",
"Contact Updated": "連絡先を更新しました",
"New Company Created": "新しい所属が作成されました",
"Company Updated": "所属が更新されました",
"New Call Created": "新しい通話が作成されました",
"New Task Created": "新しいタスクが作成されました",
"New Event Created": "新しいイベントが作成されました",
"New Pipeline Record Created": "新しいパイプラインレコードが作成されました",
"Pipeline Record Updated": "パイプラインレコードが更新されました",
"Triggers when a new contact is created": "新しい連絡先が作成されたときにトリガーします",
"Triggers when a contact is updated": "連絡先が更新されたときにトリガーします",
"Triggers when a new company record is created": "新しい会社レコードが作成されたときにトリガーします",
"Triggers when a company record is updated": "会社レコードが更新されたときにトリガーします",
"Triggers when a new call log is created": "新しい通話履歴が作成されたときにトリガーします",
"Triggers when a new task is created": "新しいタスクが作成されたときにトリガーします",
"Triggers when a new event is created": "新しいイベントが作成されたときにトリガーします",
"Triggers when a new pipeline record is created": "新しいパイプラインレコードが作成されたときにトリガーします",
"Triggers when a pipeline record is updated": "パイプラインレコードが更新されたときにトリガーします"
}

View File

@@ -0,0 +1,250 @@
{
"Bigin by Zoho CRM is a lightweight CRM designed for small businesses to manage contacts, companies, deals (pipeline records), tasks, calls, and events.": "Bigin door Zoho CRM is een lichtgewicht CRM ontworpen voor kleine bedrijven om contacten, bedrijven, bedrijven te beheren (pipeline records), taken, oproepen en evenementen.",
"Your Data Center Region": "De regio van uw datacenter",
"Select your Zoho data center region for your account": "Selecteer de regio van uw Zoho datacentrum voor uw account",
"United States (.com)": "Verenigde Staten (.com)",
"Australia (.com.au)": "Australië (.com.au)",
"Europe (.eu)": "Europa (.eu)",
"India (.in)": "India (.in)",
"China (.com.cn)": "China (.com.cn)",
"Japan (.jp)": "Japan (.jp)",
"Saudi Arabia (.sa)": "Saudi Arabia (.sa)",
"Canada (.ca)": "Canada (.ca)",
"Create Company": "Bedrijf aanmaken",
"Update Company": "Bedrijf bijwerken",
"Create Contact": "Contactpersoon aanmaken",
"Update Contact": "Contactpersoon bijwerken",
"Create Task": "Taak maken",
"Update Task": "Taak bijwerken",
"Create Call": "Oproep aanmaken",
"Create Event": "Gebeurtenis aanmaken",
"Update Event": "Gebeurtenis bijwerken",
"Create Pipeline": "Maak Pijplijn",
"Update Pipeline": "Pijplijn bijwerken",
"Search Pipeline Record": "Zoek Pipeline Record",
"Search Company Record": "Zoek bedrijfsrecord",
"Search Contact Record": "Zoek Contact Record",
"Search Product Record": "Zoek in productrecord",
"Search User": "Zoek gebruiker",
"Creates a Company Record": "Maakt een bedrijfsgegevens aan",
"Updates an existing Company and prepopulates its fields for editing.": "Werkt een bestaand bedrijf bij en vult de velden voor wijziging in.",
"Creates a Contact Record": "Maakt een Contact Record",
"Select and update an existing Contact record.": "Selecteer en update een bestaand contact record.",
"Creates a new Task": "Maakt een nieuwe taak",
"updates a Task": "een taak bijwerken",
"Creates a Call Log Entry Record": "Maakt een gesprekslog record aan",
"Creates a new event in Bigin": "Maakt een nieuwe gebeurtenis aan in Bigin",
"Updates an existing event in Bigin": "Werkt een bestaand evenement bij in Bigin",
"Creates a new pipeline record in Bigin": "Maakt een nieuwe pipeline record in Bigin",
"updates a pipeline record in Bigin": "werkt een pipeline record in Bigin bij",
"Searches deals by name via criteria or word": "Zoekt deals op naam via criteria of woord",
"Searches companies by full name (criteria) or word": "Bedrijven zoeken op volledige naam (criteria) of woord",
"Searches contacts by criteria, email, phone, or word": "Zoekt contacten op basis van criteria, e-mail, telefoon of woord",
"Searches products by name/code via criteria or word": "Zoek producten op naam/code via criteria of woord",
"Locate users by email.": "Zoek gebruikers per e-mail.",
"Account Name": "Klant naam",
"Phone": "Telefoonnummer",
"Website": "website",
"Tags": "Labels",
"Description": "Beschrijving",
"Owner": "Eigenaar",
"Billing Street": "Factuur straat",
"Billing City": "Facturering stad",
"Billing State": "Factuur Provincie",
"Billing Country": "Facturatie land",
"Billing Code": "Factuur code",
"Select Company": "Selecteer bedrijf",
"Company Details": "Bedrijf Gegevens",
"First Name": "Voornaam",
"Last Name": "Achternaam",
"Title": "Aanspreektitel",
"Email": "E-mail",
"Mobile": "Mobiel",
"Email Opt Out": "Niet e-mailen",
"Company": "Bedrijfsnaam",
"Mailing Street": "Postadres straat",
"Mailing City": "Postadres Plaats",
"Mailing State": "Postadres provincie",
"Mailing Country": "Postadres Land",
"Mailing Zip": "Postadres Postcode",
"Select Contact": "Selecteer contactpersoon",
"Contact Fields": "Contact velden",
"Subject": "Onderwerp",
"Due Date": "Inleverdatum",
"Make Task Recurring": "Maak taak terugkerend",
"Recurring Info": "Terugkerende Info",
"Enable Reminder": "Herinnering inschakelen",
"Reminder Information": "Herinnering informatie",
"Related Module": "Gerelateerde Module",
"Related To": "Gerelateerd aan",
"Priority": "Prioriteit",
"Status": "status",
"Select Task": "Selecteer taak",
"Task Details": "Taak details",
"Call Start Time": "Bel Start Tijd",
"Call Duration (minutes)": "Oproepduur (minuten)",
"Call Type": "Soort gesprek",
"Contacts": "Contactpersonen",
"Call Agenda": "Agenda bellen",
"Reminder": "Herinnering",
"Dialed Number": "Gekozen Nummer",
"Event Title": "Event titel",
"Start Date & Time": "Startdatum en -tijd",
"End Date & Time": "Einddatum & tijd",
"All Day Event": "Hele Dag Evenement",
"Make Event Recurring": "Terugkerend event maken",
"Venue": "Partner",
"Participants": "Deelnemers",
"Select Event": "Selecteer Evenement",
"Event Fields": "Afspraak velden",
"Deal Name": "Deal Naam",
"Pipelines": "Pipelines",
"Sub Pipeline": "Sub Pipeline",
"Stage": "Speelveld",
"Amount": "Hoeveelheid",
"Secondary Contacts": "Secundaire contactpersonen",
"Closing Date": "Sluiting datum",
"Associated Products": "Gekoppelde producten",
"Additional Fields": "Extra velden",
"Pipeline Record": "Pijplijn Record",
"Pipeline Details": "Pijplijn Details",
"Search Mode": "Zoek modus",
"Search Term": "Zoek term",
"User Type (optional)": "Gebruikerstype (optioneel)",
"Page": "Pagina",
"Per Page": "Per pagina",
"Provide the name of the company": "Geef de naam van het bedrijf op",
"Provide a phone number for the company": "Geef een telefoonnummer op voor het bedrijf",
"Provide a website URL for the company": "Geef een website-URL op voor het bedrijf",
"Select tags to associate with this module, \"Accounts\".": "Selecteer tags om te koppelen aan deze module, \"Accounts\".",
"Provide additional descriptions or notes related to the company": "Geef extra beschrijvingen of notities met betrekking tot het bedrijf",
"Select the owner to which the record will be assigned.": "Selecteer de eigenaar waaraan het record wordt toegewezen.",
"The street address of the company": "De straatadres van het bedrijf",
"The city where the company is located": "De stad waar het bedrijf zich bevindt",
"The state or province where the company is located": "De staat of provincie waar het bedrijf gevestigd is",
"The country of the company": "Het land van het bedrijf",
"The ZIP or postal code of the company": "De postcode van het bedrijf",
"Choose a company to update": "Kies een bedrijf om bij te werken",
"These fields will be prepopulated with company data": "Deze velden worden voorgevuld met bedrijfsgegevens",
"First name of the contact": "Voornaam van de contactpersoon",
"Last name of the contact": "Achternaam van de contactpersoon",
"Job title of the contact": "Job titel van het contact",
"Email address of the contact": "E-mailadres van de contactpersoon",
"Mobile phone number": "Mobiel telefoonnummer",
"Whether the contact has opted out of emails": "Of de contactpersoon zich heeft afgemeld voor e-mails",
"The ID of the company to which the record will be associated. If not provided, the record will not be associated with any company.": "Het ID van het bedrijf waaraan het record wordt gekoppeld. Als dit niet wordt opgegeven, wordt het record niet gekoppeld aan een bedrijf.",
"Select tags to associate with this module, \"Contacts\".": "Selecteer tags om te koppelen aan deze module, \"Contacten\".",
"Provide additional descriptions or notes related to the contact": "Geef extra beschrijvingen of notities met betrekking tot de contactpersoon",
"Street address for mailing": "Adres voor mailing",
"City for mailing address": "Plaats voor mailing adres",
"State for mailing address": "Staat voor mailing adres",
"Country for mailing address": "Land voor mailing adres",
"ZIP/postal code": "Postcode",
"Choose a contact to update": "Kies een te updaten contactpersoon",
"Edit any of these fields": "Bewerk een van deze velden",
"Provide the subject or title of the task": "Geef het onderwerp of de titel van de taak op",
"Provide the due date of the task (YYYY-MM-DD format)": "Geef de vervaldatum van de taak op (YYYY-MM-DD formaat)",
"make this task recurring": "deze taak terugkerend maken",
"Please note: Due Date must be set above for recurring tasks": "Let op: De vervaldatum moet hierboven worden ingesteld voor terugkerende taken",
"Enable reminder for this task": "Activeer herinnering voor deze taak",
"Select the type of entity the task is related to. Options: Contacts, Pipelines, Companies.": "Selecteer het type entiteit waaraan de taak gerelateerd is. Opties: Contacten, Pipelines, Bedrijven.",
"Select the specific record the task is related to.": "Selecteer het record waaraan de taak is gerelateerd",
"Provide additional descriptions or notes related to the task": "Geef extra beschrijvingen of notities met betrekking tot de taak",
"Provide the priority level of the task": "Geef het prioriteitsniveau van de taak op",
"Provide the current status of the task.": "Geef de huidige status van de taak op.",
"Select tags to associate with this module, \"Tasks\".": "Selecteer tags om te koppelen aan deze module, \"Taken\".",
"Choose a task to update": "Kies een te updaten taak",
"These fields will be prepopulated with task data": "Deze velden worden voorgevuld met taakgegevens",
"Provide the start time of the call in ISO8601 format.": "Geef de starttijd van de oproep in ISO8601 formaat.",
"Provide the duration of the call in minutes (numeric). For example, 30 for a 30-minute call.": "Geef de duur van de oproep in minuten (numeriek). Bijvoorbeeld, 30 voor een gesprek van 30 minuten.",
"Type of call": "Soort gesprek",
"The ID of the contact to which the record will be associated. If not provided, the record will not be associated with any contact.": "Het ID van de contactpersoon waaraan het record wordt gekoppeld. Indien niet geleverd, wordt het record niet geassocieerd met een contactpersoon.",
"Subject of the call": "Onderwerp van de oproep",
"Description or notes about the call": "Beschrijving of notities over het gesprek",
"Agenda or purpose of the call": "Agenda of doel van de oproep",
"Reminder date and time for the call": "Herinnering datum en tijd voor de oproep",
"Provide the number dialed for the call.": "Geef het nummer voor het gesprek op.",
"Select the type of entity the call is related to.": "Selecteer het type entiteit waar de oproep aan gerelateerd is.",
"Select the specific record the call is related to.": "Selecteer het specifieke record waaraan het gesprek is gerelateerd",
"Select tags to associate with this module, \"Calls\".": "Selecteer tags om te koppelen aan deze module, \"Gesprekken\".",
"Provide the title or name of the event": "Geef de titel of naam van de gebeurtenis op",
"Start date and time of the event": "Startdatum en -tijd van de gebeurtenis",
"End date and time of the event": "Einddatum en -tijd van de gebeurtenis",
"Mark this as an all-day event": "Markeer dit als een eendaagse gebeurtenis",
"Make this event recurring": "Deze afspraak terugplaatsen",
"Enable reminder for this event": "Activeer herinnering voor deze gebeurtenis",
"Location or venue of the event": "Locatie of locatie van de gebeurtenis",
"Select the type of entity the event is related to": "Selecteer het type entiteit waar het evenement aan gerelateerd is",
"Select the specific record the event is related to": "Selecteer het specifieke record waar de gebeurtenis betrekking op heeft",
"Add participants to the event": "Deelnemers toevoegen aan de gebeurtenis",
"Additional descriptions or notes related to the event": "Aanvullende beschrijvingen of notities gerelateerd aan het evenement",
"Select tags to associate with this module, \"Events\".": "Selecteer tags om te koppelen aan deze module, \"Gebeurtenissen\".",
"Choose the event to update": "Kies het bij te werken evenement",
"Provide the name for the pipeline record (deal)": "Geef de naam op voor de pipeline record (deal)",
"Provide the Team Pipeline to which the pipeline record (deal) belongs": "Geef de Team Pipeline aan waartoe het pipeline record behoort (deal)",
"Pick one of the configured sub-pipelines": "Kies een van de geconfigureerde sub-pipelines",
"Provide the current stage of the pipeline record (deal) within the Sub-Pipeline": "Geef de huidige fase van het pipeline record (deal) binnen de Sub-Pipeline",
"The amount of the pipeline record (deal)": "De hoeveelheid van het pipeline record (deal)",
"Provide a list of additional contacts associated with the record": "Geef een lijst op van aanvullende contacten die gekoppeld zijn aan het record",
"Provide the expected or actual closing date of the pipeline record (deal) in YYYY-MM-DD format": "Geef de verwachte of werkelijke sluitingsdatum van het pipeline-record (deal) in YYYY-MM-DD formaat",
"Provide a list of products associated with the record": "Geef een lijst van producten die gekoppeld zijn aan het record",
"Select tags to associate with this module, \"Pipelines\".": "Selecteer tags om te koppelen aan deze module, \"Pipelines\".",
"Optional fields from the Pipelines module": "Optionele velden van de Pipelines module",
"Select a pipeline record": "Selecteer een record voor de pipeline",
"These fields will be prepopulated with pipeline data": "Deze velden zullen vooraf worden gevuld met pipeline gegevens",
"Deal Name (criteria) or word": "Deal Name (criteria) of woord",
"Company full name (criteria) or word": "Bedrijf volledige naam (criteria) of woord",
"Choose how to search Contacts": "Kies hoe u contacten wilt zoeken",
"Text, email, phone, or word based on the selected mode": "Tekst, e-mail, telefoon of woord gebaseerd op de geselecteerde modus",
"Product name/code (criteria) or word": "Productnaam/code (criteria) of woord",
"User email address (full or partial, case-insensitive match)": "E-mailadres van de gebruiker (volledige of gedeeltelijke, hoofdlettergevoelige wedstrijd)",
"Page index (default 1)": "Pagina index (standaard 1)",
"Records per page (max 200, default 200)": "Records per pagina (max 200, standaard 200)",
"Companies": "Bedrijven",
"High": "hoog",
"Normal": "normaal",
"Low": "laag",
"Lowest": "Laagste",
"Highest": "Hoogste",
"In Progress": "In uitvoering",
"Completed": "Voltooid",
"Deferred": "Uitgesteld",
"Waiting for input": "Wachten op invoer",
"Not Started": "Niet begonnen",
"Outbound": "Uitgaande",
"Inbound": "Inkomende",
"Missed": "Gemist",
"Criteria (Deal Name)": "Criteria (Deal Naam)",
"Word": "Woord",
"Criteria (full name)": "Criteria (volledige naam)",
"Criteria (name/email/mobile)": "Criteria (naam/e-mail/mobile)",
"Criteria (name/code)": "Criteria (naam/code)",
"All Users": "Alle gebruikers",
"Active Users": "Actieve gebruikers",
"Deactive Users": "Deactieve gebruikers",
"Confirmed Users": "Bevestigde gebruikers",
"Not Confirmed Users": "Niet bevestigde gebruikers",
"Deleted Users": "Verwijderde gebruikers",
"Active Confirmed Users": "Actieve bevestigde gebruikers",
"Admin Users": "Beheerder gebruikers",
"Active Confirmed Admins": "Actieve bevestigde beheerders",
"Current User": "Huidige gebruiker",
"New Contact Created": "Nieuw contact aangemaakt",
"Contact Updated": "Contactpersoon bijgewerkt",
"New Company Created": "Nieuw bedrijf aangemaakt",
"Company Updated": "Bedrijf bijgewerkt",
"New Call Created": "Nieuwe oproep aangemaakt",
"New Task Created": "Nieuwe taak aangemaakt",
"New Event Created": "Nieuwe gebeurtenis aangemaakt",
"New Pipeline Record Created": "Nieuwe Pipeline Record Gemaakt",
"Pipeline Record Updated": "Pijplijn Record Bijgewerkt",
"Triggers when a new contact is created": "Triggert wanneer een nieuw contact wordt aangemaakt",
"Triggers when a contact is updated": "Triggert wanneer een contact wordt bijgewerkt",
"Triggers when a new company record is created": "Triggert wanneer een nieuw bedrijfsrecord wordt aangemaakt",
"Triggers when a company record is updated": "Triggert wanneer een bedrijf record wordt bijgewerkt",
"Triggers when a new call log is created": "Triggert wanneer een nieuwe gesprekkenlijst wordt aangemaakt",
"Triggers when a new task is created": "Triggert wanneer een nieuwe taak wordt aangemaakt",
"Triggers when a new event is created": "Triggert wanneer een nieuwe gebeurtenis wordt aangemaakt",
"Triggers when a new pipeline record is created": "Triggert wanneer een nieuwe pipeline record wordt aangemaakt",
"Triggers when a pipeline record is updated": "Triggert wanneer een pipeline record wordt bijgewerkt"
}

View File

@@ -0,0 +1,250 @@
{
"Bigin by Zoho CRM is a lightweight CRM designed for small businesses to manage contacts, companies, deals (pipeline records), tasks, calls, and events.": "Bigin by Zoho CRM é um CRM ligeiro projetado para pequenas empresas para gerenciar contatos, empresas, operações (registros de pipeline), tarefas, chamadas e eventos.",
"Your Data Center Region": "Sua região do Centro de Dados",
"Select your Zoho data center region for your account": "Selecione sua região do centro de dados Zoho para sua conta",
"United States (.com)": "Estados Unidos (.com)",
"Australia (.com.au)": "Austrália (.com.au)",
"Europe (.eu)": "Europa (.eu)",
"India (.in)": "Índia (.in)",
"China (.com.cn)": "China (.com.cn)",
"Japan (.jp)": "Japão (.jp)",
"Saudi Arabia (.sa)": "Saudi Arabia (.sa)",
"Canada (.ca)": "Canadá (.ca)",
"Create Company": "Criar Empresa",
"Update Company": "Atualizar Empresa",
"Create Contact": "Criar contato",
"Update Contact": "Atualizar contato",
"Create Task": "Criar tarefa",
"Update Task": "Atualizar Tarefa",
"Create Call": "Criar Ligação",
"Create Event": "Criar evento",
"Update Event": "Atualizar Evento",
"Create Pipeline": "Criar Pipeline",
"Update Pipeline": "Atualizar Pipeline",
"Search Pipeline Record": "Buscar Registro de Pipeline",
"Search Company Record": "Pesquisar registro de empresa",
"Search Contact Record": "Pesquisar registro de contato",
"Search Product Record": "Pesquisar Registro de Produto",
"Search User": "Pesquisar usuário",
"Creates a Company Record": "Cria um registro de empresa",
"Updates an existing Company and prepopulates its fields for editing.": "Atualiza uma Empresa existente e prepreenche seus campos para edição.",
"Creates a Contact Record": "Cria um registro de contato",
"Select and update an existing Contact record.": "Selecione e atualize um registro de Contato existente.",
"Creates a new Task": "Cria uma nova tarefa",
"updates a Task": "atualiza uma Tarefa",
"Creates a Call Log Entry Record": "Cria um Registro de Registro de Entrada de Chamada",
"Creates a new event in Bigin": "Cria um novo evento no Bigin",
"Updates an existing event in Bigin": "Atualiza um evento existente no Bigin",
"Creates a new pipeline record in Bigin": "Cria um novo registro de pipeline no Bigin",
"updates a pipeline record in Bigin": "atualiza um registro de pipeline no Bigin",
"Searches deals by name via criteria or word": "Pesquisa negócios por nome via critério ou palavra",
"Searches companies by full name (criteria) or word": "Pesquisa empresas por nome completo (critérios) ou palavra",
"Searches contacts by criteria, email, phone, or word": "Pesquisa contatos por critérios, e-mail, telefone ou palavra",
"Searches products by name/code via criteria or word": "Pesquisa produtos por nome/código via critério ou palavra",
"Locate users by email.": "Localizar usuários por e-mail.",
"Account Name": "Nome da Conta",
"Phone": "Smartphone",
"Website": "site",
"Tags": "Etiquetas",
"Description": "Descrição",
"Owner": "Proprietário",
"Billing Street": "Endereço de Faturamento",
"Billing City": "Cidade de Cobrança",
"Billing State": "Estado de Cobrança",
"Billing Country": "Billing País",
"Billing Code": "Código de cobrança",
"Select Company": "Selecionar empresa",
"Company Details": "Detalhes da Empresa",
"First Name": "Nome",
"Last Name": "Sobrenome",
"Title": "Título",
"Email": "e-mail",
"Mobile": "Celular",
"Email Opt Out": "Recusa E-mail",
"Company": "Empresas",
"Mailing Street": "Endereço Correspondência",
"Mailing City": "Cidade Correspondência",
"Mailing State": "Estado Correspondência",
"Mailing Country": "País Correspondência",
"Mailing Zip": "CEP Correspondência",
"Select Contact": "Selecionar contato",
"Contact Fields": "Campos de contato",
"Subject": "Cargo",
"Due Date": "Data de vencimento",
"Make Task Recurring": "Fazer Tarefa Recorrente",
"Recurring Info": "Informações Recorrentes",
"Enable Reminder": "Habilitar lembrete",
"Reminder Information": "Informações de Lembrete",
"Related Module": "Módulo relacionado",
"Related To": "Relacionado a",
"Priority": "Prioridade",
"Status": "Estado",
"Select Task": "Selecionar Tarefa",
"Task Details": "Detalhes da Tarefa",
"Call Start Time": "Hora inicial da chamada",
"Call Duration (minutes)": "Duração da Chamada (minutos)",
"Call Type": "Tipo de chamada",
"Contacts": "CONTATOS",
"Call Agenda": "Agenda de chamadas",
"Reminder": "Lembrete",
"Dialed Number": "Número discado",
"Event Title": "Título da Reunião",
"Start Date & Time": "Data e Hora Inicial",
"End Date & Time": "Data e Hora Final",
"All Day Event": "Evento de dia inteiro",
"Make Event Recurring": "Fazer Evento Recorrente",
"Venue": "Localidade",
"Participants": "Participantes",
"Select Event": "Selecionar Evento",
"Event Fields": "Campos de Evento",
"Deal Name": "Nome da oferta",
"Pipelines": "Tubulações",
"Sub Pipeline": "Sub pipeline",
"Stage": "Etapa",
"Amount": "Quantidade",
"Secondary Contacts": "Contatos Secundários",
"Closing Date": "Data de encerramento",
"Associated Products": "Produtos associados",
"Additional Fields": "Campos adicionais",
"Pipeline Record": "Registro de Pipeline",
"Pipeline Details": "Detalhes do Pipeline",
"Search Mode": "Modo de Busca",
"Search Term": "Termo para pesquisa",
"User Type (optional)": "Tipo de Usuário (opcional)",
"Page": "Página",
"Per Page": "Por página",
"Provide the name of the company": "Informe o nome da empresa",
"Provide a phone number for the company": "Forneça um número de telefone para a empresa",
"Provide a website URL for the company": "Forneça um URL do site para a empresa",
"Select tags to associate with this module, \"Accounts\".": "Selecionar tags para associar com este módulo, \"Contas\".",
"Provide additional descriptions or notes related to the company": "Forneça descrições ou notas adicionais relacionadas à empresa",
"Select the owner to which the record will be assigned.": "Selecione o dono para o qual o registro será atribuído.",
"The street address of the company": "O endereço da rua da empresa",
"The city where the company is located": "A cidade onde a empresa está localizada",
"The state or province where the company is located": "O estado ou província onde a empresa está localizada",
"The country of the company": "País da empresa",
"The ZIP or postal code of the company": "O CEP ou CEP da empresa",
"Choose a company to update": "Escolha uma empresa para atualizar",
"These fields will be prepopulated with company data": "Estes campos serão preenchidos com dados da empresa",
"First name of the contact": "Primeiro nome do contato",
"Last name of the contact": "Último nome do contato",
"Job title of the contact": "Título do trabalho do contato",
"Email address of the contact": "Endereço de email do contato",
"Mobile phone number": "Número de telefone celular",
"Whether the contact has opted out of emails": "Se o contato optou por não receber e-mails",
"The ID of the company to which the record will be associated. If not provided, the record will not be associated with any company.": "O ID da empresa ao qual o registro será associado. Se não fornecido, o registro não será associado com nenhuma empresa.",
"Select tags to associate with this module, \"Contacts\".": "Selecionar tags para associar com este módulo, \\\"Contatos\\\".",
"Provide additional descriptions or notes related to the contact": "Forneça descrições ou notas adicionais relacionadas ao contato",
"Street address for mailing": "Endereço da rua para correspondência",
"City for mailing address": "Cidade para endereço postal",
"State for mailing address": "Estado do endereço de correio",
"Country for mailing address": "País para o endereço de correio",
"ZIP/postal code": "CEP/Código postal",
"Choose a contact to update": "Escolha um contato para atualizar",
"Edit any of these fields": "Editar qualquer um destes campos",
"Provide the subject or title of the task": "Forneça o assunto ou o título da tarefa",
"Provide the due date of the task (YYYY-MM-DD format)": "Informe a data de vencimento da tarefa (formato YYYY-MM-DD)",
"make this task recurring": "fazer esta tarefa recorrente",
"Please note: Due Date must be set above for recurring tasks": "Por favor note: Data de vencimento deve ser definida acima para tarefas recorrentes",
"Enable reminder for this task": "Ativar lembrete para esta tarefa",
"Select the type of entity the task is related to. Options: Contacts, Pipelines, Companies.": "Selecione o tipo de entidade à qual a tarefa está relacionada. Opções: Contatos, Pipelines, Empresas.",
"Select the specific record the task is related to.": "Selecione o registro específico ao qual a tarefa está relacionada.",
"Provide additional descriptions or notes related to the task": "Forneça descrições ou notas adicionais relacionadas à tarefa",
"Provide the priority level of the task": "Forneça o nível de prioridade da tarefa",
"Provide the current status of the task.": "Informe o status atual da tarefa.",
"Select tags to associate with this module, \"Tasks\".": "Selecionar tags para associar com este módulo, \"Tarefas\".",
"Choose a task to update": "Escolha uma tarefa para atualizar",
"These fields will be prepopulated with task data": "Estes campos serão preenchidos com dados de tarefa",
"Provide the start time of the call in ISO8601 format.": "Informe o horário de início da chamada no formato ISO8601.",
"Provide the duration of the call in minutes (numeric). For example, 30 for a 30-minute call.": "Forneça a duração da chamada em minutos (numérico). Por exemplo, 30 para uma chamada de 30 minutos.",
"Type of call": "Tipo de chamada",
"The ID of the contact to which the record will be associated. If not provided, the record will not be associated with any contact.": "O ID do contato ao qual o registro será associado. Se não informado, o registro não será associado com nenhum contato.",
"Subject of the call": "Assunto da chamada",
"Description or notes about the call": "Descrição ou notas sobre a chamada",
"Agenda or purpose of the call": "Agenda ou propósito da chamada",
"Reminder date and time for the call": "Lembrete data e hora para a chamada",
"Provide the number dialed for the call.": "Fornecer o número discado para a chamada.",
"Select the type of entity the call is related to.": "Selecione o tipo de entidade com o qual a chamada está relacionada.",
"Select the specific record the call is related to.": "Selecione o registro específico ao qual a chamada está relacionada.",
"Select tags to associate with this module, \"Calls\".": "Selecione as tags para associar com este módulo, \"Ligações\".",
"Provide the title or name of the event": "Forneça o título ou o nome do evento",
"Start date and time of the event": "Data e hora de início do evento",
"End date and time of the event": "Data e hora de término do evento",
"Mark this as an all-day event": "Marcar isto como um evento de dia inteiro",
"Make this event recurring": "Tornar esta reunião recorrente",
"Enable reminder for this event": "Habilitar lembrete para este evento",
"Location or venue of the event": "Local ou local do evento",
"Select the type of entity the event is related to": "Selecione o tipo de entidade que o evento está relacionado com",
"Select the specific record the event is related to": "Selecione o registro específico que o evento é relacionado a",
"Add participants to the event": "Adicionar participantes ao evento",
"Additional descriptions or notes related to the event": "Descrições ou notas adicionais relacionadas ao evento",
"Select tags to associate with this module, \"Events\".": "Selecionar tags para associar com este módulo, \"Eventos\".",
"Choose the event to update": "Escolha o evento para atualizar",
"Provide the name for the pipeline record (deal)": "Forneça o nome para o registro de pipeline (oferta)",
"Provide the Team Pipeline to which the pipeline record (deal) belongs": "Fornecer o Pipeline para o qual o registro do pipeline (negócio) pertence",
"Pick one of the configured sub-pipelines": "Escolha um dos sub-pipelines configurados",
"Provide the current stage of the pipeline record (deal) within the Sub-Pipeline": "Forneça a etapa atual do registro de pipeline (negócio) dentro do Sub-Pipeline",
"The amount of the pipeline record (deal)": "A quantidade do registro de pipeline (oferta)",
"Provide a list of additional contacts associated with the record": "Fornecer uma lista de contatos adicionais associados com o registro",
"Provide the expected or actual closing date of the pipeline record (deal) in YYYY-MM-DD format": "Informe a data esperada ou real de fechamento do registro de pipeline (oferta) no formato YYYY-MM-DD",
"Provide a list of products associated with the record": "Fornecer uma lista de produtos associados com o registro",
"Select tags to associate with this module, \"Pipelines\".": "Selecionar etiquetas para associar com este módulo, \"Pipelines\".",
"Optional fields from the Pipelines module": "Campos opcionais do módulo Pipelines",
"Select a pipeline record": "Selecione um registro de pipeline",
"These fields will be prepopulated with pipeline data": "Estes campos serão preenchidos com dados de pipeline",
"Deal Name (criteria) or word": "Nome da oferta (critérios) ou palavra",
"Company full name (criteria) or word": "Nome completo da empresa (critérios) ou palavra",
"Choose how to search Contacts": "Escolha como pesquisar contatos",
"Text, email, phone, or word based on the selected mode": "Texto, e-mail, telefone ou palavra com base no modo selecionado",
"Product name/code (criteria) or word": "Nome / código do produto (critérios) ou palavra",
"User email address (full or partial, case-insensitive match)": "Endereço de e-mail do usuário (correspondência completa ou parcial, sem diferença)",
"Page index (default 1)": "Índice da página (padrão 1)",
"Records per page (max 200, default 200)": "Registros por página (máx. 200, padrão 200)",
"Companies": "Empresas",
"High": "alta",
"Normal": "normal",
"Low": "baixa",
"Lowest": "Mínimo",
"Highest": "Maior",
"In Progress": "Em Execução",
"Completed": "Concluído",
"Deferred": "Adiado",
"Waiting for input": "Aguardando entrada",
"Not Started": "Não Iniciado",
"Outbound": "Saída",
"Inbound": "Entrada",
"Missed": "Perdido",
"Criteria (Deal Name)": "Critérios (Nome da oferta)",
"Word": "Palavra",
"Criteria (full name)": "Critérios (nome completo)",
"Criteria (name/email/mobile)": "Critérios (nome/e-mail/móvel)",
"Criteria (name/code)": "Critérios (nome/código)",
"All Users": "Todos os usuários",
"Active Users": "Usuários ativos",
"Deactive Users": "Usuários desativados",
"Confirmed Users": "Usuários Confirmados",
"Not Confirmed Users": "Usuários não confirmados",
"Deleted Users": "Usuários excluídos",
"Active Confirmed Users": "Usuários ativos confirmados",
"Admin Users": "Usuários Administrativos",
"Active Confirmed Admins": "Administradores ativos Confirmados",
"Current User": "Usuário atual",
"New Contact Created": "Novo contato criado",
"Contact Updated": "Contato atualizado",
"New Company Created": "Nova empresa criada",
"Company Updated": "Empresa atualizada",
"New Call Created": "Nova chamada criada",
"New Task Created": "Nova tarefa criada",
"New Event Created": "Novo Evento criado",
"New Pipeline Record Created": "Novo Registro de Pipeline Criado",
"Pipeline Record Updated": "Pipeline Record Atualizado",
"Triggers when a new contact is created": "Dispara quando um novo contato é criado",
"Triggers when a contact is updated": "Dispara quando um contato é atualizado",
"Triggers when a new company record is created": "Dispara quando um novo registro de empresa é criado",
"Triggers when a company record is updated": "Dispara quando um registro de empresa é atualizado",
"Triggers when a new call log is created": "Disparar quando um novo registro de chamadas for criado",
"Triggers when a new task is created": "Dispara quando uma nova tarefa é criada",
"Triggers when a new event is created": "Dispara quando um novo evento é criado",
"Triggers when a new pipeline record is created": "Aciona quando um novo registro de pipeline é criado",
"Triggers when a pipeline record is updated": "Aciona quando um registro de pipeline é atualizado"
}

View File

@@ -0,0 +1,251 @@
{
"Bigin by Zoho CRM": "Bigin by Zoho CRM",
"Bigin by Zoho CRM is a lightweight CRM designed for small businesses to manage contacts, companies, deals (pipeline records), tasks, calls, and events.": "Bigin by Zoho CRM это легкий CRM, предназначенный для малых предприятий для управления контактами, компаний, сделок (трубопроводных записей), задач, звонков, и событий.",
"Your Data Center Region": "Область вашего центра данных",
"Select your Zoho data center region for your account": "Выберите ваш регион центра обработки данных Zoho для вашего аккаунта",
"United States (.com)": "США (.com)",
"Australia (.com.au)": "Австралия (.com.au)",
"Europe (.eu)": "Европа (.eu)",
"India (.in)": "Индия (.н)",
"China (.com.cn)": "China (.com.cn)",
"Japan (.jp)": "Япония (.jp)",
"Saudi Arabia (.sa)": "Saudi Arabia (.sa)",
"Canada (.ca)": "Канада (.ca)",
"Create Company": "Создать компанию",
"Update Company": "Обновить компанию",
"Create Contact": "Создать контакт",
"Update Contact": "Обновить контакт",
"Create Task": "Создать задачу",
"Update Task": "Обновить задачу",
"Create Call": "Создать звонок",
"Create Event": "Создать событие",
"Update Event": "Обновить событие",
"Create Pipeline": "Создать конвейер",
"Update Pipeline": "Обновить конвейер",
"Search Pipeline Record": "История конвейера",
"Search Company Record": "Поиск записей компании",
"Search Contact Record": "Поиск записи контактов",
"Search Product Record": "Поиск записи о продукте",
"Search User": "Поиск пользователя",
"Creates a Company Record": "Создает учетную запись компании",
"Updates an existing Company and prepopulates its fields for editing.": "Обновляет существующую компанию и преобразует ее поля для редактирования.",
"Creates a Contact Record": "Создать запись контакта",
"Select and update an existing Contact record.": "Выберите и обновите запись контакта.",
"Creates a new Task": "Создать новую задачу",
"updates a Task": "обновляет задачу",
"Creates a Call Log Entry Record": "Создать запись записи журнала вызовов",
"Creates a new event in Bigin": "Создает новое событие на Bigin",
"Updates an existing event in Bigin": "Обновляет существующее событие в Bigin",
"Creates a new pipeline record in Bigin": "Создать новую запись конвейера в Bigin",
"updates a pipeline record in Bigin": "обновляет запись в конвейере Bigin",
"Searches deals by name via criteria or word": "Поиск сделок по названию по критериям или слову",
"Searches companies by full name (criteria) or word": "Поиск организаций по полному названию (критерию) или слову",
"Searches contacts by criteria, email, phone, or word": "Поиск контактов по критериям, электронной почте, телефону или слову",
"Searches products by name/code via criteria or word": "Поиск товаров по имени/коду по критерию или слову",
"Locate users by email.": "Найти пользователей по электронной почте.",
"Account Name": "Имя аккаунта",
"Phone": "Телефон",
"Website": "Сайт",
"Tags": "Теги",
"Description": "Описание",
"Owner": "Владелец",
"Billing Street": "Улица плательщика",
"Billing City": "Город плательщика",
"Billing State": "Статус плательщика",
"Billing Country": "Страна выставления счетов",
"Billing Code": "Платежный код",
"Select Company": "Выберите компанию",
"Company Details": "Информация о компании",
"First Name": "First Name",
"Last Name": "Фамилия",
"Title": "Заголовок",
"Email": "Почта",
"Mobile": "Мобильный",
"Email Opt Out": "Отказаться от рассылки",
"Company": "Компания",
"Mailing Street": "Улица Рассылки",
"Mailing City": "Город рассылки",
"Mailing State": "Область рассылки",
"Mailing Country": "Страна рассылки",
"Mailing Zip": "Почтовый индекс",
"Select Contact": "Выберите контакт",
"Contact Fields": "Поля контактов",
"Subject": "Тема",
"Due Date": "Срок сдачи",
"Make Task Recurring": "Повторить задание",
"Recurring Info": "Повторяющиеся данные",
"Enable Reminder": "Включить напоминание",
"Reminder Information": "Напоминание",
"Related Module": "Связанный модуль",
"Related To": "Связанные с",
"Priority": "Приоритет",
"Status": "Status",
"Select Task": "Выберите задачу",
"Task Details": "Детали задачи",
"Call Start Time": "Время начала звонка",
"Call Duration (minutes)": "Длительность звонка (минуты)",
"Call Type": "Тип звонка",
"Contacts": "Контакты",
"Call Agenda": "Вызвать повестку дня",
"Reminder": "Напоминание",
"Dialed Number": "Номер вызова",
"Event Title": "Название события",
"Start Date & Time": "Дата и время начала",
"End Date & Time": "Дата и время окончания",
"All Day Event": "Событие за весь день",
"Make Event Recurring": "Повторить событие",
"Venue": "Место проведения",
"Participants": "Участники",
"Select Event": "Выберите событие",
"Event Fields": "Поля событий",
"Deal Name": "Название сделки",
"Pipelines": "Трубопроводы",
"Sub Pipeline": "Подконвейер",
"Stage": "Этап",
"Amount": "Сумма",
"Secondary Contacts": "Вторичные контакты",
"Closing Date": "Дата закрытия",
"Associated Products": "Связанные товары",
"Additional Fields": "Дополнительные поля",
"Pipeline Record": "Запись Трубопровода",
"Pipeline Details": "Pipeline Details",
"Search Mode": "Режим поиска",
"Search Term": "Поиск термина",
"User Type (optional)": "User Type (optional)",
"Page": "Страница",
"Per Page": "Per Page",
"Provide the name of the company": "Provide the name of the company",
"Provide a phone number for the company": "Provide a phone number for the company",
"Provide a website URL for the company": "Provide a website URL for the company",
"Select tags to associate with this module, \"Accounts\".": "Select tags to associate with this module, \"Accounts\".",
"Provide additional descriptions or notes related to the company": "Provide additional descriptions or notes related to the company",
"Select the owner to which the record will be assigned.": "Select the owner to which the record will be assigned.",
"The street address of the company": "The street address of the company",
"The city where the company is located": "The city where the company is located",
"The state or province where the company is located": "The state or province where the company is located",
"The country of the company": "The country of the company",
"The ZIP or postal code of the company": "The ZIP or postal code of the company",
"Choose a company to update": "Choose a company to update",
"These fields will be prepopulated with company data": "These fields will be prepopulated with company data",
"First name of the contact": "Имя контакта",
"Last name of the contact": "Фамилия контакта",
"Job title of the contact": "Job title of the contact",
"Email address of the contact": "Email address of the contact",
"Mobile phone number": "Mobile phone number",
"Whether the contact has opted out of emails": "Whether the contact has opted out of emails",
"The ID of the company to which the record will be associated. If not provided, the record will not be associated with any company.": "The ID of the company to which the record will be associated. If not provided, the record will not be associated with any company.",
"Select tags to associate with this module, \"Contacts\".": "Select tags to associate with this module, \"Contacts\".",
"Provide additional descriptions or notes related to the contact": "Provide additional descriptions or notes related to the contact",
"Street address for mailing": "Street address for mailing",
"City for mailing address": "City for mailing address",
"State for mailing address": "State for mailing address",
"Country for mailing address": "Country for mailing address",
"ZIP/postal code": "ZIP/postal code",
"Choose a contact to update": "Choose a contact to update",
"Edit any of these fields": "Edit any of these fields",
"Provide the subject or title of the task": "Provide the subject or title of the task",
"Provide the due date of the task (YYYY-MM-DD format)": "Provide the due date of the task (YYYY-MM-DD format)",
"make this task recurring": "make this task recurring",
"Please note: Due Date must be set above for recurring tasks": "Please note: Due Date must be set above for recurring tasks",
"Enable reminder for this task": "Enable reminder for this task",
"Select the type of entity the task is related to. Options: Contacts, Pipelines, Companies.": "Select the type of entity the task is related to. Options: Contacts, Pipelines, Companies.",
"Select the specific record the task is related to.": "Select the specific record the task is related to.",
"Provide additional descriptions or notes related to the task": "Provide additional descriptions or notes related to the task",
"Provide the priority level of the task": "Provide the priority level of the task",
"Provide the current status of the task.": "Provide the current status of the task.",
"Select tags to associate with this module, \"Tasks\".": "Select tags to associate with this module, \"Tasks\".",
"Choose a task to update": "Choose a task to update",
"These fields will be prepopulated with task data": "These fields will be prepopulated with task data",
"Provide the start time of the call in ISO8601 format.": "Provide the start time of the call in ISO8601 format.",
"Provide the duration of the call in minutes (numeric). For example, 30 for a 30-minute call.": "Provide the duration of the call in minutes (numeric). For example, 30 for a 30-minute call.",
"Type of call": "Type of call",
"The ID of the contact to which the record will be associated. If not provided, the record will not be associated with any contact.": "The ID of the contact to which the record will be associated. If not provided, the record will not be associated with any contact.",
"Subject of the call": "Subject of the call",
"Description or notes about the call": "Description or notes about the call",
"Agenda or purpose of the call": "Agenda or purpose of the call",
"Reminder date and time for the call": "Reminder date and time for the call",
"Provide the number dialed for the call.": "Provide the number dialed for the call.",
"Select the type of entity the call is related to.": "Select the type of entity the call is related to.",
"Select the specific record the call is related to.": "Select the specific record the call is related to.",
"Select tags to associate with this module, \"Calls\".": "Select tags to associate with this module, \"Calls\".",
"Provide the title or name of the event": "Provide the title or name of the event",
"Start date and time of the event": "Start date and time of the event",
"End date and time of the event": "End date and time of the event",
"Mark this as an all-day event": "Mark this as an all-day event",
"Make this event recurring": "Make this event recurring",
"Enable reminder for this event": "Enable reminder for this event",
"Location or venue of the event": "Location or venue of the event",
"Select the type of entity the event is related to": "Select the type of entity the event is related to",
"Select the specific record the event is related to": "Select the specific record the event is related to",
"Add participants to the event": "Добавить участников к мероприятию",
"Additional descriptions or notes related to the event": "Дополнительные описания или заметки, связанные с событием",
"Select tags to associate with this module, \"Events\".": "Выберите теги для связи с этим модулем \"События\".",
"Choose the event to update": "Выберите событие для обновления",
"Provide the name for the pipeline record (deal)": "Укажите название для записи трубопроводов (разных)",
"Provide the Team Pipeline to which the pipeline record (deal) belongs": "Предоставьте командную трубопровод, к которой принадлежит запись (дилер)",
"Pick one of the configured sub-pipelines": "Выберите один из настроенных подконвейеров",
"Provide the current stage of the pipeline record (deal) within the Sub-Pipeline": "Обеспечивать нынешний этап записи (рассмотрения) трубопроводов в рамках подгазопровода",
"The amount of the pipeline record (deal)": "Объем записи о трубопроводе (сделка)",
"Provide a list of additional contacts associated with the record": "Предоставьте список дополнительных контактов, связанных с записью",
"Provide the expected or actual closing date of the pipeline record (deal) in YYYY-MM-DD format": "Укажите ожидаемую или фактическую дату закрытия записи (сделки) трубопровода в формате YYYY-MM-DD",
"Provide a list of products associated with the record": "Предоставьте список товаров, связанных с записью",
"Select tags to associate with this module, \"Pipelines\".": "Выберите теги для связывания с этим модулем «Пепелины».",
"Optional fields from the Pipelines module": "Дополнительные поля из модуля Трубопроводов",
"Select a pipeline record": "Выберите запись конвейера",
"These fields will be prepopulated with pipeline data": "Эти поля будут предварительно заполняться данными конвейера",
"Deal Name (criteria) or word": "Название сделки (критерий) или слово",
"Company full name (criteria) or word": "Полное название организации (критерий) или слово",
"Choose how to search Contacts": "Выберите способ поиска контактов",
"Text, email, phone, or word based on the selected mode": "Текст, письмо, телефон или слово на основе выбранного режима",
"Product name/code (criteria) or word": "Название продукта/код (критерий) или слово",
"User email address (full or partial, case-insensitive match)": "Адрес электронной почты пользователя (полный или частичный, без учета регистра)",
"Page index (default 1)": "Индекс страницы (по умолчанию 1)",
"Records per page (max 200, default 200)": "Записи на странице (не более 200, по умолчанию 200)",
"Companies": "Компании",
"High": "Высокий",
"Normal": "Обычный",
"Low": "Низкий",
"Lowest": "Наименьший",
"Highest": "Наивысший",
"In Progress": "В процессе",
"Completed": "Выполнено",
"Deferred": "Отложено",
"Waiting for input": "Ожидание ввода",
"Not Started": "Не начато",
"Outbound": "Исходящий",
"Inbound": "Входящий",
"Missed": "Пропущено",
"Criteria (Deal Name)": "Критерии (название сделки)",
"Word": "Слово",
"Criteria (full name)": "Критерии (полное название)",
"Criteria (name/email/mobile)": "Критерии (имя/email/мобильный)",
"Criteria (name/code)": "Критерии (имя/код)",
"All Users": "Все пользователи",
"Active Users": "Активные пользователи",
"Deactive Users": "Деактивные пользователи",
"Confirmed Users": "Подтвержденные пользователи",
"Not Confirmed Users": "Не подтвержденные пользователи",
"Deleted Users": "Удаленные пользователи",
"Active Confirmed Users": "Активные подтвержденные пользователи",
"Admin Users": "Администраторы",
"Active Confirmed Admins": "Активные администраторы подтверждены",
"Current User": "Текущий пользователь",
"New Contact Created": "Создан новый контакт",
"Contact Updated": "Контакт обновлен",
"New Company Created": "Создана новая компания",
"Company Updated": "Компания обновлена",
"New Call Created": "Новый вызов создан",
"New Task Created": "Новая задача создана",
"New Event Created": "Новое событие создано",
"New Pipeline Record Created": "Новая запись Трубопровода создана",
"Pipeline Record Updated": "Запись Трубопровода обновлена",
"Triggers when a new contact is created": "Включает при создании нового контакта",
"Triggers when a contact is updated": "Триггеры при обновлении контакта",
"Triggers when a new company record is created": "Запускает при создании новой записи компании",
"Triggers when a company record is updated": "Включает при обновлении записи компании",
"Triggers when a new call log is created": "Триггеры при создании нового журнала вызовов",
"Triggers when a new task is created": "Триггеры при создании новой задачи",
"Triggers when a new event is created": "Триггеры при создании нового события",
"Triggers when a new pipeline record is created": "Триггеры при создании новой конвейера",
"Triggers when a pipeline record is updated": "Включает при обновлении записи сборочной линии"
}

View File

@@ -0,0 +1,250 @@
{
"Bigin by Zoho CRM is a lightweight CRM designed for small businesses to manage contacts, companies, deals (pipeline records), tasks, calls, and events.": "Bigin by Zoho CRM is a lightweight CRM designed for small businesses to manage contacts, companies, deals (pipeline records), tasks, calls, and events.",
"Your Data Center Region": "Your Data Center Region",
"Select your Zoho data center region for your account": "Select your Zoho data center region for your account",
"United States (.com)": "United States (.com)",
"Australia (.com.au)": "Australia (.com.au)",
"Europe (.eu)": "Europe (.eu)",
"India (.in)": "India (.in)",
"China (.com.cn)": "China (.com.cn)",
"Japan (.jp)": "Japan (.jp)",
"Saudi Arabia (.sa)": "Saudi Arabia (.sa)",
"Canada (.ca)": "Canada (.ca)",
"Create Company": "Create Company",
"Update Company": "Update Company",
"Create Contact": "Create Contact",
"Update Contact": "Update Contact",
"Create Task": "Create Task",
"Update Task": "Update Task",
"Create Call": "Create Call",
"Create Event": "Create Event",
"Update Event": "Update Event",
"Create Pipeline": "Create Pipeline",
"Update Pipeline": "Update Pipeline",
"Search Pipeline Record": "Search Pipeline Record",
"Search Company Record": "Search Company Record",
"Search Contact Record": "Search Contact Record",
"Search Product Record": "Search Product Record",
"Search User": "Search User",
"Creates a Company Record": "Creates a Company Record",
"Updates an existing Company and prepopulates its fields for editing.": "Updates an existing Company and prepopulates its fields for editing.",
"Creates a Contact Record": "Creates a Contact Record",
"Select and update an existing Contact record.": "Select and update an existing Contact record.",
"Creates a new Task": "Creates a new Task",
"updates a Task": "updates a Task",
"Creates a Call Log Entry Record": "Creates a Call Log Entry Record",
"Creates a new event in Bigin": "Creates a new event in Bigin",
"Updates an existing event in Bigin": "Updates an existing event in Bigin",
"Creates a new pipeline record in Bigin": "Creates a new pipeline record in Bigin",
"updates a pipeline record in Bigin": "updates a pipeline record in Bigin",
"Searches deals by name via criteria or word": "Searches deals by name via criteria or word",
"Searches companies by full name (criteria) or word": "Searches companies by full name (criteria) or word",
"Searches contacts by criteria, email, phone, or word": "Searches contacts by criteria, email, phone, or word",
"Searches products by name/code via criteria or word": "Searches products by name/code via criteria or word",
"Locate users by email.": "Locate users by email.",
"Account Name": "Account Name",
"Phone": "Phone",
"Website": "Website",
"Tags": "Tags",
"Description": "Description",
"Owner": "Owner",
"Billing Street": "Billing Street",
"Billing City": "Billing City",
"Billing State": "Billing State",
"Billing Country": "Billing Country",
"Billing Code": "Billing Code",
"Select Company": "Select Company",
"Company Details": "Company Details",
"First Name": "First Name",
"Last Name": "Last Name",
"Title": "Title",
"Email": "Email",
"Mobile": "Mobile",
"Email Opt Out": "Email Opt Out",
"Company": "Company",
"Mailing Street": "Mailing Street",
"Mailing City": "Mailing City",
"Mailing State": "Mailing State",
"Mailing Country": "Mailing Country",
"Mailing Zip": "Mailing Zip",
"Select Contact": "Select Contact",
"Contact Fields": "Contact Fields",
"Subject": "Subject",
"Due Date": "Due Date",
"Make Task Recurring": "Make Task Recurring",
"Recurring Info": "Recurring Info",
"Enable Reminder": "Enable Reminder",
"Reminder Information": "Reminder Information",
"Related Module": "Related Module",
"Related To": "Related To",
"Priority": "Priority",
"Status": "Status",
"Select Task": "Select Task",
"Task Details": "Task Details",
"Call Start Time": "Call Start Time",
"Call Duration (minutes)": "Call Duration (minutes)",
"Call Type": "Call Type",
"Contacts": "Contacts",
"Call Agenda": "Call Agenda",
"Reminder": "Reminder",
"Dialed Number": "Dialed Number",
"Event Title": "Event Title",
"Start Date & Time": "Start Date & Time",
"End Date & Time": "End Date & Time",
"All Day Event": "All Day Event",
"Make Event Recurring": "Make Event Recurring",
"Venue": "Venue",
"Participants": "Participants",
"Select Event": "Select Event",
"Event Fields": "Event Fields",
"Deal Name": "Deal Name",
"Pipelines": "Pipelines",
"Sub Pipeline": "Sub Pipeline",
"Stage": "Stage",
"Amount": "Amount",
"Secondary Contacts": "Secondary Contacts",
"Closing Date": "Closing Date",
"Associated Products": "Associated Products",
"Additional Fields": "Additional Fields",
"Pipeline Record": "Pipeline Record",
"Pipeline Details": "Pipeline Details",
"Search Mode": "Search Mode",
"Search Term": "Search Term",
"User Type (optional)": "User Type (optional)",
"Page": "Page",
"Per Page": "Per Page",
"Provide the name of the company": "Provide the name of the company",
"Provide a phone number for the company": "Provide a phone number for the company",
"Provide a website URL for the company": "Provide a website URL for the company",
"Select tags to associate with this module, \"Accounts\".": "Select tags to associate with this module, \"Accounts\".",
"Provide additional descriptions or notes related to the company": "Provide additional descriptions or notes related to the company",
"Select the owner to which the record will be assigned.": "Select the owner to which the record will be assigned.",
"The street address of the company": "The street address of the company",
"The city where the company is located": "The city where the company is located",
"The state or province where the company is located": "The state or province where the company is located",
"The country of the company": "The country of the company",
"The ZIP or postal code of the company": "The ZIP or postal code of the company",
"Choose a company to update": "Choose a company to update",
"These fields will be prepopulated with company data": "These fields will be prepopulated with company data",
"First name of the contact": "First name of the contact",
"Last name of the contact": "Last name of the contact",
"Job title of the contact": "Job title of the contact",
"Email address of the contact": "Email address of the contact",
"Mobile phone number": "Mobile phone number",
"Whether the contact has opted out of emails": "Whether the contact has opted out of emails",
"The ID of the company to which the record will be associated. If not provided, the record will not be associated with any company.": "The ID of the company to which the record will be associated. If not provided, the record will not be associated with any company.",
"Select tags to associate with this module, \"Contacts\".": "Select tags to associate with this module, \"Contacts\".",
"Provide additional descriptions or notes related to the contact": "Provide additional descriptions or notes related to the contact",
"Street address for mailing": "Street address for mailing",
"City for mailing address": "City for mailing address",
"State for mailing address": "State for mailing address",
"Country for mailing address": "Country for mailing address",
"ZIP/postal code": "ZIP/postal code",
"Choose a contact to update": "Choose a contact to update",
"Edit any of these fields": "Edit any of these fields",
"Provide the subject or title of the task": "Provide the subject or title of the task",
"Provide the due date of the task (YYYY-MM-DD format)": "Provide the due date of the task (YYYY-MM-DD format)",
"make this task recurring": "make this task recurring",
"Please note: Due Date must be set above for recurring tasks": "Please note: Due Date must be set above for recurring tasks",
"Enable reminder for this task": "Enable reminder for this task",
"Select the type of entity the task is related to. Options: Contacts, Pipelines, Companies.": "Select the type of entity the task is related to. Options: Contacts, Pipelines, Companies.",
"Select the specific record the task is related to.": "Select the specific record the task is related to.",
"Provide additional descriptions or notes related to the task": "Provide additional descriptions or notes related to the task",
"Provide the priority level of the task": "Provide the priority level of the task",
"Provide the current status of the task.": "Provide the current status of the task.",
"Select tags to associate with this module, \"Tasks\".": "Select tags to associate with this module, \"Tasks\".",
"Choose a task to update": "Choose a task to update",
"These fields will be prepopulated with task data": "These fields will be prepopulated with task data",
"Provide the start time of the call in ISO8601 format.": "Provide the start time of the call in ISO8601 format.",
"Provide the duration of the call in minutes (numeric). For example, 30 for a 30-minute call.": "Provide the duration of the call in minutes (numeric). For example, 30 for a 30-minute call.",
"Type of call": "Type of call",
"The ID of the contact to which the record will be associated. If not provided, the record will not be associated with any contact.": "The ID of the contact to which the record will be associated. If not provided, the record will not be associated with any contact.",
"Subject of the call": "Subject of the call",
"Description or notes about the call": "Description or notes about the call",
"Agenda or purpose of the call": "Agenda or purpose of the call",
"Reminder date and time for the call": "Reminder date and time for the call",
"Provide the number dialed for the call.": "Provide the number dialed for the call.",
"Select the type of entity the call is related to.": "Select the type of entity the call is related to.",
"Select the specific record the call is related to.": "Select the specific record the call is related to.",
"Select tags to associate with this module, \"Calls\".": "Select tags to associate with this module, \"Calls\".",
"Provide the title or name of the event": "Provide the title or name of the event",
"Start date and time of the event": "Start date and time of the event",
"End date and time of the event": "End date and time of the event",
"Mark this as an all-day event": "Mark this as an all-day event",
"Make this event recurring": "Make this event recurring",
"Enable reminder for this event": "Enable reminder for this event",
"Location or venue of the event": "Location or venue of the event",
"Select the type of entity the event is related to": "Select the type of entity the event is related to",
"Select the specific record the event is related to": "Select the specific record the event is related to",
"Add participants to the event": "Add participants to the event",
"Additional descriptions or notes related to the event": "Additional descriptions or notes related to the event",
"Select tags to associate with this module, \"Events\".": "Select tags to associate with this module, \"Events\".",
"Choose the event to update": "Choose the event to update",
"Provide the name for the pipeline record (deal)": "Provide the name for the pipeline record (deal)",
"Provide the Team Pipeline to which the pipeline record (deal) belongs": "Provide the Team Pipeline to which the pipeline record (deal) belongs",
"Pick one of the configured sub-pipelines": "Pick one of the configured sub-pipelines",
"Provide the current stage of the pipeline record (deal) within the Sub-Pipeline": "Provide the current stage of the pipeline record (deal) within the Sub-Pipeline",
"The amount of the pipeline record (deal)": "The amount of the pipeline record (deal)",
"Provide a list of additional contacts associated with the record": "Provide a list of additional contacts associated with the record",
"Provide the expected or actual closing date of the pipeline record (deal) in YYYY-MM-DD format": "Provide the expected or actual closing date of the pipeline record (deal) in YYYY-MM-DD format",
"Provide a list of products associated with the record": "Provide a list of products associated with the record",
"Select tags to associate with this module, \"Pipelines\".": "Select tags to associate with this module, \"Pipelines\".",
"Optional fields from the Pipelines module": "Optional fields from the Pipelines module",
"Select a pipeline record": "Select a pipeline record",
"These fields will be prepopulated with pipeline data": "These fields will be prepopulated with pipeline data",
"Deal Name (criteria) or word": "Deal Name (criteria) or word",
"Company full name (criteria) or word": "Company full name (criteria) or word",
"Choose how to search Contacts": "Choose how to search Contacts",
"Text, email, phone, or word based on the selected mode": "Text, email, phone, or word based on the selected mode",
"Product name/code (criteria) or word": "Product name/code (criteria) or word",
"User email address (full or partial, case-insensitive match)": "User email address (full or partial, case-insensitive match)",
"Page index (default 1)": "Page index (default 1)",
"Records per page (max 200, default 200)": "Records per page (max 200, default 200)",
"Companies": "Companies",
"High": "High",
"Normal": "Normal",
"Low": "Low",
"Lowest": "Lowest",
"Highest": "Highest",
"In Progress": "In Progress",
"Completed": "Completed",
"Deferred": "Deferred",
"Waiting for input": "Waiting for input",
"Not Started": "Not Started",
"Outbound": "Outbound",
"Inbound": "Inbound",
"Missed": "Missed",
"Criteria (Deal Name)": "Criteria (Deal Name)",
"Word": "Word",
"Criteria (full name)": "Criteria (full name)",
"Criteria (name/email/mobile)": "Criteria (name/email/mobile)",
"Criteria (name/code)": "Criteria (name/code)",
"All Users": "All Users",
"Active Users": "Active Users",
"Deactive Users": "Deactive Users",
"Confirmed Users": "Confirmed Users",
"Not Confirmed Users": "Not Confirmed Users",
"Deleted Users": "Deleted Users",
"Active Confirmed Users": "Active Confirmed Users",
"Admin Users": "Admin Users",
"Active Confirmed Admins": "Active Confirmed Admins",
"Current User": "Current User",
"New Contact Created": "New Contact Created",
"Contact Updated": "Contact Updated",
"New Company Created": "New Company Created",
"Company Updated": "Company Updated",
"New Call Created": "New Call Created",
"New Task Created": "New Task Created",
"New Event Created": "New Event Created",
"New Pipeline Record Created": "New Pipeline Record Created",
"Pipeline Record Updated": "Pipeline Record Updated",
"Triggers when a new contact is created": "Triggers when a new contact is created",
"Triggers when a contact is updated": "Triggers when a contact is updated",
"Triggers when a new company record is created": "Triggers when a new company record is created",
"Triggers when a company record is updated": "Triggers when a company record is updated",
"Triggers when a new call log is created": "Triggers when a new call log is created",
"Triggers when a new task is created": "Triggers when a new task is created",
"Triggers when a new event is created": "Triggers when a new event is created",
"Triggers when a new pipeline record is created": "Triggers when a new pipeline record is created",
"Triggers when a pipeline record is updated": "Triggers when a pipeline record is updated"
}

View File

@@ -0,0 +1,251 @@
{
"Bigin by Zoho CRM": "Bigin by Zoho CRM",
"Bigin by Zoho CRM is a lightweight CRM designed for small businesses to manage contacts, companies, deals (pipeline records), tasks, calls, and events.": "Bigin by Zoho CRM is a lightweight CRM designed for small businesses to manage contacts, companies, deals (pipeline records), tasks, calls, and events.",
"Your Data Center Region": "Your Data Center Region",
"Select your Zoho data center region for your account": "Select your Zoho data center region for your account",
"United States (.com)": "United States (.com)",
"Australia (.com.au)": "Australia (.com.au)",
"Europe (.eu)": "Europe (.eu)",
"India (.in)": "India (.in)",
"China (.com.cn)": "China (.com.cn)",
"Japan (.jp)": "Japan (.jp)",
"Saudi Arabia (.sa)": "Saudi Arabia (.sa)",
"Canada (.ca)": "Canada (.ca)",
"Create Company": "Create Company",
"Update Company": "Update Company",
"Create Contact": "Create Contact",
"Update Contact": "Update Contact",
"Create Task": "Create Task",
"Update Task": "Update Task",
"Create Call": "Create Call",
"Create Event": "Create Event",
"Update Event": "Update Event",
"Create Pipeline": "Create Pipeline",
"Update Pipeline": "Update Pipeline",
"Search Pipeline Record": "Search Pipeline Record",
"Search Company Record": "Search Company Record",
"Search Contact Record": "Search Contact Record",
"Search Product Record": "Search Product Record",
"Search User": "Search User",
"Creates a Company Record": "Creates a Company Record",
"Updates an existing Company and prepopulates its fields for editing.": "Updates an existing Company and prepopulates its fields for editing.",
"Creates a Contact Record": "Creates a Contact Record",
"Select and update an existing Contact record.": "Select and update an existing Contact record.",
"Creates a new Task": "Creates a new Task",
"updates a Task": "updates a Task",
"Creates a Call Log Entry Record": "Creates a Call Log Entry Record",
"Creates a new event in Bigin": "Creates a new event in Bigin",
"Updates an existing event in Bigin": "Updates an existing event in Bigin",
"Creates a new pipeline record in Bigin": "Creates a new pipeline record in Bigin",
"updates a pipeline record in Bigin": "updates a pipeline record in Bigin",
"Searches deals by name via criteria or word": "Searches deals by name via criteria or word",
"Searches companies by full name (criteria) or word": "Searches companies by full name (criteria) or word",
"Searches contacts by criteria, email, phone, or word": "Searches contacts by criteria, email, phone, or word",
"Searches products by name/code via criteria or word": "Searches products by name/code via criteria or word",
"Locate users by email.": "Locate users by email.",
"Account Name": "Account Name",
"Phone": "Phone",
"Website": "Website",
"Tags": "Tags",
"Description": "Description",
"Owner": "Owner",
"Billing Street": "Billing Street",
"Billing City": "Billing City",
"Billing State": "Billing State",
"Billing Country": "Billing Country",
"Billing Code": "Billing Code",
"Select Company": "Select Company",
"Company Details": "Company Details",
"First Name": "First Name",
"Last Name": "Last Name",
"Title": "Title",
"Email": "Email",
"Mobile": "Mobile",
"Email Opt Out": "Email Opt Out",
"Company": "Company",
"Mailing Street": "Mailing Street",
"Mailing City": "Mailing City",
"Mailing State": "Mailing State",
"Mailing Country": "Mailing Country",
"Mailing Zip": "Mailing Zip",
"Select Contact": "Select Contact",
"Contact Fields": "Contact Fields",
"Subject": "Subject",
"Due Date": "Due Date",
"Make Task Recurring": "Make Task Recurring",
"Recurring Info": "Recurring Info",
"Enable Reminder": "Enable Reminder",
"Reminder Information": "Reminder Information",
"Related Module": "Related Module",
"Related To": "Related To",
"Priority": "Priority",
"Status": "Status",
"Select Task": "Select Task",
"Task Details": "Task Details",
"Call Start Time": "Call Start Time",
"Call Duration (minutes)": "Call Duration (minutes)",
"Call Type": "Call Type",
"Contacts": "Contacts",
"Call Agenda": "Call Agenda",
"Reminder": "Reminder",
"Dialed Number": "Dialed Number",
"Event Title": "Event Title",
"Start Date & Time": "Start Date & Time",
"End Date & Time": "End Date & Time",
"All Day Event": "All Day Event",
"Make Event Recurring": "Make Event Recurring",
"Venue": "Venue",
"Participants": "Participants",
"Select Event": "Select Event",
"Event Fields": "Event Fields",
"Deal Name": "Deal Name",
"Pipelines": "Pipelines",
"Sub Pipeline": "Sub Pipeline",
"Stage": "Stage",
"Amount": "Amount",
"Secondary Contacts": "Secondary Contacts",
"Closing Date": "Closing Date",
"Associated Products": "Associated Products",
"Additional Fields": "Additional Fields",
"Pipeline Record": "Pipeline Record",
"Pipeline Details": "Pipeline Details",
"Search Mode": "Search Mode",
"Search Term": "Search Term",
"User Type (optional)": "User Type (optional)",
"Page": "Page",
"Per Page": "Per Page",
"Provide the name of the company": "Provide the name of the company",
"Provide a phone number for the company": "Provide a phone number for the company",
"Provide a website URL for the company": "Provide a website URL for the company",
"Select tags to associate with this module, \"Accounts\".": "Select tags to associate with this module, \"Accounts\".",
"Provide additional descriptions or notes related to the company": "Provide additional descriptions or notes related to the company",
"Select the owner to which the record will be assigned.": "Select the owner to which the record will be assigned.",
"The street address of the company": "The street address of the company",
"The city where the company is located": "The city where the company is located",
"The state or province where the company is located": "The state or province where the company is located",
"The country of the company": "The country of the company",
"The ZIP or postal code of the company": "The ZIP or postal code of the company",
"Choose a company to update": "Choose a company to update",
"These fields will be prepopulated with company data": "These fields will be prepopulated with company data",
"First name of the contact": "First name of the contact",
"Last name of the contact": "Last name of the contact",
"Job title of the contact": "Job title of the contact",
"Email address of the contact": "Email address of the contact",
"Mobile phone number": "Mobile phone number",
"Whether the contact has opted out of emails": "Whether the contact has opted out of emails",
"The ID of the company to which the record will be associated. If not provided, the record will not be associated with any company.": "The ID of the company to which the record will be associated. If not provided, the record will not be associated with any company.",
"Select tags to associate with this module, \"Contacts\".": "Select tags to associate with this module, \"Contacts\".",
"Provide additional descriptions or notes related to the contact": "Provide additional descriptions or notes related to the contact",
"Street address for mailing": "Street address for mailing",
"City for mailing address": "City for mailing address",
"State for mailing address": "State for mailing address",
"Country for mailing address": "Country for mailing address",
"ZIP/postal code": "ZIP/postal code",
"Choose a contact to update": "Choose a contact to update",
"Edit any of these fields": "Edit any of these fields",
"Provide the subject or title of the task": "Provide the subject or title of the task",
"Provide the due date of the task (YYYY-MM-DD format)": "Provide the due date of the task (YYYY-MM-DD format)",
"make this task recurring": "make this task recurring",
"Please note: Due Date must be set above for recurring tasks": "Please note: Due Date must be set above for recurring tasks",
"Enable reminder for this task": "Enable reminder for this task",
"Select the type of entity the task is related to. Options: Contacts, Pipelines, Companies.": "Select the type of entity the task is related to. Options: Contacts, Pipelines, Companies.",
"Select the specific record the task is related to.": "Select the specific record the task is related to.",
"Provide additional descriptions or notes related to the task": "Provide additional descriptions or notes related to the task",
"Provide the priority level of the task": "Provide the priority level of the task",
"Provide the current status of the task.": "Provide the current status of the task.",
"Select tags to associate with this module, \"Tasks\".": "Select tags to associate with this module, \"Tasks\".",
"Choose a task to update": "Choose a task to update",
"These fields will be prepopulated with task data": "These fields will be prepopulated with task data",
"Provide the start time of the call in ISO8601 format.": "Provide the start time of the call in ISO8601 format.",
"Provide the duration of the call in minutes (numeric). For example, 30 for a 30-minute call.": "Provide the duration of the call in minutes (numeric). For example, 30 for a 30-minute call.",
"Type of call": "Type of call",
"The ID of the contact to which the record will be associated. If not provided, the record will not be associated with any contact.": "The ID of the contact to which the record will be associated. If not provided, the record will not be associated with any contact.",
"Subject of the call": "Subject of the call",
"Description or notes about the call": "Description or notes about the call",
"Agenda or purpose of the call": "Agenda or purpose of the call",
"Reminder date and time for the call": "Reminder date and time for the call",
"Provide the number dialed for the call.": "Provide the number dialed for the call.",
"Select the type of entity the call is related to.": "Select the type of entity the call is related to.",
"Select the specific record the call is related to.": "Select the specific record the call is related to.",
"Select tags to associate with this module, \"Calls\".": "Select tags to associate with this module, \"Calls\".",
"Provide the title or name of the event": "Provide the title or name of the event",
"Start date and time of the event": "Start date and time of the event",
"End date and time of the event": "End date and time of the event",
"Mark this as an all-day event": "Mark this as an all-day event",
"Make this event recurring": "Make this event recurring",
"Enable reminder for this event": "Enable reminder for this event",
"Location or venue of the event": "Location or venue of the event",
"Select the type of entity the event is related to": "Select the type of entity the event is related to",
"Select the specific record the event is related to": "Select the specific record the event is related to",
"Add participants to the event": "Add participants to the event",
"Additional descriptions or notes related to the event": "Additional descriptions or notes related to the event",
"Select tags to associate with this module, \"Events\".": "Select tags to associate with this module, \"Events\".",
"Choose the event to update": "Choose the event to update",
"Provide the name for the pipeline record (deal)": "Provide the name for the pipeline record (deal)",
"Provide the Team Pipeline to which the pipeline record (deal) belongs": "Provide the Team Pipeline to which the pipeline record (deal) belongs",
"Pick one of the configured sub-pipelines": "Pick one of the configured sub-pipelines",
"Provide the current stage of the pipeline record (deal) within the Sub-Pipeline": "Provide the current stage of the pipeline record (deal) within the Sub-Pipeline",
"The amount of the pipeline record (deal)": "The amount of the pipeline record (deal)",
"Provide a list of additional contacts associated with the record": "Provide a list of additional contacts associated with the record",
"Provide the expected or actual closing date of the pipeline record (deal) in YYYY-MM-DD format": "Provide the expected or actual closing date of the pipeline record (deal) in YYYY-MM-DD format",
"Provide a list of products associated with the record": "Provide a list of products associated with the record",
"Select tags to associate with this module, \"Pipelines\".": "Select tags to associate with this module, \"Pipelines\".",
"Optional fields from the Pipelines module": "Optional fields from the Pipelines module",
"Select a pipeline record": "Select a pipeline record",
"These fields will be prepopulated with pipeline data": "These fields will be prepopulated with pipeline data",
"Deal Name (criteria) or word": "Deal Name (criteria) or word",
"Company full name (criteria) or word": "Company full name (criteria) or word",
"Choose how to search Contacts": "Choose how to search Contacts",
"Text, email, phone, or word based on the selected mode": "Text, email, phone, or word based on the selected mode",
"Product name/code (criteria) or word": "Product name/code (criteria) or word",
"User email address (full or partial, case-insensitive match)": "User email address (full or partial, case-insensitive match)",
"Page index (default 1)": "Page index (default 1)",
"Records per page (max 200, default 200)": "Records per page (max 200, default 200)",
"Companies": "Companies",
"High": "High",
"Normal": "Normal",
"Low": "Low",
"Lowest": "Lowest",
"Highest": "Highest",
"In Progress": "In Progress",
"Completed": "Completed",
"Deferred": "Deferred",
"Waiting for input": "Waiting for input",
"Not Started": "Not Started",
"Outbound": "Outbound",
"Inbound": "Inbound",
"Missed": "Missed",
"Criteria (Deal Name)": "Criteria (Deal Name)",
"Word": "Word",
"Criteria (full name)": "Criteria (full name)",
"Criteria (name/email/mobile)": "Criteria (name/email/mobile)",
"Criteria (name/code)": "Criteria (name/code)",
"All Users": "All Users",
"Active Users": "Active Users",
"Deactive Users": "Deactive Users",
"Confirmed Users": "Confirmed Users",
"Not Confirmed Users": "Not Confirmed Users",
"Deleted Users": "Deleted Users",
"Active Confirmed Users": "Active Confirmed Users",
"Admin Users": "Admin Users",
"Active Confirmed Admins": "Active Confirmed Admins",
"Current User": "Current User",
"New Contact Created": "New Contact Created",
"Contact Updated": "Contact Updated",
"New Company Created": "New Company Created",
"Company Updated": "Company Updated",
"New Call Created": "New Call Created",
"New Task Created": "New Task Created",
"New Event Created": "New Event Created",
"New Pipeline Record Created": "New Pipeline Record Created",
"Pipeline Record Updated": "Pipeline Record Updated",
"Triggers when a new contact is created": "Triggers when a new contact is created",
"Triggers when a contact is updated": "Triggers when a contact is updated",
"Triggers when a new company record is created": "Triggers when a new company record is created",
"Triggers when a company record is updated": "Triggers when a company record is updated",
"Triggers when a new call log is created": "Triggers when a new call log is created",
"Triggers when a new task is created": "Triggers when a new task is created",
"Triggers when a new event is created": "Triggers when a new event is created",
"Triggers when a new pipeline record is created": "Triggers when a new pipeline record is created",
"Triggers when a pipeline record is updated": "Triggers when a pipeline record is updated"
}

View File

@@ -0,0 +1,250 @@
{
"Bigin by Zoho CRM is a lightweight CRM designed for small businesses to manage contacts, companies, deals (pipeline records), tasks, calls, and events.": "Bigin by Zoho CRM is a lightweight CRM designed for small businesses to manage contacts, companies, deals (pipeline records), tasks, calls, and events.",
"Your Data Center Region": "Your Data Center Region",
"Select your Zoho data center region for your account": "Select your Zoho data center region for your account",
"United States (.com)": "United States (.com)",
"Australia (.com.au)": "Australia (.com.au)",
"Europe (.eu)": "Europe (.eu)",
"India (.in)": "India (.in)",
"China (.com.cn)": "China (.com.cn)",
"Japan (.jp)": "Japan (.jp)",
"Saudi Arabia (.sa)": "Saudi Arabia (.sa)",
"Canada (.ca)": "Canada (.ca)",
"Create Company": "Create Company",
"Update Company": "Update Company",
"Create Contact": "Create Contact",
"Update Contact": "Update Contact",
"Create Task": "Create Task",
"Update Task": "Update Task",
"Create Call": "Create Call",
"Create Event": "Create Event",
"Update Event": "Update Event",
"Create Pipeline": "Create Pipeline",
"Update Pipeline": "Update Pipeline",
"Search Pipeline Record": "Search Pipeline Record",
"Search Company Record": "Search Company Record",
"Search Contact Record": "Search Contact Record",
"Search Product Record": "Search Product Record",
"Search User": "Search User",
"Creates a Company Record": "Creates a Company Record",
"Updates an existing Company and prepopulates its fields for editing.": "Updates an existing Company and prepopulates its fields for editing.",
"Creates a Contact Record": "Creates a Contact Record",
"Select and update an existing Contact record.": "Select and update an existing Contact record.",
"Creates a new Task": "Creates a new Task",
"updates a Task": "updates a Task",
"Creates a Call Log Entry Record": "Creates a Call Log Entry Record",
"Creates a new event in Bigin": "Creates a new event in Bigin",
"Updates an existing event in Bigin": "Updates an existing event in Bigin",
"Creates a new pipeline record in Bigin": "Creates a new pipeline record in Bigin",
"updates a pipeline record in Bigin": "updates a pipeline record in Bigin",
"Searches deals by name via criteria or word": "Searches deals by name via criteria or word",
"Searches companies by full name (criteria) or word": "Searches companies by full name (criteria) or word",
"Searches contacts by criteria, email, phone, or word": "Searches contacts by criteria, email, phone, or word",
"Searches products by name/code via criteria or word": "Searches products by name/code via criteria or word",
"Locate users by email.": "Locate users by email.",
"Account Name": "Account Name",
"Phone": "Phone",
"Website": "Website",
"Tags": "标签",
"Description": "描述",
"Owner": "所有者",
"Billing Street": "Billing Street",
"Billing City": "Billing City",
"Billing State": "Billing State",
"Billing Country": "Billing Country",
"Billing Code": "Billing Code",
"Select Company": "Select Company",
"Company Details": "Company Details",
"First Name": "First Name",
"Last Name": "名字",
"Title": "标题",
"Email": "电子邮件地址",
"Mobile": "Mobile",
"Email Opt Out": "Email Opt Out",
"Company": "Company",
"Mailing Street": "Mailing Street",
"Mailing City": "Mailing City",
"Mailing State": "Mailing State",
"Mailing Country": "Mailing Country",
"Mailing Zip": "Mailing Zip",
"Select Contact": "Select Contact",
"Contact Fields": "Contact Fields",
"Subject": "Subject",
"Due Date": "Due Date",
"Make Task Recurring": "Make Task Recurring",
"Recurring Info": "Recurring Info",
"Enable Reminder": "Enable Reminder",
"Reminder Information": "Reminder Information",
"Related Module": "Related Module",
"Related To": "Related To",
"Priority": "Priority",
"Status": "状态",
"Select Task": "Select Task",
"Task Details": "Task Details",
"Call Start Time": "Call Start Time",
"Call Duration (minutes)": "Call Duration (minutes)",
"Call Type": "Call Type",
"Contacts": "Contacts",
"Call Agenda": "Call Agenda",
"Reminder": "Reminder",
"Dialed Number": "Dialed Number",
"Event Title": "Event Title",
"Start Date & Time": "Start Date & Time",
"End Date & Time": "End Date & Time",
"All Day Event": "All Day Event",
"Make Event Recurring": "Make Event Recurring",
"Venue": "Venue",
"Participants": "Participants",
"Select Event": "Select Event",
"Event Fields": "Event Fields",
"Deal Name": "Deal Name",
"Pipelines": "Pipelines",
"Sub Pipeline": "Sub Pipeline",
"Stage": "Stage",
"Amount": "Amount",
"Secondary Contacts": "Secondary Contacts",
"Closing Date": "Closing Date",
"Associated Products": "Associated Products",
"Additional Fields": "Additional Fields",
"Pipeline Record": "Pipeline Record",
"Pipeline Details": "Pipeline Details",
"Search Mode": "Search Mode",
"Search Term": "Search Term",
"User Type (optional)": "User Type (optional)",
"Page": "Page",
"Per Page": "Per Page",
"Provide the name of the company": "Provide the name of the company",
"Provide a phone number for the company": "Provide a phone number for the company",
"Provide a website URL for the company": "Provide a website URL for the company",
"Select tags to associate with this module, \"Accounts\".": "Select tags to associate with this module, \"Accounts\".",
"Provide additional descriptions or notes related to the company": "Provide additional descriptions or notes related to the company",
"Select the owner to which the record will be assigned.": "Select the owner to which the record will be assigned.",
"The street address of the company": "The street address of the company",
"The city where the company is located": "The city where the company is located",
"The state or province where the company is located": "The state or province where the company is located",
"The country of the company": "The country of the company",
"The ZIP or postal code of the company": "The ZIP or postal code of the company",
"Choose a company to update": "Choose a company to update",
"These fields will be prepopulated with company data": "These fields will be prepopulated with company data",
"First name of the contact": "First name of the contact",
"Last name of the contact": "Last name of the contact",
"Job title of the contact": "Job title of the contact",
"Email address of the contact": "Email address of the contact",
"Mobile phone number": "Mobile phone number",
"Whether the contact has opted out of emails": "Whether the contact has opted out of emails",
"The ID of the company to which the record will be associated. If not provided, the record will not be associated with any company.": "The ID of the company to which the record will be associated. If not provided, the record will not be associated with any company.",
"Select tags to associate with this module, \"Contacts\".": "Select tags to associate with this module, \"Contacts\".",
"Provide additional descriptions or notes related to the contact": "Provide additional descriptions or notes related to the contact",
"Street address for mailing": "Street address for mailing",
"City for mailing address": "City for mailing address",
"State for mailing address": "State for mailing address",
"Country for mailing address": "Country for mailing address",
"ZIP/postal code": "ZIP/postal code",
"Choose a contact to update": "Choose a contact to update",
"Edit any of these fields": "Edit any of these fields",
"Provide the subject or title of the task": "Provide the subject or title of the task",
"Provide the due date of the task (YYYY-MM-DD format)": "Provide the due date of the task (YYYY-MM-DD format)",
"make this task recurring": "make this task recurring",
"Please note: Due Date must be set above for recurring tasks": "Please note: Due Date must be set above for recurring tasks",
"Enable reminder for this task": "Enable reminder for this task",
"Select the type of entity the task is related to. Options: Contacts, Pipelines, Companies.": "Select the type of entity the task is related to. Options: Contacts, Pipelines, Companies.",
"Select the specific record the task is related to.": "Select the specific record the task is related to.",
"Provide additional descriptions or notes related to the task": "Provide additional descriptions or notes related to the task",
"Provide the priority level of the task": "Provide the priority level of the task",
"Provide the current status of the task.": "Provide the current status of the task.",
"Select tags to associate with this module, \"Tasks\".": "Select tags to associate with this module, \"Tasks\".",
"Choose a task to update": "Choose a task to update",
"These fields will be prepopulated with task data": "These fields will be prepopulated with task data",
"Provide the start time of the call in ISO8601 format.": "Provide the start time of the call in ISO8601 format.",
"Provide the duration of the call in minutes (numeric). For example, 30 for a 30-minute call.": "Provide the duration of the call in minutes (numeric). For example, 30 for a 30-minute call.",
"Type of call": "Type of call",
"The ID of the contact to which the record will be associated. If not provided, the record will not be associated with any contact.": "The ID of the contact to which the record will be associated. If not provided, the record will not be associated with any contact.",
"Subject of the call": "Subject of the call",
"Description or notes about the call": "Description or notes about the call",
"Agenda or purpose of the call": "Agenda or purpose of the call",
"Reminder date and time for the call": "Reminder date and time for the call",
"Provide the number dialed for the call.": "Provide the number dialed for the call.",
"Select the type of entity the call is related to.": "Select the type of entity the call is related to.",
"Select the specific record the call is related to.": "Select the specific record the call is related to.",
"Select tags to associate with this module, \"Calls\".": "Select tags to associate with this module, \"Calls\".",
"Provide the title or name of the event": "Provide the title or name of the event",
"Start date and time of the event": "Start date and time of the event",
"End date and time of the event": "End date and time of the event",
"Mark this as an all-day event": "Mark this as an all-day event",
"Make this event recurring": "Make this event recurring",
"Enable reminder for this event": "Enable reminder for this event",
"Location or venue of the event": "Location or venue of the event",
"Select the type of entity the event is related to": "Select the type of entity the event is related to",
"Select the specific record the event is related to": "Select the specific record the event is related to",
"Add participants to the event": "Add participants to the event",
"Additional descriptions or notes related to the event": "Additional descriptions or notes related to the event",
"Select tags to associate with this module, \"Events\".": "Select tags to associate with this module, \"Events\".",
"Choose the event to update": "Choose the event to update",
"Provide the name for the pipeline record (deal)": "Provide the name for the pipeline record (deal)",
"Provide the Team Pipeline to which the pipeline record (deal) belongs": "Provide the Team Pipeline to which the pipeline record (deal) belongs",
"Pick one of the configured sub-pipelines": "Pick one of the configured sub-pipelines",
"Provide the current stage of the pipeline record (deal) within the Sub-Pipeline": "Provide the current stage of the pipeline record (deal) within the Sub-Pipeline",
"The amount of the pipeline record (deal)": "The amount of the pipeline record (deal)",
"Provide a list of additional contacts associated with the record": "Provide a list of additional contacts associated with the record",
"Provide the expected or actual closing date of the pipeline record (deal) in YYYY-MM-DD format": "Provide the expected or actual closing date of the pipeline record (deal) in YYYY-MM-DD format",
"Provide a list of products associated with the record": "Provide a list of products associated with the record",
"Select tags to associate with this module, \"Pipelines\".": "Select tags to associate with this module, \"Pipelines\".",
"Optional fields from the Pipelines module": "Optional fields from the Pipelines module",
"Select a pipeline record": "Select a pipeline record",
"These fields will be prepopulated with pipeline data": "These fields will be prepopulated with pipeline data",
"Deal Name (criteria) or word": "Deal Name (criteria) or word",
"Company full name (criteria) or word": "Company full name (criteria) or word",
"Choose how to search Contacts": "Choose how to search Contacts",
"Text, email, phone, or word based on the selected mode": "Text, email, phone, or word based on the selected mode",
"Product name/code (criteria) or word": "Product name/code (criteria) or word",
"User email address (full or partial, case-insensitive match)": "User email address (full or partial, case-insensitive match)",
"Page index (default 1)": "Page index (default 1)",
"Records per page (max 200, default 200)": "Records per page (max 200, default 200)",
"Companies": "Companies",
"High": "High",
"Normal": "Normal",
"Low": "Low",
"Lowest": "Lowest",
"Highest": "Highest",
"In Progress": "In Progress",
"Completed": "Completed",
"Deferred": "Deferred",
"Waiting for input": "Waiting for input",
"Not Started": "Not Started",
"Outbound": "Outbound",
"Inbound": "Inbound",
"Missed": "Missed",
"Criteria (Deal Name)": "Criteria (Deal Name)",
"Word": "Word",
"Criteria (full name)": "Criteria (full name)",
"Criteria (name/email/mobile)": "Criteria (name/email/mobile)",
"Criteria (name/code)": "Criteria (name/code)",
"All Users": "All Users",
"Active Users": "活跃用户",
"Deactive Users": "Deactive Users",
"Confirmed Users": "Confirmed Users",
"Not Confirmed Users": "Not Confirmed Users",
"Deleted Users": "Deleted Users",
"Active Confirmed Users": "Active Confirmed Users",
"Admin Users": "Admin Users",
"Active Confirmed Admins": "Active Confirmed Admins",
"Current User": "Current User",
"New Contact Created": "New Contact Created",
"Contact Updated": "Contact Updated",
"New Company Created": "New Company Created",
"Company Updated": "Company Updated",
"New Call Created": "New Call Created",
"New Task Created": "New Task Created",
"New Event Created": "New Event Created",
"New Pipeline Record Created": "New Pipeline Record Created",
"Pipeline Record Updated": "Pipeline Record Updated",
"Triggers when a new contact is created": "Triggers when a new contact is created",
"Triggers when a contact is updated": "Triggers when a contact is updated",
"Triggers when a new company record is created": "Triggers when a new company record is created",
"Triggers when a company record is updated": "Triggers when a company record is updated",
"Triggers when a new call log is created": "Triggers when a new call log is created",
"Triggers when a new task is created": "Triggers when a new task is created",
"Triggers when a new event is created": "Triggers when a new event is created",
"Triggers when a new pipeline record is created": "Triggers when a new pipeline record is created",
"Triggers when a pipeline record is updated": "Triggers when a pipeline record is updated"
}

View File

@@ -0,0 +1,124 @@
import { createPiece, PieceAuth, Property } from "@activepieces/pieces-framework";
import { DATA_CENTER_REGIONS } from "./lib/common/constants";
import { getZohoBiginAccountAuthorizationUrl } from "./lib/common/helpers";
import { newContactCreated } from "./lib/triggers/new-contact-created";
import { PieceCategory } from "@activepieces/shared";
import { companyUpdated } from "./lib/triggers/company-updated";
import { contactUpdated } from "./lib/triggers/contact-updated";
import { newCallCreated } from "./lib/triggers/new-call-created";
import { newCompanyCreated } from "./lib/triggers/new-company-created";
import { newTaskCreated } from "./lib/triggers/new-task-created";
import { newEventCreated } from "./lib/triggers/new-event-created";
import { newPipelineRecordCreated } from "./lib/triggers/new-pipeline-record";
import { pipelineRecordUpdated } from "./lib/triggers/pipeline-record-updated";
import { createCompany } from "./lib/actions/create-company";
import { updateCompany } from "./lib/actions/update-company";
import { createContact } from "./lib/actions/create-contact";
import { updateContact } from "./lib/actions/update-contact";
import { createTask } from "./lib/actions/create-task";
import { updateTask } from "./lib/actions/update-task";
import { createCall } from "./lib/actions/create-call";
import { biginApiService } from "./lib/common/request";
import { createEvent } from "./lib/actions/create-event";
import { updateEvent } from "./lib/actions/update-event";
import { createPipelineRecord } from "./lib/actions/create-pipeline-record";
import { updatePipelineRecord } from "./lib/actions/update-pipeline-record";
import { searchPipelineRecord } from "./lib/actions/search-pipeline-records";
import { searchCompanyRecord } from "./lib/actions/search-company-record";
import { searchContactRecord } from "./lib/actions/search-contact-record";
import { searchProductRecord } from "./lib/actions/search-product";
import { searchUser } from "./lib/actions/search-user";
export const biginAuth = PieceAuth.OAuth2({
authUrl: '{domain}/oauth/v2/auth',
tokenUrl: '{domain}/oauth/v2/token',
required: true,
scope: [
'ZohoBigin.modules.ALL',
'ZohoBigin.settings.ALL',
'ZohoBigin.users.ALL',
'ZohoBigin.notifications.ALL',
'ZohoSearch.securesearch.READ',
],
props: {
domain: Property.StaticDropdown({
displayName: 'Your Data Center Region',
description: 'Select your Zoho data center region for your account',
required: true,
options: {
options: DATA_CENTER_REGIONS.map((region) => ({
label: region.LABEL,
value: getZohoBiginAccountAuthorizationUrl(region.REGION),
})),
},
defaultValue: getZohoBiginAccountAuthorizationUrl(
DATA_CENTER_REGIONS[0].REGION
),
}),
},
validate: async ({ auth }) => {
const { domain } = auth.props as any;
if (!domain) {
return {
valid: false,
error: 'Please select your data center region.',
};
}
try {
const region = DATA_CENTER_REGIONS.find(
(r) => r.ACCOUNTS_DOMAIN === domain || getZohoBiginAccountAuthorizationUrl(r.REGION) === domain
);
const apiDomain = region?.API_DOMAIN ?? 'https://www.zohoapis.com';
await biginApiService.fetchModules(auth.access_token, apiDomain);
return { valid: true };
} catch {
return {
valid: false,
error:
'Could not validate OAuth credentials. please check your Client ID, Secret, and Region.',
};
}
},
});
export const biginByZoho = createPiece({
displayName: 'Bigin by Zoho CRM',
description:
'Bigin by Zoho CRM is a lightweight CRM designed for small businesses to manage contacts, companies, deals (pipeline records), tasks, calls, and events.',
auth: biginAuth,
minimumSupportedRelease: '0.36.1',
categories: [PieceCategory.SALES_AND_CRM],
logoUrl: 'https://cdn.activepieces.com/pieces/bigin-by-zoho.png',
authors: ['gs03dev'],
actions: [
createCompany,
updateCompany,
createContact,
updateContact,
createTask,
updateTask,
createCall,
createEvent,
updateEvent,
createPipelineRecord,
updatePipelineRecord,
searchPipelineRecord,
searchCompanyRecord,
searchContactRecord,
searchProductRecord,
searchUser
],
triggers: [
newContactCreated,
contactUpdated,
newCompanyCreated,
companyUpdated,
newCallCreated,
newTaskCreated,
newEventCreated,
newPipelineRecordCreated,
pipelineRecordUpdated,
],
});

View File

@@ -0,0 +1,166 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { biginAuth } from '../../index';
import { contactsDropdown, tagsDropdown, usersDropdown } from '../common/props';
import { biginApiService } from '../common/request';
import { formatDateTime, getSafeLabel, handleDropdownError } from '../common/helpers';
export const createCall = createAction({
auth: biginAuth,
name: 'createCall',
displayName: 'Create Call',
description: 'Creates a Call Log Entry Record',
props: {
callStartTime: Property.DateTime({
displayName: 'Call Start Time',
description: 'Provide the start time of the call in ISO8601 format.',
required: true,
}),
callDuration: Property.Number({
displayName: 'Call Duration (minutes)',
description:
'Provide the duration of the call in minutes (numeric). For example, 30 for a 30-minute call.',
required: true,
}),
callType: Property.StaticDropdown({
displayName: 'Call Type',
description: 'Type of call',
required: true,
options: {
options: [
{ label: 'Outbound', value: 'Outbound' },
{ label: 'Inbound', value: 'Inbound' },
{ label: 'Missed', value: 'Missed' },
],
},
}),
owner: usersDropdown,
contactName: contactsDropdown,
subject: Property.ShortText({
displayName: 'Subject',
description: 'Subject of the call',
required: false,
}),
description: Property.LongText({
displayName: 'Description',
description: 'Description or notes about the call',
required: false,
}),
callAgenda: Property.LongText({
displayName: 'Call Agenda',
description: 'Agenda or purpose of the call',
required: false,
}),
reminder: Property.DateTime({
displayName: 'Reminder',
description: 'Reminder date and time for the call',
required: false,
}),
dialledNumber: Property.ShortText({
displayName: 'Dialed Number',
description: 'Provide the number dialed for the call.',
required: false,
}),
relatedModule: Property.StaticDropdown({
displayName: 'Related Module',
description: 'Select the type of entity the call is related to.',
required: false,
defaultValue: 'Pipelines',
options: {
options: [
{ label: 'Pipelines', value: 'Pipelines' },
{ label: 'Companies', value: 'Companies' },
],
},
}),
relatedTo: Property.Dropdown({
auth: biginAuth,
displayName: 'Related To',
description: 'Select the specific record the call is related to.',
required: false,
refreshers: ['auth', 'relatedModule'],
defaultValue: {},
options: async ({ auth, relatedModule }): Promise<any> => {
if (!auth) return handleDropdownError('Please connect first');
if (!relatedModule) return { options: [] };
const { access_token, data } = auth;
const api_domain = data['api_domain'];
const fetchMap: Record<string, () => Promise<any>> = {
Pipelines: () =>
biginApiService.fetchPipelinesRecords(access_token, api_domain),
Companies: () =>
biginApiService.fetchCompanies(access_token, api_domain),
};
const fetchFn = fetchMap[relatedModule as keyof typeof fetchMap];
const response = await fetchFn();
const records = response?.data || [];
return {
options: records.map((item: any) => ({
label: getSafeLabel(item),
value: item.id,
})),
};
},
}),
tag: tagsDropdown('Calls'),
},
async run({ auth, propsValue }) {
try {
const { access_token, data } = auth;
const api_domain = data['api_domain'];
const payload: any = {
Call_Start_Time: formatDateTime(propsValue.callStartTime),
Call_Duration: Number(propsValue.callDuration),
Call_Type: propsValue.callType,
};
if (propsValue.subject) payload.Subject = propsValue.subject;
if (propsValue.description) payload.Description = propsValue.description;
if (propsValue.callAgenda) payload.Call_Agenda = propsValue.callAgenda;
if (propsValue.reminder) payload.Reminder = formatDateTime(propsValue.reminder);
if (propsValue.dialledNumber)
payload.Dialled_Number = propsValue.dialledNumber;
if (propsValue.owner) payload.Owner = { id: propsValue.owner };
if (propsValue.contactName)
payload.Contact_Name = { id: propsValue.contactName };
if (propsValue.relatedTo && propsValue.relatedModule) {
const relatedModuleMap = {
Pipelines: 'Deals',
Companies: 'Accounts',
};
payload.$related_module =
relatedModuleMap[
propsValue.relatedModule as keyof typeof relatedModuleMap
] || 'Deals';
payload.Related_To = { id: propsValue.relatedTo };
}
if (propsValue.tag) payload.Tag = propsValue.tag.map((t: any) => ({ name: t }));
const response = await biginApiService.createCall(
access_token,
api_domain,
{ data: [payload] }
);
return {
message: 'Call log Entry created successfully',
data: response.data[0],
};
} catch (error: any) {
console.error('Error creating call log entry:', error);
throw new Error(
error instanceof Error
? `Failed to create call log entry: ${error.message}`
: 'Failed to create call log entry due to an unknown error'
);
}
},
});

View File

@@ -0,0 +1,122 @@
import { biginAuth } from '../../index';
import { createAction, Property } from '@activepieces/pieces-framework';
import { tagsDropdown, usersDropdown } from '../common/props';
import { biginApiService } from '../common/request';
export const createCompany = createAction({
auth: biginAuth,
name: 'createCompany',
displayName: 'Create Company',
description: 'Creates a Company Record',
props: {
accountName: Property.ShortText({
displayName: 'Account Name',
description: 'Provide the name of the company',
required: true,
}),
phone: Property.ShortText({
displayName: 'Phone',
description: 'Provide a phone number for the company',
required: false,
}),
website: Property.ShortText({
displayName: 'Website',
description: 'Provide a website URL for the company',
required: false,
}),
tag: tagsDropdown('Accounts'),
description: Property.LongText({
displayName: 'Description',
description:
'Provide additional descriptions or notes related to the company',
required: false,
}),
owner: usersDropdown,
billingStreet: Property.ShortText({
displayName: 'Billing Street',
description: 'The street address of the company',
required: false,
}),
billingCity: Property.ShortText({
displayName: 'Billing City',
description: 'The city where the company is located',
required: false,
}),
billingState: Property.ShortText({
displayName: 'Billing State',
description: 'The state or province where the company is located',
required: false,
}),
billingCountry: Property.ShortText({
displayName: 'Billing Country',
description: 'The country of the company',
required: false,
}),
billingCode: Property.ShortText({
displayName: 'Billing Code',
description: 'The ZIP or postal code of the company',
required: false,
}),
},
async run(context) {
try {
const {
accountName,
owner,
phone,
website,
tag,
description,
billingStreet,
billingCity,
billingState,
billingCountry,
billingCode,
} = context.propsValue;
const record: Record<string, any> = {
Account_Name: accountName,
Phone: phone,
Website: website,
Description: description,
Billing_Street: billingStreet,
Billing_City: billingCity,
Billing_State: billingState,
Billing_Country: billingCountry,
Billing_Code: billingCode,
Owner: owner ? { id: owner } : undefined,
Tag: Array.isArray(tag) && tag.length > 0 ? tag.map((t) => ({ name: t })) : undefined,
};
Object.keys(record).forEach((k) => {
const v = (record as any)[k];
if (
v === undefined ||
v === null ||
(typeof v === 'string' && v.trim() === '') ||
(Array.isArray(v) && v.length === 0)
) {
delete (record as any)[k];
}
});
const response = await biginApiService.createCompany(
context.auth.access_token,
(context.auth as any).api_domain,
{ data: [record] }
);
return {
message: 'Company created successfully',
data: response.data[0],
};
} catch (error: any) {
console.error('Error creating company:', error);
throw new Error(
error instanceof Error
? `Failed to create company: ${error.message}`
: 'Failed to create company due to an unknown error'
);
}
},
});

View File

@@ -0,0 +1,149 @@
import { biginAuth } from '../../index';
import { createAction, Property } from '@activepieces/pieces-framework';
import { companyDropdown, tagsDropdown, usersDropdown } from '../common/props';
import { biginApiService } from '../common/request';
import { handleDropdownError } from '../common/helpers';
export const createContact = createAction({
auth: biginAuth,
name: 'createContact',
displayName: 'Create Contact',
description: 'Creates a Contact Record',
props: {
firstName: Property.ShortText({
displayName: 'First Name',
description: 'First name of the contact',
required: false,
}),
lastName: Property.ShortText({
displayName: 'Last Name',
description: 'Last name of the contact',
required: true,
}),
title: Property.ShortText({
displayName: 'Title',
description: 'Job title of the contact',
required: false,
}),
email: Property.ShortText({
displayName: 'Email',
description: 'Email address of the contact',
required: false,
}),
mobile: Property.ShortText({
displayName: 'Mobile',
description: 'Mobile phone number',
required: false,
}),
emailOptOut: Property.Checkbox({
displayName: 'Email Opt Out',
description: 'Whether the contact has opted out of emails',
required: false,
defaultValue: false,
}),
owner: usersDropdown,
accountName: companyDropdown,
tag: tagsDropdown('Contacts'),
description: Property.LongText({
displayName: 'Description',
description: 'Provide additional descriptions or notes related to the contact',
required: false,
}),
mailingStreet: Property.ShortText({
displayName: 'Mailing Street',
description: 'Street address for mailing',
required: false,
}),
mailingCity: Property.ShortText({
displayName: 'Mailing City',
description: 'City for mailing address',
required: false,
}),
mailingState: Property.ShortText({
displayName: 'Mailing State',
description: 'State for mailing address',
required: false,
}),
mailingCountry: Property.ShortText({
displayName: 'Mailing Country',
description: 'Country for mailing address',
required: false,
}),
mailingZip: Property.ShortText({
displayName: 'Mailing Zip',
description: 'ZIP/postal code',
required: false,
}),
},
async run(context) {
try {
const {
firstName,
lastName,
title,
email,
mobile,
emailOptOut,
owner,
accountName,
tag,
description,
mailingStreet,
mailingCity,
mailingState,
mailingCountry,
mailingZip,
} = context.propsValue;
const record: Record<string, any> = {
First_Name: firstName,
Last_Name: lastName,
Title: title,
Email: email,
Mobile: mobile,
Email_Opt_Out: emailOptOut,
Owner: owner ? { id: owner } : undefined,
Account_Name: accountName ? { id: accountName } : undefined,
Tag: tag?.length ? tag.map((t: any) => ({ name: t })) : undefined,
Description: description,
Mailing_Street: mailingStreet,
Mailing_City: mailingCity,
Mailing_State: mailingState,
Mailing_Country: mailingCountry,
Mailing_Zip: mailingZip,
};
Object.keys(record).forEach((k) => {
const v = record[k];
if (
v === undefined ||
v === null ||
(typeof v === 'string' && v.trim() === '') ||
(Array.isArray(v) && v.length === 0)
) {
delete record[k];
}
});
const payload = { data: [record] };
const response = await biginApiService.createContact(
context.auth.access_token,
context.auth.data['api_domain'],
payload
);
return {
message: 'Contact created successfully',
data: response.data[0],
};
} catch (error: any) {
console.error('Error creating contact:', error);
throw new Error(
error instanceof Error
? `Failed to create contact: ${error.message}`
: 'Failed to create contact due to an unknown error'
);
}
},
});

View File

@@ -0,0 +1,397 @@
import { biginAuth } from '../../index';
import { createAction, Property } from '@activepieces/pieces-framework';
import { tagsDropdown, usersDropdown } from '../common/props';
import { API_ENDPOINTS } from '../common/constants';
import { biginApiService } from '../common/request';
import { formatDateOnly, formatDateTime, getSafeLabel, handleDropdownError } from '../common/helpers';
export const createEvent = createAction({
auth: biginAuth,
name: 'createEvent',
displayName: 'Create Event',
description: 'Creates a new event in Bigin',
props: {
eventTitle: Property.ShortText({
displayName: 'Event Title',
description: 'Provide the title or name of the event',
required: true,
}),
owner: usersDropdown,
startDateTime: Property.DateTime({
displayName: 'Start Date & Time',
description: 'Start date and time of the event',
required: true,
}),
endDateTime: Property.DateTime({
displayName: 'End Date & Time',
description: 'End date and time of the event',
required: true,
}),
allDay: Property.Checkbox({
displayName: 'All Day Event',
description: 'Mark this as an all-day event',
required: false,
}),
enableRecurring: Property.Checkbox({
displayName: 'Make Event Recurring',
description: 'Make this event recurring',
required: false,
}),
recurringInfo: Property.DynamicProperties({
auth: biginAuth,
displayName: 'Recurring Info',
refreshers: ['enableRecurring'],
required: false,
props: (propsValue, ctx): any => {
if (propsValue['enableRecurring']) {
return {
freq: Property.StaticDropdown({
displayName: 'Frequency',
required: true,
options: {
options: [
{ label: 'Daily', value: 'DAILY' },
{ label: 'Weekly', value: 'WEEKLY' },
{ label: 'Monthly', value: 'MONTHLY' },
{ label: 'Yearly', value: 'YEARLY' },
],
},
}),
interval: Property.Number({
displayName: 'Interval',
required: true,
description:
'Indicates the time gap between each event. The INTERVAL value range from 1 to 99. For example, an INTERVAL of 2 for a WEEKLY recurring event means that there will be a two-week gap between each event.',
defaultValue: 1,
}),
count: Property.Number({
displayName: 'Count',
required: true,
defaultValue: 1,
description:
'Indicates the number of events you want to create. THE COUNT value range from 1 to 99. For example, a COUNT of 3 creates three individual events.',
}),
byday: Property.StaticDropdown({
displayName: 'By Day',
required: false,
description:
'Indicates the day of the week the event repeats. The possible values are SU, MO, TU, WE, TH, FR, or SA. This is applicable only for weekly, and monthly events.',
options: {
options: [
{ label: 'Sunday', value: 'SU' },
{ label: 'Monday', value: 'MO' },
{ label: 'Tuesday', value: 'TU' },
{ label: 'Wednesday', value: 'WE' },
{ label: 'Thursday', value: 'TH' },
{ label: 'Friday', value: 'FR' },
{ label: 'Saturday', value: 'SA' },
],
},
}),
bymonthday: Property.Number({
displayName: 'By Month Day',
required: false,
description:
' Indicates the day of the month the event repeats. The BYMONTHDAY value range from 1 to 31. This is applicable only for weekly and monthly events.',
}),
bysetpos: Property.StaticDropdown({
displayName: 'By Set Position',
required: false,
description:
'Indicates the week of the month the event repeats. The possible values are 1 for the first week of the month, 2 for the second week of the month, 3 the for third week of the month, 4 for the fourth week of the month, or -1 for the last week of the month. This is applicable only for weekly and monthly events.',
options: {
options: [
{ label: 'First Week of the Month', value: '1' },
{ label: 'Second Week of the Month', value: '2' },
{ label: 'Third Week of the Month', value: '3' },
{ label: 'Fourth Week of the Month', value: '4' },
{ label: 'Last Week of the Month', value: '-1' },
],
},
}),
until: Property.ShortText({
displayName: 'Until (YYYY-MM-DD)',
description: 'Date the recurrence ends. Format: YYYY-MM-DD',
required: false,
}),
};
} else {
return {};
}
},
}),
enableReminder: Property.Checkbox({
displayName: 'Enable Reminder',
description: 'Enable reminder for this event',
required: false,
}),
reminderInfo: Property.DynamicProperties({
auth: biginAuth,
displayName: 'Reminder Information',
refreshers: ['enableReminder'],
required: false,
props: (propsValue, ctx): any => {
if (propsValue['enableReminder']) {
return {
reminderList: Property.Array({
displayName: 'Reminder List',
description:
'Add multiple reminders (e.g., "1 hour", "30 minutes")',
required: false,
properties: {
unit: Property.Number({
displayName: 'Time Value',
description: 'Number of time units (e.g., 1, 30)',
required: true,
}),
period: Property.StaticDropdown({
displayName: 'Time Period',
required: true,
options: {
options: [
{ label: 'Days', value: 'days' },
{ label: 'Weeks', value: 'weeks' },
],
},
}),
},
}),
};
} else {
return {};
}
},
}),
venue: Property.ShortText({
displayName: 'Venue',
description: 'Location or venue of the event',
required: false,
}),
relatedModule: Property.StaticDropdown({
displayName: 'Related Module',
description: 'Select the type of entity the event is related to',
required: false,
defaultValue: 'Contacts',
options: {
options: [
{ label: 'Contacts', value: 'Contacts' },
{ label: 'Pipelines', value: 'Pipelines' },
{ label: 'Companies', value: 'Companies' },
],
},
}),
relatedTo: Property.Dropdown({
auth: biginAuth,
displayName: 'Related To',
description: 'Select the specific record the event is related to',
required: false,
refreshers: ['auth', 'relatedModule'],
defaultValue: {},
options: async ({ auth, relatedModule }): Promise<any> => {
if (!auth) return handleDropdownError('Please connect your account first');
if (!relatedModule) return { options: [] };
const { access_token, data } = auth;
const api_domain = data['api_domain'];
const fetchMap: Record<string, () => Promise<any>> = {
Contacts: () =>
biginApiService.fetchContacts(access_token, api_domain),
Pipelines: () =>
biginApiService.fetchPipelinesRecords(access_token, api_domain),
Companies: () =>
biginApiService.fetchCompanies(access_token, api_domain),
};
const fetchFn =
fetchMap[(relatedModule as keyof typeof fetchMap) || 'Contacts'];
const response = await fetchFn();
const records = response?.data || [];
return {
options: records.map((item: any) => ({
label: getSafeLabel(item),
value: item.id,
})),
};
},
}),
participants: Property.Array({
displayName: 'Participants',
description: 'Add participants to the event',
required: false,
properties: {
type: Property.StaticDropdown({
displayName: 'Participant Type',
required: true,
options: {
options: [
{ label: 'User', value: 'user' },
{ label: 'Email', value: 'email' },
{ label: 'Contact', value: 'contact' },
],
},
}),
participant: Property.ShortText({
displayName: 'Participant ID/Email',
description: 'User ID, email address, or contact ID based on type',
required: true,
}),
},
}),
description: Property.LongText({
displayName: 'Description',
description: 'Additional descriptions or notes related to the event',
required: false,
}),
tag: tagsDropdown('Events'),
},
async run({ auth, propsValue }) {
const { access_token, data } = auth;
const api_domain = data['api_domain'];
const startDate = new Date(propsValue.startDateTime);
const endDate = new Date(propsValue.endDateTime);
if (endDate <= startDate) {
throw new Error('End date/time must be after start date/time');
}
const eventData: any = {
Event_Title: propsValue.eventTitle,
Start_DateTime: formatDateTime(propsValue.startDateTime),
End_DateTime: formatDateTime(propsValue.endDateTime),
};
if (propsValue.owner) {
eventData.Owner = { id: propsValue.owner };
}
if (propsValue.allDay) {
eventData.All_day = propsValue.allDay;
}
if (propsValue.enableRecurring && propsValue.recurringInfo) {
const recurringInfo = propsValue.recurringInfo as any;
const rruleParts: string[] = [];
const allowedFreq = ['DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'];
if (!allowedFreq.includes(recurringInfo.freq)) {
throw new Error('Invalid recurrence frequency. Allowed values: DAILY, WEEKLY, MONTHLY, YEARLY');
}
rruleParts.push(`FREQ=${recurringInfo.freq}`);
if (recurringInfo.interval !== undefined) {
const interval = Number(recurringInfo.interval);
if (Number.isNaN(interval) || interval < 1 || interval > 99) {
throw new Error('Interval must be a number between 1 and 99');
}
rruleParts.push(`INTERVAL=${recurringInfo.interval}`);
}
if (recurringInfo.count !== undefined) {
const count = Number(recurringInfo.count);
if (Number.isNaN(count) || count < 1 || count > 99) {
throw new Error('Count must be a number between 1 and 99');
}
rruleParts.push(`COUNT=${recurringInfo.count}`);
}
if (recurringInfo.byday) {
rruleParts.push(`BYDAY=${recurringInfo.byday}`);
}
if (recurringInfo.bymonthday !== undefined) {
const bymonthday = Number(recurringInfo.bymonthday);
if (Number.isNaN(bymonthday) || bymonthday < 1 || bymonthday > 31) {
throw new Error('BYMONTHDAY must be a number between 1 and 31');
}
rruleParts.push(`BYMONTHDAY=${recurringInfo.bymonthday}`);
}
if (recurringInfo.bysetpos) {
const allowedSetPos = ['1', '2', '3', '4', '-1'];
if (!allowedSetPos.includes(String(recurringInfo.bysetpos))) {
throw new Error('BYSETPOS must be one of 1, 2, 3, 4, -1');
}
rruleParts.push(`BYSETPOS=${recurringInfo.bysetpos}`);
}
if (recurringInfo.until) {
const until = formatDateOnly(recurringInfo.until);
rruleParts.push(`UNTIL=${until}`);
}
eventData.Recurring_Activity = {
RRULE: rruleParts.join(';') + ';',
};
}
if (propsValue.enableReminder && propsValue.reminderInfo) {
const reminderList = propsValue.reminderInfo['reminderList'] as any[];
eventData.Remind_At = reminderList.map((reminder: any) => ({
unit: reminder.unit,
period: reminder.period,
}));
}
if (propsValue.venue) {
eventData.Venue = propsValue.venue;
}
if (propsValue.relatedTo && propsValue.relatedModule) {
const relatedModuleMap = {
Contacts: 'Contacts',
Pipelines: 'Deals',
Companies: 'Accounts',
};
const relatedModule =
relatedModuleMap[
propsValue.relatedModule as keyof typeof relatedModuleMap
];
eventData.Related_To = { id: propsValue.relatedTo };
eventData.$related_module = relatedModule;
}
if (propsValue.participants && Array.isArray(propsValue.participants)) {
eventData.Participants = propsValue.participants.map(
(participant: any) => ({
type: participant.type,
participant: participant.participant,
})
);
}
if (propsValue.description) {
eventData.Description = propsValue.description;
}
if (
propsValue.tag &&
Array.isArray(propsValue.tag) &&
propsValue.tag.length > 0
) {
eventData.Tag = propsValue.tag.map((tagName) => ({ name: tagName }));
}
const payload = { data: [eventData] };
try {
const response = await biginApiService.createEvent(
access_token,
api_domain,
payload
);
return response.data[0];
} catch (error) {
console.error('Error creating event:', error);
throw new Error(
error instanceof Error
? `Failed to create event: ${error.message}`
: 'Failed to create event due to an unknown error'
);
}
},
});

View File

@@ -0,0 +1,253 @@
import { biginAuth } from '../../index';
import { createAction, InputPropertyMap, Property } from '@activepieces/pieces-framework';
import { companyDropdown, contactsDropdown, layoutsDropdown, multiContactsDropdown, pipelineRecordsDropdown, productsDropdown, SubPipelineorStageDropdown, tagsDropdown, usersDropdown } from '../common/props';
import { formatDateOnly, formatDateTime, handleDropdownError } from '../common/helpers';
import { biginApiService } from '../common/request';
export const createPipelineRecord = createAction({
auth: biginAuth,
name: 'createPipeline',
displayName: 'Create Pipeline',
description: 'Creates a new pipeline record in Bigin',
props: {
dealName: Property.ShortText({
displayName: 'Deal Name',
description: 'Provide the name for the pipeline record (deal)',
required: true,
}),
pipeline: layoutsDropdown(
'Pipelines',
'Provide the Team Pipeline to which the pipeline record (deal) belongs',
'Pipelines'
),
subPipeline: SubPipelineorStageDropdown(
'Sub Pipeline',
'Pick one of the configured sub-pipelines',
'Sub Pipeline'
),
stage: SubPipelineorStageDropdown(
'Stage',
'Provide the current stage of the pipeline record (deal) within the Sub-Pipeline',
'Stage'
),
amount: Property.Number({
displayName: 'Amount',
description: 'The amount of the pipeline record (deal)',
required: false,
}),
secondaryContacts: multiContactsDropdown,
closingDate: Property.DateTime({
displayName: 'Closing Date',
description:
'Provide the expected or actual closing date of the pipeline record (deal) in YYYY-MM-DD format',
required: true,
}),
owner: usersDropdown,
accountName: companyDropdown,
contactName: contactsDropdown,
associatedProducts: productsDropdown,
tag: tagsDropdown('Pipelines'),
additionalFields: Property.DynamicProperties({
auth: biginAuth,
displayName: 'Additional Fields',
description: 'Optional fields from the Pipelines module',
refreshers: ['auth'],
required: false,
props: async ({ auth }): Promise<InputPropertyMap> => {
if (!auth) return {} as InputPropertyMap;
const { access_token, api_domain } = auth as any;
const fieldsResp = await biginApiService.fetchModuleFields(
access_token,
api_domain,
'Pipelines'
);
const props: InputPropertyMap = {};
for (const f of (fieldsResp.fields || []) as any[]) {
const apiName = f.api_name as string;
if (
['Deal_Name', 'Sub_Pipeline', 'Stage', 'Owner', 'Account_Name', 'Contact_Name', 'Tag', 'Pipeline', 'Associated_Products', 'Secondary_Contacts', 'Closing_Date', 'id'].includes(apiName)
) {
continue;
}
if (f.read_only || f.field_read_only) continue;
if (!f.view_type || f.view_type.create !== true) continue;
const display = f.display_label || f.field_label || apiName;
switch ((f.data_type as string)?.toLowerCase()) {
case 'picklist': {
const options = (f.pick_list_values || []).map((pl: any) => ({
label: pl.display_value,
value: pl.actual_value,
}));
props[apiName] = Property.StaticDropdown({
displayName: display,
required: false,
options: { options },
});
break;
}
case 'multiselectpicklist': {
const options = (f.pick_list_values || []).map((pl: any) => ({
label: pl.display_value,
value: pl.actual_value,
}));
props[apiName] = Property.StaticMultiSelectDropdown({
displayName: display,
required: false,
options: { options },
});
break;
}
case 'boolean': {
props[apiName] = Property.Checkbox({
displayName: display,
required: false,
});
break;
}
case 'date': {
props[apiName] = Property.ShortText({
displayName: display,
required: false,
});
break;
}
case 'datetime': {
props[apiName] = Property.DateTime({
displayName: display,
required: false,
});
break;
}
case 'integer':
case 'long':
case 'double':
case 'decimal':
case 'currency':
case 'percent': {
props[apiName] = Property.Number({
displayName: display,
required: false,
});
break;
}
default: {
props[apiName] = Property.ShortText({
displayName: display,
required: false,
});
}
}
}
return props;
},
}),
},
async run({ propsValue, auth }) {
const payload: any = {
Deal_Name: propsValue.dealName,
Sub_Pipeline: propsValue.subPipeline,
Stage: propsValue.stage,
};
if (propsValue.owner) payload.Owner = { id: propsValue.owner };
if (propsValue.accountName)
payload.Account_Name = { id: propsValue.accountName };
if (propsValue.contactName)
payload.Contact_Name = { id: propsValue.contactName };
if (propsValue.amount) payload.Amount = propsValue.amount;
if (!propsValue.closingDate) {
payload.Closing_Date = formatDateOnly(new Date());
} else {
payload.Closing_Date = formatDateOnly(propsValue.closingDate);
}
if (propsValue.pipeline) {
const pipeline = JSON.parse(propsValue.pipeline as any);
payload.Pipeline = { id: pipeline.id, name: pipeline.name };
}
if (propsValue.associatedProducts) {
payload.Associated_Products = propsValue.associatedProducts.map(
(product: any) => {
const p = JSON.parse(product);
return { id: p.id, name: p.name };
}
);
}
if (propsValue.tag) {
payload.Tag = propsValue.tag.map((t: any) => ({ name: t }));
}
if (propsValue.additionalFields && typeof propsValue.additionalFields === 'object') {
for (const [apiName, value] of Object.entries(propsValue.additionalFields as Record<string, any>)) {
if (
value === undefined ||
value === null ||
(typeof value === 'string' && value.trim() === '') ||
(Array.isArray(value) && (value as any[]).length === 0)
) {
continue;
}
if (
['Deal_Name', 'Sub_Pipeline', 'Stage', 'Owner', 'Account_Name', 'Contact_Name', 'Tag', 'Pipeline', 'Associated_Products', 'Secondary_Contacts', 'Closing_Date'].includes(apiName)
) {
continue;
}
payload[apiName] = value;
}
}
try {
const { access_token, data } = auth;
const api_domain = data['api_domain'];
const response = await biginApiService.createPipelineRecord(
access_token,
api_domain,
{ data: [payload] }
);
const created = response.data[0];
if (
propsValue.secondaryContacts &&
Array.isArray(propsValue.secondaryContacts) &&
created?.details?.id
) {
const secondaries = (propsValue.secondaryContacts as any[])
.map((value: any) => String(value))
.filter((id: string) => id !== propsValue.contactName);
if (secondaries.length > 0) {
await biginApiService.updatePipelineRecord(
access_token,
api_domain,
{
data: [
{
id: created.details.id,
Secondary_Contacts: secondaries.map((id: string) => ({ id })),
},
],
}
);
}
}
return created;
} catch (error) {
console.error('Error creating pipeline:', error);
throw new Error(
error instanceof Error
? `Failed to create pipeline: ${error.message}`
: 'Failed to create pipeline due to an unknown error'
);
}
},
});

View File

@@ -0,0 +1,424 @@
import { biginAuth } from '../../index';
import { createAction, Property } from '@activepieces/pieces-framework';
import { tagsDropdown, usersDropdown } from '../common/props';
import { API_ENDPOINTS } from '../common/constants';
import { formatDateOnly, formatDateTime, getSafeLabel, handleDropdownError } from '../common/helpers';
import { biginApiService } from '../common/request';
export const createTask = createAction({
auth: biginAuth,
name: 'createTask',
displayName: 'Create Task',
description: 'Creates a new Task',
props: {
subject: Property.ShortText({
displayName: 'Subject',
description: 'Provide the subject or title of the task',
required: true,
}),
owner: usersDropdown,
dueDate: Property.DateTime({
displayName: 'Due Date',
description: 'Provide the due date of the task (YYYY-MM-DD format)',
required: false,
}),
enableRecurring: Property.Checkbox({
displayName: 'Make Task Recurring',
description: 'make this task recurring',
required: false,
}),
recurringInfo: Property.DynamicProperties({
auth: biginAuth,
displayName: 'Recurring Info',
description:
'Please note: Due Date must be set above for recurring tasks',
refreshers: ['enableRecurring'],
required: false,
props: (propsValue, ctx): any => {
if (propsValue['enableRecurring']) {
return {
freq: Property.StaticDropdown({
displayName: 'Frequency',
required: true,
options: {
options: [
{ label: 'Daily', value: 'DAILY' },
{ label: 'Weekly', value: 'WEEKLY' },
{ label: 'Monthly', value: 'MONTHLY' },
{ label: 'Yearly', value: 'YEARLY' },
],
},
}),
interval: Property.Number({
displayName: 'Interval',
required: true,
description:
'Indicates the time gap between each event. The INTERVAL value range from 1 to 99. For example, an INTERVAL of 2 for a WEEKLY recurring event means that there will be a two-week gap between each event.',
defaultValue: 1,
}),
count: Property.Number({
displayName: 'Count',
required: true,
defaultValue: 1,
description:
'Indicates the number of events you want to create. THE COUNT value range from 1 to 99. For example, a COUNT of 3 creates three individual events.',
}),
byday: Property.StaticDropdown({
displayName: 'By Day',
required: false,
description:
'Indicates the day of the week the event repeats. The possible values are SU, MO, TU, WE, TH, FR, or SA. This is applicable only for weekly, and monthly events.',
options: {
options: [
{ label: 'Sunday', value: 'SU' },
{ label: 'Monday', value: 'MO' },
{ label: 'Tuesday', value: 'TU' },
{ label: 'Wednesday', value: 'WE' },
{ label: 'Thursday', value: 'TH' },
{ label: 'Friday', value: 'FR' },
{ label: 'Saturday', value: 'SA' },
],
},
}),
bymonthday: Property.Number({
displayName: 'By Month Day',
required: false,
description:
' Indicates the day of the month the event repeats. The BYMONTHDAY value range from 1 to 31. This is applicable only for weekly and monthly events.',
}),
bysetpos: Property.StaticDropdown({
displayName: 'By Set Position',
required: false,
description:
'Indicates the week of the month the event repeats. The possible values are 1 for the first week of the month, 2 for the second week of the month, 3 the for third week of the month, 4 for the fourth week of the month, or -1 for the last week of the month. This is applicable only for weekly and monthly events.',
options: {
options: [
{ label: 'First Week of the Month', value: '1' },
{ label: 'Second Week of the Month', value: '2' },
{ label: 'Third Week of the Month', value: '3' },
{ label: 'Fourth Week of the Month', value: '4' },
{ label: 'Last Week of the Month', value: '-1' },
],
},
}),
until: Property.ShortText({
displayName: 'Until (YYYY-MM-DD)',
description: 'Date the recurrence ends. Format: YYYY-MM-DD',
required: false,
}),
};
} else {
return {};
}
},
}),
enableReminder: Property.Checkbox({
displayName: 'Enable Reminder',
description: 'Enable reminder for this task',
required: false,
}),
reminderInfo: Property.DynamicProperties({
displayName: 'Reminder Information',
auth: biginAuth,
refreshers: ['enableReminder'],
required: false,
props: (propsValue, ctx): any => {
if (propsValue['enableReminder']) {
return {
reminderAction: Property.StaticDropdown({
displayName: 'Reminder Action',
description: 'How the reminder should be shown',
required: false,
options: {
options: [
{ label: 'Email', value: 'EMAIL' },
{ label: 'Popup', value: 'POPUP' },
{ label: 'Email and Popup', value: 'EMAILANDPOPUP' },
],
},
}),
reminderType: Property.StaticDropdown({
displayName: 'Reminder Type',
description: 'When to trigger the reminder',
required: false,
options: {
options: [
{ label: 'Specific Date & Time', value: 'datetime' },
{ label: 'Days Before', value: 'days_before' },
{ label: 'Weeks Before', value: 'weeks_before' },
],
},
}),
reminderDateTime: Property.DateTime({
displayName: 'Reminder Date & Time',
description:
'Specific date and time for reminder (for non-recurring tasks)',
required: false,
}),
reminderDaysBefore: Property.Number({
displayName: 'Days Before',
description: 'Number of days before the task to send reminder',
required: false,
defaultValue: 1,
}),
reminderWeeksBefore: Property.Number({
displayName: 'Weeks Before',
description: 'Number of weeks before the task to send reminder',
required: false,
defaultValue: 1,
}),
reminderTime: Property.ShortText({
displayName: 'Reminder Time',
description:
'Time for reminder in HH:MM format (24-hour, for recurring tasks)',
required: false,
}),
};
} else {
return {};
}
},
}),
relatedModule: Property.StaticDropdown({
displayName: 'Related Module',
description:
'Select the type of entity the task is related to. Options: Contacts, Pipelines, Companies.',
required: false,
defaultValue: 'Contacts',
options: {
options: [
{ label: 'Contacts', value: 'Contacts' },
{ label: 'Pipelines', value: 'Pipelines' },
{ label: 'Companies', value: 'Companies' },
],
},
}),
relatedTo: Property.Dropdown({
auth: biginAuth,
displayName: 'Related To',
description: 'Select the specific record the task is related to.',
required: false,
refreshers: ['auth', 'relatedModule'],
defaultValue: {},
options: async ({ auth, relatedModule }): Promise<any> => {
if (!auth) return handleDropdownError('Please connect first');
if (!relatedModule) return { options: [] };
const { access_token, data } = auth;
const api_domain = data['api_domain'];
const fetchMap: Record<string, () => Promise<any>> = {
Contacts: () =>
biginApiService.fetchContacts(access_token, api_domain),
Pipelines: () =>
biginApiService.fetchPipelinesRecords(access_token, api_domain),
Companies: () =>
biginApiService.fetchCompanies(access_token, api_domain),
};
const fetchFn = fetchMap[relatedModule as keyof typeof fetchMap];
const response = await fetchFn();
const records = response?.data || [];
return {
options: records.map((item: any) => ({
label: getSafeLabel(item),
value: item.id,
})),
};
},
}),
description: Property.LongText({
displayName: 'Description',
description:
'Provide additional descriptions or notes related to the task',
required: false,
}),
priority: Property.StaticDropdown({
displayName: 'Priority',
description: 'Provide the priority level of the task',
required: false,
options: {
options: [
{ label: 'High', value: 'High' },
{ label: 'Normal', value: 'Normal' },
{ label: 'Low', value: 'Low' },
{ label: 'Lowest', value: 'Lowest' },
{ label: 'Highest', value: 'Highest' },
],
},
}),
status: Property.StaticDropdown({
displayName: 'Status',
description: 'Provide the current status of the task.',
required: false,
options: {
options: [
{ label: 'In Progress', value: 'In Progress' },
{ label: 'Completed', value: 'Completed' },
{ label: 'Deferred', value: 'Deferred' },
{ label: 'Waiting for input', value: 'Waiting on someone else' },
{ label: 'Not Started', value: 'Not Started' },
],
},
}),
tag: tagsDropdown('Tasks'),
},
async run({ auth, propsValue }) {
const { access_token, data } = auth;
const api_domain = data['api_domain'];
const taskData: any = {
Subject: propsValue.subject,
};
if (propsValue.owner) {
taskData.Owner = { id: propsValue.owner };
}
if (propsValue.dueDate) {
taskData.Due_Date = formatDateOnly(propsValue.dueDate);
}
if (propsValue.enableRecurring && propsValue.recurringInfo) {
const recurringInfo = propsValue.recurringInfo as any;
const rruleParts: string[] = [];
const allowedFreq = ['DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'];
if (!allowedFreq.includes(recurringInfo.freq)) {
throw new Error('Invalid recurrence frequency. Allowed values: DAILY, WEEKLY, MONTHLY, YEARLY');
}
rruleParts.push(`FREQ=${recurringInfo.freq}`);
if (recurringInfo.interval !== undefined) {
const interval = Number(recurringInfo.interval);
if (Number.isNaN(interval) || interval < 1 || interval > 99) {
throw new Error('Interval must be a number between 1 and 99');
}
rruleParts.push(`INTERVAL=${recurringInfo.interval}`);
}
if (recurringInfo.count !== undefined) {
const count = Number(recurringInfo.count);
if (Number.isNaN(count) || count < 1 || count > 99) {
throw new Error('Count must be a number between 1 and 99');
}
rruleParts.push(`COUNT=${recurringInfo.count}`);
}
if (recurringInfo.byday) {
rruleParts.push(`BYDAY=${recurringInfo.byday}`);
}
if (recurringInfo.bymonthday !== undefined) {
const bymonthday = Number(recurringInfo.bymonthday);
if (Number.isNaN(bymonthday) || bymonthday < 1 || bymonthday > 31) {
throw new Error('BYMONTHDAY must be a number between 1 and 31');
}
rruleParts.push(`BYMONTHDAY=${recurringInfo.bymonthday}`);
}
if (recurringInfo.bysetpos) {
const allowedSetPos = ['1', '2', '3', '4', '-1'];
if (!allowedSetPos.includes(String(recurringInfo.bysetpos))) {
throw new Error('BYSETPOS must be one of 1, 2, 3, 4, -1');
}
rruleParts.push(`BYSETPOS=${recurringInfo.bysetpos}`);
}
if (recurringInfo.until) {
const until = formatDateOnly(recurringInfo.until);
rruleParts.push(`UNTIL=${until}`);
}
taskData.Recurring_Activity = {
RRULE: rruleParts.join(';') + ';',
};
}
if (propsValue.enableReminder && propsValue.reminderInfo) {
const reminderInfo = propsValue.reminderInfo as any;
const reminderAction = reminderInfo.reminderAction || 'EMAIL';
let alarmValue = `ACTION=${reminderAction}`;
const reminderTime = reminderInfo.reminderTime || '09:00';
if (
propsValue.recurringInfo &&
reminderInfo.reminderType === 'days_before'
) {
const daysBefore = reminderInfo.reminderDaysBefore || 1;
alarmValue += `;TRIGGER=P${daysBefore}D;TRIGGER_TIME=${reminderTime}`;
} else if (
propsValue.recurringInfo &&
reminderInfo.reminderType === 'weeks_before'
) {
const weeksBefore = reminderInfo.reminderWeeksBefore || 1;
alarmValue += `;TRIGGER=P${weeksBefore}W;TRIGGER_TIME=${reminderTime}`;
} else if (reminderInfo.reminderDateTime) {
alarmValue += `;TRIGGER=DATE-TIME:${formatDateTime(reminderInfo.reminderDateTime)}`;
}
taskData.Remind_At = {
ALARM: alarmValue,
};
}
if (propsValue.relatedTo && propsValue.relatedModule) {
const relatedModuleMap = {
Contacts: 'Contacts',
Pipelines: 'Deals',
Companies: 'Accounts',
};
const relatedModule =
relatedModuleMap[
propsValue.relatedModule as keyof typeof relatedModuleMap
] || 'Contacts';
taskData.Related_To = { id: propsValue.relatedTo };
taskData.$related_module = relatedModule;
}
if (propsValue.description) {
taskData.Description = propsValue.description;
}
if (propsValue.priority) {
taskData.Priority = propsValue.priority;
}
if (propsValue.status) {
taskData.Status = propsValue.status;
}
if (
propsValue.tag &&
Array.isArray(propsValue.tag) &&
propsValue.tag.length > 0
) {
taskData.Tag = propsValue.tag.map((tagName) => ({ name: tagName }));
}
const payload = { data: [taskData] };
try {
const response = await biginApiService.createTask(
access_token,
api_domain,
payload
);
return response.data[0];
} catch (error) {
console.error('Error creating task:', error);
throw new Error(
error instanceof Error
? `Failed to create task: ${error.message}`
: 'Failed to create task due to an unknown error'
);
}
},
});

View File

@@ -0,0 +1,55 @@
import { biginAuth } from '../../index';
import { createAction, Property } from '@activepieces/pieces-framework';
import { biginApiService } from '../common/request';
export const searchCompanyRecord = createAction({
auth: biginAuth,
name: 'searchCompanyRecord',
displayName: 'Search Company Record',
description: 'Searches companies by full name (criteria) or word',
props: {
mode: Property.StaticDropdown({
displayName: 'Search Mode',
required: true,
defaultValue: 'criteria',
options: {
options: [
{ label: 'Criteria (full name)', value: 'criteria' },
{ label: 'Word', value: 'word' },
],
},
}),
companyName: Property.ShortText({
displayName: 'Search Term',
description: 'Company full name (criteria) or word',
required: true,
}),
},
async run({ auth, propsValue }) {
const { companyName, mode } = propsValue;
const { access_token, data } = auth;
const api_domain = data['api_domain'];
try {
const response = await biginApiService.searchRecords(
access_token,
api_domain,
'Accounts',
mode === 'word'
? { key: 'word', value: companyName }
: {
key: 'criteria',
value: `(Account_Name:equals:${companyName})OR(Account_Name:starts_with:${companyName})`,
}
);
return {
message: 'Company record search completed successfully',
data: response.data,
};
} catch (error: any) {
throw new Error(`Error searching company record: ${error.message}`);
}
},
});

View File

@@ -0,0 +1,77 @@
import { biginAuth } from '../../index';
import { createAction, Property } from '@activepieces/pieces-framework';
import { biginApiService } from '../common/request';
export const searchContactRecord = createAction({
auth: biginAuth,
name: 'searchContactRecord',
displayName: 'Search Contact Record',
description: 'Searches contacts by criteria, email, phone, or word',
props: {
mode: Property.StaticDropdown({
displayName: 'Search Mode',
description: 'Choose how to search Contacts',
required: true,
defaultValue: 'criteria',
options: {
options: [
{ label: 'Criteria (name/email/mobile)', value: 'criteria' },
{ label: 'Email', value: 'email' },
{ label: 'Phone', value: 'phone' },
{ label: 'Word', value: 'word' },
],
},
}),
searchTerm: Property.ShortText({
displayName: 'Search Term',
description: 'Text, email, phone, or word based on the selected mode',
required: true,
}),
},
async run({ auth, propsValue }) {
const { searchTerm, mode } = propsValue;
const { access_token, data } = auth;
const api_domain = data['api_domain'];
let queryKey = 'criteria';
let queryValue = '';
if (mode === 'email') {
queryKey = 'email';
queryValue = searchTerm;
} else if (mode === 'phone') {
queryKey = 'phone';
queryValue = searchTerm;
} else if (mode === 'word') {
queryKey = 'word';
queryValue = searchTerm;
} else {
queryValue = ['First_Name', 'Last_Name', 'Email', 'Mobile']
.flatMap((key) => [
`${key}:equals:${searchTerm}`,
`${key}:starts_with:${searchTerm}`,
])
.map((condition) => `(${condition})`)
.join('OR');
}
try {
const response = await biginApiService.searchRecords(
access_token,
api_domain,
'Contacts',
{
key: queryKey,
value: queryValue,
}
);
return {
message: 'Contact record search completed successfully',
data: response.data,
};
} catch (error: any) {
throw new Error(`Error searching contact record: ${error.message}`);
}
},
});

View File

@@ -0,0 +1,50 @@
import { biginAuth } from '../../index';
import { createAction, Property } from '@activepieces/pieces-framework';
import { biginApiService } from '../common/request';
export const searchPipelineRecord = createAction({
auth: biginAuth,
name: 'searchPipelineRecord',
displayName: 'Search Pipeline Record',
description: 'Searches deals by name via criteria or word',
props: {
mode: Property.StaticDropdown({
displayName: 'Search Mode',
required: true,
defaultValue: 'criteria',
options: {
options: [
{ label: 'Criteria (Deal Name)', value: 'criteria' },
{ label: 'Word', value: 'word' },
],
},
}),
dealName: Property.ShortText({
displayName: 'Search Term',
description: 'Deal Name (criteria) or word',
required: true,
}),
},
async run({ auth, propsValue }) {
const { dealName, mode } = propsValue;
const { access_token, data } = auth;
const api_domain = data['api_domain'];
try {
const response = await biginApiService.searchRecords(
access_token,
api_domain,
'Pipelines',
mode === 'word' ? { key: 'word', value: dealName } : { key: 'criteria', value: `(Deal_Name:equals:${dealName})OR(Deal_Name:starts_with:${dealName})` }
);
return {
message: 'Pipeline record search completed successfully',
data: response.data,
};
} catch (error: any) {
throw new Error(`Error searching pipeline record: ${error.message}`);
}
},
});

View File

@@ -0,0 +1,58 @@
import { biginAuth } from '../../index';
import { createAction, Property } from '@activepieces/pieces-framework';
import { biginApiService } from '../common/request';
export const searchProductRecord = createAction({
auth: biginAuth,
name: 'searchProductRecord',
displayName: 'Search Product Record',
description: 'Searches products by name/code via criteria or word',
props: {
mode: Property.StaticDropdown({
displayName: 'Search Mode',
required: true,
defaultValue: 'criteria',
options: {
options: [
{ label: 'Criteria (name/code)', value: 'criteria' },
{ label: 'Word', value: 'word' },
],
},
}),
searchTerm: Property.ShortText({
displayName: 'Search Term',
description: 'Product name/code (criteria) or word',
required: true,
}),
},
async run({ auth, propsValue }) {
const { searchTerm, mode } = propsValue;
const { access_token, data } = auth;
const api_domain = data['api_domain'];
const criteriaValue = ['Product_Name', 'Product_Code']
.flatMap((key) => [
`${key}:equals:${searchTerm}`,
`${key}:starts_with:${searchTerm}`,
])
.map((condition) => `(${condition})`)
.join('OR');
try {
const response = await biginApiService.searchRecords(
access_token,
api_domain,
'Products',
mode === 'word' ? { key: 'word', value: searchTerm } : { key: 'criteria', value: criteriaValue }
);
return {
message: 'Product record search completed successfully',
data: response.data,
};
} catch (error: any) {
throw new Error(`Error searching product record: ${error.message}`);
}
},
});

View File

@@ -0,0 +1,68 @@
import { biginAuth } from '../../index';
import { createAction, Property } from '@activepieces/pieces-framework';
import { biginApiService } from '../common/request';
export const searchUser = createAction({
auth: biginAuth,
name: 'searchUser',
displayName: 'Search User',
description: 'Locate users by email.',
props: {
email: Property.ShortText({
displayName: 'Email',
description: 'User email address (full or partial, case-insensitive match)',
required: true,
}),
type: Property.StaticDropdown({
displayName: 'User Type (optional)',
required: false,
options: {
options: [
{ label: 'All Users', value: 'AllUsers' },
{ label: 'Active Users', value: 'ActiveUsers' },
{ label: 'Deactive Users', value: 'DeactiveUsers' },
{ label: 'Confirmed Users', value: 'ConfirmedUsers' },
{ label: 'Not Confirmed Users', value: 'NotConfirmedUsers' },
{ label: 'Deleted Users', value: 'DeletedUsers' },
{ label: 'Active Confirmed Users', value: 'ActiveConfirmedUsers' },
{ label: 'Admin Users', value: 'AdminUsers' },
{ label: 'Active Confirmed Admins', value: 'ActiveConfirmedAdmins' },
{ label: 'Current User', value: 'CurrentUser' },
],
},
}),
page: Property.Number({
displayName: 'Page',
required: false,
description: 'Page index (default 1)',
}),
per_page: Property.Number({
displayName: 'Per Page',
required: false,
description: 'Records per page (max 200, default 200)',
}),
},
async run({ auth, propsValue }) {
const { access_token, data } = auth;
const api_domain = data['api_domain'];
const emailTerm = String(propsValue.email || '').toLowerCase();
const params: any = {};
if (propsValue.type) params.type = propsValue.type as string;
if (propsValue.page) params.page = Number(propsValue.page);
if (propsValue.per_page) params.per_page = Number(propsValue.per_page);
const resp = await biginApiService.fetchUsers(access_token, api_domain, params);
const users = Array.isArray(resp.users) ? resp.users : [];
const filtered = users.filter((u: any) => String(u.email || '').toLowerCase().includes(emailTerm));
return {
message: 'User search completed successfully',
count: filtered.length,
data: filtered,
};
},
});

View File

@@ -0,0 +1,233 @@
import { biginAuth } from '../../index';
import {
createAction,
InputPropertyMap,
Property,
} from '@activepieces/pieces-framework';
import { tagsDropdown, usersDropdown } from '../common/props';
import { biginApiService } from '../common/request';
import { handleDropdownError } from '../common/helpers';
export const updateCompany = createAction({
auth: biginAuth,
name: 'updateCompany',
displayName: 'Update Company',
description:
'Updates an existing Company and prepopulates its fields for editing.',
props: {
companyId: Property.Dropdown({
auth: biginAuth,
displayName: 'Select Company',
description: 'Choose a company to update',
required: true,
refreshers: ['auth'],
options: async (context: any) => {
if (!context.auth)
return handleDropdownError('Please connect your account first');
const response = await biginApiService.fetchCompanies(
context.auth.access_token,
context.auth.data['api_domain']
);
return {
options: response.data.map((company: any) => ({
label: company.Account_Name,
value: JSON.stringify(company),
})),
};
},
}),
owner: usersDropdown,
companyDetails: Property.DynamicProperties({
auth: biginAuth,
displayName: 'Company Details',
description: 'These fields will be prepopulated with company data',
refreshers: ['companyId', 'auth'],
required: true,
props: async ({ companyId, auth }: any): Promise<InputPropertyMap> => {
if (!companyId) return {};
const company = JSON.parse(companyId);
const { access_token, data } = auth;
const api_domain = data['api_domain'];
const [fieldsResp, usersResp] = await Promise.all([
biginApiService.fetchModuleFields(access_token, api_domain, 'Accounts'),
biginApiService.fetchUsers(access_token, api_domain),
]);
const usersOptions = (usersResp.users || []).map((u: any) => ({
label: `${u.first_name ?? ''} ${u.last_name ?? ''}`.trim(),
value: u.id,
}));
const props: InputPropertyMap = {};
const fields = (fieldsResp.fields || []) as any[];
for (const f of fields) {
const apiName = f.api_name as string;
if (f.read_only || f.field_read_only) continue;
if (!f.view_type || f.view_type.edit !== true) continue;
if (apiName === 'Tag' || apiName === 'id') continue;
let defaultValue: any = company[apiName] ?? undefined;
if (apiName === 'Owner') defaultValue = company.Owner?.id;
switch ((f.data_type as string)?.toLowerCase()) {
case 'picklist': {
const options = (f.pick_list_values || []).map((pl: any) => ({
label: pl.display_value,
value: pl.actual_value,
}));
props[apiName] = Property.StaticDropdown({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
options: { options },
});
break;
}
case 'multiselectpicklist': {
const options = (f.pick_list_values || []).map((pl: any) => ({
label: pl.display_value,
value: pl.actual_value,
}));
props[apiName] = Property.StaticMultiSelectDropdown({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
options: { options },
});
break;
}
case 'boolean': {
props[apiName] = Property.Checkbox({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue: Boolean(defaultValue),
});
break;
}
case 'date': {
props[apiName] = Property.ShortText({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
});
break;
}
case 'datetime': {
props[apiName] = Property.DateTime({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
});
break;
}
case 'integer':
case 'long':
case 'double':
case 'decimal':
case 'currency':
case 'percent': {
props[apiName] = Property.Number({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
});
break;
}
default: {
if (apiName === 'Owner') {
props[apiName] = Property.StaticDropdown({
displayName: 'Owner',
description: f.tooltip || undefined,
required: false,
defaultValue,
options: { options: usersOptions },
});
break;
}
if (apiName === 'Description') {
props[apiName] = Property.LongText({
displayName: 'Description',
description: f.tooltip || undefined,
required: false,
defaultValue,
});
break;
}
props[apiName] = Property.ShortText({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue: typeof defaultValue === 'string' ? defaultValue : undefined,
});
}
}
}
return props;
},
}),
tag: tagsDropdown('Accounts'),
},
async run(context) {
try {
const company = JSON.parse(context.propsValue.companyId);
const companyId = company.id;
const updates = context.propsValue.companyDetails as Record<string, any>;
const body: Record<string, any> = { id: companyId };
for (const [apiName, value] of Object.entries(updates || {})) {
if (
value === undefined ||
value === null ||
(typeof value === 'string' && value.trim() === '')
) {
continue;
}
if (apiName === 'Owner') {
body['Owner'] = { id: value };
} else if (apiName === 'Tag') {
body['Tag'] = (value as any[]).map((t: any) => ({ name: t }));
} else {
body[apiName] = value;
}
}
if (context.propsValue.owner) {
body['Owner'] = { id: context.propsValue.owner };
}
if (
context.propsValue.tag &&
Array.isArray(context.propsValue.tag) &&
context.propsValue.tag.length > 0
) {
body['Tag'] = context.propsValue.tag.map((t: any) => ({ name: t }));
}
const response = await biginApiService.updateCompany(
context.auth.access_token,
(context.auth as any).api_domain,
{ data: [body] }
);
return {
message: 'Company updated successfully',
data: response.data[0],
};
} catch (error: any) {
console.error('Error updating company:', error);
throw new Error(error);
}
},
});

View File

@@ -0,0 +1,259 @@
import { biginAuth } from '../../index';
import {
createAction,
Property,
InputPropertyMap,
PropertyContext,
} from '@activepieces/pieces-framework';
import { companyDropdown, tagsDropdown, usersDropdown } from '../common/props';
import { biginApiService } from '../common/request';
import { handleDropdownError } from '../common/helpers';
export const updateContact = createAction({
auth: biginAuth,
name: 'updateContact',
displayName: 'Update Contact',
description: 'Select and update an existing Contact record.',
props: {
contactId: Property.Dropdown({
auth: biginAuth,
displayName: 'Select Contact',
description: 'Choose a contact to update',
required: true,
refreshers: ['auth'],
options: async ({ auth }) => {
if (!auth) return handleDropdownError('Please connect first');
const resp = await biginApiService.fetchContacts(
auth.access_token,
auth.data['api_domain']
);
return {
options: resp.data.map((c: any) => ({
label: `${c.First_Name ?? ''} ${c.Last_Name}`.trim(),
value: JSON.stringify(c),
})),
};
},
}),
contactDetails: Property.DynamicProperties({
auth: biginAuth,
displayName: 'Contact Fields',
description: 'Edit any of these fields',
refreshers: ['contactId', 'auth'],
required: true,
props: async (
{ contactId, auth }: any,
): Promise<InputPropertyMap> => {
if (!contactId) return {};
const contact = JSON.parse(contactId);
const { access_token, data } = auth;
const api_domain = data['api_domain'];
const [fieldsResp, usersResp, companiesResp] = await Promise.all([
biginApiService.fetchModuleFields(access_token, api_domain, 'Contacts'),
biginApiService.fetchUsers(access_token, api_domain),
biginApiService.fetchCompanies(access_token, api_domain),
]);
const usersOptions = (usersResp.users || []).map((u: any) => ({
label: `${u.first_name ?? ''} ${u.last_name ?? ''}`.trim(),
value: u.id,
}));
const companyOptions = (companiesResp.data || []).map((c: any) => ({
label: c.Account_Name,
value: c.id,
}));
const props: InputPropertyMap = {};
const fields = (fieldsResp.fields || []) as any[];
for (const f of fields) {
const apiName = f.api_name as string;
if (f.read_only || f.field_read_only) continue;
if (!f.view_type || f.view_type.edit !== true) continue;
if (apiName === 'Tag') continue;
if (apiName === 'id') continue;
let defaultValue: any = contact[apiName] ?? undefined;
if (apiName === 'Owner') defaultValue = contact.Owner?.id;
if (apiName === 'Account_Name') defaultValue = contact.Account_Name?.id;
switch ((f.data_type as string)?.toLowerCase()) {
case 'picklist': {
const options = (f.pick_list_values || []).map((pl: any) => ({
label: pl.display_value,
value: pl.actual_value,
}));
props[apiName] = Property.StaticDropdown({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
options: { options },
});
break;
}
case 'multiselectpicklist': {
const options = (f.pick_list_values || []).map((pl: any) => ({
label: pl.display_value,
value: pl.actual_value,
}));
props[apiName] = Property.StaticMultiSelectDropdown({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
options: { options },
});
break;
}
case 'boolean': {
props[apiName] = Property.Checkbox({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue: Boolean(defaultValue),
});
break;
}
case 'date': {
props[apiName] = Property.ShortText({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
});
break;
}
case 'datetime': {
props[apiName] = Property.DateTime({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
});
break;
}
case 'integer':
case 'long':
case 'double':
case 'decimal':
case 'currency':
case 'percent': {
props[apiName] = Property.Number({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
});
break;
}
default: {
if (apiName === 'Owner') {
props[apiName] = Property.StaticDropdown({
displayName: 'Owner',
description: f.tooltip || undefined,
required: false,
defaultValue,
options: { options: usersOptions },
});
break;
}
if (apiName === 'Account_Name') {
props[apiName] = Property.StaticDropdown({
displayName: 'Company',
description: f.tooltip || undefined,
required: false,
defaultValue,
options: { options: companyOptions },
});
break;
}
if (apiName === 'Description') {
props[apiName] = Property.LongText({
displayName: 'Description',
description: f.tooltip || undefined,
required: false,
defaultValue,
});
break;
}
props[apiName] = Property.ShortText({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue: typeof defaultValue === 'string' ? defaultValue : undefined,
});
}
}
}
return props;
},
}),
accountName: companyDropdown,
tag: tagsDropdown('Contacts'),
},
async run(context) {
try {
const { contactDetails, contactId, accountName, tag } = context.propsValue;
const record: Record<string, any> = { id: JSON.parse(contactId).id };
if (contactDetails && typeof contactDetails === 'object') {
for (const [apiName, value] of Object.entries(contactDetails)) {
if (
value === undefined ||
value === null ||
(typeof value === 'string' && value.trim() === '') ||
(Array.isArray(value) && (value as any[]).length === 0)
) {
continue;
}
if (apiName === 'Owner' || apiName === 'Account_Name') {
record[apiName] = { id: value };
} else if (apiName === 'Tag') {
record['Tag'] = (value as any[]).map((t: any) => ({ name: t }));
} else {
record[apiName] = value;
}
}
}
if (accountName) {
record['Account_Name'] = { id: accountName };
}
if (tag && Array.isArray(tag) && tag.length > 0) {
record['Tag'] = tag.map((t: any) => ({ name: t }));
}
const payload = { data: [record] };
const resp = await biginApiService.updateContact(
context.auth.access_token,
context.auth.data['api_domain'],
payload
);
return {
message: 'Contact updated successfully',
data: resp.data[0],
};
} catch (error: any) {
console.error('Error updating contact:', error);
throw new Error(
error instanceof Error
? `Failed to update contact: ${error.message}`
: 'Failed to update contact due to an unknown error'
);
}
},
});

View File

@@ -0,0 +1,526 @@
import { biginAuth } from '../../index';
import { createAction, InputPropertyMap, Property } from '@activepieces/pieces-framework';
import { tagsDropdown, usersDropdown } from '../common/props';
import { API_ENDPOINTS } from '../common/constants';
import { biginApiService } from '../common/request';
import {
formatDateTime,
getSafeLabel,
handleDropdownError,
} from '../common/helpers';
export const updateEvent = createAction({
auth: biginAuth,
name: 'updateEvent',
displayName: 'Update Event',
description: 'Updates an existing event in Bigin',
props: {
eventId: Property.Dropdown({
auth: biginAuth,
displayName: 'Select Event',
description: 'Choose the event to update',
required: true,
refreshers: ['auth'],
options: async ({ auth }): Promise<any> => {
if (!auth)
return handleDropdownError('Please connect your account first');
const { access_token, data } = auth;
const api_domain = data['api_domain'];
try {
const response = await biginApiService.fetchEvents(
access_token,
api_domain
);
const events = response?.data || [];
return {
options: events.map((event: any) => ({
label: `${event.Event_Title} - ${event.Start_DateTime}`,
value: JSON.stringify(event),
})),
};
} catch (error) {
return handleDropdownError('Failed to fetch events');
}
},
}),
eventFields: Property.DynamicProperties({
auth: biginAuth,
displayName: 'Event Fields',
refreshers: ['auth', 'eventId'],
required: false,
props: async ({ eventId, auth }: any): Promise<InputPropertyMap> => {
if (!eventId) return {};
const event = JSON.parse(eventId);
const { access_token, data } = auth;
const api_domain = data['api_domain'];
const fieldsResp = await biginApiService.fetchModuleFields(
access_token,
api_domain,
'Events'
);
const props: InputPropertyMap = {};
for (const f of (fieldsResp.fields || []) as any[]) {
const apiName = f.api_name as string;
if (f.read_only || f.field_read_only) continue;
if (!f.view_type || f.view_type.edit !== true) continue;
if (
apiName === 'Tag' ||
apiName === 'id' ||
apiName === 'Owner' ||
apiName === 'Related_To' ||
apiName === '$related_module' ||
apiName === 'Recurring_Activity' ||
apiName === 'Remind_At' ||
apiName === 'Participants'
)
continue;
const defaultValue = event[apiName] ?? undefined;
switch ((f.data_type as string)?.toLowerCase()) {
case 'picklist': {
const options = (f.pick_list_values || []).map((pl: any) => ({
label: pl.display_value,
value: pl.actual_value,
}));
props[apiName] = Property.StaticDropdown({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
options: { options },
});
break;
}
case 'multiselectpicklist': {
const options = (f.pick_list_values || []).map((pl: any) => ({
label: pl.display_value,
value: pl.actual_value,
}));
props[apiName] = Property.StaticMultiSelectDropdown({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
options: { options },
});
break;
}
case 'boolean': {
props[apiName] = Property.Checkbox({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue: Boolean(defaultValue),
});
break;
}
case 'date': {
props[apiName] = Property.ShortText({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || 'Format: YYYY-MM-DD',
required: false,
defaultValue,
});
break;
}
case 'datetime': {
props[apiName] = Property.DateTime({
displayName: f.display_label || f.field_label || apiName,
description:
f.tooltip || 'Format: ISO 8601 (YYYY-MM-DDTHH:mm:ss±HH:mm)',
required: false,
defaultValue,
});
break;
}
case 'integer':
case 'long':
case 'double':
case 'decimal':
case 'currency':
case 'percent': {
props[apiName] = Property.Number({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
});
break;
}
default: {
if (apiName === 'Description') {
props[apiName] = Property.LongText({
displayName: 'Description',
required: false,
defaultValue,
});
break;
}
props[apiName] = Property.ShortText({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue: typeof defaultValue === 'string' ? defaultValue : undefined,
});
}
}
}
props['Participants'] = Property.Array({
displayName: 'Participants',
description: 'Add participants to the event',
required: false,
defaultValue: event.Participants || [],
properties: {
type: Property.StaticDropdown({
displayName: 'Participant Type',
required: true,
options: {
options: [
{ label: 'User', value: 'user' },
{ label: 'Email', value: 'email' },
{ label: 'Contact', value: 'contact' },
],
},
}),
participant: Property.ShortText({
displayName: 'Participant ID/Email',
description: 'User ID, email address, or contact ID based on type',
required: true,
}),
},
});
return props;
},
}),
enableRecurring: Property.Checkbox({
displayName: 'Make Event Recurring',
description: 'Make this event recurring',
required: false,
}),
recurringInfo: Property.DynamicProperties({
displayName: 'Recurring Info',
refreshers: ['enableRecurring'],
required: false,
auth: biginAuth,
props: (propsValue, ctx): any => {
if (propsValue['enableRecurring']) {
return {
freq: Property.StaticDropdown({
displayName: 'Frequency',
required: true,
options: {
options: [
{ label: 'Daily', value: 'DAILY' },
{ label: 'Weekly', value: 'WEEKLY' },
{ label: 'Monthly', value: 'MONTHLY' },
],
},
}),
interval: Property.Number({
displayName: 'Interval',
required: true,
description:
'Indicates the time gap between each event. The INTERVAL value range from 1 to 99. For example, an INTERVAL of 2 for a WEEKLY recurring event means that there will be a two-week gap between each event.',
defaultValue: 1,
}),
count: Property.Number({
displayName: 'Count',
required: true,
defaultValue: 1,
description:
'Indicates the number of events you want to create. THE COUNT value range from 1 to 99. For example, a COUNT of 3 creates three individual events.',
}),
byday: Property.StaticDropdown({
displayName: 'By Day',
required: false,
description:
'Indicates the day of the week the event repeats. The possible values are SU, MO, TU, WE, TH, FR, or SA. This is applicable only for weekly, and monthly events.',
options: {
options: [
{ label: 'Sunday', value: 'SU' },
{ label: 'Monday', value: 'MO' },
{ label: 'Tuesday', value: 'TU' },
{ label: 'Wednesday', value: 'WE' },
{ label: 'Thursday', value: 'TH' },
{ label: 'Friday', value: 'FR' },
{ label: 'Saturday', value: 'SA' },
],
},
}),
bymonthday: Property.Number({
displayName: 'By Month Day',
required: false,
description:
' Indicates the day of the month the event repeats. The BYMONTHDAY value range from 1 to 31. This is applicable only for weekly and monthly events.',
}),
bysetpos: Property.StaticDropdown({
displayName: 'By Set Position',
required: false,
description:
'Indicates the week of the month the event repeats. The possible values are 1 for the first week of the month, 2 for the second week of the month, 3 the for third week of the month, 4 for the fourth week of the month, or -1 for the last week of the month. This is applicable only for weekly and monthly events.',
options: {
options: [
{ label: 'First Week of the Month', value: '1' },
{ label: 'Second Week of the Month', value: '2' },
{ label: 'Third Week of the Month', value: '3' },
{ label: 'Fourth Week of the Month', value: '4' },
{ label: 'Last Week of the Month', value: '-1' },
],
},
}),
};
} else {
return {};
}
},
}),
enableReminder: Property.Checkbox({
displayName: 'Enable Reminder',
description: 'Enable reminder for this event',
required: false,
}),
reminderInfo: Property.DynamicProperties({
auth: biginAuth,
displayName: 'Reminder Information',
refreshers: ['enableReminder'],
required: false,
props: (propsValue, ctx): any => {
if (propsValue['enableReminder']) {
return {
reminderList: Property.Array({
displayName: 'Reminder List',
description:
'Add multiple reminders (e.g., "1 hour", "30 minutes")',
required: false,
properties: {
unit: Property.Number({
displayName: 'Time Value',
description: 'Number of time units (e.g., 1, 30)',
required: true,
}),
period: Property.StaticDropdown({
displayName: 'Time Period',
required: true,
options: {
options: [
{ label: 'Days', value: 'days' },
{ label: 'Weeks', value: 'weeks' },
],
},
}),
},
}),
};
} else {
return {};
}
},
}),
owner: usersDropdown,
relatedModule: Property.Dropdown({
auth: biginAuth,
displayName: 'Related Module',
description: 'Select the type of entity the event is related to',
required: false,
refreshers: ['auth'],
options: async () => ({
options: [
{ label: 'Contacts', value: 'Contacts' },
{ label: 'Pipelines', value: 'Pipelines' },
{ label: 'Companies', value: 'Companies' },
],
}),
}),
relatedTo: Property.Dropdown({
auth: biginAuth,
displayName: 'Related To',
description: 'Select the specific record the event is related to',
required: false,
refreshers: ['auth', 'relatedModule'],
options: async ({ auth, relatedModule }): Promise<any> => {
if (!auth)
return handleDropdownError('Please connect your account first');
if (!relatedModule) return { options: [] };
const { access_token, api_domain } = auth as any;
const fetchMap: Record<string, () => Promise<any>> = {
Contacts: () =>
biginApiService.fetchContacts(access_token, api_domain),
Pipelines: () =>
biginApiService.fetchPipelinesRecords(access_token, api_domain),
Companies: () =>
biginApiService.fetchCompanies(access_token, api_domain),
};
const fetchFn =
fetchMap[(relatedModule as keyof typeof fetchMap) || 'Contacts'];
const response = await fetchFn();
const records = response?.data || [];
return {
options: records.map((item: any) => ({
label: getSafeLabel(item),
value: item.id,
})),
};
},
}),
tag: tagsDropdown('Events'),
},
async run({ auth, propsValue }) {
const { access_token, api_domain } = auth as any;
const eventId = JSON.parse(propsValue.eventId as string).id;
const eventData: any = {
id: eventId,
};
const eventFields = propsValue.eventFields as Record<string, any> | undefined;
if (propsValue.owner) {
eventData.Owner = { id: propsValue.owner };
}
if (eventFields && typeof eventFields === 'object') {
for (const [apiName, value] of Object.entries(eventFields)) {
if (
value === undefined ||
value === null ||
(typeof value === 'string' && value.trim() === '') ||
(Array.isArray(value) && value.length === 0)
) {
continue;
}
if (apiName === 'Participants') {
eventData.Participants = (value as any[]).map((p: any) => ({
type: p.type,
participant: p.participant,
}));
continue;
}
if (apiName === 'Start_DateTime' || apiName === 'End_DateTime') {
eventData[apiName] = formatDateTime(value);
continue;
}
if (apiName === 'All_day') {
eventData.All_day = value;
continue;
}
(eventData as any)[apiName] = value;
}
}
if (propsValue.enableRecurring) {
const rruleParts: string[] = [];
const { recurringInfo } = propsValue as any;
if (recurringInfo.freq) {
rruleParts.push(`FREQ=${recurringInfo.freq}`);
}
if (recurringInfo.interval) {
rruleParts.push(`INTERVAL=${recurringInfo.interval}`);
}
if (recurringInfo.count) {
rruleParts.push(`COUNT=${recurringInfo.count}`);
}
if (recurringInfo.byday) {
rruleParts.push(`BYDAY=${recurringInfo.byday}`);
}
if (recurringInfo.bymonthday) {
rruleParts.push(`BYMONTHDAY=${recurringInfo.bymonthday}`);
}
if (recurringInfo.bysetpos) {
rruleParts.push(`BYSETPOS=${recurringInfo.bysetpos}`);
}
if (rruleParts.length > 0) {
eventData.Recurring_Activity = {
RRULE: rruleParts.join(';') + ';',
};
}
}
if (
propsValue.enableReminder &&
propsValue.reminderInfo?.['reminderList']
) {
const reminderList = propsValue.reminderInfo?.['reminderList'] as any[];
eventData.Remind_At = reminderList.map((reminder: any) => ({
unit: reminder.unit,
period: reminder.period,
}));
}
if (eventFields?.['venue']) {
eventData.Venue = eventFields['venue'];
}
if (propsValue.relatedTo && propsValue.relatedModule) {
const relatedModuleMap = {
Contacts: 'Contacts',
Pipelines: 'Deals',
Companies: 'Accounts',
};
const relatedModule =
relatedModuleMap[
propsValue.relatedModule as keyof typeof relatedModuleMap
];
eventData.Related_To = { id: propsValue.relatedTo };
eventData.$related_module = relatedModule;
}
if (
propsValue.tag &&
Array.isArray(propsValue.tag) &&
propsValue.tag.length > 0
) {
eventData.Tag = propsValue.tag.map((tagName) => ({ name: tagName }));
}
if (Object.keys(eventData).length === 0) {
throw new Error('No fields to update. Please modify at least one field.');
}
const payload = { data: [eventData] };
try {
const response = await biginApiService.updateEvent(
access_token,
api_domain,
payload
);
return response.data[0];
} catch (error) {
console.error('Error updating event:', error);
throw new Error(
error instanceof Error
? `Failed to update event: ${error.message}`
: 'Failed to update event due to an unknown error'
);
}
},
});

View File

@@ -0,0 +1,233 @@
import { biginAuth } from '../../index';
import { createAction, Property } from '@activepieces/pieces-framework';
import { companyDropdown, contactsDropdown, layoutsDropdown, multiContactsDropdown, pipelineRecordsDropdown, productsDropdown, SubPipelineorStageDropdown, tagsDropdown, usersDropdown } from '../common/props';
import { biginApiService } from '../common/request';
import { formatDateOnly } from '../common/helpers';
export const updatePipelineRecord = createAction({
auth: biginAuth,
name: 'updatePipeline',
displayName: 'Update Pipeline',
description: 'updates a pipeline record in Bigin',
props: {
pipelineRecordId: pipelineRecordsDropdown,
pipelineDetails: Property.DynamicProperties({
auth: biginAuth,
displayName: 'Pipeline Details',
description: 'These fields will be prepopulated with pipeline data',
refreshers: ['pipelineRecordId', 'auth'],
required: true,
props: async ({ pipelineRecordId, auth }: any) => {
const pipelineData = JSON.parse(pipelineRecordId);
const pipelineId = pipelineData.id;
if (!pipelineId) {
throw new Error('Pipeline ID is required to update the record');
}
const { access_token, api_domain } = auth as any;
const fieldsResp = await biginApiService.fetchModuleFields(
access_token,
api_domain,
'Pipelines'
);
const props: any = {};
for (const f of (fieldsResp.fields || []) as any[]) {
const apiName = f.api_name as string;
if (f.read_only || f.field_read_only) continue;
if (!f.view_type || f.view_type.edit !== true) continue;
if (apiName === 'Tag' || apiName === 'id' || apiName === 'Secondary_Contacts') continue;
const defaultValue = pipelineData[apiName] ?? undefined;
switch ((f.data_type as string)?.toLowerCase()) {
case 'picklist': {
const options = (f.pick_list_values || []).map((pl: any) => ({
label: pl.display_value,
value: pl.actual_value,
}));
props[apiName] = Property.StaticDropdown({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
options: { options },
});
break;
}
case 'multiselectpicklist': {
const options = (f.pick_list_values || []).map((pl: any) => ({
label: pl.display_value,
value: pl.actual_value,
}));
props[apiName] = Property.StaticMultiSelectDropdown({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
options: { options },
});
break;
}
case 'boolean': {
props[apiName] = Property.Checkbox({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue: Boolean(defaultValue),
});
break;
}
case 'date': {
props[apiName] = Property.ShortText({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || 'Format: YYYY-MM-DD',
required: false,
defaultValue,
});
break;
}
case 'datetime': {
props[apiName] = Property.DateTime({
displayName: f.display_label || f.field_label || apiName,
description:
f.tooltip || 'Format: ISO 8601 (YYYY-MM-DDTHH:mm:ss±HH:mm)',
required: false,
defaultValue,
});
break;
}
case 'integer':
case 'long':
case 'double':
case 'decimal':
case 'currency':
case 'percent': {
props[apiName] = Property.Number({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
});
break;
}
default: {
props[apiName] = Property.ShortText({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue: typeof defaultValue === 'string' ? defaultValue : undefined,
});
}
}
}
return props;
},
}),
pipeline: layoutsDropdown(
'Pipelines',
'Provide the Team Pipeline to which the pipeline record (deal) belongs',
'Pipelines'
),
subPipeline: SubPipelineorStageDropdown(
'Sub Pipeline',
'Pick one of the configured sub-pipelines',
'Sub Pipeline',
),
stage: SubPipelineorStageDropdown(
'Stage',
'Provide the current stage of the pipeline record (deal) within the Sub-Pipeline',
'Stage',
),
owner: usersDropdown,
accountName: companyDropdown,
contactName: contactsDropdown,
secondaryContacts: multiContactsDropdown,
associatedProducts: productsDropdown,
tag: tagsDropdown('Pipelines'),
},
async run({propsValue, auth}) {
const pipelineData = JSON.parse(propsValue.pipelineRecordId as string);
const payload: any = {
id: pipelineData.id,
};
if (propsValue.owner) payload.Owner = propsValue.owner;
if (propsValue.accountName)
payload.Account_Name = { id: propsValue.accountName };
if (propsValue.contactName)
payload.Contact_Name = { id: propsValue.contactName };
if (propsValue.subPipeline)
payload['Sub Pipeline'] = propsValue.subPipeline;
if (propsValue.stage) payload.Stage = propsValue.stage;
if (propsValue.pipelineDetails['dealName']) payload.Deal_Name = propsValue.pipelineDetails['dealName'];
if (propsValue.pipelineDetails['amount']) payload.Amount = propsValue.pipelineDetails['amount'];
if (propsValue.pipelineDetails['closingDate'])
payload.Closing_Date = formatDateOnly(
propsValue.pipelineDetails['closingDate']
);
if (propsValue.pipeline) {
const pipeline = JSON.parse(propsValue.pipeline as any);
payload.Pipeline = { id: pipeline.id, name: pipeline.name };
}
if (propsValue.associatedProducts) {
payload.Associated_Products = propsValue.associatedProducts.map(
(product: any) => {
const p = JSON.parse(product);
return { id: p.id, name: p.name };
}
);
}
if (propsValue.tag) {
payload.Tag = propsValue.tag.map((t: any) => ({ name: t }));
}
const {access_token, api_domain} = auth as any;
try {
const response = await biginApiService.updatePipelineRecord(
access_token,
api_domain,
{ data: [payload] }
);
if (
propsValue.secondaryContacts &&
Array.isArray(propsValue.secondaryContacts)
) {
const secondaries = (propsValue.secondaryContacts as any[])
.map((v: any) => String(v))
.filter((id: string) => id !== propsValue.contactName);
if (secondaries.length > 0) {
await biginApiService.updatePipelineRecord(
access_token,
api_domain,
{
data: [
{
id: pipelineData.id,
Secondary_Contacts: secondaries.map((id: string) => ({ id })),
},
],
}
);
}
}
return {
message: 'Pipeline record updated successfully',
pipelineRecord: response.data[0],
};
} catch (error: any) {
console.error('Error updating pipeline record:', error);
throw new Error(error);
}
},
});

View File

@@ -0,0 +1,497 @@
import { biginAuth } from '../../index';
import { createAction, InputPropertyMap, Property } from '@activepieces/pieces-framework';
import { tagsDropdown, usersDropdown } from '../common/props';
import { API_ENDPOINTS } from '../common/constants';
import { getSafeLabel, handleDropdownError } from '../common/helpers';
import { biginApiService } from '../common/request';
export const updateTask = createAction({
auth: biginAuth,
name: 'updateTask',
displayName: 'Update Task',
description: 'updates a Task',
props: {
taskId: Property.Dropdown({
displayName: 'Select Task',
description: 'Choose a task to update',
auth: biginAuth,
required: true,
refreshers: ['auth'],
options: async (context) => {
if (!context.auth)
return handleDropdownError('Please connect your account first');
const response = await biginApiService.fetchTasks(
context.auth.access_token,
context.auth.data['api_domain']
);
return {
options: response.data.map((task: any) => ({
label: task.Subject,
value: JSON.stringify(task),
})),
};
},
}),
owner: usersDropdown,
taskDetails: Property.DynamicProperties({
auth: biginAuth,
displayName: 'Task Details',
description: 'These fields will be prepopulated with task data',
refreshers: ['taskId', 'auth'],
required: true,
props: async ({ taskId, auth }): Promise<InputPropertyMap> => {
if (!taskId || !auth) return {};
const task = JSON.parse(taskId as string);
const { access_token, data } = auth;
const api_domain = data['api_domain'];
const fieldsResp = await biginApiService.fetchModuleFields(
access_token,
api_domain,
'Tasks'
);
const props: InputPropertyMap = {};
for (const f of (fieldsResp.fields || []) as any[]) {
const apiName = f.api_name as string;
if (f.read_only || f.field_read_only) continue;
if (!f.view_type || f.view_type.edit !== true) continue;
if (apiName === 'Tag' || apiName === 'id') continue;
const defaultValue = task[apiName] ?? undefined;
switch ((f.data_type as string)?.toLowerCase()) {
case 'picklist': {
const options = (f.pick_list_values || []).map((pl: any) => ({
label: pl.display_value,
value: pl.actual_value,
}));
props[apiName] = Property.StaticDropdown({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
options: { options },
});
break;
}
case 'multiselectpicklist': {
const options = (f.pick_list_values || []).map((pl: any) => ({
label: pl.display_value,
value: pl.actual_value,
}));
props[apiName] = Property.StaticMultiSelectDropdown({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
options: { options },
});
break;
}
case 'boolean': {
props[apiName] = Property.Checkbox({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue: Boolean(defaultValue),
});
break;
}
case 'date': {
props[apiName] = Property.ShortText({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || 'Format: YYYY-MM-DD',
required: false,
defaultValue,
});
break;
}
case 'datetime': {
props[apiName] = Property.DateTime({
displayName: f.display_label || f.field_label || apiName,
description:
f.tooltip || 'Format: ISO 8601 (YYYY-MM-DDTHH:mm:ss±HH:mm)',
required: false,
defaultValue,
});
break;
}
case 'integer':
case 'long':
case 'double':
case 'decimal':
case 'currency':
case 'percent': {
props[apiName] = Property.Number({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue,
});
break;
}
default: {
if (apiName === 'Description') {
props[apiName] = Property.LongText({
displayName: 'Description',
required: false,
defaultValue,
});
break;
}
props[apiName] = Property.ShortText({
displayName: f.display_label || f.field_label || apiName,
description: f.tooltip || undefined,
required: false,
defaultValue: typeof defaultValue === 'string' ? defaultValue : undefined,
});
}
}
}
return props;
},
}),
enableRecurring: Property.Checkbox({
displayName: 'Make Task Recurring',
description: 'make this task recurring',
required: false,
}),
recurringInfo: Property.DynamicProperties({
auth: biginAuth,
displayName: 'Recurring Info',
description:
'Please note: Due Date must be set above for recurring tasks',
refreshers: ['enableRecurring'],
required: false,
props: (propsValue, ctx): any => {
if (propsValue['enableRecurring']) {
return {
freq: Property.StaticDropdown({
displayName: 'Frequency',
required: true,
options: {
options: [
{ label: 'Daily', value: 'DAILY' },
{ label: 'Weekly', value: 'WEEKLY' },
{ label: 'Monthly', value: 'MONTHLY' },
],
},
}),
interval: Property.Number({
displayName: 'Interval',
required: true,
description:
'Indicates the time gap between each event. The INTERVAL value range from 1 to 99. For example, an INTERVAL of 2 for a WEEKLY recurring event means that there will be a two-week gap between each event.',
}),
count: Property.Number({
displayName: 'Count',
required: true,
description:
'Indicates the number of events you want to create. THE COUNT value range from 1 to 99. For example, a COUNT of 3 creates three individual events.',
}),
byday: Property.StaticDropdown({
displayName: 'By Day',
required: false,
description:
'Indicates the day of the week the event repeats. The possible values are SU, MO, TU, WE, TH, FR, or SA. This is applicable only for weekly, and monthly events.',
options: {
options: [
{ label: 'Sunday', value: 'SU' },
{ label: 'Monday', value: 'MO' },
{ label: 'Tuesday', value: 'TU' },
{ label: 'Wednesday', value: 'WE' },
{ label: 'Thursday', value: 'TH' },
{ label: 'Friday', value: 'FR' },
{ label: 'Saturday', value: 'SA' },
],
},
}),
bymonthday: Property.Number({
displayName: 'By Month Day',
required: false,
description:
' Indicates the day of the month the event repeats. The BYMONTHDAY value range from 1 to 31. This is applicable only for weekly and monthly events.',
}),
bysetpos: Property.StaticDropdown({
displayName: 'By Set Position',
required: false,
description:
'Indicates the week of the month the event repeats. The possible values are 1 for the first week of the month, 2 for the second week of the month, 3 the for third week of the month, 4 for the fourth week of the month, or -1 for the last week of the month. This is applicable only for weekly and monthly events.',
options: {
options: [
{ label: 'First Week of the Month', value: '1' },
{ label: 'Second Week of the Month', value: '2' },
{ label: 'Third Week of the Month', value: '3' },
{ label: 'Fourth Week of the Month', value: '4' },
{ label: 'Last Week of the Month', value: '-1' },
],
},
}),
};
} else {
return {};
}
},
}),
enableReminder: Property.Checkbox({
displayName: 'Enable Reminder',
description: 'Enable reminder for this task',
required: false,
}),
reminderInfo: Property.DynamicProperties({
auth: biginAuth,
displayName: 'Reminder Information',
refreshers: ['enableReminder'],
required: false,
props: (propsValue, ctx): any => {
if (propsValue['enableReminder']) {
return {
reminderAction: Property.StaticDropdown({
displayName: 'Reminder Action',
description: 'How the reminder should be shown',
required: false,
options: {
options: [
{ label: 'Email', value: 'EMAIL' },
{ label: 'Popup', value: 'POPUP' },
{ label: 'Email and Popup', value: 'EMAILANDPOPUP' },
],
},
}),
reminderType: Property.StaticDropdown({
displayName: 'Reminder Type',
description: 'When to trigger the reminder',
required: false,
options: {
options: [
{ label: 'Specific Date & Time', value: 'datetime' },
{ label: 'Days Before', value: 'days_before' },
{ label: 'Weeks Before', value: 'weeks_before' },
],
},
}),
reminderDateTime: Property.DateTime({
displayName: 'Reminder Date & Time',
description:
'Specific date and time for reminder (for non-recurring tasks)',
required: false,
}),
reminderDaysBefore: Property.Number({
displayName: 'Days Before',
description: 'Number of days before the task to send reminder',
required: false,
}),
reminderWeeksBefore: Property.Number({
displayName: 'Weeks Before',
description: 'Number of weeks before the task to send reminder',
required: false,
}),
reminderTime: Property.ShortText({
displayName: 'Reminder Time',
description:
'Time for reminder in HH:MM format (24-hour, for recurring tasks)',
required: false,
}),
};
} else {
return {};
}
},
}),
relatedModule: Property.Dropdown({
displayName: 'Related Module',
description:
'Select the type of entity the task is related to. Options: Contacts, Pipelines, Companies.',
required: false,
refreshers: ['auth'],
defaultValue: 'Contacts',
auth: biginAuth,
options: async () => ({
options: [
{ label: 'Contacts', value: 'Contacts' },
{ label: 'Pipelines', value: 'Pipelines' },
{ label: 'Companies', value: 'Companies' },
],
}),
}),
relatedTo: Property.Dropdown({
auth: biginAuth,
displayName: 'Related To',
description: 'Select the specific record the task is related to.',
required: false,
refreshers: ['auth', 'relatedModule'],
options: async ({ auth, relatedModule }): Promise<any> => {
if (!auth) return handleDropdownError('Please connect first');
if (!relatedModule) return { options: [] };
const { access_token, data } = auth;
const api_domain = data['api_domain'];
const fetchMap: Record<string, () => Promise<any>> = {
Contacts: () =>
biginApiService.fetchContacts(access_token, api_domain),
Pipelines: () =>
biginApiService.fetchPipelinesRecords(access_token, api_domain),
Companies: () =>
biginApiService.fetchCompanies(access_token, api_domain),
};
const fetchFn = fetchMap[relatedModule as keyof typeof fetchMap];
const response = await fetchFn();
const records = response?.data || [];
return {
options: records.map((item: any) => ({
label: getSafeLabel(item),
value: item.id,
})),
};
},
}),
tag: tagsDropdown('Tasks'),
},
async run({ auth, propsValue }) {
const { access_token, data } = auth;
const api_domain = data['api_domain'];
const taskId = JSON.parse(propsValue.taskId).id;
const taskDetails = propsValue.taskDetails as any;
const taskData: any = {
Subject: taskDetails.subject,
id: taskId,
};
if (taskDetails.owner) {
taskData.Owner = { id: taskDetails.owner };
}
if (taskDetails.dueDate) {
const dueDate = new Date(taskDetails.dueDate);
taskData.Due_Date = dueDate.toISOString().split('T')[0];
}
if (propsValue.enableRecurring && propsValue.recurringInfo) {
if (!taskDetails.dueDate) {
throw new Error('Due Date is required when creating recurring tasks');
}
const recurringInfo = propsValue.recurringInfo as any;
const rruleParts = [`FREQ=${recurringInfo.freq}`];
const startDate = new Date(taskDetails.dueDate);
rruleParts.push(`DTSTART=${startDate.toISOString().split('T')[0]}`);
if (recurringInfo.interval) {
rruleParts.push(`INTERVAL=${recurringInfo.interval}`);
}
if (recurringInfo.count) {
rruleParts.push(`COUNT=${recurringInfo.count}`);
}
if (recurringInfo.byday) {
rruleParts.push(`BYDAY=${recurringInfo.byday}`);
}
if (recurringInfo.bymonthday) {
rruleParts.push(`BYMONTHDAY=${recurringInfo.bymonthday}`);
}
if (recurringInfo.bysetpos) {
rruleParts.push(`BYSETPOS=${recurringInfo.bysetpos}`);
}
if (recurringInfo.until) {
rruleParts.push(`UNTIL=${recurringInfo.until}`);
}
taskData.Recurring_Activity = {
RRULE: rruleParts.join(';') + ';',
};
}
if (propsValue.enableReminder && propsValue.reminderInfo) {
const reminderInfo = propsValue.reminderInfo as any;
const reminderAction = reminderInfo.reminderAction || 'EMAIL';
let alarmValue = `ACTION=${reminderAction}`;
const reminderTime = reminderInfo.reminderTime || '09:00';
if (
propsValue.recurringInfo &&
reminderInfo.reminderType === 'days_before'
) {
const daysBefore = reminderInfo.reminderDaysBefore || 1;
alarmValue += `;TRIGGER=-P${daysBefore}D;TRIGGER_TIME=${reminderTime}`;
} else if (
propsValue.recurringInfo &&
reminderInfo.reminderType === 'weeks_before'
) {
const weeksBefore = reminderInfo.reminderWeeksBefore || 1;
alarmValue += `;TRIGGER=-P${weeksBefore}W;TRIGGER_TIME=${reminderTime}`;
} else if (reminderInfo.reminderDateTime) {
const reminderDate = new Date(reminderInfo.reminderDateTime);
alarmValue += `;TRIGGER=DATE-TIME:${reminderDate.toISOString()}`;
}
taskData.Remind_At = {
ALARM: alarmValue,
};
}
if (propsValue.relatedTo && propsValue.relatedModule) {
const relatedModuleMap = {
Contacts: 'Contacts',
Pipelines: 'Deals',
Companies: 'Accounts',
};
const relatedModule =
relatedModuleMap[
propsValue.relatedModule as keyof typeof relatedModuleMap
] || 'Contacts';
taskData.Related_To = { id: propsValue.relatedTo };
taskData.$related_module = relatedModule;
}
if (taskDetails.description) {
taskData.Description = taskDetails.description;
}
if (taskDetails.priority) {
taskData.Priority = taskDetails.priority;
}
if (taskDetails.status) {
taskData.Status = taskDetails.status;
}
if (
taskDetails.tag &&
Array.isArray(taskDetails.tag) &&
taskDetails.tag.length > 0
) {
taskData.Tag = taskDetails.tag.map((tagName: any) => ({ name: tagName }));
}
const payload = { data: [taskData] };
try {
const response = await biginApiService.updateTask(
access_token,
api_domain,
payload
);
return response.data[0];
} catch (error: any) {
console.error('Error updating task:', error);
throw new Error(error);
}
},
});

View File

@@ -0,0 +1,68 @@
export const DATA_CENTER_REGIONS = [
{
REGION: "US",
ACCOUNTS_DOMAIN: "https://accounts.zoho.com",
API_DOMAIN: "https://www.zohoapis.com",
LABEL: "United States (.com)"
},
{
REGION: "AU",
ACCOUNTS_DOMAIN: "https://accounts.zoho.com.au",
API_DOMAIN: "https://www.zohoapis.com.au",
LABEL: "Australia (.com.au)"
},
{
REGION: "EU",
ACCOUNTS_DOMAIN: "https://accounts.zoho.eu",
API_DOMAIN: "https://www.zohoapis.eu",
LABEL: "Europe (.eu)"
},
{
REGION: "IN",
ACCOUNTS_DOMAIN: "https://accounts.zoho.in",
API_DOMAIN: "https://www.zohoapis.in",
LABEL: "India (.in)"
},
{
REGION: "CN",
ACCOUNTS_DOMAIN: "https://accounts.zoho.com.cn",
API_DOMAIN: "https://www.zohoapis.com.cn",
LABEL: "China (.com.cn)"
},
{
REGION: "JP",
ACCOUNTS_DOMAIN: "https://accounts.zoho.jp",
API_DOMAIN: "https://www.zohoapis.jp",
LABEL: "Japan (.jp)"
},
{
REGION: "SA",
ACCOUNTS_DOMAIN: "https://accounts.zoho.sa",
API_DOMAIN: "https://www.zohoapis.sa",
LABEL: "Saudi Arabia (.sa)"
},
{
REGION: "CA",
ACCOUNTS_DOMAIN: "https://accounts.zohocloud.ca",
API_DOMAIN: "https://www.zohoapis.ca",
LABEL: "Canada (.ca)"
}
];
export const ZOHO_WEBHOOK_TOKEN = 'bigin_webhook_token';
export const API_ENDPOINTS = {
WEBHOOKS: `/actions/watch`,
USERS: `/users`,
COMPANIES: `/Accounts`,
PIPELINES: `/Pipelines`,
CONTACTS: `/Contacts`,
TASKS: `/Tasks`,
CALLS: `/Calls`,
EVENTS: `/Events`,
MODULES: `/settings/modules`,
LAYOUTS: `/settings/layouts`,
TAGS: `/settings/tags`,
PRODUCTS: `/Products`,
FIELDS: `/settings/fields`,
};

View File

@@ -0,0 +1,46 @@
import { DATA_CENTER_REGIONS } from "./constants";
export function handleDropdownError(msg: string) {
return {
disabled: true,
options: [],
placeholder: msg,
};
}
export function getSafeLabel(item: any): string {
if (item.First_Name || item.Last_Name) {
return `${item.First_Name ?? ''} ${item.Last_Name ?? ''}`.trim();
}
return (
item?.Deal_Name || item?.Pipeline_Name || item?.Account_Name || item?.id
);
}
export function formatDateTime(input: string | Date): string {
const date = new Date(input);
if (isNaN(date.getTime())) {
throw new Error('Invalid date provided');
}
return date.toISOString().replace(/\.\d{3}Z$/, '+00:00');
}
export function formatDateOnly(input: string | Date): string {
const date = new Date(input);
const pad = (n: number) => n.toString().padStart(2, '0');
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(
date.getDate()
)}`;
}
export function getZohoBiginAccountAuthorizationUrl(
region: (typeof DATA_CENTER_REGIONS)[number]['REGION']
) {
if (region === 'CN') {
return 'https://accounts.zoho.com.cn';
}
return 'https://accounts.zoho.com';
}

View File

@@ -0,0 +1,270 @@
import { Property } from "@activepieces/pieces-framework";
import { biginApiService } from "./request";
import { handleDropdownError } from "./helpers";
import { biginAuth } from "../..";
export const usersDropdown = Property.Dropdown({
auth: biginAuth,
displayName: 'Owner',
description: 'Select the owner to which the record will be assigned.',
required: false,
refreshers: ['auth'],
options: async ({ auth }: any) => {
if (!auth)
return handleDropdownError('Please connect your account first');
const { api_domain } = auth;
try {
const response = await biginApiService.fetchUsers(
auth.access_token,
api_domain
);
const users = Array.isArray(response?.users) ? response.users : [];
if (users.length === 0) {
return handleDropdownError('No users found');
}
const options = users.map((user: any) => {
const fullName =
(typeof user.full_name === 'string' && user.full_name.trim() !== ''
? user.full_name
: [user.first_name, user.last_name]
.filter((p: any) => typeof p === 'string' && p.trim() !== '')
.join(' ')) || user.email || user.id;
return {
label: fullName,
value: user.id,
};
});
return {
disabled: false,
options,
};
} catch (error) {
return handleDropdownError('Failed to load users');
}
},
});
export const companyDropdown = Property.Dropdown({
auth: biginAuth,
displayName: 'Company',
description:
'The ID of the company to which the record will be associated. If not provided, the record will not be associated with any company.',
required: false,
refreshers: ['auth'],
options: async ({ auth }: any) => {
if (!auth) return handleDropdownError('Please Connect your account first');
const resp = await biginApiService.fetchCompanies(
auth.access_token,
auth.api_domain
);
return {
options: resp.data.map((a: any) => ({
label: a.Account_Name,
value: a.id,
})),
};
},
});
export const contactsDropdown = Property.Dropdown({
auth: biginAuth,
displayName: 'Contacts',
description:
'The ID of the contact to which the record will be associated. If not provided, the record will not be associated with any contact.',
required: false,
refreshers: ['auth'],
options: async ({ auth }: any) => {
if (!auth) return handleDropdownError('Please Connect your account first');
const resp = await biginApiService.fetchContacts(
auth.access_token,
auth.api_domain
);
return {
options: resp.data.map((a: any) => ({
label: a.First_Name + ' ' + a.Last_Name,
value: a.id,
})),
};
},
});
export const multiContactsDropdown = Property.MultiSelectDropdown({
auth: biginAuth,
displayName: 'Secondary Contacts',
description:
'Provide a list of additional contacts associated with the record',
required: false,
refreshers: ['auth'],
options: async ({ auth }: any) => {
if (!auth) return handleDropdownError('Please Connect your account first');
const resp = await biginApiService.fetchContacts(
auth.access_token,
auth.api_domain
);
return {
options: resp.data.map((a: any) => ({
label: a.First_Name + ' ' + a.Last_Name,
value: a.id,
})),
};
},
});
export const pipelineRecordsDropdown = Property.Dropdown({
auth: biginAuth,
displayName: 'Pipeline Record',
description:
'Select a pipeline record',
required: false,
refreshers: ['auth'],
options: async ({ auth }: any) => {
if (!auth) return handleDropdownError('Please Connect your account first');
const resp = await biginApiService.fetchPipelinesRecords(
auth.access_token,
auth.api_domain
);
return {
options: resp.data.map((a: any) => ({
label: a.Deal_Name,
value: JSON.stringify(a),
})),
};
},
});
export const layoutsDropdown = (displayName: string, description: string, module_name: string) => Property.Dropdown({
auth: biginAuth,
displayName,
description,
required: false,
refreshers: ['auth'],
options: async ({ auth }: any) => {
if (!auth) return handleDropdownError('Please Connect your account first');
const resp = await biginApiService.fetchLayouts(
auth.access_token,
auth.api_domain,
module_name
);
return {
options: resp.layouts.map((a: any) => ({
label: a.name,
value: JSON.stringify(a),
})),
};
},
});
export const productsDropdown = Property.MultiSelectDropdown({
auth: biginAuth,
displayName: 'Associated Products',
description:
'Provide a list of products associated with the record',
required: false,
refreshers: ['auth'],
options: async ({ auth }: any) => {
if (!auth) return handleDropdownError('Please Connect your account first');
const resp = await biginApiService.fetchProducts(
auth.access_token,
auth.api_domain
);
if (!Array.isArray(resp.data) || resp.data.length === 0) {
return handleDropdownError('No products found. Please add products first.');
}
return {
options: resp.data.map((a: any) => ({
label: a.Product_Name,
value: JSON.stringify(a),
})),
};
},
});
export const tagsDropdown = (module: string, defaultValue?: string[]) => Property.MultiSelectDropdown({
auth: biginAuth,
displayName: 'Tags',
description: `Select tags to associate with this module, "${module}".`,
required: false,
refreshers: ['auth'],
defaultValue: defaultValue || [],
options: async ({ auth }: any) => {
if (!auth) return handleDropdownError('Please Connect your account first');
try {
const resp = await biginApiService.fetchTags(
auth.access_token,
auth.api_domain,
module
);
const tags = Array.isArray(resp?.tags) ? resp.tags : [];
if (tags.length === 0) {
return handleDropdownError('No tags found. Please add tags first.');
}
return {
options: tags.map((a: any) => ({
label: a.name,
value: a.name,
})),
};
} catch (e) {
return handleDropdownError('Failed to load tags');
}
},
});
export const SubPipelineorStageDropdown = (
displayName: string,
description: string,
field_label: string,
defaultValue?: string
) =>
Property.Dropdown({
auth: biginAuth,
displayName,
description,
required: true,
refreshers: ['auth', 'pipeline'],
defaultValue,
options: async ({ auth, pipeline }) => {
if (!auth)
return handleDropdownError('Please connect your account first');
if (!pipeline)
return handleDropdownError('Please select a Pipeline first');
const { access_token, api_domain } = auth as any;
const response = await biginApiService.fetchLayouts(
access_token,
api_domain,
'Pipelines'
);
const layouts = response?.layouts || [];
const parsedPipeline = JSON.parse(pipeline as string);
const layout = layouts.find((l: any) => l.id === parsedPipeline.id);
const PipelineInfo = layout.sections.find(
(s: any) => s.api_name === 'Pipeline Information'
);
const stageField = PipelineInfo?.fields.find(
(f: any) => f.field_label === field_label
);
return {
options: stageField.pick_list_values.map((pl: any) => ({
label: pl.display_value,
value: pl.actual_value,
})),
};
},
});

View File

@@ -0,0 +1,285 @@
import { HttpMethod, httpClient } from '@activepieces/pieces-common';
import { API_ENDPOINTS } from './constants';
async function fireHttpRequest({
method,
path,
body,
access_token
}: {
method: HttpMethod;
path: string;
access_token: string;
body?: unknown;
}) {
return await httpClient
.sendRequest({
method,
url: path,
headers: {
Accept: 'application/json',
Authorization: `Zoho-oauthtoken ${access_token}`,
'Content-Type': 'application/json',
},
body,
})
.then((res) => res.body)
.catch((err) => {
throw new Error(
`Error in request to ${path}: ${err.message || JSON.stringify(err)}`
);
});
}
export const biginApiService = {
createWebhook: async (
access_token: string,
payload: any,
api_domain: string
) => {
const res = await fireHttpRequest({
method: HttpMethod.POST,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.WEBHOOKS}`,
body: payload,
access_token,
});
return res;
},
deleteWebhook: async (
access_token: string,
api_domain: string,
channel_id: string
) => {
return fireHttpRequest({
method: HttpMethod.DELETE,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.WEBHOOKS}?channel_ids=${channel_id}`,
access_token,
});
},
fetchUsers: async (
access_token: string,
api_domain: string,
params?: { type?: string; page?: number; per_page?: number }
) => {
const qs = new URLSearchParams();
if (params?.type) qs.set('type', params.type);
if (params?.page) qs.set('page', String(params.page));
if (params?.per_page) qs.set('per_page', String(params.per_page));
const query = qs.toString();
return fireHttpRequest({
method: HttpMethod.GET,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.USERS}${query ? `?${query}` : ''}`,
access_token,
});
},
createCompany: async (
access_token: string,
api_domain: string,
body: any
) => {
return fireHttpRequest({
method: HttpMethod.POST,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.COMPANIES}`,
access_token,
body,
});
},
updateCompany: async (
access_token: string,
api_domain: string,
body: any
) => {
return fireHttpRequest({
method: HttpMethod.PUT,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.COMPANIES}`,
access_token,
body,
});
},
fetchCompanies: async (access_token: string, api_domain: string) => {
return fireHttpRequest({
method: HttpMethod.GET,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.COMPANIES}?fields=Owner,Account_Name,Phone,Website,Tag,Description,Billing_Street,Billing_State,Billing_Country,Billing_Code`,
access_token,
});
},
createContact: async (
access_token: string,
api_domain: string,
body: any
) => {
return fireHttpRequest({
method: HttpMethod.POST,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.CONTACTS}`,
access_token,
body,
});
},
updateContact: async (
access_token: string,
api_domain: string,
body: any
) => {
return fireHttpRequest({
method: HttpMethod.PUT,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.CONTACTS}`,
access_token,
body,
});
},
fetchTags: async (
access_token: string,
api_domain: string,
module: string
) => {
return fireHttpRequest({
method: HttpMethod.GET,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.TAGS}?module=${module}`,
access_token,
});
},
fetchContacts: async (access_token: string, api_domain: string) => {
return fireHttpRequest({
method: HttpMethod.GET,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.CONTACTS}?fields=First_Name,Last_Name,Title,Email,Mobile,Email_Opt_Out,Owner,Account_Name,Tag,Description,Mailing_Street,Mailing_City,Mailing_State,Mailing_Country,Mailing_Zip`,
access_token,
});
},
fetchPipelinesRecords: async (access_token: string, api_domain: string) => {
return fireHttpRequest({
method: HttpMethod.GET,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.PIPELINES}?fields=Deal_Name,Stage,Owner,Description,Contact_Name,Account_Name,Amount,Closing_Date,Sub_Pipeline,Tag`,
access_token,
});
},
createPipelineRecord: async (
access_token: string,
api_domain: string,
body: any
) => {
return fireHttpRequest({
method: HttpMethod.POST,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.PIPELINES}`,
access_token,
body,
});
},
updatePipelineRecord: async (
access_token: string,
api_domain: string,
body: any
) => {
return fireHttpRequest({
method: HttpMethod.PUT,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.PIPELINES}`,
access_token,
body,
});
},
fetchProducts: async (access_token: string, api_domain: string) => {
return fireHttpRequest({
method: HttpMethod.GET,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.PRODUCTS}?fields=Product_Name,Owner,Product_Code,Product_Category,Unit_Price,Description,Tag,Product_Active`,
access_token,
});
},
fetchTasks: async (access_token: string, api_domain: string) => {
return fireHttpRequest({
method: HttpMethod.GET,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.TASKS}?fields=Subject,Status,Owner,Due_Date,Description,Priority,Related_To,Tags,Remind_At,Recurring_Activity,$related_module`,
access_token,
});
},
createCall: async (access_token: string, api_domain: string, body: any) => {
return fireHttpRequest({
method: HttpMethod.POST,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.CALLS}`,
access_token,
body,
});
},
createEvent: async (access_token: string, api_domain: string, body: any) => {
return fireHttpRequest({
method: HttpMethod.POST,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.EVENTS}`,
access_token,
body,
});
},
fetchEvents: async (access_token: string, api_domain: string) => {
return fireHttpRequest({
method: HttpMethod.GET,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.EVENTS}?fields=Owner,Event_Title,Start_DateTime,End_DateTime,Description,Recurring_Activity,Participants,Related_To,Tag,Remind_At,$related_module,All_day,Venue`,
access_token,
});
},
updateEvent: async (access_token: string, api_domain: string, body: any) => {
return fireHttpRequest({
method: HttpMethod.PUT,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.EVENTS}`,
access_token,
body,
});
},
createTask: async (access_token: string, api_domain: string, body: any) => {
return fireHttpRequest({
method: HttpMethod.POST,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.TASKS}`,
access_token,
body,
});
},
updateTask: async (access_token: string, api_domain: string, body: any) => {
return fireHttpRequest({
method: HttpMethod.PUT,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.TASKS}`,
access_token,
body,
});
},
fetchModules: async (access_token: string, api_domain: string) => {
return fireHttpRequest({
method: HttpMethod.GET,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.MODULES}`,
access_token,
});
},
fetchLayouts: async (
access_token: string,
api_domain: string,
module_name: string
) => {
return fireHttpRequest({
method: HttpMethod.GET,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.LAYOUTS}?module=${module_name}`,
access_token,
});
},
fetchModuleFields: async (
access_token: string,
api_domain: string,
module_name: string
) => {
return fireHttpRequest({
method: HttpMethod.GET,
path: `${api_domain}/bigin/v2${API_ENDPOINTS.FIELDS}?module=${module_name}`,
access_token,
});
},
searchRecords: async (
access_token: string,
api_domain: string,
module_name: string,
query: {
key: string;
value: string;
}
) => {
return fireHttpRequest({
method: HttpMethod.GET,
path: `${api_domain}/bigin/v2/${module_name}/search?${encodeURIComponent(query.key)}=${encodeURIComponent(query.value)}`,
access_token,
});
}
};

View File

@@ -0,0 +1,66 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { ZOHO_WEBHOOK_TOKEN } from '../common/constants';
import { biginAuth } from '../../index';
import { biginApiService } from '../common/request';
const CACHE_KEY = 'bigin_company_updated_trigger';
export const companyUpdated = createTrigger({
auth: biginAuth,
name: 'companyUpdated',
displayName: 'Company Updated',
description: 'Triggers when a company record is updated',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
try {
const channel_id = Date.now().toString();
const { api_domain } = context.auth.data;
const webhookData = {
watch: [
{
channel_id,
events: ['Accounts.edit'],
notify_url: context.webhookUrl,
token: ZOHO_WEBHOOK_TOKEN,
},
],
};
await biginApiService.createWebhook(
context.auth.access_token,
webhookData,
api_domain
);
await context.store.put(CACHE_KEY, channel_id);
} catch (error) {
console.error('Failed to enable Zoho webhook');
}
},
async onDisable(context) {
const channel_id = (await context.store.get(CACHE_KEY)) as string;
if (!channel_id) return;
const { api_domain } = context.auth.data;
await biginApiService.deleteWebhook(
context.auth.access_token,
api_domain,
channel_id
);
await context.store.delete(CACHE_KEY);
},
async run(context) {
const { token } = context.payload.body as any;
if (token !== ZOHO_WEBHOOK_TOKEN) {
throw new Error('Invalid webhook token');
}
return [context.payload.body];
},
});

View File

@@ -0,0 +1,62 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { ZOHO_WEBHOOK_TOKEN } from '../common/constants';
import { biginAuth } from '../../index';
import { biginApiService } from '../common/request';
const CACHE_KEY = 'bigin_updated_contact_trigger';
export const contactUpdated = createTrigger({
auth: biginAuth,
name: 'contactUpdated',
displayName: 'Contact Updated',
description: 'Triggers when a contact is updated',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
try {
const channel_id = Date.now().toString();
const { api_domain } = context.auth.data;
const webhookData = {
watch: [
{
channel_id,
events: ['Contacts.edit'],
notify_url: context.webhookUrl,
token: ZOHO_WEBHOOK_TOKEN,
},
],
};
await biginApiService.createWebhook(context.auth.access_token, webhookData, api_domain)
await context.store.put(CACHE_KEY, channel_id);
} catch (error) {
console.error('Failed to enable Zoho webhook');
}
},
async onDisable(context) {
const channel_id = await context.store.get(CACHE_KEY) as string;
if (!channel_id) return;
const { api_domain } = context.auth.data;
await biginApiService.deleteWebhook(
context.auth.access_token,
api_domain,
channel_id
);
await context.store.delete(CACHE_KEY);
},
async run(context) {
const { token } = context.payload.body as any;
if (token !== ZOHO_WEBHOOK_TOKEN) {
throw new Error('Invalid webhook token');
}
return [context.payload.body];
},
});

View File

@@ -0,0 +1,66 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { ZOHO_WEBHOOK_TOKEN } from '../common/constants';
import { biginAuth } from '../../index';
import { biginApiService } from '../common/request';
const CACHE_KEY = 'bigin_new_call_created_trigger';
export const newCallCreated = createTrigger({
auth: biginAuth,
name: 'newCallCreated',
displayName: 'New Call Created',
description: 'Triggers when a new call log is created',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
try {
const channel_id = Date.now().toString();
const { api_domain } = context.auth.data;
const webhookData = {
watch: [
{
channel_id,
events: ['Calls.create'],
notify_url: context.webhookUrl,
token: ZOHO_WEBHOOK_TOKEN,
},
],
};
await biginApiService.createWebhook(
context.auth.access_token,
webhookData,
api_domain
);
await context.store.put(CACHE_KEY, channel_id);
} catch (error) {
console.error('Failed to enable Zoho webhook');
}
},
async onDisable(context) {
const channel_id = (await context.store.get(CACHE_KEY)) as string;
if (!channel_id) return;
const { api_domain } = context.auth.data;
await biginApiService.deleteWebhook(
context.auth.access_token,
api_domain,
channel_id
);
await context.store.delete(CACHE_KEY);
},
async run(context) {
const { token } = context.payload.body as any;
if (token !== ZOHO_WEBHOOK_TOKEN) {
throw new Error('Invalid webhook token');
}
return [context.payload.body];
},
});

View File

@@ -0,0 +1,66 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { ZOHO_WEBHOOK_TOKEN } from '../common/constants';
import { biginAuth } from '../../index';
import { biginApiService } from '../common/request';
const CACHE_KEY = 'bigin_new_company_created_trigger';
export const newCompanyCreated = createTrigger({
auth: biginAuth,
name: 'newCompanyCreated',
displayName: 'New Company Created',
description: 'Triggers when a new company record is created',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
try {
const channel_id = Date.now().toString();
const { api_domain } = context.auth.data;
const webhookData = {
watch: [
{
channel_id,
events: ['Accounts.create'],
notify_url: context.webhookUrl,
token: ZOHO_WEBHOOK_TOKEN,
},
],
};
await biginApiService.createWebhook(
context.auth.access_token,
webhookData,
api_domain
);
await context.store.put(CACHE_KEY, channel_id);
} catch (error) {
console.error('Failed to enable Zoho webhook');
}
},
async onDisable(context) {
const channel_id = (await context.store.get(CACHE_KEY)) as string;
if (!channel_id) return;
const { api_domain } = context.auth.data;
await biginApiService.deleteWebhook(
context.auth.access_token,
api_domain,
channel_id
);
await context.store.delete(CACHE_KEY);
},
async run(context) {
const { token } = context.payload.body as any;
if (token !== ZOHO_WEBHOOK_TOKEN) {
throw new Error('Invalid webhook token');
}
return [context.payload.body];
},
});

View File

@@ -0,0 +1,72 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { ZOHO_WEBHOOK_TOKEN } from '../common/constants';
import { biginAuth } from '../../index';
import { biginApiService } from '../common/request';
const CACHE_KEY = 'bigin_created_contact_trigger';
export const newContactCreated = createTrigger({
auth: biginAuth,
name: 'newContactCreated',
displayName: 'New Contact Created',
description: 'Triggers when a new contact is created',
props: {},
sampleData: {
server_time: 1754252081534,
query_params: {},
module: 'Contacts',
resource_uri: 'https://www.zohoapis.com/bigin/v1/Contacts',
ids: ['6913232000000583260'],
affected_fields: [],
operation: 'insert',
channel_id: '1722705400',
},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
try {
const channel_id = Date.now().toString();
const { api_domain } = context.auth.data;
const webhookData = {
watch: [
{
channel_id,
events: ['Contacts.create'],
notify_url: context.webhookUrl,
token: ZOHO_WEBHOOK_TOKEN,
},
],
};
await biginApiService.createWebhook(context.auth.access_token, webhookData, api_domain)
await context.store.put(CACHE_KEY, channel_id);
} catch (error) {
console.error('Failed to enable Zoho webhook');
}
},
async onDisable(context) {
const channel_id = await context.store.get(CACHE_KEY) as string;
if (!channel_id) return;
const { api_domain } = context.auth.data;
await biginApiService.deleteWebhook(
context.auth.access_token,
api_domain,
channel_id
);
await context.store.delete(CACHE_KEY);
},
async run(context) {
const { token } = context.payload.body as any;
if (token !== ZOHO_WEBHOOK_TOKEN) {
throw new Error('Invalid webhook token');
}
return [context.payload.body];
},
});

View File

@@ -0,0 +1,66 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { ZOHO_WEBHOOK_TOKEN } from '../common/constants';
import { biginAuth } from '../../index';
import { biginApiService } from '../common/request';
const CACHE_KEY = 'bigin_new_event_created_trigger';
export const newEventCreated = createTrigger({
auth: biginAuth,
name: 'newEventCreated',
displayName: 'New Event Created',
description: 'Triggers when a new event is created',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
try {
const channel_id = Date.now().toString();
const { api_domain } = context.auth.data;
const webhookData = {
watch: [
{
channel_id,
events: ['Events.create'],
notify_url: context.webhookUrl,
token: ZOHO_WEBHOOK_TOKEN,
},
],
};
await biginApiService.createWebhook(
context.auth.access_token,
webhookData,
api_domain
);
await context.store.put(CACHE_KEY, channel_id);
} catch (error) {
console.error('Failed to enable Zoho webhook');
}
},
async onDisable(context) {
const channel_id = (await context.store.get(CACHE_KEY)) as string;
if (!channel_id) return;
const { api_domain } = context.auth.data;
await biginApiService.deleteWebhook(
context.auth.access_token,
api_domain,
channel_id
);
await context.store.delete(CACHE_KEY);
},
async run(context) {
const { token } = context.payload.body as any;
if (token !== ZOHO_WEBHOOK_TOKEN) {
throw new Error('Invalid webhook token');
}
return [context.payload.body];
},
});

View File

@@ -0,0 +1,66 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { ZOHO_WEBHOOK_TOKEN } from '../common/constants';
import { biginAuth } from '../../index';
import { biginApiService } from '../common/request';
const CACHE_KEY = 'bigin_new_pipeline_record_created_trigger';
export const newPipelineRecordCreated = createTrigger({
auth: biginAuth,
name: 'newPipelineRecordCreated',
displayName: 'New Pipeline Record Created',
description: 'Triggers when a new pipeline record is created',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
try {
const channel_id = Date.now().toString();
const { api_domain } = context.auth.data;
const webhookData = {
watch: [
{
channel_id,
events: ['Pipelines.create'],
notify_url: context.webhookUrl,
token: ZOHO_WEBHOOK_TOKEN,
},
],
};
await biginApiService.createWebhook(
context.auth.access_token,
webhookData,
api_domain
);
await context.store.put(CACHE_KEY, channel_id);
} catch (error) {
console.error('Failed to enable Zoho webhook');
}
},
async onDisable(context) {
const channel_id = (await context.store.get(CACHE_KEY)) as string;
if (!channel_id) return;
const { api_domain } = context.auth.data;
await biginApiService.deleteWebhook(
context.auth.access_token,
api_domain,
channel_id
);
await context.store.delete(CACHE_KEY);
},
async run(context) {
const { token } = context.payload.body as any;
if (token !== ZOHO_WEBHOOK_TOKEN) {
throw new Error('Invalid webhook token');
}
return [context.payload.body];
},
});

View File

@@ -0,0 +1,66 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { ZOHO_WEBHOOK_TOKEN } from '../common/constants';
import { biginAuth } from '../../index';
import { biginApiService } from '../common/request';
const CACHE_KEY = 'bigin_new_task_created_trigger';
export const newTaskCreated = createTrigger({
auth: biginAuth,
name: 'newTaskCreated',
displayName: 'New Task Created',
description: 'Triggers when a new task is created',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
try {
const channel_id = Date.now().toString();
const { api_domain } = context.auth.data;
const webhookData = {
watch: [
{
channel_id,
events: ['Tasks.create'],
notify_url: context.webhookUrl,
token: ZOHO_WEBHOOK_TOKEN,
},
],
};
await biginApiService.createWebhook(
context.auth.access_token,
webhookData,
api_domain
);
await context.store.put(CACHE_KEY, channel_id);
} catch (error) {
console.error('Failed to enable Zoho webhook');
}
},
async onDisable(context) {
const channel_id = (await context.store.get(CACHE_KEY)) as string;
if (!channel_id) return;
const { api_domain } = context.auth.data;
await biginApiService.deleteWebhook(
context.auth.access_token,
api_domain,
channel_id
);
await context.store.delete(CACHE_KEY);
},
async run(context) {
const { token } = context.payload.body as any;
if (token !== ZOHO_WEBHOOK_TOKEN) {
throw new Error('Invalid webhook token');
}
return [context.payload.body];
},
});

View File

@@ -0,0 +1,66 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import { ZOHO_WEBHOOK_TOKEN } from '../common/constants';
import { biginAuth } from '../../index';
import { biginApiService } from '../common/request';
const CACHE_KEY = 'bigin_pipeline_record_updated_trigger';
export const pipelineRecordUpdated = createTrigger({
auth: biginAuth,
name: 'pipelineRecordUpdated',
displayName: 'Pipeline Record Updated',
description: 'Triggers when a pipeline record is updated',
props: {},
sampleData: {},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
try {
const channel_id = Date.now().toString();
const { api_domain } = context.auth.data;
const webhookData = {
watch: [
{
channel_id,
events: ['Pipelines.edit'],
notify_url: context.webhookUrl,
token: ZOHO_WEBHOOK_TOKEN,
},
],
};
await biginApiService.createWebhook(
context.auth.access_token,
webhookData,
api_domain
);
await context.store.put(CACHE_KEY, channel_id);
} catch (error) {
console.error('Failed to enable Zoho webhook');
}
},
async onDisable(context) {
const channel_id = (await context.store.get(CACHE_KEY)) as string;
if (!channel_id) return;
const { api_domain } = context.auth.data;
await biginApiService.deleteWebhook(
context.auth.access_token,
api_domain,
channel_id
);
await context.store.delete(CACHE_KEY);
},
async run(context) {
const { token } = context.payload.body as any;
if (token !== ZOHO_WEBHOOK_TOKEN) {
throw new Error('Invalid webhook token');
}
return [context.payload.body];
},
});

View File

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

View File

@@ -0,0 +1,9 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../../../dist/out-tsc",
"declaration": true,
"types": ["node"]
},
"include": ["src/**/*.ts"]
}