Add Activepieces integration for workflow automation

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

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

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

View File

@@ -0,0 +1,48 @@
{
"Automate phone calls using our AI calling platform.": "Automatisieren Sie Anrufe über unsere KI-Anrufplattform.",
"Create an API key in your Autocalls account and paste the value here. Get API key here -> https://app.autocalls.ai.": "Erstellen Sie einen API-Schlüssel in Ihrem Autocalls Account und fügen Sie den Wert hier ein. Holen Sie sich den API-Schlüssel hier -> https://app.autocalls.ai.",
"Add lead to a campaign": "Lead zu einer Kampagne hinzufügen",
"Send SMS to Customer": "SMS an Kunden senden",
"Start/Stop Campaign": "Kampagne starten/stoppen",
"Make Phone Call": "Telefonanruf tätigen",
"Delete Lead": "Lead löschen",
"Add lead to an outbound campaign, to be called by an assistant from our platform.": "Fügen Sie Lead zu einer ausgehenden Kampagne, die von einem Assistenten von unserer Plattform aufgerufen werden.",
"Send an SMS to a customer using a phone number from our platform.": "Senden Sie eine SMS an einen Kunden mit einer Telefonnummer von unserer Plattform.",
"Start or stop an outbound campaign from our platform.": "Starten oder stoppen Sie eine ausgehende Kampagne von unserer Plattform.",
"Call a customer by it's phone number using an assistant from our platform.": "Rufen Sie einen Kunden über seine Telefonnummer mit Hilfe eines Assistenten von unserer Plattform an.",
"Delete a lead from a campaign.": "Einen Vorsprung aus einer Kampagne löschen.",
"Campaign": "Kampagne",
"Customer phone number": "Kunden-Telefonnummer",
"Variables": "Variablen",
"Allow duplicates": "Duplikate erlauben",
"Number of Secondary Contacts": "Anzahl der sekundären Kontakte",
"Secondary Contacts": "Sekundäre Kontakte",
"From phone number": "Von Telefonnummer",
"Text message": "Text-Nachricht",
"Action": "Aktion",
"Assistant": "Assistent",
"Lead": "Lead",
"Select a campaign": "Kampagne auswählen",
"Enter the phone number of the customer": "Geben Sie die Telefonnummer des Kunden ein",
"Variables to pass to the assistant": "Variablen die an den Assistenten übergeben werden",
"Allow the same phone number to be added to the campaign more than once": "Erlaube die gleiche Telefonnummer mehr als einmal zur Kampagne hinzuzufügen",
"How many secondary contacts do you want to add?": "Wie viele sekundäre Kontakte möchten Sie hinzufügen?",
"Add secondary contacts for this lead. Each contact can have its own phone number and variables.": "Fügen Sie für diesen Leitfaden sekundäre Kontakte hinzu. Jeder Kontakt kann seine eigene Telefonnummer und Variablen haben.",
"Select an SMS capable phone number to send the SMS from": "Wählen Sie eine SMS fähige Telefonnummer zum Senden der SMS aus",
"Enter the text message to send to the customer (max 300 characters)": "Geben Sie die Textnachricht zum Kunden ein (max. 300 Zeichen)",
"Select action to perform on the campaign": "Aktion für die Kampagne auswählen",
"Select an assistant": "Assistent auswählen",
"Select a lead to delete": "Lead zum Löschen auswählen",
"Start Campaign": "Kampagne starten",
"Stop Campaign": "Kampagne stoppen",
"Phone Call Ended": "Anruf beendet",
"Updated Assistant": "Aktualisierter Assistent",
"Inbound Call": "Eingehender Aufruf",
"Triggers when a phone call ends, with extracted variables.": "Wird ausgelöst, wenn ein Anruf endet, mit extrahierten Variablen.",
"Triggers when assistants are fetched or updated in your Autocalls account.": "Trigger wenn Assistenten in Ihrem Autocalls Konto geholt oder aktualisiert werden.",
"Triggers for variables before connecting an inbound call.": "Trigger für Variablen bevor ein eingehender Aufruf verbunden wird.",
"Start Date": "Startdatum",
"End Date": "Enddatum",
"Filter assistants created after this date. Example: 2024-01-15T10:30:00Z": "Filterassistenten erstellt nach diesem Datum. Beispiel: 2024-01-15T10:30:00Z",
"Filter assistants created before this date. Example: 2024-12-31T23:59:59Z": "Filterassistenten, die vor diesem Datum erstellt wurden. Beispiel: 2024-12-31T23:59Z"
}

View File

@@ -0,0 +1,48 @@
{
"Automate phone calls using our AI calling platform.": "Automatiza las llamadas telefónicas usando nuestra plataforma de llamadas de IA.",
"Create an API key in your Autocalls account and paste the value here. Get API key here -> https://app.autocalls.ai.": "Crea una clave API en tu cuenta de Autocalls y pega el valor aquí. Obtén la clave API aquí -> https://app.autocalls.ai.",
"Add lead to a campaign": "Añadir lead a una campaña",
"Send SMS to Customer": "Enviar SMS al cliente",
"Start/Stop Campaign": "Inicio/Detener Campaña",
"Make Phone Call": "Hacer llamada telefónica",
"Delete Lead": "Eliminar plomo",
"Add lead to an outbound campaign, to be called by an assistant from our platform.": "Añadir a una campaña saliente, a ser llamada por un asistente de nuestra plataforma.",
"Send an SMS to a customer using a phone number from our platform.": "Enviar un SMS a un cliente usando un número de teléfono de nuestra plataforma.",
"Start or stop an outbound campaign from our platform.": "Inicie o detenga una campaña de salida desde nuestra plataforma.",
"Call a customer by it's phone number using an assistant from our platform.": "Llame a un cliente por su número de teléfono usando un asistente de nuestra plataforma.",
"Delete a lead from a campaign.": "Eliminar un cliente potencial de una campaña.",
"Campaign": "Campaña",
"Customer phone number": "Número de teléfono del cliente",
"Variables": "Variables",
"Allow duplicates": "Permitir duplicados",
"Number of Secondary Contacts": "Número de contactos secundarios",
"Secondary Contacts": "Contactos secundarios",
"From phone number": "Desde el número de teléfono",
"Text message": "Mensaje de texto",
"Action": "Accin",
"Assistant": "Asistente",
"Lead": "Plomo",
"Select a campaign": "Seleccione una campaña",
"Enter the phone number of the customer": "Introduzca el número de teléfono del cliente",
"Variables to pass to the assistant": "Variables para pasar al asistente",
"Allow the same phone number to be added to the campaign more than once": "Permitir que se añada el mismo número de teléfono a la campaña más de una vez",
"How many secondary contacts do you want to add?": "¿Cuántos contactos secundarios quieres añadir?",
"Add secondary contacts for this lead. Each contact can have its own phone number and variables.": "Añadir contactos secundarios para este cliente potencial. Cada contacto puede tener su propio número de teléfono y variables.",
"Select an SMS capable phone number to send the SMS from": "Seleccione un número de teléfono con capacidad de SMS desde el que enviar el SMS",
"Enter the text message to send to the customer (max 300 characters)": "Introduzca el mensaje de texto para enviar al cliente (máximo 300 caracteres)",
"Select action to perform on the campaign": "Seleccione la acción a realizar en la campaña",
"Select an assistant": "Seleccione un asistente",
"Select a lead to delete": "Seleccione un cliente potencial para eliminar",
"Start Campaign": "Iniciar campaña",
"Stop Campaign": "Detener campaña",
"Phone Call Ended": "Llamada terminada",
"Updated Assistant": "Asistente actualizado",
"Inbound Call": "Llamada entrante",
"Triggers when a phone call ends, with extracted variables.": "Dispara cuando termina una llamada telefónica, con variables extraídas.",
"Triggers when assistants are fetched or updated in your Autocalls account.": "Dispara cuando los asistentes son recuperados o actualizados en su cuenta de llamadas automáticas.",
"Triggers for variables before connecting an inbound call.": "Desencadenadores para variables antes de conectar una llamada entrante.",
"Start Date": "Fecha de inicio",
"End Date": "Fecha de fin",
"Filter assistants created after this date. Example: 2024-01-15T10:30:00Z": "Filtrar asistentes creados después de esta fecha. Ejemplo: 2024-01-15T10:30:00Z",
"Filter assistants created before this date. Example: 2024-12-31T23:59:59Z": "Filtrar asistentes creados antes de esta fecha. Ejemplo: 2024-12-31T23:59:59Z"
}

View File

@@ -0,0 +1,48 @@
{
"Automate phone calls using our AI calling platform.": "Automatiser les appels téléphoniques à l'aide de notre plateforme d'appel IA.",
"Create an API key in your Autocalls account and paste the value here. Get API key here -> https://app.autocalls.ai.": "Créez une clé API dans votre compte Autocalls et collez la valeur ici. Obtenez la clé API ici -> https://app.autocalls.ai.",
"Add lead to a campaign": "Ajouter un prospect à une campagne",
"Send SMS to Customer": "Envoyer un SMS au client",
"Start/Stop Campaign": "Démarrer/Arrêter la campagne",
"Make Phone Call": "Passer un appel téléphonique",
"Delete Lead": "Supprimer Prospect",
"Add lead to an outbound campaign, to be called by an assistant from our platform.": "Ajouter un lien vers une campagne sortante qui sera appelée par un assistant de notre plateforme.",
"Send an SMS to a customer using a phone number from our platform.": "Envoyez un SMS à un client en utilisant un numéro de téléphone depuis notre plateforme.",
"Start or stop an outbound campaign from our platform.": "Démarrez ou arrêtez une campagne sortante depuis notre plateforme.",
"Call a customer by it's phone number using an assistant from our platform.": "Appelez un client par son numéro de téléphone à l'aide d'un assistant de notre plateforme.",
"Delete a lead from a campaign.": "Supprimer un prospect d'une campagne.",
"Campaign": "Campagnes",
"Customer phone number": "Numéro de téléphone du client",
"Variables": "Variables",
"Allow duplicates": "Autoriser les doublons",
"Number of Secondary Contacts": "Nombre de contacts secondaires",
"Secondary Contacts": "Contacts secondaires",
"From phone number": "À partir du numéro de téléphone",
"Text message": "Message SMS",
"Action": "Action",
"Assistant": "Assistant",
"Lead": "Prospect",
"Select a campaign": "Sélectionnez une campagne",
"Enter the phone number of the customer": "Entrez le numéro de téléphone du client",
"Variables to pass to the assistant": "Variables à passer à l'assistant",
"Allow the same phone number to be added to the campaign more than once": "Autoriser l'ajout du même numéro de téléphone à la campagne plus d'une fois",
"How many secondary contacts do you want to add?": "Combien de contacts secondaires voulez-vous ajouter ?",
"Add secondary contacts for this lead. Each contact can have its own phone number and variables.": "Ajouter des contacts secondaires pour ce prospect. Chaque contact peut avoir son propre numéro de téléphone et ses propres variables.",
"Select an SMS capable phone number to send the SMS from": "Sélectionnez un numéro de téléphone capable de SMS à partir duquel envoyer le SMS",
"Enter the text message to send to the customer (max 300 characters)": "Entrez le message texte à envoyer au client (max 300 caractères)",
"Select action to perform on the campaign": "Sélectionnez l'action à effectuer sur la campagne",
"Select an assistant": "Sélectionnez un assistant",
"Select a lead to delete": "Sélectionnez un prospect à supprimer",
"Start Campaign": "Lancer la campagne",
"Stop Campaign": "Arrêter la campagne",
"Phone Call Ended": "Appel terminé",
"Updated Assistant": "Assistant mis à jour",
"Inbound Call": "Appel entrant",
"Triggers when a phone call ends, with extracted variables.": "Déclenche lorsqu'un appel téléphonique se termine, avec des variables extraites.",
"Triggers when assistants are fetched or updated in your Autocalls account.": "Déclenche lorsque les assistants sont récupérés ou mis à jour dans votre compte Autocalls.",
"Triggers for variables before connecting an inbound call.": "Déclenche les variables avant de connecter un appel entrant.",
"Start Date": "Date de début",
"End Date": "Date de fin",
"Filter assistants created after this date. Example: 2024-01-15T10:30:00Z": "Filtrer les assistants créés après cette date. Exemple: 2024-01-15T10:30:00Z",
"Filter assistants created before this date. Example: 2024-12-31T23:59:59Z": "Filtrer les assistants créés avant cette date. Exemple: 2024-12-31T23:59:59Z"
}

View File

@@ -0,0 +1,48 @@
{
"Automate phone calls using our AI calling platform.": "AI通話プラットフォームを使用して通話を自動化します。",
"Create an API key in your Autocalls account and paste the value here. Get API key here -> https://app.autocalls.ai.": "あなたの自動呼び出しアカウントにAPIキーを作成し、ここに値を貼り付けます。ここでAPIキーを取得-> https://app.autocalls.ai。",
"Add lead to a campaign": "キャンペーンにリードを追加",
"Send SMS to Customer": "顧客にSMSを送信",
"Start/Stop Campaign": "キャンペーンの開始/停止",
"Make Phone Call": "電話をかける",
"Delete Lead": "リードを削除",
"Add lead to an outbound campaign, to be called by an assistant from our platform.": "アウトバウンドキャンペーンにリードを追加し、私たちのプラットフォームからアシスタントによって呼び出されます。",
"Send an SMS to a customer using a phone number from our platform.": "私たちのプラットフォームから電話番号を使用して顧客にSMSを送信します。",
"Start or stop an outbound campaign from our platform.": "私たちのプラットフォームからアウトバウンドキャンペーンを開始または停止します。",
"Call a customer by it's phone number using an assistant from our platform.": "当社のプラットフォームのアシスタントを使用して、電話番号でお客様に電話をかけます。",
"Delete a lead from a campaign.": "キャンペーンからリードを削除します。",
"Campaign": "キャンペーン",
"Customer phone number": "顧客電話番号",
"Variables": "変数",
"Allow duplicates": "重複を許可",
"Number of Secondary Contacts": "セカンダリ連絡先の数",
"Secondary Contacts": "セカンダリ連絡先",
"From phone number": "電話番号から",
"Text message": "テキスト メッセージ",
"Action": "アクション",
"Assistant": "アシスタント",
"Lead": "リード",
"Select a campaign": "キャンペーンを選択",
"Enter the phone number of the customer": "顧客の電話番号を入力",
"Variables to pass to the assistant": "アシスタントに渡す変数",
"Allow the same phone number to be added to the campaign more than once": "同じ電話番号をキャンペーンに複数回追加することを許可する",
"How many secondary contacts do you want to add?": "セカンダリコンタクトを追加しますか?",
"Add secondary contacts for this lead. Each contact can have its own phone number and variables.": "このリードの二次連絡先を追加します。各連絡先には独自の電話番号と変数を設定できます。",
"Select an SMS capable phone number to send the SMS from": "SMSを送信するSMS対応の電話番号を選択してください",
"Enter the text message to send to the customer (max 300 characters)": "顧客に送信するテキストメッセージを入力してください最大300文字",
"Select action to perform on the campaign": "キャンペーンで実行するアクションを選択",
"Select an assistant": "アシスタントを選択",
"Select a lead to delete": "削除する見込み客を選択",
"Start Campaign": "キャンペーンを開始",
"Stop Campaign": "キャンペーンの停止",
"Phone Call Ended": "通話が終了しました",
"Updated Assistant": "更新されたアシスタント",
"Inbound Call": "着信履歴",
"Triggers when a phone call ends, with extracted variables.": "電話が終了したときに、抽出された変数でトリガーします。",
"Triggers when assistants are fetched or updated in your Autocalls account.": "自動通話アカウントでアシスタントが取得または更新されたときにトリガーされます。",
"Triggers for variables before connecting an inbound call.": "受信呼び出しを接続する前に変数をトリガーします。",
"Start Date": "開始日",
"End Date": "終了日",
"Filter assistants created after this date. Example: 2024-01-15T10:30:00Z": "この日付の後に作成されたフィルターアシスタント。例: 2024-01-15T10:30:00Z",
"Filter assistants created before this date. Example: 2024-12-31T23:59:59Z": "この日付の前に作成されたフィルターアシスタント。例: 2024-12-31T23:59:59Z"
}

View File

@@ -0,0 +1,48 @@
{
"Automate phone calls using our AI calling platform.": "Automatiseer telefoongesprekken met behulp van ons AI belplatform.",
"Create an API key in your Autocalls account and paste the value here. Get API key here -> https://app.autocalls.ai.": "Maak een API-sleutel aan in je Autocalls account en plak de waarde hier. Ontvang hier een API key -> https://app.autocalls.ai.",
"Add lead to a campaign": "Voeg lead toe aan een campagne",
"Send SMS to Customer": "Stuur SMS naar de klant",
"Start/Stop Campaign": "Start/Stop campagne",
"Make Phone Call": "Telefoon bellen",
"Delete Lead": "Verwijder Lead",
"Add lead to an outbound campaign, to be called by an assistant from our platform.": "Voeg lead toe aan een uitgaande campagne, die moet worden opgeroepen door een assistent van ons platform.",
"Send an SMS to a customer using a phone number from our platform.": "Stuur een SMS naar een klant met een telefoonnummer vanaf ons platform.",
"Start or stop an outbound campaign from our platform.": "Start of stop een uitgaande campagne van ons platform.",
"Call a customer by it's phone number using an assistant from our platform.": "Bel een klant via zijn telefoonnummer met behulp van een assistent vanaf ons platform.",
"Delete a lead from a campaign.": "Verwijder een lead uit een campagne.",
"Campaign": "Campagne",
"Customer phone number": "Telefoonnummer klant",
"Variables": "Variabelen",
"Allow duplicates": "Duplicaten toestaan",
"Number of Secondary Contacts": "Aantal secundaire contacten",
"Secondary Contacts": "Secundaire contactpersonen",
"From phone number": "Van telefoonnummer",
"Text message": "Tekst bericht",
"Action": "actie",
"Assistant": "Assistent",
"Lead": "Lood",
"Select a campaign": "Selecteer een campagne",
"Enter the phone number of the customer": "Voer het telefoonnummer van de klant in",
"Variables to pass to the assistant": "Variabelen om door te geven aan de assistent",
"Allow the same phone number to be added to the campaign more than once": "Toestaan dat hetzelfde telefoonnummer meer dan één keer aan de campagne wordt toegevoegd",
"How many secondary contacts do you want to add?": "Hoeveel secundaire contacten wilt u toevoegen?",
"Add secondary contacts for this lead. Each contact can have its own phone number and variables.": "Voeg secundaire contacten toe voor deze lead. Elk contact kan een eigen telefoonnummer en variabelen hebben.",
"Select an SMS capable phone number to send the SMS from": "Selecteer een SMS nummer dat in staat is om de SMS van",
"Enter the text message to send to the customer (max 300 characters)": "Voer het tekstbericht in om naar de klant te sturen (max 300 tekens)",
"Select action to perform on the campaign": "Selecteer actie om uit te voeren op de campagne",
"Select an assistant": "Selecteer een assistent",
"Select a lead to delete": "Selecteer een lead om te verwijderen",
"Start Campaign": "Start Campagne",
"Stop Campaign": "Stoppen campagne",
"Phone Call Ended": "Telefoon gesprek beëindigd",
"Updated Assistant": "Bijgewerkte assistent",
"Inbound Call": "Inkomende oproep",
"Triggers when a phone call ends, with extracted variables.": "Activeert wanneer een telefoongesprek eindigt, met uitgepakte variabelen.",
"Triggers when assistants are fetched or updated in your Autocalls account.": "Triggers wanneer assistenten worden opgehaald of bijgewerkt in uw Autocalls account.",
"Triggers for variables before connecting an inbound call.": "Triggert voor variabelen voor het verbinden van een inkomende oproep.",
"Start Date": "Start datum",
"End Date": "Eind datum",
"Filter assistants created after this date. Example: 2024-01-15T10:30:00Z": "Filter assistenten gemaakt na deze datum. Voorbeeld: 2024-01-15T10:30:00Z",
"Filter assistants created before this date. Example: 2024-12-31T23:59:59Z": "Filter assistenten gemaakt voor deze datum. Voorbeeld: 2024-12-31T23:59:59Z"
}

View File

@@ -0,0 +1,48 @@
{
"Automate phone calls using our AI calling platform.": "Automatize as chamadas telefônicas usando nossa plataforma de chamadas AI.",
"Create an API key in your Autocalls account and paste the value here. Get API key here -> https://app.autocalls.ai.": "Crie uma chave de API na sua conta de Autocalls e cole o valor aqui. Obtenha a chave de API aqui -> https://app.autocalls.ai.",
"Add lead to a campaign": "Adicionar lead para uma campanha",
"Send SMS to Customer": "Enviar SMS para o Cliente",
"Start/Stop Campaign": "Iniciar/Parar Campanha",
"Make Phone Call": "Fazer chamada telefônica",
"Delete Lead": "Excluir Lead",
"Add lead to an outbound campaign, to be called by an assistant from our platform.": "Adicionar lead para uma campanha de saída, para ser chamada por um assistente da nossa plataforma.",
"Send an SMS to a customer using a phone number from our platform.": "Envie um SMS para um cliente usando um número de telefone de nossa plataforma.",
"Start or stop an outbound campaign from our platform.": "Comece ou pare uma campanha de saída a partir de nossa plataforma.",
"Call a customer by it's phone number using an assistant from our platform.": "Ligue para um cliente por seu número de telefone usando um assistente da nossa plataforma.",
"Delete a lead from a campaign.": "Excluir um lead de uma campanha.",
"Campaign": "Campanha",
"Customer phone number": "Telefone do cliente",
"Variables": "Variáveis",
"Allow duplicates": "Permitir duplicatas",
"Number of Secondary Contacts": "Número de contatos secundários",
"Secondary Contacts": "Contatos Secundários",
"From phone number": "De número de telefone",
"Text message": "Enviar SMS",
"Action": "Acão",
"Assistant": "Assistente",
"Lead": "Conduzir",
"Select a campaign": "Selecione a campanha",
"Enter the phone number of the customer": "Digite o número de telefone do cliente",
"Variables to pass to the assistant": "Variáveis para passar ao assistente",
"Allow the same phone number to be added to the campaign more than once": "Permitir que o mesmo número de telefone seja adicionado à campanha mais de uma vez",
"How many secondary contacts do you want to add?": "Quantos contatos secundários você deseja adicionar?",
"Add secondary contacts for this lead. Each contact can have its own phone number and variables.": "Adicione contatos secundários para esse lead. Cada contato pode ter seu próprio número de telefone e variáveis.",
"Select an SMS capable phone number to send the SMS from": "Selecione um número de telefone compatível com SMS para enviar o SMS",
"Enter the text message to send to the customer (max 300 characters)": "Digite a mensagem de texto para enviar ao cliente (máximo de 300 caracteres)",
"Select action to perform on the campaign": "Selecione a ação a ser executada na campanha",
"Select an assistant": "Selecione um assistente",
"Select a lead to delete": "Selecione um Lead para Apagar",
"Start Campaign": "Iniciar Campanha",
"Stop Campaign": "Parar De Campanha",
"Phone Call Ended": "Chamada encerrada",
"Updated Assistant": "Assistente Atualizado",
"Inbound Call": "Chamada de entrada",
"Triggers when a phone call ends, with extracted variables.": "Dispara quando uma chamada telefônica terminar, com variáveis extraídas.",
"Triggers when assistants are fetched or updated in your Autocalls account.": "Aciona quando assistentes são buscados ou atualizados na sua conta de Chamadas Automáticas.",
"Triggers for variables before connecting an inbound call.": "Dispara para variáveis antes de conectar uma chamada de entrada.",
"Start Date": "Data Inicial",
"End Date": "Data de Término",
"Filter assistants created after this date. Example: 2024-01-15T10:30:00Z": "Filtrar assistentes criados após esta data. Exemplo: 2024-01-15T10:30:00Z",
"Filter assistants created before this date. Example: 2024-12-31T23:59:59Z": "Filtrar assistentes criados antes desta data. Exemplo: 2024-12-31T23:59:59Z"
}

View File

@@ -0,0 +1,49 @@
{
"Autocalls": "Автоповороты",
"Automate phone calls using our AI calling platform.": "Автоматизировать телефонные звонки, используя нашу платформу для вызова AI.",
"Create an API key in your Autocalls account and paste the value here. Get API key here -> https://app.autocalls.ai.": "Создайте API ключ в вашей учетной записи Autocalls и вставьте сюда значение. Получить API ключ здесь -> https://app.autocalls.ai.",
"Add lead to a campaign": "Добавить провод к кампании",
"Send SMS to Customer": "Отправить SMS клиенту",
"Start/Stop Campaign": "Начать/остановить Кампанию",
"Make Phone Call": "Позвонить по телефону",
"Delete Lead": "Удалить предв. контакт",
"Add lead to an outbound campaign, to be called by an assistant from our platform.": "Добавьте к исходящей кампании, которую будет вызвать помощник с нашей платформы.",
"Send an SMS to a customer using a phone number from our platform.": "Отправьте клиенту SMS по телефону с нашей платформы.",
"Start or stop an outbound campaign from our platform.": "Начать или остановить исходящую кампанию с нашей платформы.",
"Call a customer by it's phone number using an assistant from our platform.": "Позвоните клиенту по номеру телефона, используя ассистент с нашей платформы.",
"Delete a lead from a campaign.": "Удалить свинца из кампании.",
"Campaign": "Кампания",
"Customer phone number": "Телефон клиента",
"Variables": "Переменные",
"Allow duplicates": "Разрешить дубликаты",
"Number of Secondary Contacts": "Количество дополнительных контактов",
"Secondary Contacts": "Вторичные контакты",
"From phone number": "От номера телефона",
"Text message": "Текстовое сообщение",
"Action": "Действие",
"Assistant": "Помощник",
"Lead": "Предв. контакт",
"Select a campaign": "Выберите кампанию",
"Enter the phone number of the customer": "Введите номер телефона клиента",
"Variables to pass to the assistant": "Переменные для передачи помощнику",
"Allow the same phone number to be added to the campaign more than once": "Разрешить добавление одного и того же номера телефона в кампанию более одного раза",
"How many secondary contacts do you want to add?": "Сколько дополнительных контактов вы хотите добавить?",
"Add secondary contacts for this lead. Each contact can have its own phone number and variables.": "Добавьте дополнительные контакты для этого провода. Каждый контакт может иметь свой собственный номер телефона и переменные.",
"Select an SMS capable phone number to send the SMS from": "Выберите номер телефона с поддержкой SMS для отправки SMS от",
"Enter the text message to send to the customer (max 300 characters)": "Введите текстовое сообщение для отправки клиенту (не более 300 символов)",
"Select action to perform on the campaign": "Выберите действие для выполнения кампании",
"Select an assistant": "Выберите помощника",
"Select a lead to delete": "Выберите провод для удаления",
"Start Campaign": "Начать кампанию",
"Stop Campaign": "Остановить Кампанию",
"Phone Call Ended": "Телефонный вызов завершен",
"Updated Assistant": "Обновленный помощник",
"Inbound Call": "Входящий вызов",
"Triggers when a phone call ends, with extracted variables.": "Включает при завершении телефонного вызова с извлеченными переменными.",
"Triggers when assistants are fetched or updated in your Autocalls account.": "Срабатывает при получении или обновлении ассистентов в вашем аккаунте Autocall.",
"Triggers for variables before connecting an inbound call.": "Триггеры для переменных перед подключением входящего вызова.",
"Start Date": "Дата начала",
"End Date": "Дата окончания",
"Filter assistants created after this date. Example: 2024-01-15T10:30:00Z": "Фильтр помощников, созданных после этой даты. Пример: 2024-01-15T10:30:00Z",
"Filter assistants created before this date. Example: 2024-12-31T23:59:59Z": "Фильтр помощников, созданных до этой даты. Пример: 2024-12-31T23:59:59Z"
}

View File

@@ -0,0 +1,48 @@
{
"Automate phone calls using our AI calling platform.": "Automate phone calls using our AI calling platform.",
"Create an API key in your Autocalls account and paste the value here. Get API key here -> https://app.autocalls.ai.": "Create an API key in your Autocalls account and paste the value here. Get API key here -> https://app.autocalls.ai.",
"Add lead to a campaign": "Add lead to a campaign",
"Send SMS to Customer": "Send SMS to Customer",
"Start/Stop Campaign": "Start/Stop Campaign",
"Make Phone Call": "Make Phone Call",
"Delete Lead": "Delete Lead",
"Add lead to an outbound campaign, to be called by an assistant from our platform.": "Add lead to an outbound campaign, to be called by an assistant from our platform.",
"Send an SMS to a customer using a phone number from our platform.": "Send an SMS to a customer using a phone number from our platform.",
"Start or stop an outbound campaign from our platform.": "Start or stop an outbound campaign from our platform.",
"Call a customer by it's phone number using an assistant from our platform.": "Call a customer by it's phone number using an assistant from our platform.",
"Delete a lead from a campaign.": "Delete a lead from a campaign.",
"Campaign": "Campaign",
"Customer phone number": "Customer phone number",
"Variables": "Variables",
"Allow duplicates": "Allow duplicates",
"Number of Secondary Contacts": "Number of Secondary Contacts",
"Secondary Contacts": "Secondary Contacts",
"From phone number": "From phone number",
"Text message": "Text message",
"Action": "Action",
"Assistant": "Assistant",
"Lead": "Lead",
"Select a campaign": "Select a campaign",
"Enter the phone number of the customer": "Enter the phone number of the customer",
"Variables to pass to the assistant": "Variables to pass to the assistant",
"Allow the same phone number to be added to the campaign more than once": "Allow the same phone number to be added to the campaign more than once",
"How many secondary contacts do you want to add?": "How many secondary contacts do you want to add?",
"Add secondary contacts for this lead. Each contact can have its own phone number and variables.": "Add secondary contacts for this lead. Each contact can have its own phone number and variables.",
"Select an SMS capable phone number to send the SMS from": "Select an SMS capable phone number to send the SMS from",
"Enter the text message to send to the customer (max 300 characters)": "Enter the text message to send to the customer (max 300 characters)",
"Select action to perform on the campaign": "Select action to perform on the campaign",
"Select an assistant": "Select an assistant",
"Select a lead to delete": "Select a lead to delete",
"Start Campaign": "Start Campaign",
"Stop Campaign": "Stop Campaign",
"Phone Call Ended": "Phone Call Ended",
"Updated Assistant": "Updated Assistant",
"Inbound Call": "Inbound Call",
"Triggers when a phone call ends, with extracted variables.": "Triggers when a phone call ends, with extracted variables.",
"Triggers when assistants are fetched or updated in your Autocalls account.": "Triggers when assistants are fetched or updated in your Autocalls account.",
"Triggers for variables before connecting an inbound call.": "Triggers for variables before connecting an inbound call.",
"Start Date": "Start Date",
"End Date": "End Date",
"Filter assistants created after this date. Example: 2024-01-15T10:30:00Z": "Filter assistants created after this date. Example: 2024-01-15T10:30:00Z",
"Filter assistants created before this date. Example: 2024-12-31T23:59:59Z": "Filter assistants created before this date. Example: 2024-12-31T23:59:59Z"
}

View File

@@ -0,0 +1,49 @@
{
"Autocalls": "Autocalls",
"Automate phone calls using our AI calling platform.": "Automate phone calls using our AI calling platform.",
"Create an API key in your Autocalls account and paste the value here. Get API key here -> https://app.autocalls.ai.": "Create an API key in your Autocalls account and paste the value here. Get API key here -> https://app.autocalls.ai.",
"Add lead to a campaign": "Add lead to a campaign",
"Send SMS to Customer": "Send SMS to Customer",
"Start/Stop Campaign": "Start/Stop Campaign",
"Make Phone Call": "Make Phone Call",
"Delete Lead": "Delete Lead",
"Add lead to an outbound campaign, to be called by an assistant from our platform.": "Add lead to an outbound campaign, to be called by an assistant from our platform.",
"Send an SMS to a customer using a phone number from our platform.": "Send an SMS to a customer using a phone number from our platform.",
"Start or stop an outbound campaign from our platform.": "Start or stop an outbound campaign from our platform.",
"Call a customer by it's phone number using an assistant from our platform.": "Call a customer by it's phone number using an assistant from our platform.",
"Delete a lead from a campaign.": "Delete a lead from a campaign.",
"Campaign": "Campaign",
"Customer phone number": "Customer phone number",
"Variables": "Variables",
"Allow duplicates": "Allow duplicates",
"Number of Secondary Contacts": "Number of Secondary Contacts",
"Secondary Contacts": "Secondary Contacts",
"From phone number": "From phone number",
"Text message": "Text message",
"Action": "Action",
"Assistant": "Assistant",
"Lead": "Lead",
"Select a campaign": "Select a campaign",
"Enter the phone number of the customer": "Enter the phone number of the customer",
"Variables to pass to the assistant": "Variables to pass to the assistant",
"Allow the same phone number to be added to the campaign more than once": "Allow the same phone number to be added to the campaign more than once",
"How many secondary contacts do you want to add?": "How many secondary contacts do you want to add?",
"Add secondary contacts for this lead. Each contact can have its own phone number and variables.": "Add secondary contacts for this lead. Each contact can have its own phone number and variables.",
"Select an SMS capable phone number to send the SMS from": "Select an SMS capable phone number to send the SMS from",
"Enter the text message to send to the customer (max 300 characters)": "Enter the text message to send to the customer (max 300 characters)",
"Select action to perform on the campaign": "Select action to perform on the campaign",
"Select an assistant": "Select an assistant",
"Select a lead to delete": "Select a lead to delete",
"Start Campaign": "Start Campaign",
"Stop Campaign": "Stop Campaign",
"Phone Call Ended": "Phone Call Ended",
"Updated Assistant": "Updated Assistant",
"Inbound Call": "Inbound Call",
"Triggers when a phone call ends, with extracted variables.": "Triggers when a phone call ends, with extracted variables.",
"Triggers when assistants are fetched or updated in your Autocalls account.": "Triggers when assistants are fetched or updated in your Autocalls account.",
"Triggers for variables before connecting an inbound call.": "Triggers for variables before connecting an inbound call.",
"Start Date": "Start Date",
"End Date": "End Date",
"Filter assistants created after this date. Example: 2024-01-15T10:30:00Z": "Filter assistants created after this date. Example: 2024-01-15T10:30:00Z",
"Filter assistants created before this date. Example: 2024-12-31T23:59:59Z": "Filter assistants created before this date. Example: 2024-12-31T23:59:59Z"
}

View File

@@ -0,0 +1,48 @@
{
"Automate phone calls using our AI calling platform.": "Automate phone calls using our AI calling platform.",
"Create an API key in your Autocalls account and paste the value here. Get API key here -> https://app.autocalls.ai.": "Create an API key in your Autocalls account and paste the value here. Get API key here -> https://app.autocalls.ai.",
"Add lead to a campaign": "Add lead to a campaign",
"Send SMS to Customer": "Send SMS to Customer",
"Start/Stop Campaign": "Start/Stop Campaign",
"Make Phone Call": "Make Phone Call",
"Delete Lead": "Delete Lead",
"Add lead to an outbound campaign, to be called by an assistant from our platform.": "Add lead to an outbound campaign, to be called by an assistant from our platform.",
"Send an SMS to a customer using a phone number from our platform.": "Send an SMS to a customer using a phone number from our platform.",
"Start or stop an outbound campaign from our platform.": "Start or stop an outbound campaign from our platform.",
"Call a customer by it's phone number using an assistant from our platform.": "Call a customer by it's phone number using an assistant from our platform.",
"Delete a lead from a campaign.": "Delete a lead from a campaign.",
"Campaign": "Campaign",
"Customer phone number": "Customer phone number",
"Variables": "Variables",
"Allow duplicates": "Allow duplicates",
"Number of Secondary Contacts": "Number of Secondary Contacts",
"Secondary Contacts": "Secondary Contacts",
"From phone number": "From phone number",
"Text message": "Text message",
"Action": "行 动",
"Assistant": "Assistant",
"Lead": "Lead",
"Select a campaign": "Select a campaign",
"Enter the phone number of the customer": "Enter the phone number of the customer",
"Variables to pass to the assistant": "Variables to pass to the assistant",
"Allow the same phone number to be added to the campaign more than once": "Allow the same phone number to be added to the campaign more than once",
"How many secondary contacts do you want to add?": "How many secondary contacts do you want to add?",
"Add secondary contacts for this lead. Each contact can have its own phone number and variables.": "Add secondary contacts for this lead. Each contact can have its own phone number and variables.",
"Select an SMS capable phone number to send the SMS from": "Select an SMS capable phone number to send the SMS from",
"Enter the text message to send to the customer (max 300 characters)": "Enter the text message to send to the customer (max 300 characters)",
"Select action to perform on the campaign": "Select action to perform on the campaign",
"Select an assistant": "Select an assistant",
"Select a lead to delete": "Select a lead to delete",
"Start Campaign": "Start Campaign",
"Stop Campaign": "Stop Campaign",
"Phone Call Ended": "Phone Call Ended",
"Updated Assistant": "Updated Assistant",
"Inbound Call": "Inbound Call",
"Triggers when a phone call ends, with extracted variables.": "Triggers when a phone call ends, with extracted variables.",
"Triggers when assistants are fetched or updated in your Autocalls account.": "Triggers when assistants are fetched or updated in your Autocalls account.",
"Triggers for variables before connecting an inbound call.": "Triggers for variables before connecting an inbound call.",
"Start Date": "Start Date",
"End Date": "End Date",
"Filter assistants created after this date. Example: 2024-01-15T10:30:00Z": "Filter assistants created after this date. Example: 2024-01-15T10:30:00Z",
"Filter assistants created before this date. Example: 2024-12-31T23:59:59Z": "Filter assistants created before this date. Example: 2024-12-31T23:59:59Z"
}

View File

@@ -0,0 +1,59 @@
import { createPiece, PieceAuth } from "@activepieces/pieces-framework";
import { makePhoneCall } from "./lib/actions/make-phone-call";
import { phoneCallEnded } from "./lib/triggers/phone-call-ended";
import { addLead } from "./lib/actions/add-lead";
import { sendSms } from "./lib/actions/send-sms";
import { inboundCall } from "./lib/triggers/inbound-call";
import { getAssistants } from "./lib/triggers/get-assistants";
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { campaignControl } from "./lib/actions/campaign-control";
import { deleteLead } from "./lib/actions/delete-lead";
export const baseApiUrl = 'https://app.autocalls.ai/';
export const autocallsAuth = PieceAuth.SecretText({
displayName: 'API Key',
description: 'Create an API key in your Autocalls account and paste the value here. Get API key here -> https://app.autocalls.ai.',
required: true,
validate: async ({ auth }) => {
try {
const response = await httpClient.sendRequest({
method: HttpMethod.GET,
url: baseApiUrl + 'api/user/me',
headers: {
'Authorization': `Bearer ${auth}`,
'Content-Type': 'application/json',
'Accept': 'application/json'
},
});
if (response.status === 200) {
return {
valid: true,
};
} else {
return {
valid: false,
error: 'Invalid API key or authentication failed'
};
}
} catch (error) {
return {
valid: false,
error: 'Failed to validate API key. Please check your API key and try again.'
};
}
}
})
export const autocalls = createPiece({
displayName: "Autocalls",
auth:autocallsAuth,
minimumSupportedRelease: '0.36.1',
logoUrl: "https://cdn.activepieces.com/pieces/autocalls.png",
description: "Automate phone calls using our AI calling platform.",
authors: ['Zebi15'],
actions: [addLead,sendSms,campaignControl,makePhoneCall,deleteLead],
triggers: [phoneCallEnded,getAssistants,inboundCall],
});

View File

@@ -0,0 +1,184 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { autocallsAuth, baseApiUrl } from '../..';
export const addLead = createAction({
auth:autocallsAuth,
name: 'addLead',
displayName: 'Add lead to a campaign',
description: "Add lead to an outbound campaign, to be called by an assistant from our platform.",
props: {
campaign: Property.Dropdown({
auth: autocallsAuth,
displayName: 'Campaign',
description: 'Select a campaign',
required: true,
refreshers: ['auth'],
refreshOnSearch: false,
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'Please authenticate first',
options: []
};
}
try {
const res = await httpClient.sendRequest({
method: HttpMethod.GET,
url: baseApiUrl + 'api/user/campaigns',
headers: {
Authorization: "Bearer " + auth,
'Content-Type': 'application/json',
'Accept': 'application/json'
},
});
if (res.status !== 200) {
return {
disabled: true,
placeholder: 'Error fetching campaigns',
options: [],
};
} else if (!res.body || res.body.length === 0) {
return {
disabled: true,
placeholder: 'No campaigns found. Create one first.',
options: [],
};
}
return {
options: res.body.map((campaign: any) => ({
value: campaign.id,
label: campaign.name,
})),
};
} catch (error) {
return {
disabled: true,
placeholder: 'Failed to fetch campaigns',
options: [],
};
}
}
}),
phone_number: Property.ShortText({
displayName: 'Customer phone number',
description: 'Enter the phone number of the customer',
required: true,
}),
variables: Property.Object({
displayName: 'Variables',
description: 'Variables to pass to the assistant',
required: true,
defaultValue: {
customer_name: 'John',
}
}),
allow_dupplicate: Property.Checkbox({
displayName: 'Allow duplicates',
description: 'Allow the same phone number to be added to the campaign more than once',
required: true,
defaultValue: false
}),
num_secondary_contacts: Property.Number({
displayName: 'Number of Secondary Contacts',
description: 'How many secondary contacts do you want to add?',
required: false,
defaultValue: 0,
}),
secondary_contacts: Property.DynamicProperties({
auth: autocallsAuth,
displayName: 'Secondary Contacts',
description: 'Add secondary contacts for this lead. Each contact can have its own phone number and variables.',
required: false,
refreshers: ['num_secondary_contacts'],
props: async ({ num_secondary_contacts }) => {
const contacts: any = {};
const numContacts = Number(num_secondary_contacts) || 0;
// Generate fields based on the number specified
for (let i = 1; i <= numContacts && i <= 10; i++) {
contacts[`contact_${i}_phone`] = Property.ShortText({
displayName: `Contact ${i} - Phone Number`,
description: `Phone number for secondary contact ${i}`,
required: true,
});
contacts[`contact_${i}_variables`] = Property.Object({
displayName: `Contact ${i} - Variables`,
description: `Variables for secondary contact ${i} as key-value pairs`,
required: false,
defaultValue: {
customer_name: 'John',
}
});
}
return contacts;
},
})
},
async run(context) {
if (!context.auth) {
throw new Error('Authentication is required');
}
try {
const body: any = {
campaign_id: context.propsValue['campaign'],
phone_number: context.propsValue['phone_number'],
variables: context.propsValue['variables'],
allow_dupplicate: context.propsValue['allow_dupplicate'],
};
// Add secondary contacts if provided
if (context.propsValue['secondary_contacts']) {
const secondaryContactsData = context.propsValue['secondary_contacts'] as Record<string, any>;
const numContacts = Number(context.propsValue['num_secondary_contacts']) || 0;
const secondaryContacts: any[] = [];
// Process the specified number of contacts
for (let i = 1; i <= numContacts && i <= 10; i++) {
const phoneNumber = secondaryContactsData[`contact_${i}_phone`];
const variables = secondaryContactsData[`contact_${i}_variables`];
// Only add contact if phone number is provided
if (phoneNumber && phoneNumber.trim() !== '') {
secondaryContacts.push({
phone_number: phoneNumber,
variables: variables || {
customer_name: '',
}
});
}
}
if (secondaryContacts.length > 0) {
body.secondary_contacts = secondaryContacts;
}
}
const res = await httpClient.sendRequest<string[]>({
method: HttpMethod.POST,
url: baseApiUrl + 'api/user/lead',
body: body,
headers: {
Authorization: "Bearer " + context.auth.secret_text,
'Content-Type': 'application/json',
'Accept': 'application/json'
},
});
if (res.status !== 200) {
throw new Error(`Failed to add lead: ${res.status}`);
}
return res.body;
} catch (error) {
throw new Error(`Failed to add lead: ${error}`);
}
},
});

View File

@@ -0,0 +1,79 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { autocallsAuth, baseApiUrl } from '../..';
export const campaignControl = createAction({
auth:autocallsAuth,
name: 'campaignControl',
displayName: 'Start/Stop Campaign',
description: "Start or stop an outbound campaign from our platform.",
props: {
campaign: Property.Dropdown({
auth: autocallsAuth,
displayName: 'Campaign',
description: 'Select a campaign',
required: true,
refreshers: ['auth'],
refreshOnSearch: false,
options: async ({ auth }) => {
const res = await httpClient.sendRequest({
method: HttpMethod.GET,
url: baseApiUrl + 'api/user/campaigns',
headers: {
Authorization: "Bearer " + auth?.secret_text,
'Content-Type': 'application/json',
'Accept': 'application/json'
},
});
if (res.status !== 200) {
return {
disabled: true,
placeholder: 'Error fetching campaigns',
options: [],
};
} else if (res.body.length === 0) {
return {
disabled: true,
placeholder: 'No campaigns found. Create one first.',
options: [],
};
}
return {
options: res.body.map((campaign: any) => ({
value: campaign.id,
label: campaign.name,
})),
};
}
}),
action: Property.StaticDropdown({
displayName: 'Action',
description: 'Select action to perform on the campaign',
required: true,
options: {
options: [
{ label: 'Start Campaign', value: 'start' },
{ label: 'Stop Campaign', value: 'stop' }
]
}
})
},
async run(context) {
const res = await httpClient.sendRequest<string[]>({
method: HttpMethod.POST,
url: baseApiUrl + 'api/user/campaigns/update-status',
body: {
campaign_id: context.propsValue['campaign'],
action: context.propsValue['action'],
},
headers: {
Authorization: "Bearer " + context.auth.secret_text,
'Content-Type': 'application/json',
'Accept': 'application/json'
},
});
return res.body;
},
});

View File

@@ -0,0 +1,66 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { autocallsAuth, baseApiUrl } from '../..';
export const deleteLead = createAction({
auth:autocallsAuth,
name: 'deleteLead',
displayName: 'Delete Lead',
description: "Delete a lead from a campaign.",
props: {
lead: Property.Dropdown({
auth: autocallsAuth,
displayName: 'Lead',
description: 'Select a lead to delete',
required: true,
refreshers: ['auth'],
refreshOnSearch: false,
options: async ({ auth }) => {
const res = await httpClient.sendRequest({
method: HttpMethod.GET,
url: baseApiUrl + 'api/user/leads',
headers: {
Authorization: "Bearer " + auth,
'Content-Type': 'application/json',
'Accept': 'application/json'
},
});
if (res.status !== 200) {
return {
disabled: true,
placeholder: 'Error fetching leads',
options: [],
};
} else if (res.body.length === 0) {
return {
disabled: true,
placeholder: 'No leads found.',
options: [],
};
}
return {
options: res.body.map((lead: any) => ({
value: lead.id,
label: `${lead.phone_number} - ${lead.campaign.name}`,
})),
};
}
})
},
async run(context) {
const leadId = context.propsValue['lead'];
const res = await httpClient.sendRequest<string[]>({
method: HttpMethod.DELETE,
url: baseApiUrl + 'api/user/leads/' + leadId,
headers: {
Authorization: "Bearer " + context.auth.secret_text,
'Content-Type': 'application/json',
'Accept': 'application/json'
},
});
return res.body;
},
});

View File

@@ -0,0 +1,79 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { autocallsAuth, baseApiUrl } from '../..';
export const makePhoneCall = createAction({
auth:autocallsAuth,
name: 'makePhoneCall',
displayName: 'Make Phone Call',
description: "Call a customer by it's phone number using an assistant from our platform.",
props: {
assistant: Property.Dropdown({
auth: autocallsAuth,
displayName: 'Assistant',
description: 'Select an assistant',
required: true,
refreshers: ['auth'],
refreshOnSearch: false,
options: async ({ auth }) => {
const res = await httpClient.sendRequest({
method: HttpMethod.GET,
url: baseApiUrl + 'api/user/assistants/outbound',
headers: {
Authorization: "Bearer " + auth?.secret_text,
},
});
if (res.status !== 200) {
return {
disabled: true,
placeholder: 'Error fetching assistants',
options: [],
};
} else if (res.body.length === 0) {
return {
disabled: true,
placeholder: 'No outbound assistants found. Create one first.',
options: [],
};
}
return {
options: res.body.map((assistant: any) => ({
value: assistant.id,
label: assistant.name,
})),
};
}
}),
phone_number: Property.ShortText({
displayName: 'Customer phone number',
description: 'Enter the phone number of the customer',
required: true,
}),
variables: Property.Object({
displayName: 'Variables',
description: 'Variables to pass to the assistant',
required: true,
defaultValue: {
customer_name: 'John',
}
})
},
async run(context) {
const res = await httpClient.sendRequest<string[]>({
method: HttpMethod.POST,
url: baseApiUrl + 'api/user/make_call',
body: {
assistant_id: context.propsValue['assistant'],
phone_number: context.propsValue['phone_number'],
variables: context.propsValue['variables'],
},
headers: {
Authorization: "Bearer " + context.auth.secret_text,
},
});
return res.body;
},
});

View File

@@ -0,0 +1,80 @@
import { createAction, Property} from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { autocallsAuth, baseApiUrl } from '../..';
export const sendSms = createAction({
auth:autocallsAuth,
name: 'sendSms',
displayName: 'Send SMS to Customer',
description: "Send an SMS to a customer using a phone number from our platform.",
props: {
from: Property.Dropdown({
auth: autocallsAuth,
displayName: 'From phone number',
description: 'Select an SMS capable phone number to send the SMS from',
required: true,
refreshers: ['auth'],
refreshOnSearch: false,
options: async ({ auth }) => {
const res = await httpClient.sendRequest({
method: HttpMethod.GET,
url: baseApiUrl + 'api/user/phone-numbers',
headers: {
Authorization: "Bearer " + auth?.secret_text,
'Content-Type': 'application/json',
'Accept': 'application/json'
},
});
if (res.status !== 200) {
return {
disabled: true,
placeholder: 'Error fetching phone numbers',
options: [],
};
} else if (res.body.length === 0) {
return {
disabled: true,
placeholder: 'No phone numbers found. Purchase an SMS capable phone number first.',
options: [],
};
}
return {
options: res.body.map((phoneNumber: any) => ({
value: phoneNumber.id,
label: phoneNumber.phone_number,
})),
};
}
}),
to: Property.ShortText({
displayName: 'Customer phone number',
description: 'Enter the phone number of the customer',
required: true,
}),
body: Property.ShortText({
displayName: 'Text message',
description: 'Enter the text message to send to the customer (max 300 characters)',
required: true,
}),
},
async run(context) {
const res = await httpClient.sendRequest<string[]>({
method: HttpMethod.POST,
url: baseApiUrl + 'api/user/sms',
body: {
from: context.propsValue['from'],
to: context.propsValue['to'],
body: context.propsValue['body'],
},
headers: {
Authorization: "Bearer " + context.auth.secret_text,
'Content-Type': 'application/json',
'Accept': 'application/json'
},
});
return res.body;
},
});

View File

@@ -0,0 +1,109 @@
import { createTrigger, TriggerStrategy, Property, AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework';
import { DedupeStrategy, Polling, pollingHelper, httpClient, HttpMethod } from '@activepieces/pieces-common';
import { autocallsAuth, baseApiUrl } from '../..';
import dayjs from 'dayjs';
const polling: Polling<AppConnectionValueForAuthProperty<typeof autocallsAuth>, { start?: string; end?: string }> = {
strategy: DedupeStrategy.TIMEBASED,
items: async ({ auth, propsValue }) => {
const res = await httpClient.sendRequest({
method: HttpMethod.GET,
url: baseApiUrl + 'api/user/assistants',
headers: {
Authorization: 'Bearer ' + auth.secret_text,
},
});
if (res.status !== 200) {
throw new Error(`Failed to fetch assistants. Status: ${res.status}`);
}
const assistants =
(res.body as Array<{
id: number;
created_at: string;
updated_at: string;
}>) || [];
const filteredAssistants = assistants.filter((assistant) => {
const assistantDate = assistant.created_at
? dayjs(assistant.created_at)
: dayjs(assistant.updated_at);
// Check start date filter
if (propsValue['start']) {
const startDate = dayjs(propsValue['start']);
if (assistantDate.isBefore(startDate)) {
return false;
}
}
// Check end date filter
if (propsValue['end']) {
const endDate = dayjs(propsValue['end']);
if (assistantDate.isAfter(endDate)) {
return false;
}
}
return true;
});
return filteredAssistants.map((assistant) => {
const assistantDate = assistant.created_at
? dayjs(assistant.created_at)
: dayjs(assistant.updated_at);
return {
epochMilliSeconds: assistantDate.valueOf(),
data: assistant,
};
});
},
};
export const getAssistants = createTrigger({
auth:autocallsAuth,
name: 'getAssistants',
displayName: 'Updated Assistant',
description: 'Triggers when assistants are fetched or updated in your Autocalls account.',
props: {
start: Property.DateTime({
displayName: 'Start Date',
description: 'Filter assistants created after this date. Example: 2024-01-15T10:30:00Z',
required: false,
}),
end: Property.DateTime({
displayName: 'End Date',
description: 'Filter assistants created before this date. Example: 2024-12-31T23:59:59Z',
required: false,
}),
},
sampleData: {
id: "assistant_123",
name: "Customer Support Assistant",
description: "Handles customer inquiries and support requests",
status: "active",
created_at: "2024-01-15T10:30:00Z",
updated_at: "2024-01-15T14:20:00Z",
settings: {
voice: "en-US-female",
language: "en-US",
max_duration: 300
}
},
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);
},
});

View File

@@ -0,0 +1,89 @@
import { createTrigger, Property, TriggerStrategy } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { autocallsAuth, baseApiUrl } from '../..';
export const inboundCall = createTrigger({
auth:autocallsAuth,
name: 'inboundCall',
displayName: 'Inbound Call',
description: 'Triggers for variables before connecting an inbound call.',
props: {
assistant: Property.Dropdown({
auth: autocallsAuth,
displayName: 'Assistant',
description: 'Select an assistant',
required: true,
refreshers: ['auth'],
refreshOnSearch: false,
options: async ({ auth }) => {
const res = await httpClient.sendRequest({
method: HttpMethod.GET,
url: baseApiUrl + 'api/user/assistants',
headers: {
Authorization: "Bearer " + auth?.secret_text,
'Content-Type': 'application/json',
'Accept': 'application/json'
},
});
if (res.status !== 200) {
return {
disabled: true,
placeholder: 'Error fetching assistants',
options: [],
};
} else if (res.body.length === 0) {
return {
disabled: true,
placeholder: 'No assistants found. Create one first.',
options: [],
};
}
return {
options: res.body.map((assistant: any) => ({
value: assistant.id,
label: assistant.name,
})),
};
}
}),
},
sampleData: {
customer_phone: '+16380991171',
assistant_phone: '+16380991171',
},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
await httpClient.sendRequest({
method: HttpMethod.POST,
url: baseApiUrl + 'api/user/assistants/enable-inbound-webhook',
body: {
assistant_id: context.propsValue['assistant'],
webhook_url: context.webhookUrl,
},
headers: {
Authorization: "Bearer " + context.auth.secret_text,
'Content-Type': 'application/json',
'Accept': 'application/json'
},
});
},
async onDisable(context) {
await httpClient.sendRequest({
method: HttpMethod.POST,
url: baseApiUrl + 'api/user/assistants/disable-inbound-webhook',
body: {
assistant_id: context.propsValue['assistant'],
},
headers: {
Authorization: "Bearer " + context.auth.secret_text,
'Content-Type': 'application/json',
'Accept': 'application/json'
},
});
},
async run(context) {
return [context.payload.body]
}
})

View File

@@ -0,0 +1,114 @@
import { createTrigger, Property, TriggerStrategy } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { autocallsAuth, baseApiUrl } from '../..';
export const phoneCallEnded = createTrigger({
auth:autocallsAuth,
name: 'phoneCallEnded',
displayName: 'Phone Call Ended',
description: 'Triggers when a phone call ends, with extracted variables.',
props: {
assistant: Property.Dropdown({
auth: autocallsAuth,
displayName: 'Assistant',
description: 'Select an assistant',
required: true,
refreshers: ['auth'],
refreshOnSearch: false,
options: async ({ auth }) => {
const res = await httpClient.sendRequest({
method: HttpMethod.GET,
url: baseApiUrl + 'api/user/assistants',
headers: {
Authorization: "Bearer " + auth?.secret_text,
},
});
if (res.status !== 200) {
return {
disabled: true,
placeholder: 'Error fetching assistants',
options: [],
};
} else if (res.body.length === 0) {
return {
disabled: true,
placeholder: 'No assistants found. Create one first.',
options: [],
};
}
return {
options: res.body.map((assistant: {id:number,name:string}) => ({
value: assistant.id,
label: assistant.name,
})),
};
}
}),
},
sampleData: {
customer_phone: '+16380991171',
assistant_phone: '+16380991171',
duration: 120,
status: 'completed',
extracted_variables: {
status: false,
summary: 'Call ended without clear objective being met.'
},
input_variables: {
customer_name: 'John'
},
transcript: [
{
sender: 'bot',
timestamp: 1722347063.574402,
text: 'Hi! How are you, John?'
},
{
sender: 'human',
timestamp: 1722347068.886166,
text: 'Im fine. How about you?'
},
{
sender: 'bot',
timestamp: 1722347069.76683,
text: 'Im doing well, thank you for asking.'
},
{
sender: 'bot',
timestamp: 1722347071.577889,
text: 'How can I assist you today?'
},
]
},
type: TriggerStrategy.WEBHOOK,
async onEnable(context) {
await httpClient.sendRequest({
method: HttpMethod.POST,
url: baseApiUrl + 'api/user/assistants/enable-webhook',
body: {
assistant_id: context.propsValue['assistant'],
webhook_url: context.webhookUrl,
},
headers: {
Authorization: "Bearer " + context.auth.secret_text,
},
});
},
async onDisable(context) {
await httpClient.sendRequest({
method: HttpMethod.POST,
url: baseApiUrl + 'api/user/assistants/disable-webhook',
body: {
assistant_id: context.propsValue['assistant'],
},
headers: {
Authorization: "Bearer " + context.auth.secret_text,
},
});
},
async run(context) {
return [context.payload.body]
}
})