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,82 @@
|
||||
{
|
||||
"Cloud-based messaging platform for sending SMS, MMS, voice, email, and more.": "Cloud-basierte Messaging-Plattform zum Versenden von SMS, MMS, Voice, E-Mail und mehr.",
|
||||
"Username": "Benutzername",
|
||||
"Your ClickSend username": "Ihr ClickSend-Benutzername",
|
||||
"API Key": "API-Schlüssel",
|
||||
"Your ClickSend API key": "Ihr ClickSend-API-Schlüssel",
|
||||
"You can get your API credentials by clicking 'API Credentials' on the top right of the dashboard.": "Sie können Ihre API-Anmeldeinformationen erhalten, indem Sie rechts oben auf dem Dashboard auf 'API-Anmeldeinformationen' klicken.",
|
||||
"Send SMS": "SMS senden",
|
||||
"Send MMS": "MMS senden",
|
||||
"Create Contact": "Kontakt erstellen",
|
||||
"Update Contact": "Kontakt aktualisieren",
|
||||
"Delete Contact": "Kontakt löschen",
|
||||
"Create Contact List": "Kontaktliste erstellen",
|
||||
"Find Contact by Email": "Kontakt per E-Mail finden",
|
||||
"Find Contact by Phone": "Kontakt per Telefon suchen",
|
||||
"Find Contact List": "Kontaktliste suchen",
|
||||
"Custom API Call": "Eigener API-Aufruf",
|
||||
"Send one or more SMS messages.": "Senden Sie eine oder mehrere SMS-Nachrichten.",
|
||||
"Send one or more MMS messages.": "Senden Sie eine oder mehrere MMS-Nachrichten.",
|
||||
"Creates a new contact in a contact list.": "Erstellt einen neuen Kontakt in einer Kontaktliste.",
|
||||
"Updates an existing contact in a contact list.": "Aktualisiert einen vorhandenen Kontakt in einer Kontaktliste.",
|
||||
"Deletes a contact from a contact list.": "Löscht einen Kontakt aus einer Kontaktliste.",
|
||||
"Creates a new contact list.": "Erstellt eine neue Kontaktliste.",
|
||||
"Finds contact by email address.": "Findet Kontakt per E-Mail-Adresse.",
|
||||
"Finds contact by phone number.": "Findet Kontakt per Telefonnummer.",
|
||||
"Finds for contact list based on name.": "Funde der Kontaktliste basierend auf Namen.",
|
||||
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
|
||||
"Messages": "Nachrichten",
|
||||
"To": "An",
|
||||
"Message Body": "Nachrichtentext",
|
||||
"Subject": "Betreff",
|
||||
"From": "Von",
|
||||
"Media URL": "Medien-URL",
|
||||
"Contact List ID": "Kontaktliste ID",
|
||||
"Phone Number": "Telefonnummer",
|
||||
"Email Address": "E-Mail-Adresse",
|
||||
"First Name": "Vorname",
|
||||
"Last Name": "Nachname",
|
||||
"Company Name": "Firmenname",
|
||||
"Address Line 1": "Adresszeile 1",
|
||||
"Address Line 2": "Adresszeile 2",
|
||||
"City": "Stadt",
|
||||
"State/Province": "Bundesland/Provinz",
|
||||
"Postal Code": "Postleitzahl",
|
||||
"Country": "Land",
|
||||
"Contact ID": "Kontakt-ID",
|
||||
"List Name": "Listenname",
|
||||
"Search": "Suche",
|
||||
"Method": "Methode",
|
||||
"Headers": "Kopfzeilen",
|
||||
"Query Parameters": "Abfrageparameter",
|
||||
"Body": "Körper",
|
||||
"Response is Binary ?": "Antwort ist binär?",
|
||||
"No Error on Failure": "Kein Fehler bei Fehler",
|
||||
"Timeout (in seconds)": "Timeout (in Sekunden)",
|
||||
"The phone number (with country code, e.g., +1234567890)": "Die Telefonnummer (mit Landesvorwahl, z.B. +1234567890)",
|
||||
"The body of the message to send": "Der Inhalt der zu sendenden Nachricht",
|
||||
"The URL of the media file to send (image, video, etc.)": "Die URL der zu sendenden Mediendatei (Bild, Video, etc.)",
|
||||
"The phone number of the contact": "Die Telefonnummer des Kontakts",
|
||||
"The email address of the contact": "Die E-Mail-Adresse des Kontakts",
|
||||
"The first name of the contact": "Der Vorname des Kontakts",
|
||||
"The last name of the contact": "Der Nachname des Kontakts",
|
||||
"The company name of the contact": "Der Firmenname des Kontakts",
|
||||
"The first line of the address": "Die erste Zeile der Adresse",
|
||||
"The second line of the address": "Die zweite Zeile der Adresse",
|
||||
"The city of the contact": "Die Stadt des Kontakts",
|
||||
"The state/province of the contact": "Das Bundesland/Provinz des Kontakts",
|
||||
"The postal code of the contact": "Die Postleitzahl des Kontakts",
|
||||
"The country of the contact": "Das Land des Kontakts",
|
||||
"The email address": "Die E-Mail-Adresse",
|
||||
"Search by list name.": "Suche nach Listenname.",
|
||||
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
|
||||
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
|
||||
"GET": "ERHALTEN",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "LÖSCHEN",
|
||||
"HEAD": "HEAD",
|
||||
"New Incoming SMS": "Neue eingehende SMS",
|
||||
"Triggers when a new SMS message is received.": "Wird ausgelöst, wenn eine neue SMS empfangen wird."
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"Cloud-based messaging platform for sending SMS, MMS, voice, email, and more.": "Plataforma de mensajería basada en la nube para enviar SMS, MMS, voz, correo electrónico y más.",
|
||||
"Username": "Usuario",
|
||||
"Your ClickSend username": "Su nombre de usuario ClickSend",
|
||||
"API Key": "Clave API",
|
||||
"Your ClickSend API key": "Su clave API ClickSend",
|
||||
"You can get your API credentials by clicking 'API Credentials' on the top right of the dashboard.": "Puedes obtener tus credenciales API haciendo clic en 'Credenciales de API' en la parte superior derecha del tablero.",
|
||||
"Send SMS": "Enviar SMS",
|
||||
"Send MMS": "Enviar MMS",
|
||||
"Create Contact": "Crear contacto",
|
||||
"Update Contact": "Actualizar contacto",
|
||||
"Delete Contact": "Eliminar contacto",
|
||||
"Create Contact List": "Crear lista de contactos",
|
||||
"Find Contact by Email": "Buscar contacto por email",
|
||||
"Find Contact by Phone": "Buscar contacto por teléfono",
|
||||
"Find Contact List": "Buscar lista de contactos",
|
||||
"Custom API Call": "Llamada API personalizada",
|
||||
"Send one or more SMS messages.": "Enviar uno o más mensajes SMS.",
|
||||
"Send one or more MMS messages.": "Enviar uno o más mensajes MMS.",
|
||||
"Creates a new contact in a contact list.": "Crea un nuevo contacto en una lista de contactos.",
|
||||
"Updates an existing contact in a contact list.": "Actualiza un contacto existente en una lista de contactos.",
|
||||
"Deletes a contact from a contact list.": "Elimina un contacto de una lista de contactos.",
|
||||
"Creates a new contact list.": "Crea una nueva lista de contactos.",
|
||||
"Finds contact by email address.": "Encuentra contacto por correo electrónico.",
|
||||
"Finds contact by phone number.": "Encuentra contacto por número de teléfono.",
|
||||
"Finds for contact list based on name.": "Encontrados para la lista de contactos basados en el nombre.",
|
||||
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
|
||||
"Messages": "Mensajes",
|
||||
"To": "A",
|
||||
"Message Body": "Cuerpo",
|
||||
"Subject": "Asunto",
|
||||
"From": "De",
|
||||
"Media URL": "URL de medios",
|
||||
"Contact List ID": "ID de lista de contactos",
|
||||
"Phone Number": "Número de teléfono",
|
||||
"Email Address": "Dirección de email",
|
||||
"First Name": "Nombre",
|
||||
"Last Name": "Apellido",
|
||||
"Company Name": "Nombre De La Empresa",
|
||||
"Address Line 1": "Dirección línea 1",
|
||||
"Address Line 2": "Dirección línea 2",
|
||||
"City": "Ciudad",
|
||||
"State/Province": "Estado/Provenza",
|
||||
"Postal Code": "Código postal",
|
||||
"Country": "País",
|
||||
"Contact ID": "ID de contacto",
|
||||
"List Name": "Nombre de lista",
|
||||
"Search": "Buscar",
|
||||
"Method": "Método",
|
||||
"Headers": "Encabezados",
|
||||
"Query Parameters": "Parámetros de consulta",
|
||||
"Body": "Cuerpo",
|
||||
"Response is Binary ?": "¿Respuesta es binaria?",
|
||||
"No Error on Failure": "No hay ningún error en fallo",
|
||||
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
|
||||
"The phone number (with country code, e.g., +1234567890)": "El número de teléfono (con código de país, por ejemplo, +1234567890)",
|
||||
"The body of the message to send": "El cuerpo del mensaje a enviar",
|
||||
"The URL of the media file to send (image, video, etc.)": "La URL del archivo multimedia a enviar (imagen, vídeo, etc.)",
|
||||
"The phone number of the contact": "El número de teléfono del contacto",
|
||||
"The email address of the contact": "La dirección de correo electrónico del contacto",
|
||||
"The first name of the contact": "El nombre del contacto",
|
||||
"The last name of the contact": "El apellido del contacto",
|
||||
"The company name of the contact": "El nombre de la empresa del contacto",
|
||||
"The first line of the address": "La primera línea de la dirección",
|
||||
"The second line of the address": "La segunda línea de la dirección",
|
||||
"The city of the contact": "La ciudad del contacto",
|
||||
"The state/province of the contact": "El estado/provincia del contacto",
|
||||
"The postal code of the contact": "El código postal del contacto",
|
||||
"The country of the contact": "El país del contacto",
|
||||
"The email address": "La dirección de correo",
|
||||
"Search by list name.": "Buscar por nombre de lista.",
|
||||
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
|
||||
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDFs, imágenes, etc.",
|
||||
"GET": "RECOGER",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "BORRAR",
|
||||
"HEAD": "LIMPIO",
|
||||
"New Incoming SMS": "Nuevo SMS entrante",
|
||||
"Triggers when a new SMS message is received.": "Dispara cuando se recibe un nuevo mensaje SMS."
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"Cloud-based messaging platform for sending SMS, MMS, voice, email, and more.": "Plateforme de messagerie basée sur le cloud pour envoyer des SMS, MMS, voix, courriels et plus encore.",
|
||||
"Username": "Nom d'utilisateur",
|
||||
"Your ClickSend username": "Votre nom d'utilisateur ClickSend",
|
||||
"API Key": "Clé API",
|
||||
"Your ClickSend API key": "Votre clé API ClickSend",
|
||||
"You can get your API credentials by clicking 'API Credentials' on the top right of the dashboard.": "Vous pouvez obtenir vos identifiants API en cliquant sur 'Identifiants API' en haut à droite du tableau de bord.",
|
||||
"Send SMS": "Envoyer un SMS",
|
||||
"Send MMS": "Envoyer des MMS",
|
||||
"Create Contact": "Créer un contact",
|
||||
"Update Contact": "Mettre à jour le contact",
|
||||
"Delete Contact": "Supprimer le contact",
|
||||
"Create Contact List": "Créer une liste de contacts",
|
||||
"Find Contact by Email": "Trouver un contact par e-mail",
|
||||
"Find Contact by Phone": "Trouver un contact par téléphone",
|
||||
"Find Contact List": "Trouver la liste de contacts",
|
||||
"Custom API Call": "Appel API personnalisé",
|
||||
"Send one or more SMS messages.": "Envoyer un ou plusieurs messages SMS.",
|
||||
"Send one or more MMS messages.": "Envoyer un ou plusieurs MMS",
|
||||
"Creates a new contact in a contact list.": "Crée un nouveau contact dans une liste de contacts.",
|
||||
"Updates an existing contact in a contact list.": "Met à jour un contact existant dans une liste de contacts.",
|
||||
"Deletes a contact from a contact list.": "Supprime un contact d'une liste de contacts.",
|
||||
"Creates a new contact list.": "Crée une nouvelle liste de contacts.",
|
||||
"Finds contact by email address.": "Trouve le contact par adresse e-mail.",
|
||||
"Finds contact by phone number.": "Trouve le contact par numéro de téléphone.",
|
||||
"Finds for contact list based on name.": "Trouvées pour la liste de contacts basée sur le nom.",
|
||||
"Make a custom API call to a specific endpoint": "Passez un appel API personnalisé à un point de terminaison spécifique",
|
||||
"Messages": "Messages",
|
||||
"To": "À",
|
||||
"Message Body": "Corps du message",
|
||||
"Subject": "Sujet",
|
||||
"From": "A partir de",
|
||||
"Media URL": "URL du média",
|
||||
"Contact List ID": "ID de la liste de contacts",
|
||||
"Phone Number": "Numéro de téléphone",
|
||||
"Email Address": "Adresse e-mail",
|
||||
"First Name": "First Name",
|
||||
"Last Name": "Last Name",
|
||||
"Company Name": "Nom de l’entreprise",
|
||||
"Address Line 1": "Adresse ligne 1",
|
||||
"Address Line 2": "Adresse ligne 2",
|
||||
"City": "Ville",
|
||||
"State/Province": "État/Province",
|
||||
"Postal Code": "Code postal",
|
||||
"Country": "Pays",
|
||||
"Contact ID": "ID du contact",
|
||||
"List Name": "Nom de la liste",
|
||||
"Search": "Rechercher",
|
||||
"Method": "Méthode",
|
||||
"Headers": "En-têtes",
|
||||
"Query Parameters": "Paramètres de requête",
|
||||
"Body": "Corps",
|
||||
"Response is Binary ?": "La réponse est Binaire ?",
|
||||
"No Error on Failure": "Aucune erreur en cas d'échec",
|
||||
"Timeout (in seconds)": "Délai d'attente (en secondes)",
|
||||
"The phone number (with country code, e.g., +1234567890)": "Le numéro de téléphone (avec l'indicatif du pays, p. ex. +1234567890)",
|
||||
"The body of the message to send": "Le corps du message à envoyer",
|
||||
"The URL of the media file to send (image, video, etc.)": "L'URL du fichier média à envoyer (image, vidéo, etc.)",
|
||||
"The phone number of the contact": "Le numéro de téléphone du contact",
|
||||
"The email address of the contact": "L'adresse e-mail du contact",
|
||||
"The first name of the contact": "Le prénom du contact",
|
||||
"The last name of the contact": "Le nom de famille du contact",
|
||||
"The company name of the contact": "Le nom de la société du contact",
|
||||
"The first line of the address": "La première ligne de l'adresse",
|
||||
"The second line of the address": "La deuxième ligne de l'adresse",
|
||||
"The city of the contact": "La ville du contact",
|
||||
"The state/province of the contact": "L'état/province du contact",
|
||||
"The postal code of the contact": "Le code postal du contact",
|
||||
"The country of the contact": "Le pays du contact",
|
||||
"The email address": "L'adresse e-mail",
|
||||
"Search by list name.": "Recherche par nom de liste.",
|
||||
"Authorization headers are injected automatically from your connection.": "Les en-têtes d'autorisation sont injectés automatiquement à partir de votre connexion.",
|
||||
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDFs, les images, etc.",
|
||||
"GET": "OBTENIR",
|
||||
"POST": "POSTER",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "EFFACER",
|
||||
"DELETE": "SUPPRIMER",
|
||||
"HEAD": "TÊTE",
|
||||
"New Incoming SMS": "Nouveau SMS entrant",
|
||||
"Triggers when a new SMS message is received.": "Déclenche quand un nouveau SMS est reçu."
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"Cloud-based messaging platform for sending SMS, MMS, voice, email, and more.": "SMS、MMS、音声、電子メールなどを送信するためのクラウドベースのメッセージングプラットフォーム。",
|
||||
"Username": "ユーザー名",
|
||||
"Your ClickSend username": "ClickSend ユーザー名",
|
||||
"API Key": "API キー",
|
||||
"Your ClickSend API key": "ClickSend API キー",
|
||||
"You can get your API credentials by clicking 'API Credentials' on the top right of the dashboard.": "ダッシュボードの右上にある「API Credentials」をクリックすると、API 資格情報を取得できます。",
|
||||
"Send SMS": "SMSの送信",
|
||||
"Send MMS": "MMSを送信",
|
||||
"Create Contact": "連絡先を作成",
|
||||
"Update Contact": "連絡先を更新",
|
||||
"Delete Contact": "連絡先を削除",
|
||||
"Create Contact List": "連絡先リストを作成",
|
||||
"Find Contact by Email": "電子メールで連絡先を検索",
|
||||
"Find Contact by Phone": "電話で連絡先を検索",
|
||||
"Find Contact List": "連絡先リストを検索",
|
||||
"Custom API Call": "カスタムAPI通話",
|
||||
"Send one or more SMS messages.": "1 つ以上の SMS メッセージを送信します。",
|
||||
"Send one or more MMS messages.": "1つまたは複数のMMSメッセージを送信します。",
|
||||
"Creates a new contact in a contact list.": "連絡先リストに新しい連絡先を作成します。",
|
||||
"Updates an existing contact in a contact list.": "連絡先リストに既存の連絡先を更新します。",
|
||||
"Deletes a contact from a contact list.": "連絡先リストから連絡先を削除します。",
|
||||
"Creates a new contact list.": "新しい連絡先リストを作成します。",
|
||||
"Finds contact by email address.": "メールアドレスで連絡先を検索します。",
|
||||
"Finds contact by phone number.": "電話番号で連絡先を検索します。",
|
||||
"Finds for contact list based on name.": "名前に基づいて連絡先リストを検索します。",
|
||||
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
|
||||
"Messages": "メッセージ",
|
||||
"To": "終了日",
|
||||
"Message Body": "メッセージ本文",
|
||||
"Subject": "件名",
|
||||
"From": "差出人:",
|
||||
"Media URL": "メディア URL",
|
||||
"Contact List ID": "連絡先リストID",
|
||||
"Phone Number": "電話番号",
|
||||
"Email Address": "メールアドレス",
|
||||
"First Name": "名",
|
||||
"Last Name": "姓",
|
||||
"Company Name": "会社名",
|
||||
"Address Line 1": "住所1",
|
||||
"Address Line 2": "住所2",
|
||||
"City": "市区町村名",
|
||||
"State/Province": "都道府県:",
|
||||
"Postal Code": "郵便番号",
|
||||
"Country": "国",
|
||||
"Contact ID": "連絡先ID",
|
||||
"List Name": "リスト名",
|
||||
"Search": "検索",
|
||||
"Method": "方法",
|
||||
"Headers": "ヘッダー",
|
||||
"Query Parameters": "クエリパラメータ",
|
||||
"Body": "本文",
|
||||
"Response is Binary ?": "応答はバイナリですか?",
|
||||
"No Error on Failure": "失敗時にエラーはありません",
|
||||
"Timeout (in seconds)": "タイムアウト(秒)",
|
||||
"The phone number (with country code, e.g., +1234567890)": "電話番号(例:+1234567890)",
|
||||
"The body of the message to send": "送信するメッセージの本文",
|
||||
"The URL of the media file to send (image, video, etc.)": "送信するメディアファイルのURL(画像、動画など)",
|
||||
"The phone number of the contact": "連絡先の電話番号",
|
||||
"The email address of the contact": "連絡先のメールアドレス",
|
||||
"The first name of the contact": "連絡先の名",
|
||||
"The last name of the contact": "連絡先の姓",
|
||||
"The company name of the contact": "連絡先の会社名",
|
||||
"The first line of the address": "アドレスの最初の行",
|
||||
"The second line of the address": "The second line of the address",
|
||||
"The city of the contact": "連絡先の都市",
|
||||
"The state/province of the contact": "連絡先の州/州",
|
||||
"The postal code of the contact": "連絡先の郵便番号",
|
||||
"The country of the contact": "連絡先の国",
|
||||
"The email address": "メールアドレス",
|
||||
"Search by list name.": "リスト名で検索",
|
||||
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
|
||||
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
|
||||
"GET": "取得",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "削除",
|
||||
"HEAD": "頭",
|
||||
"New Incoming SMS": "新しいSMS着信",
|
||||
"Triggers when a new SMS message is received.": "新しいSMSメッセージを受信したときにトリガーします."
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"Cloud-based messaging platform for sending SMS, MMS, voice, email, and more.": "Cloud-gebaseerd berichtenplatform voor het verzenden van SMS, MMS, voice, e-mail en meer.",
|
||||
"Username": "Gebruikersnaam",
|
||||
"Your ClickSend username": "Uw gebruikersnaam ClickSend",
|
||||
"API Key": "API Sleutel",
|
||||
"Your ClickSend API key": "Uw ClickSend API-sleutel",
|
||||
"You can get your API credentials by clicking 'API Credentials' on the top right of the dashboard.": "U kunt uw API-referenties krijgen door te klikken op 'API Credentials' rechtsboven in het dashboard.",
|
||||
"Send SMS": "Sms verzenden",
|
||||
"Send MMS": "MMS verzenden",
|
||||
"Create Contact": "Contactpersoon aanmaken",
|
||||
"Update Contact": "Contactpersoon bijwerken",
|
||||
"Delete Contact": "Contactpersoon verwijderen",
|
||||
"Create Contact List": "Lijst met contactpersonen aanmaken",
|
||||
"Find Contact by Email": "Zoek contact per e-mail",
|
||||
"Find Contact by Phone": "Zoek contact per telefoon",
|
||||
"Find Contact List": "Vind contactpersonen lijst",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Send one or more SMS messages.": "Stuur een of meer SMS-berichten.",
|
||||
"Send one or more MMS messages.": "Stuur een of meer MMS-berichten.",
|
||||
"Creates a new contact in a contact list.": "Maakt een nieuwe contactpersoon aan in een adresboek.",
|
||||
"Updates an existing contact in a contact list.": "Werkt een bestaand contact in een adresboek bij.",
|
||||
"Deletes a contact from a contact list.": "Verwijdert een contactpersoon uit een contactenlijst.",
|
||||
"Creates a new contact list.": "Maakt een nieuw adresboek aan.",
|
||||
"Finds contact by email address.": "Zoekt een contactpersoon per e-mailadres.",
|
||||
"Finds contact by phone number.": "Gevonden contacten per telefoonnummer.",
|
||||
"Finds for contact list based on name.": "Gevonden caches voor de lijst met contactpersonen gebaseerd op naam.",
|
||||
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
|
||||
"Messages": "berichten",
|
||||
"To": "tot",
|
||||
"Message Body": "Bericht Body",
|
||||
"Subject": "Onderwerp",
|
||||
"From": "van",
|
||||
"Media URL": "Media URL",
|
||||
"Contact List ID": "Contactlijst ID",
|
||||
"Phone Number": "Telefoon nummer",
|
||||
"Email Address": "Uw e-mailadres",
|
||||
"First Name": "Voornaam",
|
||||
"Last Name": "Achternaam",
|
||||
"Company Name": "Bedrijfsnaam",
|
||||
"Address Line 1": "Adresregel 1",
|
||||
"Address Line 2": "Adresregel 2",
|
||||
"City": "Woonplaats",
|
||||
"State/Province": "Staat/provincie",
|
||||
"Postal Code": "Postcode - Postcode",
|
||||
"Country": "Land:",
|
||||
"Contact ID": "Contact ID",
|
||||
"List Name": "Lijst Naam",
|
||||
"Search": "Zoeken",
|
||||
"Method": "Methode",
|
||||
"Headers": "Kopteksten",
|
||||
"Query Parameters": "Query parameters",
|
||||
"Body": "Lichaam",
|
||||
"Response is Binary ?": "Antwoord is binair?",
|
||||
"No Error on Failure": "Geen fout bij fout",
|
||||
"Timeout (in seconds)": "Time-out (in seconden)",
|
||||
"The phone number (with country code, e.g., +1234567890)": "Het telefoonnummer (met landcode, b.v. +1234567890)",
|
||||
"The body of the message to send": "De inhoud van het te verzenden bericht",
|
||||
"The URL of the media file to send (image, video, etc.)": "De URL van het mediabestand om te verzenden (afbeelding, video, etc.)",
|
||||
"The phone number of the contact": "Het telefoonnummer van de contactpersoon",
|
||||
"The email address of the contact": "Het e-mailadres van de contactpersoon",
|
||||
"The first name of the contact": "De voornaam van het contact",
|
||||
"The last name of the contact": "De achternaam van de contactpersoon",
|
||||
"The company name of the contact": "De bedrijfsnaam van de contactpersoon",
|
||||
"The first line of the address": "De eerste regel van het adres",
|
||||
"The second line of the address": "De tweede regel van het adres",
|
||||
"The city of the contact": "De stad van het contact",
|
||||
"The state/province of the contact": "De staat/provincie van het contact",
|
||||
"The postal code of the contact": "De postcode van de contactpersoon",
|
||||
"The country of the contact": "Het land van de contactpersoon",
|
||||
"The email address": "Het e-mailadres",
|
||||
"Search by list name.": "Zoeken op lijstnaam.",
|
||||
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
|
||||
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
|
||||
"GET": "KRIJG",
|
||||
"POST": "POSTE",
|
||||
"PATCH": "BEKIJK",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "VERWIJDEREN",
|
||||
"HEAD": "HOOFD",
|
||||
"New Incoming SMS": "Nieuwe inkomende SMS",
|
||||
"Triggers when a new SMS message is received.": "Triggert wanneer een nieuw SMS-bericht wordt ontvangen."
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"Cloud-based messaging platform for sending SMS, MMS, voice, email, and more.": "Plataforma de mensagens baseada na nuvem para o envio de SMS, MMS, voz, e-mail e muito mais.",
|
||||
"Username": "Usuário:",
|
||||
"Your ClickSend username": "Seu nome no ClickSend",
|
||||
"API Key": "Chave de API",
|
||||
"Your ClickSend API key": "Sua chave API no ClickSend",
|
||||
"You can get your API credentials by clicking 'API Credentials' on the top right of the dashboard.": "Você pode obter suas credenciais de API clicando em 'Credenciais de API' no canto superior direito do painel.",
|
||||
"Send SMS": "Enviar SMS",
|
||||
"Send MMS": "Enviar MMS",
|
||||
"Create Contact": "Criar contato",
|
||||
"Update Contact": "Atualizar contato",
|
||||
"Delete Contact": "Excluir contato",
|
||||
"Create Contact List": "Criar lista de contatos",
|
||||
"Find Contact by Email": "Localizar contato por e-mail",
|
||||
"Find Contact by Phone": "Encontrar contato por telefone",
|
||||
"Find Contact List": "Localizar Lista de Contatos",
|
||||
"Custom API Call": "Chamada de API personalizada",
|
||||
"Send one or more SMS messages.": "Envie uma ou mais mensagens SMS.",
|
||||
"Send one or more MMS messages.": "Envie uma ou mais mensagens MMS.",
|
||||
"Creates a new contact in a contact list.": "Cria um novo contato em uma lista de contatos.",
|
||||
"Updates an existing contact in a contact list.": "Atualiza um contato existente em uma lista de contatos.",
|
||||
"Deletes a contact from a contact list.": "Exclui um contato de uma lista de contatos.",
|
||||
"Creates a new contact list.": "Cria uma nova lista de contatos.",
|
||||
"Finds contact by email address.": "Localiza contato por endereço de e-mail.",
|
||||
"Finds contact by phone number.": "Localiza contatos por número de telefone.",
|
||||
"Finds for contact list based on name.": "Localiza a lista de contatos com base no nome.",
|
||||
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
|
||||
"Messages": "mensagens",
|
||||
"To": "Para",
|
||||
"Message Body": "Corpo da Mensagem",
|
||||
"Subject": "Cargo",
|
||||
"From": "De",
|
||||
"Media URL": "URL da Mídia",
|
||||
"Contact List ID": "ID da Lista de Contatos",
|
||||
"Phone Number": "Número de telefone",
|
||||
"Email Address": "Endereço de e-mail",
|
||||
"First Name": "Nome",
|
||||
"Last Name": "Sobrenome",
|
||||
"Company Name": "Nome da Empresa",
|
||||
"Address Line 1": "Linha de Endereço 1",
|
||||
"Address Line 2": "Linha de Endereço 2",
|
||||
"City": "cidade",
|
||||
"State/Province": "Estado/província",
|
||||
"Postal Code": "Código Postal",
|
||||
"Country": "País/região",
|
||||
"Contact ID": "ID do contato",
|
||||
"List Name": "Lista de nomes",
|
||||
"Search": "Pesquisar",
|
||||
"Method": "Método",
|
||||
"Headers": "Cabeçalhos",
|
||||
"Query Parameters": "Parâmetros da consulta",
|
||||
"Body": "Conteúdo",
|
||||
"Response is Binary ?": "A resposta é binária ?",
|
||||
"No Error on Failure": "Nenhum erro no Failure",
|
||||
"Timeout (in seconds)": "Tempo limite (em segundos)",
|
||||
"The phone number (with country code, e.g., +1234567890)": "O número de telefone (com código de país, por exemplo, +1234567890)",
|
||||
"The body of the message to send": "O corpo da mensagem a enviar",
|
||||
"The URL of the media file to send (image, video, etc.)": "A URL do arquivo de mídia a ser enviado (imagem, vídeo, etc.)",
|
||||
"The phone number of the contact": "O número de telefone do contato",
|
||||
"The email address of the contact": "O endereço de e-mail do contato",
|
||||
"The first name of the contact": "O primeiro nome do contato",
|
||||
"The last name of the contact": "O último nome do contato",
|
||||
"The company name of the contact": "O nome da empresa do contato",
|
||||
"The first line of the address": "A primeira linha do endereço",
|
||||
"The second line of the address": "A segunda linha do endereço",
|
||||
"The city of the contact": "A cidade do contato",
|
||||
"The state/province of the contact": "O estado/província do contato",
|
||||
"The postal code of the contact": "O CEP do contato",
|
||||
"The country of the contact": "O país do contato",
|
||||
"The email address": "O endereço de e-mail",
|
||||
"Search by list name.": "Pesquisar por nome da lista.",
|
||||
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
|
||||
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
|
||||
"GET": "OBTER",
|
||||
"POST": "POSTAR",
|
||||
"PATCH": "COMPRAR",
|
||||
"PUT": "COLOCAR",
|
||||
"DELETE": "EXCLUIR",
|
||||
"HEAD": "CABEÇA",
|
||||
"New Incoming SMS": "Novo SMS de entrada",
|
||||
"Triggers when a new SMS message is received.": "Aciona quando uma nova mensagem SMS é recebida."
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"ClickSend SMS": "Клик-Отправить SMS",
|
||||
"Cloud-based messaging platform for sending SMS, MMS, voice, email, and more.": "Облачная коммуникационная платформа для отправки SMS, MMS, голосовой и электронной почты и многое другое.",
|
||||
"Username": "Имя пользователя",
|
||||
"Your ClickSend username": "Ваше имя пользователя ClickSend",
|
||||
"API Key": "Ключ API",
|
||||
"Your ClickSend API key": "Ваш ключ ClickSend API",
|
||||
"You can get your API credentials by clicking 'API Credentials' on the top right of the dashboard.": "Вы можете получить ваши API учетные данные, нажав \"API Credentials\" в правом верхнем углу панели.",
|
||||
"Send SMS": "Отправить СМС",
|
||||
"Send MMS": "Отправить MMS",
|
||||
"Create Contact": "Создать контакт",
|
||||
"Update Contact": "Обновить контакт",
|
||||
"Delete Contact": "Удалить контакт",
|
||||
"Create Contact List": "Создать список контактов",
|
||||
"Find Contact by Email": "Найти контакт по электронной почте",
|
||||
"Find Contact by Phone": "Найти контакт по телефону",
|
||||
"Find Contact List": "Найти список контактов",
|
||||
"Custom API Call": "Пользовательский вызов API",
|
||||
"Send one or more SMS messages.": "Отправлять одно или несколько SMS-сообщений.",
|
||||
"Send one or more MMS messages.": "Отправить одно или несколько MMS-сообщений.",
|
||||
"Creates a new contact in a contact list.": "Создает новый контакт в списке контактов.",
|
||||
"Updates an existing contact in a contact list.": "Обновляет существующий контакт в списке контактов.",
|
||||
"Deletes a contact from a contact list.": "Удаляет контакт из списка контактов.",
|
||||
"Creates a new contact list.": "Создает новый список контактов.",
|
||||
"Finds contact by email address.": "Поиск контакта по адресу электронной почты.",
|
||||
"Finds contact by phone number.": "Поиск контакта по номеру телефона.",
|
||||
"Finds for contact list based on name.": "Поиск списка контактов на основе имени.",
|
||||
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
|
||||
"Messages": "Сообщения",
|
||||
"To": "Кому",
|
||||
"Message Body": "Тело сообщения",
|
||||
"Subject": "Тема",
|
||||
"From": "От",
|
||||
"Media URL": "URL-адрес медиа",
|
||||
"Contact List ID": "ID списка контактов",
|
||||
"Phone Number": "Номер телефона",
|
||||
"Email Address": "Email Address",
|
||||
"First Name": "First Name",
|
||||
"Last Name": "Last Name",
|
||||
"Company Name": "Название компании",
|
||||
"Address Line 1": "Адрес, строка 1",
|
||||
"Address Line 2": "Адрес, строка 2",
|
||||
"City": "Город",
|
||||
"State/Province": "Штат/провинция",
|
||||
"Postal Code": "Почтовый индекс",
|
||||
"Country": "Страна",
|
||||
"Contact ID": "ID контакта",
|
||||
"List Name": "Название списка",
|
||||
"Search": "Search",
|
||||
"Method": "Метод",
|
||||
"Headers": "Заголовки",
|
||||
"Query Parameters": "Параметры запроса",
|
||||
"Body": "Тело",
|
||||
"No Error on Failure": "Нет ошибок при ошибке",
|
||||
"Timeout (in seconds)": "Таймаут (в секундах)",
|
||||
"The phone number (with country code, e.g., +1234567890)": "Телефон (с кодом страны, например, +1234567890)",
|
||||
"The body of the message to send": "Тело сообщения для отправки",
|
||||
"The URL of the media file to send (image, video, etc.)": "URL медиа-файла для отправки (изображение, видео, и т. д.)",
|
||||
"The phone number of the contact": "Номер телефона контакта",
|
||||
"The email address of the contact": "Адрес электронной почты контакта",
|
||||
"The first name of the contact": "Имя контакта",
|
||||
"The last name of the contact": "Фамилия контакта",
|
||||
"The company name of the contact": "Название компании контакта",
|
||||
"The first line of the address": "Первая строка адреса",
|
||||
"The second line of the address": "Вторая строка адреса",
|
||||
"The city of the contact": "Город контакта",
|
||||
"The state/province of the contact": "Штат/провинция контакта",
|
||||
"The postal code of the contact": "Индекс контакта",
|
||||
"The country of the contact": "Страна контакта",
|
||||
"The email address": "Адрес электронной почты",
|
||||
"Search by list name.": "Поиск по названию списка.",
|
||||
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
|
||||
"GET": "ПОЛУЧИТЬ",
|
||||
"POST": "ПОСТ",
|
||||
"PATCH": "ПАТЧ",
|
||||
"PUT": "ПОКУПИТЬ",
|
||||
"DELETE": "УДАЛИТЬ",
|
||||
"HEAD": "HEAD",
|
||||
"New Incoming SMS": "Новые входящие SMS",
|
||||
"Triggers when a new SMS message is received.": "Включает при получении нового SMS-сообщения."
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"Cloud-based messaging platform for sending SMS, MMS, voice, email, and more.": "Cloud-based messaging platform for sending SMS, MMS, voice, email, and more.",
|
||||
"Username": "Username",
|
||||
"Your ClickSend username": "Your ClickSend username",
|
||||
"API Key": "API Key",
|
||||
"Your ClickSend API key": "Your ClickSend API key",
|
||||
"You can get your API credentials by clicking 'API Credentials' on the top right of the dashboard.": "You can get your API credentials by clicking 'API Credentials' on the top right of the dashboard.",
|
||||
"Send SMS": "Send SMS",
|
||||
"Send MMS": "Send MMS",
|
||||
"Create Contact": "Create Contact",
|
||||
"Update Contact": "Update Contact",
|
||||
"Delete Contact": "Delete Contact",
|
||||
"Create Contact List": "Create Contact List",
|
||||
"Find Contact by Email": "Find Contact by Email",
|
||||
"Find Contact by Phone": "Find Contact by Phone",
|
||||
"Find Contact List": "Find Contact List",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Send one or more SMS messages.": "Send one or more SMS messages.",
|
||||
"Send one or more MMS messages.": "Send one or more MMS messages.",
|
||||
"Creates a new contact in a contact list.": "Creates a new contact in a contact list.",
|
||||
"Updates an existing contact in a contact list.": "Updates an existing contact in a contact list.",
|
||||
"Deletes a contact from a contact list.": "Deletes a contact from a contact list.",
|
||||
"Creates a new contact list.": "Creates a new contact list.",
|
||||
"Finds contact by email address.": "Finds contact by email address.",
|
||||
"Finds contact by phone number.": "Finds contact by phone number.",
|
||||
"Finds for contact list based on name.": "Finds for contact list based on name.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Messages": "Messages",
|
||||
"To": "To",
|
||||
"Message Body": "Message Body",
|
||||
"Subject": "Subject",
|
||||
"From": "From",
|
||||
"Media URL": "Media URL",
|
||||
"Contact List ID": "Contact List ID",
|
||||
"Phone Number": "Phone Number",
|
||||
"Email Address": "Email Address",
|
||||
"First Name": "First Name",
|
||||
"Last Name": "Last Name",
|
||||
"Company Name": "Company Name",
|
||||
"Address Line 1": "Address Line 1",
|
||||
"Address Line 2": "Address Line 2",
|
||||
"City": "City",
|
||||
"State/Province": "State/Province",
|
||||
"Postal Code": "Postal Code",
|
||||
"Country": "Country",
|
||||
"Contact ID": "Contact ID",
|
||||
"List Name": "List Name",
|
||||
"Search": "Search",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"The phone number (with country code, e.g., +1234567890)": "The phone number (with country code, e.g., +1234567890)",
|
||||
"The body of the message to send": "The body of the message to send",
|
||||
"The URL of the media file to send (image, video, etc.)": "The URL of the media file to send (image, video, etc.)",
|
||||
"The phone number of the contact": "The phone number of the contact",
|
||||
"The email address of the contact": "The email address of the contact",
|
||||
"The first name of the contact": "The first name of the contact",
|
||||
"The last name of the contact": "The last name of the contact",
|
||||
"The company name of the contact": "The company name of the contact",
|
||||
"The first line of the address": "The first line of the address",
|
||||
"The second line of the address": "The second line of the address",
|
||||
"The city of the contact": "The city of the contact",
|
||||
"The state/province of the contact": "The state/province of the contact",
|
||||
"The postal code of the contact": "The postal code of the contact",
|
||||
"The country of the contact": "The country of the contact",
|
||||
"The email address": "The email address",
|
||||
"Search by list name.": "Search by list name.",
|
||||
"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..",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Incoming SMS": "New Incoming SMS",
|
||||
"Triggers when a new SMS message is received.": "Triggers when a new SMS message is received."
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"ClickSend SMS": "ClickSend SMS",
|
||||
"Cloud-based messaging platform for sending SMS, MMS, voice, email, and more.": "Cloud-based messaging platform for sending SMS, MMS, voice, email, and more.",
|
||||
"Username": "Username",
|
||||
"Your ClickSend username": "Your ClickSend username",
|
||||
"API Key": "API Key",
|
||||
"Your ClickSend API key": "Your ClickSend API key",
|
||||
"You can get your API credentials by clicking 'API Credentials' on the top right of the dashboard.": "You can get your API credentials by clicking 'API Credentials' on the top right of the dashboard.",
|
||||
"Send SMS": "Send SMS",
|
||||
"Send MMS": "Send MMS",
|
||||
"Create Contact": "Create Contact",
|
||||
"Update Contact": "Update Contact",
|
||||
"Delete Contact": "Delete Contact",
|
||||
"Create Contact List": "Create Contact List",
|
||||
"Find Contact by Email": "Find Contact by Email",
|
||||
"Find Contact by Phone": "Find Contact by Phone",
|
||||
"Find Contact List": "Find Contact List",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Send one or more SMS messages.": "Send one or more SMS messages.",
|
||||
"Send one or more MMS messages.": "Send one or more MMS messages.",
|
||||
"Creates a new contact in a contact list.": "Creates a new contact in a contact list.",
|
||||
"Updates an existing contact in a contact list.": "Updates an existing contact in a contact list.",
|
||||
"Deletes a contact from a contact list.": "Deletes a contact from a contact list.",
|
||||
"Creates a new contact list.": "Creates a new contact list.",
|
||||
"Finds contact by email address.": "Finds contact by email address.",
|
||||
"Finds contact by phone number.": "Finds contact by phone number.",
|
||||
"Finds for contact list based on name.": "Finds for contact list based on name.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Messages": "Messages",
|
||||
"To": "To",
|
||||
"Message Body": "Message Body",
|
||||
"Subject": "Subject",
|
||||
"From": "From",
|
||||
"Media URL": "Media URL",
|
||||
"Contact List ID": "Contact List ID",
|
||||
"Phone Number": "Phone Number",
|
||||
"Email Address": "Email Address",
|
||||
"First Name": "First Name",
|
||||
"Last Name": "Last Name",
|
||||
"Company Name": "Tên công ty",
|
||||
"Address Line 1": "Address Line 1",
|
||||
"Address Line 2": "Address Line 2",
|
||||
"City": "City",
|
||||
"State/Province": "State/Province",
|
||||
"Postal Code": "Postal Code",
|
||||
"Country": "Country",
|
||||
"Contact ID": "Contact ID",
|
||||
"List Name": "List Name",
|
||||
"Search": "Search",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"The phone number (with country code, e.g., +1234567890)": "The phone number (with country code, e.g., +1234567890)",
|
||||
"The body of the message to send": "The body of the message to send",
|
||||
"The URL of the media file to send (image, video, etc.)": "The URL of the media file to send (image, video, etc.)",
|
||||
"The phone number of the contact": "The phone number of the contact",
|
||||
"The email address of the contact": "The email address of the contact",
|
||||
"The first name of the contact": "The first name of the contact",
|
||||
"The last name of the contact": "The last name of the contact",
|
||||
"The company name of the contact": "The company name of the contact",
|
||||
"The first line of the address": "The first line of the address",
|
||||
"The second line of the address": "The second line of the address",
|
||||
"The city of the contact": "The city of the contact",
|
||||
"The state/province of the contact": "The state/province of the contact",
|
||||
"The postal code of the contact": "The postal code of the contact",
|
||||
"The country of the contact": "The country of the contact",
|
||||
"The email address": "The email address",
|
||||
"Search by list name.": "Search by list name.",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Incoming SMS": "New Incoming SMS",
|
||||
"Triggers when a new SMS message is received.": "Triggers when a new SMS message is received."
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"Cloud-based messaging platform for sending SMS, MMS, voice, email, and more.": "Cloud-based messaging platform for sending SMS, MMS, voice, email, and more.",
|
||||
"Username": "用户名",
|
||||
"Your ClickSend username": "Your ClickSend username",
|
||||
"API Key": "API 密钥",
|
||||
"Your ClickSend API key": "Your ClickSend API key",
|
||||
"You can get your API credentials by clicking 'API Credentials' on the top right of the dashboard.": "You can get your API credentials by clicking 'API Credentials' on the top right of the dashboard.",
|
||||
"Send SMS": "Send SMS",
|
||||
"Send MMS": "Send MMS",
|
||||
"Create Contact": "Create Contact",
|
||||
"Update Contact": "Update Contact",
|
||||
"Delete Contact": "Delete Contact",
|
||||
"Create Contact List": "Create Contact List",
|
||||
"Find Contact by Email": "Find Contact by Email",
|
||||
"Find Contact by Phone": "Find Contact by Phone",
|
||||
"Find Contact List": "Find Contact List",
|
||||
"Custom API Call": "自定义 API 呼叫",
|
||||
"Send one or more SMS messages.": "Send one or more SMS messages.",
|
||||
"Send one or more MMS messages.": "Send one or more MMS messages.",
|
||||
"Creates a new contact in a contact list.": "Creates a new contact in a contact list.",
|
||||
"Updates an existing contact in a contact list.": "Updates an existing contact in a contact list.",
|
||||
"Deletes a contact from a contact list.": "Deletes a contact from a contact list.",
|
||||
"Creates a new contact list.": "Creates a new contact list.",
|
||||
"Finds contact by email address.": "Finds contact by email address.",
|
||||
"Finds contact by phone number.": "Finds contact by phone number.",
|
||||
"Finds for contact list based on name.": "Finds for contact list based on name.",
|
||||
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
|
||||
"Messages": "Messages",
|
||||
"To": "To",
|
||||
"Message Body": "Message Body",
|
||||
"Subject": "Subject",
|
||||
"From": "From",
|
||||
"Media URL": "Media URL",
|
||||
"Contact List ID": "Contact List ID",
|
||||
"Phone Number": "Phone Number",
|
||||
"Email Address": "Email Address",
|
||||
"First Name": "名字",
|
||||
"Last Name": "名字",
|
||||
"Company Name": "Company Name",
|
||||
"Address Line 1": "Address Line 1",
|
||||
"Address Line 2": "Address Line 2",
|
||||
"City": "City",
|
||||
"State/Province": "State/Province",
|
||||
"Postal Code": "Postal Code",
|
||||
"Country": "Country",
|
||||
"Contact ID": "Contact ID",
|
||||
"List Name": "List Name",
|
||||
"Search": "搜索",
|
||||
"Method": "方法",
|
||||
"Headers": "信头",
|
||||
"Query Parameters": "查询参数",
|
||||
"Body": "正文内容",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "失败时没有错误",
|
||||
"Timeout (in seconds)": "超时(秒)",
|
||||
"The phone number (with country code, e.g., +1234567890)": "The phone number (with country code, e.g., +1234567890)",
|
||||
"The body of the message to send": "The body of the message to send",
|
||||
"The URL of the media file to send (image, video, etc.)": "The URL of the media file to send (image, video, etc.)",
|
||||
"The phone number of the contact": "The phone number of the contact",
|
||||
"The email address of the contact": "The email address of the contact",
|
||||
"The first name of the contact": "The first name of the contact",
|
||||
"The last name of the contact": "The last name of the contact",
|
||||
"The company name of the contact": "The company name of the contact",
|
||||
"The first line of the address": "The first line of the address",
|
||||
"The second line of the address": "The second line of the address",
|
||||
"The city of the contact": "The city of the contact",
|
||||
"The state/province of the contact": "The state/province of the contact",
|
||||
"The postal code of the contact": "The postal code of the contact",
|
||||
"The country of the contact": "The country of the contact",
|
||||
"The email address": "The email address",
|
||||
"Search by list name.": "Search by list name.",
|
||||
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"GET": "获取",
|
||||
"POST": "帖子",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "弹出",
|
||||
"DELETE": "删除",
|
||||
"HEAD": "黑色",
|
||||
"New Incoming SMS": "New Incoming SMS",
|
||||
"Triggers when a new SMS message is received.": "Triggers when a new SMS message is received."
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
import {
|
||||
createCustomApiCallAction,
|
||||
HttpMethod,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { PieceAuth, createPiece } from '@activepieces/pieces-framework';
|
||||
import { PieceCategory } from '@activepieces/shared';
|
||||
import { clicksendSendSmsAction } from './lib/action/send-sms';
|
||||
import { clicksendSendMms } from './lib/action/send-mms';
|
||||
import { clicksendCreateContactAction } from './lib/action/create-contact';
|
||||
import { clicksendUpdateContactAction } from './lib/action/update-contact';
|
||||
import { clicksendDeleteContactAction } from './lib/action/delete-contact';
|
||||
import { clicksendCreateContactListAction } from './lib/action/create-contact-list';
|
||||
import { clicksendFindContactByEmailAction } from './lib/action/search-contact-by-email';
|
||||
import { clicksendFindContactByPhoneAction } from './lib/action/search-contact-by-phone';
|
||||
import { clicksendFindContactListAction } from './lib/action/search-contact-lists';
|
||||
import { clicksendNewIncomingSms } from './lib/trigger/new-incoming-sms';
|
||||
import { callClickSendApi } from './lib/common';
|
||||
|
||||
export const clicksendAuth = PieceAuth.BasicAuth({
|
||||
description: `You can get your API credentials by clicking 'API Credentials' on the top right of the dashboard.`,
|
||||
required: true,
|
||||
username: {
|
||||
displayName: 'Username',
|
||||
description: 'Your ClickSend username',
|
||||
},
|
||||
password: {
|
||||
displayName: 'API Key',
|
||||
description: 'Your ClickSend API key',
|
||||
},
|
||||
validate: async ({ auth }) => {
|
||||
try {
|
||||
await callClickSendApi({
|
||||
method: HttpMethod.GET,
|
||||
path: '/account',
|
||||
username: auth.username,
|
||||
password: auth.password,
|
||||
});
|
||||
return { valid: true };
|
||||
} catch {
|
||||
return { valid: false, error: 'Invalid Credentials.' };
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const clicksend = createPiece({
|
||||
displayName: 'ClickSend SMS',
|
||||
description:
|
||||
'Cloud-based messaging platform for sending SMS, MMS, voice, email, and more.',
|
||||
minimumSupportedRelease: '0.36.1',
|
||||
logoUrl: 'https://cdn.activepieces.com/pieces/clicksend.png',
|
||||
auth: clicksendAuth,
|
||||
categories: [PieceCategory.COMMUNICATION],
|
||||
actions: [
|
||||
clicksendSendSmsAction,
|
||||
clicksendSendMms,
|
||||
clicksendCreateContactAction,
|
||||
clicksendUpdateContactAction,
|
||||
clicksendDeleteContactAction,
|
||||
clicksendCreateContactListAction,
|
||||
clicksendFindContactByEmailAction,
|
||||
clicksendFindContactByPhoneAction,
|
||||
clicksendFindContactListAction,
|
||||
createCustomApiCallAction({
|
||||
baseUrl: () => 'https://rest.clicksend.com/v3',
|
||||
auth: clicksendAuth,
|
||||
authMapping: async (auth) => ({
|
||||
Authorization: `Basic ${Buffer.from(
|
||||
`${(auth as { username: string }).username}:${
|
||||
(auth as { password: string }).password
|
||||
}`
|
||||
).toString('base64')}`,
|
||||
}),
|
||||
}),
|
||||
],
|
||||
authors: ['sparkybug'],
|
||||
triggers: [clicksendNewIncomingSms],
|
||||
});
|
||||
@@ -0,0 +1,43 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { callClickSendApi } from '../common';
|
||||
import { clicksendAuth } from '../..';
|
||||
|
||||
export const clicksendCreateContactListAction = createAction({
|
||||
auth: clicksendAuth,
|
||||
name: 'create_contact_list',
|
||||
description: 'Creates a new contact list.',
|
||||
displayName: 'Create Contact List',
|
||||
props: {
|
||||
list_name: Property.ShortText({
|
||||
displayName: 'List Name',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { list_name } = context.propsValue;
|
||||
if (!list_name || list_name.trim().length === 0) {
|
||||
throw new Error('List name must not be empty.');
|
||||
}
|
||||
const username = context.auth.username;
|
||||
const password = context.auth.password;
|
||||
const listData = {
|
||||
list_name: list_name,
|
||||
};
|
||||
try {
|
||||
const response = await callClickSendApi({
|
||||
method: HttpMethod.POST,
|
||||
path: '/lists',
|
||||
username,
|
||||
password,
|
||||
body: listData,
|
||||
});
|
||||
return response.body;
|
||||
} catch (error: any) {
|
||||
if (error?.response?.body?.response_code === 'ALREADY_EXISTS') {
|
||||
throw new Error('A contact list with this name already exists.');
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,128 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { callClickSendApi, clicksendCommon } from '../common';
|
||||
import { clicksendAuth } from '../..';
|
||||
|
||||
function isValidPhone(phone: string) {
|
||||
return /^\+?[1-9]\d{1,14}$/.test(phone);
|
||||
}
|
||||
function isValidEmail(email: string) {
|
||||
return /^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email);
|
||||
}
|
||||
|
||||
export const clicksendCreateContactAction = createAction({
|
||||
auth: clicksendAuth,
|
||||
name: 'create_contact',
|
||||
description: 'Creates a new contact in a contact list.',
|
||||
displayName: 'Create Contact',
|
||||
props: {
|
||||
contact_list_id: clicksendCommon.contact_list_id,
|
||||
phone_number: Property.ShortText({
|
||||
description: 'The phone number of the contact',
|
||||
displayName: 'Phone Number',
|
||||
required: true,
|
||||
}),
|
||||
email: Property.ShortText({
|
||||
description: 'The email address of the contact',
|
||||
displayName: 'Email Address',
|
||||
required: false,
|
||||
}),
|
||||
first_name: Property.ShortText({
|
||||
description: 'The first name of the contact',
|
||||
displayName: 'First Name',
|
||||
required: false,
|
||||
}),
|
||||
last_name: Property.ShortText({
|
||||
description: 'The last name of the contact',
|
||||
displayName: 'Last Name',
|
||||
required: false,
|
||||
}),
|
||||
company_name: Property.ShortText({
|
||||
description: 'The company name of the contact',
|
||||
displayName: 'Company Name',
|
||||
required: false,
|
||||
}),
|
||||
address_line_1: Property.ShortText({
|
||||
description: 'The first line of the address',
|
||||
displayName: 'Address Line 1',
|
||||
required: false,
|
||||
}),
|
||||
address_line_2: Property.ShortText({
|
||||
description: 'The second line of the address',
|
||||
displayName: 'Address Line 2',
|
||||
required: false,
|
||||
}),
|
||||
city: Property.ShortText({
|
||||
description: 'The city of the contact',
|
||||
displayName: 'City',
|
||||
required: false,
|
||||
}),
|
||||
state: Property.ShortText({
|
||||
description: 'The state/province of the contact',
|
||||
displayName: 'State/Province',
|
||||
required: false,
|
||||
}),
|
||||
postal_code: Property.ShortText({
|
||||
description: 'The postal code of the contact',
|
||||
displayName: 'Postal Code',
|
||||
required: false,
|
||||
}),
|
||||
country: Property.ShortText({
|
||||
description: 'The country of the contact',
|
||||
displayName: 'Country',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const {
|
||||
contact_list_id,
|
||||
phone_number,
|
||||
email,
|
||||
first_name,
|
||||
last_name,
|
||||
company_name,
|
||||
address_line_1,
|
||||
address_line_2,
|
||||
city,
|
||||
state,
|
||||
postal_code,
|
||||
country,
|
||||
} = context.propsValue;
|
||||
if (!phone_number || !isValidPhone(phone_number)) {
|
||||
throw new Error('A valid phone number is required.');
|
||||
}
|
||||
if (email && !isValidEmail(email)) {
|
||||
throw new Error('Invalid email address.');
|
||||
}
|
||||
const username = context.auth.username;
|
||||
const password = context.auth.password;
|
||||
const contactData = {
|
||||
phone_number,
|
||||
...(email && { email }),
|
||||
...(first_name && { first_name }),
|
||||
...(last_name && { last_name }),
|
||||
...(company_name && { company_name }),
|
||||
...(address_line_1 && { address_line_1 }),
|
||||
...(address_line_2 && { address_line_2 }),
|
||||
...(city && { city }),
|
||||
...(state && { state }),
|
||||
...(postal_code && { postal_code }),
|
||||
...(country && { country }),
|
||||
};
|
||||
try {
|
||||
const response = await callClickSendApi({
|
||||
method: HttpMethod.POST,
|
||||
path: `/lists/${contact_list_id}/contacts`,
|
||||
username,
|
||||
password,
|
||||
body: contactData,
|
||||
});
|
||||
return response.body;
|
||||
} catch (error: any) {
|
||||
if (error?.response?.body?.response_code === 'ALREADY_EXISTS') {
|
||||
throw new Error('Contact already exists in this list.');
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,37 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { callClickSendApi, clicksendCommon } from '../common';
|
||||
import { clicksendAuth } from '../..';
|
||||
|
||||
export const clicksendDeleteContactAction = createAction({
|
||||
auth: clicksendAuth,
|
||||
name: 'delete_contact',
|
||||
description: 'Deletes a contact from a contact list.',
|
||||
displayName: 'Delete Contact',
|
||||
props: {
|
||||
contact_list_id: clicksendCommon.contact_list_id,
|
||||
contact_id: clicksendCommon.contact_id,
|
||||
},
|
||||
async run(context) {
|
||||
const { contact_id,contact_list_id } = context.propsValue;
|
||||
const username = context.auth.username;
|
||||
const password = context.auth.password;
|
||||
try {
|
||||
await callClickSendApi({
|
||||
method: HttpMethod.DELETE,
|
||||
path: `/lists/${contact_list_id}/contacts/${contact_id}`,
|
||||
username,
|
||||
password,
|
||||
});
|
||||
return { success: true, message: 'Contact deleted.' };
|
||||
} catch (error: any) {
|
||||
if (error?.response?.status === 404) {
|
||||
throw new Error('Contact not found.');
|
||||
}
|
||||
if (error?.response?.status === 403) {
|
||||
throw new Error('Permission denied.');
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,64 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { callClickSendApi, clicksendCommon } from '../common';
|
||||
import { clicksendAuth } from '../..';
|
||||
|
||||
function isValidEmail(email: string) {
|
||||
return /^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email);
|
||||
}
|
||||
|
||||
export const clicksendFindContactByEmailAction = createAction({
|
||||
auth: clicksendAuth,
|
||||
name: 'find_contact_by_email',
|
||||
description: 'Finds contact by email address.',
|
||||
displayName: 'Find Contact by Email',
|
||||
props: {
|
||||
contact_list_id: clicksendCommon.contact_list_id,
|
||||
email: clicksendCommon.email,
|
||||
},
|
||||
async run(context) {
|
||||
const { contact_list_id, email } = context.propsValue;
|
||||
if (!isValidEmail(email)) {
|
||||
throw new Error('Invalid email address.');
|
||||
}
|
||||
const username = context.auth.username;
|
||||
const password = context.auth.password;
|
||||
|
||||
let currentPage = 1;
|
||||
let hasNext = true;
|
||||
|
||||
do {
|
||||
const response = await callClickSendApi<{
|
||||
data: {
|
||||
next_page_url?: string;
|
||||
data: { email: string }[];
|
||||
};
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
username,
|
||||
password,
|
||||
path: `/lists/${contact_list_id}/contacts`,
|
||||
query: { page: currentPage.toString(), limit: '100' },
|
||||
});
|
||||
|
||||
const items = response.body.data?.data ?? [];
|
||||
|
||||
const matched = items.find((item) => item.email === email);
|
||||
|
||||
if (matched) {
|
||||
return {
|
||||
found: true,
|
||||
data: matched,
|
||||
};
|
||||
}
|
||||
|
||||
currentPage++;
|
||||
hasNext = !!response.body.data?.next_page_url;
|
||||
} while (hasNext);
|
||||
|
||||
return {
|
||||
found: false,
|
||||
data: {},
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,63 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { callClickSendApi, clicksendCommon } from '../common';
|
||||
import { clicksendAuth } from '../..';
|
||||
|
||||
function isValidPhone(phone: string) {
|
||||
return /^\+?[1-9]\d{1,14}$/.test(phone);
|
||||
}
|
||||
|
||||
export const clicksendFindContactByPhoneAction = createAction({
|
||||
auth: clicksendAuth,
|
||||
name: 'find_contact_by_phone',
|
||||
description: 'Finds contact by phone number.',
|
||||
displayName: 'Find Contact by Phone',
|
||||
props: {
|
||||
contact_list_id: clicksendCommon.contact_list_id,
|
||||
phone_number: clicksendCommon.phone_number,
|
||||
},
|
||||
async run(context) {
|
||||
const { contact_list_id, phone_number } = context.propsValue;
|
||||
if (!isValidPhone(phone_number)) {
|
||||
throw new Error('Invalid phone number.');
|
||||
}
|
||||
const username = context.auth.username;
|
||||
const password = context.auth.password;
|
||||
let currentPage = 1;
|
||||
let hasNext = true;
|
||||
|
||||
do {
|
||||
const response = await callClickSendApi<{
|
||||
data: {
|
||||
next_page_url?: string;
|
||||
data: { phone_number: string }[];
|
||||
};
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
username,
|
||||
password,
|
||||
path: `/lists/${contact_list_id}/contacts`,
|
||||
query: { page: currentPage.toString(), limit: '100' },
|
||||
});
|
||||
|
||||
const items = response.body.data?.data ?? [];
|
||||
|
||||
const matched = items.find((item) => item.phone_number === phone_number);
|
||||
|
||||
if (matched) {
|
||||
return {
|
||||
found: true,
|
||||
data: matched,
|
||||
};
|
||||
}
|
||||
|
||||
currentPage++;
|
||||
hasNext = !!response.body.data?.next_page_url;
|
||||
} while (hasNext);
|
||||
|
||||
return {
|
||||
found: false,
|
||||
data: {},
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,59 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { callClickSendApi } from '../common';
|
||||
import { clicksendAuth } from '../..';
|
||||
|
||||
export const clicksendFindContactListAction = createAction({
|
||||
auth: clicksendAuth,
|
||||
name: 'find_contact_lists',
|
||||
description: 'Finds for contact list based on name.',
|
||||
displayName: 'Find Contact List',
|
||||
props: {
|
||||
search: Property.ShortText({
|
||||
displayName: 'Search',
|
||||
description: 'Search by list name.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { search } = context.propsValue;
|
||||
const username = context.auth.username;
|
||||
const password = context.auth.password;
|
||||
|
||||
let currentPage = 1;
|
||||
let hasNext = true;
|
||||
do {
|
||||
const response = await callClickSendApi<{
|
||||
data: {
|
||||
next_page_url?: string;
|
||||
data: { list_id: number; list_name: string }[];
|
||||
};
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
username,
|
||||
password,
|
||||
path: '/lists',
|
||||
query: { page: currentPage.toString(), limit: '100' },
|
||||
});
|
||||
|
||||
const items = response.body.data?.data ?? [];
|
||||
|
||||
const matched = items.find((item) => item.list_name === search);
|
||||
|
||||
if (matched) {
|
||||
return {
|
||||
found: true,
|
||||
data: matched,
|
||||
};
|
||||
}
|
||||
|
||||
currentPage++;
|
||||
hasNext = !!response.body.data?.next_page_url;
|
||||
} while (hasNext);
|
||||
|
||||
return {
|
||||
found: false,
|
||||
data: {},
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,81 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { callClickSendApi, clicksendCommon } from '../common';
|
||||
import { clicksendAuth } from '../..';
|
||||
|
||||
export const clicksendSendMms = createAction({
|
||||
auth: clicksendAuth,
|
||||
name: 'send_mms',
|
||||
description: 'Send one or more MMS messages.',
|
||||
displayName: 'Send MMS',
|
||||
props: {
|
||||
to: Property.ShortText({
|
||||
description: 'The phone number (with country code, e.g., +1234567890)',
|
||||
displayName: 'To',
|
||||
required: true,
|
||||
}),
|
||||
body: Property.ShortText({
|
||||
description: 'The body of the message to send',
|
||||
displayName: 'Message Body',
|
||||
required: true,
|
||||
}),
|
||||
subject: Property.ShortText({
|
||||
displayName: 'Subject',
|
||||
required: true,
|
||||
}),
|
||||
from: clicksendCommon.sender_id,
|
||||
media_url: Property.ShortText({
|
||||
description: 'The URL of the media file to send (image, video, etc.)',
|
||||
displayName: 'Media URL',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const {
|
||||
to,
|
||||
body,
|
||||
from,
|
||||
media_url,
|
||||
subject,
|
||||
} = context.propsValue;
|
||||
|
||||
const username = context.auth.username;
|
||||
const password = context.auth.password;
|
||||
|
||||
// Validate each message
|
||||
|
||||
if (!to || !body || !media_url) {
|
||||
throw new Error(
|
||||
'Each message must have a recipient (to), body, and media_url.'
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await callClickSendApi({
|
||||
method: HttpMethod.POST,
|
||||
path: '/mms/send',
|
||||
username,
|
||||
password,
|
||||
body: {
|
||||
media_file:media_url,
|
||||
messages:[{
|
||||
subject,
|
||||
from,
|
||||
body,
|
||||
to}
|
||||
]
|
||||
},
|
||||
});
|
||||
return response.body;
|
||||
} catch (error: any) {
|
||||
// Handle ClickSend API errors and provide meaningful feedback
|
||||
if (error?.response?.body?.response_msg) {
|
||||
throw new Error(
|
||||
`ClickSend API error: ${error.response.body.response_msg}`
|
||||
);
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { callClickSendApi } from '../common';
|
||||
import { clicksendAuth } from '../..';
|
||||
|
||||
export const clicksendSendSmsAction = createAction({
|
||||
auth: clicksendAuth,
|
||||
name: 'send_sms',
|
||||
description: 'Send one or more SMS messages.',
|
||||
displayName: 'Send SMS',
|
||||
props: {
|
||||
messages: Property.Array({
|
||||
displayName: 'Messages',
|
||||
required: true,
|
||||
properties: {
|
||||
to: Property.ShortText({
|
||||
description:
|
||||
'The phone number (with country code, e.g., +1234567890)',
|
||||
displayName: 'To',
|
||||
required: true,
|
||||
}),
|
||||
body: Property.ShortText({
|
||||
description: 'The body of the message to send',
|
||||
displayName: 'Message Body',
|
||||
required: true,
|
||||
}),
|
||||
from: Property.ShortText({
|
||||
description:
|
||||
'The sender name or number (must be approved in ClickSend).',
|
||||
displayName: 'From',
|
||||
required: false,
|
||||
}),
|
||||
custom_string: Property.ShortText({
|
||||
description: 'A custom string for tracking the message',
|
||||
displayName: 'Custom String',
|
||||
required: false,
|
||||
}),
|
||||
country: Property.ShortText({
|
||||
description: 'Country code (for compliance)',
|
||||
displayName: 'Country',
|
||||
required: false,
|
||||
}),
|
||||
message_expiry: Property.Number({
|
||||
description: 'How long (in minutes) the message is valid for.',
|
||||
displayName: 'Message Expiry (minutes)',
|
||||
required: false,
|
||||
}),
|
||||
priority: Property.Checkbox({
|
||||
description: 'Send as high priority',
|
||||
displayName: 'Priority',
|
||||
required: false,
|
||||
})
|
||||
},
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const messages = (context.propsValue.messages as Message[]) ?? [];
|
||||
if (!Array.isArray(messages) || messages.length === 0) {
|
||||
throw new Error('At least one message must be provided.');
|
||||
}
|
||||
const username = context.auth.username;
|
||||
const password = context.auth.password;
|
||||
|
||||
// Map messages to ClickSend API format, ensuring all optional fields are included if provided
|
||||
const messageData = {
|
||||
messages: messages.map((msg: Message) => {
|
||||
const {
|
||||
to,
|
||||
body,
|
||||
from,
|
||||
custom_string,
|
||||
country,
|
||||
message_expiry,
|
||||
priority,
|
||||
} = msg;
|
||||
return {
|
||||
to,
|
||||
body,
|
||||
...(from && { from }),
|
||||
...(custom_string && { custom_string }),
|
||||
...(country && { country }),
|
||||
...(message_expiry && { message_expiry }),
|
||||
...(priority !== undefined ? { priority } : {}),
|
||||
};
|
||||
}),
|
||||
};
|
||||
|
||||
const response = await callClickSendApi({
|
||||
method: HttpMethod.POST,
|
||||
path: '/sms/send',
|
||||
username,
|
||||
password,
|
||||
body: messageData,
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
|
||||
type Message = {
|
||||
to: string;
|
||||
body: string;
|
||||
from?: string;
|
||||
custom_string?: string;
|
||||
country?: string;
|
||||
message_expiry?: number;
|
||||
priority?: boolean;
|
||||
list_id?: number;
|
||||
};
|
||||
@@ -0,0 +1,134 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { callClickSendApi, clicksendCommon } from '../common';
|
||||
import { clicksendAuth } from '../..';
|
||||
|
||||
function isValidPhone(phone: string) {
|
||||
return /^\+?[1-9]\d{1,14}$/.test(phone);
|
||||
}
|
||||
function isValidEmail(email: string) {
|
||||
return /^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email);
|
||||
}
|
||||
|
||||
export const clicksendUpdateContactAction = createAction({
|
||||
auth: clicksendAuth,
|
||||
name: 'update_contact',
|
||||
description: 'Updates an existing contact in a contact list.',
|
||||
displayName: 'Update Contact',
|
||||
props: {
|
||||
contact_list_id: clicksendCommon.contact_list_id,
|
||||
contact_id: clicksendCommon.contact_id,
|
||||
phone_number: Property.ShortText({
|
||||
description: 'The phone number of the contact',
|
||||
displayName: 'Phone Number',
|
||||
required: false,
|
||||
}),
|
||||
email: Property.ShortText({
|
||||
description: 'The email address of the contact',
|
||||
displayName: 'Email Address',
|
||||
required: false,
|
||||
}),
|
||||
first_name: Property.ShortText({
|
||||
description: 'The first name of the contact',
|
||||
displayName: 'First Name',
|
||||
required: false,
|
||||
}),
|
||||
last_name: Property.ShortText({
|
||||
description: 'The last name of the contact',
|
||||
displayName: 'Last Name',
|
||||
required: false,
|
||||
}),
|
||||
company_name: Property.ShortText({
|
||||
description: 'The company name of the contact',
|
||||
displayName: 'Company Name',
|
||||
required: false,
|
||||
}),
|
||||
address_line_1: Property.ShortText({
|
||||
description: 'The first line of the address',
|
||||
displayName: 'Address Line 1',
|
||||
required: false,
|
||||
}),
|
||||
address_line_2: Property.ShortText({
|
||||
description: 'The second line of the address',
|
||||
displayName: 'Address Line 2',
|
||||
required: false,
|
||||
}),
|
||||
city: Property.ShortText({
|
||||
description: 'The city of the contact',
|
||||
displayName: 'City',
|
||||
required: false,
|
||||
}),
|
||||
state: Property.ShortText({
|
||||
description: 'The state/province of the contact',
|
||||
displayName: 'State/Province',
|
||||
required: false,
|
||||
}),
|
||||
postal_code: Property.ShortText({
|
||||
description: 'The postal code of the contact',
|
||||
displayName: 'Postal Code',
|
||||
required: false,
|
||||
}),
|
||||
country: Property.ShortText({
|
||||
description: 'The country of the contact',
|
||||
displayName: 'Country',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const {
|
||||
contact_id,
|
||||
phone_number,
|
||||
email,
|
||||
first_name,
|
||||
last_name,
|
||||
company_name,
|
||||
address_line_1,
|
||||
address_line_2,
|
||||
city,
|
||||
state,
|
||||
postal_code,
|
||||
contact_list_id,
|
||||
country,
|
||||
} = context.propsValue;
|
||||
if (phone_number && !isValidPhone(phone_number)) {
|
||||
throw new Error('Invalid phone number.');
|
||||
}
|
||||
if (email && !isValidEmail(email)) {
|
||||
throw new Error('Invalid email address.');
|
||||
}
|
||||
const username = context.auth.username;
|
||||
const password = context.auth.password;
|
||||
const contactData = {
|
||||
...(phone_number && { phone_number }),
|
||||
...(email && { email }),
|
||||
...(first_name && { first_name }),
|
||||
...(last_name && { last_name }),
|
||||
...(company_name && { company_name }),
|
||||
...(address_line_1 && { address_line_1 }),
|
||||
...(address_line_2 && { address_line_2 }),
|
||||
...(city && { city }),
|
||||
...(state && { state }),
|
||||
...(postal_code && { postal_code }),
|
||||
...(country && { country }),
|
||||
};
|
||||
try {
|
||||
const response= await callClickSendApi({
|
||||
method: HttpMethod.PUT,
|
||||
path: `/lists/${contact_list_id}/contacts/${contact_id}`,
|
||||
username,
|
||||
password,
|
||||
body: contactData,
|
||||
});
|
||||
|
||||
return response.body;
|
||||
} catch (error: any) {
|
||||
if (error?.response?.status === 404) {
|
||||
throw new Error('Contact not found.');
|
||||
}
|
||||
if (error?.response?.status === 403) {
|
||||
throw new Error('Permission denied.');
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,193 @@
|
||||
import {
|
||||
Property,
|
||||
PiecePropValueSchema,
|
||||
DropdownOption,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import {
|
||||
HttpMethod,
|
||||
HttpMessageBody,
|
||||
httpClient,
|
||||
AuthenticationType,
|
||||
QueryParams,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { clicksendAuth } from '../..';
|
||||
|
||||
export const clicksendCommon = {
|
||||
phone_number: Property.ShortText({
|
||||
description: 'The phone number (with country code, e.g., +1234567890)',
|
||||
displayName: 'Phone Number',
|
||||
required: true,
|
||||
}),
|
||||
|
||||
email: Property.ShortText({
|
||||
description: 'The email address',
|
||||
displayName: 'Email Address',
|
||||
required: true,
|
||||
}),
|
||||
|
||||
contact_list_id: Property.Dropdown({
|
||||
auth: clicksendAuth,
|
||||
displayName: 'Contact List ID',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first.',
|
||||
};
|
||||
}
|
||||
|
||||
const authValue = auth;
|
||||
|
||||
const options: DropdownOption<number>[] = [];
|
||||
|
||||
let currentPage = 1;
|
||||
let hasNext = true;
|
||||
|
||||
do {
|
||||
const response = await callClickSendApi<{
|
||||
data: {
|
||||
next_page_url?: string;
|
||||
data: { list_id: number; list_name: string }[];
|
||||
};
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
username: authValue.username,
|
||||
password: authValue.password,
|
||||
path: '/lists',
|
||||
query: { page: currentPage.toString(), limit: '100' },
|
||||
});
|
||||
|
||||
const items = response.body.data?.data ?? [];
|
||||
|
||||
for (const list of items) {
|
||||
options.push({ label: list.list_name, value: list.list_id });
|
||||
}
|
||||
|
||||
currentPage++;
|
||||
hasNext = !!response.body.data?.next_page_url;
|
||||
} while (hasNext);
|
||||
return {
|
||||
disabled: false,
|
||||
options,
|
||||
};
|
||||
},
|
||||
}),
|
||||
|
||||
contact_id: Property.Dropdown({
|
||||
auth: clicksendAuth,
|
||||
displayName: 'Contact ID',
|
||||
required: true,
|
||||
refreshers: ['contact_list_id'],
|
||||
options: async ({ auth, contact_list_id }) => {
|
||||
if (!auth || !contact_list_id) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first.',
|
||||
};
|
||||
}
|
||||
|
||||
const authValue = auth;
|
||||
|
||||
const options: DropdownOption<number>[] = [];
|
||||
|
||||
let currentPage = 1;
|
||||
let hasNext = true;
|
||||
|
||||
do {
|
||||
const response = await callClickSendApi<{
|
||||
data: {
|
||||
next_page_url?: string;
|
||||
data: { contact_id: number; email: string }[];
|
||||
};
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
username: authValue.username,
|
||||
password: authValue.password,
|
||||
path: `/lists/${contact_list_id}/contacts`,
|
||||
query: { page: currentPage.toString(), limit: '100' },
|
||||
});
|
||||
|
||||
const items = response.body.data?.data ?? [];
|
||||
|
||||
for (const contact of items) {
|
||||
options.push({ label: contact.email, value: contact.contact_id });
|
||||
}
|
||||
|
||||
currentPage++;
|
||||
hasNext = !!response.body.data?.next_page_url;
|
||||
} while (hasNext);
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options,
|
||||
};
|
||||
},
|
||||
}),
|
||||
sender_id: Property.Dropdown({
|
||||
auth: clicksendAuth,
|
||||
displayName: 'From',
|
||||
refreshers: [],
|
||||
required: true,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Please connect your account first.',
|
||||
};
|
||||
}
|
||||
const authValue = auth;
|
||||
|
||||
const response = await callClickSendApi<{
|
||||
data: { user_id: number; username: string };
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
path: '/account',
|
||||
username: authValue.username,
|
||||
password: authValue.password,
|
||||
});
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: [
|
||||
{
|
||||
label: response.body.data.username,
|
||||
value: response.body.data.user_id,
|
||||
},
|
||||
],
|
||||
};
|
||||
},
|
||||
}),
|
||||
};
|
||||
|
||||
interface clickSendApiParams {
|
||||
method: HttpMethod;
|
||||
username: string;
|
||||
password: string;
|
||||
path: string;
|
||||
query?: QueryParams;
|
||||
body?: any;
|
||||
}
|
||||
|
||||
export async function callClickSendApi<T extends HttpMessageBody>(
|
||||
params: clickSendApiParams
|
||||
) {
|
||||
return await httpClient.sendRequest<T>({
|
||||
method: params.method,
|
||||
url: `https://rest.clicksend.com/v3${params.path}`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BASIC,
|
||||
username: params.username,
|
||||
password: params.password,
|
||||
},
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: params.body,
|
||||
queryParams: params.query,
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { callClickSendApi } from '../common';
|
||||
import { clicksendAuth } from '../..';
|
||||
import { isNil } from '@activepieces/shared';
|
||||
|
||||
const TRIGGER_KEY = 'new_incoming_sms_trigger';
|
||||
|
||||
export const clicksendNewIncomingSms = createTrigger({
|
||||
auth: clicksendAuth,
|
||||
name: 'new_incoming_sms',
|
||||
displayName: 'New Incoming SMS',
|
||||
description: 'Triggers when a new SMS message is received.',
|
||||
props: {},
|
||||
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
async onEnable(context) {
|
||||
const username = context.auth.username;
|
||||
const password = context.auth.password;
|
||||
|
||||
const response = await callClickSendApi<{
|
||||
data: { inbound_rule_id: number };
|
||||
}>({
|
||||
method: HttpMethod.POST,
|
||||
username,
|
||||
password,
|
||||
path: '/automations/sms/inbound',
|
||||
body: {
|
||||
dedicated_number: '*',
|
||||
rule_name: 'AP Incoming SMS',
|
||||
message_search_type: 0,
|
||||
message_search_term: null,
|
||||
action: 'URL',
|
||||
action_address: context.webhookUrl,
|
||||
enabled: 1,
|
||||
webhook_type: 'json',
|
||||
},
|
||||
});
|
||||
|
||||
await context.store.put<number>(
|
||||
TRIGGER_KEY,
|
||||
response.body.data.inbound_rule_id
|
||||
);
|
||||
},
|
||||
async onDisable(context) {
|
||||
const username = context.auth.username;
|
||||
const password = context.auth.password;
|
||||
const webhookId = await context.store.get<number>(TRIGGER_KEY);
|
||||
|
||||
if (!isNil(webhookId)) {
|
||||
await callClickSendApi({
|
||||
method: HttpMethod.DELETE,
|
||||
username,
|
||||
password,
|
||||
path: `/automations/sms/inbound/${webhookId}`,
|
||||
});
|
||||
}
|
||||
},
|
||||
async run(context) {
|
||||
return [context.payload.body];
|
||||
},
|
||||
sampleData: {
|
||||
message_id: '12345678',
|
||||
status: 'RECEIVED',
|
||||
message_timestamp: 1644321600,
|
||||
message_time: '2022-02-08 01:00:00',
|
||||
message_to: '+1234567890',
|
||||
message_from: '+0987654321',
|
||||
message_body: 'Hello from ClickSend!',
|
||||
message_direction: 'in',
|
||||
message_type: 'sms',
|
||||
message_parts: 1,
|
||||
message_cost: '0.0250',
|
||||
from_email: null,
|
||||
list_id: null,
|
||||
custom_string: null,
|
||||
contact_id: null,
|
||||
user_id: 12345,
|
||||
subaccount_id: null,
|
||||
country: 'US',
|
||||
carrier: 'Verizon',
|
||||
first_name: 'John',
|
||||
last_name: 'Doe',
|
||||
email: 'john.doe@example.com',
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user