Add Activepieces integration for workflow automation
- Add Activepieces fork with SmoothSchedule custom piece - Create integrations app with Activepieces service layer - Add embed token endpoint for iframe integration - Create Automations page with embedded workflow builder - Add sidebar visibility fix for embed mode - Add list inactive customers endpoint to Public API - Include SmoothSchedule triggers: event created/updated/cancelled - Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"extends": [
|
||||
"../../../../.eslintrc.base.json"
|
||||
],
|
||||
"ignorePatterns": [
|
||||
"!**/*"
|
||||
],
|
||||
"overrides": [
|
||||
{
|
||||
"files": [
|
||||
"*.ts",
|
||||
"*.tsx",
|
||||
"*.js",
|
||||
"*.jsx"
|
||||
],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"*.ts",
|
||||
"*.tsx"
|
||||
],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": [
|
||||
"*.js",
|
||||
"*.jsx"
|
||||
],
|
||||
"rules": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
# pieces-front
|
||||
|
||||
This library was generated with [Nx](https://nx.dev).
|
||||
|
||||
## Building
|
||||
|
||||
Run `nx build pieces-front` to build the library.
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "@activepieces/piece-front",
|
||||
"version": "0.0.2",
|
||||
"type": "commonjs",
|
||||
"main": "./src/index.js",
|
||||
"types": "./src/index.d.ts",
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"name": "pieces-front",
|
||||
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
|
||||
"sourceRoot": "packages/pieces/community/front/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/front",
|
||||
"tsConfig": "packages/pieces/community/front/tsconfig.lib.json",
|
||||
"packageJson": "packages/pieces/community/front/package.json",
|
||||
"main": "packages/pieces/community/front/src/index.ts",
|
||||
"assets": [
|
||||
"packages/pieces/community/front/*.md",
|
||||
{
|
||||
"input": "packages/pieces/community/front/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/front",
|
||||
"command": "bun install --no-save --silent"
|
||||
},
|
||||
"dependsOn": [
|
||||
"^build"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
{
|
||||
"Your Front API token. You can create one from your Front settings under \"Developers\". Ensure the token has the necessary scopes.": "Ihr Front-API-Token. Sie können einen von Ihren Front-Einstellungen unter \"Entwickler\" erstellen. Stellen Sie sicher, dass das Token die notwendigen Bereiche hat.",
|
||||
"Add Comment": "Kommentar hinzufügen",
|
||||
"Add Contact Handle": "Kontakt hinzufügen",
|
||||
"Add Conversation Links": "Unterhaltslinks hinzufügen",
|
||||
"Add Conversation Tags": "Unterhaltung-Tags hinzufügen",
|
||||
"Assign/Unassign Conversation": "Konversation zuweisen/aufheben",
|
||||
"Create Account": "Konto erstellen",
|
||||
"Create Contact": "Kontakt erstellen",
|
||||
"Create Draft": "Entwurf erstellen",
|
||||
"Create Draft Reply": "Entwurf Antwort erstellen",
|
||||
"Create Link": "Link erstellen",
|
||||
"Find Account": "Konto finden",
|
||||
"Find Contact": "Kontakt finden",
|
||||
"Find Conversation": "Unterhaltung finden",
|
||||
"Remove Contact Handle": "Kontakt-Handle entfernen",
|
||||
"Remove Conversation Links": "Unterhaltslinks entfernen",
|
||||
"Send Message": "Nachricht senden",
|
||||
"Send Reply": "Antwort senden",
|
||||
"Update Account": "Konto aktualisieren",
|
||||
"Update Contact": "Kontakt aktualisieren",
|
||||
"Update Conversation": "Unterhaltung aktualisieren",
|
||||
"Update Link": "Link aktualisieren",
|
||||
"Add a comment (internal note) to a conversation in Front.": "Füge einen Kommentar (interne Notiz) zu einer Unterhaltung in Front hinzu.",
|
||||
"Add a handle (email, phone number, etc.) to an existing Contact.": "Fügen Sie einem bestehenden Kontakt einen Handle (E-Mail, Telefonnummer, etc.) hinzu.",
|
||||
"Link external references (URLs) to a conversation.": "Verknüpfen Sie externe Verweise (URLs) auf eine Unterhaltung.",
|
||||
"Add one or more tags to a conversation.": "Füge einem oder mehreren Tags zu einer Unterhaltung hinzu.",
|
||||
"Assign a conversation to a teammate or remove assignment.": "Weisen Sie einem Teamkollegen eine Unterhaltung oder entfernen Sie die Zuweisung.",
|
||||
"Create a new account in Front.": "Erstellen Sie ein neues Konto in Front.",
|
||||
"Create a new contact in Front.": "Erstellen Sie einen neuen Kontakt in Front.",
|
||||
"Create a draft message in Front.": "Erstellen Sie einen Entwurf Nachricht in der Front.",
|
||||
"Create a draft reply to an existing conversation (subject/quote etc.) without sending immediately.": "Erstellen Sie einen Entwurf einer Antwort auf eine bestehende Konversation (Betreff/Zitat etc.) ohne sofort zu senden.",
|
||||
"Create a Link in Front (name, external URL).": "Erstellen Sie einen Link in Front (Name, externe URL).",
|
||||
"List company accounts and optionally filter by email domain or external ID.": "Firmenkonten auflisten und wahlweise nach E-Mail-Domäne oder externer ID filtern.",
|
||||
"Look up a contact by handle (email, phone, etc.) or other identifying field.": "Suchen Sie einen Kontakt per Handle (E-Mail, Telefon, usw.) oder einem anderen Identifikationsfeld.",
|
||||
"Find a conversation by search filters such as subject, participants, tags, inbox, etc.": "Finden Sie ein Gespräch durch Suchfilter wie Thema, Teilnehmer, Tags, Posteingang, etc.",
|
||||
"Remove a handle (email, phone number, etc.) from an existing Contact.": "Entfernen Sie ein Handle (E-Mail, Telefonnummer, usw.) aus einem bestehenden Kontakt.",
|
||||
"Remove external links from a conversation in Front.": "Entferne externe Links von einer Unterhaltung in der Front.",
|
||||
"Send a new message (starts a conversation) with subject, recipients, body, attachments, tags, etc.": "Senden Sie eine neue Nachricht (beginnt eine Unterhaltung) mit dem Thema, Empfänger, Körper, Anhänge, Tags usw.",
|
||||
"Send a reply to a conversation in Front.": "Sende eine Antwort auf ein Gespräch in der Front.",
|
||||
"Update an existing account in Front.": "Aktualisiere ein bestehendes Konto in Front.",
|
||||
"Update an existing contact in Front.": "Aktualisiere einen bestehenden Kontakt in Front.",
|
||||
"Modify conversation properties: status, assignee, inbox, tags, etc.": "Konversationseigenschaften ändern: Status, Zuweiser, Posteingang, Tags, etc.",
|
||||
"Update the name or external URL of a Link in Front.": "Aktualisieren Sie den Namen oder die externe URL eines Links in der Front.",
|
||||
"Conversation ID": "Konversations-ID",
|
||||
"Teammate ID": "Teamkollege ID",
|
||||
"Comment Body": "Kommentar-Text",
|
||||
"Contact ID": "Kontakt-ID",
|
||||
"Handle Type": "Handle Typ",
|
||||
"Handle Value": "Handle Wert",
|
||||
"Link IDs": "Link IDs",
|
||||
"Tag IDs": "Tag-IDs",
|
||||
"Account Name": "Kontoname",
|
||||
"Description": "Beschreibung",
|
||||
"Domains": "Domänen",
|
||||
"External ID": "Externe ID",
|
||||
"Custom Fields": "Eigene Felder",
|
||||
"Name": "Name",
|
||||
"Handles": "Handles",
|
||||
"Avatar URL": "Avatar-URL",
|
||||
"Links": "Links",
|
||||
"Group Names": "Gruppennamen",
|
||||
"Contact Lists": "Kontaktlisten",
|
||||
"Channel ID": "Kanal-ID",
|
||||
"To": "An",
|
||||
"CC": "CC",
|
||||
"BCC": "BCC",
|
||||
"Subject": "Betreff",
|
||||
"Body": "Körper",
|
||||
"Attachments": "Anhänge",
|
||||
"Mode": "Modus",
|
||||
"Signature ID": "Signatur-ID",
|
||||
"Add Default Signature": "Standardsignatur hinzufügen",
|
||||
"Message Body": "Nachrichtentext",
|
||||
"External URL": "Externe URL",
|
||||
"Pattern": "Muster",
|
||||
"Email Domain": "E-Mail-Domäne",
|
||||
"Limit": "Limit",
|
||||
"Page Token": "Seiten-Token",
|
||||
"Sort By": "Sortieren nach",
|
||||
"Sort Order": "Sortierung",
|
||||
"Email": "E-Mail",
|
||||
"Phone": "Telefon",
|
||||
"Custom Query": "Eigene Abfrage",
|
||||
"Query": "Abfrage",
|
||||
"Handle": "Handle",
|
||||
"Source": "Quelle",
|
||||
"Delete Contact if Last Handle": "Kontakt löschen, wenn Letztes Handle",
|
||||
"Account ID": "Konto-ID",
|
||||
"Status": "Status",
|
||||
"Inbox ID": "Inbox ID",
|
||||
"Link ID": "Link ID",
|
||||
"Select the conversation": "Konversation auswählen",
|
||||
"Select the teammate": "Teamkollege auswählen",
|
||||
"The content of the comment.": "Der Inhalt des Kommentars.",
|
||||
"Select the contact": "Kontakt auswählen",
|
||||
"Type of handle to add.": "Typ des zu addierenden Handels.",
|
||||
"The value of the handle (e.g., email address, phone number).": "Der Wert des Handles (z.B. E-Mail-Adresse, Telefonnummer).",
|
||||
"Select one or more links": "Wählen Sie einen oder mehrere Links",
|
||||
"Select one or more tags": "Wählen Sie einen oder mehrere Tags",
|
||||
"The name of the account to create.": "Der Name des zu erstellenden Kontos.",
|
||||
"A description for the account.": "Eine Beschreibung für das Konto.",
|
||||
"List of domains associated with the account.": "Liste der dem Konto zugeordneten Domänen.",
|
||||
"An external identifier for the account.": "Ein externer Bezeichner für das Konto.",
|
||||
"Custom fields for this account, as a JSON object.": "Benutzerdefinierte Felder für dieses Konto, als JSON-Objekt.",
|
||||
"The name of the contact.": "Der Name des Kontakts.",
|
||||
"A description for the contact.": "Eine Beschreibung für den Kontakt.",
|
||||
"List of contact handles (e.g., email, phone).": "Liste der Kontakthandles (z.B. E-Mail, Telefon).",
|
||||
"URL of the contact’s avatar image.": "URL des Avatar-Bildes des Kontakts.",
|
||||
"List of URLs associated with the contact.": "Liste der dem Kontakt zugeordneten URLs.",
|
||||
"List of group names to associate with the contact.": "Liste der Gruppennamen, die dem Kontakt zugeordnet werden sollen.",
|
||||
"List of contact list names this contact belongs to. Front will create any that do not exist.": "Liste der Namen der Kontaktliste, zu denen dieser Kontakt gehört. Front wird alle anlegen, die nicht existieren.",
|
||||
"Custom fields for this contact, as a JSON object (e.g., {\"CRM ID\": \"12345\"}).": "Benutzerdefinierte Felder für diesen Kontakt, als JSON-Objekt (z.B. {\"CRM-ID\": \"12345\"}).",
|
||||
"Select the channel": "Kanal auswählen",
|
||||
"List of recipient handles (email addresses, etc.).": "Liste der Empfängerhandles (E-Mail-Adressen, etc.).",
|
||||
"List of CC recipient handles.": "Liste der CC-Empfängerhandles.",
|
||||
"List of BCC recipient handles.": "Liste der BCC-Empfängerhandlungen.",
|
||||
"The subject of the draft.": "Das Thema des Entwurfs.",
|
||||
"The body of the draft message.": "Der Wortlaut des Entwurfs.",
|
||||
"List of attachment URLs.": "Liste der Anhang-URLs.",
|
||||
"Mode of the draft reply": "Modus des Entwurfs der Antwort",
|
||||
"The ID of the signature to use for the draft reply (if applicable).": "Die ID der Unterschrift, die für den Antwortentwurf verwendet werden soll (falls zutreffend).",
|
||||
"Whether to append the default signature to the draft reply (if applicable).": "Gibt an, ob die Standardsignatur dem Entwurf der Antwort angefügt werden soll (falls zutreffend).",
|
||||
"The content of the draft reply.": "Der Inhalt des Antwortentwurfs.",
|
||||
"The subject of the draft reply (for email channels).": "Der Betreff des Entwurfs der Antwort (für E-Mail-Kanäle).",
|
||||
"The name of the link.": "Der Name des Links.",
|
||||
"The external URL for the link.": "Die externe URL für den Link.",
|
||||
"Optional pattern to match URLs (regex).": "Optionales Muster für URLs (Regex).",
|
||||
"Filter accounts by email domain ": "Konten nach E-Mail-Domain filtern ",
|
||||
"Filter accounts by external ID": "Konten nach externer ID filtern",
|
||||
"Maximum number of accounts to return (max 100).": "Maximale Anzahl der zurückzusenden Konten (max. 100).",
|
||||
"Token for pagination.": "Token für Seitenumbruch.",
|
||||
"Field used to sort the accounts.": "Feld zum Sortieren der Konten.",
|
||||
"Order by which results should be sorted.": "Reihenfolge nach der Ergebnisse sortiert werden sollen.",
|
||||
"Email address to search for.": "Zu suchende E-Mail-Adresse.",
|
||||
"Phone number to search for.": "Zu suchende Telefonnummer",
|
||||
"Custom Front query string (advanced).": "Eigener Front-Abfrage-String (fortgeschritten).",
|
||||
"Maximum number of contacts to return.": "Maximale Anzahl der zurückzugebenden Kontakte.",
|
||||
"Front query string (e.g. subject:\"Order\", tag_ids:tag_123, inbox_id:inb_456, etc.). See https://dev.frontapp.com/docs/search-1": "Front query string (z.B. subject:\"Bestellung\", tag_ids:tag_123, inbox_id:inb_456, etc.). Siehe https://dev.frontapp.com/docs/search-1",
|
||||
"Maximum number of conversations to return.": "Maximale Anzahl der zurückzugebenden Unterhaltungen.",
|
||||
"The handle to remove.": "Der Handle zu entfernen.",
|
||||
"The type of the handle to remove.": "Der Typ des zu entfernenden Handels.",
|
||||
"If true, the entire contact will be deleted if this is their last handle.": "Falls aktiviert, wird der gesamte Kontakt gelöscht, wenn dies ihr letzter Kontakt ist.",
|
||||
"List of external URLs to remove from the conversation.": "Liste der externen URLs, die aus der Unterhaltung entfernt werden sollen.",
|
||||
"The subject of the message.": "Der Gegenstand der Nachricht.",
|
||||
"The body of the message.": "Der Inhalt der Nachricht.",
|
||||
"The content of the reply message.": "Der Inhalt der Antwort-Nachricht.",
|
||||
"The subject of the reply (for email channels).": "Der Betreff der Antwort (für E-Mail-Kanäle).",
|
||||
"Select the account": "Wählen Sie das Konto",
|
||||
"The new name for the account.": "Der neue Name für das Konto.",
|
||||
"The new description for the account.": "Die neue Beschreibung für das Konto.",
|
||||
"Custom fields to add or update. Existing fields will be preserved.": "Benutzerdefinierte Felder, die hinzugefügt oder aktualisiert werden sollen. Vorhandene Felder werden beibehalten.",
|
||||
"The new name for the contact.": "Der neue Name für den Kontakt.",
|
||||
"A new description for the contact.": "Eine neue Beschreibung für den Kontakt.",
|
||||
"The new status for the conversation.": "Der neue Status für die Unterhaltung.",
|
||||
"Select the inbox": "Posteingang auswählen",
|
||||
"Select the link": "Link auswählen",
|
||||
"The new name for the link.": "Der neue Name für den Link.",
|
||||
"The new external URL for the link.": "Die neue externe URL für den Link.",
|
||||
"Twitter": "Twitter",
|
||||
"Facebook": "Facebook",
|
||||
"Intercom": "Intercom",
|
||||
"front_chat": "front_chat",
|
||||
"custom": "benutzerdefiniert",
|
||||
"Private": "Privat",
|
||||
"Shared": "Geteilt",
|
||||
"Created At": "Erstellt am",
|
||||
"Updated At": "Aktualisiert am",
|
||||
"Ascending": "Aufsteigend",
|
||||
"Descending": "Absteigend",
|
||||
"Front Chat": "Front-Chat",
|
||||
"Custom": "Eigene",
|
||||
"Open": "Öffnen",
|
||||
"Archived": "Archiviert",
|
||||
"Deleted": "Gelöscht",
|
||||
"New Comment": "Neuer Kommentar",
|
||||
"New Inbound Message": "Neue eingehende Nachricht",
|
||||
"New Outbound Message": "Neue ausgehende Nachricht",
|
||||
"New Tag Added to Message": "Neuer Tag zur Nachricht hinzugefügt",
|
||||
"New Conversation State Change": "Neue Konversationsstatus ändern",
|
||||
"Fires when a new comment is posted on a conversation in Front.": "Feuert ab, wenn ein neuer Kommentar auf eine Unterhaltung in Front veröffentlicht wird.",
|
||||
"Fires when a new message is received in a shared inbox.": "Feuert ab, wenn eine neue Nachricht in einem gemeinsamen Posteingang empfangen wird.",
|
||||
"Fires when a message is sent or replied to in Front.": "Feuert ab, wenn eine Nachricht in der Front gesendet oder beantwortet wird.",
|
||||
"Fires when a tag is applied to a conversation.": "Feuert ab, wenn ein Tag auf eine Unterhaltung angewendet wird.",
|
||||
"Triggers when a conversation changes to a specified state.": "Wird ausgelöst, wenn eine Unterhaltung in einen bestimmten Zustand wechselt.",
|
||||
"Desired State": "Gewünschter Status",
|
||||
"The ID of the inbox to monitor for new inbound messages.": "Die ID des Posteingangs, der auf neue eingehende Nachrichten überwacht werden soll.",
|
||||
"The state to trigger on (e.g., open, archived, deleted, assigned, etc.).": "Der zu startende Status (z.B. offen, archiviert, gelöscht, zugewiesen, etc.).",
|
||||
"Assigned": "Zugewiesen",
|
||||
"Unassigned": "Nicht zugeordnet"
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
{
|
||||
"Your Front API token. You can create one from your Front settings under \"Developers\". Ensure the token has the necessary scopes.": "Tu token de Front API. Puedes crear uno desde tu Front Settings bajo \"Developopers\". Asegúrate de que el token tiene los alcances necesarios.",
|
||||
"Add Comment": "Añadir comentario",
|
||||
"Add Contact Handle": "Añadir Manejo de Contacto",
|
||||
"Add Conversation Links": "Añadir enlaces de conversación",
|
||||
"Add Conversation Tags": "Añadir etiquetas de conversación",
|
||||
"Assign/Unassign Conversation": "Asignar/Desasignar conversación",
|
||||
"Create Account": "Crear cuenta",
|
||||
"Create Contact": "Crear contacto",
|
||||
"Create Draft": "Crear borrador",
|
||||
"Create Draft Reply": "Crear respuesta borrador",
|
||||
"Create Link": "Crear enlace",
|
||||
"Find Account": "Buscar cuenta",
|
||||
"Find Contact": "Encontrar contacto",
|
||||
"Find Conversation": "Encontrar conversación",
|
||||
"Remove Contact Handle": "Remover Manejo de Contacto",
|
||||
"Remove Conversation Links": "Eliminar enlaces de conversación",
|
||||
"Send Message": "Enviar mensaje",
|
||||
"Send Reply": "Enviar respuesta",
|
||||
"Update Account": "Actualizar cuenta",
|
||||
"Update Contact": "Actualizar contacto",
|
||||
"Update Conversation": "Actualizar conversación",
|
||||
"Update Link": "Actualizar enlace",
|
||||
"Add a comment (internal note) to a conversation in Front.": "Añade un comentario (nota interna) a una conversación en el frente.",
|
||||
"Add a handle (email, phone number, etc.) to an existing Contact.": "Añadir un nombre de usuario (correo electrónico, número de teléfono, etc.) a un contacto existente.",
|
||||
"Link external references (URLs) to a conversation.": "Enlazar referencias externas (URLs) a una conversación.",
|
||||
"Add one or more tags to a conversation.": "Añadir una o más etiquetas a una conversación.",
|
||||
"Assign a conversation to a teammate or remove assignment.": "Asignar una conversación a un compañero o eliminar la asignación.",
|
||||
"Create a new account in Front.": "Crear una nueva cuenta en el Front.",
|
||||
"Create a new contact in Front.": "Crear un nuevo contacto en el frente.",
|
||||
"Create a draft message in Front.": "Crear un borrador de mensaje en el frente.",
|
||||
"Create a draft reply to an existing conversation (subject/quote etc.) without sending immediately.": "Crear un borrador de respuesta a una conversación existente (tema/cita, etc.) sin enviar inmediatamente.",
|
||||
"Create a Link in Front (name, external URL).": "Crear un enlace en la parte frontal (nombre, URL externa).",
|
||||
"List company accounts and optionally filter by email domain or external ID.": "Listar las cuentas de la empresa y opcionalmente filtrar por dominio de correo electrónico o ID externa.",
|
||||
"Look up a contact by handle (email, phone, etc.) or other identifying field.": "Busque un contacto por correo electrónico (email, teléfono, etc.) u otro campo de identificación.",
|
||||
"Find a conversation by search filters such as subject, participants, tags, inbox, etc.": "Encuentra una conversación por filtros de búsqueda como tema, participantes, etiquetas, bandeja de entrada, etc.",
|
||||
"Remove a handle (email, phone number, etc.) from an existing Contact.": "Eliminar un identificador (correo electrónico, número de teléfono, etc.) de un contacto existente.",
|
||||
"Remove external links from a conversation in Front.": "Elimina enlaces externos de una conversación en el Front.",
|
||||
"Send a new message (starts a conversation) with subject, recipients, body, attachments, tags, etc.": "Enviar un nuevo mensaje (inicia una conversación) con temas, destinatarios, cuerpo, adjuntos, etiquetas, etc.",
|
||||
"Send a reply to a conversation in Front.": "Enviar una respuesta a una conversación en el frente.",
|
||||
"Update an existing account in Front.": "Actualizar una cuenta existente en el Front.",
|
||||
"Update an existing contact in Front.": "Actualizar un contacto existente en el Front.",
|
||||
"Modify conversation properties: status, assignee, inbox, tags, etc.": "Modificar propiedades de conversación: estado, asignado, entrada, etiquetas, etc.",
|
||||
"Update the name or external URL of a Link in Front.": "Actualizar el nombre o la URL externa de un Enlace en el Front.",
|
||||
"Conversation ID": "ID de conversación",
|
||||
"Teammate ID": "ID de compañero",
|
||||
"Comment Body": "Comentar cuerpo",
|
||||
"Contact ID": "ID de contacto",
|
||||
"Handle Type": "Tipo de Manejo",
|
||||
"Handle Value": "Valor del Manejo",
|
||||
"Link IDs": "Link IDs",
|
||||
"Tag IDs": "ID de etiqueta",
|
||||
"Account Name": "Nombre de cuenta",
|
||||
"Description": "Descripción",
|
||||
"Domains": "Dominios",
|
||||
"External ID": "ID Externo",
|
||||
"Custom Fields": "Campos personalizados",
|
||||
"Name": "Nombre",
|
||||
"Handles": "Handles",
|
||||
"Avatar URL": "URL del avatar",
|
||||
"Links": "Enlaces",
|
||||
"Group Names": "Nombres de grupo",
|
||||
"Contact Lists": "Listas de contactos",
|
||||
"Channel ID": "ID del canal",
|
||||
"To": "A",
|
||||
"CC": "CC",
|
||||
"BCC": "CCO",
|
||||
"Subject": "Asunto",
|
||||
"Body": "Cuerpo",
|
||||
"Attachments": "Adjuntos",
|
||||
"Mode": "Modo",
|
||||
"Signature ID": "Firma ID",
|
||||
"Add Default Signature": "Añadir firma predeterminada",
|
||||
"Message Body": "Cuerpo",
|
||||
"External URL": "URL externa",
|
||||
"Pattern": "Patrón",
|
||||
"Email Domain": "Dominio de Email",
|
||||
"Limit": "Límite",
|
||||
"Page Token": "Ficha de página",
|
||||
"Sort By": "Ordenar por",
|
||||
"Sort Order": "Ordenar",
|
||||
"Email": "E-mail",
|
||||
"Phone": "Teléfono",
|
||||
"Custom Query": "Consulta personalizada",
|
||||
"Query": "Consulta",
|
||||
"Handle": "Manejo",
|
||||
"Source": "Fuente",
|
||||
"Delete Contact if Last Handle": "Eliminar Contacto si el último Manejo",
|
||||
"Account ID": "ID de cuenta",
|
||||
"Status": "Estado",
|
||||
"Inbox ID": "Inbox ID",
|
||||
"Link ID": "Link ID",
|
||||
"Select the conversation": "Seleccione la conversación",
|
||||
"Select the teammate": "Seleccione el compañero",
|
||||
"The content of the comment.": "El contenido del comentario.",
|
||||
"Select the contact": "Seleccione el contacto",
|
||||
"Type of handle to add.": "Tipo de asa a añadir.",
|
||||
"The value of the handle (e.g., email address, phone number).": "El valor del identificador (por ejemplo, dirección de correo electrónico, número de teléfono).",
|
||||
"Select one or more links": "Seleccione uno o más enlaces",
|
||||
"Select one or more tags": "Seleccione una o más etiquetas",
|
||||
"The name of the account to create.": "El nombre de la cuenta a crear.",
|
||||
"A description for the account.": "Una descripción para la cuenta.",
|
||||
"List of domains associated with the account.": "Lista de dominios asociados con la cuenta.",
|
||||
"An external identifier for the account.": "Un identificador externo para la cuenta.",
|
||||
"Custom fields for this account, as a JSON object.": "Campos personalizados para esta cuenta, como objeto JSON.",
|
||||
"The name of the contact.": "El nombre del contacto.",
|
||||
"A description for the contact.": "Una descripción para el contacto.",
|
||||
"List of contact handles (e.g., email, phone).": "Lista de manejadores de contactos (por ejemplo, correo electrónico, teléfono).",
|
||||
"URL of the contact’s avatar image.": "URL de la imagen del avatar del contacto.",
|
||||
"List of URLs associated with the contact.": "Lista de URLs asociadas al contacto.",
|
||||
"List of group names to associate with the contact.": "Lista de nombres de grupo a asociar con el contacto.",
|
||||
"List of contact list names this contact belongs to. Front will create any that do not exist.": "Lista de nombres de lista de contactos a los que pertenece este contacto. Front creará cualquier que no existe.",
|
||||
"Custom fields for this contact, as a JSON object (e.g., {\"CRM ID\": \"12345\"}).": "Campos personalizados para este contacto, como un objeto JSON (por ejemplo, {\"CRM ID\": \"12345\"}).",
|
||||
"Select the channel": "Seleccione el canal",
|
||||
"List of recipient handles (email addresses, etc.).": "Lista de handles del destinatario (direcciones de correo electrónico, etc.).",
|
||||
"List of CC recipient handles.": "Lista del destinatario de CC maneja.",
|
||||
"List of BCC recipient handles.": "Lista del destinatario de BCC.",
|
||||
"The subject of the draft.": "El tema del borrador.",
|
||||
"The body of the draft message.": "El cuerpo del mensaje del borrador.",
|
||||
"List of attachment URLs.": "Lista de URLs adjuntas.",
|
||||
"Mode of the draft reply": "Modo del borrador de respuesta",
|
||||
"The ID of the signature to use for the draft reply (if applicable).": "El ID de la firma a utilizar para el borrador de respuesta (si corresponde).",
|
||||
"Whether to append the default signature to the draft reply (if applicable).": "Si añadir la firma por defecto al borrador de respuesta (si corresponde).",
|
||||
"The content of the draft reply.": "El contenido del proyecto responde.",
|
||||
"The subject of the draft reply (for email channels).": "El asunto del borrador de respuesta (para los canales de correo electrónico).",
|
||||
"The name of the link.": "El nombre del enlace.",
|
||||
"The external URL for the link.": "La URL externa para el enlace.",
|
||||
"Optional pattern to match URLs (regex).": "Patrón opcional para que coincida con URLs (regex).",
|
||||
"Filter accounts by email domain ": "Filtrar cuentas por dominio de correo ",
|
||||
"Filter accounts by external ID": "Filtrar cuentas por ID externa",
|
||||
"Maximum number of accounts to return (max 100).": "Número máximo de cuentas a devolver (máximo 100).",
|
||||
"Token for pagination.": "Token para la paginación.",
|
||||
"Field used to sort the accounts.": "Campo usado para ordenar las cuentas.",
|
||||
"Order by which results should be sorted.": "Orden por el que deben ordenarse los resultados.",
|
||||
"Email address to search for.": "Dirección de correo a buscar.",
|
||||
"Phone number to search for.": "Número de teléfono para buscar.",
|
||||
"Custom Front query string (advanced).": "Cadena de consulta frontal personalizada (avanzada).",
|
||||
"Maximum number of contacts to return.": "Número máximo de contactos a regresar.",
|
||||
"Front query string (e.g. subject:\"Order\", tag_ids:tag_123, inbox_id:inb_456, etc.). See https://dev.frontapp.com/docs/search-1": "Cadena de consulta frontal (por ejemplo: subject:\"Order\", tag_ids:tag_123, inbox_id:inb_456, etc.). Vea https://dev.frontapp.com/docs/search-1",
|
||||
"Maximum number of conversations to return.": "Número máximo de conversaciones a regresar.",
|
||||
"The handle to remove.": "El asa a eliminar.",
|
||||
"The type of the handle to remove.": "El tipo de asa a eliminar.",
|
||||
"If true, the entire contact will be deleted if this is their last handle.": "Si es verdadero, todo el contacto será borrado si este es su último manejador.",
|
||||
"List of external URLs to remove from the conversation.": "Lista de URLs externas a eliminar de la conversación.",
|
||||
"The subject of the message.": "El tema del mensaje.",
|
||||
"The body of the message.": "El cuerpo del mensaje.",
|
||||
"The content of the reply message.": "El contenido del mensaje de respuesta.",
|
||||
"The subject of the reply (for email channels).": "El asunto de la respuesta (para los canales de correo electrónico).",
|
||||
"Select the account": "Seleccione la cuenta",
|
||||
"The new name for the account.": "El nuevo nombre para la cuenta.",
|
||||
"The new description for the account.": "La nueva descripción para la cuenta.",
|
||||
"Custom fields to add or update. Existing fields will be preserved.": "Campos personalizados para añadir o actualizar. Los campos existentes se conservarán.",
|
||||
"The new name for the contact.": "El nuevo nombre para el contacto.",
|
||||
"A new description for the contact.": "Una nueva descripción para el contacto.",
|
||||
"The new status for the conversation.": "El nuevo estado de la conversación.",
|
||||
"Select the inbox": "Seleccione la bandeja de entrada",
|
||||
"Select the link": "Seleccione el enlace",
|
||||
"The new name for the link.": "El nuevo nombre para el enlace.",
|
||||
"The new external URL for the link.": "La nueva URL externa para el enlace.",
|
||||
"Twitter": "Twitter",
|
||||
"Facebook": "Facebook",
|
||||
"Intercom": "Intercom",
|
||||
"front_chat": "charla_frontal",
|
||||
"custom": "costumbre",
|
||||
"Private": "Privado",
|
||||
"Shared": "Compartido",
|
||||
"Created At": "Creado el",
|
||||
"Updated At": "Actualizado el",
|
||||
"Ascending": "Ascendiente",
|
||||
"Descending": "Descendiente",
|
||||
"Front Chat": "Chat frontal",
|
||||
"Custom": "Personalizado",
|
||||
"Open": "Abrir",
|
||||
"Archived": "Archivado",
|
||||
"Deleted": "Eliminado",
|
||||
"New Comment": "Nuevo comentario",
|
||||
"New Inbound Message": "Nuevo mensaje entrante",
|
||||
"New Outbound Message": "Nuevo mensaje saliente",
|
||||
"New Tag Added to Message": "Nueva etiqueta añadida al mensaje",
|
||||
"New Conversation State Change": "Nuevo cambio de estado de conversación",
|
||||
"Fires when a new comment is posted on a conversation in Front.": "Dispara cuando se publica un nuevo comentario en una conversación en el frente.",
|
||||
"Fires when a new message is received in a shared inbox.": "Dispara cuando un nuevo mensaje es recibido en una bandeja de entrada compartida.",
|
||||
"Fires when a message is sent or replied to in Front.": "Dispara cuando un mensaje es enviado o contestado en el frente.",
|
||||
"Fires when a tag is applied to a conversation.": "Dispara cuando se aplica una etiqueta a una conversación.",
|
||||
"Triggers when a conversation changes to a specified state.": "Dispara cuando una conversación cambia a un estado especificado.",
|
||||
"Desired State": "Estado deseado",
|
||||
"The ID of the inbox to monitor for new inbound messages.": "El ID de la bandeja de entrada para monitorizar nuevos mensajes entrantes.",
|
||||
"The state to trigger on (e.g., open, archived, deleted, assigned, etc.).": "El estado en el que se activará (por ejemplo, abierto, archivado, eliminado, asignado, etc.).",
|
||||
"Assigned": "Asignado",
|
||||
"Unassigned": "Sin asignar"
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
{
|
||||
"Your Front API token. You can create one from your Front settings under \"Developers\". Ensure the token has the necessary scopes.": "Votre jeton de l'API frontale. Vous pouvez en créer un à partir de vos paramètres frontaux sous \"Développeurs\". Assurez-vous que le jeton a les portées nécessaires.",
|
||||
"Add Comment": "Ajouter un commentaire",
|
||||
"Add Contact Handle": "Ajouter un identifiant de contact",
|
||||
"Add Conversation Links": "Ajouter des liens de conversation",
|
||||
"Add Conversation Tags": "Ajouter des mots clés de conversation",
|
||||
"Assign/Unassign Conversation": "Affecter/Annuler la conversation",
|
||||
"Create Account": "Créer un compte",
|
||||
"Create Contact": "Créer un contact",
|
||||
"Create Draft": "Créer un brouillon",
|
||||
"Create Draft Reply": "Créer un brouillon de réponse",
|
||||
"Create Link": "Créer un lien",
|
||||
"Find Account": "Trouver un compte",
|
||||
"Find Contact": "Trouver un contact",
|
||||
"Find Conversation": "Trouver une conversation",
|
||||
"Remove Contact Handle": "Supprimer le gestionnaire de contact",
|
||||
"Remove Conversation Links": "Supprimer les liens de conversation",
|
||||
"Send Message": "Envoyer un message",
|
||||
"Send Reply": "Envoyer la réponse",
|
||||
"Update Account": "Mettre à jour le compte",
|
||||
"Update Contact": "Mettre à jour le contact",
|
||||
"Update Conversation": "Mettre à jour la conversation",
|
||||
"Update Link": "Lien de mise à jour",
|
||||
"Add a comment (internal note) to a conversation in Front.": "Ajouter un commentaire (note interne) à une conversation au Front.",
|
||||
"Add a handle (email, phone number, etc.) to an existing Contact.": "Ajouter un identifiant (e-mail, numéro de téléphone, etc.) à un contact existant.",
|
||||
"Link external references (URLs) to a conversation.": "Lier des références externes (URLs) à une conversation.",
|
||||
"Add one or more tags to a conversation.": "Ajouter un ou plusieurs tags à une conversation.",
|
||||
"Assign a conversation to a teammate or remove assignment.": "Assigner une conversation à un coéquipier ou supprimer l'affectation.",
|
||||
"Create a new account in Front.": "Créer un nouveau compte Front.",
|
||||
"Create a new contact in Front.": "Créer un nouveau contact au front.",
|
||||
"Create a draft message in Front.": "Créer un brouillon de message au Front.",
|
||||
"Create a draft reply to an existing conversation (subject/quote etc.) without sending immediately.": "Créer une ébauche de réponse à une conversation existante (sujet/devis, etc.) sans envoyer immédiatement.",
|
||||
"Create a Link in Front (name, external URL).": "Créer un lien au premier plan (nom, URL externe).",
|
||||
"List company accounts and optionally filter by email domain or external ID.": "Lister les comptes de la société et éventuellement filtrer par domaine de messagerie ou ID externe.",
|
||||
"Look up a contact by handle (email, phone, etc.) or other identifying field.": "Recherchez un contact par adresse (courriel, téléphone, etc.) ou par autre champ d’identification.",
|
||||
"Find a conversation by search filters such as subject, participants, tags, inbox, etc.": "Trouver une conversation par des filtres de recherche tels que le sujet, les participants, les tags, la boîte de réception, etc.",
|
||||
"Remove a handle (email, phone number, etc.) from an existing Contact.": "Supprimer un identifiant (e-mail, numéro de téléphone, etc.) d'un contact existant.",
|
||||
"Remove external links from a conversation in Front.": "Supprimer les liens externes d'une conversation en front.",
|
||||
"Send a new message (starts a conversation) with subject, recipients, body, attachments, tags, etc.": "Envoyer un nouveau message (commence une conversation) avec le sujet, les destinataires, le corps, les pièces jointes, les tags, etc.",
|
||||
"Send a reply to a conversation in Front.": "Envoyer une réponse à une conversation en front.",
|
||||
"Update an existing account in Front.": "Mettre à jour un compte existant dans le front.",
|
||||
"Update an existing contact in Front.": "Mettre à jour un contact existant au front.",
|
||||
"Modify conversation properties: status, assignee, inbox, tags, etc.": "Modifier les propriétés de la conversation : statut, cessionnaire, boîte de réception, tags, etc.",
|
||||
"Update the name or external URL of a Link in Front.": "Mettre à jour le nom ou l'URL externe d'un lien dans le Front.",
|
||||
"Conversation ID": "ID de la conversation",
|
||||
"Teammate ID": "ID de coéquipier",
|
||||
"Comment Body": "Corps du commentaire",
|
||||
"Contact ID": "ID du contact",
|
||||
"Handle Type": "Type de poignée",
|
||||
"Handle Value": "Gérer la valeur",
|
||||
"Link IDs": "Link IDs",
|
||||
"Tag IDs": "ID du tag",
|
||||
"Account Name": "Nom du compte",
|
||||
"Description": "Libellé",
|
||||
"Domains": "Domaines",
|
||||
"External ID": "ID externe",
|
||||
"Custom Fields": "Champs personnalisés",
|
||||
"Name": "Nom",
|
||||
"Handles": "Handles",
|
||||
"Avatar URL": "URL de l'avatar",
|
||||
"Links": "Liens",
|
||||
"Group Names": "Noms des groupes",
|
||||
"Contact Lists": "Carnets d'adresses",
|
||||
"Channel ID": "ID du canal",
|
||||
"To": "À",
|
||||
"CC": "CC",
|
||||
"BCC": "Cci",
|
||||
"Subject": "Sujet",
|
||||
"Body": "Body",
|
||||
"Attachments": "Pièces jointes",
|
||||
"Mode": "Mode",
|
||||
"Signature ID": "ID de la signature",
|
||||
"Add Default Signature": "Ajouter une signature par défaut",
|
||||
"Message Body": "Corps du message",
|
||||
"External URL": "URL externe",
|
||||
"Pattern": "Schéma",
|
||||
"Email Domain": "Domaine des E-mails",
|
||||
"Limit": "Limite",
|
||||
"Page Token": "Jeton de la page",
|
||||
"Sort By": "Trier par",
|
||||
"Sort Order": "Ordre de tri",
|
||||
"Email": "Courriel",
|
||||
"Phone": "Téléphone",
|
||||
"Custom Query": "Requête personnalisée",
|
||||
"Query": "Requête",
|
||||
"Handle": "Poignée",
|
||||
"Source": "Source",
|
||||
"Delete Contact if Last Handle": "Supprimer le contact si dernier identifiant",
|
||||
"Account ID": "ID du compte client",
|
||||
"Status": "Statut",
|
||||
"Inbox ID": "Inbox ID",
|
||||
"Link ID": "Link ID",
|
||||
"Select the conversation": "Sélectionnez la conversation",
|
||||
"Select the teammate": "Sélectionnez le coéquipier",
|
||||
"The content of the comment.": "Le contenu du commentaire.",
|
||||
"Select the contact": "Sélectionnez le contact",
|
||||
"Type of handle to add.": "Type de handle à ajouter.",
|
||||
"The value of the handle (e.g., email address, phone number).": "La valeur de l'identifiant (par exemple, adresse e-mail, numéro de téléphone).",
|
||||
"Select one or more links": "Sélectionnez un ou plusieurs liens",
|
||||
"Select one or more tags": "Sélectionnez un ou plusieurs tags",
|
||||
"The name of the account to create.": "Le nom du compte à créer.",
|
||||
"A description for the account.": "Une description pour le compte.",
|
||||
"List of domains associated with the account.": "Liste des domaines associés au compte.",
|
||||
"An external identifier for the account.": "Un identifiant externe pour le compte.",
|
||||
"Custom fields for this account, as a JSON object.": "Champs personnalisés pour ce compte, en tant qu'objet JSON.",
|
||||
"The name of the contact.": "Le nom du contact.",
|
||||
"A description for the contact.": "Une description pour le contact.",
|
||||
"List of contact handles (e.g., email, phone).": "Liste des contacts (courriel, téléphone).",
|
||||
"URL of the contact’s avatar image.": "URL de l'image d'avatar du contact.",
|
||||
"List of URLs associated with the contact.": "Liste des URLs associées au contact.",
|
||||
"List of group names to associate with the contact.": "Liste des noms de groupes à associer avec le contact.",
|
||||
"List of contact list names this contact belongs to. Front will create any that do not exist.": "Liste des noms de la liste de contacts auxquels appartient ce contact. Le front va créer ceux qui n'existent pas.",
|
||||
"Custom fields for this contact, as a JSON object (e.g., {\"CRM ID\": \"12345\"}).": "Champs personnalisés pour ce contact, en tant qu'objet JSON (par exemple, {\"CRM ID\": \"12345\"}).",
|
||||
"Select the channel": "Sélectionnez le canal",
|
||||
"List of recipient handles (email addresses, etc.).": "Liste des destinataires (adresses e-mail, etc.).",
|
||||
"List of CC recipient handles.": "Liste des gestionnaires de destinataires CC.",
|
||||
"List of BCC recipient handles.": "Liste des gestionnaires de destinataires BCC.",
|
||||
"The subject of the draft.": "Le sujet du projet.",
|
||||
"The body of the draft message.": "Le corps du message brouillon.",
|
||||
"List of attachment URLs.": "Liste des URL des pièces jointes.",
|
||||
"Mode of the draft reply": "Mode de la réponse du brouillon",
|
||||
"The ID of the signature to use for the draft reply (if applicable).": "L'ID de la signature à utiliser pour le brouillon de réponse (le cas échéant).",
|
||||
"Whether to append the default signature to the draft reply (if applicable).": "S'il faut ajouter la signature par défaut à la réponse brouillon (le cas échéant).",
|
||||
"The content of the draft reply.": "Le contenu du projet de réponse.",
|
||||
"The subject of the draft reply (for email channels).": "Le sujet de la réponse du brouillon (pour les canaux de messagerie).",
|
||||
"The name of the link.": "Le nom du lien.",
|
||||
"The external URL for the link.": "L'URL externe du lien.",
|
||||
"Optional pattern to match URLs (regex).": "Modèle optionnel pour faire correspondre les URLs (regex).",
|
||||
"Filter accounts by email domain ": "Filtrer les comptes par domaine de messagerie ",
|
||||
"Filter accounts by external ID": "Filtrer les comptes par ID externe",
|
||||
"Maximum number of accounts to return (max 100).": "Nombre maximum de comptes à retourner (max 100).",
|
||||
"Token for pagination.": "Jeton pour la pagination.",
|
||||
"Field used to sort the accounts.": "Champ utilisé pour trier les comptes.",
|
||||
"Order by which results should be sorted.": "Ordre par lequel les résultats doivent être triés.",
|
||||
"Email address to search for.": "Adresse e-mail à rechercher.",
|
||||
"Phone number to search for.": "Numéro de téléphone à rechercher.",
|
||||
"Custom Front query string (advanced).": "Chaîne de requête frontale personnalisée (avancée).",
|
||||
"Maximum number of contacts to return.": "Nombre maximum de contacts à renvoyer.",
|
||||
"Front query string (e.g. subject:\"Order\", tag_ids:tag_123, inbox_id:inb_456, etc.). See https://dev.frontapp.com/docs/search-1": "Chaîne de requête frontale (ex. subject:\"Order\", tag_ids:tag_123, inbox_id:inb_456, etc.). Voir https://dev.frontapp.com/docs/search-1",
|
||||
"Maximum number of conversations to return.": "Nombre maximum de conversations à renvoyer.",
|
||||
"The handle to remove.": "La poignée à supprimer.",
|
||||
"The type of the handle to remove.": "Le type de la poignée à supprimer.",
|
||||
"If true, the entire contact will be deleted if this is their last handle.": "Si vrai, l'ensemble du contact sera supprimé si c'est leur dernier identifiant.",
|
||||
"List of external URLs to remove from the conversation.": "Liste des URL externes à supprimer de la conversation.",
|
||||
"The subject of the message.": "Le sujet du message.",
|
||||
"The body of the message.": "Le corps du message.",
|
||||
"The content of the reply message.": "Le contenu du message de réponse.",
|
||||
"The subject of the reply (for email channels).": "Le sujet de la réponse (pour les canaux de messagerie).",
|
||||
"Select the account": "Sélectionnez le compte",
|
||||
"The new name for the account.": "Le nouveau nom pour le compte.",
|
||||
"The new description for the account.": "La nouvelle description du compte.",
|
||||
"Custom fields to add or update. Existing fields will be preserved.": "Champs personnalisés à ajouter ou à mettre à jour. Les champs existants seront préservés.",
|
||||
"The new name for the contact.": "Le nouveau nom pour le contact.",
|
||||
"A new description for the contact.": "Une nouvelle description pour le contact.",
|
||||
"The new status for the conversation.": "Le nouveau statut de la conversation.",
|
||||
"Select the inbox": "Sélectionnez la boîte de réception",
|
||||
"Select the link": "Sélectionnez le lien",
|
||||
"The new name for the link.": "Le nouveau nom du lien.",
|
||||
"The new external URL for the link.": "La nouvelle URL externe pour le lien.",
|
||||
"Twitter": "Twitter",
|
||||
"Facebook": "Facebook",
|
||||
"Intercom": "Intercom",
|
||||
"front_chat": "chat frontal",
|
||||
"custom": "personnalisé",
|
||||
"Private": "Privé",
|
||||
"Shared": "Partagé",
|
||||
"Created At": "Créé le",
|
||||
"Updated At": "Mis à jour le",
|
||||
"Ascending": "Ascendant",
|
||||
"Descending": "Descendant",
|
||||
"Front Chat": "Chat frontal",
|
||||
"Custom": "Personnalisé",
|
||||
"Open": "Ouvert",
|
||||
"Archived": "Archivé",
|
||||
"Deleted": "Supprimé",
|
||||
"New Comment": "Nouveau commentaire",
|
||||
"New Inbound Message": "Nouveau message entrant",
|
||||
"New Outbound Message": "Nouveau message sortant",
|
||||
"New Tag Added to Message": "Nouveau tag ajouté au message",
|
||||
"New Conversation State Change": "Nouveau changement d'état de la conversation",
|
||||
"Fires when a new comment is posted on a conversation in Front.": "Se déclenche lorsqu'un nouveau commentaire est posté sur une conversation en front.",
|
||||
"Fires when a new message is received in a shared inbox.": "Déclenche lorsqu'un nouveau message est reçu dans une boîte de réception partagée.",
|
||||
"Fires when a message is sent or replied to in Front.": "Se déclenche lorsqu'un message est envoyé ou répondu au front.",
|
||||
"Fires when a tag is applied to a conversation.": "Tire quand un tag est appliqué à une conversation.",
|
||||
"Triggers when a conversation changes to a specified state.": "Déclenche lorsqu'une conversation passe à un état spécifié.",
|
||||
"Desired State": "État désiré",
|
||||
"The ID of the inbox to monitor for new inbound messages.": "L'ID de la boîte de réception à surveiller pour les nouveaux messages entrants.",
|
||||
"The state to trigger on (e.g., open, archived, deleted, assigned, etc.).": "L'état sur lequel se déclencher (par exemple, ouvert, archivé, supprimé, assigné, etc.).",
|
||||
"Assigned": "Assigné",
|
||||
"Unassigned": "Non assigné"
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
{
|
||||
"Your Front API token. You can create one from your Front settings under \"Developers\". Ensure the token has the necessary scopes.": "フロントAPIトークン 「開発者」のフロント設定から、フロントAPIトークンを作成できます。トークンに必要なスコープがあることを確認してください。",
|
||||
"Add Comment": "コメントを追加",
|
||||
"Add Contact Handle": "連絡先ハンドルを追加",
|
||||
"Add Conversation Links": "会話リンクを追加",
|
||||
"Add Conversation Tags": "会話タグを追加",
|
||||
"Assign/Unassign Conversation": "会話の割り当て/解除",
|
||||
"Create Account": "アカウントを作成",
|
||||
"Create Contact": "連絡先を作成",
|
||||
"Create Draft": "下書きを作成",
|
||||
"Create Draft Reply": "ドラフトの返信を作成",
|
||||
"Create Link": "リンクを作成",
|
||||
"Find Account": "アカウントを検索",
|
||||
"Find Contact": "連絡先を探す",
|
||||
"Find Conversation": "会話を検索",
|
||||
"Remove Contact Handle": "連絡先ハンドルを削除",
|
||||
"Remove Conversation Links": "会話リンクを削除",
|
||||
"Send Message": "メッセージを送信",
|
||||
"Send Reply": "返信を送信",
|
||||
"Update Account": "アカウントを更新",
|
||||
"Update Contact": "連絡先を更新",
|
||||
"Update Conversation": "会話を更新",
|
||||
"Update Link": "リンクを更新",
|
||||
"Add a comment (internal note) to a conversation in Front.": "フロントで会話にコメント(内部メモ)を追加します。",
|
||||
"Add a handle (email, phone number, etc.) to an existing Contact.": "既存の取引先責任者(メール、電話番号など)に取引先責任者を追加します。",
|
||||
"Link external references (URLs) to a conversation.": "外部参照(URL)を会話にリンクします。",
|
||||
"Add one or more tags to a conversation.": "1 つ以上のタグを会話に追加します。",
|
||||
"Assign a conversation to a teammate or remove assignment.": "会話をチームメイトに割り当てるか、課題を削除します。",
|
||||
"Create a new account in Front.": "フロントで新しいアカウントを作成します。",
|
||||
"Create a new contact in Front.": "フロントで新しい連絡先を作成します。",
|
||||
"Create a draft message in Front.": "フロントで下書きメッセージを作成します。",
|
||||
"Create a draft reply to an existing conversation (subject/quote etc.) without sending immediately.": "すぐに送信せずに、既存の会話(件名/見積もりなど)へのドラフト返信を作成します。",
|
||||
"Create a Link in Front (name, external URL).": "フロントにリンク(名前、外部 URL )を作成します。",
|
||||
"List company accounts and optionally filter by email domain or external ID.": "会社アカウントを一覧表示し、必要に応じてメールドメインまたは外部 ID でフィルタリングします。",
|
||||
"Look up a contact by handle (email, phone, etc.) or other identifying field.": "担当者(メール、電話など)やその他の識別フィールドで連絡先を検索します。",
|
||||
"Find a conversation by search filters such as subject, participants, tags, inbox, etc.": "件名、参加者、タグ、受信トレイなどの検索フィルタで会話を検索します。",
|
||||
"Remove a handle (email, phone number, etc.) from an existing Contact.": "既存の連絡先からハンドル(メール、電話番号など)を削除します。",
|
||||
"Remove external links from a conversation in Front.": "フロントの会話から外部リンクを削除します。",
|
||||
"Send a new message (starts a conversation) with subject, recipients, body, attachments, tags, etc.": "件名、受信者、本文、添付ファイル、タグなどの新しいメッセージを送信します。",
|
||||
"Send a reply to a conversation in Front.": "フロントで会話に返信を送信します。",
|
||||
"Update an existing account in Front.": "フロントで既存のアカウントを更新します。",
|
||||
"Update an existing contact in Front.": "フロントで既存の連絡先を更新します。",
|
||||
"Modify conversation properties: status, assignee, inbox, tags, etc.": "会話プロパティの変更:ステータス、担当者、受信トレイ、タグなど。",
|
||||
"Update the name or external URL of a Link in Front.": "フロントでリンクの名前または外部URLを更新します。",
|
||||
"Conversation ID": "会話ID",
|
||||
"Teammate ID": "チームメイトID",
|
||||
"Comment Body": "コメント本文",
|
||||
"Contact ID": "連絡先ID",
|
||||
"Handle Type": "ハンドルの種類",
|
||||
"Handle Value": "ハンドル値",
|
||||
"Link IDs": "Link IDs",
|
||||
"Tag IDs": "タグID",
|
||||
"Account Name": "口座名",
|
||||
"Description": "説明",
|
||||
"Domains": "ドメイン",
|
||||
"External ID": "外部 ID",
|
||||
"Custom Fields": "カスタムフィールド",
|
||||
"Name": "Name",
|
||||
"Handles": "Handles",
|
||||
"Avatar URL": "アバター URL",
|
||||
"Links": "リンク",
|
||||
"Group Names": "グループ名",
|
||||
"Contact Lists": "連絡先リスト",
|
||||
"Channel ID": "チャンネル ID",
|
||||
"To": "終了日",
|
||||
"CC": "CC",
|
||||
"BCC": "BCC",
|
||||
"Subject": "件名",
|
||||
"Body": "本文",
|
||||
"Attachments": "添付ファイル",
|
||||
"Mode": "モード",
|
||||
"Signature ID": "署名 ID",
|
||||
"Add Default Signature": "デフォルトの署名を追加",
|
||||
"Message Body": "メッセージ本文",
|
||||
"External URL": "外部 URL",
|
||||
"Pattern": "パターン",
|
||||
"Email Domain": "メールドメイン",
|
||||
"Limit": "制限",
|
||||
"Page Token": "ページ トークン",
|
||||
"Sort By": "並び替え",
|
||||
"Sort Order": "並び順",
|
||||
"Email": "Eメールアドレス",
|
||||
"Phone": "電話番号",
|
||||
"Custom Query": "カスタムクエリ",
|
||||
"Query": "クエリ",
|
||||
"Handle": "取扱先",
|
||||
"Source": "ソース",
|
||||
"Delete Contact if Last Handle": "最後に処理した場合に連絡先を削除",
|
||||
"Account ID": "アカウントID",
|
||||
"Status": "Status",
|
||||
"Inbox ID": "Inbox ID",
|
||||
"Link ID": "Link ID",
|
||||
"Select the conversation": "会話を選択",
|
||||
"Select the teammate": "チームメイトを選択",
|
||||
"The content of the comment.": "コメントの内容.",
|
||||
"Select the contact": "連絡先を選択",
|
||||
"Type of handle to add.": "追加するハンドルのタイプ。",
|
||||
"The value of the handle (e.g., email address, phone number).": "ハンドルの値 (例: 電子メールアドレス、電話番号)。",
|
||||
"Select one or more links": "1つ以上のリンクを選択してください",
|
||||
"Select one or more tags": "1つ以上のタグを選択してください",
|
||||
"The name of the account to create.": "作成するアカウントの名前",
|
||||
"A description for the account.": "アカウントの説明",
|
||||
"List of domains associated with the account.": "アカウントに関連付けられているドメインのリストです。",
|
||||
"An external identifier for the account.": "口座の外部識別子。",
|
||||
"Custom fields for this account, as a JSON object.": "このアカウントのカスタムフィールドを JSON オブジェクトとして使用します。",
|
||||
"The name of the contact.": "連絡先の名前",
|
||||
"A description for the contact.": "連絡先の説明",
|
||||
"List of contact handles (e.g., email, phone).": "連絡先ハンドルの一覧(例:電子メール、電話)。",
|
||||
"URL of the contact’s avatar image.": "連絡先のアバター画像のURL。",
|
||||
"List of URLs associated with the contact.": "連絡先に関連付けられているURLの一覧",
|
||||
"List of group names to associate with the contact.": "連絡先に関連付けるグループ名の一覧です。",
|
||||
"List of contact list names this contact belongs to. Front will create any that do not exist.": "この連絡先が属する連絡先リストの一覧です。Front は存在しない連絡先を作成します。",
|
||||
"Custom fields for this contact, as a JSON object (e.g., {\"CRM ID\": \"12345\"}).": "この連絡先のカスタムフィールドは、JSON オブジェクトとして使用されます (例: {\"CRM ID\": \"12345\"})。",
|
||||
"Select the channel": "チャンネルを選択",
|
||||
"List of recipient handles (email addresses, etc.).": "受信者のハンドルのリスト (メールアドレスなど)。",
|
||||
"List of CC recipient handles.": "CC受信者ハンドルの一覧です。",
|
||||
"List of BCC recipient handles.": "BCC受信者ハンドルのリスト。",
|
||||
"The subject of the draft.": "草案の件名。",
|
||||
"The body of the draft message.": "下書きメッセージの本文。",
|
||||
"List of attachment URLs.": "添付ファイル URL の一覧です。",
|
||||
"Mode of the draft reply": "下書き返信のモード",
|
||||
"The ID of the signature to use for the draft reply (if applicable).": "ドラフト返信に使用する署名の ID (該当する場合)。",
|
||||
"Whether to append the default signature to the draft reply (if applicable).": "デフォルトの署名をドラフト返信に追加するかどうか(該当する場合)。",
|
||||
"The content of the draft reply.": "下書き返信の内容。",
|
||||
"The subject of the draft reply (for email channels).": "下書き返信の件名 (Eメールチャンネル用)",
|
||||
"The name of the link.": "リンクの名前",
|
||||
"The external URL for the link.": "リンクの外部 URL",
|
||||
"Optional pattern to match URLs (regex).": "URLに一致するオプションのパターン(正規表現)。",
|
||||
"Filter accounts by email domain ": "メールドメインでアカウントをフィルター ",
|
||||
"Filter accounts by external ID": "外部 ID でアカウントをフィルター",
|
||||
"Maximum number of accounts to return (max 100).": "返品するアカウントの最大数(最大100)",
|
||||
"Token for pagination.": "ページネーション用のトークン",
|
||||
"Field used to sort the accounts.": "口座の並べ替えに使用される項目。",
|
||||
"Order by which results should be sorted.": "結果を並べ替える順序です。",
|
||||
"Email address to search for.": "検索するメールアドレス。",
|
||||
"Phone number to search for.": "検索する電話番号",
|
||||
"Custom Front query string (advanced).": "カスタムフロントクエリ文字列(高度)",
|
||||
"Maximum number of contacts to return.": "返す連絡先の最大数。",
|
||||
"Front query string (e.g. subject:\"Order\", tag_ids:tag_123, inbox_id:inb_456, etc.). See https://dev.frontapp.com/docs/search-1": "フロントクエリ文字列 (例: subject:\"Order\", tag_ids:tag_123, inbox_id:inb_456, etc.)。https://dev.frontapp.com/docs/search-1",
|
||||
"Maximum number of conversations to return.": "返信する会話の最大数。",
|
||||
"The handle to remove.": "削除するハンドル。",
|
||||
"The type of the handle to remove.": "削除するハンドルのタイプ。",
|
||||
"If true, the entire contact will be deleted if this is their last handle.": "true の場合、これが最後のハンドルの場合、連絡先全体が削除されます。",
|
||||
"List of external URLs to remove from the conversation.": "会話から削除する外部 URL のリストです。",
|
||||
"The subject of the message.": "メッセージの件名。",
|
||||
"The body of the message.": "メッセージの本文",
|
||||
"The content of the reply message.": "返信メッセージの内容。",
|
||||
"The subject of the reply (for email channels).": "返信の件名 (Eメールチャンネル用)",
|
||||
"Select the account": "アカウントを選択",
|
||||
"The new name for the account.": "アカウントの新しい名前。",
|
||||
"The new description for the account.": "アカウントの新しい説明。",
|
||||
"Custom fields to add or update. Existing fields will be preserved.": "カスタムフィールドを追加または更新します。既存のフィールドは保存されます。",
|
||||
"The new name for the contact.": "連絡先の新しい名前。",
|
||||
"A new description for the contact.": "連絡先の新しい説明。",
|
||||
"The new status for the conversation.": "会話の新しいステータス。",
|
||||
"Select the inbox": "受信トレイを選択",
|
||||
"Select the link": "リンクを選択してください",
|
||||
"The new name for the link.": "リンクの新しい名前。",
|
||||
"The new external URL for the link.": "リンクの新しい外部 URL",
|
||||
"Twitter": "Twitter",
|
||||
"Facebook": "Facebook",
|
||||
"Intercom": "インターホン(Intercom)",
|
||||
"front_chat": "front_chat",
|
||||
"custom": "カスタム",
|
||||
"Private": "非公開",
|
||||
"Shared": "共有",
|
||||
"Created At": "作成日時",
|
||||
"Updated At": "更新日時",
|
||||
"Ascending": "昇順",
|
||||
"Descending": "降順",
|
||||
"Front Chat": "フロントチャット",
|
||||
"Custom": "カスタム",
|
||||
"Open": "開く",
|
||||
"Archived": "アーカイブ済み",
|
||||
"Deleted": "削除しました",
|
||||
"New Comment": "新しいコメント",
|
||||
"New Inbound Message": "新しい受信メッセージ",
|
||||
"New Outbound Message": "新しい送信メッセージ",
|
||||
"New Tag Added to Message": "新しいタグがメッセージに追加されました",
|
||||
"New Conversation State Change": "新しい会話の状態変更",
|
||||
"Fires when a new comment is posted on a conversation in Front.": "Frontで新しいコメントが投稿されたときに発行されます。",
|
||||
"Fires when a new message is received in a shared inbox.": "共有の受信トレイに新しいメッセージが受信されたときに発生します。",
|
||||
"Fires when a message is sent or replied to in Front.": "メッセージが送信またはフロントで返信されたときに発生します。",
|
||||
"Fires when a tag is applied to a conversation.": "タグが会話に適用されたときに発生します。",
|
||||
"Triggers when a conversation changes to a specified state.": "会話が指定された状態に変化したときにトリガーします。",
|
||||
"Desired State": "希望の状態",
|
||||
"The ID of the inbox to monitor for new inbound messages.": "新しい受信メッセージを監視する受信トレイのID。",
|
||||
"The state to trigger on (e.g., open, archived, deleted, assigned, etc.).": "起動する状態 (例: open, archived, deleted, assigned, etc.)",
|
||||
"Assigned": "割り当て",
|
||||
"Unassigned": "未割り当て"
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
{
|
||||
"Your Front API token. You can create one from your Front settings under \"Developers\". Ensure the token has the necessary scopes.": "Uw Front API token. U kunt er een maken onder \"Ontwikkelaars\". Zorg ervoor dat de token de nodige reikwijdte heeft.",
|
||||
"Add Comment": "Opmerking toevoegen",
|
||||
"Add Contact Handle": "Contacthandeling toevoegen",
|
||||
"Add Conversation Links": "Conversatielink toevoegen",
|
||||
"Add Conversation Tags": "Voeg conversatielabel toe",
|
||||
"Assign/Unassign Conversation": "Conversatie toewijzen/ongedaan maken",
|
||||
"Create Account": "Account Aanmaken",
|
||||
"Create Contact": "Contactpersoon aanmaken",
|
||||
"Create Draft": "Concept maken",
|
||||
"Create Draft Reply": "Maak concept antwoord",
|
||||
"Create Link": "Koppeling aanmaken",
|
||||
"Find Account": "Account zoeken",
|
||||
"Find Contact": "Contactpersoon zoeken",
|
||||
"Find Conversation": "Gesprek zoeken",
|
||||
"Remove Contact Handle": "Contact Handel verwijderen",
|
||||
"Remove Conversation Links": "Verwijder conversatielinks",
|
||||
"Send Message": "Verstuur bericht",
|
||||
"Send Reply": "Stuur antwoord",
|
||||
"Update Account": "Account bijwerken",
|
||||
"Update Contact": "Contactpersoon bijwerken",
|
||||
"Update Conversation": "Gesprek bijwerken",
|
||||
"Update Link": "Koppeling bijwerken",
|
||||
"Add a comment (internal note) to a conversation in Front.": "Voeg een opmerking (interne notitie) toe aan een gesprek aan de voorkant.",
|
||||
"Add a handle (email, phone number, etc.) to an existing Contact.": "Voeg een handvat toe (e-mail, telefoonnummer, etc.) aan een bestaande contact.",
|
||||
"Link external references (URLs) to a conversation.": "Link externe verwijzingen (URL's) naar een gesprek.",
|
||||
"Add one or more tags to a conversation.": "Voeg een of meer tags toe aan een gesprek.",
|
||||
"Assign a conversation to a teammate or remove assignment.": "Wijs een gesprek toe aan een teamgenoot of verwijder de toewijzing.",
|
||||
"Create a new account in Front.": "Maak een nieuw account aan de voorkant.",
|
||||
"Create a new contact in Front.": "Maak een nieuw contact aan het front.",
|
||||
"Create a draft message in Front.": "Maak een conceptboodschap aan de linkerkant.",
|
||||
"Create a draft reply to an existing conversation (subject/quote etc.) without sending immediately.": "Creëer direct een conceptantwoord op een bestaand gesprek (onderwerp/citaat etc.) zonder verzending.",
|
||||
"Create a Link in Front (name, external URL).": "Maak een link in de voorgrond (naam, externe URL).",
|
||||
"List company accounts and optionally filter by email domain or external ID.": "Bedrijfsaccounts weergeven en optioneel filteren op e-maildomein of extern ID.",
|
||||
"Look up a contact by handle (email, phone, etc.) or other identifying field.": "Een contact opzoeken via handvat (e-mail, telefoon, etc.) of andere identificatieveld.",
|
||||
"Find a conversation by search filters such as subject, participants, tags, inbox, etc.": "Zoek een gesprek door zoekfilters zoals onderwerp, deelnemers, tags, inbox, enz.",
|
||||
"Remove a handle (email, phone number, etc.) from an existing Contact.": "Verwijder een handvat (e-mail, telefoonnummer, etc.) uit een bestaande contact.",
|
||||
"Remove external links from a conversation in Front.": "Externe links uit een gesprek aan het front verwijderen.",
|
||||
"Send a new message (starts a conversation) with subject, recipients, body, attachments, tags, etc.": "Stuur een nieuw bericht (begint een gesprek) met onderwerp, geadresseerden, lichaam, bijlagen, labels, etc.",
|
||||
"Send a reply to a conversation in Front.": "Stuur een antwoord naar een gesprek aan de linkerzijde.",
|
||||
"Update an existing account in Front.": "Een bestaand account aan voorzijde bijwerken.",
|
||||
"Update an existing contact in Front.": "Een bestaand contact aan het front bijwerken.",
|
||||
"Modify conversation properties: status, assignee, inbox, tags, etc.": "Gesprekseigenschappen wijzigen: status, taakontvanger, inbox, tags, enz.",
|
||||
"Update the name or external URL of a Link in Front.": "Update de naam of externe URL van een link aan de linkerkant.",
|
||||
"Conversation ID": "Conversatie ID",
|
||||
"Teammate ID": "Teamgenoot ID",
|
||||
"Comment Body": "Commentaar inhoud",
|
||||
"Contact ID": "Contact ID",
|
||||
"Handle Type": "Type afhandeling",
|
||||
"Handle Value": "Afhandeling waarde",
|
||||
"Link IDs": "Link IDs",
|
||||
"Tag IDs": "Tag ID's",
|
||||
"Account Name": "Klant naam",
|
||||
"Description": "Beschrijving",
|
||||
"Domains": "Domeinen",
|
||||
"External ID": "Extern ID",
|
||||
"Custom Fields": "Aangepaste velden",
|
||||
"Name": "Naam",
|
||||
"Handles": "Handles",
|
||||
"Avatar URL": "Avatar URL",
|
||||
"Links": "Koppelingen",
|
||||
"Group Names": "Groepsnaam",
|
||||
"Contact Lists": "Lijst met contactpersonen",
|
||||
"Channel ID": "Kanaal ID",
|
||||
"To": "tot",
|
||||
"CC": "CC",
|
||||
"BCC": "Bcc",
|
||||
"Subject": "Onderwerp",
|
||||
"Body": "Lichaam",
|
||||
"Attachments": "Bijlagen",
|
||||
"Mode": "Modus",
|
||||
"Signature ID": "Handtekening ID",
|
||||
"Add Default Signature": "Standaard Handtekening toevoegen",
|
||||
"Message Body": "Bericht Body",
|
||||
"External URL": "Externe URL",
|
||||
"Pattern": "Patroon",
|
||||
"Email Domain": "E-mail domein",
|
||||
"Limit": "Limiet",
|
||||
"Page Token": "Pagina Token",
|
||||
"Sort By": "Sorteren op",
|
||||
"Sort Order": "Sorteren bestelling",
|
||||
"Email": "E-mail",
|
||||
"Phone": "Telefoonnummer",
|
||||
"Custom Query": "Aangepaste zoekopdracht",
|
||||
"Query": "Zoekopdracht",
|
||||
"Handle": "Handgreep",
|
||||
"Source": "Bron",
|
||||
"Delete Contact if Last Handle": "Contact verwijderen als laatste handeling",
|
||||
"Account ID": "ID klant",
|
||||
"Status": "status",
|
||||
"Inbox ID": "Inbox ID",
|
||||
"Link ID": "Link ID",
|
||||
"Select the conversation": "Selecteer het gesprek",
|
||||
"Select the teammate": "Selecteer de teamgenoot",
|
||||
"The content of the comment.": "De inhoud van de opmerking.",
|
||||
"Select the contact": "Selecteer de contactpersoon",
|
||||
"Type of handle to add.": "Type handvat om toe te voegen.",
|
||||
"The value of the handle (e.g., email address, phone number).": "De waarde van de handgreep (bijv. e-mailadres, telefoonnummer).",
|
||||
"Select one or more links": "Selecteer een of meer koppelingen",
|
||||
"Select one or more tags": "Selecteer een of meer tags",
|
||||
"The name of the account to create.": "De naam van het aan te maken account",
|
||||
"A description for the account.": "Een beschrijving van de rekening.",
|
||||
"List of domains associated with the account.": "Lijst van domeinen die gekoppeld zijn aan het account.",
|
||||
"An external identifier for the account.": "Externe identificatie voor deze rekening",
|
||||
"Custom fields for this account, as a JSON object.": "Aangepaste velden voor deze rekening, als JSON-object.",
|
||||
"The name of the contact.": "De naam van de contactpersoon",
|
||||
"A description for the contact.": "Een beschrijving van de contactpersoon",
|
||||
"List of contact handles (e.g., email, phone).": "Lijst van contactpunten (bijv. e-mail, telefoon).",
|
||||
"URL of the contact’s avatar image.": "URL van de avatar afbeelding van de contactpersoon.",
|
||||
"List of URLs associated with the contact.": "Lijst met URL's gekoppeld aan de contactpersoon",
|
||||
"List of group names to associate with the contact.": "Lijst van groepsnamen die aan de contactpersoon gekoppeld worden.",
|
||||
"List of contact list names this contact belongs to. Front will create any that do not exist.": "Lijst met namen van contactpersonen waartoe dit contact behoort. Voorkant zal een naam maken die niet bestaat.",
|
||||
"Custom fields for this contact, as a JSON object (e.g., {\"CRM ID\": \"12345\"}).": "Aangepaste velden voor deze contactpersoon, als een JSON-object (bijv. {\"CRM ID\": \"12345\"}).",
|
||||
"Select the channel": "Selecteer het kanaal",
|
||||
"List of recipient handles (email addresses, etc.).": "Lijst van ontvangerhandleidingen (e-mailadressen, enz.).",
|
||||
"List of CC recipient handles.": "Lijst van CC geadresseerde handleidingen.",
|
||||
"List of BCC recipient handles.": "Lijst van BCC ontvangerhandleidingen.",
|
||||
"The subject of the draft.": "Het onderwerp van het voorstel.",
|
||||
"The body of the draft message.": "De inhoud van het ontwerpbericht.",
|
||||
"List of attachment URLs.": "Lijst van bijlage-URL's.",
|
||||
"Mode of the draft reply": "Modus van het ontwerpantwoord",
|
||||
"The ID of the signature to use for the draft reply (if applicable).": "Het ID van de handtekening die wordt gebruikt voor het conceptantwoord (indien van toepassing).",
|
||||
"Whether to append the default signature to the draft reply (if applicable).": "Of de standaard handtekening moet worden toegevoegd aan het ontwerpantwoord (indien van toepassing).",
|
||||
"The content of the draft reply.": "De inhoud van het ontwerpantwoord.",
|
||||
"The subject of the draft reply (for email channels).": "Het onderwerp van het ontwerp antwoord (voor e-mailkanalen).",
|
||||
"The name of the link.": "De naam van de link.",
|
||||
"The external URL for the link.": "De externe URL voor de link.",
|
||||
"Optional pattern to match URLs (regex).": "Optioneel patroon dat overeenkomt met URL's (regex).",
|
||||
"Filter accounts by email domain ": "Filter accounts op e-mail domein ",
|
||||
"Filter accounts by external ID": "Filter accounts op extern ID",
|
||||
"Maximum number of accounts to return (max 100).": "Maximum aantal te retourneren klanten (max 100).",
|
||||
"Token for pagination.": "Token voor paginering.",
|
||||
"Field used to sort the accounts.": "Veld gebruikt voor het sorteren van rekeningen.",
|
||||
"Order by which results should be sorted.": "Sorteer op welke resultaten moeten worden gesorteerd.",
|
||||
"Email address to search for.": "E-mailadres om naar te zoeken.",
|
||||
"Phone number to search for.": "Telefoonnummer om naar te zoeken.",
|
||||
"Custom Front query string (advanced).": "Eigen winkel query string (geavanceerd).",
|
||||
"Maximum number of contacts to return.": "Maximum aantal contactpersonen om terug te zenden.",
|
||||
"Front query string (e.g. subject:\"Order\", tag_ids:tag_123, inbox_id:inb_456, etc.). See https://dev.frontapp.com/docs/search-1": "Winkel string (bijv. subject:\"Order\", tag_ids:tag_123, inbox_id:inb_456, etc.). Zie https://dev.frontapp.com/docs/search-1",
|
||||
"Maximum number of conversations to return.": "Maximum aantal gesprekken om weer te geven.",
|
||||
"The handle to remove.": "Het te verwijderen handvat",
|
||||
"The type of the handle to remove.": "Het type van de hendel om te verwijderen.",
|
||||
"If true, the entire contact will be deleted if this is their last handle.": "Als het waar is, wordt de hele contactpersoon verwijderd als dit hun laatste handvat is.",
|
||||
"List of external URLs to remove from the conversation.": "Lijst van externe URL's om te verwijderen uit het gesprek.",
|
||||
"The subject of the message.": "Het onderwerp van het bericht.",
|
||||
"The body of the message.": "De hoofdtekst van het bericht.",
|
||||
"The content of the reply message.": "De inhoud van het antwoord bericht.",
|
||||
"The subject of the reply (for email channels).": "Het onderwerp van het antwoord (voor e-mailkanalen).",
|
||||
"Select the account": "Selecteer het account",
|
||||
"The new name for the account.": "De nieuwe naam voor het account.",
|
||||
"The new description for the account.": "De nieuwe beschrijving voor de account.",
|
||||
"Custom fields to add or update. Existing fields will be preserved.": "Aangepaste velden om toe te voegen of bij te werken. Bestaande velden worden behouden.",
|
||||
"The new name for the contact.": "De nieuwe naam van de contactpersoon",
|
||||
"A new description for the contact.": "Een nieuwe beschrijving van de contactpersoon",
|
||||
"The new status for the conversation.": "De nieuwe status van het gesprek.",
|
||||
"Select the inbox": "Selecteer de inbox",
|
||||
"Select the link": "Selecteer de link",
|
||||
"The new name for the link.": "De nieuwe naam voor de link.",
|
||||
"The new external URL for the link.": "De nieuwe externe URL voor de link.",
|
||||
"Twitter": "Twitter",
|
||||
"Facebook": "Facebook",
|
||||
"Intercom": "Intercom",
|
||||
"front_chat": "voor_chat",
|
||||
"custom": "Aangepast",
|
||||
"Private": "Privé",
|
||||
"Shared": "Gedeeld",
|
||||
"Created At": "Aangemaakt op",
|
||||
"Updated At": "Bijgewerkt op",
|
||||
"Ascending": "Oplopend",
|
||||
"Descending": "Aflopend",
|
||||
"Front Chat": "Voorzijde chat",
|
||||
"Custom": "Aangepaste",
|
||||
"Open": "Open",
|
||||
"Archived": "Gearchiveerd",
|
||||
"Deleted": "Verwijderd",
|
||||
"New Comment": "Nieuwe reactie",
|
||||
"New Inbound Message": "Nieuw inkomende bericht",
|
||||
"New Outbound Message": "Nieuw uitgaande bericht",
|
||||
"New Tag Added to Message": "Nieuwe tag toegevoegd aan bericht",
|
||||
"New Conversation State Change": "Nieuwe verandering van gespreksstatus",
|
||||
"Fires when a new comment is posted on a conversation in Front.": "Vuurt wanneer een nieuwe reactie is geplaatst op een gesprek aan het front.",
|
||||
"Fires when a new message is received in a shared inbox.": "Vuurt wanneer een nieuw bericht wordt ontvangen in een gedeeld postvak in.",
|
||||
"Fires when a message is sent or replied to in Front.": "Vuurt af wanneer een bericht naar het front wordt gestuurd of beantwoord.",
|
||||
"Fires when a tag is applied to a conversation.": "Vuurt wanneer een tag wordt toegepast op een gesprek.",
|
||||
"Triggers when a conversation changes to a specified state.": "Activeert wanneer een gesprek verandert in een opgegeven staat.",
|
||||
"Desired State": "Gewenste staat",
|
||||
"The ID of the inbox to monitor for new inbound messages.": "Het ID van de inbox om te monitoren voor nieuwe inkomende berichten.",
|
||||
"The state to trigger on (e.g., open, archived, deleted, assigned, etc.).": "De staat die moet worden geactiveerd op (bijv. open, gearchiveerd, verwijderd, etc.).",
|
||||
"Assigned": "Toegewezen",
|
||||
"Unassigned": "Niet-toegewezen"
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
{
|
||||
"Your Front API token. You can create one from your Front settings under \"Developers\". Ensure the token has the necessary scopes.": "Seu token de API frontal. Você pode criar um a partir das suas configurações iniciais em \"Desenvolvedores\". Certifique-se de que o token tenha os escopos necessários.",
|
||||
"Add Comment": "Adicionar comentário",
|
||||
"Add Contact Handle": "Adicionar Identificador de Contato",
|
||||
"Add Conversation Links": "Adicionar Links da Conversa",
|
||||
"Add Conversation Tags": "Adicionar Tags de Conversa",
|
||||
"Assign/Unassign Conversation": "Atribuir/Desatribuir Conversa",
|
||||
"Create Account": "Criar conta",
|
||||
"Create Contact": "Criar contato",
|
||||
"Create Draft": "Criar rascunho",
|
||||
"Create Draft Reply": "Criar Resposta Rascunha",
|
||||
"Create Link": "Criar Link",
|
||||
"Find Account": "Encontrar uma conta",
|
||||
"Find Contact": "Localizar contato",
|
||||
"Find Conversation": "Localizar Conversa",
|
||||
"Remove Contact Handle": "Remover Identificador de Contato",
|
||||
"Remove Conversation Links": "Remover Links da Conversa",
|
||||
"Send Message": "Enviar mensagem",
|
||||
"Send Reply": "Enviar resposta",
|
||||
"Update Account": "Atualizar conta",
|
||||
"Update Contact": "Atualizar contato",
|
||||
"Update Conversation": "Atualizar conversa",
|
||||
"Update Link": "Atualizar Link",
|
||||
"Add a comment (internal note) to a conversation in Front.": "Adicionar um comentário (nota interna) a uma conversa no Front.",
|
||||
"Add a handle (email, phone number, etc.) to an existing Contact.": "Adicione um identificador (e-mail, número de telefone, etc.) a um contato existente.",
|
||||
"Link external references (URLs) to a conversation.": "Vincular referências externas (URLs) a uma conversação.",
|
||||
"Add one or more tags to a conversation.": "Adicionar uma ou mais tags a uma conversa.",
|
||||
"Assign a conversation to a teammate or remove assignment.": "Atribua uma conversa a um colega de equipe ou remova a atribuição.",
|
||||
"Create a new account in Front.": "Criar uma nova conta no Front.",
|
||||
"Create a new contact in Front.": "Criar um novo contato em Front.",
|
||||
"Create a draft message in Front.": "Criar um rascunho de mensagem no Front.",
|
||||
"Create a draft reply to an existing conversation (subject/quote etc.) without sending immediately.": "Crie uma resposta de rascunho para uma conversa existente (assunto/citação, etc.) sem enviar imediatamente.",
|
||||
"Create a Link in Front (name, external URL).": "Crie um Link na Frente (nome, URL externa).",
|
||||
"List company accounts and optionally filter by email domain or external ID.": "Lista contas da empresa e, opcionalmente, filtrar por domínio de e-mail ou ID externo.",
|
||||
"Look up a contact by handle (email, phone, etc.) or other identifying field.": "Procure um contato pelo manipulador (e-mail, telefone, etc.) ou outro campo de identificação.",
|
||||
"Find a conversation by search filters such as subject, participants, tags, inbox, etc.": "Encontre uma conversa por filtros como assunto, participantes, etiquetas, caixa de entrada, etc.",
|
||||
"Remove a handle (email, phone number, etc.) from an existing Contact.": "Remove um identificador (e-mail, número de telefone, etc.) de um contato existente.",
|
||||
"Remove external links from a conversation in Front.": "Remover links externos de uma conversa no Front.",
|
||||
"Send a new message (starts a conversation) with subject, recipients, body, attachments, tags, etc.": "Enviar uma nova mensagem (inicia uma conversa) com o assunto, destinatários, corpo, anexos, etiquetas, etc.",
|
||||
"Send a reply to a conversation in Front.": "Enviar resposta para uma conversa em Front.",
|
||||
"Update an existing account in Front.": "Atualizar uma conta existente no Front.",
|
||||
"Update an existing contact in Front.": "Atualizar um contato existente no Front.",
|
||||
"Modify conversation properties: status, assignee, inbox, tags, etc.": "Modificar propriedades da conversa: status, atribuído, caixa de entrada, tags, etc.",
|
||||
"Update the name or external URL of a Link in Front.": "Atualize o nome ou a URL externa de um Link no Front.",
|
||||
"Conversation ID": "ID da conversa",
|
||||
"Teammate ID": "ID da equipe",
|
||||
"Comment Body": "Corpo do Comentário",
|
||||
"Contact ID": "ID do contato",
|
||||
"Handle Type": "Tipo de Manipulação",
|
||||
"Handle Value": "Manipular Valor",
|
||||
"Link IDs": "Link IDs",
|
||||
"Tag IDs": "IDs de tags",
|
||||
"Account Name": "Nome da Conta",
|
||||
"Description": "Descrição",
|
||||
"Domains": "Domínios",
|
||||
"External ID": "ID Externo",
|
||||
"Custom Fields": "Campos Personalizados",
|
||||
"Name": "Nome",
|
||||
"Handles": "Handles",
|
||||
"Avatar URL": "URL do avatar",
|
||||
"Links": "Links",
|
||||
"Group Names": "Nomes dos Grupos",
|
||||
"Contact Lists": "Listas de Contatos",
|
||||
"Channel ID": "ID do canal",
|
||||
"To": "Para",
|
||||
"CC": "CC",
|
||||
"BCC": "Cco",
|
||||
"Subject": "Cargo",
|
||||
"Body": "Conteúdo",
|
||||
"Attachments": "Anexos",
|
||||
"Mode": "Modo",
|
||||
"Signature ID": "ID da assinatura",
|
||||
"Add Default Signature": "Adicionar assinatura padrão",
|
||||
"Message Body": "Corpo da Mensagem",
|
||||
"External URL": "URL externa",
|
||||
"Pattern": "Padrão",
|
||||
"Email Domain": "Domínio de e-mail",
|
||||
"Limit": "Limitar",
|
||||
"Page Token": "Token da Página",
|
||||
"Sort By": "Classificar por",
|
||||
"Sort Order": "Ordem de classificação",
|
||||
"Email": "e-mail",
|
||||
"Phone": "Smartphone",
|
||||
"Custom Query": "Consulta personalizada",
|
||||
"Query": "Requisição",
|
||||
"Handle": "Tratar",
|
||||
"Source": "fonte",
|
||||
"Delete Contact if Last Handle": "Excluir Contato se o Último Identificador",
|
||||
"Account ID": "ID da Conta",
|
||||
"Status": "Estado",
|
||||
"Inbox ID": "Inbox ID",
|
||||
"Link ID": "Link ID",
|
||||
"Select the conversation": "Selecione a conversa",
|
||||
"Select the teammate": "Selecione a colega de equipe",
|
||||
"The content of the comment.": "O conteúdo do comentário.",
|
||||
"Select the contact": "Selecione o contato",
|
||||
"Type of handle to add.": "Tipo de identificador para adicionar.",
|
||||
"The value of the handle (e.g., email address, phone number).": "O valor do identificador (por exemplo, endereço de e-mail, número de telefone)",
|
||||
"Select one or more links": "Selecione um ou mais links",
|
||||
"Select one or more tags": "Selecione uma ou mais tags",
|
||||
"The name of the account to create.": "O nome da conta a criar.",
|
||||
"A description for the account.": "Uma descrição para a conta.",
|
||||
"List of domains associated with the account.": "Lista de domínios associados à conta.",
|
||||
"An external identifier for the account.": "Um identificador externo para a conta.",
|
||||
"Custom fields for this account, as a JSON object.": "Campos personalizados para esta conta, como um objeto JSON.",
|
||||
"The name of the contact.": "O nome do contato.",
|
||||
"A description for the contact.": "Uma descrição para o contato.",
|
||||
"List of contact handles (e.g., email, phone).": "Lista de manipulações de contatos (por exemplo, e-mail, telefone).",
|
||||
"URL of the contact’s avatar image.": "URL da imagem do avatar do contato.",
|
||||
"List of URLs associated with the contact.": "Lista de links associados com o contato.",
|
||||
"List of group names to associate with the contact.": "Lista de nomes de grupos para associar com o contato.",
|
||||
"List of contact list names this contact belongs to. Front will create any that do not exist.": "Lista de nomes de contatos aos quais este contato pertence. Frente irá criar quaisquer que não existem.",
|
||||
"Custom fields for this contact, as a JSON object (e.g., {\"CRM ID\": \"12345\"}).": "Campos personalizados para este contato, como um objeto JSON (por exemplo, {\"CRM ID\": \"12345\"}).",
|
||||
"Select the channel": "Selecione o canal",
|
||||
"List of recipient handles (email addresses, etc.).": "Lista de destinatários (endereços de e-mail, etc.).",
|
||||
"List of CC recipient handles.": "Lista de manipulações do destinatário CC.",
|
||||
"List of BCC recipient handles.": "Lista de manipulações de beneficiários BCC.",
|
||||
"The subject of the draft.": "O assunto do rascunho.",
|
||||
"The body of the draft message.": "O corpo da mensagem de rascunho.",
|
||||
"List of attachment URLs.": "Lista de URLs de anexo.",
|
||||
"Mode of the draft reply": "Modo da resposta de rascunho",
|
||||
"The ID of the signature to use for the draft reply (if applicable).": "A identificação da assinatura a ser usada na resposta do rascunho (se aplicável).",
|
||||
"Whether to append the default signature to the draft reply (if applicable).": "Se deseja acrescentar a assinatura padrão à resposta de rascunho (se aplicável).",
|
||||
"The content of the draft reply.": "O conteúdo do projecto de resposta.",
|
||||
"The subject of the draft reply (for email channels).": "O assunto da resposta em rascunho (para canais de e-mail).",
|
||||
"The name of the link.": "O nome do link.",
|
||||
"The external URL for the link.": "A URL externa para o link.",
|
||||
"Optional pattern to match URLs (regex).": "Padrão opcional para combinar URLs (regex).",
|
||||
"Filter accounts by email domain ": "Filtrar contas por domínio de e-mail ",
|
||||
"Filter accounts by external ID": "Filtrar contas por ID externo",
|
||||
"Maximum number of accounts to return (max 100).": "Número máximo de contas a retornar (máximo 100).",
|
||||
"Token for pagination.": "Token para paginação.",
|
||||
"Field used to sort the accounts.": "Campo usado para ordenar as contas.",
|
||||
"Order by which results should be sorted.": "Ordenação pela qual os resultados devem ser ordenados.",
|
||||
"Email address to search for.": "Endereço de e-mail para procurar.",
|
||||
"Phone number to search for.": "Número de telefone para pesquisar.",
|
||||
"Custom Front query string (advanced).": "String de consulta personalizada (avançada).",
|
||||
"Maximum number of contacts to return.": "Número máximo de contatos para retornar.",
|
||||
"Front query string (e.g. subject:\"Order\", tag_ids:tag_123, inbox_id:inb_456, etc.). See https://dev.frontapp.com/docs/search-1": "Frase de consulta frontal (por exemplo, subject:\"Order\", tag_ids:tag_123, inbox_id:inb_456, etc.). Veja https://dev.frontapp.com/docs/search-1",
|
||||
"Maximum number of conversations to return.": "Número máximo de conversas para retornar.",
|
||||
"The handle to remove.": "A alça a remover.",
|
||||
"The type of the handle to remove.": "O tipo do identificador para remover.",
|
||||
"If true, the entire contact will be deleted if this is their last handle.": "Se verdadeiro, todo o contato será excluído se essa for a sua última alça.",
|
||||
"List of external URLs to remove from the conversation.": "Lista de URLs externas para remover da conversa.",
|
||||
"The subject of the message.": "O assunto da mensagem.",
|
||||
"The body of the message.": "O corpo da mensagem.",
|
||||
"The content of the reply message.": "O conteúdo da mensagem de resposta.",
|
||||
"The subject of the reply (for email channels).": "O assunto da resposta (para canais de e-mail).",
|
||||
"Select the account": "Selecione a conta",
|
||||
"The new name for the account.": "O novo nome para a conta.",
|
||||
"The new description for the account.": "A nova descrição para a conta.",
|
||||
"Custom fields to add or update. Existing fields will be preserved.": "Campos personalizados para adicionar ou atualizar. Campos existentes serão preservados.",
|
||||
"The new name for the contact.": "O novo nome para o contato.",
|
||||
"A new description for the contact.": "Uma nova descrição para o contato.",
|
||||
"The new status for the conversation.": "O novo status da conversa.",
|
||||
"Select the inbox": "Selecione a caixa de entrada",
|
||||
"Select the link": "Selecione o link",
|
||||
"The new name for the link.": "O novo nome para o link.",
|
||||
"The new external URL for the link.": "A nova URL externa para o link.",
|
||||
"Twitter": "Twitter",
|
||||
"Facebook": "Siga-nos",
|
||||
"Intercom": "Intercom",
|
||||
"front_chat": "chat_frontal",
|
||||
"custom": "personalizado",
|
||||
"Private": "Privado",
|
||||
"Shared": "Compartilhado",
|
||||
"Created At": "Criado em",
|
||||
"Updated At": "Atualizado em",
|
||||
"Ascending": "Crescente",
|
||||
"Descending": "Decrescente",
|
||||
"Front Chat": "Bate-Papo Frontal",
|
||||
"Custom": "Personalizado",
|
||||
"Open": "Abertas",
|
||||
"Archived": "Arquivado",
|
||||
"Deleted": "Excluído",
|
||||
"New Comment": "Novo Comentário",
|
||||
"New Inbound Message": "Nova mensagem de entrada",
|
||||
"New Outbound Message": "Nova Mensagem de Saída",
|
||||
"New Tag Added to Message": "Nova Tag Adicionada à Mensagem",
|
||||
"New Conversation State Change": "Nova Mudança de Estado de Conversação",
|
||||
"Fires when a new comment is posted on a conversation in Front.": "Atira quando um novo comentário é postado em uma conversa em Front.",
|
||||
"Fires when a new message is received in a shared inbox.": "Realiza quando uma nova mensagem é recebida em uma caixa de entrada compartilhada.",
|
||||
"Fires when a message is sent or replied to in Front.": "Efetua quando uma mensagem é enviada ou respondida em Frente.",
|
||||
"Fires when a tag is applied to a conversation.": "Atira quando uma etiqueta é aplicada a uma conversa.",
|
||||
"Triggers when a conversation changes to a specified state.": "Dispara quando uma conversa muda para um estado especificado.",
|
||||
"Desired State": "Estado desejado",
|
||||
"The ID of the inbox to monitor for new inbound messages.": "O ID da caixa de entrada para monitorar novas mensagens de entrada.",
|
||||
"The state to trigger on (e.g., open, archived, deleted, assigned, etc.).": "O estado a ser acionado (por exemplo, aberto, arquivado, excluído, atribuído, etc.).",
|
||||
"Assigned": "Atribuído",
|
||||
"Unassigned": "Não atribuído"
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
{
|
||||
"Your Front API token. You can create one from your Front settings under \"Developers\". Ensure the token has the necessary scopes.": "Your Front API token. You can create one from your Front settings under \"Developers\". Ensure the token has the necessary scopes.",
|
||||
"Add Comment": "Add Comment",
|
||||
"Add Contact Handle": "Add Contact Handle",
|
||||
"Add Conversation Links": "Add Conversation Links",
|
||||
"Add Conversation Tags": "Add Conversation Tags",
|
||||
"Assign/Unassign Conversation": "Assign/Unassign Conversation",
|
||||
"Create Account": "Create Account",
|
||||
"Create Contact": "Create Contact",
|
||||
"Create Draft": "Create Draft",
|
||||
"Create Draft Reply": "Create Draft Reply",
|
||||
"Create Link": "Create Link",
|
||||
"Find Account": "Find Account",
|
||||
"Find Contact": "Find Contact",
|
||||
"Find Conversation": "Find Conversation",
|
||||
"Remove Contact Handle": "Remove Contact Handle",
|
||||
"Remove Conversation Links": "Remove Conversation Links",
|
||||
"Send Message": "Send Message",
|
||||
"Send Reply": "Send Reply",
|
||||
"Update Account": "Update Account",
|
||||
"Update Contact": "Update Contact",
|
||||
"Update Conversation": "Update Conversation",
|
||||
"Update Link": "Update Link",
|
||||
"Add a comment (internal note) to a conversation in Front.": "Add a comment (internal note) to a conversation in Front.",
|
||||
"Add a handle (email, phone number, etc.) to an existing Contact.": "Add a handle (email, phone number, etc.) to an existing Contact.",
|
||||
"Link external references (URLs) to a conversation.": "Link external references (URLs) to a conversation.",
|
||||
"Add one or more tags to a conversation.": "Add one or more tags to a conversation.",
|
||||
"Assign a conversation to a teammate or remove assignment.": "Assign a conversation to a teammate or remove assignment.",
|
||||
"Create a new account in Front.": "Create a new account in Front.",
|
||||
"Create a new contact in Front.": "Create a new contact in Front.",
|
||||
"Create a draft message in Front.": "Create a draft message in Front.",
|
||||
"Create a draft reply to an existing conversation (subject/quote etc.) without sending immediately.": "Create a draft reply to an existing conversation (subject/quote etc.) without sending immediately.",
|
||||
"Create a Link in Front (name, external URL).": "Create a Link in Front (name, external URL).",
|
||||
"List company accounts and optionally filter by email domain or external ID.": "List company accounts and optionally filter by email domain or external ID.",
|
||||
"Look up a contact by handle (email, phone, etc.) or other identifying field.": "Look up a contact by handle (email, phone, etc.) or other identifying field.",
|
||||
"Find a conversation by search filters such as subject, participants, tags, inbox, etc.": "Find a conversation by search filters such as subject, participants, tags, inbox, etc.",
|
||||
"Remove a handle (email, phone number, etc.) from an existing Contact.": "Remove a handle (email, phone number, etc.) from an existing Contact.",
|
||||
"Remove external links from a conversation in Front.": "Remove external links from a conversation in Front.",
|
||||
"Send a new message (starts a conversation) with subject, recipients, body, attachments, tags, etc.": "Send a new message (starts a conversation) with subject, recipients, body, attachments, tags, etc.",
|
||||
"Send a reply to a conversation in Front.": "Send a reply to a conversation in Front.",
|
||||
"Update an existing account in Front.": "Update an existing account in Front.",
|
||||
"Update an existing contact in Front.": "Update an existing contact in Front.",
|
||||
"Modify conversation properties: status, assignee, inbox, tags, etc.": "Modify conversation properties: status, assignee, inbox, tags, etc.",
|
||||
"Update the name or external URL of a Link in Front.": "Update the name or external URL of a Link in Front.",
|
||||
"Conversation ID": "Conversation ID",
|
||||
"Teammate ID": "Teammate ID",
|
||||
"Comment Body": "Comment Body",
|
||||
"Contact ID": "Contact ID",
|
||||
"Handle Type": "Handle Type",
|
||||
"Handle Value": "Handle Value",
|
||||
"Link IDs": "Link IDs",
|
||||
"Tag IDs": "Tag IDs",
|
||||
"Account Name": "Account Name",
|
||||
"Description": "Description",
|
||||
"Domains": "Domains",
|
||||
"External ID": "External ID",
|
||||
"Custom Fields": "Custom Fields",
|
||||
"Name": "Name",
|
||||
"Handles": "Handles",
|
||||
"Avatar URL": "Avatar URL",
|
||||
"Links": "Links",
|
||||
"Group Names": "Group Names",
|
||||
"Contact Lists": "Contact Lists",
|
||||
"Channel ID": "Channel ID",
|
||||
"To": "To",
|
||||
"CC": "CC",
|
||||
"BCC": "BCC",
|
||||
"Subject": "Subject",
|
||||
"Body": "Body",
|
||||
"Attachments": "Attachments",
|
||||
"Mode": "Mode",
|
||||
"Signature ID": "Signature ID",
|
||||
"Add Default Signature": "Add Default Signature",
|
||||
"Message Body": "Message Body",
|
||||
"External URL": "External URL",
|
||||
"Pattern": "Pattern",
|
||||
"Email Domain": "Email Domain",
|
||||
"Limit": "Limit",
|
||||
"Page Token": "Page Token",
|
||||
"Sort By": "Sort By",
|
||||
"Sort Order": "Sort Order",
|
||||
"Email": "Email",
|
||||
"Phone": "Phone",
|
||||
"Custom Query": "Custom Query",
|
||||
"Query": "Query",
|
||||
"Handle": "Handle",
|
||||
"Source": "Source",
|
||||
"Delete Contact if Last Handle": "Delete Contact if Last Handle",
|
||||
"Account ID": "Account ID",
|
||||
"Status": "Status",
|
||||
"Inbox ID": "Inbox ID",
|
||||
"Link ID": "Link ID",
|
||||
"Select the conversation": "Select the conversation",
|
||||
"Select the teammate": "Select the teammate",
|
||||
"The content of the comment.": "The content of the comment.",
|
||||
"Select the contact": "Select the contact",
|
||||
"Type of handle to add.": "Type of handle to add.",
|
||||
"The value of the handle (e.g., email address, phone number).": "The value of the handle (e.g., email address, phone number).",
|
||||
"Select one or more links": "Select one or more links",
|
||||
"Select one or more tags": "Select one or more tags",
|
||||
"The name of the account to create.": "The name of the account to create.",
|
||||
"A description for the account.": "A description for the account.",
|
||||
"List of domains associated with the account.": "List of domains associated with the account.",
|
||||
"An external identifier for the account.": "An external identifier for the account.",
|
||||
"Custom fields for this account, as a JSON object.": "Custom fields for this account, as a JSON object.",
|
||||
"The name of the contact.": "The name of the contact.",
|
||||
"A description for the contact.": "A description for the contact.",
|
||||
"List of contact handles (e.g., email, phone).": "List of contact handles (e.g., email, phone).",
|
||||
"URL of the contact’s avatar image.": "URL of the contact’s avatar image.",
|
||||
"List of URLs associated with the contact.": "List of URLs associated with the contact.",
|
||||
"List of group names to associate with the contact.": "List of group names to associate with the contact.",
|
||||
"List of contact list names this contact belongs to. Front will create any that do not exist.": "List of contact list names this contact belongs to. Front will create any that do not exist.",
|
||||
"Custom fields for this contact, as a JSON object (e.g., {\"CRM ID\": \"12345\"}).": "Custom fields for this contact, as a JSON object (e.g., {\"CRM ID\": \"12345\"}).",
|
||||
"Select the channel": "Select the channel",
|
||||
"List of recipient handles (email addresses, etc.).": "List of recipient handles (email addresses, etc.).",
|
||||
"List of CC recipient handles.": "List of CC recipient handles.",
|
||||
"List of BCC recipient handles.": "List of BCC recipient handles.",
|
||||
"The subject of the draft.": "The subject of the draft.",
|
||||
"The body of the draft message.": "The body of the draft message.",
|
||||
"List of attachment URLs.": "List of attachment URLs.",
|
||||
"Mode of the draft reply": "Mode of the draft reply",
|
||||
"The ID of the signature to use for the draft reply (if applicable).": "The ID of the signature to use for the draft reply (if applicable).",
|
||||
"Whether to append the default signature to the draft reply (if applicable).": "Whether to append the default signature to the draft reply (if applicable).",
|
||||
"The content of the draft reply.": "The content of the draft reply.",
|
||||
"The subject of the draft reply (for email channels).": "The subject of the draft reply (for email channels).",
|
||||
"The name of the link.": "The name of the link.",
|
||||
"The external URL for the link.": "The external URL for the link.",
|
||||
"Optional pattern to match URLs (regex).": "Optional pattern to match URLs (regex).",
|
||||
"Filter accounts by email domain ": "Filter accounts by email domain ",
|
||||
"Filter accounts by external ID": "Filter accounts by external ID",
|
||||
"Maximum number of accounts to return (max 100).": "Maximum number of accounts to return (max 100).",
|
||||
"Token for pagination.": "Token for pagination.",
|
||||
"Field used to sort the accounts.": "Field used to sort the accounts.",
|
||||
"Order by which results should be sorted.": "Order by which results should be sorted.",
|
||||
"Email address to search for.": "Email address to search for.",
|
||||
"Phone number to search for.": "Phone number to search for.",
|
||||
"Custom Front query string (advanced).": "Custom Front query string (advanced).",
|
||||
"Maximum number of contacts to return.": "Maximum number of contacts to return.",
|
||||
"Front query string (e.g. subject:\"Order\", tag_ids:tag_123, inbox_id:inb_456, etc.). See https://dev.frontapp.com/docs/search-1": "Front query string (e.g. subject:\"Order\", tag_ids:tag_123, inbox_id:inb_456, etc.). See https://dev.frontapp.com/docs/search-1",
|
||||
"Maximum number of conversations to return.": "Maximum number of conversations to return.",
|
||||
"The handle to remove.": "The handle to remove.",
|
||||
"The type of the handle to remove.": "The type of the handle to remove.",
|
||||
"If true, the entire contact will be deleted if this is their last handle.": "If true, the entire contact will be deleted if this is their last handle.",
|
||||
"List of external URLs to remove from the conversation.": "List of external URLs to remove from the conversation.",
|
||||
"The subject of the message.": "The subject of the message.",
|
||||
"The body of the message.": "The body of the message.",
|
||||
"The content of the reply message.": "The content of the reply message.",
|
||||
"The subject of the reply (for email channels).": "The subject of the reply (for email channels).",
|
||||
"Select the account": "Select the account",
|
||||
"The new name for the account.": "The new name for the account.",
|
||||
"The new description for the account.": "The new description for the account.",
|
||||
"Custom fields to add or update. Existing fields will be preserved.": "Custom fields to add or update. Existing fields will be preserved.",
|
||||
"The new name for the contact.": "The new name for the contact.",
|
||||
"A new description for the contact.": "A new description for the contact.",
|
||||
"The new status for the conversation.": "The new status for the conversation.",
|
||||
"Select the inbox": "Select the inbox",
|
||||
"Select the link": "Select the link",
|
||||
"The new name for the link.": "The new name for the link.",
|
||||
"The new external URL for the link.": "The new external URL for the link.",
|
||||
"Twitter": "Twitter",
|
||||
"Facebook": "Facebook",
|
||||
"Intercom": "Intercom",
|
||||
"front_chat": "front_chat",
|
||||
"custom": "custom",
|
||||
"Private": "Private",
|
||||
"Shared": "Shared",
|
||||
"Created At": "Created At",
|
||||
"Updated At": "Updated At",
|
||||
"Ascending": "Ascending",
|
||||
"Descending": "Descending",
|
||||
"Front Chat": "Front Chat",
|
||||
"Custom": "Custom",
|
||||
"Open": "Open",
|
||||
"Archived": "Archived",
|
||||
"Deleted": "Deleted",
|
||||
"New Comment": "New Comment",
|
||||
"New Inbound Message": "New Inbound Message",
|
||||
"New Outbound Message": "New Outbound Message",
|
||||
"New Tag Added to Message": "New Tag Added to Message",
|
||||
"New Conversation State Change": "New Conversation State Change",
|
||||
"Fires when a new comment is posted on a conversation in Front.": "Fires when a new comment is posted on a conversation in Front.",
|
||||
"Fires when a new message is received in a shared inbox.": "Fires when a new message is received in a shared inbox.",
|
||||
"Fires when a message is sent or replied to in Front.": "Fires when a message is sent or replied to in Front.",
|
||||
"Fires when a tag is applied to a conversation.": "Fires when a tag is applied to a conversation.",
|
||||
"Triggers when a conversation changes to a specified state.": "Triggers when a conversation changes to a specified state.",
|
||||
"Desired State": "Desired State",
|
||||
"The ID of the inbox to monitor for new inbound messages.": "The ID of the inbox to monitor for new inbound messages.",
|
||||
"The state to trigger on (e.g., open, archived, deleted, assigned, etc.).": "The state to trigger on (e.g., open, archived, deleted, assigned, etc.).",
|
||||
"Assigned": "Assigned",
|
||||
"Unassigned": "Unassigned"
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
{
|
||||
"Your Front API token. You can create one from your Front settings under \"Developers\". Ensure the token has the necessary scopes.": "Your Front API token. You can create one from your Front settings under \"Developers\". Ensure the token has the necessary scopes.",
|
||||
"Add Comment": "Add Comment",
|
||||
"Add Contact Handle": "Add Contact Handle",
|
||||
"Add Conversation Links": "Add Conversation Links",
|
||||
"Add Conversation Tags": "Add Conversation Tags",
|
||||
"Assign/Unassign Conversation": "Assign/Unassign Conversation",
|
||||
"Create Account": "Create Account",
|
||||
"Create Contact": "Create Contact",
|
||||
"Create Draft": "Create Draft",
|
||||
"Create Draft Reply": "Create Draft Reply",
|
||||
"Create Link": "Create Link",
|
||||
"Find Account": "Find Account",
|
||||
"Find Contact": "Find Contact",
|
||||
"Find Conversation": "Find Conversation",
|
||||
"Remove Contact Handle": "Remove Contact Handle",
|
||||
"Remove Conversation Links": "Remove Conversation Links",
|
||||
"Send Message": "Send Message",
|
||||
"Send Reply": "Send Reply",
|
||||
"Update Account": "Update Account",
|
||||
"Update Contact": "Update Contact",
|
||||
"Update Conversation": "Update Conversation",
|
||||
"Update Link": "Update Link",
|
||||
"Add a comment (internal note) to a conversation in Front.": "Add a comment (internal note) to a conversation in Front.",
|
||||
"Add a handle (email, phone number, etc.) to an existing Contact.": "Add a handle (email, phone number, etc.) to an existing Contact.",
|
||||
"Link external references (URLs) to a conversation.": "Link external references (URLs) to a conversation.",
|
||||
"Add one or more tags to a conversation.": "Add one or more tags to a conversation.",
|
||||
"Assign a conversation to a teammate or remove assignment.": "Assign a conversation to a teammate or remove assignment.",
|
||||
"Create a new account in Front.": "Create a new account in Front.",
|
||||
"Create a new contact in Front.": "Create a new contact in Front.",
|
||||
"Create a draft message in Front.": "Create a draft message in Front.",
|
||||
"Create a draft reply to an existing conversation (subject/quote etc.) without sending immediately.": "Create a draft reply to an existing conversation (subject/quote etc.) without sending immediately.",
|
||||
"Create a Link in Front (name, external URL).": "Create a Link in Front (name, external URL).",
|
||||
"List company accounts and optionally filter by email domain or external ID.": "List company accounts and optionally filter by email domain or external ID.",
|
||||
"Look up a contact by handle (email, phone, etc.) or other identifying field.": "Look up a contact by handle (email, phone, etc.) or other identifying field.",
|
||||
"Find a conversation by search filters such as subject, participants, tags, inbox, etc.": "Find a conversation by search filters such as subject, participants, tags, inbox, etc.",
|
||||
"Remove a handle (email, phone number, etc.) from an existing Contact.": "Remove a handle (email, phone number, etc.) from an existing Contact.",
|
||||
"Remove external links from a conversation in Front.": "Remove external links from a conversation in Front.",
|
||||
"Send a new message (starts a conversation) with subject, recipients, body, attachments, tags, etc.": "Send a new message (starts a conversation) with subject, recipients, body, attachments, tags, etc.",
|
||||
"Send a reply to a conversation in Front.": "Send a reply to a conversation in Front.",
|
||||
"Update an existing account in Front.": "Update an existing account in Front.",
|
||||
"Update an existing contact in Front.": "Update an existing contact in Front.",
|
||||
"Modify conversation properties: status, assignee, inbox, tags, etc.": "Modify conversation properties: status, assignee, inbox, tags, etc.",
|
||||
"Update the name or external URL of a Link in Front.": "Update the name or external URL of a Link in Front.",
|
||||
"Conversation ID": "Conversation ID",
|
||||
"Teammate ID": "Teammate ID",
|
||||
"Comment Body": "Comment Body",
|
||||
"Contact ID": "Contact ID",
|
||||
"Handle Type": "Handle Type",
|
||||
"Handle Value": "Handle Value",
|
||||
"Link IDs": "Link IDs",
|
||||
"Tag IDs": "Tag IDs",
|
||||
"Account Name": "Account Name",
|
||||
"Description": "描述",
|
||||
"Domains": "Domains",
|
||||
"External ID": "外部ID",
|
||||
"Custom Fields": "Custom Fields",
|
||||
"Name": "名称",
|
||||
"Handles": "Handles",
|
||||
"Avatar URL": "Avatar URL",
|
||||
"Links": "Links",
|
||||
"Group Names": "Group Names",
|
||||
"Contact Lists": "Contact Lists",
|
||||
"Channel ID": "Channel ID",
|
||||
"To": "To",
|
||||
"CC": "CC",
|
||||
"BCC": "BCC",
|
||||
"Subject": "Subject",
|
||||
"Body": "正文内容",
|
||||
"Attachments": "Attachments",
|
||||
"Mode": "Mode",
|
||||
"Signature ID": "Signature ID",
|
||||
"Add Default Signature": "Add Default Signature",
|
||||
"Message Body": "Message Body",
|
||||
"External URL": "External URL",
|
||||
"Pattern": "Pattern",
|
||||
"Email Domain": "Email Domain",
|
||||
"Limit": "Limit",
|
||||
"Page Token": "Page Token",
|
||||
"Sort By": "Sort By",
|
||||
"Sort Order": "Sort Order",
|
||||
"Email": "电子邮件地址",
|
||||
"Phone": "Phone",
|
||||
"Custom Query": "Custom Query",
|
||||
"Query": "Query",
|
||||
"Handle": "Handle",
|
||||
"Source": "来源",
|
||||
"Delete Contact if Last Handle": "Delete Contact if Last Handle",
|
||||
"Account ID": "Account ID",
|
||||
"Status": "状态",
|
||||
"Inbox ID": "Inbox ID",
|
||||
"Link ID": "Link ID",
|
||||
"Select the conversation": "Select the conversation",
|
||||
"Select the teammate": "Select the teammate",
|
||||
"The content of the comment.": "The content of the comment.",
|
||||
"Select the contact": "Select the contact",
|
||||
"Type of handle to add.": "Type of handle to add.",
|
||||
"The value of the handle (e.g., email address, phone number).": "The value of the handle (e.g., email address, phone number).",
|
||||
"Select one or more links": "Select one or more links",
|
||||
"Select one or more tags": "Select one or more tags",
|
||||
"The name of the account to create.": "The name of the account to create.",
|
||||
"A description for the account.": "A description for the account.",
|
||||
"List of domains associated with the account.": "List of domains associated with the account.",
|
||||
"An external identifier for the account.": "An external identifier for the account.",
|
||||
"Custom fields for this account, as a JSON object.": "Custom fields for this account, as a JSON object.",
|
||||
"The name of the contact.": "The name of the contact.",
|
||||
"A description for the contact.": "A description for the contact.",
|
||||
"List of contact handles (e.g., email, phone).": "List of contact handles (e.g., email, phone).",
|
||||
"URL of the contact’s avatar image.": "URL of the contact’s avatar image.",
|
||||
"List of URLs associated with the contact.": "List of URLs associated with the contact.",
|
||||
"List of group names to associate with the contact.": "List of group names to associate with the contact.",
|
||||
"List of contact list names this contact belongs to. Front will create any that do not exist.": "List of contact list names this contact belongs to. Front will create any that do not exist.",
|
||||
"Custom fields for this contact, as a JSON object (e.g., {\"CRM ID\": \"12345\"}).": "Custom fields for this contact, as a JSON object (e.g., {\"CRM ID\": \"12345\"}).",
|
||||
"Select the channel": "Select the channel",
|
||||
"List of recipient handles (email addresses, etc.).": "List of recipient handles (email addresses, etc.).",
|
||||
"List of CC recipient handles.": "List of CC recipient handles.",
|
||||
"List of BCC recipient handles.": "List of BCC recipient handles.",
|
||||
"The subject of the draft.": "The subject of the draft.",
|
||||
"The body of the draft message.": "The body of the draft message.",
|
||||
"List of attachment URLs.": "List of attachment URLs.",
|
||||
"Mode of the draft reply": "Mode of the draft reply",
|
||||
"The ID of the signature to use for the draft reply (if applicable).": "The ID of the signature to use for the draft reply (if applicable).",
|
||||
"Whether to append the default signature to the draft reply (if applicable).": "Whether to append the default signature to the draft reply (if applicable).",
|
||||
"The content of the draft reply.": "The content of the draft reply.",
|
||||
"The subject of the draft reply (for email channels).": "The subject of the draft reply (for email channels).",
|
||||
"The name of the link.": "The name of the link.",
|
||||
"The external URL for the link.": "The external URL for the link.",
|
||||
"Optional pattern to match URLs (regex).": "Optional pattern to match URLs (regex).",
|
||||
"Filter accounts by email domain ": "Filter accounts by email domain ",
|
||||
"Filter accounts by external ID": "Filter accounts by external ID",
|
||||
"Maximum number of accounts to return (max 100).": "Maximum number of accounts to return (max 100).",
|
||||
"Token for pagination.": "Token for pagination.",
|
||||
"Field used to sort the accounts.": "Field used to sort the accounts.",
|
||||
"Order by which results should be sorted.": "Order by which results should be sorted.",
|
||||
"Email address to search for.": "Email address to search for.",
|
||||
"Phone number to search for.": "Phone number to search for.",
|
||||
"Custom Front query string (advanced).": "Custom Front query string (advanced).",
|
||||
"Maximum number of contacts to return.": "Maximum number of contacts to return.",
|
||||
"Front query string (e.g. subject:\"Order\", tag_ids:tag_123, inbox_id:inb_456, etc.). See https://dev.frontapp.com/docs/search-1": "Front query string (e.g. subject:\"Order\", tag_ids:tag_123, inbox_id:inb_456, etc.). See https://dev.frontapp.com/docs/search-1",
|
||||
"Maximum number of conversations to return.": "Maximum number of conversations to return.",
|
||||
"The handle to remove.": "The handle to remove.",
|
||||
"The type of the handle to remove.": "The type of the handle to remove.",
|
||||
"If true, the entire contact will be deleted if this is their last handle.": "If true, the entire contact will be deleted if this is their last handle.",
|
||||
"List of external URLs to remove from the conversation.": "List of external URLs to remove from the conversation.",
|
||||
"The subject of the message.": "The subject of the message.",
|
||||
"The body of the message.": "The body of the message.",
|
||||
"The content of the reply message.": "The content of the reply message.",
|
||||
"The subject of the reply (for email channels).": "The subject of the reply (for email channels).",
|
||||
"Select the account": "Select the account",
|
||||
"The new name for the account.": "The new name for the account.",
|
||||
"The new description for the account.": "The new description for the account.",
|
||||
"Custom fields to add or update. Existing fields will be preserved.": "Custom fields to add or update. Existing fields will be preserved.",
|
||||
"The new name for the contact.": "The new name for the contact.",
|
||||
"A new description for the contact.": "A new description for the contact.",
|
||||
"The new status for the conversation.": "The new status for the conversation.",
|
||||
"Select the inbox": "Select the inbox",
|
||||
"Select the link": "Select the link",
|
||||
"The new name for the link.": "The new name for the link.",
|
||||
"The new external URL for the link.": "The new external URL for the link.",
|
||||
"Twitter": "Twitter",
|
||||
"Facebook": "Facebook",
|
||||
"Intercom": "Intercom",
|
||||
"front_chat": "front_chat",
|
||||
"custom": "custom",
|
||||
"Private": "Private",
|
||||
"Shared": "Shared",
|
||||
"Created At": "Created At",
|
||||
"Updated At": "Updated At",
|
||||
"Ascending": "升序",
|
||||
"Descending": "降序",
|
||||
"Front Chat": "Front Chat",
|
||||
"Custom": "Custom",
|
||||
"Open": "Open",
|
||||
"Archived": "Archived",
|
||||
"Deleted": "Deleted",
|
||||
"New Comment": "New Comment",
|
||||
"New Inbound Message": "New Inbound Message",
|
||||
"New Outbound Message": "New Outbound Message",
|
||||
"New Tag Added to Message": "New Tag Added to Message",
|
||||
"New Conversation State Change": "New Conversation State Change",
|
||||
"Fires when a new comment is posted on a conversation in Front.": "Fires when a new comment is posted on a conversation in Front.",
|
||||
"Fires when a new message is received in a shared inbox.": "Fires when a new message is received in a shared inbox.",
|
||||
"Fires when a message is sent or replied to in Front.": "Fires when a message is sent or replied to in Front.",
|
||||
"Fires when a tag is applied to a conversation.": "Fires when a tag is applied to a conversation.",
|
||||
"Triggers when a conversation changes to a specified state.": "Triggers when a conversation changes to a specified state.",
|
||||
"Desired State": "Desired State",
|
||||
"The ID of the inbox to monitor for new inbound messages.": "The ID of the inbox to monitor for new inbound messages.",
|
||||
"The state to trigger on (e.g., open, archived, deleted, assigned, etc.).": "The state to trigger on (e.g., open, archived, deleted, assigned, etc.).",
|
||||
"Assigned": "Assigned",
|
||||
"Unassigned": "Unassigned"
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
|
||||
import { createPiece, PieceAuth } from "@activepieces/pieces-framework";
|
||||
import { addComment } from "./lib/actions/add-comment";
|
||||
import { addContactHandle } from "./lib/actions/add-contact-handle";
|
||||
import { addConversationLinks } from "./lib/actions/add-conversation-links";
|
||||
import { addConversationTags } from "./lib/actions/add-conversation-tags";
|
||||
import { assignUnassignConversation } from "./lib/actions/assign-unassign-conversation";
|
||||
import { createAccount } from "./lib/actions/create-account";
|
||||
import { createContact } from "./lib/actions/create-contact";
|
||||
import { createDraft } from "./lib/actions/create-draft";
|
||||
import { createDraftReply } from "./lib/actions/create-draft-reply";
|
||||
import { createLink } from "./lib/actions/create-link";
|
||||
import { removeContactHandle } from "./lib/actions/remove-contact-handle";
|
||||
import { removeConversationLinks } from "./lib/actions/remove-conversation-links";
|
||||
import { sendMessage } from "./lib/actions/send-message";
|
||||
import { sendReply } from "./lib/actions/send-reply";
|
||||
import { updateAccount } from "./lib/actions/update-account";
|
||||
import { updateContact } from "./lib/actions/update-contact";
|
||||
import { updateConversation } from "./lib/actions/update-conversation";
|
||||
import { updateLink } from "./lib/actions/update-link";
|
||||
import { newComment } from "./lib/triggers/new-comment";
|
||||
import { newInboundMessage } from "./lib/triggers/new-inbound-message";
|
||||
import { newOutboundMessage } from "./lib/triggers/new-outbound-message";
|
||||
import { newTagAddedToMessage } from "./lib/triggers/new-tag-added-to-message";
|
||||
import { findAccount } from "./lib/actions/find-account";
|
||||
import { findContact } from "./lib/actions/find-contact";
|
||||
import { findConversation } from "./lib/actions/find-conversation";
|
||||
import { newConversationStateChange } from "./lib/triggers/new-conversation-state-change";
|
||||
import { frontAuth } from "./lib/common/auth";
|
||||
import { PieceCategory } from "@activepieces/shared";
|
||||
|
||||
export const front = createPiece({
|
||||
displayName: "Front",
|
||||
auth: frontAuth,
|
||||
minimumSupportedRelease: '0.36.1',
|
||||
logoUrl: "https://cdn.activepieces.com/pieces/front.jpg",
|
||||
authors: ['Niket2035'],
|
||||
categories:[PieceCategory.CUSTOMER_SUPPORT],
|
||||
actions: [
|
||||
addComment,
|
||||
addContactHandle,
|
||||
addConversationLinks,
|
||||
addConversationTags,
|
||||
assignUnassignConversation,
|
||||
createAccount,
|
||||
createContact,
|
||||
createDraft,
|
||||
createDraftReply,
|
||||
createLink,
|
||||
findAccount,
|
||||
findContact,
|
||||
findConversation,
|
||||
removeContactHandle,
|
||||
removeConversationLinks,
|
||||
removeContactHandle,
|
||||
sendMessage,
|
||||
sendReply,
|
||||
updateAccount,
|
||||
updateContact,
|
||||
updateConversation,
|
||||
updateLink
|
||||
],
|
||||
triggers: [
|
||||
newComment,
|
||||
newInboundMessage,
|
||||
newOutboundMessage,
|
||||
newTagAddedToMessage,
|
||||
newConversationStateChange
|
||||
],
|
||||
});
|
||||
@@ -0,0 +1,28 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { conversationIdDropdown, teammateIdDropdown } from '../common/dropdown';
|
||||
|
||||
export const addComment = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'addComment',
|
||||
displayName: 'Add Comment',
|
||||
description: 'Add a comment (internal note) to a conversation in Front.',
|
||||
props: {
|
||||
conversation_id: conversationIdDropdown,
|
||||
author_id: teammateIdDropdown,
|
||||
body: Property.LongText({
|
||||
displayName: 'Comment Body',
|
||||
description: 'The content of the comment.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { conversation_id, author_id, body } = propsValue;
|
||||
const path = `/conversations/${conversation_id}/comments`;
|
||||
const requestBody: Record<string, unknown> = { body };
|
||||
if (author_id) requestBody['author_id'] = author_id;
|
||||
return await makeRequest(auth, HttpMethod.POST, path, requestBody);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,52 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { contactIdDropdown } from '../common/dropdown';
|
||||
|
||||
export const addContactHandle = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'addContactHandle',
|
||||
displayName: 'Add Contact Handle',
|
||||
description:
|
||||
'Add a handle (email, phone number, etc.) to an existing Contact.',
|
||||
props: {
|
||||
contact_id: contactIdDropdown,
|
||||
handle_type: Property.StaticDropdown({
|
||||
displayName: 'Handle Type',
|
||||
description: 'Type of handle to add.',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Email', value: 'email' },
|
||||
{ label: 'Phone', value: 'phone' },
|
||||
{ label: 'Twitter', value: 'twitter' },
|
||||
{ label: 'Facebook', value: 'facebook' },
|
||||
{ label: 'Intercom', value: 'intercom' },
|
||||
{ label: 'front_chat', value: 'front_chat' },
|
||||
{ label: 'custom', value: 'custom' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
handle_value: Property.ShortText({
|
||||
displayName: 'Handle Value',
|
||||
description:
|
||||
'The value of the handle (e.g., email address, phone number).',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { contact_id, handle_type, handle_value } = propsValue;
|
||||
const path = `/contacts/${contact_id}/handles`;
|
||||
const body = {
|
||||
source: handle_type,
|
||||
handle: handle_value,
|
||||
};
|
||||
|
||||
await makeRequest(auth, HttpMethod.POST, path, body);
|
||||
return {
|
||||
success: true,
|
||||
message: `Handle added successfully to ${contact_id}`,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,26 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { conversationIdDropdown, linkidsDropdown } from '../common/dropdown';
|
||||
|
||||
export const addConversationLinks = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'addConversationLinks',
|
||||
displayName: 'Add Conversation Links',
|
||||
description: 'Link external references (URLs) to a conversation.',
|
||||
props: {
|
||||
conversation_id: conversationIdDropdown,
|
||||
link_ids: linkidsDropdown,
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { conversation_id, link_ids } = propsValue;
|
||||
const path = `/conversations/${conversation_id}/links`;
|
||||
const body = { link_ids };
|
||||
await makeRequest(auth, HttpMethod.POST, path, body);
|
||||
return {
|
||||
success: true,
|
||||
message: `Links added to conversation ${conversation_id} successfully`,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,26 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { conversationIdDropdown, tagIdsDropdown } from '../common/dropdown';
|
||||
|
||||
export const addConversationTags = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'addConversationTags',
|
||||
displayName: 'Add Conversation Tags',
|
||||
description: 'Add one or more tags to a conversation.',
|
||||
props: {
|
||||
conversation_id: conversationIdDropdown,
|
||||
tag_ids: tagIdsDropdown,
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { conversation_id, tag_ids } = propsValue;
|
||||
const path = `/conversations/${conversation_id}/tags`;
|
||||
const body = { tag_ids };
|
||||
await makeRequest(auth, HttpMethod.POST, path, body);
|
||||
return {
|
||||
success: true,
|
||||
message: `Tags added to conversation ${conversation_id} successfully`,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,30 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { conversationIdDropdown, teammateIdDropdown } from '../common/dropdown';
|
||||
|
||||
export const assignUnassignConversation = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'assignUnassignConversation',
|
||||
displayName: 'Assign/Unassign Conversation',
|
||||
description: 'Assign a conversation to a teammate or remove assignment.',
|
||||
props: {
|
||||
conversation_id: conversationIdDropdown,
|
||||
assignee_id: teammateIdDropdown,
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { conversation_id, assignee_id } = propsValue;
|
||||
const path = `/conversations/${conversation_id}/assignee`;
|
||||
const body: Record<string, unknown> = {};
|
||||
if (assignee_id) {
|
||||
body['assignee_id'] = assignee_id;
|
||||
}
|
||||
|
||||
await makeRequest(auth, HttpMethod.PUT, path, body);
|
||||
return {
|
||||
success: true,
|
||||
message: `Conversation ${conversation_id} assignee changed successfully`,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,65 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
|
||||
export const createAccount = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'createAccount',
|
||||
displayName: 'Create Account',
|
||||
description: 'Create a new account in Front.',
|
||||
props: {
|
||||
name: Property.ShortText({
|
||||
displayName: 'Account Name',
|
||||
description: 'The name of the account to create.',
|
||||
required: true,
|
||||
}),
|
||||
|
||||
description: Property.ShortText({
|
||||
displayName: 'Description',
|
||||
description: 'A description for the account.',
|
||||
required: false,
|
||||
}),
|
||||
domains: Property.Array({
|
||||
displayName: 'Domains',
|
||||
description: 'List of domains associated with the account.',
|
||||
required: false,
|
||||
properties: {
|
||||
domain: Property.ShortText({
|
||||
displayName: 'Domain',
|
||||
description: 'A domain associated with the account.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
external_id: Property.ShortText({
|
||||
displayName: 'External ID',
|
||||
description: 'An external identifier for the account.',
|
||||
required: false,
|
||||
}),
|
||||
custom_fields: Property.Json({
|
||||
displayName: 'Custom Fields',
|
||||
description: 'Custom fields for this account, as a JSON object.',
|
||||
required: false,
|
||||
defaultValue: {}
|
||||
})
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { name, description, domains, external_id,custom_fields } = propsValue;
|
||||
|
||||
const body: Record<string, unknown> = { name };
|
||||
if (description) {
|
||||
body['description'] = description;
|
||||
}
|
||||
if (domains) {
|
||||
body['domains'] = domains;
|
||||
}
|
||||
if (external_id) {
|
||||
body['external_id'] = external_id;
|
||||
}
|
||||
if(custom_fields){
|
||||
body['custom_fields']=custom_fields;
|
||||
}
|
||||
return await makeRequest(auth, HttpMethod.POST, `/accounts`, body);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,110 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
|
||||
export const createContact = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'createContact',
|
||||
displayName: 'Create Contact',
|
||||
description: 'Create a new contact in Front.',
|
||||
props: {
|
||||
name: Property.ShortText({
|
||||
displayName: 'Name',
|
||||
description: 'The name of the contact.',
|
||||
required: false,
|
||||
}),
|
||||
description: Property.ShortText({
|
||||
displayName: 'Description',
|
||||
description: 'A description for the contact.',
|
||||
required: false,
|
||||
}),
|
||||
handles: Property.Array({
|
||||
displayName: 'Handles',
|
||||
description: 'List of contact handles (e.g., email, phone).',
|
||||
required: true,
|
||||
|
||||
properties: {
|
||||
handle: Property.ShortText({
|
||||
displayName: 'Handle Value',
|
||||
description: 'The value of the handle (e.g., email address).',
|
||||
required: true,
|
||||
}),
|
||||
source: Property.StaticDropdown({
|
||||
displayName: 'Handle Type',
|
||||
description: 'Type of handle to add.',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Email', value: 'email' },
|
||||
{ label: 'Phone', value: 'phone' },
|
||||
{ label: 'Twitter', value: 'twitter' },
|
||||
{ label: 'Facebook', value: 'facebook' },
|
||||
{ label: 'Intercom', value: 'intercom' },
|
||||
{ label: 'front_chat', value: 'front_chat' },
|
||||
{ label: 'custom', value: 'custom' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
},
|
||||
}),
|
||||
|
||||
avatar_url: Property.File({
|
||||
displayName: 'Avatar URL',
|
||||
description: 'URL of the contact’s avatar image.',
|
||||
required: false,
|
||||
}),
|
||||
links: Property.Array({
|
||||
displayName: 'Links',
|
||||
description: 'List of URLs associated with the contact.',
|
||||
required: false,
|
||||
properties: {
|
||||
link: Property.ShortText({
|
||||
displayName: 'Link',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
group_names: Property.Array({
|
||||
displayName: 'Group Names',
|
||||
description: 'List of group names to associate with the contact.',
|
||||
required: false,
|
||||
properties: {
|
||||
group_names: Property.ShortText({
|
||||
displayName: 'Group Name',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
list_names: Property.Array({
|
||||
displayName: 'Contact Lists',
|
||||
description: 'List of contact list names this contact belongs to. Front will create any that do not exist.',
|
||||
required: false,
|
||||
}),
|
||||
custom_fields: Property.Json({
|
||||
displayName: 'Custom Fields',
|
||||
description: 'Custom fields for this contact, as a JSON object (e.g., {"CRM ID": "12345"}).',
|
||||
required: false,
|
||||
defaultValue: {},
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { description, handles, name, avatar_url, links, group_names,list_names,custom_fields } = propsValue;
|
||||
const body: Record<string, unknown> = {
|
||||
handles,
|
||||
};
|
||||
if (description) body['description'] = description;
|
||||
if (name) body['name'] = name;
|
||||
if (avatar_url) body['avatar_url'] = avatar_url;
|
||||
if (links) body['links'] = links;
|
||||
if (group_names) body['group_names'] = group_names;
|
||||
if(list_names) body['list_names']=list_names;
|
||||
if(custom_fields) body['custom_fields']=custom_fields;
|
||||
return await makeRequest(
|
||||
auth,
|
||||
HttpMethod.POST,
|
||||
'/contacts',
|
||||
body
|
||||
);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,108 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import {
|
||||
channelIdDropdown,
|
||||
conversationIdDropdown,
|
||||
teammateIdDropdown,
|
||||
} from '../common/dropdown';
|
||||
|
||||
export const createDraftReply = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'createDraftReply',
|
||||
displayName: 'Create Draft Reply',
|
||||
description:
|
||||
'Create a draft reply to an existing conversation (subject/quote etc.) without sending immediately.',
|
||||
props: {
|
||||
conversation_id: conversationIdDropdown,
|
||||
body: Property.LongText({
|
||||
displayName: 'Message Body',
|
||||
description: 'The content of the draft reply.',
|
||||
required: true,
|
||||
}),
|
||||
subject: Property.ShortText({
|
||||
displayName: 'Subject',
|
||||
description: 'The subject of the draft reply (for email channels).',
|
||||
required: false,
|
||||
}),
|
||||
author_id: teammateIdDropdown,
|
||||
channel_id: channelIdDropdown,
|
||||
to: Property.Array({
|
||||
displayName: 'To',
|
||||
description: 'List of recipient handles (email addresses, etc.).',
|
||||
required: false,
|
||||
}),
|
||||
cc: Property.Array({
|
||||
displayName: 'CC',
|
||||
description: 'List of CC recipient handles.',
|
||||
required: false,
|
||||
}),
|
||||
bcc: Property.Array({
|
||||
displayName: 'BCC',
|
||||
description: 'List of BCC recipient handles.',
|
||||
required: false,
|
||||
}),
|
||||
attachments: Property.Array({
|
||||
displayName: 'Attachments',
|
||||
description: 'List of attachment URLs.',
|
||||
required: false,
|
||||
}),
|
||||
mode: Property.StaticDropdown({
|
||||
displayName: 'Mode',
|
||||
description: 'Mode of the draft reply',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Private', value: 'private' },
|
||||
{ label: 'Shared', value: 'shared' },
|
||||
],
|
||||
},
|
||||
defaultValue: 'private',
|
||||
}),
|
||||
signature_id: Property.ShortText({
|
||||
displayName: 'Signature ID',
|
||||
description:
|
||||
'The ID of the signature to use for the draft reply (if applicable).',
|
||||
required: false,
|
||||
}),
|
||||
should_add_default_signature: Property.Checkbox({
|
||||
displayName: 'Add Default Signature',
|
||||
description:
|
||||
'Whether to append the default signature to the draft reply (if applicable).',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const {
|
||||
conversation_id,
|
||||
body,
|
||||
subject,
|
||||
author_id,
|
||||
channel_id,
|
||||
to,
|
||||
cc,
|
||||
bcc,
|
||||
attachments,
|
||||
mode,
|
||||
signature_id,
|
||||
should_add_default_signature,
|
||||
} = propsValue;
|
||||
const path = `/conversations/${conversation_id}/drafts`;
|
||||
const requestBody: Record<string, unknown> = { body };
|
||||
if (subject) requestBody['subject'] = subject;
|
||||
if (author_id) requestBody['author_id'] = author_id;
|
||||
if (channel_id) requestBody['channel_id'] = channel_id;
|
||||
if (to) requestBody['to'] = to;
|
||||
if (cc) requestBody['cc'] = cc;
|
||||
if (bcc) requestBody['bcc'] = bcc;
|
||||
if (attachments) requestBody['attachments'] = attachments;
|
||||
if (mode) requestBody['mode'] = mode;
|
||||
if (signature_id) requestBody['signature_id'] = signature_id;
|
||||
if (should_add_default_signature !== undefined)
|
||||
requestBody['should_add_default_signature'] =
|
||||
should_add_default_signature;
|
||||
return await makeRequest(auth, HttpMethod.POST, path, requestBody);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,105 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { channelIdDropdown } from '../common/dropdown';
|
||||
|
||||
export const createDraft = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'createDraft',
|
||||
displayName: 'Create Draft',
|
||||
description: 'Create a draft message in Front.',
|
||||
props: {
|
||||
channel_id: channelIdDropdown,
|
||||
to: Property.Array({
|
||||
displayName: 'To',
|
||||
description: 'List of recipient handles (email addresses, etc.).',
|
||||
required: true,
|
||||
}),
|
||||
cc: Property.Array({
|
||||
displayName: 'CC',
|
||||
description: 'List of CC recipient handles.',
|
||||
required: false,
|
||||
}),
|
||||
bcc: Property.Array({
|
||||
displayName: 'BCC',
|
||||
description: 'List of BCC recipient handles.',
|
||||
required: false,
|
||||
}),
|
||||
subject: Property.ShortText({
|
||||
displayName: 'Subject',
|
||||
description: 'The subject of the draft.',
|
||||
required: false,
|
||||
}),
|
||||
body: Property.LongText({
|
||||
displayName: 'Body',
|
||||
description: 'The body of the draft message.',
|
||||
required: true,
|
||||
}),
|
||||
attachments: Property.Array({
|
||||
displayName: 'Attachments',
|
||||
description: 'List of attachment URLs.',
|
||||
required: false,
|
||||
}),
|
||||
mode: Property.StaticDropdown({
|
||||
displayName: 'Mode',
|
||||
description: 'Mode of the draft reply',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Private', value: 'private' },
|
||||
{ label: 'Shared', value: 'shared' },
|
||||
],
|
||||
},
|
||||
defaultValue: 'private',
|
||||
}),
|
||||
signature_id: Property.ShortText({
|
||||
displayName: 'Signature ID',
|
||||
description:
|
||||
'The ID of the signature to use for the draft reply (if applicable).',
|
||||
required: false,
|
||||
}),
|
||||
should_add_default_signature: Property.Checkbox({
|
||||
displayName: 'Add Default Signature',
|
||||
description:
|
||||
'Whether to append the default signature to the draft reply (if applicable).',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const {
|
||||
channel_id,
|
||||
to,
|
||||
cc,
|
||||
bcc,
|
||||
subject,
|
||||
body,
|
||||
attachments,
|
||||
mode,
|
||||
signature_id,
|
||||
should_add_default_signature,
|
||||
} = propsValue;
|
||||
const requestBody: Record<string, unknown> = {
|
||||
channel_id,
|
||||
to,
|
||||
body,
|
||||
};
|
||||
if (cc) requestBody['cc'] = cc;
|
||||
if (bcc) requestBody['bcc'] = bcc;
|
||||
if (subject) requestBody['subject'] = subject;
|
||||
if (attachments) requestBody['attachments'] = attachments;
|
||||
if (mode) requestBody['mode'] = mode;
|
||||
if (signature_id) requestBody['signature_id'] = signature_id;
|
||||
if (should_add_default_signature !== undefined)
|
||||
requestBody['should_add_default_signature'] =
|
||||
should_add_default_signature;
|
||||
|
||||
return await makeRequest(
|
||||
auth,
|
||||
HttpMethod.POST,
|
||||
`/channels/${channel_id}/drafts`,
|
||||
requestBody
|
||||
);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,33 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
|
||||
export const createLink = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'createLink',
|
||||
displayName: 'Create Link',
|
||||
description: 'Create a Link in Front (name, external URL).',
|
||||
props: {
|
||||
name: Property.ShortText({
|
||||
displayName: 'Name',
|
||||
description: 'The name of the link.',
|
||||
required: true,
|
||||
}),
|
||||
external_url: Property.ShortText({
|
||||
displayName: 'External URL',
|
||||
description: 'The external URL for the link.',
|
||||
required: true,
|
||||
}),
|
||||
pattern: Property.ShortText({
|
||||
displayName: 'Pattern',
|
||||
description: 'Optional pattern to match URLs (regex).',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { name, external_url, pattern } = propsValue;
|
||||
const body = { name, external_url, pattern };
|
||||
return await makeRequest(auth, HttpMethod.POST, '/links', body);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,77 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
|
||||
export const findAccount = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'findAccount',
|
||||
displayName: 'Find Account',
|
||||
description: 'List company accounts and optionally filter by email domain or external ID.',
|
||||
props: {
|
||||
email_domain: Property.ShortText({
|
||||
displayName: 'Email Domain',
|
||||
description: 'Filter accounts by email domain ',
|
||||
required: false,
|
||||
}),
|
||||
external_id: Property.ShortText({
|
||||
displayName: 'External ID',
|
||||
description: 'Filter accounts by external ID',
|
||||
required: false,
|
||||
}),
|
||||
limit: Property.Number({
|
||||
displayName: 'Limit',
|
||||
description: 'Maximum number of accounts to return (max 100).',
|
||||
required: false,
|
||||
}),
|
||||
page_token: Property.ShortText({
|
||||
displayName: 'Page Token',
|
||||
description: 'Token for pagination.',
|
||||
required: false,
|
||||
}),
|
||||
sort_by: Property.StaticDropdown({
|
||||
displayName: 'Sort By',
|
||||
description: 'Field used to sort the accounts.',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Created At', value: 'created_at' },
|
||||
{ label: 'Updated At', value: 'updated_at' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
sort_order: Property.StaticDropdown({
|
||||
displayName: 'Sort Order',
|
||||
description: 'Order by which results should be sorted.',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Ascending', value: 'asc' },
|
||||
{ label: 'Descending', value: 'desc' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { email_domain, external_id, limit, page_token, sort_by, sort_order } = propsValue;
|
||||
// const params: string[] = [];
|
||||
// if (limit) params.push(`limit=${limit}`);
|
||||
// if (page_token) params.push(`page_token=${encodeURIComponent(page_token)}`);
|
||||
// if (sort_by) params.push(`sort_by=${sort_by}`);
|
||||
// if (sort_order) params.push(`sort_order=${sort_order}`);
|
||||
|
||||
// const queryString = params.length ? `?${params.join('&')}` : '';
|
||||
const path = `/accounts`;
|
||||
|
||||
const response = await makeRequest(auth, HttpMethod.GET, path);
|
||||
|
||||
let accounts = response._results || response.results || response.accounts || [];
|
||||
if (email_domain) {
|
||||
accounts = accounts.filter((a: any) => a.email_domain === email_domain);
|
||||
}
|
||||
if (external_id) {
|
||||
accounts = accounts.filter((a: any) => a.external_id === external_id);
|
||||
}
|
||||
return accounts;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,53 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
|
||||
export const findContact = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'findContact',
|
||||
displayName: 'Find Contact',
|
||||
description: 'Look up a contact by handle (email, phone, etc.) or other identifying field.',
|
||||
props: {
|
||||
email: Property.ShortText({
|
||||
displayName: 'Email',
|
||||
description: 'Email address to search for.',
|
||||
required: false,
|
||||
}),
|
||||
phone: Property.ShortText({
|
||||
displayName: 'Phone',
|
||||
description: 'Phone number to search for.',
|
||||
required: false,
|
||||
}),
|
||||
custom_query: Property.ShortText({
|
||||
displayName: 'Custom Query',
|
||||
description: 'Custom Front query string (advanced).',
|
||||
required: false,
|
||||
}),
|
||||
limit: Property.Number({
|
||||
displayName: 'Limit',
|
||||
description: 'Maximum number of contacts to return.',
|
||||
required: false,
|
||||
}),
|
||||
page_token: Property.ShortText({
|
||||
displayName: 'Page Token',
|
||||
description: 'Token for pagination.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { email, phone, custom_query, limit, page_token } = propsValue;
|
||||
const params: string[] = [];
|
||||
|
||||
if (email) params.push(`q[type]=${encodeURIComponent(email)}`);
|
||||
if (phone) params.push(`q[handles]=${encodeURIComponent(phone)}`);
|
||||
if (custom_query) params.push(`q=${encodeURIComponent(custom_query)}`);
|
||||
if (limit) params.push(`limit=${limit}`);
|
||||
if (page_token) params.push(`page_token=${encodeURIComponent(page_token)}`);
|
||||
|
||||
const queryString = params.length ? `?${params.join('&')}` : '';
|
||||
const path = `/contacts${queryString}`;
|
||||
console.log("Request Path:", path);
|
||||
return await makeRequest(auth, HttpMethod.GET, path);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,38 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
|
||||
export const findConversation = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'findConversation',
|
||||
displayName: 'Find Conversation',
|
||||
description: 'Find a conversation by search filters such as subject, participants, tags, inbox, etc.',
|
||||
props: {
|
||||
q: Property.ShortText({
|
||||
displayName: 'Query',
|
||||
description: 'Front query string (e.g. subject:"Order", tag_ids:tag_123, inbox_id:inb_456, etc.). See https://dev.frontapp.com/docs/search-1',
|
||||
required: true,
|
||||
}),
|
||||
limit: Property.Number({
|
||||
displayName: 'Limit',
|
||||
description: 'Maximum number of conversations to return.',
|
||||
required: false,
|
||||
}),
|
||||
page_token: Property.ShortText({
|
||||
displayName: 'Page Token',
|
||||
description: 'Token for pagination.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { q, limit, page_token } = propsValue;
|
||||
const params: string[] = [];
|
||||
if (q) params.push(`q=${encodeURIComponent(q)}`);
|
||||
if (limit) params.push(`limit=${limit}`);
|
||||
if (page_token) params.push(`page_token=${encodeURIComponent(page_token)}`);
|
||||
const queryString = params.length ? `?${params.join('&')}` : '';
|
||||
const path = `/conversations/search${queryString}`;
|
||||
return await makeRequest(auth, HttpMethod.GET, path);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,54 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { contactIdDropdown } from '../common/dropdown';
|
||||
|
||||
export const removeContactHandle = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'removeContactHandle',
|
||||
displayName: 'Remove Contact Handle',
|
||||
description:
|
||||
'Remove a handle (email, phone number, etc.) from an existing Contact.',
|
||||
props: {
|
||||
contact_id: contactIdDropdown,
|
||||
handle: Property.ShortText({
|
||||
displayName: 'Handle',
|
||||
description: 'The handle to remove.',
|
||||
required: true,
|
||||
}),
|
||||
source: Property.StaticDropdown({
|
||||
displayName: 'Source',
|
||||
description: 'The type of the handle to remove.',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Email', value: 'email' },
|
||||
{ label: 'Phone', value: 'phone' },
|
||||
{ label: 'Twitter', value: 'twitter' },
|
||||
{ label: 'Facebook', value: 'facebook' },
|
||||
{ label: 'Intercom', value: 'intercom' },
|
||||
{ label: 'Front Chat', value: 'front_chat' },
|
||||
{ label: 'Custom', value: 'custom' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
force: Property.Checkbox({
|
||||
displayName: 'Delete Contact if Last Handle',
|
||||
description:
|
||||
'If true, the entire contact will be deleted if this is their last handle.',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { contact_id, handle, source, force } = propsValue;
|
||||
const body: Record<string, unknown> = { handle, source, force };
|
||||
const path = `/contacts/${contact_id}/handles`;
|
||||
await makeRequest(auth, HttpMethod.DELETE, path, body);
|
||||
return {
|
||||
success: true,
|
||||
message: `Handle ${handle} removed from contact ${contact_id}`,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,32 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { conversationIdDropdown } from '../common/dropdown';
|
||||
|
||||
export const removeConversationLinks = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'removeConversationLinks',
|
||||
displayName: 'Remove Conversation Links',
|
||||
description: 'Remove external links from a conversation in Front.',
|
||||
props: {
|
||||
conversation_id: conversationIdDropdown,
|
||||
links: Property.Array({
|
||||
displayName: 'Links',
|
||||
description: 'List of external URLs to remove from the conversation.',
|
||||
required: true,
|
||||
properties: {
|
||||
item: Property.ShortText({
|
||||
displayName: 'Link URL',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { conversation_id, links } = propsValue;
|
||||
const path = `/conversations/${conversation_id}/links`;
|
||||
const body = { links };
|
||||
return await makeRequest(auth, HttpMethod.DELETE, path, body);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,29 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { conversationIdDropdown } from '../common/dropdown';
|
||||
|
||||
export const removeConversationTags = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'removeConversationTags',
|
||||
displayName: 'Remove Conversation Tags',
|
||||
description: 'Remove one or more tags from a conversation.',
|
||||
props: {
|
||||
conversation_id: conversationIdDropdown,
|
||||
tag_ids: Property.Array({
|
||||
displayName: 'Tag IDs',
|
||||
description: 'List of tag IDs to remove from the conversation.',
|
||||
required: true,
|
||||
properties: {
|
||||
item: Property.ShortText({ displayName: 'Tag ID', required: true }),
|
||||
},
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { conversation_id, tag_ids } = propsValue;
|
||||
const path = `/conversations/${conversation_id}/tags`;
|
||||
const body = { tag_ids };
|
||||
return await makeRequest(auth, HttpMethod.DELETE, path, body);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,68 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { channelIdDropdown, tagIdsDropdown } from '../common/dropdown';
|
||||
|
||||
export const sendMessage = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'sendMessage',
|
||||
displayName: 'Send Message',
|
||||
description:
|
||||
'Send a new message (starts a conversation) with subject, recipients, body, attachments, tags, etc.',
|
||||
props: {
|
||||
channel_id: channelIdDropdown,
|
||||
to: Property.Array({
|
||||
displayName: 'To',
|
||||
description: 'List of recipient handles (email addresses, etc.).',
|
||||
required: true,
|
||||
}),
|
||||
cc: Property.Array({
|
||||
displayName: 'CC',
|
||||
description: 'List of CC recipient handles.',
|
||||
required: false,
|
||||
}),
|
||||
bcc: Property.Array({
|
||||
displayName: 'BCC',
|
||||
description: 'List of BCC recipient handles.',
|
||||
required: false,
|
||||
}),
|
||||
subject: Property.ShortText({
|
||||
displayName: 'Subject',
|
||||
description: 'The subject of the message.',
|
||||
required: false,
|
||||
}),
|
||||
body: Property.LongText({
|
||||
displayName: 'Body',
|
||||
description: 'The body of the message.',
|
||||
required: true,
|
||||
}),
|
||||
attachments: Property.Array({
|
||||
displayName: 'Attachments',
|
||||
description: 'List of attachment URLs.',
|
||||
required: false,
|
||||
}),
|
||||
tag_ids: tagIdsDropdown,
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { channel_id, to, cc, bcc, subject, body, attachments, tag_ids } =
|
||||
propsValue;
|
||||
const requestBody: Record<string, unknown> = {
|
||||
channel_id,
|
||||
to,
|
||||
body,
|
||||
};
|
||||
if (cc) requestBody['cc'] = cc;
|
||||
if (bcc) requestBody['bcc'] = bcc;
|
||||
if (subject) requestBody['subject'] = subject;
|
||||
if (attachments) requestBody['attachments'] = attachments;
|
||||
if (tag_ids) requestBody['tag_ids'] = tag_ids;
|
||||
|
||||
return await makeRequest(
|
||||
auth,
|
||||
HttpMethod.POST,
|
||||
`/channels/${channel_id}/messages`,
|
||||
requestBody
|
||||
);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,76 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import {
|
||||
channelIdDropdown,
|
||||
conversationIdDropdown,
|
||||
teammateIdDropdown,
|
||||
} from '../common/dropdown';
|
||||
|
||||
export const sendReply = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'sendReply',
|
||||
displayName: 'Send Reply',
|
||||
description: 'Send a reply to a conversation in Front.',
|
||||
props: {
|
||||
conversation_id: conversationIdDropdown,
|
||||
body: Property.LongText({
|
||||
displayName: 'Message Body',
|
||||
description: 'The content of the reply message.',
|
||||
required: true,
|
||||
}),
|
||||
author_id: teammateIdDropdown,
|
||||
subject: Property.ShortText({
|
||||
displayName: 'Subject',
|
||||
description: 'The subject of the reply (for email channels).',
|
||||
required: false,
|
||||
}),
|
||||
to: Property.Array({
|
||||
displayName: 'To',
|
||||
description: 'List of recipient handles (email addresses, etc.).',
|
||||
required: false,
|
||||
}),
|
||||
cc: Property.Array({
|
||||
displayName: 'CC',
|
||||
description: 'List of CC recipient handles.',
|
||||
required: false,
|
||||
}),
|
||||
bcc: Property.Array({
|
||||
displayName: 'BCC',
|
||||
description: 'List of BCC recipient handles.',
|
||||
required: false,
|
||||
}),
|
||||
channel_id: channelIdDropdown,
|
||||
attachments: Property.Array({
|
||||
displayName: 'Attachments',
|
||||
description: 'List of attachment URLs.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const {
|
||||
conversation_id,
|
||||
body,
|
||||
author_id,
|
||||
subject,
|
||||
channel_id,
|
||||
attachments,
|
||||
to,
|
||||
cc,
|
||||
bcc,
|
||||
} = propsValue;
|
||||
const path = `/conversations/${conversation_id}/messages`;
|
||||
const requestBody: Record<string, unknown> = { body };
|
||||
|
||||
if (author_id) requestBody['author_id'] = author_id;
|
||||
if (subject) requestBody['subject'] = subject;
|
||||
if (to) requestBody['to'] = to;
|
||||
if (cc) requestBody['cc'] = cc;
|
||||
if (bcc) requestBody['bcc'] = bcc;
|
||||
if (channel_id) requestBody['channel_id'] = channel_id;
|
||||
if (attachments) requestBody['attachments'] = attachments;
|
||||
|
||||
return await makeRequest(auth, HttpMethod.POST, path, requestBody);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,47 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { accountIdDropdown } from '../common/dropdown';
|
||||
|
||||
export const updateAccount = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'updateAccount',
|
||||
displayName: 'Update Account',
|
||||
description: 'Update an existing account in Front.',
|
||||
props: {
|
||||
account_id: accountIdDropdown,
|
||||
name: Property.ShortText({
|
||||
displayName: 'Account Name',
|
||||
description: 'The new name for the account.',
|
||||
required: false,
|
||||
}),
|
||||
description: Property.ShortText({
|
||||
displayName: 'Description',
|
||||
description: 'The new description for the account.',
|
||||
required: false,
|
||||
}),
|
||||
domains: Property.Array({
|
||||
displayName: 'Domains',
|
||||
description: 'List of domains associated with the account.',
|
||||
required: false,
|
||||
}),
|
||||
custom_fields: Property.Json({
|
||||
displayName: 'Custom Fields',
|
||||
description:
|
||||
'Custom fields to add or update. Existing fields will be preserved.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { account_id, name, description, domains, custom_fields } =
|
||||
propsValue;
|
||||
const path = `/accounts/${account_id}`;
|
||||
const body: Record<string, unknown> = {};
|
||||
if (name) body['name'] = name;
|
||||
if (description) body['description'] = description;
|
||||
if (domains) body['domains'] = domains;
|
||||
if (custom_fields) body['custom_fields'] = custom_fields;
|
||||
return await makeRequest(auth, HttpMethod.PATCH, path, body);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,56 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { contactIdDropdown } from '../common/dropdown';
|
||||
|
||||
export const updateContact = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'updateContact',
|
||||
displayName: 'Update Contact',
|
||||
description: 'Update an existing contact in Front.',
|
||||
props: {
|
||||
contact_id: contactIdDropdown,
|
||||
name: Property.ShortText({
|
||||
displayName: 'Name',
|
||||
description: 'The new name for the contact.',
|
||||
required: false,
|
||||
}),
|
||||
description: Property.ShortText({
|
||||
displayName: 'Description',
|
||||
description: 'A new description for the contact.',
|
||||
required: false,
|
||||
}),
|
||||
avatar_url: Property.ShortText({
|
||||
displayName: 'Avatar URL',
|
||||
description: 'URL of the contact’s avatar image.',
|
||||
required: false,
|
||||
}),
|
||||
links: Property.Array({
|
||||
displayName: 'Links',
|
||||
description: 'List of URLs associated with the contact.',
|
||||
required: false,
|
||||
properties: {
|
||||
item: Property.ShortText({
|
||||
displayName: 'Link',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { contact_id, name, description, avatar_url, links } = propsValue;
|
||||
const path = `/contacts/${contact_id}`;
|
||||
const body: Record<string, unknown> = {};
|
||||
if (name) body['name'] = name;
|
||||
if (description) body['description'] = description;
|
||||
if (avatar_url) body['avatar_url'] = avatar_url;
|
||||
if (links) body['links'] = links;
|
||||
|
||||
await makeRequest(auth, HttpMethod.PATCH, path, body);
|
||||
return {
|
||||
success: true,
|
||||
message: `Contact ${contact_id} updated successfully`,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,52 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import {
|
||||
conversationIdDropdown,
|
||||
inboxIdDropdown,
|
||||
tagIdsDropdown,
|
||||
teammateIdDropdown,
|
||||
} from '../common/dropdown';
|
||||
|
||||
export const updateConversation = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'updateConversation',
|
||||
displayName: 'Update Conversation',
|
||||
description:
|
||||
'Modify conversation properties: status, assignee, inbox, tags, etc.',
|
||||
props: {
|
||||
conversation_id: conversationIdDropdown,
|
||||
status: Property.StaticDropdown({
|
||||
displayName: 'Status',
|
||||
description: 'The new status for the conversation.',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Open', value: 'open' },
|
||||
{ label: 'Archived', value: 'archived' },
|
||||
{ label: 'Deleted', value: 'deleted' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
assignee_id: teammateIdDropdown,
|
||||
inbox_id: inboxIdDropdown,
|
||||
tag_ids: tagIdsDropdown,
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { conversation_id, status, assignee_id, inbox_id, tag_ids } =
|
||||
propsValue;
|
||||
const path = `/conversations/${conversation_id}`;
|
||||
const body: Record<string, unknown> = {};
|
||||
if (status) body['status'] = status;
|
||||
if (assignee_id) body['assignee_id'] = assignee_id;
|
||||
if (inbox_id) body['inbox_id'] = inbox_id;
|
||||
if (tag_ids) body['tag_ids'] = tag_ids;
|
||||
|
||||
await makeRequest(auth, HttpMethod.PATCH, path, body);
|
||||
return {
|
||||
success: true,
|
||||
message: `Conversation ${conversation_id} updated successfully`,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,37 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { linkIdDropdown } from '../common/dropdown';
|
||||
|
||||
export const updateLink = createAction({
|
||||
auth: frontAuth,
|
||||
name: 'updateLink',
|
||||
displayName: 'Update Link',
|
||||
description: 'Update the name or external URL of a Link in Front.',
|
||||
props: {
|
||||
link_id: linkIdDropdown,
|
||||
name: Property.ShortText({
|
||||
displayName: 'Name',
|
||||
description: 'The new name for the link.',
|
||||
required: false,
|
||||
}),
|
||||
external_url: Property.ShortText({
|
||||
displayName: 'External URL',
|
||||
description: 'The new external URL for the link.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { link_id, name, external_url } = propsValue;
|
||||
const path = `/links/${link_id}`;
|
||||
const body: Record<string, unknown> = {};
|
||||
if (name) body['name'] = name;
|
||||
if (external_url) body['external_url'] = external_url;
|
||||
await makeRequest(auth, HttpMethod.PATCH, path, body);
|
||||
return {
|
||||
success: true,
|
||||
message: `Link ${link_id} updated successfully`,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,39 @@
|
||||
import { PieceAuth } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
|
||||
export const frontAuth = PieceAuth.SecretText({
|
||||
displayName: 'Front API Token',
|
||||
description:
|
||||
'Your Front API token. You can create one from your Front settings under "Developers". Ensure the token has the necessary scopes.',
|
||||
required: true,
|
||||
validate: async ({ auth }: { auth: string }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
valid: false,
|
||||
error: 'API Token cannot be empty.',
|
||||
};
|
||||
}
|
||||
try {
|
||||
await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: 'https://api2.frontapp.com/me',
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: auth,
|
||||
},
|
||||
});
|
||||
return {
|
||||
valid: true,
|
||||
};
|
||||
} catch (e) {
|
||||
return {
|
||||
valid: false,
|
||||
error: 'Invalid API Token.',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,27 @@
|
||||
import { HttpMethod, httpClient } from '@activepieces/pieces-common';
|
||||
import { AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework';
|
||||
import { frontAuth } from './auth';
|
||||
|
||||
export const BASE_URL = `https://api2.frontapp.com`;
|
||||
|
||||
export async function makeRequest(
|
||||
{secret_text}: AppConnectionValueForAuthProperty<typeof frontAuth>,
|
||||
method: HttpMethod,
|
||||
path: string,
|
||||
body?: unknown
|
||||
) {
|
||||
try {
|
||||
const response = await httpClient.sendRequest({
|
||||
method,
|
||||
url: `${BASE_URL}${path}`,
|
||||
headers: {
|
||||
Authorization: `Bearer ${secret_text}`,
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body,
|
||||
});
|
||||
return response.body;
|
||||
} catch (error: any) {
|
||||
throw new Error(`Unexpected error: ${error.message || String(error)}`);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,349 @@
|
||||
import { Property } from '@activepieces/pieces-framework';
|
||||
import { makeRequest } from './client';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { frontAuth } from './auth';
|
||||
|
||||
export const conversationIdDropdown = Property.Dropdown({
|
||||
displayName: 'Conversation ID',
|
||||
description: 'Select the conversation',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
auth: frontAuth,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await makeRequest(
|
||||
auth,
|
||||
HttpMethod.GET,
|
||||
'/conversations'
|
||||
);
|
||||
const conversations = response._results || [];
|
||||
console.log(response);
|
||||
return {
|
||||
disabled: false,
|
||||
options: conversations.map((conv: any) => ({
|
||||
label: conv.subject || conv.id,
|
||||
value: conv.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading conversations',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const contactIdDropdown = Property.Dropdown({
|
||||
displayName: 'Contact ID',
|
||||
description: 'Select the contact',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
auth: frontAuth,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await makeRequest(
|
||||
auth,
|
||||
HttpMethod.GET,
|
||||
'/contacts?limit=50'
|
||||
);
|
||||
const contacts = response._results || [];
|
||||
return {
|
||||
disabled: false,
|
||||
options: contacts.map((contact: any) => ({
|
||||
label: contact.name || contact.id,
|
||||
value: contact.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading contacts',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const tagIdsDropdown = Property.MultiSelectDropdown({
|
||||
displayName: 'Tag IDs',
|
||||
description: 'Select one or more tags',
|
||||
required: false,
|
||||
refreshers: [],
|
||||
auth: frontAuth,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
try {
|
||||
const response = await makeRequest(
|
||||
auth,
|
||||
HttpMethod.GET,
|
||||
'/tags?limit=50'
|
||||
);
|
||||
const tags = response._results || [];
|
||||
return {
|
||||
disabled: false,
|
||||
options: tags.map((tag: any) => ({
|
||||
label: tag.name || tag.id,
|
||||
value: tag.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading tags',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const teammateIdDropdown = Property.Dropdown({
|
||||
displayName: 'Teammate ID',
|
||||
description: 'Select the teammate',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
auth: frontAuth,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
try {
|
||||
const response = await makeRequest(
|
||||
auth,
|
||||
HttpMethod.GET,
|
||||
'/teammates?limit=50'
|
||||
);
|
||||
const teammates = response._results || [];
|
||||
return {
|
||||
disabled: false,
|
||||
options: teammates.map((teammate: any) => ({
|
||||
label: teammate.username || teammate.first_name + ' ' + teammate.last_name || teammate.id,
|
||||
value: teammate.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading teammates',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const channelIdDropdown = Property.Dropdown({
|
||||
displayName: 'Channel ID',
|
||||
description: 'Select the channel',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
auth: frontAuth,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
try {
|
||||
const response = await makeRequest(
|
||||
auth,
|
||||
HttpMethod.GET,
|
||||
'/channels'
|
||||
);
|
||||
const channels = response._results || [];
|
||||
return {
|
||||
disabled: false,
|
||||
options: channels.map((channel: any) => ({
|
||||
label: channel.name || channel.id,
|
||||
value: channel.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading channels',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const accountIdDropdown = Property.Dropdown({
|
||||
displayName: 'Account ID',
|
||||
description: 'Select the account',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
auth: frontAuth,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
try {
|
||||
const response = await makeRequest(
|
||||
auth,
|
||||
HttpMethod.GET,
|
||||
'/accounts'
|
||||
);
|
||||
const accounts = response._results || [];
|
||||
return {
|
||||
disabled: false,
|
||||
options: accounts.map((account: any) => ({
|
||||
label: account.name || account.id,
|
||||
value: account.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading accounts',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const inboxIdDropdown = Property.Dropdown({
|
||||
displayName: 'Inbox ID',
|
||||
description: 'Select the inbox',
|
||||
required: false,
|
||||
refreshers: [],
|
||||
auth: frontAuth,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
try {
|
||||
const response = await makeRequest(
|
||||
auth,
|
||||
HttpMethod.GET,
|
||||
'/inboxes'
|
||||
);
|
||||
const inboxes = response._results || [];
|
||||
return {
|
||||
disabled: false,
|
||||
options: inboxes.map((inbox: any) => ({
|
||||
label: inbox.name || inbox.id,
|
||||
value: inbox.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading inboxes',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const linkIdDropdown = Property.Dropdown({
|
||||
displayName: 'Link ID',
|
||||
description: 'Select the link',
|
||||
required: false,
|
||||
refreshers: [],
|
||||
auth: frontAuth,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
try {
|
||||
const response = await makeRequest(
|
||||
auth,
|
||||
HttpMethod.GET,
|
||||
'/links'
|
||||
);
|
||||
const links = response._results || [];
|
||||
return {
|
||||
disabled: false,
|
||||
options: links.map((link: any) => ({
|
||||
label: link.name || link.id,
|
||||
value: link.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading links',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const linkidsDropdown = Property.MultiSelectDropdown({
|
||||
displayName: 'Link IDs',
|
||||
description: 'Select one or more links',
|
||||
required: false,
|
||||
refreshers: [],
|
||||
auth: frontAuth,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first',
|
||||
};
|
||||
}
|
||||
try {
|
||||
const response = await makeRequest(
|
||||
auth,
|
||||
HttpMethod.GET,
|
||||
'/links'
|
||||
);
|
||||
const links = response._results || [];
|
||||
return {
|
||||
disabled: false,
|
||||
options: links.map((link: any) => ({
|
||||
label: link.name || link.id,
|
||||
value: link.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Error loading links',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,264 @@
|
||||
import {
|
||||
createTrigger,
|
||||
TriggerStrategy,
|
||||
PiecePropValueSchema,
|
||||
Property,
|
||||
StaticPropsValue,
|
||||
AppConnectionValueForAuthProperty,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
HttpMethod,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { conversationIdDropdown } from '../common/dropdown';
|
||||
|
||||
const props = {
|
||||
conversation_id: conversationIdDropdown,
|
||||
};
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof frontAuth>, StaticPropsValue<typeof props>> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth, propsValue, lastFetchEpochMS }) => {
|
||||
const params: string[] = ['q[types]=comment', 'limit=15'];
|
||||
|
||||
const query = params.join('&');
|
||||
const response = await makeRequest(
|
||||
auth,
|
||||
HttpMethod.GET,
|
||||
`/events?${query}`
|
||||
);
|
||||
const events = response._results || [];
|
||||
const comments: any[] = [];
|
||||
|
||||
for (const event of events) {
|
||||
if (
|
||||
event.conversation &&
|
||||
event.conversation.id === propsValue.conversation_id &&
|
||||
event.type === 'comment'
|
||||
) {
|
||||
const emittedATMs = Math.floor(Number(event.emitted_at) * 1000);
|
||||
if (!lastFetchEpochMS || emittedATMs > lastFetchEpochMS) {
|
||||
comments.push({
|
||||
epochMilliSeconds: emittedATMs,
|
||||
data: event,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
return comments;
|
||||
},
|
||||
};
|
||||
|
||||
export const newComment = createTrigger({
|
||||
auth: frontAuth,
|
||||
name: 'newComment',
|
||||
displayName: 'New Comment',
|
||||
description: 'Fires when a new comment is posted on a conversation in Front.',
|
||||
props,
|
||||
sampleData: {
|
||||
_links: {
|
||||
self: 'https://api.example.com/events/evt_dummy1234',
|
||||
},
|
||||
id: 'evt_dummy1234',
|
||||
type: 'comment',
|
||||
emitted_at: 1700000000,
|
||||
conversation: {
|
||||
_links: {
|
||||
self: 'https://api.example.com/conversations/cnv_dummy5678',
|
||||
related: {
|
||||
events: 'https://api.example.com/conversations/cnv_dummy5678/events',
|
||||
followers:
|
||||
'https://api.example.com/conversations/cnv_dummy5678/followers',
|
||||
messages:
|
||||
'https://api.example.com/conversations/cnv_dummy5678/messages',
|
||||
comments:
|
||||
'https://api.example.com/conversations/cnv_dummy5678/comments',
|
||||
inboxes:
|
||||
'https://api.example.com/conversations/cnv_dummy5678/inboxes',
|
||||
last_message:
|
||||
'https://api.example.com/messages/msg_dummy9012?referer=conversation',
|
||||
},
|
||||
},
|
||||
id: 'cnv_dummy5678',
|
||||
subject: 'Re: test',
|
||||
status: 'assigned',
|
||||
status_id: 'sts_dummy0001',
|
||||
status_category: 'open',
|
||||
ticket_ids: ['SU-2'],
|
||||
assignee: {
|
||||
_links: {
|
||||
self: 'https://api.example.com/teammates/tea_dummy1',
|
||||
related: {
|
||||
inboxes: 'https://api.example.com/teammates/tea_dummy1/inboxes',
|
||||
conversations:
|
||||
'https://api.example.com/teammates/tea_dummy1/conversations',
|
||||
},
|
||||
},
|
||||
id: 'tea_dummy1',
|
||||
email: 'dummy.sender@example.com',
|
||||
username: 'dummyuser',
|
||||
first_name: 'Dummy',
|
||||
last_name: 'User',
|
||||
is_admin: true,
|
||||
is_available: true,
|
||||
is_blocked: false,
|
||||
type: 'user',
|
||||
custom_fields: {},
|
||||
},
|
||||
recipient: {
|
||||
_links: {
|
||||
related: {
|
||||
contact: 'https://api.example.com/contacts/crd_dummy2222',
|
||||
},
|
||||
},
|
||||
name: 'Dummy Recipient',
|
||||
handle: 'recipient@example.com',
|
||||
role: 'to',
|
||||
},
|
||||
tags: [
|
||||
{
|
||||
_links: {
|
||||
self: 'https://api.example.com/tags/tag_dummy1',
|
||||
related: {
|
||||
conversations:
|
||||
'https://api.example.com/tags/tag_dummy1/conversations',
|
||||
owner: 'https://api.example.com/teammates/tea_dummy1',
|
||||
parent_tag: null,
|
||||
children: null,
|
||||
},
|
||||
},
|
||||
id: 'tag_dummy1',
|
||||
name: 'Inbox',
|
||||
highlight: null,
|
||||
description: null,
|
||||
is_private: true,
|
||||
is_visible_in_conversation_lists: false,
|
||||
updated_at: 1700000100,
|
||||
created_at: 1700000100,
|
||||
},
|
||||
{
|
||||
_links: {
|
||||
self: 'https://api.example.com/tags/tag_dummy2',
|
||||
related: {
|
||||
conversations:
|
||||
'https://api.example.com/tags/tag_dummy2/conversations',
|
||||
owner: 'https://api.example.com/teams/team_dummy1',
|
||||
parent_tag: null,
|
||||
children: null,
|
||||
},
|
||||
},
|
||||
id: 'tag_dummy2',
|
||||
name: 'YELLOW_STAR',
|
||||
highlight: null,
|
||||
description: null,
|
||||
is_private: false,
|
||||
is_visible_in_conversation_lists: false,
|
||||
updated_at: 1700000200,
|
||||
created_at: 1700000150,
|
||||
},
|
||||
{
|
||||
_links: {
|
||||
self: 'https://api.example.com/tags/tag_dummy3',
|
||||
related: {
|
||||
conversations:
|
||||
'https://api.example.com/tags/tag_dummy3/conversations',
|
||||
owner: 'https://api.example.com/teams/team_dummy1',
|
||||
parent_tag: null,
|
||||
children: null,
|
||||
},
|
||||
},
|
||||
id: 'tag_dummy3',
|
||||
name: 'CHAT',
|
||||
highlight: null,
|
||||
description: null,
|
||||
is_private: false,
|
||||
is_visible_in_conversation_lists: false,
|
||||
updated_at: 1700000250,
|
||||
created_at: 1700000150,
|
||||
},
|
||||
],
|
||||
links: [
|
||||
{
|
||||
_links: {
|
||||
self: 'https://api.example.com/links/link_dummy1',
|
||||
},
|
||||
id: 'link_dummy1',
|
||||
name: 'test update link',
|
||||
type: 'web',
|
||||
external_url: 'https://example.com/',
|
||||
custom_fields: {},
|
||||
},
|
||||
],
|
||||
custom_fields: {},
|
||||
created_at: 1700000050,
|
||||
waiting_since: 1700000500,
|
||||
is_private: false,
|
||||
scheduled_reminders: [],
|
||||
metadata: {},
|
||||
},
|
||||
source: {
|
||||
_meta: {
|
||||
type: 'api',
|
||||
},
|
||||
data: null,
|
||||
},
|
||||
target: {
|
||||
_meta: {
|
||||
type: 'comment',
|
||||
},
|
||||
data: {
|
||||
_links: {
|
||||
self: 'https://api.example.com/comments/com_dummy1',
|
||||
related: {
|
||||
conversation: 'https://api.example.com/conversations/cnv_dummy5678',
|
||||
mentions: 'https://api.example.com/comments/com_dummy1/mentions',
|
||||
},
|
||||
},
|
||||
id: 'com_dummy1',
|
||||
body: 'This is a dummy comment for testing purposes.',
|
||||
posted_at: 1700000000,
|
||||
author: {
|
||||
_links: {
|
||||
self: 'https://api.example.com/teammates/tea_dummy1',
|
||||
related: {
|
||||
inboxes: 'https://api.example.com/teammates/tea_dummy1/inboxes',
|
||||
conversations:
|
||||
'https://api.example.com/teammates/tea_dummy1/conversations',
|
||||
},
|
||||
},
|
||||
id: 'tea_dummy1',
|
||||
email: 'dummy.sender@example.com',
|
||||
username: 'dummyuser',
|
||||
first_name: 'Dummy',
|
||||
last_name: 'User',
|
||||
is_admin: true,
|
||||
is_available: true,
|
||||
is_blocked: false,
|
||||
type: 'user',
|
||||
custom_fields: {},
|
||||
},
|
||||
attachments: [],
|
||||
is_pinned: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
type: TriggerStrategy.POLLING,
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async onEnable(context) {
|
||||
const { store, auth, propsValue } = context;
|
||||
await pollingHelper.onEnable(polling, { store, auth, propsValue });
|
||||
},
|
||||
async onDisable(context) {
|
||||
const { store, auth, propsValue } = context;
|
||||
await pollingHelper.onDisable(polling, { store, auth, propsValue });
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,241 @@
|
||||
import {
|
||||
createTrigger,
|
||||
TriggerStrategy,
|
||||
Property,
|
||||
PiecePropValueSchema,
|
||||
StaticPropsValue,
|
||||
AppConnectionValueForAuthProperty,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
HttpMethod,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
|
||||
import { conversationIdDropdown } from '../common/dropdown';
|
||||
|
||||
const props = {
|
||||
conversation_id: conversationIdDropdown,
|
||||
desired_state: Property.StaticDropdown({
|
||||
displayName: 'Desired State',
|
||||
description:
|
||||
'The state to trigger on (e.g., open, archived, deleted, assigned, etc.).',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Open', value: 'open' },
|
||||
{ label: 'Archived', value: 'archived' },
|
||||
{ label: 'Deleted', value: 'deleted' },
|
||||
{ label: 'Assigned', value: 'assigned' },
|
||||
{ label: 'Unassigned', value: 'unassigned' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
};
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof frontAuth>, StaticPropsValue<typeof props>> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth, propsValue, lastFetchEpochMS }) => {
|
||||
const { conversation_id, desired_state } = propsValue;
|
||||
const conv = await makeRequest(
|
||||
auth,
|
||||
HttpMethod.GET,
|
||||
`/conversations/${conversation_id}`
|
||||
);
|
||||
const stateChangedAt = conv.updated_at
|
||||
? Math.floor(Number(conv.updated_at) * 1000)
|
||||
: null;
|
||||
|
||||
// Only emit if the state matches and it's new since last poll
|
||||
if (
|
||||
conv.status === desired_state &&
|
||||
stateChangedAt !== null &&
|
||||
(!lastFetchEpochMS || stateChangedAt > lastFetchEpochMS)
|
||||
) {
|
||||
return [
|
||||
{
|
||||
epochMilliSeconds: stateChangedAt,
|
||||
data: conv,
|
||||
},
|
||||
];
|
||||
}
|
||||
return [];
|
||||
},
|
||||
};
|
||||
|
||||
export const newConversationStateChange = createTrigger({
|
||||
auth: frontAuth,
|
||||
name: 'newConversationStateChange',
|
||||
displayName: 'New Conversation State Change',
|
||||
description: 'Triggers when a conversation changes to a specified state.',
|
||||
props,
|
||||
sampleData: {
|
||||
_links: {
|
||||
self: 'https://example.api.frontapp.com/conversations/cnv_1jm05qco',
|
||||
related: {
|
||||
events:
|
||||
'https://example.api.frontapp.com/conversations/cnv_1jm05qco/events',
|
||||
followers:
|
||||
'https://example.api.frontapp.com/conversations/cnv_1jm05qco/followers',
|
||||
messages:
|
||||
'https://example.api.frontapp.com/conversations/cnv_1jm05qco/messages',
|
||||
comments:
|
||||
'https://example.api.frontapp.com/conversations/cnv_1jm05qco/comments',
|
||||
inboxes:
|
||||
'https://example.api.frontapp.com/conversations/cnv_1jm05qco/inboxes',
|
||||
last_message:
|
||||
'https://example.api.frontapp.com/messages/msg_326rt3vs?referer=conversation',
|
||||
},
|
||||
},
|
||||
id: 'cnv_1jm05qco',
|
||||
subject: 'Re: test',
|
||||
status: 'assigned',
|
||||
status_id: 'sts_695a3s',
|
||||
status_category: 'open',
|
||||
ticket_ids: ['SU-2'],
|
||||
assignee: {
|
||||
_links: {
|
||||
self: 'https://example.api.frontapp.com/teammates/tea_mfoko',
|
||||
related: {
|
||||
inboxes:
|
||||
'https://example.api.frontapp.com/teammates/tea_mfoko/inboxes',
|
||||
conversations:
|
||||
'https://example.api.frontapp.com/teammates/tea_mfoko/conversations',
|
||||
},
|
||||
},
|
||||
id: 'tea_mfoko',
|
||||
email: 'jon@example.com',
|
||||
username: 'jon',
|
||||
first_name: 'jon',
|
||||
last_name: 'deo',
|
||||
is_admin: true,
|
||||
is_available: true,
|
||||
is_blocked: false,
|
||||
type: 'user',
|
||||
custom_fields: {},
|
||||
},
|
||||
recipient: {
|
||||
_links: {
|
||||
related: {
|
||||
contact: 'https://example.api.frontapp.com/contacts/crd_4x1iwyw',
|
||||
},
|
||||
},
|
||||
name: 'jon deo',
|
||||
handle: 'jondeo@gmail.com',
|
||||
role: 'to',
|
||||
},
|
||||
tags: [
|
||||
{
|
||||
_links: {
|
||||
self: 'https://example.api.frontapp.com/tags/tag_6958vc',
|
||||
related: {
|
||||
conversations:
|
||||
'https://example.api.frontapp.com/tags/tag_6958vc/conversations',
|
||||
owner: 'https://example.api.frontapp.com/teammates/tea_mfoko',
|
||||
parent_tag: null,
|
||||
children: null,
|
||||
},
|
||||
},
|
||||
id: 'tag_6958vc',
|
||||
name: 'Inbox',
|
||||
highlight: null,
|
||||
description: null,
|
||||
is_private: true,
|
||||
is_visible_in_conversation_lists: false,
|
||||
updated_at: 1758518633.403,
|
||||
created_at: 1758518633.403,
|
||||
},
|
||||
{
|
||||
_links: {
|
||||
self: 'https://example.api.frontapp.com/tags/tag_695n8o',
|
||||
related: {
|
||||
conversations:
|
||||
'https://example.api.frontapp.com/tags/tag_695n8o/conversations',
|
||||
owner: 'https://example.api.frontapp.com/teams/tim_8t9ew',
|
||||
parent_tag: null,
|
||||
children: null,
|
||||
},
|
||||
},
|
||||
id: 'tag_695n8o',
|
||||
name: 'YELLOW_STAR',
|
||||
highlight: null,
|
||||
description: null,
|
||||
is_private: false,
|
||||
is_visible_in_conversation_lists: false,
|
||||
updated_at: 1758532572.491,
|
||||
created_at: 1758531672.777,
|
||||
},
|
||||
{
|
||||
_links: {
|
||||
self: 'https://example.api.frontapp.com/tags/tag_695n6w',
|
||||
related: {
|
||||
conversations:
|
||||
'https://example.api.frontapp.com/tags/tag_695n6w/conversations',
|
||||
owner: 'https://example.api.frontapp.com/teams/tim_8t9ew',
|
||||
parent_tag: null,
|
||||
children: null,
|
||||
},
|
||||
},
|
||||
id: 'tag_695n6w',
|
||||
name: 'CHAT',
|
||||
highlight: null,
|
||||
description: null,
|
||||
is_private: false,
|
||||
is_visible_in_conversation_lists: false,
|
||||
updated_at: 1758532572.5,
|
||||
created_at: 1758531672.726,
|
||||
},
|
||||
],
|
||||
links: [
|
||||
{
|
||||
_links: {
|
||||
self: 'https://example.api.frontapp.com/links/top_isetpk',
|
||||
},
|
||||
id: 'top_isetpk',
|
||||
name: 'test update link',
|
||||
type: 'web',
|
||||
external_url: 'https://example.com/',
|
||||
custom_fields: {},
|
||||
},
|
||||
],
|
||||
custom_fields: {},
|
||||
created_at: 1758531757.285,
|
||||
waiting_since: 1758534767,
|
||||
is_private: false,
|
||||
scheduled_reminders: [],
|
||||
metadata: {},
|
||||
},
|
||||
type: TriggerStrategy.POLLING,
|
||||
|
||||
async test(context) {
|
||||
const { store, auth, propsValue, files } = context;
|
||||
return await pollingHelper.test(polling, {
|
||||
store,
|
||||
auth,
|
||||
propsValue,
|
||||
files,
|
||||
});
|
||||
},
|
||||
async onEnable(context) {
|
||||
const { store, auth, propsValue } = context;
|
||||
await pollingHelper.onEnable(polling, { store, auth, propsValue });
|
||||
},
|
||||
|
||||
async onDisable(context) {
|
||||
const { store, auth, propsValue } = context;
|
||||
await pollingHelper.onDisable(polling, { store, auth, propsValue });
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const { store, auth, propsValue, files } = context;
|
||||
return await pollingHelper.poll(polling, {
|
||||
store,
|
||||
auth,
|
||||
propsValue,
|
||||
files,
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,218 @@
|
||||
import {
|
||||
createTrigger,
|
||||
TriggerStrategy,
|
||||
Property,
|
||||
StaticPropsValue,
|
||||
AppConnectionValueForAuthProperty,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
HttpMethod,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
|
||||
const props = {
|
||||
inbox_id: Property.ShortText({
|
||||
displayName: 'Inbox ID',
|
||||
description: 'The ID of the inbox to monitor for new inbound messages.',
|
||||
required: false,
|
||||
}),
|
||||
};
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof frontAuth>, StaticPropsValue<typeof props>> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth, propsValue, lastFetchEpochMS }) => {
|
||||
let query = `q[types]=inbound`;
|
||||
if (propsValue.inbox_id) {
|
||||
query += `&q[inboxes]=${propsValue.inbox_id}`;
|
||||
}
|
||||
const limit = 15;
|
||||
const response = await makeRequest(
|
||||
auth,
|
||||
HttpMethod.GET,
|
||||
`/events?${query}&limit=${limit}`
|
||||
);
|
||||
const events = response._results || [];
|
||||
const inboundMessages: any[] = [];
|
||||
|
||||
for (const event of events) {
|
||||
// Only include new events since last fetch
|
||||
const emittedAtMs = Math.floor(Number(event.emitted_at) * 1000);
|
||||
if (!lastFetchEpochMS || emittedAtMs > lastFetchEpochMS) {
|
||||
inboundMessages.push({
|
||||
epochMilliSeconds: emittedAtMs,
|
||||
data: event,
|
||||
});
|
||||
}
|
||||
}
|
||||
return inboundMessages;
|
||||
},
|
||||
};
|
||||
|
||||
export const newInboundMessage = createTrigger({
|
||||
auth: frontAuth,
|
||||
name: 'newInboundMessage',
|
||||
displayName: 'New Inbound Message',
|
||||
description: 'Fires when a new message is received in a shared inbox.',
|
||||
props,
|
||||
sampleData: {
|
||||
_links: {
|
||||
self: 'https://api.example.com/events/evt_dummy1234',
|
||||
},
|
||||
id: 'evt_dummy1234',
|
||||
type: 'inbound',
|
||||
emitted_at: 1700000000,
|
||||
conversation: {
|
||||
_links: {
|
||||
self: 'https://api.example.com/conversations/cnv_dummy5678',
|
||||
related: {
|
||||
events: 'https://api.example.com/conversations/cnv_dummy5678/events',
|
||||
followers:
|
||||
'https://api.example.com/conversations/cnv_dummy5678/followers',
|
||||
messages:
|
||||
'https://api.example.com/conversations/cnv_dummy5678/messages',
|
||||
comments:
|
||||
'https://api.example.com/conversations/cnv_dummy5678/comments',
|
||||
inboxes:
|
||||
'https://api.example.com/conversations/cnv_dummy5678/inboxes',
|
||||
last_message:
|
||||
'https://api.example.com/messages/msg_dummy9012?referer=conversation',
|
||||
},
|
||||
},
|
||||
id: 'cnv_dummy5678',
|
||||
subject: 'dummy subject',
|
||||
status: 'open',
|
||||
status_id: 'sts_dummy0001',
|
||||
status_category: 'unresolved',
|
||||
ticket_ids: ['tkt_dummy1111'],
|
||||
assignee: 'John Doe',
|
||||
recipient: {
|
||||
_links: {
|
||||
related: {
|
||||
contact: 'https://api.example.com/contacts/crd_dummy2222',
|
||||
},
|
||||
},
|
||||
name: 'Jane Doe',
|
||||
handle: 'jane.doe@example.com',
|
||||
role: 'to',
|
||||
},
|
||||
tags: ['urgent', 'test'],
|
||||
links: ['https://example.com'],
|
||||
custom_fields: {
|
||||
priority: 'high',
|
||||
},
|
||||
created_at: 1700001000,
|
||||
waiting_since: 1700000500,
|
||||
is_private: false,
|
||||
scheduled_reminders: [1700002000],
|
||||
metadata: {
|
||||
source: 'API',
|
||||
},
|
||||
},
|
||||
source: {
|
||||
_meta: {
|
||||
type: 'inboxes',
|
||||
},
|
||||
data: [
|
||||
{
|
||||
_links: {
|
||||
self: 'https://api.example.com/inboxes/inb_dummy3333',
|
||||
related: {
|
||||
channels:
|
||||
'https://api.example.com/inboxes/inb_dummy3333/channels',
|
||||
conversations:
|
||||
'https://api.example.com/inboxes/inb_dummy3333/conversations',
|
||||
teammates:
|
||||
'https://api.example.com/inboxes/inb_dummy3333/teammates',
|
||||
owner: 'https://api.example.com/teams/tim_dummy4444',
|
||||
},
|
||||
},
|
||||
id: 'inb_dummy3333',
|
||||
name: 'Dummy Inbox',
|
||||
is_private: true,
|
||||
is_public: false,
|
||||
custom_fields: {},
|
||||
address: 'dummy@example.com',
|
||||
send_as: 'dummy@example.com',
|
||||
type: 'gmail',
|
||||
},
|
||||
],
|
||||
},
|
||||
target: {
|
||||
_meta: {
|
||||
type: 'message',
|
||||
},
|
||||
data: {
|
||||
_links: {
|
||||
self: 'https://api.example.com/messages/msg_dummy9012',
|
||||
related: {
|
||||
conversation: 'https://api.example.com/conversations/cnv_dummy5678',
|
||||
message_seen: 'https://api.example.com/messages/msg_dummy9012/seen',
|
||||
},
|
||||
},
|
||||
id: 'msg_dummy9012',
|
||||
message_uid: 'dummyuid1234567890',
|
||||
type: 'email',
|
||||
is_inbound: true,
|
||||
created_at: 1700000100,
|
||||
blurb: 'This is a dummy message generated for testing.',
|
||||
body: 'This is a dummy message body.<br>',
|
||||
text: 'This is a dummy message text.\n',
|
||||
error_type: null,
|
||||
version: '1.0',
|
||||
subject: 'dummy message subject',
|
||||
draft_mode: false,
|
||||
metadata: {
|
||||
importance: 'low',
|
||||
},
|
||||
author: {
|
||||
name: 'Dummy Sender',
|
||||
email: 'sender@example.com',
|
||||
},
|
||||
recipients: [
|
||||
{
|
||||
_links: {
|
||||
related: {
|
||||
contact: 'https://api.example.com/contacts/crd_dummy5555',
|
||||
},
|
||||
},
|
||||
name: 'Recipient One',
|
||||
handle: 'recipient1@example.com',
|
||||
role: 'from',
|
||||
},
|
||||
{
|
||||
_links: {
|
||||
related: {
|
||||
contact: 'https://api.example.com/contacts/crd_dummy6666',
|
||||
},
|
||||
},
|
||||
name: 'Recipient Two',
|
||||
handle: 'recipient2@example.com',
|
||||
role: 'to',
|
||||
},
|
||||
],
|
||||
attachments: ['file1.pdf', 'image1.png'],
|
||||
signature: 'Best regards, Dummy Sender',
|
||||
is_draft: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
type: TriggerStrategy.POLLING,
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async onEnable(context) {
|
||||
const { store, auth, propsValue } = context;
|
||||
await pollingHelper.onEnable(polling, { store, auth, propsValue });
|
||||
},
|
||||
async onDisable(context) {
|
||||
const { store, auth, propsValue } = context;
|
||||
await pollingHelper.onDisable(polling, { store, auth, propsValue });
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,210 @@
|
||||
import {
|
||||
createTrigger,
|
||||
TriggerStrategy,
|
||||
Property,
|
||||
StaticPropsValue,
|
||||
AppConnectionValueForAuthProperty,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
HttpMethod,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
|
||||
const props = {
|
||||
inbox_id: Property.ShortText({
|
||||
displayName: 'Inbox ID',
|
||||
description: 'The ID of the inbox to monitor for new inbound messages.',
|
||||
required: false,
|
||||
}),
|
||||
};
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof frontAuth>, StaticPropsValue<typeof props>> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth, propsValue, lastFetchEpochMS }) => {
|
||||
// Fetch outbound and out_reply message events
|
||||
let query = `q[types]=outbound`;
|
||||
if (propsValue.inbox_id) {
|
||||
query += `&q[inboxes]=${propsValue.inbox_id}`;
|
||||
}
|
||||
const limit = 15;
|
||||
const response = await makeRequest(
|
||||
auth,
|
||||
HttpMethod.GET,
|
||||
`/events?${query}&limit=${limit}`
|
||||
);
|
||||
const events = response._results || [];
|
||||
const outboundMessages: any[] = [];
|
||||
|
||||
for (const event of events) {
|
||||
// Only include new events since last fetch
|
||||
const emittedAtMs = Math.floor(Number(event.emitted_at) * 1000);
|
||||
if (!lastFetchEpochMS || emittedAtMs > lastFetchEpochMS) {
|
||||
outboundMessages.push({
|
||||
epochMilliSeconds: emittedAtMs,
|
||||
data: event,
|
||||
});
|
||||
}
|
||||
}
|
||||
return outboundMessages;
|
||||
},
|
||||
};
|
||||
|
||||
export const newOutboundMessage = createTrigger({
|
||||
auth: frontAuth,
|
||||
name: 'newOutboundMessage',
|
||||
displayName: 'New Outbound Message',
|
||||
description: 'Fires when a message is sent or replied to in Front.',
|
||||
props,
|
||||
sampleData: {
|
||||
_links: {
|
||||
self: 'https://api.example.com/events/evt_dummy1234',
|
||||
},
|
||||
id: 'evt_dummy1234',
|
||||
type: 'outbound',
|
||||
emitted_at: 1700000000,
|
||||
conversation: {
|
||||
_links: {
|
||||
self: 'https://api.example.com/conversations/cnv_dummy5678',
|
||||
related: {
|
||||
events: 'https://api.example.com/conversations/cnv_dummy5678/events',
|
||||
followers:
|
||||
'https://api.example.com/conversations/cnv_dummy5678/followers',
|
||||
messages:
|
||||
'https://api.example.com/conversations/cnv_dummy5678/messages',
|
||||
comments:
|
||||
'https://api.example.com/conversations/cnv_dummy5678/comments',
|
||||
inboxes:
|
||||
'https://api.example.com/conversations/cnv_dummy5678/inboxes',
|
||||
last_message:
|
||||
'https://api.example.com/messages/msg_dummy9012?referer=conversation',
|
||||
},
|
||||
},
|
||||
id: 'cnv_dummy5678',
|
||||
subject: 'unsubscribe',
|
||||
status: 'archived',
|
||||
status_id: 'sts_dummy0001',
|
||||
status_category: 'resolved',
|
||||
ticket_ids: [],
|
||||
assignee: null,
|
||||
recipient: {
|
||||
_links: {
|
||||
related: {
|
||||
contact: 'https://api.example.com/contacts/crd_dummy2222',
|
||||
},
|
||||
},
|
||||
name: '',
|
||||
handle: 'unsubscribe_dummy@example.com',
|
||||
role: 'to',
|
||||
},
|
||||
tags: [],
|
||||
links: [],
|
||||
custom_fields: {},
|
||||
created_at: 1700001000,
|
||||
waiting_since: 1700000000,
|
||||
is_private: false,
|
||||
scheduled_reminders: [],
|
||||
metadata: {},
|
||||
},
|
||||
source: {
|
||||
_meta: {
|
||||
type: 'inboxes',
|
||||
},
|
||||
data: [
|
||||
{
|
||||
_links: {
|
||||
self: 'https://api.example.com/inboxes/inb_dummy3333',
|
||||
related: {
|
||||
channels:
|
||||
'https://api.example.com/inboxes/inb_dummy3333/channels',
|
||||
conversations:
|
||||
'https://api.example.com/inboxes/inb_dummy3333/conversations',
|
||||
teammates:
|
||||
'https://api.example.com/inboxes/inb_dummy3333/teammates',
|
||||
owner: 'https://api.example.com/teams/tim_dummy4444',
|
||||
},
|
||||
},
|
||||
id: 'inb_dummy3333',
|
||||
name: 'Dummy Inbox',
|
||||
is_private: false,
|
||||
is_public: true,
|
||||
custom_fields: {},
|
||||
address: 'dummy@example.com',
|
||||
send_as: 'dummy@example.com',
|
||||
type: 'gmail',
|
||||
},
|
||||
],
|
||||
},
|
||||
target: {
|
||||
_meta: {
|
||||
type: 'message',
|
||||
},
|
||||
data: {
|
||||
_links: {
|
||||
self: 'https://api.example.com/messages/msg_dummy9012',
|
||||
related: {
|
||||
conversation: 'https://api.example.com/conversations/cnv_dummy5678',
|
||||
message_seen: 'https://api.example.com/messages/msg_dummy9012/seen',
|
||||
},
|
||||
},
|
||||
id: 'msg_dummy9012',
|
||||
message_uid: 'dummyuid1234567890',
|
||||
type: 'email',
|
||||
is_inbound: false,
|
||||
created_at: 1700000000,
|
||||
blurb: 'This message was automatically generated.',
|
||||
body: 'This message was automatically generated.<br>',
|
||||
text: 'This message was automatically generated.\n',
|
||||
error_type: null,
|
||||
version: null,
|
||||
subject: 'unsubscribe',
|
||||
draft_mode: null,
|
||||
metadata: {},
|
||||
author: null,
|
||||
recipients: [
|
||||
{
|
||||
_links: {
|
||||
related: {
|
||||
contact: 'https://api.example.com/contacts/crd_dummy5555',
|
||||
},
|
||||
},
|
||||
name: 'Dummy Sender',
|
||||
handle: 'sender@example.com',
|
||||
role: 'from',
|
||||
},
|
||||
{
|
||||
_links: {
|
||||
related: {
|
||||
contact: 'https://api.example.com/contacts/crd_dummy2222',
|
||||
},
|
||||
},
|
||||
name: '',
|
||||
handle: 'unsubscribe_dummy@example.com',
|
||||
role: 'to',
|
||||
},
|
||||
],
|
||||
attachments: [],
|
||||
signature: null,
|
||||
is_draft: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
type: TriggerStrategy.POLLING,
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async onEnable(context) {
|
||||
const { store, auth, propsValue } = context;
|
||||
await pollingHelper.onEnable(polling, { store, auth, propsValue });
|
||||
},
|
||||
async onDisable(context) {
|
||||
const { store, auth, propsValue } = context;
|
||||
await pollingHelper.onDisable(polling, { store, auth, propsValue });
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,250 @@
|
||||
import {
|
||||
createTrigger,
|
||||
TriggerStrategy,
|
||||
PiecePropValueSchema,
|
||||
Property,
|
||||
StaticPropsValue,
|
||||
AppConnectionValueForAuthProperty,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
HttpMethod,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { frontAuth } from '../common/auth';
|
||||
import { makeRequest } from '../common/client';
|
||||
import { conversationIdDropdown } from '../common/dropdown';
|
||||
|
||||
const props = {
|
||||
conversation_id: conversationIdDropdown,
|
||||
};
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof frontAuth>, StaticPropsValue<typeof props>> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth, propsValue, lastFetchEpochMS }) => {
|
||||
const params: string[] = ['q[types]=tag', 'limit=50'];
|
||||
const query = params.join('&');
|
||||
const response = await makeRequest(
|
||||
auth,
|
||||
HttpMethod.GET,
|
||||
`/events?${query}`
|
||||
);
|
||||
const events = response._results || [];
|
||||
const tagEvents: any[] = [];
|
||||
|
||||
for (const event of events) {
|
||||
if (
|
||||
event.conversation &&
|
||||
event.conversation.id === propsValue.conversation_id &&
|
||||
event.type === 'tag'
|
||||
) {
|
||||
const emittedAtMs = Math.floor(Number(event.emitted_at) * 1000);
|
||||
if (!lastFetchEpochMS || emittedAtMs > lastFetchEpochMS) {
|
||||
tagEvents.push({
|
||||
epochMilliSeconds: emittedAtMs,
|
||||
data: event,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
return tagEvents;
|
||||
},
|
||||
};
|
||||
|
||||
export const newTagAddedToMessage = createTrigger({
|
||||
auth: frontAuth,
|
||||
name: 'newTagAddedToMessage',
|
||||
displayName: 'New Tag Added to Message',
|
||||
description: 'Fires when a tag is applied to a conversation.',
|
||||
props,
|
||||
sampleData: {
|
||||
_links: {
|
||||
self: 'https://api.example.com/events/evt_dummy1234',
|
||||
},
|
||||
id: 'evt_dummy1234',
|
||||
type: 'tag',
|
||||
emitted_at: 1700000000,
|
||||
conversation: {
|
||||
_links: {
|
||||
self: 'https://api.example.com/conversations/cnv_dummy5678',
|
||||
related: {
|
||||
events: 'https://api.example.com/conversations/cnv_dummy5678/events',
|
||||
followers:
|
||||
'https://api.example.com/conversations/cnv_dummy5678/followers',
|
||||
messages:
|
||||
'https://api.example.com/conversations/cnv_dummy5678/messages',
|
||||
comments:
|
||||
'https://api.example.com/conversations/cnv_dummy5678/comments',
|
||||
inboxes:
|
||||
'https://api.example.com/conversations/cnv_dummy5678/inboxes',
|
||||
last_message:
|
||||
'https://api.example.com/messages/msg_dummy9012?referer=conversation',
|
||||
},
|
||||
},
|
||||
id: 'cnv_dummy5678',
|
||||
subject: 'Re: test',
|
||||
status: 'assigned',
|
||||
status_id: 'sts_dummy0001',
|
||||
status_category: 'open',
|
||||
ticket_ids: ['SU-2'],
|
||||
assignee: {
|
||||
_links: {
|
||||
self: 'https://api.example.com/teammates/tea_dummy1',
|
||||
related: {
|
||||
inboxes: 'https://api.example.com/teammates/tea_dummy1/inboxes',
|
||||
conversations:
|
||||
'https://api.example.com/teammates/tea_dummy1/conversations',
|
||||
},
|
||||
},
|
||||
id: 'tea_dummy1',
|
||||
email: 'dummy.sender@example.com',
|
||||
username: 'dummyuser',
|
||||
first_name: 'Dummy',
|
||||
last_name: 'User',
|
||||
is_admin: true,
|
||||
is_available: true,
|
||||
is_blocked: false,
|
||||
type: 'user',
|
||||
custom_fields: {},
|
||||
},
|
||||
recipient: {
|
||||
_links: {
|
||||
related: {
|
||||
contact: 'https://api.example.com/contacts/crd_dummy2222',
|
||||
},
|
||||
},
|
||||
name: 'Dummy Recipient',
|
||||
handle: 'recipient@example.com',
|
||||
role: 'to',
|
||||
},
|
||||
tags: [
|
||||
{
|
||||
_links: {
|
||||
self: 'https://api.example.com/tags/tag_dummy1',
|
||||
related: {
|
||||
conversations:
|
||||
'https://api.example.com/tags/tag_dummy1/conversations',
|
||||
owner: 'https://api.example.com/teammates/tea_dummy1',
|
||||
parent_tag: null,
|
||||
children: null,
|
||||
},
|
||||
},
|
||||
id: 'tag_dummy1',
|
||||
name: 'Inbox',
|
||||
highlight: null,
|
||||
description: null,
|
||||
is_private: true,
|
||||
is_visible_in_conversation_lists: false,
|
||||
updated_at: 1700000100,
|
||||
created_at: 1700000100,
|
||||
},
|
||||
{
|
||||
_links: {
|
||||
self: 'https://api.example.com/tags/tag_dummy2',
|
||||
related: {
|
||||
conversations:
|
||||
'https://api.example.com/tags/tag_dummy2/conversations',
|
||||
owner: 'https://api.example.com/teams/team_dummy1',
|
||||
parent_tag: null,
|
||||
children: null,
|
||||
},
|
||||
},
|
||||
id: 'tag_dummy2',
|
||||
name: 'YELLOW_STAR',
|
||||
highlight: null,
|
||||
description: null,
|
||||
is_private: false,
|
||||
is_visible_in_conversation_lists: false,
|
||||
updated_at: 1700000200,
|
||||
created_at: 1700000150,
|
||||
},
|
||||
{
|
||||
_links: {
|
||||
self: 'https://api.example.com/tags/tag_dummy3',
|
||||
related: {
|
||||
conversations:
|
||||
'https://api.example.com/tags/tag_dummy3/conversations',
|
||||
owner: 'https://api.example.com/teams/team_dummy1',
|
||||
parent_tag: null,
|
||||
children: null,
|
||||
},
|
||||
},
|
||||
id: 'tag_dummy3',
|
||||
name: 'CHAT',
|
||||
highlight: null,
|
||||
description: null,
|
||||
is_private: false,
|
||||
is_visible_in_conversation_lists: false,
|
||||
updated_at: 1700000250,
|
||||
created_at: 1700000150,
|
||||
},
|
||||
],
|
||||
links: [
|
||||
{
|
||||
_links: {
|
||||
self: 'https://api.example.com/links/link_dummy1',
|
||||
},
|
||||
id: 'link_dummy1',
|
||||
name: 'test update link',
|
||||
type: 'web',
|
||||
external_url: 'https://example.com/',
|
||||
custom_fields: {},
|
||||
},
|
||||
],
|
||||
custom_fields: {},
|
||||
created_at: 1700000050,
|
||||
waiting_since: 1700000500,
|
||||
is_private: false,
|
||||
scheduled_reminders: [],
|
||||
metadata: {},
|
||||
},
|
||||
source: {
|
||||
_meta: {
|
||||
type: 'api',
|
||||
},
|
||||
data: null,
|
||||
},
|
||||
target: {
|
||||
_meta: {
|
||||
type: 'tag',
|
||||
},
|
||||
data: {
|
||||
_links: {
|
||||
self: 'https://api.example.com/tags/tag_dummy3',
|
||||
related: {
|
||||
conversations:
|
||||
'https://api.example.com/tags/tag_dummy3/conversations',
|
||||
owner: 'https://api.example.com/teams/team_dummy1',
|
||||
parent_tag: null,
|
||||
children: null,
|
||||
},
|
||||
},
|
||||
id: 'tag_dummy3',
|
||||
name: 'CHAT',
|
||||
highlight: null,
|
||||
description: null,
|
||||
is_private: false,
|
||||
is_visible_in_conversation_lists: false,
|
||||
updated_at: 1700000250,
|
||||
created_at: 1700000150,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
type: TriggerStrategy.POLLING,
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async onEnable(context) {
|
||||
const { store, auth, propsValue } = context;
|
||||
await pollingHelper.onEnable(polling, { store, auth, propsValue });
|
||||
},
|
||||
async onDisable(context) {
|
||||
const { store, auth, propsValue } = context;
|
||||
await pollingHelper.onDisable(polling, { store, auth, propsValue });
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
});
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "../../../../dist/out-tsc",
|
||||
"declaration": true,
|
||||
"types": ["node"]
|
||||
},
|
||||
"include": ["src/**/*.ts"]
|
||||
}
|
||||
Reference in New Issue
Block a user