Add Activepieces integration for workflow automation

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

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

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

View File

@@ -0,0 +1,92 @@
{
"Helpdesk management software": "Helpdesk-Management-Software",
"Location": "Standort",
"The location of your Zoho Desk account.": "Der Standort Ihres Zoho Desk Kontos.",
"zoho.eu (Europe)": "zoho.eu (Europa)",
"zoho.com (United States)": "zoho.com (Vereinigte Staaten)",
"zoho.com.au (Australia)": "zoho.com.au (Australien)",
"zoho.jp (Japan)": "zoho.jp (Japan)",
"zoho.in (India)": "zoho.in (Indien)",
"zohocloud.ca (Canada)": "zohocloud.ca (Canada)",
"Authentication for Zoho Desk": "Authentifizierung für Zoho Desk",
"List tickets.": "Tickets auflisten.",
"Create Ticket": "Ticket erstellen",
"Find Contact": "Kontakt finden",
"Custom API Call": "Eigener API-Aufruf",
"List tickets": "Tickets auflisten",
"Creates a new ticket.": "Erstellt ein neues Ticket.",
"Finds an existing contact by email.": "Findet einen bestehenden Kontakt per E-Mail.",
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
"Organization": "Organisation",
"include": "einbeziehen",
"Department": "Abteilung",
"Contact ID": "Kontakt-ID",
"Subject": "Betreff",
"Description": "Beschreibung",
"Email": "E-Mail",
"Phone": "Telefon",
"Status": "Status",
"Priority": "Priorität",
"Category": "Kategorie",
"Sub Category": "Unterkategorie",
"Due Date": "Fälligkeitsdatum",
"Channel": "Kanal",
"Assignee ID": "Assignee ID",
"Product ID": "Produkt-ID",
"Classification": "Klassifizierung",
"Language": "Sprache",
"Entity Skills": "Entitätsfertigkeiten",
"Custom Fields": "Eigene Felder",
"Method": "Methode",
"Headers": "Kopfzeilen",
"Query Parameters": "Abfrageparameter",
"Body": "Körper",
"Response is Binary ?": "Antwort ist binär?",
"No Error on Failure": "Kein Fehler bei Fehler",
"Timeout (in seconds)": "Timeout (in Sekunden)",
"Organization ID": "Organisations-ID",
"Additional information related to the tickets.": "Weitere Informationen über die Eintrittskarten.",
"ID of the contact raising the ticket": "ID des Kontakts zur Erhöhung des Tickets",
"Subject of the ticket": "Betreff des Tickets",
"Description of the issue in the ticket": "Beschreibung des Problems im Ticket",
"Email address of the contact raising the ticket": "E-Mail-Adresse des Kontakts zur Erhöhung des Tickets",
"Phone number of the contact raising the ticket": "Telefonnummer des Kontakts zur Erhöhung des Tickets",
"Status of the ticket": "Status des Tickets",
"Priority of the ticket": "Priorität des Tickets",
"Category of the ticket": "Kategorie des Tickets",
"Sub-category of the ticket": "Unterkategorie des Tickets",
"Due date for the ticket (ISO format)": "Enddatum des Tickets (ISO-Format)",
"Channel through which the ticket is created": "Kanal über den das Ticket erstellt wird",
"ID of the agent to whom the ticket is assigned": "ID des Agenten, dem das Ticket zugewiesen ist",
"ID of the product to which the ticket belongs": "ID des Produkts, zu dem das Ticket gehört",
"Classification of the ticket": "Klassifizierung des Tickets",
"Language of the ticket": "Sprache des Tickets",
"Array of skill IDs associated with the ticket": "Array der Fähigkeiten-IDs, die dem Ticket zugeordnet sind",
"Custom fields in the ticket": "Benutzerdefinierte Felder im Ticket",
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
"Select organization ID to include in auth headers.": "Wählen Sie die Organisations-ID aus, die in die Autth-Kopfzeilen aufgenommen werden soll.",
"contacts": "kontakte",
"products": "produkte",
"departments": "abteilungen",
"team": "team",
"isRead": "isLesen",
"assignee": "assignee",
"Open": "Öffnen",
"On Hold": "Halten",
"Escalated": "Eskaliert",
"Closed": "Geschlossen",
"Low": "Niedrig",
"Medium": "Mittel",
"High": "Hoch",
"Urgent": "Dringend",
"Chat": "Chat",
"Web": "Web",
"Social": "Soziale",
"GET": "ERHALTEN",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "LÖSCHEN",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,92 @@
{
"Helpdesk management software": "Software de gestión de helpdesk",
"Location": "Ubicación",
"The location of your Zoho Desk account.": "La ubicación de su cuenta de Zoho Desk.",
"zoho.eu (Europe)": "zoho.eu (Europa)",
"zoho.com (United States)": "zoho.com (Estados Unidos)",
"zoho.com.au (Australia)": "zoho.com.au (Tamaño)",
"zoho.jp (Japan)": "zoho.jp (Japón)",
"zoho.in (India)": "zoho.in (India)",
"zohocloud.ca (Canada)": "zohocloud.ca (Canada)",
"Authentication for Zoho Desk": "Autenticación para Zoho Desk",
"List tickets.": "Listar Tickets.",
"Create Ticket": "Crear Ticket",
"Find Contact": "Encontrar contacto",
"Custom API Call": "Llamada API personalizada",
"List tickets": "Listar tickets",
"Creates a new ticket.": "Crea un nuevo Ticket.",
"Finds an existing contact by email.": "Encuentra un contacto existente por correo electrónico.",
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
"Organization": "Organización",
"include": "incluir",
"Department": "Departamento",
"Contact ID": "ID de contacto",
"Subject": "Asunto",
"Description": "Descripción",
"Email": "E-mail",
"Phone": "Teléfono",
"Status": "Estado",
"Priority": "Prioridad",
"Category": "Categoría",
"Sub Category": "Subcategoría",
"Due Date": "Fecha de fin",
"Channel": "Canal",
"Assignee ID": "Assignee ID",
"Product ID": "ID producto",
"Classification": "Clasificación",
"Language": "Idioma",
"Entity Skills": "Habilidades de la entidad",
"Custom Fields": "Campos personalizados",
"Method": "Método",
"Headers": "Encabezados",
"Query Parameters": "Parámetros de consulta",
"Body": "Cuerpo",
"Response is Binary ?": "¿Respuesta es binaria?",
"No Error on Failure": "No hay ningún error en fallo",
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
"Organization ID": "ID de la organización",
"Additional information related to the tickets.": "Información adicional relacionada con los billetes.",
"ID of the contact raising the ticket": "ID del contacto que levanta el ticket",
"Subject of the ticket": "Asunto del ticket",
"Description of the issue in the ticket": "Descripción del problema en el ticket",
"Email address of the contact raising the ticket": "Dirección de correo electrónico del contacto elevando el ticket",
"Phone number of the contact raising the ticket": "Número de teléfono del contacto elevando el ticket",
"Status of the ticket": "Estado del ticket",
"Priority of the ticket": "Prioridad del ticket",
"Category of the ticket": "Categoría del ticket",
"Sub-category of the ticket": "Sub-categoría del ticket",
"Due date for the ticket (ISO format)": "Fecha límite para el ticket (formato ISO)",
"Channel through which the ticket is created": "Canal a través del cual se crea el ticket",
"ID of the agent to whom the ticket is assigned": "ID del agente al que se asigna el ticket",
"ID of the product to which the ticket belongs": "ID del producto al que pertenece el ticket",
"Classification of the ticket": "Clasificación del ticket",
"Language of the ticket": "Idioma del ticket",
"Array of skill IDs associated with the ticket": "Arreglo de IDs de habilidades asociadas con el ticket",
"Custom fields in the ticket": "Campos personalizados en el ticket",
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDFs, imágenes, etc.",
"Select organization ID to include in auth headers.": "Seleccione el ID de la organización para incluir en las cabeceras de autenticación.",
"contacts": "contactos",
"products": "productos",
"departments": "departamentos",
"team": "equipo",
"isRead": "es leído",
"assignee": "assignee",
"Open": "Abrir",
"On Hold": "En espera",
"Escalated": "Escalado",
"Closed": "Cerrado",
"Low": "Baja",
"Medium": "Medio",
"High": "Alta",
"Urgent": "Urgente",
"Chat": "Chatear",
"Web": "Web",
"Social": "Social",
"GET": "RECOGER",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "BORRAR",
"HEAD": "LIMPIO"
}

View File

@@ -0,0 +1,92 @@
{
"Helpdesk management software": "Logiciel de gestion de helpdesk",
"Location": "Localisation",
"The location of your Zoho Desk account.": "La localisation de votre compte Zoho Desk.",
"zoho.eu (Europe)": "zoho.eu (Europe)",
"zoho.com (United States)": "zoho.com (États-Unis)",
"zoho.com.au (Australia)": "zoho.com.au (Australie)",
"zoho.jp (Japan)": "zoho.jp (Japon)",
"zoho.in (India)": "zoho.in (Inde)",
"zohocloud.ca (Canada)": "zohocloud.ca (Canada)",
"Authentication for Zoho Desk": "Authentification pour Zoho Desk",
"List tickets.": "Liste des tickets.",
"Create Ticket": "Créer un ticket",
"Find Contact": "Trouver un contact",
"Custom API Call": "Appel d'API personnalisé",
"List tickets": "Lister les tickets",
"Creates a new ticket.": "Crée un nouveau ticket.",
"Finds an existing contact by email.": "Trouve un contact existant par email.",
"Make a custom API call to a specific endpoint": "Passer un appel API personnalisé à un endpoint spécifique",
"Organization": "Organisation",
"include": "Inclure",
"Department": "Service",
"Contact ID": "ID du contact",
"Subject": "Sujet",
"Description": "Libellé",
"Email": "Courriel",
"Phone": "Téléphone",
"Status": "Statut",
"Priority": "Priorité",
"Category": "Catégorie",
"Sub Category": "Sous-catégorie",
"Due Date": "Date de fin",
"Channel": "Chaîne",
"Assignee ID": "Assignee ID",
"Product ID": "ID du produit",
"Classification": "Classification",
"Language": "Langue",
"Entity Skills": "Compétences de l'entité",
"Custom Fields": "Champs personnalisés",
"Method": "Méthode",
"Headers": "En-têtes",
"Query Parameters": "Paramètres de requête",
"Body": "Corps",
"Response is Binary ?": "La réponse est Binaire ?",
"No Error on Failure": "Aucune erreur en cas d'échec",
"Timeout (in seconds)": "Délai d'expiration (en secondes)",
"Organization ID": "ID de l'organisation",
"Additional information related to the tickets.": "Informations complémentaires sur les billets.",
"ID of the contact raising the ticket": "ID du contact soulevant le ticket",
"Subject of the ticket": "Sujet du ticket",
"Description of the issue in the ticket": "Description du problème dans le ticket",
"Email address of the contact raising the ticket": "Adresse e-mail du contact en soulevant le ticket",
"Phone number of the contact raising the ticket": "Numéro de téléphone du contact en soulevant le ticket",
"Status of the ticket": "Statut du ticket",
"Priority of the ticket": "Priorité du ticket",
"Category of the ticket": "Catégorie du ticket",
"Sub-category of the ticket": "Sous-catégorie du ticket",
"Due date for the ticket (ISO format)": "Date d'échéance du ticket (format ISO)",
"Channel through which the ticket is created": "Canal par lequel le ticket est créé",
"ID of the agent to whom the ticket is assigned": "ID de l'agent à qui le ticket est assigné",
"ID of the product to which the ticket belongs": "ID du produit auquel appartient le ticket",
"Classification of the ticket": "Classification du ticket",
"Language of the ticket": "Langue du ticket",
"Array of skill IDs associated with the ticket": "Tableau des identifiants de compétence associés au ticket",
"Custom fields in the ticket": "Champs personnalisés dans le ticket",
"Authorization headers are injected automatically from your connection.": "Les en-têtes d'autorisation sont injectés automatiquement à partir de votre connexion.",
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDFs, les images, etc.",
"Select organization ID to include in auth headers.": "Sélectionnez l'ID de l'organisation à inclure dans les en-têtes d'authentification.",
"contacts": "contacts",
"products": "produits",
"departments": "départements",
"team": "équipe",
"isRead": "est lu",
"assignee": "assignee",
"Open": "Ouvert",
"On Hold": "En attente",
"Escalated": "Escalade",
"Closed": "Fermé",
"Low": "Bas",
"Medium": "Moyenne",
"High": "Élevé",
"Urgent": "Urgent",
"Chat": "Discuter",
"Web": "Web",
"Social": "Réseaux sociaux",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,92 @@
{
"Helpdesk management software": "ヘルプデスク管理ソフトウェア",
"Location": "場所",
"The location of your Zoho Desk account.": "Zoho Deskアカウントの場所。",
"zoho.eu (Europe)": "zoho.eu (ヨーロッパ)",
"zoho.com (United States)": "zoho.com (アメリカ合衆国)",
"zoho.com.au (Australia)": "zoho.com.au (オーストラリア)",
"zoho.jp (Japan)": "zoho.jp (日本)",
"zoho.in (India)": "zoho.in (インド)",
"zohocloud.ca (Canada)": "zohocloud.ca (Canada)",
"Authentication for Zoho Desk": "Zoho Deskの認証",
"List tickets.": "チケットを一覧にします。",
"Create Ticket": "チケットを作成",
"Find Contact": "連絡先を探す",
"Custom API Call": "カスタムAPI通話",
"List tickets": "チケット一覧",
"Creates a new ticket.": "新しいチケットを作成します。",
"Finds an existing contact by email.": "電子メールで既存の連絡先を検索します。",
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
"Organization": "組織",
"include": "含む",
"Department": "部門",
"Contact ID": "連絡先ID",
"Subject": "件名",
"Description": "説明",
"Email": "Eメールアドレス",
"Phone": "電話番号",
"Status": "Status",
"Priority": "優先度",
"Category": "カテゴリ",
"Sub Category": "サブカテゴリ",
"Due Date": "締切日",
"Channel": "チャンネル",
"Assignee ID": "Assignee ID",
"Product ID": "商品ID",
"Classification": "分類",
"Language": "言語",
"Entity Skills": "エンティティスキル",
"Custom Fields": "カスタムフィールド",
"Method": "方法",
"Headers": "ヘッダー",
"Query Parameters": "クエリパラメータ",
"Body": "本文",
"Response is Binary ?": "応答はバイナリですか?",
"No Error on Failure": "失敗時にエラーはありません",
"Timeout (in seconds)": "タイムアウト(秒)",
"Organization ID": "組織 ID",
"Additional information related to the tickets.": "チケットに関連する追加情報。",
"ID of the contact raising the ticket": "チケットを発行している連絡先のID",
"Subject of the ticket": "チケットの件名",
"Description of the issue in the ticket": "チケットのチケットの説明",
"Email address of the contact raising the ticket": "チケットを発行している連絡先のメールアドレス",
"Phone number of the contact raising the ticket": "チケットを発行している連絡先の電話番号",
"Status of the ticket": "チケットのステータス",
"Priority of the ticket": "チケットの優先度",
"Category of the ticket": "チケットのカテゴリ",
"Sub-category of the ticket": "チケットサブカテゴリ",
"Due date for the ticket (ISO format)": "チケットの期限 (ISO形式)",
"Channel through which the ticket is created": "チケットが作成されたチャンネル",
"ID of the agent to whom the ticket is assigned": "チケットが割り当てられたエージェントの ID",
"ID of the product to which the ticket belongs": "チケットが所属している商品のID",
"Classification of the ticket": "チケットの分類",
"Language of the ticket": "チケットの言語",
"Array of skill IDs associated with the ticket": "チケットに関連付けられたスキル ID の配列",
"Custom fields in the ticket": "チケットのカスタムフィールド",
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
"Select organization ID to include in auth headers.": "認証ヘッダーに含める組織 ID を選択します。",
"contacts": "連絡先",
"products": "商品",
"departments": "部門",
"team": "チーム",
"isRead": "isRead",
"assignee": "assignee",
"Open": "開く",
"On Hold": "保留中",
"Escalated": "エスカレート",
"Closed": "クローズ済み",
"Low": "低い",
"Medium": "ミディアム",
"High": "高い",
"Urgent": "urgent",
"Chat": "チャット",
"Web": "ウェブ",
"Social": "ソーシャル",
"GET": "取得",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "削除",
"HEAD": "頭"
}

View File

@@ -0,0 +1,92 @@
{
"Helpdesk management software": "Helpdesk beheer software",
"Location": "Locatie",
"The location of your Zoho Desk account.": "De locatie van je Zoho Desk account.",
"zoho.eu (Europe)": "zoho.eu (Europa)",
"zoho.com (United States)": "zoho.com (Verenigde Staten)",
"zoho.com.au (Australia)": "zoho.com.au (Australia)",
"zoho.jp (Japan)": "zoho.jp (Japan)",
"zoho.in (India)": "zoho.in (India)",
"zohocloud.ca (Canada)": "zohocloud.ca (Canada)",
"Authentication for Zoho Desk": "Authenticatie voor Zoho Desk",
"List tickets.": "Toon tickets.",
"Create Ticket": "Ticket aanmaken",
"Find Contact": "Contactpersoon zoeken",
"Custom API Call": "Custom API Call",
"List tickets": "Tickets weergeven",
"Creates a new ticket.": "Maakt een nieuw ticket.",
"Finds an existing contact by email.": "Vindt een bestaand contact per e-mail.",
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
"Organization": "Rekening",
"include": "insluiten",
"Department": "Afdeling",
"Contact ID": "Contact ID",
"Subject": "Onderwerp",
"Description": "Beschrijving",
"Email": "E-mail",
"Phone": "Telefoonnummer",
"Status": "status",
"Priority": "Prioriteit",
"Category": "categorie",
"Sub Category": "Sub Categorie",
"Due Date": "Inleverdatum",
"Channel": "Kanaal",
"Assignee ID": "Assignee ID",
"Product ID": "Product ID",
"Classification": "Classificatie",
"Language": "Taal",
"Entity Skills": "Entiteit Vaardigheden",
"Custom Fields": "Aangepaste velden",
"Method": "Methode",
"Headers": "Kopteksten",
"Query Parameters": "Query parameters",
"Body": "Lichaam",
"Response is Binary ?": "Antwoord is binair?",
"No Error on Failure": "Geen fout bij fout",
"Timeout (in seconds)": "Time-out (in seconden)",
"Organization ID": "Organisatie ID",
"Additional information related to the tickets.": "Aanvullende informatie met betrekking tot de tickets.",
"ID of the contact raising the ticket": "ID van het contact waarmee het ticket wordt verhoogd",
"Subject of the ticket": "Onderwerp van de ticket",
"Description of the issue in the ticket": "Beschrijving van het probleem in het ticket",
"Email address of the contact raising the ticket": "E-mailadres van de contactpersoon die het ticket verhoogt",
"Phone number of the contact raising the ticket": "Telefoonnummer van de contactpersoon die het ticket verhoogt",
"Status of the ticket": "Status van de ticket",
"Priority of the ticket": "Prioriteit van de ticket",
"Category of the ticket": "Categorie van de ticket",
"Sub-category of the ticket": "Subcategorie van het ticket",
"Due date for the ticket (ISO format)": "Vervaldatum voor het ticket (ISO formaat)",
"Channel through which the ticket is created": "Kanaal waarmee het ticket is aangemaakt",
"ID of the agent to whom the ticket is assigned": "ID van de agent aan wie de ticket is toegewezen",
"ID of the product to which the ticket belongs": "ID van het product waar de ticket bij hoort",
"Classification of the ticket": "Classificatie van het ticket",
"Language of the ticket": "Taal van het ticket",
"Array of skill IDs associated with the ticket": "Array van vaardigheids-IDs die zijn gekoppeld aan het ticket",
"Custom fields in the ticket": "Aangepaste velden in het ticket",
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
"Select organization ID to include in auth headers.": "Selecteer organisatie-ID om op te nemen in de autorisatieheaders.",
"contacts": "contactpersonen",
"products": "product(en)",
"departments": "afdelingen",
"team": "team",
"isRead": "Gelezen",
"assignee": "assignee",
"Open": "Open",
"On Hold": "In de wacht",
"Escalated": "Geëscaleerd",
"Closed": "gesloten",
"Low": "laag",
"Medium": "Middelgroot",
"High": "hoog",
"Urgent": "Dringend",
"Chat": "Chatten",
"Web": "Internet",
"Social": "Sociaal",
"GET": "KRIJG",
"POST": "POSTE",
"PATCH": "BEKIJK",
"PUT": "PUT",
"DELETE": "VERWIJDEREN",
"HEAD": "HOOFD"
}

View File

@@ -0,0 +1,92 @@
{
"Helpdesk management software": "Software de gerenciamento Helpdesk",
"Location": "Local:",
"The location of your Zoho Desk account.": "A localização da sua conta Zoho Desk.",
"zoho.eu (Europe)": "zoho.eu (Europa)",
"zoho.com (United States)": "zoho.com (Estados Unidos)",
"zoho.com.au (Australia)": "zoho.com.au (Austrália)",
"zoho.jp (Japan)": "zoho.jp (Japão)",
"zoho.in (India)": "zoho.in (Índia)",
"zohocloud.ca (Canada)": "zohocloud.ca (Canada)",
"Authentication for Zoho Desk": "Autenticação para Zoho Desk",
"List tickets.": "Listar bilhetes.",
"Create Ticket": "Criar Ticket",
"Find Contact": "Localizar contato",
"Custom API Call": "Chamada de API personalizada",
"List tickets": "Lista de pedidos",
"Creates a new ticket.": "Cria um novo ticket.",
"Finds an existing contact by email.": "Localiza um contato existente por e-mail.",
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
"Organization": "Cliente",
"include": "incluir",
"Department": "Departamento",
"Contact ID": "ID do contato",
"Subject": "Cargo",
"Description": "Descrição",
"Email": "e-mail",
"Phone": "Smartphone",
"Status": "Estado",
"Priority": "Prioridade",
"Category": "categoria",
"Sub Category": "Sub Categoria",
"Due Date": "Data de vencimento",
"Channel": "Canal",
"Assignee ID": "Assignee ID",
"Product ID": "ID do Produto",
"Classification": "Classificação",
"Language": "IDIOMA",
"Entity Skills": "Habilidades da Entidade",
"Custom Fields": "Campos Personalizados",
"Method": "Método",
"Headers": "Cabeçalhos",
"Query Parameters": "Parâmetros da consulta",
"Body": "Conteúdo",
"Response is Binary ?": "A resposta é binária ?",
"No Error on Failure": "Nenhum erro no Failure",
"Timeout (in seconds)": "Tempo limite (em segundos)",
"Organization ID": "ID da organização",
"Additional information related to the tickets.": "Informação adicional relacionada aos tickets.",
"ID of the contact raising the ticket": "ID do contato levantando o ticket",
"Subject of the ticket": "Assunto do ticket",
"Description of the issue in the ticket": "Descrição da issue no ticket",
"Email address of the contact raising the ticket": "Endereço de e-mail do contato levantando o ticket",
"Phone number of the contact raising the ticket": "Número de telefone do contato aumentando o ticket",
"Status of the ticket": "Status do ticket",
"Priority of the ticket": "Prioridade do ticket",
"Category of the ticket": "Categoria do ticket",
"Sub-category of the ticket": "Subcategoria do ticket",
"Due date for the ticket (ISO format)": "Data limite para o pedido (formato ISO)",
"Channel through which the ticket is created": "Canal através do qual o ticket foi criado",
"ID of the agent to whom the ticket is assigned": "ID do agente para quem o ticket foi atribuído",
"ID of the product to which the ticket belongs": "ID do produto ao qual o ticket pertence",
"Classification of the ticket": "Classificação do ticket",
"Language of the ticket": "Idioma do ticket",
"Array of skill IDs associated with the ticket": "Array de IDs de habilidade associados com o bilhete",
"Custom fields in the ticket": "Campos personalizados no Ticket",
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
"Select organization ID to include in auth headers.": "Selecione o ID da organização para incluir no cabeçalho de autenticação.",
"contacts": "contatos",
"products": "produtos",
"departments": "departamentos",
"team": "equipe",
"isRead": "Liderar",
"assignee": "assignee",
"Open": "Abertas",
"On Hold": "Em espera",
"Escalated": "escalado",
"Closed": "Fechado",
"Low": "baixa",
"Medium": "Média",
"High": "alta",
"Urgent": "Urgente",
"Chat": "Bate-papo",
"Web": "Web",
"Social": "Sócio",
"GET": "OBTER",
"POST": "POSTAR",
"PATCH": "COMPRAR",
"PUT": "COLOCAR",
"DELETE": "EXCLUIR",
"HEAD": "CABEÇA"
}

View File

@@ -0,0 +1,91 @@
{
"Zoho Desk": "Рабочий стол Zoho",
"Helpdesk management software": "Программа для управления Helpdesk",
"Location": "Местоположение",
"The location of your Zoho Desk account.": "Расположение вашего аккаунта Zoho Desk.",
"zoho.eu (Europe)": "zoho.eu (Европа)",
"zoho.com (United States)": "zoho.com (Соединенные Штаты)",
"zoho.com.au (Australia)": "zoho.com.au (Австралия)",
"zoho.jp (Japan)": "zoho.jp (Япония)",
"zoho.in (India)": "zoho.in (Индия)",
"zohocloud.ca (Canada)": "zohocloud.ca (Canada)",
"Authentication for Zoho Desk": "Аутентификация для Zoho Desk",
"List tickets.": "Список заявок.",
"Create Ticket": "Создать тикет",
"Find Contact": "Найти контакт",
"Custom API Call": "Пользовательский вызов API",
"List tickets": "Список заявок",
"Creates a new ticket.": "Создает новую Заявку.",
"Finds an existing contact by email.": "Поиск существующего контакта по электронной почте.",
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
"Organization": "Организация",
"include": "включать",
"Department": "Отдел",
"Contact ID": "ID контакта",
"Subject": "Тема",
"Description": "Description",
"Email": "Почта",
"Phone": "Телефон",
"Status": "Status",
"Priority": "Приоритет",
"Category": "Категория",
"Sub Category": "Подкатегория",
"Due Date": "Срок сдачи",
"Channel": "Канал",
"Assignee ID": "Assignee ID",
"Product ID": "ID товара",
"Classification": "Классификация",
"Language": "Язык",
"Entity Skills": "Навыки сущности",
"Custom Fields": "Пользовательские поля",
"Method": "Метод",
"Headers": "Заголовки",
"Query Parameters": "Параметры запроса",
"Body": "Тело",
"No Error on Failure": "Нет ошибок при ошибке",
"Timeout (in seconds)": "Таймаут (в секундах)",
"Organization ID": "ID Организации",
"Additional information related to the tickets.": "Дополнительная информация о билетах.",
"ID of the contact raising the ticket": "ID контакта, поднявшего заявку",
"Subject of the ticket": "Тема заявки",
"Description of the issue in the ticket": "Описание проблемы в тикете",
"Email address of the contact raising the ticket": "Адрес электронной почты контактного лица",
"Phone number of the contact raising the ticket": "Телефонный номер контакта",
"Status of the ticket": "Статус заявки",
"Priority of the ticket": "Приоритет тикета",
"Category of the ticket": "Категория заявки",
"Sub-category of the ticket": "Подкатегория заявки",
"Due date for the ticket (ISO format)": "Дата окончания заявки (в формате ISO)",
"Channel through which the ticket is created": "Канал, через который создается заявка",
"ID of the agent to whom the ticket is assigned": "ID агента, которому назначена заявка",
"ID of the product to which the ticket belongs": "ID продукта, к которому принадлежит заявка",
"Classification of the ticket": "Классификация заявки",
"Language of the ticket": "Язык заявки",
"Array of skill IDs associated with the ticket": "Массив идентификаторов навыков, связанных с картой",
"Custom fields in the ticket": "Пользовательские поля в заявке",
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
"Select organization ID to include in auth headers.": "Выберите ID организации для включения в заголовки авторизации.",
"contacts": "контакты",
"products": "товары",
"departments": "отделы",
"team": "команда",
"isRead": "непрочитано",
"assignee": "assignee",
"Open": "Открыть",
"On Hold": "На удержании",
"Escalated": "Эскалация",
"Closed": "Закрыто",
"Low": "Низкий",
"Medium": "Средний",
"High": "Высокий",
"Urgent": "Срочно",
"Chat": "Чат",
"Web": "Веб",
"Social": "Соцсети",
"GET": "ПОЛУЧИТЬ",
"POST": "ПОСТ",
"PATCH": "ПАТЧ",
"PUT": "ПОКУПИТЬ",
"DELETE": "УДАЛИТЬ",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,92 @@
{
"Helpdesk management software": "Helpdesk management software",
"Location": "Location",
"The location of your Zoho Desk account.": "The location of your Zoho Desk account.",
"zoho.eu (Europe)": "zoho.eu (Europe)",
"zoho.com (United States)": "zoho.com (United States)",
"zoho.com.au (Australia)": "zoho.com.au (Australia)",
"zoho.jp (Japan)": "zoho.jp (Japan)",
"zoho.in (India)": "zoho.in (India)",
"zohocloud.ca (Canada)": "zohocloud.ca (Canada)",
"Authentication for Zoho Desk": "Authentication for Zoho Desk",
"List tickets.": "List tickets.",
"Create Ticket": "Create Ticket",
"Find Contact": "Find Contact",
"Custom API Call": "Custom API Call",
"List tickets": "List tickets",
"Creates a new ticket.": "Creates a new ticket.",
"Finds an existing contact by email.": "Finds an existing contact by email.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Organization": "Organization",
"include": "include",
"Department": "Department",
"Contact ID": "Contact ID",
"Subject": "Subject",
"Description": "Description",
"Email": "Email",
"Phone": "Phone",
"Status": "Status",
"Priority": "Priority",
"Category": "Category",
"Sub Category": "Sub Category",
"Due Date": "Due Date",
"Channel": "Channel",
"Assignee ID": "Assignee ID",
"Product ID": "Product ID",
"Classification": "Classification",
"Language": "Language",
"Entity Skills": "Entity Skills",
"Custom Fields": "Custom Fields",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Organization ID": "Organization ID",
"Additional information related to the tickets.": "Additional information related to the tickets.",
"ID of the contact raising the ticket": "ID of the contact raising the ticket",
"Subject of the ticket": "Subject of the ticket",
"Description of the issue in the ticket": "Description of the issue in the ticket",
"Email address of the contact raising the ticket": "Email address of the contact raising the ticket",
"Phone number of the contact raising the ticket": "Phone number of the contact raising the ticket",
"Status of the ticket": "Status of the ticket",
"Priority of the ticket": "Priority of the ticket",
"Category of the ticket": "Category of the ticket",
"Sub-category of the ticket": "Sub-category of the ticket",
"Due date for the ticket (ISO format)": "Due date for the ticket (ISO format)",
"Channel through which the ticket is created": "Channel through which the ticket is created",
"ID of the agent to whom the ticket is assigned": "ID of the agent to whom the ticket is assigned",
"ID of the product to which the ticket belongs": "ID of the product to which the ticket belongs",
"Classification of the ticket": "Classification of the ticket",
"Language of the ticket": "Language of the ticket",
"Array of skill IDs associated with the ticket": "Array of skill IDs associated with the ticket",
"Custom fields in the ticket": "Custom fields in the ticket",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"Select organization ID to include in auth headers.": "Select organization ID to include in auth headers.",
"contacts": "contacts",
"products": "products",
"departments": "departments",
"team": "team",
"isRead": "isRead",
"assignee": "assignee",
"Open": "Open",
"On Hold": "On Hold",
"Escalated": "Escalated",
"Closed": "Closed",
"Low": "Low",
"Medium": "Medium",
"High": "High",
"Urgent": "Urgent",
"Chat": "Chat",
"Web": "Web",
"Social": "Social",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,91 @@
{
"Zoho Desk": "Zoho Desk",
"Helpdesk management software": "Helpdesk management software",
"Location": "Location",
"The location of your Zoho Desk account.": "The location of your Zoho Desk account.",
"zoho.eu (Europe)": "zoho.eu (Europe)",
"zoho.com (United States)": "zoho.com (United States)",
"zoho.com.au (Australia)": "zoho.com.au (Australia)",
"zoho.jp (Japan)": "zoho.jp (Japan)",
"zoho.in (India)": "zoho.in (India)",
"zohocloud.ca (Canada)": "zohocloud.ca (Canada)",
"Authentication for Zoho Desk": "Authentication for Zoho Desk",
"List tickets.": "List tickets.",
"Create Ticket": "Create Ticket",
"Find Contact": "Find Contact",
"Custom API Call": "Custom API Call",
"List tickets": "List tickets",
"Creates a new ticket.": "Creates a new ticket.",
"Finds an existing contact by email.": "Finds an existing contact by email.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Organization": "Organization",
"include": "include",
"Department": "Department",
"Contact ID": "Contact ID",
"Subject": "Subject",
"Description": "Description",
"Email": "Email",
"Phone": "Phone",
"Status": "Status",
"Priority": "Priority",
"Category": "Category",
"Sub Category": "Sub Category",
"Due Date": "Due Date",
"Channel": "Channel",
"Assignee ID": "Assignee ID",
"Product ID": "Product ID",
"Classification": "Classification",
"Language": "Language",
"Entity Skills": "Entity Skills",
"Custom Fields": "Custom Fields",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"Organization ID": "Organization ID",
"Additional information related to the tickets.": "Additional information related to the tickets.",
"ID of the contact raising the ticket": "ID of the contact raising the ticket",
"Subject of the ticket": "Subject of the ticket",
"Description of the issue in the ticket": "Description of the issue in the ticket",
"Email address of the contact raising the ticket": "Email address of the contact raising the ticket",
"Phone number of the contact raising the ticket": "Phone number of the contact raising the ticket",
"Status of the ticket": "Status of the ticket",
"Priority of the ticket": "Priority of the ticket",
"Category of the ticket": "Category of the ticket",
"Sub-category of the ticket": "Sub-category of the ticket",
"Due date for the ticket (ISO format)": "Due date for the ticket (ISO format)",
"Channel through which the ticket is created": "Channel through which the ticket is created",
"ID of the agent to whom the ticket is assigned": "ID of the agent to whom the ticket is assigned",
"ID of the product to which the ticket belongs": "ID of the product to which the ticket belongs",
"Classification of the ticket": "Classification of the ticket",
"Language of the ticket": "Language of the ticket",
"Array of skill IDs associated with the ticket": "Array of skill IDs associated with the ticket",
"Custom fields in the ticket": "Custom fields in the ticket",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"Select organization ID to include in auth headers.": "Select organization ID to include in auth headers.",
"contacts": "contacts",
"products": "products",
"departments": "departments",
"team": "team",
"isRead": "isRead",
"assignee": "assignee",
"Open": "Open",
"On Hold": "On Hold",
"Escalated": "Escalated",
"Closed": "Closed",
"Low": "Low",
"Medium": "Medium",
"High": "High",
"Urgent": "Urgent",
"Chat": "Chat",
"Web": "Web",
"Social": "Social",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,92 @@
{
"Helpdesk management software": "Helpdesk management software",
"Location": "Location",
"The location of your Zoho Desk account.": "The location of your Zoho Desk account.",
"zoho.eu (Europe)": "zoho.eu (Europe)",
"zoho.com (United States)": "zoho.com (United States)",
"zoho.com.au (Australia)": "zoho.com.au (Australia)",
"zoho.jp (Japan)": "zoho.jp (Japan)",
"zoho.in (India)": "zoho.in (India)",
"zohocloud.ca (Canada)": "zohocloud.ca (Canada)",
"Authentication for Zoho Desk": "Authentication for Zoho Desk",
"List tickets.": "List tickets.",
"Create Ticket": "Create Ticket",
"Find Contact": "Find Contact",
"Custom API Call": "自定义 API 呼叫",
"List tickets": "List tickets",
"Creates a new ticket.": "Creates a new ticket.",
"Finds an existing contact by email.": "Finds an existing contact by email.",
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
"Organization": "Organization",
"include": "include",
"Department": "Department",
"Contact ID": "Contact ID",
"Subject": "Subject",
"Description": "描述",
"Email": "电子邮件地址",
"Phone": "Phone",
"Status": "状态",
"Priority": "Priority",
"Category": "Category",
"Sub Category": "Sub Category",
"Due Date": "Due Date",
"Channel": "Channel",
"Assignee ID": "Assignee ID",
"Product ID": "Product ID",
"Classification": "Classification",
"Language": "Language",
"Entity Skills": "Entity Skills",
"Custom Fields": "Custom Fields",
"Method": "方法",
"Headers": "信头",
"Query Parameters": "查询参数",
"Body": "正文内容",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "失败时没有错误",
"Timeout (in seconds)": "超时(秒)",
"Organization ID": "Organization ID",
"Additional information related to the tickets.": "Additional information related to the tickets.",
"ID of the contact raising the ticket": "ID of the contact raising the ticket",
"Subject of the ticket": "Subject of the ticket",
"Description of the issue in the ticket": "Description of the issue in the ticket",
"Email address of the contact raising the ticket": "Email address of the contact raising the ticket",
"Phone number of the contact raising the ticket": "Phone number of the contact raising the ticket",
"Status of the ticket": "Status of the ticket",
"Priority of the ticket": "Priority of the ticket",
"Category of the ticket": "Category of the ticket",
"Sub-category of the ticket": "Sub-category of the ticket",
"Due date for the ticket (ISO format)": "Due date for the ticket (ISO format)",
"Channel through which the ticket is created": "Channel through which the ticket is created",
"ID of the agent to whom the ticket is assigned": "ID of the agent to whom the ticket is assigned",
"ID of the product to which the ticket belongs": "ID of the product to which the ticket belongs",
"Classification of the ticket": "Classification of the ticket",
"Language of the ticket": "Language of the ticket",
"Array of skill IDs associated with the ticket": "Array of skill IDs associated with the ticket",
"Custom fields in the ticket": "Custom fields in the ticket",
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"Select organization ID to include in auth headers.": "Select organization ID to include in auth headers.",
"contacts": "contacts",
"products": "产品",
"departments": "departments",
"team": "团队",
"isRead": "isRead",
"assignee": "assignee",
"Open": "Open",
"On Hold": "On Hold",
"Escalated": "Escalated",
"Closed": "Closed",
"Low": "Low",
"Medium": "Medium",
"High": "High",
"Urgent": "Urgent",
"Chat": "Chat",
"Web": "Web",
"Social": "Social",
"GET": "获取",
"POST": "帖子",
"PATCH": "PATCH",
"PUT": "弹出",
"DELETE": "删除",
"HEAD": "黑色"
}

View File

@@ -0,0 +1,46 @@
import {
OAuth2PropertyValue,
createPiece,
PiecePropValueSchema,
} from '@activepieces/pieces-framework';
import { PieceCategory } from '@activepieces/shared';
import { createCustomApiCallAction } from '@activepieces/pieces-common';
import { listTicketsAction } from './lib/actions/list-tickets';
import { createTicketAction } from './lib/actions/create-ticket';
import { organizationId } from './lib/common/props';
import { findContactAction } from './lib/actions/find-contact';
import { zohoDeskAuth } from './lib/common/auth';
export const piecesZohoDesk = createPiece({
displayName: 'Zoho Desk',
description: 'Helpdesk management software',
auth: zohoDeskAuth,
categories: [PieceCategory.CUSTOMER_SUPPORT],
minimumSupportedRelease: '0.36.1',
logoUrl: 'https://cdn.activepieces.com/pieces/zoho-desk.png',
authors: ['volubile', 'kishanprmr'],
actions: [
listTicketsAction,
createTicketAction,
findContactAction,
createCustomApiCallAction({
baseUrl: (auth) => {
const authValue = auth as PiecePropValueSchema<typeof zohoDeskAuth>;
const location = authValue.props?.['location'] ?? 'zoho.com';
return `https://desk.${location}/api/v1`;
},
auth: zohoDeskAuth,
authMapping: async (auth) => ({
Authorization: `Zoho-oauthtoken ${(auth as OAuth2PropertyValue).access_token}`,
}),
extraProps: {
orgId: organizationId({
displayName: 'Organization ID',
description: 'Select organization ID to include in auth headers.',
required: false,
}),
},
}),
],
triggers: [],
});

View File

@@ -0,0 +1,185 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { zohoDeskAuth } from '../common/auth';
import { zohoDeskApiCall } from '../common';
import { departmentId, organizationId } from '../common/props';
export const createTicketAction = createAction({
auth: zohoDeskAuth,
name: 'create_ticket',
displayName: 'Create Ticket',
description: 'Creates a new ticket.',
props: {
orgId: organizationId({ displayName: 'Organization', required: true }),
departmentId: departmentId({ displayName: 'Department', required: true }),
contactId: Property.ShortText({
displayName: 'Contact ID',
required: false,
description: 'ID of the contact raising the ticket',
}),
subject: Property.ShortText({
displayName: 'Subject',
required: true,
description: 'Subject of the ticket',
}),
description: Property.LongText({
displayName: 'Description',
required: true,
description: 'Description of the issue in the ticket',
}),
email: Property.ShortText({
displayName: 'Email',
required: false,
description: 'Email address of the contact raising the ticket',
}),
phone: Property.ShortText({
displayName: 'Phone',
required: false,
description: 'Phone number of the contact raising the ticket',
}),
status: Property.StaticDropdown({
displayName: 'Status',
required: false,
description: 'Status of the ticket',
options: {
options: [
{ label: 'Open', value: 'Open' },
{ label: 'On Hold', value: 'On Hold' },
{ label: 'Escalated', value: 'Escalated' },
{ label: 'Closed', value: 'Closed' },
],
},
defaultValue: 'Open',
}),
priority: Property.StaticDropdown({
displayName: 'Priority',
required: false,
description: 'Priority of the ticket',
options: {
options: [
{ label: 'Low', value: 'Low' },
{ label: 'Medium', value: 'Medium' },
{ label: 'High', value: 'High' },
{ label: 'Urgent', value: 'Urgent' },
],
},
defaultValue: 'Medium',
}),
category: Property.ShortText({
displayName: 'Category',
required: false,
description: 'Category of the ticket',
}),
subCategory: Property.ShortText({
displayName: 'Sub Category',
required: false,
description: 'Sub-category of the ticket',
}),
dueDate: Property.DateTime({
displayName: 'Due Date',
required: false,
description: 'Due date for the ticket (ISO format)',
}),
channel: Property.StaticDropdown({
displayName: 'Channel',
required: false,
description: 'Channel through which the ticket is created',
options: {
options: [
{ label: 'Email', value: 'Email' },
{ label: 'Phone', value: 'Phone' },
{ label: 'Chat', value: 'Chat' },
{ label: 'Web', value: 'Web' },
{ label: 'Social', value: 'Social' },
],
},
defaultValue: 'Web',
}),
assigneeId: Property.ShortText({
displayName: 'Assignee ID',
required: false,
description: 'ID of the agent to whom the ticket is assigned',
}),
productId: Property.ShortText({
displayName: 'Product ID',
required: false,
description: 'ID of the product to which the ticket belongs',
}),
classification: Property.ShortText({
displayName: 'Classification',
required: false,
description: 'Classification of the ticket',
}),
language: Property.ShortText({
displayName: 'Language',
required: false,
description: 'Language of the ticket',
defaultValue: 'English',
}),
entitySkills: Property.Array({
displayName: 'Entity Skills',
required: false,
description: 'Array of skill IDs associated with the ticket',
}),
customFields: Property.Object({
displayName: 'Custom Fields',
required: false,
description: 'Custom fields in the ticket',
}),
},
async run({ propsValue, auth }) {
const {
orgId,
departmentId,
contactId,
subject,
description,
email,
phone,
status,
priority,
category,
subCategory,
dueDate,
channel,
assigneeId,
productId,
classification,
language,
entitySkills,
customFields,
} = propsValue;
const requestBody: Record<string, any> = {
departmentId,
subject,
description,
};
if (contactId) requestBody['contactId'] = contactId;
if (email) requestBody['email'] = email;
if (phone) requestBody['phone'] = phone;
if (status) requestBody['status'] = status;
if (priority) requestBody['priority'] = priority;
if (category) requestBody['category'] = category;
if (subCategory) requestBody['subCategory'] = subCategory;
if (dueDate) requestBody['dueDate'] = dueDate;
if (channel) requestBody['channel'] = channel;
if (assigneeId) requestBody['assigneeId'] = assigneeId;
if (productId) requestBody['productId'] = productId;
if (classification) requestBody['classification'] = classification;
if (language) requestBody['language'] = language;
if (entitySkills && entitySkills.length > 0) requestBody['entitySkills'] = entitySkills;
if (customFields) requestBody['cf'] = customFields;
const response = await zohoDeskApiCall({
auth,
method: HttpMethod.POST,
resourceUri: '/tickets',
orgId,
body: requestBody,
});
return response;
},
});

View File

@@ -0,0 +1,45 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { zohoDeskApiCall } from '../common';
import { zohoDeskAuth } from '../common/auth';
import { organizationId } from '../common/props';
import { HttpMethod } from '@activepieces/pieces-common';
import { isNil } from '@activepieces/shared';
export const findContactAction = createAction({
auth: zohoDeskAuth,
name: 'find-contact',
displayName: 'Find Contact',
description: 'Finds an existing contact by email.',
props: {
orgId: organizationId({ displayName: 'Organization', required: true }),
email: Property.ShortText({
displayName: 'Email',
required: true,
}),
},
async run(context) {
const response = await zohoDeskApiCall({
auth: context.auth,
method: HttpMethod.GET,
resourceUri: '/contacts/search',
orgId: context.propsValue.orgId,
query: {
email: context.propsValue.email,
},
});
if (isNil(response) || response === '') {
return {
found: false,
result: [],
};
}
const contacts = response as { data: Record<string, any>[] };
return {
found: contacts.data.length > 0,
result: contacts.data,
};
},
});

View File

@@ -0,0 +1,46 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { zohoDeskAuth } from '../common/auth';
import { zohoDeskApiCall } from '../common';
import { organizationId } from '../common/props';
export const listTicketsAction = createAction({
auth: zohoDeskAuth,
name: 'list_tickets',
description: 'List tickets',
displayName: 'List tickets.',
props: {
orgId: organizationId({ displayName: 'Organization', required: true }),
include: Property.StaticMultiSelectDropdown({
displayName: 'include',
required: false,
description: 'Additional information related to the tickets.',
options: {
disabled: false,
options: [
{ label: 'contacts', value: 'contacts' },
{ label: 'products', value: 'products' },
{ label: 'departments', value: 'departments' },
{ label: 'team', value: 'team' },
{ label: 'isRead', value: 'isRead' },
{ label: 'assignee', value: 'assignee' },
],
},
}),
},
async run({ propsValue, auth }) {
const queryParams: Record<string, string> = {};
if (propsValue.include) queryParams['include'] = propsValue.include.join(',');
const response = await zohoDeskApiCall({
auth,
method: HttpMethod.GET,
resourceUri: '/tickets',
orgId: propsValue.orgId,
query: queryParams,
});
return response;
},
});

View File

@@ -0,0 +1,60 @@
import { PieceAuth, Property } from '@activepieces/pieces-framework';
export const zohoDeskAuth = PieceAuth.OAuth2({
props: {
location: Property.StaticDropdown({
displayName: 'Location',
description: 'The location of your Zoho Desk account.',
required: true,
options: {
options: [
{
label: 'zoho.eu (Europe)',
value: 'zoho.eu',
},
{
label: 'zoho.com (United States)',
value: 'zoho.com',
},
{
label: 'zoho.com.au (Australia)',
value: 'zoho.com.au',
},
{
label: 'zoho.jp (Japan)',
value: 'zoho.jp',
},
{
label: 'zoho.in (India)',
value: 'zoho.in',
},
{
label: 'zohocloud.ca (Canada)',
value: 'zohocloud.ca',
},
],
},
}),
},
description: 'Authentication for Zoho Desk',
scope: [
'Desk.tickets.ALL',
'Desk.tasks.ALL',
'Desk.settings.ALL',
'Desk.events.ALL',
'Desk.contacts.READ',
'Desk.contacts.WRITE',
'Desk.contacts.UPDATE',
'Desk.contacts.CREATE',
'Desk.basic.READ',
'Desk.basic.CREATE',
'Desk.search.READ',
'Desk.articles.READ',
'Desk.articles.CREATE',
'Desk.articles.UPDATE',
'Desk.articles.DELETE',
],
authUrl: 'https://accounts.{location}/oauth/v2/auth',
tokenUrl: 'https://accounts.{location}/oauth/v2/token',
required: true,
});

View File

@@ -0,0 +1,59 @@
import {
httpClient,
HttpHeaders,
HttpMessageBody,
HttpMethod,
HttpRequest,
QueryParams,
} from '@activepieces/pieces-common';
import { PiecePropValueSchema } from '@activepieces/pieces-framework';
import { zohoDeskAuth } from './auth';
export type ZohoDeskApiCallParams = {
auth: PiecePropValueSchema<typeof zohoDeskAuth>;
orgId?: string;
method: HttpMethod;
resourceUri: string;
query?: Record<string, string | number | string[] | undefined>;
body?: any;
};
export async function zohoDeskApiCall<T extends HttpMessageBody>({
auth,
orgId,
method,
resourceUri,
query,
body,
}: ZohoDeskApiCallParams): Promise<T> {
const location = auth.props?.['location'] ?? 'zoho.com';
const baseUrl = `https://desk.${location}/api/v1`;
const qs: QueryParams = {};
if (query) {
for (const [key, value] of Object.entries(query)) {
if (value !== null && value !== undefined) {
qs[key] = String(value);
}
}
}
const headers: HttpHeaders = {
Authorization: `Zoho-oauthtoken ${auth.access_token}`,
};
if (orgId) {
headers['orgId'] = orgId;
}
const request: HttpRequest = {
method,
url: baseUrl + resourceUri,
headers,
queryParams: qs,
body,
};
const response = await httpClient.sendRequest<T>(request);
return response.body;
}

View File

@@ -0,0 +1,90 @@
import { HttpMethod } from '@activepieces/pieces-common';
import { PiecePropValueSchema, Property } from '@activepieces/pieces-framework';
import { zohoDeskApiCall } from '.';
import { zohoDeskAuth } from './auth';
interface DropdownParams {
displayName: string;
description?: string;
required: boolean;
}
export const organizationId = (params: DropdownParams) =>
Property.Dropdown({
auth: zohoDeskAuth,
displayName: params.displayName,
description: params.description,
refreshers: [],
required: params.required,
options: async ({ auth }) => {
if (!auth) {
return {
placeholder: 'Please connect your account first.',
options: [],
disabled: true,
};
}
const authValue = auth as PiecePropValueSchema<typeof zohoDeskAuth>;
const response = await zohoDeskApiCall<{ data: { id: string; companyName: string }[] }>({
auth: authValue,
method: HttpMethod.GET,
resourceUri: '/organizations',
});
return {
disabled: false,
options: response.data.map((org) => {
return {
label: org.companyName,
value: org.id,
};
}),
};
},
});
export const departmentId = (params: DropdownParams) =>
Property.Dropdown({
auth: zohoDeskAuth,
displayName: params.displayName,
description: params.description,
refreshers: ['orgId'],
required: params.required,
options: async ({ auth, orgId }) => {
if (!auth) {
return {
placeholder: 'Please connect your account first.',
options: [],
disabled: true,
};
}
if (!orgId) {
return {
placeholder: 'Please select organization first.',
options: [],
disabled: true,
};
}
const authValue = auth as PiecePropValueSchema<typeof zohoDeskAuth>;
const response = await zohoDeskApiCall<{ data: { id: string; name: string }[] }>({
auth: authValue,
method: HttpMethod.GET,
resourceUri: `/departments`,
orgId: orgId as string,
});
return {
disabled: false,
options: response.data.map((department) => {
return {
label: department.name,
value: department.id,
};
}),
};
},
});