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,110 @@
|
||||
{
|
||||
"Zoho Campaigns is an email marketing platform for managing mailing lists, sending campaigns, tracking engagement, and automating subscriber workflows.": "Zoho Campaigns ist eine E-Mail-Marketing-Plattform für das Verwalten von Mailinglisten, das Versenden von Kampagnen, das Tracking von Engagements und die Automatisierung von Abonnentenworkflows.",
|
||||
"Data Center": "Rechenzentrum",
|
||||
"The data center location of your Zoho Campaigns account": "Der Standort des Rechenzentrums Ihres Zoho Kampagnen-Kontos",
|
||||
"zoho.com (United States)": "zoho.com (Vereinigte Staaten)",
|
||||
"zoho.eu (Europe)": "zoho.eu (Europa)",
|
||||
"zoho.in (India)": "zoho.in (Indien)",
|
||||
"zoho.com.au (Australia)": "zoho.com.au (Australien)",
|
||||
"zoho.jp (Japan)": "zoho.jp (Japan)",
|
||||
"zoho.com.cn (China)": "zoho.com.cn (China)",
|
||||
"Connect your Zoho Campaigns account using OAuth2": "Verbinden Sie Ihr Zoho Kampagnen-Konto mit OAuth2",
|
||||
"Create Campaign": "Kampagne erstellen",
|
||||
"Clone Campaign": "Kampagne klonen",
|
||||
"Send Campaign": "Kampagne senden",
|
||||
"Add/Update Contact": "Kontakt hinzufügen/aktualisieren",
|
||||
"Add Tag to Contact": "Tag zu Kontakt hinzufügen",
|
||||
"Remove Tag": "Tag entfernen",
|
||||
"Unsubscribe Contact": "Kontakt abbestellen",
|
||||
"Add Contact to Mailing List": "Kontakt zur Mailingliste hinzufügen",
|
||||
"Find Contact": "Kontakt finden",
|
||||
"Find Campaign": "Kampagne suchen",
|
||||
"Create a new campaign with campaign name, subject, topic, sender name/address, and mailing list.": "Erstellen Sie eine neue Kampagne mit Kampagnenname, Betreff, Thema, Absendername/Adresse und Mailingliste.",
|
||||
"Clone an existing campaign, optionally renaming.": "Klonen Sie eine bestehende Kampagne, optional umbenennen.",
|
||||
"Send a campaign that has been created or cloned.": "Senden Sie eine Kampagne, die erstellt oder geklont wurde.",
|
||||
"Add a new contact or update an existing one. Confirmation email sent based on mailing list settings.": "Fügen Sie einen neuen Kontakt hinzu oder aktualisieren Sie einen existierenden Kontakt. Bestätigungs-E-Mail basierend auf den Einstellungen der Mailingliste.",
|
||||
"Apply a tag to a contact by email. Creates the tag if it doesn't exist.": "Fügen Sie ein Schlagwort auf einen Kontakt per E-Mail zu. Erstellt das Schlagwort, wenn es nicht existiert.",
|
||||
"Remove a tag from a contact.": "Ein Tag von einem Kontakt entfernen.",
|
||||
"Remove a contact from a mailing list.": "Entferne einen Kontakt aus einer Mailingliste.",
|
||||
"Add contacts to your mailing lists.": "Kontakte zu Ihren Mailinglisten hinzufügen.",
|
||||
"Look up an existing contact by email address.": "Suchen Sie einen vorhandenen Kontakt per E-Mail-Adresse.",
|
||||
"Locate an existing campaign by campaign name.": "Suchen Sie eine bestehende Kampagne nach Kampagnennamen.",
|
||||
"Campaign Name": "Kampagnenname",
|
||||
"From Email": "Absender-E-Mail",
|
||||
"Subject": "Betreff",
|
||||
"Mailing Lists": "Mailinglisten",
|
||||
"Content URL": "Inhalts-URL",
|
||||
"Topic": "Thema",
|
||||
"Campaign": "Kampagne",
|
||||
"From Name": "Absendername",
|
||||
"Reply-To Email": "Antwort-An E-Mail",
|
||||
"Encoding Type": "Kodierungstyp",
|
||||
"Mailing List": "Mailingliste",
|
||||
"Contact Information": "Kontaktinformationen",
|
||||
"Source": "Quelle",
|
||||
"Tag": "Markierung",
|
||||
"Contact Email": "Kontakt-E-Mail",
|
||||
"Emails": "E-Mails",
|
||||
"Contact Status": "Kontaktstatus",
|
||||
"Sort Order": "Sortierung",
|
||||
"From Index": "Von Index",
|
||||
"Range": "Range",
|
||||
"Campaign Status": "Kampagnen-Status",
|
||||
"A name to your campaign": "Ein Name für Ihre Kampagne",
|
||||
"Sender email address for the campaign": "Absender-E-Mail-Adresse für die Kampagne",
|
||||
"The subject line of the campaign": "Die Betreffzeile der Kampagne",
|
||||
"Select the mailing lists": "Wählen Sie die Mailinglisten",
|
||||
"Public URL containing the HTML content for your campaign": "Öffentliche URL, die den HTML-Inhalt Ihrer Kampagne enthält",
|
||||
"Select the topic": "Thema auswählen",
|
||||
"Select the campaign": "Wählen Sie die Kampagne",
|
||||
"New name for the cloned campaign": "Neuer Name für die geklonte Kampagne",
|
||||
"New subject line for the cloned campaign": "Neue Betreffzeile für die geklonte Kampagne",
|
||||
"Sender name for the cloned campaign": "Absendername für die geklonte Kampagne",
|
||||
"Sender email address for the cloned campaign": "Absender-E-Mail-Adresse für die geklonte Kampagne",
|
||||
"Reply-to email address for the cloned campaign": "Antwort-E-Mail-Adresse für die geklonte Kampagne",
|
||||
"Email encoding type (e.g., UTF-8)": "E-Mail-Verschlüsselungstyp (z. B. UTF-8)",
|
||||
"Select the mailing list": "Mailingliste auswählen",
|
||||
"Information about the contact": "Informationen über den Kontakt",
|
||||
"Contact source can be added.": "Kontaktquelle kann hinzugefügt werden.",
|
||||
"Select the tag to associate with the contact": "Wählen Sie das Schlagwort für die Verbindung mit dem Kontakt",
|
||||
"Email address of the contact to tag": "E-Mail-Adresse des zu markierenden Kontakts",
|
||||
"Email address of the contact to remove the tag from": "E-Mail-Adresse des Kontakts zum Entfernen des Tags",
|
||||
"Contacts email addresses to be added to the mailing list (maximum 10 emails)": "Kontakte E-Mail-Adressen, die zur Mailingliste hinzugefügt werden sollen (maximal 10 E-Mails)",
|
||||
"Email of the contact to be found (partial matches supported)": "E-Mail des gesuchten Kontakts (Partielle Treffer unterstützt)",
|
||||
"Filter contacts by status (optional)": "Kontakte nach Status filtern (optional)",
|
||||
"Sort order for results (optional)": "Sortierreihenfolge für Ergebnisse (optional)",
|
||||
"Starting index for pagination (optional, default: 1)": "Start-Index für Seitennavigation (optional, Standard: 1)",
|
||||
"Number of contacts to retrieve (optional, default: all)": "Anzahl der abzurufenden Kontakte (optional, Standard: alle)",
|
||||
"Name of the campaign to be found (partial matches supported)": "Name der zu findenden Kampagne (Partielle Treffer unterstützt)",
|
||||
"Filter campaigns by status (optional)": "Kampagnen nach Status filtern (optional)",
|
||||
"Number of campaigns to retrieve (optional, default: 5)": "Anzahl der abzurufenden Kampagnen (optional, Standard: 5)",
|
||||
"Active": "Aktiv",
|
||||
"Recent": "Neueste",
|
||||
"Most Recent": "Neueste",
|
||||
"Unsubscribed": "Abgemeldet",
|
||||
"Bounced": "Geprallt",
|
||||
"Ascending": "Aufsteigend",
|
||||
"Descending": "Absteigend",
|
||||
"All": "Alle",
|
||||
"All Campaigns": "Alle Kampagnen",
|
||||
"Drafts": "Entwürfe",
|
||||
"Scheduled": "Geplant",
|
||||
"In Progress": "In Bearbeitung",
|
||||
"Sent": "Gesendet",
|
||||
"Stopped": "Stoppt",
|
||||
"Canceled": "Abgebrochen",
|
||||
"To Be Reviewed": "Zu überprüfen",
|
||||
"Reviewed": "Überprüft",
|
||||
"Paused": "Pausiert",
|
||||
"In Testing": "In Testen",
|
||||
"New Contact": "Neuer Kontakt",
|
||||
"Unsubscribe": "Abmelden",
|
||||
"New Campaign": "Neue Kampagne",
|
||||
"Fires when a new contact is added to a selected mailing list.": "Löscht ab, wenn ein neuer Kontakt einer ausgewählten Mailingliste hinzugefügt wird.",
|
||||
"Fires when a contact is removed from a mailing list or unsubscribed.": "Löst ab, wenn ein Kontakt von einer Mailingliste entfernt oder abgemeldet wird.",
|
||||
"Fires when a new campaign is created.": "Feuert ab, wenn eine neue Kampagne erstellt wird.",
|
||||
"Unsubscribe Type": "Abmeldeart",
|
||||
"Filter contacts by status (default: active)": "Kontakte nach Status filtern (Standard: aktiv)",
|
||||
"Sort order for contacts (default: descending)": "Reihenfolge nach Kontakten sortieren (Standard: absteigend)",
|
||||
"Type of contact removal to monitor (default: unsubscribed)": "Art der zu überwachenden Kontaktentfernung (Standard: abbestellen)"
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"Zoho Campaigns is an email marketing platform for managing mailing lists, sending campaigns, tracking engagement, and automating subscriber workflows.": "La campaña Zoho es una plataforma de marketing por correo electrónico para la gestión de listas de correo, el envío de campañas, la participación en el seguimiento y la automatización de los flujos de trabajo de suscriptores.",
|
||||
"Data Center": "Centro de Datos",
|
||||
"The data center location of your Zoho Campaigns account": "La ubicación del centro de datos de tu cuenta de la Campaña Zoho",
|
||||
"zoho.com (United States)": "zoho.com (Estados Unidos)",
|
||||
"zoho.eu (Europe)": "zoho.eu (Europa)",
|
||||
"zoho.in (India)": "zoho.in (India)",
|
||||
"zoho.com.au (Australia)": "zoho.com.au (Tamaño)",
|
||||
"zoho.jp (Japan)": "zoho.jp (Japón)",
|
||||
"zoho.com.cn (China)": "zoho.com.cn (China)",
|
||||
"Connect your Zoho Campaigns account using OAuth2": "Conecte su cuenta de la Campaña Zoho usando OAuth2",
|
||||
"Create Campaign": "Crear Campaña",
|
||||
"Clone Campaign": "Clonar campaña",
|
||||
"Send Campaign": "Enviar Campaña",
|
||||
"Add/Update Contact": "Añadir/Actualizar contacto",
|
||||
"Add Tag to Contact": "Añadir etiqueta al contacto",
|
||||
"Remove Tag": "Eliminar etiqueta",
|
||||
"Unsubscribe Contact": "Desuscribirse Contacto",
|
||||
"Add Contact to Mailing List": "Añadir contacto a la lista de correo",
|
||||
"Find Contact": "Encontrar contacto",
|
||||
"Find Campaign": "Buscar campaña",
|
||||
"Create a new campaign with campaign name, subject, topic, sender name/address, and mailing list.": "Crear una nueva campaña con nombre de campaña, tema, tema, nombre del remitente, dirección y lista de correo.",
|
||||
"Clone an existing campaign, optionally renaming.": "Clonar una campaña existente, opcionalmente renombrar.",
|
||||
"Send a campaign that has been created or cloned.": "Enviar una campaña que ha sido creada o clonada.",
|
||||
"Add a new contact or update an existing one. Confirmation email sent based on mailing list settings.": "Añadir un nuevo contacto o actualizar uno existente. Correo electrónico de confirmación enviado basándose en la configuración de la lista de correo.",
|
||||
"Apply a tag to a contact by email. Creates the tag if it doesn't exist.": "Aplicar una etiqueta a un contacto por correo electrónico. Crea la etiqueta si no existe.",
|
||||
"Remove a tag from a contact.": "Eliminar una etiqueta de un contacto.",
|
||||
"Remove a contact from a mailing list.": "Eliminar un contacto de una lista de correo.",
|
||||
"Add contacts to your mailing lists.": "Añadir contactos a sus listas de correo.",
|
||||
"Look up an existing contact by email address.": "Buscar un contacto existente por dirección de correo electrónico.",
|
||||
"Locate an existing campaign by campaign name.": "Localice una campaña existente por nombre de campaña.",
|
||||
"Campaign Name": "Nombre de Campaña",
|
||||
"From Email": "Desde Email",
|
||||
"Subject": "Asunto",
|
||||
"Mailing Lists": "Listas de correo",
|
||||
"Content URL": "URL de contenido",
|
||||
"Topic": "Tema",
|
||||
"Campaign": "Campaña",
|
||||
"From Name": "De nombre",
|
||||
"Reply-To Email": "Responder a Email",
|
||||
"Encoding Type": "Tipo de codificación",
|
||||
"Mailing List": "Lista de correo",
|
||||
"Contact Information": "Información de contacto",
|
||||
"Source": "Fuente",
|
||||
"Tag": "Etiqueta",
|
||||
"Contact Email": "Email de contacto",
|
||||
"Emails": "Correos",
|
||||
"Contact Status": "Estado del Contacto",
|
||||
"Sort Order": "Ordenar",
|
||||
"From Index": "Desde el índice",
|
||||
"Range": "Range",
|
||||
"Campaign Status": "Estado de la campaña",
|
||||
"A name to your campaign": "Un nombre para tu campaña",
|
||||
"Sender email address for the campaign": "Dirección de correo electrónico del remitente para la campaña",
|
||||
"The subject line of the campaign": "La línea temática de la campaña",
|
||||
"Select the mailing lists": "Seleccione las listas de correo",
|
||||
"Public URL containing the HTML content for your campaign": "URL pública que contiene el contenido HTML de tu campaña",
|
||||
"Select the topic": "Seleccione el tema",
|
||||
"Select the campaign": "Seleccione la campaña",
|
||||
"New name for the cloned campaign": "Nuevo nombre para la campaña clonada",
|
||||
"New subject line for the cloned campaign": "Nueva línea de asunto para la campaña clonada",
|
||||
"Sender name for the cloned campaign": "Nombre del remitente para la campaña clonada",
|
||||
"Sender email address for the cloned campaign": "Dirección de correo electrónico del remitente para la campaña clonada",
|
||||
"Reply-to email address for the cloned campaign": "Dirección de correo de respuesta para la campaña clonada",
|
||||
"Email encoding type (e.g., UTF-8)": "Tipo de codificación de correo electrónico (por ejemplo, UTF-8)",
|
||||
"Select the mailing list": "Seleccione la lista de correo",
|
||||
"Information about the contact": "Información sobre el contacto",
|
||||
"Contact source can be added.": "Fuente de contacto puede ser añadida.",
|
||||
"Select the tag to associate with the contact": "Seleccione la etiqueta para asociar con el contacto",
|
||||
"Email address of the contact to tag": "Dirección de correo electrónico del contacto para etiquetar",
|
||||
"Email address of the contact to remove the tag from": "Dirección de correo electrónico del contacto del que eliminar la etiqueta",
|
||||
"Contacts email addresses to be added to the mailing list (maximum 10 emails)": "Direcciones de correo electrónico de contactos a añadir a la lista de correo (máximo 10 correos electrónicos)",
|
||||
"Email of the contact to be found (partial matches supported)": "Correo electrónico del contacto a encontrar (partidas parciales soportadas)",
|
||||
"Filter contacts by status (optional)": "Filtrar contactos por estado (opcional)",
|
||||
"Sort order for results (optional)": "Ordenar resultados (opcional)",
|
||||
"Starting index for pagination (optional, default: 1)": "Índice de inicio para la paginación (opcional, predeterminado: 1)",
|
||||
"Number of contacts to retrieve (optional, default: all)": "Número de contactos a recuperar (opcional, predeterminado: todos)",
|
||||
"Name of the campaign to be found (partial matches supported)": "Nombre de la campaña que se encuentra (partidas parciales soportadas)",
|
||||
"Filter campaigns by status (optional)": "Filtrar campañas por estado (opcional)",
|
||||
"Number of campaigns to retrieve (optional, default: 5)": "Número de campañas a recuperar (opcional, predeterminado: 5)",
|
||||
"Active": "Activo",
|
||||
"Recent": "Recientes",
|
||||
"Most Recent": "Más Recientes",
|
||||
"Unsubscribed": "Desuscrito",
|
||||
"Bounced": "Rebotado",
|
||||
"Ascending": "Ascendiente",
|
||||
"Descending": "Descendiente",
|
||||
"All": "Todos",
|
||||
"All Campaigns": "Toda la campaña",
|
||||
"Drafts": "Borradores",
|
||||
"Scheduled": "Programado",
|
||||
"In Progress": "En curso",
|
||||
"Sent": "Enviado",
|
||||
"Stopped": "Detenido",
|
||||
"Canceled": "Cancelado",
|
||||
"To Be Reviewed": "A ser reseñado",
|
||||
"Reviewed": "Revisado",
|
||||
"Paused": "Pausado",
|
||||
"In Testing": "En pruebas",
|
||||
"New Contact": "Nuevo contacto",
|
||||
"Unsubscribe": "Darse de baja",
|
||||
"New Campaign": "Nueva Campaña",
|
||||
"Fires when a new contact is added to a selected mailing list.": "Dispara cuando un nuevo contacto se agrega a una lista de correo seleccionada.",
|
||||
"Fires when a contact is removed from a mailing list or unsubscribed.": "Se activa cuando un contacto es eliminado de una lista de correo o darse de baja.",
|
||||
"Fires when a new campaign is created.": "Dispara cuando se crea una nueva campaña.",
|
||||
"Unsubscribe Type": "Tipo de desuscripción",
|
||||
"Filter contacts by status (default: active)": "Filtrar contactos por estado (por defecto: activo)",
|
||||
"Sort order for contacts (default: descending)": "Orden de los contactos (por defecto: descender)",
|
||||
"Type of contact removal to monitor (default: unsubscribed)": "Tipo de eliminación de contactos para monitorear (por defecto: darse de baja)"
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"Zoho Campaigns is an email marketing platform for managing mailing lists, sending campaigns, tracking engagement, and automating subscriber workflows.": "Zoho Campaigns est une plateforme de marketing par e-mail pour gérer les listes de diffusion, envoyer des campagnes, suivre l'engagement et automatiser les flux de travail des abonnés.",
|
||||
"Data Center": "Centre de données",
|
||||
"The data center location of your Zoho Campaigns account": "L'emplacement du centre de données de votre compte Zoho Campaigns",
|
||||
"zoho.com (United States)": "zoho.com (États-Unis)",
|
||||
"zoho.eu (Europe)": "zoho.eu (Europe)",
|
||||
"zoho.in (India)": "zoho.in (Inde)",
|
||||
"zoho.com.au (Australia)": "zoho.com.au (Australie)",
|
||||
"zoho.jp (Japan)": "zoho.jp (Japon)",
|
||||
"zoho.com.cn (China)": "zoho.com.cn (Chine)",
|
||||
"Connect your Zoho Campaigns account using OAuth2": "Connectez votre compte Zoho Campaigns avec OAuth2",
|
||||
"Create Campaign": "Créer une campagne",
|
||||
"Clone Campaign": "Cloner la campagne",
|
||||
"Send Campaign": "Envoyer la campagne",
|
||||
"Add/Update Contact": "Ajouter/mettre à jour le contact",
|
||||
"Add Tag to Contact": "Ajouter un tag au contact",
|
||||
"Remove Tag": "Supprimer le tag",
|
||||
"Unsubscribe Contact": "Se désabonner du contact",
|
||||
"Add Contact to Mailing List": "Ajouter un contact à la liste de diffusion",
|
||||
"Find Contact": "Trouver un contact",
|
||||
"Find Campaign": "Trouver une campagne",
|
||||
"Create a new campaign with campaign name, subject, topic, sender name/address, and mailing list.": "Créez une nouvelle campagne avec le nom de la campagne, le sujet, le sujet, le nom de l'expéditeur et la liste de diffusion.",
|
||||
"Clone an existing campaign, optionally renaming.": "Cloner une campagne existante, éventuellement renommer.",
|
||||
"Send a campaign that has been created or cloned.": "Envoyez une campagne qui a été créée ou clonée.",
|
||||
"Add a new contact or update an existing one. Confirmation email sent based on mailing list settings.": "Ajouter un nouveau contact ou mettre à jour un contact existant. E-mail de confirmation envoyé en fonction des paramètres de la liste de diffusion.",
|
||||
"Apply a tag to a contact by email. Creates the tag if it doesn't exist.": "Appliquer un tag à un contact par e-mail. Crée le tag s'il n'existe pas.",
|
||||
"Remove a tag from a contact.": "Supprimer un tag d'un contact.",
|
||||
"Remove a contact from a mailing list.": "Retirer un contact d'une liste de diffusion.",
|
||||
"Add contacts to your mailing lists.": "Ajouter des contacts à vos listes de diffusion.",
|
||||
"Look up an existing contact by email address.": "Rechercher un contact existant par adresse e-mail.",
|
||||
"Locate an existing campaign by campaign name.": "Localisez une campagne existante par nom de campagne.",
|
||||
"Campaign Name": "Nom de la campagne",
|
||||
"From Email": "De l'E-mail",
|
||||
"Subject": "Sujet",
|
||||
"Mailing Lists": "Listes de diffusion",
|
||||
"Content URL": "URL du contenu",
|
||||
"Topic": "Sujet",
|
||||
"Campaign": "Campagnes",
|
||||
"From Name": "De nom",
|
||||
"Reply-To Email": "E-mail répondre-à",
|
||||
"Encoding Type": "Type d'encodage",
|
||||
"Mailing List": "Liste de diffusion",
|
||||
"Contact Information": "Coordonnées",
|
||||
"Source": "Source",
|
||||
"Tag": "Étiquette",
|
||||
"Contact Email": "Courriel du contact",
|
||||
"Emails": "E-mails",
|
||||
"Contact Status": "Statut du contact",
|
||||
"Sort Order": "Ordre de tri",
|
||||
"From Index": "Depuis l'index",
|
||||
"Range": "Range",
|
||||
"Campaign Status": "Statut de la campagne",
|
||||
"A name to your campaign": "Un nom pour votre campagne",
|
||||
"Sender email address for the campaign": "Adresse e-mail de l'expéditeur pour la campagne",
|
||||
"The subject line of the campaign": "La ligne de sujet de la campagne",
|
||||
"Select the mailing lists": "Sélectionnez les listes de diffusion",
|
||||
"Public URL containing the HTML content for your campaign": "URL publique contenant le contenu HTML de votre campagne",
|
||||
"Select the topic": "Sélectionnez le sujet",
|
||||
"Select the campaign": "Sélectionnez la campagne",
|
||||
"New name for the cloned campaign": "Nouveau nom pour la campagne clonée",
|
||||
"New subject line for the cloned campaign": "Nouvelle ligne de sujet pour la campagne clonée",
|
||||
"Sender name for the cloned campaign": "Nom de l'expéditeur pour la campagne clonée",
|
||||
"Sender email address for the cloned campaign": "Adresse e-mail de l'expéditeur pour la campagne clonée",
|
||||
"Reply-to email address for the cloned campaign": "Adresse email de réponse pour la campagne clonée",
|
||||
"Email encoding type (e.g., UTF-8)": "Type d'encodage du courriel (par exemple, UTF-8)",
|
||||
"Select the mailing list": "Sélectionnez la liste de diffusion",
|
||||
"Information about the contact": "Informations sur le contact",
|
||||
"Contact source can be added.": "La source du contact peut être ajoutée.",
|
||||
"Select the tag to associate with the contact": "Sélectionnez le tag à associer avec le contact",
|
||||
"Email address of the contact to tag": "Adresse e-mail du contact à étiqueter",
|
||||
"Email address of the contact to remove the tag from": "Adresse e-mail du contact pour supprimer le tag",
|
||||
"Contacts email addresses to be added to the mailing list (maximum 10 emails)": "Adresses e-mail des contacts à ajouter à la liste de diffusion (maximum 10 emails)",
|
||||
"Email of the contact to be found (partial matches supported)": "Courriel du contact à trouver (correspondances partielles prises en charge)",
|
||||
"Filter contacts by status (optional)": "Filtrer les contacts par statut (optionnel)",
|
||||
"Sort order for results (optional)": "Ordre de tri des résultats (facultatif)",
|
||||
"Starting index for pagination (optional, default: 1)": "Démarrage de l'index pour la pagination (optionnel, par défaut: 1)",
|
||||
"Number of contacts to retrieve (optional, default: all)": "Nombre de contacts à récupérer (optionnel, par défaut : tous)",
|
||||
"Name of the campaign to be found (partial matches supported)": "Nom de la campagne à trouver (correspondances partielles supportées)",
|
||||
"Filter campaigns by status (optional)": "Filtrer les campagnes par statut (optionnel)",
|
||||
"Number of campaigns to retrieve (optional, default: 5)": "Nombre de campagnes à récupérer (optionnel, par défaut: 5)",
|
||||
"Active": "Actif",
|
||||
"Recent": "Récentes",
|
||||
"Most Recent": "Les plus récents",
|
||||
"Unsubscribed": "Désabonné",
|
||||
"Bounced": "Rebondi",
|
||||
"Ascending": "Ascendant",
|
||||
"Descending": "Descendant",
|
||||
"All": "Tous",
|
||||
"All Campaigns": "Toutes les campagnes",
|
||||
"Drafts": "Brouillons",
|
||||
"Scheduled": "Planifié",
|
||||
"In Progress": "En cours",
|
||||
"Sent": "Envoyé",
|
||||
"Stopped": "Arrêté",
|
||||
"Canceled": "Annulé",
|
||||
"To Be Reviewed": "À revoir",
|
||||
"Reviewed": "Révisé",
|
||||
"Paused": "En pause",
|
||||
"In Testing": "En test",
|
||||
"New Contact": "Nouveau contact",
|
||||
"Unsubscribe": "Se désabonner",
|
||||
"New Campaign": "Nouvelle Campagne",
|
||||
"Fires when a new contact is added to a selected mailing list.": "Se déclenche lorsqu'un nouveau contact est ajouté à une liste de diffusion sélectionnée.",
|
||||
"Fires when a contact is removed from a mailing list or unsubscribed.": "Déclenche lorsqu'un contact est retiré d'une liste de diffusion ou se désabonner.",
|
||||
"Fires when a new campaign is created.": "Tire quand une nouvelle campagne est créée.",
|
||||
"Unsubscribe Type": "Type de désinscription",
|
||||
"Filter contacts by status (default: active)": "Filtrer les contacts par statut (par défaut : actif)",
|
||||
"Sort order for contacts (default: descending)": "Ordre de tri des contacts (par défaut: décroissant)",
|
||||
"Type of contact removal to monitor (default: unsubscribed)": "Type de suppression de contact à surveiller (par défaut : désabonné)"
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"Zoho Campaigns is an email marketing platform for managing mailing lists, sending campaigns, tracking engagement, and automating subscriber workflows.": "Zoho Campaignsは、メーリングリストの管理、キャンペーンの送信、エンゲージメントの追跡、加入者ワークフローの自動化のためのメールマーケティングプラットフォームです。",
|
||||
"Data Center": "データセンター",
|
||||
"The data center location of your Zoho Campaigns account": "Zohoキャンペーンアカウントのデータセンターの場所",
|
||||
"zoho.com (United States)": "zoho.com (アメリカ合衆国)",
|
||||
"zoho.eu (Europe)": "zoho.eu (ヨーロッパ)",
|
||||
"zoho.in (India)": "zoho.in (インド)",
|
||||
"zoho.com.au (Australia)": "zoho.com.au (オーストラリア)",
|
||||
"zoho.jp (Japan)": "zoho.jp (日本)",
|
||||
"zoho.com.cn (China)": "zoho.com.cn (中国)",
|
||||
"Connect your Zoho Campaigns account using OAuth2": "OAuth2を使用してZohoキャンペーンアカウントに接続",
|
||||
"Create Campaign": "キャンペーンを作成",
|
||||
"Clone Campaign": "キャンペーンを複製",
|
||||
"Send Campaign": "キャンペーンを送信",
|
||||
"Add/Update Contact": "連絡先の追加/更新",
|
||||
"Add Tag to Contact": "連絡先にタグを追加",
|
||||
"Remove Tag": "タグを削除",
|
||||
"Unsubscribe Contact": "連絡先を購読解除",
|
||||
"Add Contact to Mailing List": "メーリングリストに連絡先を追加",
|
||||
"Find Contact": "連絡先を探す",
|
||||
"Find Campaign": "キャンペーンを検索",
|
||||
"Create a new campaign with campaign name, subject, topic, sender name/address, and mailing list.": "キャンペーン名、件名、トピック、送信者名/住所、メーリングリストで新しいキャンペーンを作成します。",
|
||||
"Clone an existing campaign, optionally renaming.": "既存のキャンペーンをクローンし、必要に応じて名前を変更します。",
|
||||
"Send a campaign that has been created or cloned.": "作成またはクローンされたキャンペーンを送信します。",
|
||||
"Add a new contact or update an existing one. Confirmation email sent based on mailing list settings.": "新しい連絡先を追加するか、既存の連絡先を更新します。メーリングリスト設定に基づいて送信された確認メール。",
|
||||
"Apply a tag to a contact by email. Creates the tag if it doesn't exist.": "メールで連絡先にタグを適用します。存在しない場合はタグを作成します。",
|
||||
"Remove a tag from a contact.": "コンタクトからタグを削除します。",
|
||||
"Remove a contact from a mailing list.": "メーリングリストから連絡先を削除します。",
|
||||
"Add contacts to your mailing lists.": "メーリングリストに連絡先を追加します。",
|
||||
"Look up an existing contact by email address.": "既存の連絡先をメールアドレスで検索します。",
|
||||
"Locate an existing campaign by campaign name.": "キャンペーン名で既存のキャンペーンを探します。",
|
||||
"Campaign Name": "キャンペーン名",
|
||||
"From Email": "差出人メールアドレス",
|
||||
"Subject": "件名",
|
||||
"Mailing Lists": "メーリング リスト",
|
||||
"Content URL": "コンテンツ URL",
|
||||
"Topic": "トピック",
|
||||
"Campaign": "キャンペーン",
|
||||
"From Name": "差出人名",
|
||||
"Reply-To Email": "返信先メールアドレス",
|
||||
"Encoding Type": "エンコードタイプ",
|
||||
"Mailing List": "メーリングリスト:",
|
||||
"Contact Information": "連絡先情報",
|
||||
"Source": "ソース",
|
||||
"Tag": "タグ",
|
||||
"Contact Email": "連絡先メールアドレス",
|
||||
"Emails": "E-mail",
|
||||
"Contact Status": "連絡先のステータス",
|
||||
"Sort Order": "並び順",
|
||||
"From Index": "索引から",
|
||||
"Range": "Range",
|
||||
"Campaign Status": "キャンペーンステータス",
|
||||
"A name to your campaign": "キャンペーンの名前",
|
||||
"Sender email address for the campaign": "キャンペーンの送信者メールアドレス",
|
||||
"The subject line of the campaign": "キャンペーンの件名",
|
||||
"Select the mailing lists": "メーリングリストを選択",
|
||||
"Public URL containing the HTML content for your campaign": "キャンペーンのHTMLコンテンツを含む公開 URL",
|
||||
"Select the topic": "トピックを選択",
|
||||
"Select the campaign": "キャンペーンを選択",
|
||||
"New name for the cloned campaign": "複製されたキャンペーンの新しい名前",
|
||||
"New subject line for the cloned campaign": "複製されたキャンペーンの新しい件名行",
|
||||
"Sender name for the cloned campaign": "クローンキャンペーンの送信者名",
|
||||
"Sender email address for the cloned campaign": "クローンキャンペーンの送信者メールアドレス",
|
||||
"Reply-to email address for the cloned campaign": "複製されたキャンペーンの返信先メールアドレス",
|
||||
"Email encoding type (e.g., UTF-8)": "メールエンコーディングの種類(例:UTF-8)",
|
||||
"Select the mailing list": "メーリングリストを選択してください",
|
||||
"Information about the contact": "連絡先に関する情報",
|
||||
"Contact source can be added.": "連絡先のソースを追加できます。",
|
||||
"Select the tag to associate with the contact": "連絡先に関連付けるタグを選択してください",
|
||||
"Email address of the contact to tag": "タグ付けする連絡先のメールアドレス",
|
||||
"Email address of the contact to remove the tag from": "タグを削除する連絡先のメールアドレス",
|
||||
"Contacts email addresses to be added to the mailing list (maximum 10 emails)": "メーリングリストに追加される連絡先メールアドレス(最大10通)",
|
||||
"Email of the contact to be found (partial matches supported)": "見つける連絡先のメール(一部一致対応)",
|
||||
"Filter contacts by status (optional)": "ステータスで連絡先をフィルター (オプション)",
|
||||
"Sort order for results (optional)": "結果の並べ替え順 (オプション)",
|
||||
"Starting index for pagination (optional, default: 1)": "ページネーションのインデックスを開始しています (オプション、デフォルト: 1)",
|
||||
"Number of contacts to retrieve (optional, default: all)": "取得する連絡先の数 (オプション、デフォルト: すべて)",
|
||||
"Name of the campaign to be found (partial matches supported)": "見つけるキャンペーンの名前 (一部一致がサポートされています)",
|
||||
"Filter campaigns by status (optional)": "ステータスでキャンペーンをフィルター (オプション)",
|
||||
"Number of campaigns to retrieve (optional, default: 5)": "取得するキャンペーン数(オプション、デフォルト:5)",
|
||||
"Active": "有効",
|
||||
"Recent": "最近のもの",
|
||||
"Most Recent": "最新順",
|
||||
"Unsubscribed": "購読解除済み",
|
||||
"Bounced": "バウンスしました",
|
||||
"Ascending": "昇順",
|
||||
"Descending": "降順",
|
||||
"All": "すべて",
|
||||
"All Campaigns": "すべてのキャンペーン",
|
||||
"Drafts": "Drafts",
|
||||
"Scheduled": "スケジュール済み",
|
||||
"In Progress": "進行中",
|
||||
"Sent": "送信済み",
|
||||
"Stopped": "停止しました",
|
||||
"Canceled": "キャンセルしました",
|
||||
"To Be Reviewed": "確認する",
|
||||
"Reviewed": "レビュー済み",
|
||||
"Paused": "一時停止中",
|
||||
"In Testing": "テスト中",
|
||||
"New Contact": "新しい連絡先",
|
||||
"Unsubscribe": "購読解除",
|
||||
"New Campaign": "新規キャンペーン",
|
||||
"Fires when a new contact is added to a selected mailing list.": "選択したメーリングリストに新しい連絡先が追加されたときに発生します。",
|
||||
"Fires when a contact is removed from a mailing list or unsubscribed.": "連絡先がメーリングリストから削除されるか、登録解除されたときに発生します。",
|
||||
"Fires when a new campaign is created.": "新しいキャンペーンが作成されたときに発生します。",
|
||||
"Unsubscribe Type": "購読解除タイプ",
|
||||
"Filter contacts by status (default: active)": "ステータスで連絡先を絞り込みます (デフォルト: アクティブ)",
|
||||
"Sort order for contacts (default: descending)": "連絡先の並び順(デフォルト:降順)",
|
||||
"Type of contact removal to monitor (default: unsubscribed)": "監視するコンタクト削除の種類(デフォルト:購読解除)"
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"Zoho Campaigns is an email marketing platform for managing mailing lists, sending campaigns, tracking engagement, and automating subscriber workflows.": "Zoho Campagnes is een marketingplatform voor het beheren van mailinglijsten, het verzenden van campagnes, het bijhouden van betrokkenheid en het automatiseren van workflows van abonnees.",
|
||||
"Data Center": "Struik centrum",
|
||||
"The data center location of your Zoho Campaigns account": "De locatie van datacenter van je Zoho Campagnes account",
|
||||
"zoho.com (United States)": "zoho.com (Verenigde Staten)",
|
||||
"zoho.eu (Europe)": "zoho.eu (Europa)",
|
||||
"zoho.in (India)": "zoho.in (India)",
|
||||
"zoho.com.au (Australia)": "zoho.com.au (Australia)",
|
||||
"zoho.jp (Japan)": "zoho.jp (Japan)",
|
||||
"zoho.com.cn (China)": "zoho.com.cn (China)",
|
||||
"Connect your Zoho Campaigns account using OAuth2": "Verbind uw Zoho Campagnes account met OAuth2",
|
||||
"Create Campaign": "Nieuwe campagne",
|
||||
"Clone Campaign": "Campagne klonen",
|
||||
"Send Campaign": "Verzend campagne",
|
||||
"Add/Update Contact": "Contactpersoon toevoegen/bijwerken",
|
||||
"Add Tag to Contact": "Tag aan contactpersoon toevoegen",
|
||||
"Remove Tag": "Tag verwijderen",
|
||||
"Unsubscribe Contact": "Ontvangers uitschrijven",
|
||||
"Add Contact to Mailing List": "Contact toevoegen aan mailinglijst",
|
||||
"Find Contact": "Contactpersoon zoeken",
|
||||
"Find Campaign": "Vind campagne",
|
||||
"Create a new campaign with campaign name, subject, topic, sender name/address, and mailing list.": "Maak een nieuwe campagne met campagnenaam, onderwerp, onderwerp, afzendernaam/adres en mailinglijst.",
|
||||
"Clone an existing campaign, optionally renaming.": "Kopieer een bestaande campagne, eventueel hernoemd.",
|
||||
"Send a campaign that has been created or cloned.": "Verstuur een campagne die is gemaakt of gekloond.",
|
||||
"Add a new contact or update an existing one. Confirmation email sent based on mailing list settings.": "Voeg een nieuw contact toe of werk een bestaande bij. Bevestiging e-mail verzonden op basis van de mailinglijstinstellingen.",
|
||||
"Apply a tag to a contact by email. Creates the tag if it doesn't exist.": "Een tag toepassen op een contactpersoon per e-mail. Maakt de tag aan als deze niet bestaat.",
|
||||
"Remove a tag from a contact.": "Verwijder een tag van een contactpersoon.",
|
||||
"Remove a contact from a mailing list.": "Een contactpersoon uit een mailinglijst verwijderen.",
|
||||
"Add contacts to your mailing lists.": "Contacten aan je mailinglijsten toevoegen.",
|
||||
"Look up an existing contact by email address.": "Opzoeken van een bestaand contact per e-mailadres.",
|
||||
"Locate an existing campaign by campaign name.": "Zoek een bestaande campagne op campagnenaam.",
|
||||
"Campaign Name": "Campagne Naam",
|
||||
"From Email": "Van e-mail",
|
||||
"Subject": "Onderwerp",
|
||||
"Mailing Lists": "Mailing lijsten",
|
||||
"Content URL": "Content URL",
|
||||
"Topic": "Onderwerp",
|
||||
"Campaign": "Campagne",
|
||||
"From Name": "Afzender naam",
|
||||
"Reply-To Email": "Antwoord-Aan E-mail",
|
||||
"Encoding Type": "Type codering",
|
||||
"Mailing List": "Mailing lijst",
|
||||
"Contact Information": "Contact informatie",
|
||||
"Source": "Bron",
|
||||
"Tag": "Tagnaam",
|
||||
"Contact Email": "Contact e-mail adres",
|
||||
"Emails": "E-mails",
|
||||
"Contact Status": "Contact status",
|
||||
"Sort Order": "Sorteren bestelling",
|
||||
"From Index": "Van Index",
|
||||
"Range": "Range",
|
||||
"Campaign Status": "Campagne Status",
|
||||
"A name to your campaign": "Een naam voor uw campagne",
|
||||
"Sender email address for the campaign": "E-mailadres afzender voor de campagne",
|
||||
"The subject line of the campaign": "Het onderwerp van de campagne",
|
||||
"Select the mailing lists": "Selecteer de mailing lijsten",
|
||||
"Public URL containing the HTML content for your campaign": "Openbare URL met de HTML-inhoud voor uw campagne",
|
||||
"Select the topic": "Selecteer het onderwerp",
|
||||
"Select the campaign": "Selecteer de campagne",
|
||||
"New name for the cloned campaign": "Nieuwe naam voor de gekloonde campagne",
|
||||
"New subject line for the cloned campaign": "Nieuw onderwerp voor de gekloonde campagne",
|
||||
"Sender name for the cloned campaign": "Afzendernaam voor de gekloonde campagne",
|
||||
"Sender email address for the cloned campaign": "Afzender e-mailadres voor de gekloonde campagne",
|
||||
"Reply-to email address for the cloned campaign": "Reply-to emailadres voor de gekloonde campagne",
|
||||
"Email encoding type (e.g., UTF-8)": "Type e-mailcodering (bijv. UTF-8)",
|
||||
"Select the mailing list": "Selecteer de mailinglijst",
|
||||
"Information about the contact": "Informatie over de contactpersoon",
|
||||
"Contact source can be added.": "Bron contactpersoon kan worden toegevoegd.",
|
||||
"Select the tag to associate with the contact": "Selecteer de tag om te koppelen aan de contactpersoon",
|
||||
"Email address of the contact to tag": "E-mailadres van de contactpersoon om te taggen",
|
||||
"Email address of the contact to remove the tag from": "E-mailadres van de contactpersoon om de tag van te verwijderen",
|
||||
"Contacts email addresses to be added to the mailing list (maximum 10 emails)": "Contacten e-mail adressen die moeten worden toegevoegd aan de mailinglijst (maximaal 10 e-mails)",
|
||||
"Email of the contact to be found (partial matches supported)": "Email van de contactpersoon te vinden (gedeeltelijke matches ondersteund)",
|
||||
"Filter contacts by status (optional)": "Contactpersonen filteren op status (optioneel)",
|
||||
"Sort order for results (optional)": "Sorteer volgorde voor resultaten (optioneel)",
|
||||
"Starting index for pagination (optional, default: 1)": "Begin index voor paginering (optioneel, standaard: 1)",
|
||||
"Number of contacts to retrieve (optional, default: all)": "Aantal op te halen contacten (optioneel, standaard: alle)",
|
||||
"Name of the campaign to be found (partial matches supported)": "Naam van de te vinden campagne (gedeeltelijke matches ondersteund)",
|
||||
"Filter campaigns by status (optional)": "Campagnes filteren op status (optioneel)",
|
||||
"Number of campaigns to retrieve (optional, default: 5)": "Aantal op te halen campagnes (optioneel, standaard: 5)",
|
||||
"Active": "Actief",
|
||||
"Recent": "Recentelijk",
|
||||
"Most Recent": "Meest recente",
|
||||
"Unsubscribed": "Uitgeschreven",
|
||||
"Bounced": "Bounced",
|
||||
"Ascending": "Oplopend",
|
||||
"Descending": "Aflopend",
|
||||
"All": "Allemaal",
|
||||
"All Campaigns": "Alle campagnes",
|
||||
"Drafts": "Concepten",
|
||||
"Scheduled": "Gepland",
|
||||
"In Progress": "In uitvoering",
|
||||
"Sent": "Verzonden",
|
||||
"Stopped": "Gestopt",
|
||||
"Canceled": "Geannuleerd",
|
||||
"To Be Reviewed": "Wordt gereviewd",
|
||||
"Reviewed": "Gereviewd",
|
||||
"Paused": "Gepauzeerd",
|
||||
"In Testing": "In het testen",
|
||||
"New Contact": "Nieuw contactpersoon",
|
||||
"Unsubscribe": "Afmelden",
|
||||
"New Campaign": "Nieuwe campagne",
|
||||
"Fires when a new contact is added to a selected mailing list.": "Vuurt wanneer een nieuwe contactpersoon is toegevoegd aan een geselecteerde mailinglijst.",
|
||||
"Fires when a contact is removed from a mailing list or unsubscribed.": "Vuurt wanneer een contactpersoon wordt verwijderd uit een mailinglijst of uitgeschreven.",
|
||||
"Fires when a new campaign is created.": "Vuurt wanneer een nieuwe campagne wordt gemaakt.",
|
||||
"Unsubscribe Type": "Type afmelding",
|
||||
"Filter contacts by status (default: active)": "Contactpersonen filteren op status (standaard: actief)",
|
||||
"Sort order for contacts (default: descending)": "Sorteer volgorde voor contactpersonen (standaard: aflopend)",
|
||||
"Type of contact removal to monitor (default: unsubscribed)": "Type contact verwijdering om te monitoren (standaard: uitschrijven)"
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"Zoho Campaigns is an email marketing platform for managing mailing lists, sending campaigns, tracking engagement, and automating subscriber workflows.": "Zoho Campanhas é uma plataforma de marketing de e-mail para gerenciar listas de e-mails, enviar campanhas, engajamento de rastreamento e automatizar fluxos de trabalho de assinantes.",
|
||||
"Data Center": "Centro de Dados",
|
||||
"The data center location of your Zoho Campaigns account": "O local do centro de dados de suas Campanhas Zoho conta",
|
||||
"zoho.com (United States)": "zoho.com (Estados Unidos)",
|
||||
"zoho.eu (Europe)": "zoho.eu (Europa)",
|
||||
"zoho.in (India)": "zoho.in (Índia)",
|
||||
"zoho.com.au (Australia)": "zoho.com.au (Austrália)",
|
||||
"zoho.jp (Japan)": "zoho.jp (Japão)",
|
||||
"zoho.com.cn (China)": "zoho.com.cn (China)",
|
||||
"Connect your Zoho Campaigns account using OAuth2": "Conectar sua conta Zoho Campanhas usando OAuth2",
|
||||
"Create Campaign": "Criar Campanha",
|
||||
"Clone Campaign": "Clonar Campanha",
|
||||
"Send Campaign": "Enviar Campanha",
|
||||
"Add/Update Contact": "Adicionar/Atualizar Contato",
|
||||
"Add Tag to Contact": "Adicionar Tag ao Contato",
|
||||
"Remove Tag": "Remover Marca",
|
||||
"Unsubscribe Contact": "Cancelar contato",
|
||||
"Add Contact to Mailing List": "Adicionar Contato à Lista de Correio",
|
||||
"Find Contact": "Localizar contato",
|
||||
"Find Campaign": "Encontrar Campanha",
|
||||
"Create a new campaign with campaign name, subject, topic, sender name/address, and mailing list.": "Criar uma nova campanha com o nome da campanha, assunto, tópico, nome do remetente / endereço e lista de envio.",
|
||||
"Clone an existing campaign, optionally renaming.": "Clonar uma campanha existente, opcionalmente renomeada.",
|
||||
"Send a campaign that has been created or cloned.": "Envie uma campanha que foi criada ou clonada.",
|
||||
"Add a new contact or update an existing one. Confirmation email sent based on mailing list settings.": "Adicione um novo contato ou atualize um existente. E-mail de confirmação enviado com base nas configurações da lista de envio.",
|
||||
"Apply a tag to a contact by email. Creates the tag if it doesn't exist.": "Aplicar uma etiqueta a um contato por e-mail. Cria a etiqueta se não existir.",
|
||||
"Remove a tag from a contact.": "Remove uma tag de um contato.",
|
||||
"Remove a contact from a mailing list.": "Remover um contato de uma lista de envio.",
|
||||
"Add contacts to your mailing lists.": "Adicionar contatos à sua lista de envio.",
|
||||
"Look up an existing contact by email address.": "Procure um contato existente por endereço de e-mail.",
|
||||
"Locate an existing campaign by campaign name.": "Localize uma campanha existente pelo nome da campanha.",
|
||||
"Campaign Name": "Nome Da Campanha",
|
||||
"From Email": "E-mail do Remetente",
|
||||
"Subject": "Cargo",
|
||||
"Mailing Lists": "Listas de distribuição",
|
||||
"Content URL": "URL do conteúdo",
|
||||
"Topic": "Tópico",
|
||||
"Campaign": "Campanha",
|
||||
"From Name": "Nome do Remetente",
|
||||
"Reply-To Email": "E-mail para resposta",
|
||||
"Encoding Type": "Tipo de codificação",
|
||||
"Mailing List": "Lista de Correio",
|
||||
"Contact Information": "Informação do Contato",
|
||||
"Source": "fonte",
|
||||
"Tag": "Etiqueta",
|
||||
"Contact Email": "E-mail de contato",
|
||||
"Emails": "e-mails",
|
||||
"Contact Status": "Estado do contato",
|
||||
"Sort Order": "Ordem de classificação",
|
||||
"From Index": "Do índice",
|
||||
"Range": "Range",
|
||||
"Campaign Status": "Status da Campanha",
|
||||
"A name to your campaign": "Um nome para sua campanha",
|
||||
"Sender email address for the campaign": "E-mail do remetente da campanha",
|
||||
"The subject line of the campaign": "O assunto da campanha",
|
||||
"Select the mailing lists": "Selecione as listas de discussão",
|
||||
"Public URL containing the HTML content for your campaign": "URL pública contendo o conteúdo HTML para sua campanha",
|
||||
"Select the topic": "Selecione o tema",
|
||||
"Select the campaign": "Selecione a campanha",
|
||||
"New name for the cloned campaign": "Novo nome para a campanha clonada",
|
||||
"New subject line for the cloned campaign": "Nova linha de assunto para a campanha clonada",
|
||||
"Sender name for the cloned campaign": "Nome do remetente da campanha clonada",
|
||||
"Sender email address for the cloned campaign": "E-mail do remetente da campanha clonada",
|
||||
"Reply-to email address for the cloned campaign": "Responder-para endereço de e-mail da campanha clonada",
|
||||
"Email encoding type (e.g., UTF-8)": "Tipo de codificação do e-mail (por exemplo, UTF-8)",
|
||||
"Select the mailing list": "Selecione a lista de e-mails",
|
||||
"Information about the contact": "Informações sobre o contato",
|
||||
"Contact source can be added.": "A fonte de contatos pode ser adicionada.",
|
||||
"Select the tag to associate with the contact": "Selecione a tag para associar com o contato",
|
||||
"Email address of the contact to tag": "Endereço de email do contato a etiqueta",
|
||||
"Email address of the contact to remove the tag from": "Endereço de email do contato para remover a tag da",
|
||||
"Contacts email addresses to be added to the mailing list (maximum 10 emails)": "Contatos endereços de e-mail a serem adicionados à lista de discussão (máximo de 10 e-mails)",
|
||||
"Email of the contact to be found (partial matches supported)": "E-mail do contato a ser encontrado (correspondências parciais suportadas)",
|
||||
"Filter contacts by status (optional)": "Filtrar contatos por estado (opcional)",
|
||||
"Sort order for results (optional)": "Ordem de classificação para resultados (opcional)",
|
||||
"Starting index for pagination (optional, default: 1)": "Iniciando índice para paginação (opcional, padrão: 1)",
|
||||
"Number of contacts to retrieve (optional, default: all)": "Número de contatos para recuperar (opcional, padrão: todos)",
|
||||
"Name of the campaign to be found (partial matches supported)": "Nome da campanha a ser encontrada (partidas parciais suportadas)",
|
||||
"Filter campaigns by status (optional)": "Filtrar campanhas por status (opcional)",
|
||||
"Number of campaigns to retrieve (optional, default: 5)": "Número de campanhas a serem recuperadas (opcional, padrão: 5)",
|
||||
"Active": "Ativo",
|
||||
"Recent": "Recente",
|
||||
"Most Recent": "Mais recentes",
|
||||
"Unsubscribed": "Cancelada",
|
||||
"Bounced": "Devolvido",
|
||||
"Ascending": "Crescente",
|
||||
"Descending": "Decrescente",
|
||||
"All": "TODOS",
|
||||
"All Campaigns": "Todas as campanhas",
|
||||
"Drafts": "Rascunhos",
|
||||
"Scheduled": "Agendado",
|
||||
"In Progress": "Em Execução",
|
||||
"Sent": "Enviado",
|
||||
"Stopped": "Parado",
|
||||
"Canceled": "Cancelado",
|
||||
"To Be Reviewed": "Para ser revisado",
|
||||
"Reviewed": "Revisto",
|
||||
"Paused": "Pausado",
|
||||
"In Testing": "Em Teste",
|
||||
"New Contact": "Novo Contato",
|
||||
"Unsubscribe": "Desinscrever",
|
||||
"New Campaign": "Nova Campanha",
|
||||
"Fires when a new contact is added to a selected mailing list.": "Efetua quando um novo contato é adicionado à lista de discussão selecionada.",
|
||||
"Fires when a contact is removed from a mailing list or unsubscribed.": "Ativa quando um contato é removido de uma lista de e-mails ou cancelado.",
|
||||
"Fires when a new campaign is created.": "Atira quando uma nova campanha é criada.",
|
||||
"Unsubscribe Type": "Tipo de descadastro",
|
||||
"Filter contacts by status (default: active)": "Filtrar contatos por estado (padrão: ativo)",
|
||||
"Sort order for contacts (default: descending)": "Ordenar ordem dos contatos (padrão: decrescente)",
|
||||
"Type of contact removal to monitor (default: unsubscribed)": "Tipo de remoção de contato para monitorar (padrão: cancelado)"
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
{
|
||||
"Zoho Campaigns is an email marketing platform for managing mailing lists, sending campaigns, tracking engagement, and automating subscriber workflows.": "Zoho Campaigns is an email marketing platform for managing mailing lists, sending campaigns, tracking engagement, and automating subscriber workflows.",
|
||||
"Data Center": "Data Center",
|
||||
"The data center location of your Zoho Campaigns account": "The data center location of your Zoho Campaigns account",
|
||||
"zoho.com (United States)": "zoho.com (United States)",
|
||||
"zoho.eu (Europe)": "zoho.eu (Europe)",
|
||||
"zoho.in (India)": "zoho.in (India)",
|
||||
"zoho.com.au (Australia)": "zoho.com.au (Australia)",
|
||||
"zoho.jp (Japan)": "zoho.jp (Japan)",
|
||||
"zoho.com.cn (China)": "zoho.com.cn (China)",
|
||||
"Connect your Zoho Campaigns account using OAuth2": "Connect your Zoho Campaigns account using OAuth2",
|
||||
"Create Campaign": "Create Campaign",
|
||||
"Clone Campaign": "Clone Campaign",
|
||||
"Send Campaign": "Send Campaign",
|
||||
"Add/Update Contact": "Add/Update Contact",
|
||||
"Add Tag to Contact": "Add Tag to Contact",
|
||||
"Remove Tag": "Remove Tag",
|
||||
"Unsubscribe Contact": "Unsubscribe Contact",
|
||||
"Add Contact to Mailing List": "Add Contact to Mailing List",
|
||||
"Find Contact": "Find Contact",
|
||||
"Find Campaign": "Find Campaign",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Create a new campaign with campaign name, subject, topic, sender name/address, and mailing list.": "Create a new campaign with campaign name, subject, topic, sender name/address, and mailing list.",
|
||||
"Clone an existing campaign, optionally renaming.": "Clone an existing campaign, optionally renaming.",
|
||||
"Send a campaign that has been created or cloned.": "Send a campaign that has been created or cloned.",
|
||||
"Add a new contact or update an existing one. Confirmation email sent based on mailing list settings.": "Add a new contact or update an existing one. Confirmation email sent based on mailing list settings.",
|
||||
"Apply a tag to a contact by email. Creates the tag if it doesn't exist.": "Apply a tag to a contact by email. Creates the tag if it doesn't exist.",
|
||||
"Remove a tag from a contact.": "Remove a tag from a contact.",
|
||||
"Remove a contact from a mailing list.": "Remove a contact from a mailing list.",
|
||||
"Add contacts to your mailing lists.": "Add contacts to your mailing lists.",
|
||||
"Look up an existing contact by email address.": "Look up an existing contact by email address.",
|
||||
"Locate an existing campaign by campaign name.": "Locate an existing campaign by campaign name.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Campaign Name": "Campaign Name",
|
||||
"From Email": "From Email",
|
||||
"Subject": "Subject",
|
||||
"Mailing Lists": "Mailing Lists",
|
||||
"Content URL": "Content URL",
|
||||
"Topic": "Topic",
|
||||
"Campaign": "Campaign",
|
||||
"From Name": "From Name",
|
||||
"Reply-To Email": "Reply-To Email",
|
||||
"Encoding Type": "Encoding Type",
|
||||
"Mailing List": "Mailing List",
|
||||
"Contact Information": "Contact Information",
|
||||
"Source": "Source",
|
||||
"Tag": "Tag",
|
||||
"Contact Email": "Contact Email",
|
||||
"Emails": "Emails",
|
||||
"Contact Status": "Contact Status",
|
||||
"Sort Order": "Sort Order",
|
||||
"From Index": "From Index",
|
||||
"Range": "Range",
|
||||
"Campaign Status": "Campaign Status",
|
||||
"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)",
|
||||
"A name to your campaign": "A name to your campaign",
|
||||
"Sender email address for the campaign": "Sender email address for the campaign",
|
||||
"The subject line of the campaign": "The subject line of the campaign",
|
||||
"Select the mailing lists": "Select the mailing lists",
|
||||
"Public URL containing the HTML content for your campaign": "Public URL containing the HTML content for your campaign",
|
||||
"Select the topic": "Select the topic",
|
||||
"Select the campaign": "Select the campaign",
|
||||
"New name for the cloned campaign": "New name for the cloned campaign",
|
||||
"New subject line for the cloned campaign": "New subject line for the cloned campaign",
|
||||
"Sender name for the cloned campaign": "Sender name for the cloned campaign",
|
||||
"Sender email address for the cloned campaign": "Sender email address for the cloned campaign",
|
||||
"Reply-to email address for the cloned campaign": "Reply-to email address for the cloned campaign",
|
||||
"Email encoding type (e.g., UTF-8)": "Email encoding type (e.g., UTF-8)",
|
||||
"Select the mailing list": "Select the mailing list",
|
||||
"Information about the contact": "Information about the contact",
|
||||
"Contact source can be added.": "Contact source can be added.",
|
||||
"Select the tag to associate with the contact": "Select the tag to associate with the contact",
|
||||
"Email address of the contact to tag": "Email address of the contact to tag",
|
||||
"Email address of the contact to remove the tag from": "Email address of the contact to remove the tag from",
|
||||
"Contacts email addresses to be added to the mailing list (maximum 10 emails)": "Contacts email addresses to be added to the mailing list (maximum 10 emails)",
|
||||
"Email of the contact to be found (partial matches supported)": "Email of the contact to be found (partial matches supported)",
|
||||
"Filter contacts by status": "Filter contacts by status",
|
||||
"Sort order for results": "Sort order for results",
|
||||
"Starting index for pagination (optional, default: 1)": "Starting index for pagination (optional, default: 1)",
|
||||
"Number of contacts to retrieve (optional, default: all)": "Number of contacts to retrieve (optional, default: all)",
|
||||
"Name of the campaign to be found (partial matches supported)": "Name of the campaign to be found (partial matches supported)",
|
||||
"Filter campaigns by status (optional)": "Filter campaigns by status (optional)",
|
||||
"Sort order for results (optional)": "Sort order for results (optional)",
|
||||
"Number of campaigns to retrieve (optional, default: 5)": "Number of campaigns to retrieve (optional, default: 5)",
|
||||
"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..",
|
||||
"Active": "Active",
|
||||
"Recent": "Recent",
|
||||
"Most Recent": "Most Recent",
|
||||
"Unsubscribed": "Unsubscribed",
|
||||
"Bounced": "Bounced",
|
||||
"Ascending": "Ascending",
|
||||
"Descending": "Descending",
|
||||
"All": "All",
|
||||
"All Campaigns": "All Campaigns",
|
||||
"Drafts": "Drafts",
|
||||
"Scheduled": "Scheduled",
|
||||
"In Progress": "In Progress",
|
||||
"Sent": "Sent",
|
||||
"Stopped": "Stopped",
|
||||
"Canceled": "Canceled",
|
||||
"To Be Reviewed": "To Be Reviewed",
|
||||
"Reviewed": "Reviewed",
|
||||
"Paused": "Paused",
|
||||
"In Testing": "In Testing",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Contact": "New Contact",
|
||||
"Unsubscribe": "Unsubscribe",
|
||||
"New Campaign": "New Campaign",
|
||||
"Fires when a new contact is added to a selected mailing list.": "Fires when a new contact is added to a selected mailing list.",
|
||||
"Fires when a contact is removed from a mailing list or unsubscribed.": "Fires when a contact is removed from a mailing list or unsubscribed.",
|
||||
"Fires when a new campaign is created.": "Fires when a new campaign is created.",
|
||||
"Unsubscribe Type": "Unsubscribe Type",
|
||||
"Type of contact removal to monitor (default: unsubscribed)": "Type of contact removal to monitor (default: unsubscribed)"
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"Zoho Campaigns is an email marketing platform for managing mailing lists, sending campaigns, tracking engagement, and automating subscriber workflows.": "Zoho Campaigns is an email marketing platform for managing mailing lists, sending campaigns, tracking engagement, and automating subscriber workflows.",
|
||||
"Data Center": "Data Center",
|
||||
"The data center location of your Zoho Campaigns account": "The data center location of your Zoho Campaigns account",
|
||||
"zoho.com (United States)": "zoho.com (United States)",
|
||||
"zoho.eu (Europe)": "zoho.eu (Europe)",
|
||||
"zoho.in (India)": "zoho.in (India)",
|
||||
"zoho.com.au (Australia)": "zoho.com.au (Australia)",
|
||||
"zoho.jp (Japan)": "zoho.jp (Japan)",
|
||||
"zoho.com.cn (China)": "zoho.com.cn (China)",
|
||||
"Connect your Zoho Campaigns account using OAuth2": "Connect your Zoho Campaigns account using OAuth2",
|
||||
"Create Campaign": "Create Campaign",
|
||||
"Clone Campaign": "Clone Campaign",
|
||||
"Send Campaign": "Send Campaign",
|
||||
"Add/Update Contact": "Add/Update Contact",
|
||||
"Add Tag to Contact": "Add Tag to Contact",
|
||||
"Remove Tag": "Remove Tag",
|
||||
"Unsubscribe Contact": "Unsubscribe Contact",
|
||||
"Add Contact to Mailing List": "Add Contact to Mailing List",
|
||||
"Find Contact": "Find Contact",
|
||||
"Find Campaign": "Find Campaign",
|
||||
"Create a new campaign with campaign name, subject, topic, sender name/address, and mailing list.": "Create a new campaign with campaign name, subject, topic, sender name/address, and mailing list.",
|
||||
"Clone an existing campaign, optionally renaming.": "Clone an existing campaign, optionally renaming.",
|
||||
"Send a campaign that has been created or cloned.": "Send a campaign that has been created or cloned.",
|
||||
"Add a new contact or update an existing one. Confirmation email sent based on mailing list settings.": "Add a new contact or update an existing one. Confirmation email sent based on mailing list settings.",
|
||||
"Apply a tag to a contact by email. Creates the tag if it doesn't exist.": "Apply a tag to a contact by email. Creates the tag if it doesn't exist.",
|
||||
"Remove a tag from a contact.": "Remove a tag from a contact.",
|
||||
"Remove a contact from a mailing list.": "Remove a contact from a mailing list.",
|
||||
"Add contacts to your mailing lists.": "Add contacts to your mailing lists.",
|
||||
"Look up an existing contact by email address.": "Look up an existing contact by email address.",
|
||||
"Locate an existing campaign by campaign name.": "Locate an existing campaign by campaign name.",
|
||||
"Campaign Name": "Campaign Name",
|
||||
"From Email": "From Email",
|
||||
"Subject": "Subject",
|
||||
"Mailing Lists": "Mailing Lists",
|
||||
"Content URL": "Content URL",
|
||||
"Topic": "Topic",
|
||||
"Campaign": "Campaign",
|
||||
"From Name": "From Name",
|
||||
"Reply-To Email": "Reply-To Email",
|
||||
"Encoding Type": "Encoding Type",
|
||||
"Mailing List": "Mailing List",
|
||||
"Contact Information": "Contact Information",
|
||||
"Source": "来源",
|
||||
"Tag": "标签",
|
||||
"Contact Email": "Contact Email",
|
||||
"Emails": "电子邮件",
|
||||
"Contact Status": "Contact Status",
|
||||
"Sort Order": "Sort Order",
|
||||
"From Index": "From Index",
|
||||
"Range": "Range",
|
||||
"Campaign Status": "Campaign Status",
|
||||
"A name to your campaign": "A name to your campaign",
|
||||
"Sender email address for the campaign": "Sender email address for the campaign",
|
||||
"The subject line of the campaign": "The subject line of the campaign",
|
||||
"Select the mailing lists": "Select the mailing lists",
|
||||
"Public URL containing the HTML content for your campaign": "Public URL containing the HTML content for your campaign",
|
||||
"Select the topic": "Select the topic",
|
||||
"Select the campaign": "Select the campaign",
|
||||
"New name for the cloned campaign": "New name for the cloned campaign",
|
||||
"New subject line for the cloned campaign": "New subject line for the cloned campaign",
|
||||
"Sender name for the cloned campaign": "Sender name for the cloned campaign",
|
||||
"Sender email address for the cloned campaign": "Sender email address for the cloned campaign",
|
||||
"Reply-to email address for the cloned campaign": "Reply-to email address for the cloned campaign",
|
||||
"Email encoding type (e.g., UTF-8)": "Email encoding type (e.g., UTF-8)",
|
||||
"Select the mailing list": "Select the mailing list",
|
||||
"Information about the contact": "Information about the contact",
|
||||
"Contact source can be added.": "Contact source can be added.",
|
||||
"Select the tag to associate with the contact": "Select the tag to associate with the contact",
|
||||
"Email address of the contact to tag": "Email address of the contact to tag",
|
||||
"Email address of the contact to remove the tag from": "Email address of the contact to remove the tag from",
|
||||
"Contacts email addresses to be added to the mailing list (maximum 10 emails)": "Contacts email addresses to be added to the mailing list (maximum 10 emails)",
|
||||
"Email of the contact to be found (partial matches supported)": "Email of the contact to be found (partial matches supported)",
|
||||
"Filter contacts by status (optional)": "Filter contacts by status (optional)",
|
||||
"Sort order for results (optional)": "Sort order for results (optional)",
|
||||
"Starting index for pagination (optional, default: 1)": "Starting index for pagination (optional, default: 1)",
|
||||
"Number of contacts to retrieve (optional, default: all)": "Number of contacts to retrieve (optional, default: all)",
|
||||
"Name of the campaign to be found (partial matches supported)": "Name of the campaign to be found (partial matches supported)",
|
||||
"Filter campaigns by status (optional)": "Filter campaigns by status (optional)",
|
||||
"Number of campaigns to retrieve (optional, default: 5)": "Number of campaigns to retrieve (optional, default: 5)",
|
||||
"Active": "使用中",
|
||||
"Recent": "Recent",
|
||||
"Most Recent": "Most Recent",
|
||||
"Unsubscribed": "Unsubscribed",
|
||||
"Bounced": "Bounced",
|
||||
"Ascending": "升序",
|
||||
"Descending": "降序",
|
||||
"All": "所有的",
|
||||
"All Campaigns": "All Campaigns",
|
||||
"Drafts": "Drafts",
|
||||
"Scheduled": "Scheduled",
|
||||
"In Progress": "In Progress",
|
||||
"Sent": "Sent",
|
||||
"Stopped": "Stopped",
|
||||
"Canceled": "Canceled",
|
||||
"To Be Reviewed": "To Be Reviewed",
|
||||
"Reviewed": "Reviewed",
|
||||
"Paused": "已暂停",
|
||||
"In Testing": "In Testing",
|
||||
"New Contact": "New Contact",
|
||||
"Unsubscribe": "Unsubscribe",
|
||||
"New Campaign": "New Campaign",
|
||||
"Fires when a new contact is added to a selected mailing list.": "Fires when a new contact is added to a selected mailing list.",
|
||||
"Fires when a contact is removed from a mailing list or unsubscribed.": "Fires when a contact is removed from a mailing list or unsubscribed.",
|
||||
"Fires when a new campaign is created.": "Fires when a new campaign is created.",
|
||||
"Unsubscribe Type": "Unsubscribe Type",
|
||||
"Filter contacts by status (default: active)": "Filter contacts by status (default: active)",
|
||||
"Sort order for contacts (default: descending)": "Sort order for contacts (default: descending)",
|
||||
"Type of contact removal to monitor (default: unsubscribed)": "Type of contact removal to monitor (default: unsubscribed)"
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
import { createPiece, OAuth2PropertyValue } from '@activepieces/pieces-framework';
|
||||
import { addContactToMailingList } from './lib/actions/add-contact-to-mailing-list';
|
||||
import { addTagToContact } from './lib/actions/add-tag-to-contact';
|
||||
import { addUpdateContact } from './lib/actions/add-update-contact';
|
||||
import { cloneCampaign } from './lib/actions/clone-campaign';
|
||||
import { createCampaign } from './lib/actions/create-campaign';
|
||||
import { findCampaign } from './lib/actions/find-campaign';
|
||||
import { findContact } from './lib/actions/find-contact';
|
||||
import { removeTag } from './lib/actions/remove-tag';
|
||||
import { sendCampaign } from './lib/actions/send-campaign';
|
||||
import { unsubscribeContact } from './lib/actions/unsubscribe-contact';
|
||||
import { zohoCampaignsAuth, zohoCampaignsCommon } from './lib/common';
|
||||
import { newCampaign } from './lib/triggers/new-campaign';
|
||||
import { newContact } from './lib/triggers/new-contact';
|
||||
import { unsubscribe } from './lib/triggers/unsubscribe';
|
||||
import { createCustomApiCallAction } from '@activepieces/pieces-common';
|
||||
|
||||
export const zohoCampaigns = createPiece({
|
||||
displayName: 'Zoho Campaigns',
|
||||
description:
|
||||
'Zoho Campaigns is an email marketing platform for managing mailing lists, sending campaigns, tracking engagement, and automating subscriber workflows.',
|
||||
auth: zohoCampaignsAuth,
|
||||
minimumSupportedRelease: '0.36.1',
|
||||
logoUrl: 'https://cdn.activepieces.com/pieces/zoho-campaigns.png',
|
||||
authors: ['LuizDMM', 'onyedikachi-david'],
|
||||
actions: [
|
||||
// Write Actions
|
||||
createCampaign,
|
||||
cloneCampaign,
|
||||
sendCampaign,
|
||||
addUpdateContact,
|
||||
addTagToContact,
|
||||
removeTag,
|
||||
unsubscribeContact,
|
||||
addContactToMailingList,
|
||||
// Search Actions
|
||||
findContact,
|
||||
findCampaign,
|
||||
createCustomApiCallAction({
|
||||
baseUrl: (auth) =>
|
||||
{
|
||||
const authValue = auth as OAuth2PropertyValue
|
||||
const location = authValue.props?.['location'] || 'zoho.com';
|
||||
|
||||
return `${zohoCampaignsCommon.baseUrl(location)}?resfmt=JSON`
|
||||
},
|
||||
auth: zohoCampaignsAuth,
|
||||
authMapping: async (auth) => ({
|
||||
Authorization: `Zoho-oauthtoken ${(auth as OAuth2PropertyValue).access_token}`,
|
||||
}),
|
||||
}),
|
||||
],
|
||||
triggers: [
|
||||
newContact,
|
||||
unsubscribe,
|
||||
newCampaign,
|
||||
],
|
||||
});
|
||||
@@ -0,0 +1,26 @@
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { zohoCampaignsAuth, zohoCampaignsCommon } from '../common';
|
||||
|
||||
export const addContactToMailingList = createAction({
|
||||
auth: zohoCampaignsAuth,
|
||||
name: 'addContactToMailingList',
|
||||
displayName: 'Add Contact to Mailing List',
|
||||
description: 'Add contacts to your mailing lists.',
|
||||
props: zohoCampaignsCommon.addContactToMailingListProperties(),
|
||||
async run({ auth, propsValue }) {
|
||||
const location = auth.props?.['location'] as string || 'zoho.com';
|
||||
const accessToken = auth.access_token
|
||||
|
||||
await propsValidation.validateZod(
|
||||
propsValue,
|
||||
zohoCampaignsCommon.addContactToMailingListSchema
|
||||
);
|
||||
return await zohoCampaignsCommon.addContactToMailingList({
|
||||
accessToken,
|
||||
location,
|
||||
listkey: String(propsValue.listkey),
|
||||
emailids: propsValue.emails.join(','),
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,38 @@
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { zohoCampaignsAuth, zohoCampaignsCommon } from '../common';
|
||||
|
||||
export const addTagToContact = createAction({
|
||||
auth: zohoCampaignsAuth,
|
||||
name: 'addTagToContact',
|
||||
displayName: 'Add Tag to Contact',
|
||||
description:
|
||||
"Apply a tag to a contact by email. Creates the tag if it doesn't exist.",
|
||||
props: zohoCampaignsCommon.addTagToContactProperties,
|
||||
async run({ auth, propsValue }) {
|
||||
const location = auth.props?.['location'] as string || 'zoho.com';
|
||||
const accessToken = auth.access_token;
|
||||
await propsValidation.validateZod(
|
||||
propsValue,
|
||||
zohoCampaignsCommon.addTagToContactSchema
|
||||
);
|
||||
const tags = await zohoCampaignsCommon.listTags({ accessToken, location });
|
||||
const tagExists =
|
||||
tags !== undefined &&
|
||||
tags.some((tagMap) =>
|
||||
Object.values(tagMap).some((t) => t.tag_name === propsValue.tagName)
|
||||
);
|
||||
if (!tagExists) {
|
||||
await zohoCampaignsCommon.createTag({
|
||||
accessToken,
|
||||
location,
|
||||
tagName: propsValue.tagName,
|
||||
});
|
||||
}
|
||||
return await zohoCampaignsCommon.addTagToContact({
|
||||
accessToken,
|
||||
location,
|
||||
...propsValue,
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,32 @@
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { zohoCampaignsAuth, zohoCampaignsCommon } from '../common';
|
||||
|
||||
export const addUpdateContact = createAction({
|
||||
auth: zohoCampaignsAuth,
|
||||
name: 'addUpdateContact',
|
||||
displayName: 'Add/Update Contact',
|
||||
description:
|
||||
'Add a new contact or update an existing one. Confirmation email sent based on mailing list settings.',
|
||||
props: zohoCampaignsCommon.addUpdateContactProperties(),
|
||||
async run({ auth, propsValue }) {
|
||||
const location = auth.props?.['location'] as string || 'zoho.com';
|
||||
const accessToken = auth.access_token;
|
||||
await propsValidation.validateZod(
|
||||
propsValue,
|
||||
zohoCampaignsCommon.addUpdateContactSchema
|
||||
);
|
||||
const { additionalFields, ...baseFields } = propsValue.contactinfo;
|
||||
|
||||
return await zohoCampaignsCommon.addUpdateContact({
|
||||
accessToken,
|
||||
location,
|
||||
...propsValue,
|
||||
listkey: String(propsValue.listkey),
|
||||
contactinfo: {
|
||||
...baseFields,
|
||||
...additionalFields,
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,42 @@
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { zohoCampaignsAuth, zohoCampaignsCommon } from '../common';
|
||||
|
||||
export const cloneCampaign = createAction({
|
||||
auth: zohoCampaignsAuth,
|
||||
name: 'cloneCampaign',
|
||||
displayName: 'Clone Campaign',
|
||||
description: 'Clone an existing campaign, optionally renaming.',
|
||||
props: zohoCampaignsCommon.cloneCampaignProperties(),
|
||||
async run({ auth, propsValue }) {
|
||||
const location = auth.props?.['location'] as string || 'zoho.com';
|
||||
const accessToken = auth.access_token;
|
||||
await propsValidation.validateZod(
|
||||
propsValue,
|
||||
zohoCampaignsCommon.cloneCampaignSchema
|
||||
);
|
||||
const {
|
||||
campaignkey,
|
||||
campaignname,
|
||||
subject,
|
||||
from_name,
|
||||
from_add,
|
||||
reply_to,
|
||||
encode_type,
|
||||
} = propsValue;
|
||||
const campaigninfo = {
|
||||
oldcampaignkey: campaignkey,
|
||||
...(campaignname && { campaignname }),
|
||||
...(subject && { subject }),
|
||||
...(from_name && { from_name }),
|
||||
...(from_add && { from_add }),
|
||||
...(reply_to && { reply_to }),
|
||||
...(encode_type && { encode_type }),
|
||||
};
|
||||
return await zohoCampaignsCommon.cloneCampaign({
|
||||
accessToken,
|
||||
location,
|
||||
campaigninfo,
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,31 @@
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { zohoCampaignsAuth, zohoCampaignsCommon } from '../common';
|
||||
export const createCampaign = createAction({
|
||||
auth: zohoCampaignsAuth,
|
||||
name: 'createCampaign',
|
||||
displayName: 'Create Campaign',
|
||||
description:
|
||||
'Create a new campaign with campaign name, subject, topic, sender name/address, and mailing list.',
|
||||
props: zohoCampaignsCommon.createCampaignProperties(),
|
||||
async run({ auth, propsValue }) {
|
||||
const location = auth.props?.['location'] as string || 'zoho.com';
|
||||
const accessToken = auth.access_token ;
|
||||
await propsValidation.validateZod(
|
||||
propsValue,
|
||||
zohoCampaignsCommon.createCampaignSchema
|
||||
);
|
||||
const list_details =
|
||||
propsValue.list_details?.reduce((acc, curr) => {
|
||||
acc[curr] = [];
|
||||
return acc;
|
||||
}, {} as { [key: string]: [] }) || {};
|
||||
|
||||
return await zohoCampaignsCommon.createCampaign({
|
||||
accessToken,
|
||||
location,
|
||||
...propsValue,
|
||||
list_details,
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,49 @@
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { zohoCampaignsAuth, zohoCampaignsCommon } from '../common';
|
||||
|
||||
export const findCampaign = createAction({
|
||||
auth: zohoCampaignsAuth,
|
||||
name: 'findCampaign',
|
||||
displayName: 'Find Campaign',
|
||||
description: 'Locate an existing campaign by campaign name.',
|
||||
props: zohoCampaignsCommon.findCampaignProperties(),
|
||||
async run({ auth, propsValue }) {
|
||||
const location = auth.props?.['location'] as string || 'zoho.com';
|
||||
const accessToken = auth.access_token
|
||||
await propsValidation.validateZod(
|
||||
propsValue,
|
||||
zohoCampaignsCommon.findCampaignSchema
|
||||
);
|
||||
const { campaignName, status, sort, fromindex, range } = propsValue;
|
||||
|
||||
const searchParams: any = {
|
||||
accessToken,
|
||||
};
|
||||
|
||||
if (status) searchParams.status = status;
|
||||
if (sort) searchParams.sort = sort;
|
||||
if (fromindex) searchParams.fromindex = fromindex;
|
||||
if (range) searchParams.range = range;
|
||||
|
||||
const campaigns = await zohoCampaignsCommon.listCampaigns({
|
||||
...searchParams,
|
||||
location
|
||||
});
|
||||
const needle = (campaignName ?? '').trim().toLowerCase();
|
||||
|
||||
// Try to find case-insensitive and partial match
|
||||
const matchingCampaigns = campaigns.filter((campaign) =>
|
||||
(campaign.campaign_name ?? '').toLowerCase().includes(needle)
|
||||
);
|
||||
|
||||
if (matchingCampaigns.length === 0) {
|
||||
const statusText = status ? ` with status "${status}"` : '';
|
||||
throw new Error(
|
||||
`No campaign found with a name containing "${campaignName}"${statusText} in the selected account.`
|
||||
);
|
||||
}
|
||||
|
||||
return matchingCampaigns;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,57 @@
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { zohoCampaignsAuth, zohoCampaignsCommon } from '../common';
|
||||
|
||||
export const findContact = createAction({
|
||||
auth: zohoCampaignsAuth,
|
||||
name: 'findContact',
|
||||
displayName: 'Find Contact',
|
||||
description: 'Look up an existing contact by email address.',
|
||||
props: zohoCampaignsCommon.findContactProperties(),
|
||||
async run({ auth, propsValue }) {
|
||||
const location = auth.props?.['location'] as string || 'zoho.com';
|
||||
const accessToken = auth.access_token;
|
||||
await propsValidation.validateZod(
|
||||
propsValue,
|
||||
zohoCampaignsCommon.findContactSchema
|
||||
);
|
||||
const {
|
||||
listkey,
|
||||
contactEmail: email,
|
||||
status,
|
||||
sort,
|
||||
fromindex,
|
||||
range,
|
||||
} = propsValue;
|
||||
|
||||
const searchParams: any = {
|
||||
accessToken,
|
||||
listkey: listkey as string,
|
||||
};
|
||||
|
||||
if (status) searchParams.status = status;
|
||||
if (sort) searchParams.sort = sort;
|
||||
if (fromindex) searchParams.fromindex = fromindex;
|
||||
if (range) searchParams.range = range;
|
||||
|
||||
const contacts = await zohoCampaignsCommon.listContacts({
|
||||
...searchParams,
|
||||
location,
|
||||
});
|
||||
const needle = (email ?? '').trim().toLowerCase();
|
||||
|
||||
// Try to find case-insensitive and partial match
|
||||
const matchingContacts = contacts.filter((contact) =>
|
||||
(contact.contact_email ?? '').toLowerCase().includes(needle)
|
||||
);
|
||||
|
||||
if (matchingContacts.length === 0) {
|
||||
const statusText = status ? ` with status "${status}"` : '';
|
||||
throw new Error(
|
||||
`No contact found with an email containing "${email}"${statusText} in the selected mailing list.`
|
||||
);
|
||||
}
|
||||
|
||||
return matchingContacts;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,24 @@
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { zohoCampaignsAuth, zohoCampaignsCommon } from '../common';
|
||||
|
||||
export const removeTag = createAction({
|
||||
auth: zohoCampaignsAuth,
|
||||
name: 'removeTag',
|
||||
displayName: 'Remove Tag',
|
||||
description: 'Remove a tag from a contact.',
|
||||
props: zohoCampaignsCommon.removeTagProperties,
|
||||
async run({ auth, propsValue }) {
|
||||
const location = auth.props?.['location'] as string || 'zoho.com';
|
||||
const accessToken = auth.access_token;
|
||||
await propsValidation.validateZod(
|
||||
propsValue,
|
||||
zohoCampaignsCommon.removeTagSchema
|
||||
);
|
||||
return await zohoCampaignsCommon.removeTag({
|
||||
accessToken,
|
||||
location,
|
||||
...propsValue,
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,25 @@
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { zohoCampaignsAuth, zohoCampaignsCommon } from '../common';
|
||||
|
||||
export const sendCampaign = createAction({
|
||||
auth: zohoCampaignsAuth,
|
||||
name: 'sendCampaign',
|
||||
displayName: 'Send Campaign',
|
||||
description: 'Send a campaign that has been created or cloned.',
|
||||
props: zohoCampaignsCommon.sendCampaignProperties(),
|
||||
async run({ auth, propsValue }) {
|
||||
const location = auth.props?.['location'] as string || 'zoho.com';
|
||||
const accessToken = auth.access_token;
|
||||
await propsValidation.validateZod(
|
||||
propsValue,
|
||||
zohoCampaignsCommon.sendCampaignSchema
|
||||
);
|
||||
const { campaignkey } = propsValue;
|
||||
return await zohoCampaignsCommon.sendCampaign({
|
||||
accessToken,
|
||||
location,
|
||||
campaignkey: campaignkey as string,
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,31 @@
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { zohoCampaignsAuth, zohoCampaignsCommon } from '../common';
|
||||
|
||||
export const unsubscribeContact = createAction({
|
||||
auth: zohoCampaignsAuth,
|
||||
name: 'unsubscribeContact',
|
||||
displayName: 'Unsubscribe Contact',
|
||||
description: 'Remove a contact from a mailing list.',
|
||||
props: zohoCampaignsCommon.unsubscribeContactProperties(),
|
||||
async run({ auth, propsValue }) {
|
||||
const location = auth.props?.['location'] as string || 'zoho.com';
|
||||
const accessToken = auth.access_token;
|
||||
await propsValidation.validateZod(
|
||||
propsValue,
|
||||
zohoCampaignsCommon.unsubscribeContactSchema
|
||||
);
|
||||
const { additionalFields, ...baseFields } = propsValue.contactinfo;
|
||||
|
||||
return await zohoCampaignsCommon.unsubscribeContact({
|
||||
accessToken,
|
||||
location,
|
||||
listkey: String(propsValue.listkey),
|
||||
contactinfo: {
|
||||
...baseFields,
|
||||
...additionalFields,
|
||||
},
|
||||
...(propsValue.topic_id && { topic_id: propsValue.topic_id }),
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,393 @@
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { PieceAuth, Property } from '@activepieces/pieces-framework';
|
||||
import { OAuth2GrantType } from '@activepieces/shared';
|
||||
import * as properties from './properties';
|
||||
import * as schemas from './schemas';
|
||||
import {
|
||||
AddContactToMailingListParams,
|
||||
AddTagToContactParams,
|
||||
AddUpdateContactParams,
|
||||
AuthorizationParams,
|
||||
CloneCampaignParams,
|
||||
CreateCampaignParams,
|
||||
CreateCampaignResponse,
|
||||
CreateTagParams,
|
||||
ListCampaignParams,
|
||||
ListCampaignResponse,
|
||||
ListContactsParams,
|
||||
ListContactsResponse,
|
||||
ListMailingListsParams,
|
||||
ListMailingListsResponse,
|
||||
ListTagsResponse,
|
||||
ListTopicsResponse,
|
||||
RemoveTagParams,
|
||||
SendCampaignParams,
|
||||
UnsubscribeContactParams,
|
||||
} from './types';
|
||||
|
||||
export const zohoCampaignsAuth = PieceAuth.OAuth2({
|
||||
props: {
|
||||
location: Property.StaticDropdown({
|
||||
displayName: 'Data Center',
|
||||
description: 'The data center location of your Zoho Campaigns account',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{
|
||||
label: 'zoho.com (United States)',
|
||||
value: 'zoho.com',
|
||||
},
|
||||
{
|
||||
label: 'zoho.eu (Europe)',
|
||||
value: 'zoho.eu',
|
||||
},
|
||||
{
|
||||
label: 'zoho.in (India)',
|
||||
value: 'zoho.in',
|
||||
},
|
||||
{
|
||||
label: 'zoho.com.au (Australia)',
|
||||
value: 'zoho.com.au',
|
||||
},
|
||||
{
|
||||
label: 'zoho.jp (Japan)',
|
||||
value: 'zoho.jp',
|
||||
},
|
||||
{
|
||||
label: 'zoho.com.cn (China)',
|
||||
value: 'zoho.com.cn',
|
||||
},
|
||||
],
|
||||
},
|
||||
}),
|
||||
},
|
||||
description: 'Connect your Zoho Campaigns account using OAuth2',
|
||||
grantType: OAuth2GrantType.AUTHORIZATION_CODE,
|
||||
required: true,
|
||||
authUrl: 'https://accounts.{location}/oauth/v2/auth',
|
||||
tokenUrl: 'https://accounts.{location}/oauth/v2/token',
|
||||
scope: ['ZohoCampaigns.campaign.ALL', 'ZohoCampaigns.contact.ALL'],
|
||||
});
|
||||
|
||||
export const zohoCampaignsCommon = {
|
||||
baseUrl: (location = 'zoho.com') => {
|
||||
return `https://campaigns.${location}/api/v1.1`;
|
||||
},
|
||||
endpoints: {
|
||||
createCampaign: '/createCampaign',
|
||||
createTag: '/tag/add',
|
||||
cloneCampaign: '/json/clonecampaign',
|
||||
sendCampaign: '/sendcampaign',
|
||||
addUpdateContact: '/json/listsubscribe',
|
||||
addTagToContact: '/tag/associate',
|
||||
removeTag: '/tag/deassociate',
|
||||
unsubscribeContact: '/json/listunsubscribe',
|
||||
addContactToMailingList: '/addlistsubscribersinbulk',
|
||||
listContacts: '/getlistsubscribers',
|
||||
listCampaigns: '/recentcampaigns',
|
||||
listMailingLists: '/getmailinglists',
|
||||
listTopics: '/topics',
|
||||
listTags: '/tag/getalltags',
|
||||
},
|
||||
baseHeaders: (accessToken: string) => {
|
||||
return {
|
||||
Authorization: `Zoho-oauthtoken ${accessToken}`,
|
||||
'Content-Type': 'application/json',
|
||||
};
|
||||
},
|
||||
baseParams: {
|
||||
resfmt: 'JSON',
|
||||
},
|
||||
|
||||
// Properties
|
||||
createCampaignProperties: properties.createCampaign,
|
||||
cloneCampaignProperties: properties.cloneCampaign,
|
||||
sendCampaignProperties: properties.sendCampaign,
|
||||
addUpdateContactProperties: properties.addUpdateContact,
|
||||
addTagToContactProperties: properties.addTagToContact,
|
||||
removeTagProperties: properties.removeTag,
|
||||
unsubscribeContactProperties: properties.unsubscribeContact,
|
||||
addContactToMailingListProperties: properties.addContactToMailingList,
|
||||
findContactProperties: properties.findContact,
|
||||
findCampaignProperties: properties.findCampaign,
|
||||
newContactProperties: properties.newContact,
|
||||
unsubscribeProperties: properties.unsubscribe,
|
||||
|
||||
// Schemas
|
||||
createCampaignSchema: schemas.createCampaign,
|
||||
cloneCampaignSchema: schemas.cloneCampaign,
|
||||
sendCampaignSchema: schemas.sendCampaign,
|
||||
addUpdateContactSchema: schemas.addUpdateContact,
|
||||
addTagToContactSchema: schemas.addTagToContact,
|
||||
removeTagSchema: schemas.removeTag,
|
||||
unsubscribeContactSchema: schemas.unsubscribeContact,
|
||||
addContactToMailingListSchema: schemas.addContactToMailingList,
|
||||
findContactSchema: schemas.findContact,
|
||||
findCampaignSchema: schemas.findCampaign,
|
||||
|
||||
// Methods
|
||||
createCampaign: async ({
|
||||
accessToken,
|
||||
location = 'zoho.com',
|
||||
...campaignParams
|
||||
}: CreateCampaignParams & { location?: string }) => {
|
||||
const {
|
||||
list_details: listDetails,
|
||||
topicId,
|
||||
...restParams
|
||||
} = campaignParams;
|
||||
|
||||
const list_details = JSON.stringify(listDetails);
|
||||
const body = new URLSearchParams({
|
||||
resfmt: 'json',
|
||||
list_details,
|
||||
...restParams,
|
||||
...(topicId && { topicId }),
|
||||
}).toString();
|
||||
const response = await httpClient.sendRequest<CreateCampaignResponse>({
|
||||
method: HttpMethod.POST,
|
||||
url: `${zohoCampaignsCommon.baseUrl(location)}${zohoCampaignsCommon.endpoints.createCampaign}`,
|
||||
headers: {
|
||||
...zohoCampaignsCommon.baseHeaders(accessToken),
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
body,
|
||||
});
|
||||
return response.body;
|
||||
},
|
||||
createTag: async ({ accessToken, location = 'zoho.com', tagName }: CreateTagParams & { location?: string }) => {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: `${zohoCampaignsCommon.baseUrl(location)}${zohoCampaignsCommon.endpoints.createTag}`,
|
||||
headers: zohoCampaignsCommon.baseHeaders(accessToken),
|
||||
queryParams: {
|
||||
...zohoCampaignsCommon.baseParams,
|
||||
tagName,
|
||||
},
|
||||
});
|
||||
return response.body;
|
||||
},
|
||||
cloneCampaign: async ({ accessToken, location = 'zoho.com', campaigninfo }: CloneCampaignParams & { location?: string }) => {
|
||||
const strCampaignInfo = JSON.stringify(campaigninfo);
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${zohoCampaignsCommon.baseUrl(location)}${zohoCampaignsCommon.endpoints.cloneCampaign}`,
|
||||
headers: zohoCampaignsCommon.baseHeaders(accessToken),
|
||||
queryParams: {
|
||||
...zohoCampaignsCommon.baseParams,
|
||||
campaigninfo: strCampaignInfo,
|
||||
},
|
||||
});
|
||||
return response.body;
|
||||
},
|
||||
sendCampaign: async ({ accessToken, location = 'zoho.com', campaignkey }: SendCampaignParams & { location?: string }) => {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${zohoCampaignsCommon.baseUrl(location)}${zohoCampaignsCommon.endpoints.sendCampaign}`,
|
||||
headers: {
|
||||
...zohoCampaignsCommon.baseHeaders(accessToken),
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
queryParams: {
|
||||
...zohoCampaignsCommon.baseParams,
|
||||
campaignkey,
|
||||
},
|
||||
});
|
||||
return response.body;
|
||||
},
|
||||
addUpdateContact: async ({
|
||||
accessToken,
|
||||
location = 'zoho.com',
|
||||
...contactParams
|
||||
}: AddUpdateContactParams & { location?: string }) => {
|
||||
const {
|
||||
listkey,
|
||||
contactinfo: contactInfoObj,
|
||||
source,
|
||||
topic_id,
|
||||
} = contactParams;
|
||||
const body = new URLSearchParams({
|
||||
...zohoCampaignsCommon.baseParams,
|
||||
listkey,
|
||||
...(source && { source }),
|
||||
...(topic_id && { topic_id }),
|
||||
contactinfo: JSON.stringify(contactInfoObj),
|
||||
}).toString();
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${zohoCampaignsCommon.baseUrl(location)}${zohoCampaignsCommon.endpoints.addUpdateContact}`,
|
||||
headers: {
|
||||
...zohoCampaignsCommon.baseHeaders(accessToken),
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
body,
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
addTagToContact: async ({
|
||||
accessToken,
|
||||
location = 'zoho.com',
|
||||
...tagParams
|
||||
}: AddTagToContactParams & { location?: string }) => {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: `${zohoCampaignsCommon.baseUrl(location)}${zohoCampaignsCommon.endpoints.addTagToContact}`,
|
||||
headers: zohoCampaignsCommon.baseHeaders(accessToken),
|
||||
queryParams: {
|
||||
...zohoCampaignsCommon.baseParams,
|
||||
...tagParams,
|
||||
},
|
||||
});
|
||||
return response.body;
|
||||
},
|
||||
removeTag: async ({ accessToken, location = 'zoho.com', ...tagParams }: RemoveTagParams & { location?: string }) => {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: `${zohoCampaignsCommon.baseUrl(location)}${zohoCampaignsCommon.endpoints.removeTag}`,
|
||||
headers: zohoCampaignsCommon.baseHeaders(accessToken),
|
||||
queryParams: {
|
||||
...zohoCampaignsCommon.baseParams,
|
||||
...tagParams,
|
||||
},
|
||||
});
|
||||
return response.body;
|
||||
},
|
||||
unsubscribeContact: async ({
|
||||
accessToken,
|
||||
location = 'zoho.com',
|
||||
...unsubscribeParams
|
||||
}: UnsubscribeContactParams & { location?: string }) => {
|
||||
const {
|
||||
contactinfo: contactInfoObj,
|
||||
listkey,
|
||||
topic_id,
|
||||
} = unsubscribeParams;
|
||||
const body = new URLSearchParams({
|
||||
...zohoCampaignsCommon.baseParams,
|
||||
listkey,
|
||||
...(topic_id && { topic_id }),
|
||||
contactinfo: JSON.stringify(contactInfoObj),
|
||||
}).toString();
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${zohoCampaignsCommon.baseUrl(location)}${zohoCampaignsCommon.endpoints.unsubscribeContact}`,
|
||||
headers: {
|
||||
...zohoCampaignsCommon.baseHeaders(accessToken),
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
body,
|
||||
});
|
||||
return response.body;
|
||||
},
|
||||
addContactToMailingList: async ({
|
||||
accessToken,
|
||||
location = 'zoho.com',
|
||||
...mailingListParams
|
||||
}: AddContactToMailingListParams & { location?: string }) => {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${zohoCampaignsCommon.baseUrl(location)}${zohoCampaignsCommon.endpoints.addContactToMailingList}`,
|
||||
headers: zohoCampaignsCommon.baseHeaders(accessToken),
|
||||
queryParams: {
|
||||
...zohoCampaignsCommon.baseParams,
|
||||
...mailingListParams,
|
||||
},
|
||||
});
|
||||
return response.body;
|
||||
},
|
||||
listContacts: async ({
|
||||
accessToken,
|
||||
location = 'zoho.com',
|
||||
listkey,
|
||||
...rest
|
||||
}: ListContactsParams & { location?: string }) => {
|
||||
const { fromindex, range, ...otherParams } = rest;
|
||||
const strFromIndex =
|
||||
typeof fromindex === 'number' ? String(fromindex) : undefined;
|
||||
const strRange = typeof range === 'number' ? String(range) : undefined;
|
||||
const queryParams = {
|
||||
...zohoCampaignsCommon.baseParams,
|
||||
listkey,
|
||||
...(fromindex && { fromindex: strFromIndex }),
|
||||
...(range && { range: strRange }),
|
||||
...otherParams,
|
||||
};
|
||||
const response = await httpClient.sendRequest<ListContactsResponse>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${zohoCampaignsCommon.baseUrl(location)}${zohoCampaignsCommon.endpoints.listContacts}`,
|
||||
headers: zohoCampaignsCommon.baseHeaders(accessToken),
|
||||
queryParams,
|
||||
});
|
||||
return response.body.list_of_details || [];
|
||||
},
|
||||
listCampaigns: async ({
|
||||
accessToken,
|
||||
location = 'zoho.com',
|
||||
...filterParams
|
||||
}: ListCampaignParams & { location?: string }) => {
|
||||
const { fromindex, range, ...otherParams } = filterParams;
|
||||
const strFromIndex =
|
||||
typeof fromindex === 'number' ? String(fromindex) : undefined;
|
||||
const strRange = typeof range === 'number' ? String(range) : undefined;
|
||||
const queryParams = {
|
||||
...zohoCampaignsCommon.baseParams,
|
||||
...(fromindex && { fromindex: strFromIndex }),
|
||||
...(range && { range: strRange }),
|
||||
...otherParams,
|
||||
};
|
||||
const response = await httpClient.sendRequest<ListCampaignResponse>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${zohoCampaignsCommon.baseUrl(location)}${zohoCampaignsCommon.endpoints.listCampaigns}`,
|
||||
headers: zohoCampaignsCommon.baseHeaders(accessToken),
|
||||
queryParams,
|
||||
});
|
||||
return response.body.recent_campaigns || [];
|
||||
},
|
||||
listMailingLists: async ({
|
||||
accessToken,
|
||||
location = 'zoho.com',
|
||||
...filterParams
|
||||
}: ListMailingListsParams & { location?: string }) => {
|
||||
const { fromindex, range, ...otherParams } = filterParams;
|
||||
const strFromIndex =
|
||||
typeof fromindex === 'number' ? String(fromindex) : undefined;
|
||||
const strRange = typeof range === 'number' ? String(range) : undefined;
|
||||
const queryParams = {
|
||||
...zohoCampaignsCommon.baseParams,
|
||||
...(fromindex && { fromindex: strFromIndex }),
|
||||
...(range && { range: strRange }),
|
||||
...otherParams,
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest<ListMailingListsResponse>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${zohoCampaignsCommon.baseUrl(location)}${zohoCampaignsCommon.endpoints.listMailingLists}`,
|
||||
headers: zohoCampaignsCommon.baseHeaders(accessToken),
|
||||
queryParams,
|
||||
});
|
||||
return response.body.list_of_details || [];
|
||||
},
|
||||
listTopics: async ({ accessToken, location = 'zoho.com' }: AuthorizationParams & { location?: string }) => {
|
||||
const response = await httpClient.sendRequest<ListTopicsResponse>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${zohoCampaignsCommon.baseUrl(location)}${zohoCampaignsCommon.endpoints.listTopics}`,
|
||||
headers: zohoCampaignsCommon.baseHeaders(accessToken),
|
||||
queryParams: {
|
||||
...zohoCampaignsCommon.baseParams,
|
||||
},
|
||||
});
|
||||
return response.body.topicDetails;
|
||||
},
|
||||
listTags: async ({ accessToken, location = 'zoho.com' }: AuthorizationParams & { location?: string }) => {
|
||||
const response = await httpClient.sendRequest<ListTagsResponse>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${zohoCampaignsCommon.baseUrl(location)}${zohoCampaignsCommon.endpoints.listTags}`,
|
||||
headers: zohoCampaignsCommon.baseHeaders(accessToken),
|
||||
queryParams: {
|
||||
...zohoCampaignsCommon.baseParams,
|
||||
},
|
||||
});
|
||||
return response.body.tags;
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,471 @@
|
||||
import { PiecePropValueSchema, Property } from '@activepieces/pieces-framework';
|
||||
import { zohoCampaignsAuth, zohoCampaignsCommon } from '.';
|
||||
import { Tag } from './types';
|
||||
|
||||
// Custom Properties
|
||||
const campaignDropdown = () =>
|
||||
Property.Dropdown({
|
||||
auth: zohoCampaignsAuth,
|
||||
displayName: 'Campaign',
|
||||
description: 'Select the campaign',
|
||||
required: true,
|
||||
refreshers: ['auth'],
|
||||
options: async ({ auth }) => {
|
||||
const authValue = auth as PiecePropValueSchema<typeof zohoCampaignsAuth>;
|
||||
const location = authValue.props?.['location'] || 'zoho.com';
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your Zoho Campaigns account first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
const campaigns = await zohoCampaignsCommon.listCampaigns({
|
||||
accessToken: authValue.access_token,
|
||||
location,
|
||||
});
|
||||
if (campaigns.length === 0) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'No campaigns found',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
options: campaigns.map((campaign) => ({
|
||||
label: campaign.campaign_name,
|
||||
value: campaign.campaign_key,
|
||||
})),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
const tagDropdown = ({ required = true }: { required?: boolean }) =>
|
||||
Property.Dropdown({
|
||||
auth: zohoCampaignsAuth,
|
||||
displayName: 'Tag',
|
||||
description: 'Select the tag to associate with the contact',
|
||||
required: required,
|
||||
refreshers: ['auth'],
|
||||
options: async ({
|
||||
auth,
|
||||
}): Promise<{
|
||||
disabled?: boolean;
|
||||
placeholder?: string;
|
||||
options: Array<{ label: string; value: string }>;
|
||||
}> => {
|
||||
const authValue = auth as PiecePropValueSchema<typeof zohoCampaignsAuth>;
|
||||
const location = authValue.props?.['location'] || 'zoho.com';
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your Zoho Campaigns account first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
const tags = await zohoCampaignsCommon.listTags({
|
||||
accessToken: authValue.access_token,
|
||||
location,
|
||||
});
|
||||
if (!tags || tags.length === 0) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'No tags found',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
const tagOptions = tags.flatMap((tagMap: Tag) =>
|
||||
Object.values(tagMap).map((tag: any) => ({
|
||||
label: tag.tag_name,
|
||||
value: tag.tag_name,
|
||||
}))
|
||||
);
|
||||
|
||||
return {
|
||||
options: tagOptions,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
const mailingListDropdown = ({ required = true }) =>
|
||||
Property.Dropdown({
|
||||
auth: zohoCampaignsAuth,
|
||||
displayName: 'Mailing List',
|
||||
description: 'Select the mailing list',
|
||||
required: required,
|
||||
refreshers: ['auth'],
|
||||
options: async ({ auth }) => {
|
||||
const authValue = auth as PiecePropValueSchema<typeof zohoCampaignsAuth>;
|
||||
const location = authValue.props?.['location'] || 'zoho.com';
|
||||
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your Zoho Campaigns account first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
const mailingLists = await zohoCampaignsCommon.listMailingLists({
|
||||
accessToken: authValue.access_token,
|
||||
location,
|
||||
});
|
||||
if (mailingLists.length === 0) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'No mailing lists found',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
return {
|
||||
options: mailingLists.map((list) => ({
|
||||
label: list.listname,
|
||||
value: list.listkey,
|
||||
})),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
const mailingListMultiSelectDropdown = ({ required = true }) =>
|
||||
Property.MultiSelectDropdown({
|
||||
auth: zohoCampaignsAuth,
|
||||
displayName: 'Mailing Lists',
|
||||
description: 'Select the mailing lists',
|
||||
required: required,
|
||||
refreshers: ['auth'],
|
||||
options: async ({ auth }) => {
|
||||
const authValue = auth as PiecePropValueSchema<typeof zohoCampaignsAuth>;
|
||||
const location = authValue.props?.['location'] || 'zoho.com';
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your Zoho Campaigns account first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
const mailingLists = await zohoCampaignsCommon.listMailingLists({
|
||||
accessToken: authValue.access_token,
|
||||
location,
|
||||
});
|
||||
if (mailingLists.length === 0) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'No mailing lists found',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
return {
|
||||
options: mailingLists.map((list) => ({
|
||||
label: list.listname,
|
||||
value: list.listkey,
|
||||
})),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
const topicDropdown = ({ required = true }) =>
|
||||
Property.Dropdown({
|
||||
auth: zohoCampaignsAuth,
|
||||
displayName: 'Topic',
|
||||
description: 'Select the topic',
|
||||
required: required,
|
||||
refreshers: ['auth'],
|
||||
options: async ({ auth }) => {
|
||||
const authValue = auth as PiecePropValueSchema<typeof zohoCampaignsAuth>;
|
||||
const location = authValue.props?.['location'] || 'zoho.com';
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your Zoho Campaigns account first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
const topics = await zohoCampaignsCommon.listTopics({
|
||||
accessToken: authValue.access_token,
|
||||
location,
|
||||
});
|
||||
if (topics.length === 0) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'No topics found',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
return {
|
||||
options: topics.map((topic) => ({
|
||||
label: topic.topicName,
|
||||
value: topic.topicId,
|
||||
})),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
const contactInformation = Property.DynamicProperties({
|
||||
displayName: 'Contact Information',
|
||||
description: 'Information about the contact',
|
||||
required: true,
|
||||
auth: zohoCampaignsAuth,
|
||||
refreshers: ['auth'],
|
||||
props: async () => ({
|
||||
'Contact Email': Property.ShortText({
|
||||
displayName: 'Contact Email',
|
||||
description: 'Email address of the contact',
|
||||
required: true,
|
||||
}),
|
||||
'First Name': Property.ShortText({
|
||||
displayName: 'First Name',
|
||||
description: 'First name of the contact',
|
||||
required: false,
|
||||
}),
|
||||
'Last Name': Property.ShortText({
|
||||
displayName: 'Last Name',
|
||||
description: 'Last name of the contact',
|
||||
required: false,
|
||||
}),
|
||||
Phone: Property.ShortText({
|
||||
displayName: 'Phone',
|
||||
description: 'Phone number of the contact',
|
||||
required: false,
|
||||
}),
|
||||
'Company Name': Property.ShortText({
|
||||
displayName: 'Company Name',
|
||||
description: 'Company name of the contact',
|
||||
required: false,
|
||||
}),
|
||||
additionalFields: Property.Object({
|
||||
displayName: 'Additional Fields',
|
||||
description:
|
||||
'Additional fields for the contact in key-value pairs. For example, {"City": "New York", "State": "NY"}',
|
||||
required: false,
|
||||
}),
|
||||
}),
|
||||
});
|
||||
|
||||
// Action Properties
|
||||
export const createCampaign = () => ({
|
||||
campaignname: Property.ShortText({
|
||||
displayName: 'Campaign Name',
|
||||
description: 'A name to your campaign',
|
||||
required: true,
|
||||
}),
|
||||
from_email: Property.ShortText({
|
||||
displayName: 'From Email',
|
||||
description: 'Sender email address for the campaign',
|
||||
required: true,
|
||||
}),
|
||||
subject: Property.ShortText({
|
||||
displayName: 'Subject',
|
||||
description: 'The subject line of the campaign',
|
||||
required: true,
|
||||
}),
|
||||
list_details: mailingListMultiSelectDropdown({ required: true }),
|
||||
content_url: Property.ShortText({
|
||||
displayName: 'Content URL',
|
||||
description: 'Public URL containing the HTML content for your campaign',
|
||||
required: false,
|
||||
}),
|
||||
topicId: topicDropdown({ required: false }),
|
||||
});
|
||||
|
||||
export const cloneCampaign = () => ({
|
||||
campaignkey: campaignDropdown(),
|
||||
campaignname: Property.ShortText({
|
||||
displayName: 'Campaign Name',
|
||||
description: 'New name for the cloned campaign',
|
||||
required: false,
|
||||
}),
|
||||
subject: Property.ShortText({
|
||||
displayName: 'Subject',
|
||||
description: 'New subject line for the cloned campaign',
|
||||
required: false,
|
||||
}),
|
||||
from_name: Property.ShortText({
|
||||
displayName: 'From Name',
|
||||
description: 'Sender name for the cloned campaign',
|
||||
required: false,
|
||||
}),
|
||||
from_add: Property.ShortText({
|
||||
displayName: 'From Email',
|
||||
description: 'Sender email address for the cloned campaign',
|
||||
required: false,
|
||||
}),
|
||||
reply_to: Property.ShortText({
|
||||
displayName: 'Reply-To Email',
|
||||
description: 'Reply-to email address for the cloned campaign',
|
||||
required: false,
|
||||
}),
|
||||
encode_type: Property.ShortText({
|
||||
displayName: 'Encoding Type',
|
||||
description: 'Email encoding type (e.g., UTF-8)',
|
||||
required: false,
|
||||
}),
|
||||
});
|
||||
|
||||
export const sendCampaign = () => ({
|
||||
campaignkey: campaignDropdown(),
|
||||
});
|
||||
|
||||
export const addUpdateContact = () => ({
|
||||
listkey: mailingListDropdown({ required: true }),
|
||||
contactinfo: contactInformation,
|
||||
source: Property.ShortText({
|
||||
displayName: 'Source',
|
||||
description: 'Contact source can be added.',
|
||||
required: false,
|
||||
}),
|
||||
topic_id: topicDropdown({ required: false }),
|
||||
});
|
||||
|
||||
export const addTagToContact: {
|
||||
tagName: any;
|
||||
lead_email: any;
|
||||
} = {
|
||||
tagName: tagDropdown({ required: true }),
|
||||
lead_email: Property.ShortText({
|
||||
displayName: 'Contact Email',
|
||||
description: 'Email address of the contact to tag',
|
||||
required: true,
|
||||
}),
|
||||
};
|
||||
|
||||
export const removeTag: {
|
||||
tagName: any;
|
||||
lead_email: any;
|
||||
} = {
|
||||
tagName: tagDropdown({ required: true }),
|
||||
lead_email: Property.ShortText({
|
||||
displayName: 'Contact Email',
|
||||
description: 'Email address of the contact to remove the tag from',
|
||||
required: true,
|
||||
}),
|
||||
};
|
||||
|
||||
export const unsubscribeContact = () => ({
|
||||
listkey: mailingListDropdown({ required: true }),
|
||||
contactinfo: contactInformation,
|
||||
topic_id: topicDropdown({ required: false }),
|
||||
});
|
||||
|
||||
export const addContactToMailingList = () => ({
|
||||
listkey: mailingListDropdown({ required: true }),
|
||||
emails: Property.Array({
|
||||
displayName: 'Emails',
|
||||
description:
|
||||
'Contacts email addresses to be added to the mailing list (maximum 10 emails)',
|
||||
required: true,
|
||||
}),
|
||||
});
|
||||
|
||||
export const findContact = () => ({
|
||||
listkey: mailingListDropdown({ required: true }),
|
||||
contactEmail: Property.ShortText({
|
||||
displayName: 'Contact Email',
|
||||
description: 'Email of the contact to be found (partial matches supported)',
|
||||
required: true,
|
||||
}),
|
||||
status: Property.StaticDropdown({
|
||||
displayName: 'Contact Status',
|
||||
description: 'Filter contacts by status',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Active', value: 'active' },
|
||||
{ label: 'Recent', value: 'recent' },
|
||||
{ label: 'Most Recent', value: 'most recent' },
|
||||
{ label: 'Unsubscribed', value: 'unsub' },
|
||||
{ label: 'Bounced', value: 'bounce' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
sort: Property.StaticDropdown({
|
||||
displayName: 'Sort Order',
|
||||
description: 'Sort order for results',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Ascending', value: 'asc' },
|
||||
{ label: 'Descending', value: 'desc' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
fromindex: Property.Number({
|
||||
displayName: 'From Index',
|
||||
description: 'Starting index for pagination (optional, default: 1)',
|
||||
required: false,
|
||||
}),
|
||||
range: Property.Number({
|
||||
displayName: 'Range',
|
||||
description: 'Number of contacts to retrieve (optional, default: all)',
|
||||
required: false,
|
||||
}),
|
||||
});
|
||||
|
||||
export const findCampaign = () => ({
|
||||
campaignName: Property.ShortText({
|
||||
displayName: 'Campaign Name',
|
||||
description: 'Name of the campaign to be found (partial matches supported)',
|
||||
required: true,
|
||||
}),
|
||||
status: Property.StaticDropdown({
|
||||
displayName: 'Campaign Status',
|
||||
description: 'Filter campaigns by status (optional)',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'All', value: 'all' },
|
||||
{ label: 'All Campaigns', value: 'all campaigns' },
|
||||
{ label: 'Drafts', value: 'drafts' },
|
||||
{ label: 'Scheduled', value: 'scheduled' },
|
||||
{ label: 'In Progress', value: 'inprogress' },
|
||||
{ label: 'Sent', value: 'sent' },
|
||||
{ label: 'Stopped', value: 'stopped' },
|
||||
{ label: 'Canceled', value: 'canceled' },
|
||||
{ label: 'To Be Reviewed', value: 'tobereviewed' },
|
||||
{ label: 'Reviewed', value: 'reviewed' },
|
||||
{ label: 'Paused', value: 'paused' },
|
||||
{ label: 'In Testing', value: 'intesting' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
sort: Property.StaticDropdown({
|
||||
displayName: 'Sort Order',
|
||||
description: 'Sort order for results (optional)',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Ascending', value: 'asc' },
|
||||
{ label: 'Descending', value: 'desc' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
fromindex: Property.Number({
|
||||
displayName: 'From Index',
|
||||
description: 'Starting index for pagination (optional, default: 1)',
|
||||
required: false,
|
||||
}),
|
||||
range: Property.Number({
|
||||
displayName: 'Range',
|
||||
description: 'Number of campaigns to retrieve (optional, default: 5)',
|
||||
required: false,
|
||||
}),
|
||||
});
|
||||
|
||||
export const newContact = () => ({
|
||||
listkey: mailingListDropdown({ required: true }),
|
||||
});
|
||||
|
||||
export const unsubscribe = () => ({
|
||||
listkey: mailingListDropdown({ required: true }),
|
||||
status: Property.StaticDropdown({
|
||||
displayName: 'Unsubscribe Type',
|
||||
description: 'Type of contact removal to monitor (default: unsubscribed)',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Unsubscribed', value: 'unsub' },
|
||||
{ label: 'Bounced', value: 'bounce' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
});
|
||||
@@ -0,0 +1,73 @@
|
||||
import z from 'zod';
|
||||
|
||||
export const createCampaign = {
|
||||
campaignname: z.string(),
|
||||
from_email: z.string().email(),
|
||||
subject: z.string(),
|
||||
content_url: z.string().url().optional(),
|
||||
list_details: z.array(z.string()),
|
||||
topicId: z.string().nullable().optional(),
|
||||
}
|
||||
|
||||
export const cloneCampaign = {
|
||||
campaignkey: z.string(),
|
||||
campaignname: z.string().optional(),
|
||||
subject: z.string().optional(),
|
||||
from_name: z.string().optional(),
|
||||
from_add: z.string().email().optional(),
|
||||
reply_to: z.string().email().optional(),
|
||||
encode_type: z.string().optional(),
|
||||
}
|
||||
|
||||
export const sendCampaign = {
|
||||
campaignkey: z.string(),
|
||||
}
|
||||
|
||||
export const addUpdateContact = {
|
||||
listkey: z.string(),
|
||||
contactinfo: z.object({
|
||||
'Contact Email': z.string().email(),
|
||||
}),
|
||||
source: z.string().optional(),
|
||||
topic_id: z.string().nullable().optional(),
|
||||
}
|
||||
|
||||
export const addTagToContact = {
|
||||
tagName: z.string(),
|
||||
lead_email: z.string().email(),
|
||||
}
|
||||
|
||||
export const removeTag = {
|
||||
tagName: z.string(),
|
||||
lead_email: z.string().email(),
|
||||
}
|
||||
|
||||
export const unsubscribeContact = {
|
||||
listkey: z.string(),
|
||||
contactinfo: z.object({
|
||||
'Contact Email': z.string().email(),
|
||||
}),
|
||||
topic_id: z.string().nullable().optional(),
|
||||
}
|
||||
|
||||
export const addContactToMailingList = {
|
||||
listkey: z.string(),
|
||||
emails: z.array(z.string().email()).min(1).max(10),
|
||||
}
|
||||
|
||||
export const findContact = {
|
||||
listkey: z.string(),
|
||||
contactEmail: z.string().email(),
|
||||
status: z.enum(['active', 'recent', 'most recent', 'unsub', 'bounce']).optional(),
|
||||
sort: z.enum(['asc', 'desc']).optional(),
|
||||
fromindex: z.number().min(1).optional(),
|
||||
range: z.number().min(1).optional(),
|
||||
}
|
||||
|
||||
export const findCampaign = {
|
||||
campaignName: z.string(),
|
||||
status: z.enum(['all', 'all campaigns', 'drafts', 'scheduled', 'inprogress', 'sent', 'stopped', 'canceled', 'tobereviewed', 'reviewed', 'paused', 'intesting']).optional(),
|
||||
sort: z.enum(['asc', 'desc']).optional(),
|
||||
fromindex: z.number().min(1).optional(),
|
||||
range: z.number().min(1).optional(),
|
||||
}
|
||||
@@ -0,0 +1,224 @@
|
||||
export interface AuthorizationParams {
|
||||
accessToken: string;
|
||||
}
|
||||
|
||||
export interface BaseCampaignKeyParams {
|
||||
campaignkey: string;
|
||||
}
|
||||
|
||||
export interface CreateCampaignParams extends AuthorizationParams {
|
||||
campaignname: string;
|
||||
from_email: string;
|
||||
subject: string;
|
||||
content_url?: string;
|
||||
list_details: object;
|
||||
topicId?: string;
|
||||
}
|
||||
|
||||
export interface CreateTagParams extends AuthorizationParams {
|
||||
tagName: string;
|
||||
}
|
||||
|
||||
export interface CloneCampaignParams extends AuthorizationParams {
|
||||
campaigninfo: object;
|
||||
}
|
||||
|
||||
export interface SendCampaignParams
|
||||
extends AuthorizationParams,
|
||||
BaseCampaignKeyParams {}
|
||||
|
||||
export interface AddUpdateContactParams extends AuthorizationParams {
|
||||
listkey: string;
|
||||
contactinfo: object;
|
||||
source?: string;
|
||||
topic_id?: string;
|
||||
}
|
||||
|
||||
export interface AddTagToContactParams extends AuthorizationParams {
|
||||
tagName: string;
|
||||
lead_email: string;
|
||||
}
|
||||
|
||||
export interface RemoveTagParams extends AuthorizationParams {
|
||||
tagName: string;
|
||||
lead_email: string;
|
||||
}
|
||||
|
||||
export interface UnsubscribeContactParams extends AuthorizationParams {
|
||||
listkey: string;
|
||||
contactinfo: object;
|
||||
topic_id?: string;
|
||||
}
|
||||
|
||||
export interface AddContactToMailingListParams extends AuthorizationParams {
|
||||
listkey: string;
|
||||
emailids: string;
|
||||
}
|
||||
|
||||
export interface ListContactsParams extends AuthorizationParams {
|
||||
listkey: string;
|
||||
sort?: 'asc' | 'desc';
|
||||
fromindex?: number;
|
||||
range?: number;
|
||||
status?: 'active' | 'recent' | 'most recent' | 'unsub' | 'bounce';
|
||||
}
|
||||
|
||||
export interface ListCampaignParams extends AuthorizationParams {
|
||||
sort?: 'asc' | 'desc';
|
||||
fromindex?: number;
|
||||
range?: number;
|
||||
status?:
|
||||
| 'all'
|
||||
| 'all campaigns'
|
||||
| 'drafts'
|
||||
| 'scheduled'
|
||||
| 'inprogress'
|
||||
| 'sent'
|
||||
| 'stopped'
|
||||
| 'canceled'
|
||||
| 'tobereviewed'
|
||||
| 'reviewed'
|
||||
| 'paused'
|
||||
| 'intesting';
|
||||
}
|
||||
|
||||
export interface ListMailingListsParams extends AuthorizationParams {
|
||||
sort?: 'asc' | 'desc';
|
||||
fromindex?: number;
|
||||
range?: number;
|
||||
}
|
||||
|
||||
|
||||
// API Response types
|
||||
export type Campaign = {
|
||||
campaign_key: string;
|
||||
campaign_name: string;
|
||||
created_date_string: string;
|
||||
campaign_status: string;
|
||||
created_time: string;
|
||||
campaign_preview: string;
|
||||
};
|
||||
|
||||
export type Contact = {
|
||||
firstname: string;
|
||||
added_time: string;
|
||||
phone: string;
|
||||
companyname: string;
|
||||
contact_email: string;
|
||||
lastname: string;
|
||||
zuid: string;
|
||||
};
|
||||
|
||||
export type MailingList = {
|
||||
date: string;
|
||||
deletable: string;
|
||||
segments: object;
|
||||
updated_time_gmt: string;
|
||||
listdesc: string;
|
||||
created_time_gmt: string;
|
||||
list_created_time: string;
|
||||
noofunsubcnt: string;
|
||||
lockstatus: string;
|
||||
listkey: string;
|
||||
listtype: string;
|
||||
sentcnt: string;
|
||||
owner: string;
|
||||
list_campaigns_count: string;
|
||||
created_time: string;
|
||||
noofcontacts: string;
|
||||
editable: string;
|
||||
listname: string;
|
||||
listdgs: string;
|
||||
noofbouncecnt: string;
|
||||
issmart: string;
|
||||
list_created_date: string;
|
||||
listnotifications: string;
|
||||
listunino: string;
|
||||
zuid: string;
|
||||
servicetype: string;
|
||||
sno: string;
|
||||
is_public: string;
|
||||
otherslist: string;
|
||||
zx: string;
|
||||
};
|
||||
|
||||
export type Topic = {
|
||||
topicId: string;
|
||||
topicName: string;
|
||||
primaryList: number;
|
||||
};
|
||||
|
||||
export type Tag = {
|
||||
[key: string]: {
|
||||
tagowner: string;
|
||||
tag_created_time: string;
|
||||
tag_name: string;
|
||||
tag_color: string;
|
||||
tag_desc: string;
|
||||
tagged_contact_count: string;
|
||||
is_crm_tag: string;
|
||||
zuid: string;
|
||||
};
|
||||
};
|
||||
|
||||
export interface ListCampaignResponse {
|
||||
fromindex: string;
|
||||
total_record_count: string;
|
||||
code: string;
|
||||
recent_campaigns: Campaign[];
|
||||
range: string;
|
||||
campaign_count: string;
|
||||
uri: string;
|
||||
version: string;
|
||||
requestdetails: string;
|
||||
status: string;
|
||||
}
|
||||
|
||||
export interface ListContactsResponse {
|
||||
code: string;
|
||||
uri: string;
|
||||
version: string;
|
||||
list_of_details: Contact[];
|
||||
requestdetails: {
|
||||
fromindex: number;
|
||||
range: number;
|
||||
sort: string;
|
||||
status: string;
|
||||
};
|
||||
status: string;
|
||||
}
|
||||
|
||||
export interface ListMailingListsResponse {
|
||||
code: string;
|
||||
uri: string;
|
||||
version: string;
|
||||
list_of_details: MailingList[];
|
||||
requestdetails: {
|
||||
fromindex: number;
|
||||
range: number;
|
||||
total_list_count: number;
|
||||
sort: string;
|
||||
};
|
||||
status: string;
|
||||
}
|
||||
|
||||
export interface ListTopicsResponse {
|
||||
topicDetails: Topic[];
|
||||
message: string;
|
||||
code: string;
|
||||
uri: string;
|
||||
}
|
||||
|
||||
export interface CreateCampaignResponse {
|
||||
message: string;
|
||||
campaignKey: string;
|
||||
code: string;
|
||||
uri: string;
|
||||
}
|
||||
|
||||
export interface ListTagsResponse {
|
||||
uri: string;
|
||||
version: string;
|
||||
requestdetails: string;
|
||||
tags?: Tag[];
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
import {
|
||||
DedupeStrategy,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import {
|
||||
AppConnectionValueForAuthProperty,
|
||||
createTrigger,
|
||||
TriggerStrategy,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import dayjs from 'dayjs';
|
||||
import { zohoCampaignsAuth, zohoCampaignsCommon } from '../common';
|
||||
|
||||
const polling: Polling<
|
||||
AppConnectionValueForAuthProperty<typeof zohoCampaignsAuth>,
|
||||
Record<string, never>
|
||||
> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth }) => {
|
||||
const location = auth.props?.['location'] as string || 'zoho.com';
|
||||
const accessToken = auth.access_token;
|
||||
const items = await zohoCampaignsCommon.listCampaigns({
|
||||
accessToken,
|
||||
location,
|
||||
});
|
||||
return items.map((item) => ({
|
||||
epochMilliSeconds: dayjs(item.created_date_string).valueOf(),
|
||||
data: item,
|
||||
}));
|
||||
},
|
||||
};
|
||||
|
||||
export const newCampaign = createTrigger({
|
||||
auth: zohoCampaignsAuth,
|
||||
name: 'newCampaign',
|
||||
displayName: 'New Campaign',
|
||||
description: 'Fires when a new campaign is created.',
|
||||
props: {},
|
||||
sampleData: {
|
||||
campaign_key: 'f70c4878c4a47169407e63917ad24497',
|
||||
campaign_name: 'Summer Newsletter 2024',
|
||||
created_date_string: '19 Aug 2024, 11:26 AM',
|
||||
campaign_status: 'Draft',
|
||||
created_time: '1724065567000',
|
||||
campaign_preview:
|
||||
'https://campaigns.zoho.com/EmailDisplayAction.do?&campaignId=303000023454038',
|
||||
},
|
||||
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,76 @@
|
||||
import {
|
||||
DedupeStrategy,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import {
|
||||
AppConnectionValueForAuthProperty,
|
||||
createTrigger,
|
||||
PiecePropValueSchema,
|
||||
StaticPropsValue,
|
||||
TriggerStrategy,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import dayjs from 'dayjs';
|
||||
import { zohoCampaignsAuth, zohoCampaignsCommon } from '../common';
|
||||
|
||||
const polling: Polling<
|
||||
AppConnectionValueForAuthProperty<typeof zohoCampaignsAuth>,
|
||||
StaticPropsValue<any>
|
||||
> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth, propsValue }) => {
|
||||
const location = auth.props?.['location'] as string || 'zoho.com';
|
||||
const accessToken = auth.access_token;
|
||||
const { listkey } = propsValue;
|
||||
|
||||
if (!listkey) {
|
||||
throw new Error('Mailing list is required');
|
||||
}
|
||||
|
||||
const items = await zohoCampaignsCommon.listContacts({
|
||||
accessToken,
|
||||
location,
|
||||
listkey,
|
||||
sort:'desc',
|
||||
});
|
||||
|
||||
return items.map((item) => ({
|
||||
epochMilliSeconds: dayjs(item.added_time).valueOf(),
|
||||
data: item,
|
||||
}));
|
||||
},
|
||||
};
|
||||
|
||||
export const newContact = createTrigger({
|
||||
auth: zohoCampaignsAuth,
|
||||
name: 'newContact',
|
||||
displayName: 'New Contact',
|
||||
description: 'Fires when a new contact is added to a selected mailing list.',
|
||||
props: zohoCampaignsCommon.newContactProperties(),
|
||||
sampleData: {
|
||||
contact_email: 'john.doe@example.com',
|
||||
firstname: 'John',
|
||||
lastname: 'Doe',
|
||||
phone: '+1-555-123-4567',
|
||||
companyname: 'Acme Corp',
|
||||
zuid: '12345678',
|
||||
added_time: '1699123456789',
|
||||
},
|
||||
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,78 @@
|
||||
import {
|
||||
DedupeStrategy,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
} from '@activepieces/pieces-common';
|
||||
import {
|
||||
AppConnectionValueForAuthProperty,
|
||||
createTrigger,
|
||||
PiecePropValueSchema,
|
||||
StaticPropsValue,
|
||||
TriggerStrategy,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import dayjs from 'dayjs';
|
||||
import { zohoCampaignsAuth, zohoCampaignsCommon } from '../common';
|
||||
|
||||
// replace auth with piece auth variable
|
||||
const polling: Polling<
|
||||
AppConnectionValueForAuthProperty<typeof zohoCampaignsAuth>,
|
||||
StaticPropsValue<any>
|
||||
> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth, propsValue }) => {
|
||||
const { listkey, status = 'unsub' } = propsValue;
|
||||
const location = auth.props?.['location'] as string || 'zoho.com';
|
||||
const accessToken = auth.access_token;
|
||||
|
||||
if (!listkey) {
|
||||
throw new Error('Mailing list is required');
|
||||
}
|
||||
|
||||
const items = await zohoCampaignsCommon.listContacts({
|
||||
accessToken,
|
||||
location,
|
||||
listkey,
|
||||
sort: 'desc',
|
||||
status,
|
||||
});
|
||||
return items.map((item) => ({
|
||||
epochMilliSeconds: dayjs(item.added_time).valueOf(),
|
||||
data: item,
|
||||
}));
|
||||
},
|
||||
};
|
||||
|
||||
export const unsubscribe = createTrigger({
|
||||
auth: zohoCampaignsAuth,
|
||||
name: 'unsubscribe',
|
||||
displayName: 'Unsubscribe',
|
||||
description:
|
||||
'Fires when a contact is removed from a mailing list or unsubscribed.',
|
||||
props: zohoCampaignsCommon.unsubscribeProperties(),
|
||||
sampleData: {
|
||||
contact_email: 'unsubscribed@example.com',
|
||||
firstname: 'John',
|
||||
lastname: 'Doe',
|
||||
phone: '+1-555-123-4567',
|
||||
companyname: 'Acme Corp',
|
||||
zuid: '12345678',
|
||||
added_time: '1699123456789',
|
||||
},
|
||||
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);
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user