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,58 @@
|
||||
{
|
||||
"AI-powered calling and SMS platform. Automate outbound campaigns, manage leads, and get real-time call analytics.": "Anruf- und SMS-Plattform. Automatisieren Sie ausgehende Kampagnen, verwalten Sie Leads und erhalten Echtzeit-Anrufanalysen.",
|
||||
"Create an API key in your Famulor account and paste the value here. Get API key here -> https://app.famulor.de.": "Erstelle einen API-Schlüssel in deinem Famulor-Account und füge den Wert hier ein. Hol dir API-Schlüssel hier -> https://app.famulor.de.",
|
||||
"Add Lead to Campaign": "Lead zur Kampagne hinzufügen",
|
||||
"Send SMS": "SMS senden",
|
||||
"Start/Stop Campaign": "Kampagne starten/stoppen",
|
||||
"Make Phone Call": "Telefonanruf tätigen",
|
||||
"Delete Lead": "Lead löschen",
|
||||
"Add a lead to an outbound campaign to be called by an AI assistant.": "Fügen Sie eine Lead zu einer ausgehenden Kampagne hinzu, die von einem KI-Assistenten aufgerufen werden soll.",
|
||||
"Send an SMS message using your purchased phone numbers. Costs are automatically deducted from your account.": "Senden Sie eine SMS mit Ihren gekauften Telefonnummern. Die Kosten werden automatisch von Ihrem Konto abgezogen.",
|
||||
"Start or stop an outbound calling campaign. Starting requires sufficient leads; stopping cancels ongoing calls.": "Starten oder stoppen Sie eine ausgehende Anrufkampagne. Für das Starten benötigen Sie ausreichende Anrufe; das Anhalten von laufenden Anrufen wird abgebrochen.",
|
||||
"Initiate an AI-powered phone call to a customer using a selected assistant.": "Initiieren Sie mit einem ausgewählten Assistenten einen Anruf mit AI-gestützten Anrufen an einen Kunden.",
|
||||
"⚠️ Permanently delete a lead from the system. This action cannot be undone and will abort any ongoing calls.": ":warnung: Löschen Sie dauerhaft einen Lead aus dem System. Diese Aktion kann nicht rückgängig gemacht werden und wird laufende Anrufe abbrechen.",
|
||||
"Campaign": "Kampagne",
|
||||
"Customer Phone Number": "Kunden-Telefon",
|
||||
"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",
|
||||
"Recipient Phone Number": "Telefonnummer des Empfängers",
|
||||
"Message": "Nachricht",
|
||||
"Action": "Aktion",
|
||||
"Assistant": "Assistent",
|
||||
"Lead": "Lead",
|
||||
"Select the campaign": "Wählen Sie die Kampagne",
|
||||
"Enter the phone number of the customer (E.164 format: +1234567890)": "Geben Sie die Telefonnummer des Kunden ein (E.164-Format: +1234567890)",
|
||||
"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? (Max: 10)": "Wie viele sekundäre Kontakte möchten Sie hinzufügen? (Max: 10)",
|
||||
"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 from": "Wählen Sie eine SMS-fähige Telefonnummer zum Senden aus",
|
||||
"Enter the recipient's phone number (E.164 format: +1234567890)": "Telefonnummer des Empfängers eingeben (Format 164: +1234567890)",
|
||||
"SMS message content (max 300 characters). Long messages may be split into multiple segments.": "SMS-Nachrichteninhalt (max. 300 Zeichen). Langnachrichten können in mehrere Segmente aufgeteilt werden.",
|
||||
"Select the action to perform on the campaign": "Aktion für die Kampagne auswählen",
|
||||
"Select the AI assistant to use for the call": "Wählen Sie den für den Anruf zu verwendenden KI-Assistenten",
|
||||
"Enter the phone number to call (E.164 format: +1234567890)": "Telefonnummer eingeben (Format 164: +1234567890)",
|
||||
"Variables to pass to the assistant during the call": "Variablen, die während des Anrufs an den Assistenten übergeben werden",
|
||||
"Select the lead to delete": "Lead zum Löschen auswählen",
|
||||
"Start Campaign": "Kampagne starten",
|
||||
"Stop Campaign": "Kampagne stoppen",
|
||||
"Phone Call Completed": "Telefonanruf abgeschlossen",
|
||||
"New or Updated Assistant": "Neuer oder aktualisierter Assistent",
|
||||
"Inbound Call Received": "Eingehender Anruf empfangen",
|
||||
"Triggers when a phone call is completed, providing full call transcript, extracted variables, and call metadata.": "Löst einen Anruf aus, wenn ein Anruf abgeschlossen ist, mit vollständiger Gesprächsabschrift, extrahierten Variablen und Rufen Sie Metadaten an.",
|
||||
"Triggers when AI assistants are created or updated in your Famulor account.": "Löst aus, wenn KI-Assistenten in deinem Famulor Account erstellt oder aktualisiert werden.",
|
||||
"Triggers when an inbound call is received by your AI assistant. Webhook must be enabled for the selected assistant.": "Auslöser wenn ein eingehender Anruf von Ihrem AI-Assistenten empfangen wird. Webhook muss für den ausgewählten Assistenten aktiviert sein.",
|
||||
"Assistant Type": "Assistententyp",
|
||||
"Items Per Page": "Artikel pro Seite",
|
||||
"Inbound Assistant": "Eingehender Assistent",
|
||||
"Select an assistant to receive post-call webhook notifications for": "Wählen Sie einen Assistenten aus, um nach Anruf Webhook-Benachrichtigungen für",
|
||||
"Filter assistants by type": "Assistenten nach Typ filtern",
|
||||
"Number of assistants to fetch per page (1-100, default: 10)": "Anzahl der Assistenten pro Seite (1-100, Standardwert: 10)",
|
||||
"Select an inbound assistant to receive webhook notifications for": "Wählen Sie einen eingehenden Assistenten aus, um Webhook Benachrichtigungen für",
|
||||
"All Types": "Alle Typen",
|
||||
"Inbound": "Eingehend",
|
||||
"Outbound": "Ausgehend"
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"AI-powered calling and SMS platform. Automate outbound campaigns, manage leads, and get real-time call analytics.": "Plataforma de llamadas y SMS impulsada por AI. Automatiza campañas salientes, administra clientes potenciales y consigue análisis de llamadas en tiempo real.",
|
||||
"Create an API key in your Famulor account and paste the value here. Get API key here -> https://app.famulor.de.": "Crea una clave API en tu cuenta Famulor y pega el valor aquí. Obtén la clave API aquí -> https://app.famulor.de.",
|
||||
"Add Lead to Campaign": "Añadir jefe a la campaña",
|
||||
"Send SMS": "Enviar SMS",
|
||||
"Start/Stop Campaign": "Inicio/Detener Campaña",
|
||||
"Make Phone Call": "Hacer llamada telefónica",
|
||||
"Delete Lead": "Eliminar plomo",
|
||||
"Add a lead to an outbound campaign to be called by an AI assistant.": "Añada un plomo a una campaña de salida para ser convocada por un asistente de IA.",
|
||||
"Send an SMS message using your purchased phone numbers. Costs are automatically deducted from your account.": "Envía un mensaje SMS usando los números de teléfono adquiridos. Los costos se deducirán automáticamente de tu cuenta.",
|
||||
"Start or stop an outbound calling campaign. Starting requires sufficient leads; stopping cancels ongoing calls.": "Iniciar o detener una campaña de llamadas salientes. Iniciar requiere suficientes clientes potenciales; detener cancelaciones de llamadas en curso.",
|
||||
"Initiate an AI-powered phone call to a customer using a selected assistant.": "Inicie una llamada telefónica de AI-powered a un cliente usando un asistente seleccionado.",
|
||||
"⚠️ Permanently delete a lead from the system. This action cannot be undone and will abort any ongoing calls.": "⚠️ Elimina permanentemente un plomo del sistema. Esta acción no se puede deshacer y abortará cualquier llamada en curso.",
|
||||
"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",
|
||||
"Recipient Phone Number": "Número de teléfono del destinatario",
|
||||
"Message": "Mensaje",
|
||||
"Action": "Accin",
|
||||
"Assistant": "Asistente",
|
||||
"Lead": "Plomo",
|
||||
"Select the campaign": "Seleccione la campaña",
|
||||
"Enter the phone number of the customer (E.164 format: +1234567890)": "Introduzca el número de teléfono del cliente (formato E.164: +1234567890)",
|
||||
"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? (Max: 10)": "¿Cuántos contactos secundarios quieres añadir? (Máximo: 10)",
|
||||
"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 from": "Seleccione un número de teléfono capaz de enviar desde SMS",
|
||||
"Enter the recipient's phone number (E.164 format: +1234567890)": "Introduzca el número de teléfono del destinatario (formato E.164: +1234567890)",
|
||||
"SMS message content (max 300 characters). Long messages may be split into multiple segments.": "Contenido de mensajes SMS (máximo 300 caracteres). Los mensajes largos pueden dividirse en múltiples segmentos.",
|
||||
"Select the action to perform on the campaign": "Seleccione la acción a realizar en la campaña",
|
||||
"Select the AI assistant to use for the call": "Seleccione el asistente de IA a usar para la llamada",
|
||||
"Enter the phone number to call (E.164 format: +1234567890)": "Introduzca el número de teléfono a llamar (E.164 formato: +1234567890)",
|
||||
"Variables to pass to the assistant during the call": "Variables para pasar al asistente durante la llamada",
|
||||
"Select the lead to delete": "Seleccione el cliente potencial a eliminar",
|
||||
"Start Campaign": "Iniciar campaña",
|
||||
"Stop Campaign": "Detener campaña",
|
||||
"Phone Call Completed": "Llamada telefónica completada",
|
||||
"New or Updated Assistant": "Asistente nuevo o actualizado",
|
||||
"Inbound Call Received": "Llamada entrante recibida",
|
||||
"Triggers when a phone call is completed, providing full call transcript, extracted variables, and call metadata.": "Se activa cuando se completa una llamada telefónica, proporcionando una transcripción completa de la llamada, variables extraídas y metadatos de llamada.",
|
||||
"Triggers when AI assistants are created or updated in your Famulor account.": "Activadores cuando los asistentes de IA son creados o actualizados en su cuenta de Familiar.",
|
||||
"Triggers when an inbound call is received by your AI assistant. Webhook must be enabled for the selected assistant.": "Dispara cuando tu asistente de IA recibe una llamada entrante. Webhook debe estar habilitado para el asistente seleccionado.",
|
||||
"Assistant Type": "Tipo de Asistente",
|
||||
"Items Per Page": "Elementos por página",
|
||||
"Inbound Assistant": "Asistente entrante",
|
||||
"Select an assistant to receive post-call webhook notifications for": "Seleccione un asistente para recibir notificaciones de webhook postllamada para",
|
||||
"Filter assistants by type": "Filtrar asistentes por tipo",
|
||||
"Number of assistants to fetch per page (1-100, default: 10)": "Número de asistentes a buscar por página (1-100, predeterminado: 10)",
|
||||
"Select an inbound assistant to receive webhook notifications for": "Seleccione un asistente entrante para recibir notificaciones de webhook para",
|
||||
"All Types": "Todos los tipos",
|
||||
"Inbound": "Entrante",
|
||||
"Outbound": "Salida"
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"AI-powered calling and SMS platform. Automate outbound campaigns, manage leads, and get real-time call analytics.": "Plateforme d’appels et SMS alimentée par l’IA. Automatisez les campagnes sortantes, gérez les prospects et obtenez des analyses d’appels en temps réel.",
|
||||
"Create an API key in your Famulor account and paste the value here. Get API key here -> https://app.famulor.de.": "Créez une clé API dans votre compte Famulor et collez la valeur ici. Obtenez la clé API ici -> https://app.famulor.de.",
|
||||
"Add Lead to Campaign": "Ajouter un prospect à la campagne",
|
||||
"Send SMS": "Envoyer un SMS",
|
||||
"Start/Stop Campaign": "Démarrer/Arrêter la campagne",
|
||||
"Make Phone Call": "Passer un appel téléphonique",
|
||||
"Delete Lead": "Supprimer Prospect",
|
||||
"Add a lead to an outbound campaign to be called by an AI assistant.": "Ajouter un prospect à une campagne sortante qui sera appelée par un assistant IA.",
|
||||
"Send an SMS message using your purchased phone numbers. Costs are automatically deducted from your account.": "Envoyez un SMS en utilisant les numéros de téléphone que vous avez achetés. Les frais sont automatiquement déduits de votre compte.",
|
||||
"Start or stop an outbound calling campaign. Starting requires sufficient leads; stopping cancels ongoing calls.": "Démarrez ou arrêtez une campagne d'appels sortants. Le démarrage nécessite suffisamment de prospects ; l'arrêt annule les appels en cours.",
|
||||
"Initiate an AI-powered phone call to a customer using a selected assistant.": "Lancer un appel téléphonique alimenté par l'IA à un client à l'aide d'un assistant sélectionné.",
|
||||
"⚠️ Permanently delete a lead from the system. This action cannot be undone and will abort any ongoing calls.": "⚠️ Supprimer définitivement un prospect du système. Cette action ne peut pas être annulée et annulera tous les appels en cours.",
|
||||
"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",
|
||||
"Recipient Phone Number": "Numéro de téléphone du destinataire",
|
||||
"Message": "Message",
|
||||
"Action": "Action",
|
||||
"Assistant": "Assistant",
|
||||
"Lead": "Prospect",
|
||||
"Select the campaign": "Sélectionnez la campagne",
|
||||
"Enter the phone number of the customer (E.164 format: +1234567890)": "Entrez le numéro de téléphone du client (format E.164: +1234567890)",
|
||||
"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? (Max: 10)": "Combien de contacts secondaires voulez-vous ajouter ? (Max: 10)",
|
||||
"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 from": "Sélectionnez un numéro de téléphone compatible avec les SMS à envoyer depuis",
|
||||
"Enter the recipient's phone number (E.164 format: +1234567890)": "Entrez le numéro de téléphone du destinataire (format E.164) : +1234567890)",
|
||||
"SMS message content (max 300 characters). Long messages may be split into multiple segments.": "Contenu du message SMS (max 300 caractères). Les messages longs peuvent être divisés en plusieurs segments.",
|
||||
"Select the action to perform on the campaign": "Sélectionnez l'action à effectuer sur la campagne",
|
||||
"Select the AI assistant to use for the call": "Sélectionnez l'assistant IA à utiliser pour l'appel",
|
||||
"Enter the phone number to call (E.164 format: +1234567890)": "Entrez le numéro de téléphone à appeler (format E.164: +1234567890)",
|
||||
"Variables to pass to the assistant during the call": "Variables à passer à l'assistant pendant l'appel",
|
||||
"Select the lead to delete": "Sélectionnez le prospect à supprimer",
|
||||
"Start Campaign": "Lancer la campagne",
|
||||
"Stop Campaign": "Arrêter la campagne",
|
||||
"Phone Call Completed": "Appel terminé",
|
||||
"New or Updated Assistant": "Nouvel Assistant ou mis à jour",
|
||||
"Inbound Call Received": "Appel entrant reçu",
|
||||
"Triggers when a phone call is completed, providing full call transcript, extracted variables, and call metadata.": "Déclenche quand un appel téléphonique est terminé, fournissant une transcription d'appel complet, des variables extraites et des métadonnées d'appel.",
|
||||
"Triggers when AI assistants are created or updated in your Famulor account.": "Déclenche quand les assistants AI sont créés ou mis à jour dans votre compte Famulor.",
|
||||
"Triggers when an inbound call is received by your AI assistant. Webhook must be enabled for the selected assistant.": "Déclenche lorsqu'un appel entrant est reçu par votre assistant IA. Webhook doit être activé pour l'assistant sélectionné.",
|
||||
"Assistant Type": "Type d'assistant",
|
||||
"Items Per Page": "Éléments par page",
|
||||
"Inbound Assistant": "Assistant entrant",
|
||||
"Select an assistant to receive post-call webhook notifications for": "Sélectionnez un assistant pour recevoir les notifications post-appel webhook pour",
|
||||
"Filter assistants by type": "Filtrer les assistants par type",
|
||||
"Number of assistants to fetch per page (1-100, default: 10)": "Nombre d'assistants à récupérer par page (1-100, par défaut: 10)",
|
||||
"Select an inbound assistant to receive webhook notifications for": "Sélectionnez un assistant entrant pour recevoir les notifications du webhook pour",
|
||||
"All Types": "Tous les types",
|
||||
"Inbound": "Entrants",
|
||||
"Outbound": "Sortant"
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"AI-powered calling and SMS platform. Automate outbound campaigns, manage leads, and get real-time call analytics.": "AIによる通話とSMSプラットフォーム。アウトバウンドキャンペーンの自動化、リード管理、リアルタイム通話分析の取得。",
|
||||
"Create an API key in your Famulor account and paste the value here. Get API key here -> https://app.famulor.de.": "FamulorアカウントにAPIキーを作成し、ここに値を貼り付けてください。ここでAPIキーを取得してください -> https://app.famulor.de.",
|
||||
"Add Lead to Campaign": "キャンペーンにリードを追加",
|
||||
"Send SMS": "SMSの送信",
|
||||
"Start/Stop Campaign": "キャンペーンの開始/停止",
|
||||
"Make Phone Call": "電話をかける",
|
||||
"Delete Lead": "リードを削除",
|
||||
"Add a lead to an outbound campaign to be called by an AI assistant.": "AIアシスタントによって呼び出されるアウトバウンドキャンペーンにリードを追加します。",
|
||||
"Send an SMS message using your purchased phone numbers. Costs are automatically deducted from your account.": "購入した電話番号を使用して SMS メッセージを送信します。費用は、アカウントから自動的に差し引かれます。",
|
||||
"Start or stop an outbound calling campaign. Starting requires sufficient leads; stopping cancels ongoing calls.": "発信キャンペーンを開始または停止します。開始するには十分なリードが必要です。進行中の通話をキャンセルします。",
|
||||
"Initiate an AI-powered phone call to a customer using a selected assistant.": "選択したアシスタントを使用して顧客にAI搭載の電話を開始します。",
|
||||
"⚠️ Permanently delete a lead from the system. This action cannot be undone and will abort any ongoing calls.": "⚠️ システムからリードを完全に削除します。この操作は取り消すことができず、進行中の通話を中止します。",
|
||||
"Campaign": "キャンペーン",
|
||||
"Customer Phone Number": "顧客電話番号",
|
||||
"Variables": "変数",
|
||||
"Allow Duplicates": "重複を許可",
|
||||
"Number of Secondary Contacts": "セカンダリ連絡先の数",
|
||||
"Secondary Contacts": "セカンダリ連絡先",
|
||||
"From Phone Number": "電話番号",
|
||||
"Recipient Phone Number": "受信者電話番号",
|
||||
"Message": "メッセージ",
|
||||
"Action": "アクション",
|
||||
"Assistant": "アシスタント",
|
||||
"Lead": "リード",
|
||||
"Select the campaign": "キャンペーンを選択",
|
||||
"Enter the phone number of the customer (E.164 format: +1234567890)": "顧客の電話番号を入力します (E.164形式: +1234567890)",
|
||||
"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? (Max: 10)": "追加するセカンダリコンタクトの数は? (最大: 10)",
|
||||
"Add secondary contacts for this lead. Each contact can have its own phone number and variables.": "このリードの二次連絡先を追加します。各連絡先には独自の電話番号と変数を設定できます。",
|
||||
"Select an SMS-capable phone number to send from": "送信するSMS対応の電話番号を選択してください",
|
||||
"Enter the recipient's phone number (E.164 format: +1234567890)": "受信者の電話番号を入力してください(E.164形式:+1234567890)",
|
||||
"SMS message content (max 300 characters). Long messages may be split into multiple segments.": "SMSメッセージの内容(最大300文字)。長いメッセージを複数のセグメントに分割することができます。",
|
||||
"Select the action to perform on the campaign": "キャンペーンで実行するアクションを選択してください",
|
||||
"Select the AI assistant to use for the call": "通話に使用するAIアシスタントを選択してください",
|
||||
"Enter the phone number to call (E.164 format: +1234567890)": "電話番号を入力してください (E.164形式: +1234567890)",
|
||||
"Variables to pass to the assistant during the call": "通話中にアシスタントに渡す変数",
|
||||
"Select the lead to delete": "削除するリードを選択してください",
|
||||
"Start Campaign": "キャンペーンを開始",
|
||||
"Stop Campaign": "キャンペーンの停止",
|
||||
"Phone Call Completed": "通話終了",
|
||||
"New or Updated Assistant": "新規または更新されたアシスタント",
|
||||
"Inbound Call Received": "着信を受け取りました",
|
||||
"Triggers when a phone call is completed, providing full call transcript, extracted variables, and call metadata.": "通話が完了したときにトリガーされ、完全な通話トランスクリプト、抽出された変数、およびメタデータを提供します。",
|
||||
"Triggers when AI assistants are created or updated in your Famulor account.": "AIアシスタントがFamulorアカウントで作成または更新されたときにトリガーされます。",
|
||||
"Triggers when an inbound call is received by your AI assistant. Webhook must be enabled for the selected assistant.": "着信がAIアシスタントによって受信されたときにトリガーします。選択したアシスタントでWebhookが有効になっている必要があります。",
|
||||
"Assistant Type": "アシスタントタイプ",
|
||||
"Items Per Page": "1ページあたりのアイテム",
|
||||
"Inbound Assistant": "インバウンドアシスタント",
|
||||
"Select an assistant to receive post-call webhook notifications for": "通話後の webhook 通知を受信するアシスタントを選択します。",
|
||||
"Filter assistants by type": "タイプ別フィルターアシスタント",
|
||||
"Number of assistants to fetch per page (1-100, default: 10)": "ページごとに取得するアシスタントの数(1-100、デフォルト:10)",
|
||||
"Select an inbound assistant to receive webhook notifications for": "Webhook通知を受信するには、インバウンドアシスタントを選択してください",
|
||||
"All Types": "すべてのタイプ",
|
||||
"Inbound": "Inbound",
|
||||
"Outbound": "Outbound"
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"AI-powered calling and SMS platform. Automate outbound campaigns, manage leads, and get real-time call analytics.": "AI-aangedreven oproepen en SMS-platform. Automatiseer uitgaande campagnes, beheer leads, en krijg real-time call analytics.",
|
||||
"Create an API key in your Famulor account and paste the value here. Get API key here -> https://app.famulor.de.": "Maak een API-sleutel aan in je Famulor account en plak de waarde hier. Ontvang hier de API-sleutel -> https://app.famulor.de.",
|
||||
"Add Lead to Campaign": "Voeg Lead toe aan Campagne",
|
||||
"Send SMS": "Sms verzenden",
|
||||
"Start/Stop Campaign": "Start/Stop campagne",
|
||||
"Make Phone Call": "Telefoon bellen",
|
||||
"Delete Lead": "Verwijder Lead",
|
||||
"Add a lead to an outbound campaign to be called by an AI assistant.": "Voeg een leidraad toe aan een uitgaande campagne op te roepen door een AI-assistent.",
|
||||
"Send an SMS message using your purchased phone numbers. Costs are automatically deducted from your account.": "Stuur een SMS-bericht met de gekochte telefoonnummers. De kosten worden automatisch van je account afgetrokken.",
|
||||
"Start or stop an outbound calling campaign. Starting requires sufficient leads; stopping cancels ongoing calls.": "Start of stop een uitgaande belcampagne. Opstarten vereist voldoende lood en stopt lopende oproepen te annuleren.",
|
||||
"Initiate an AI-powered phone call to a customer using a selected assistant.": "Start een AI-powered telefoongesprek naar een klant met behulp van een geselecteerde assistent.",
|
||||
"⚠️ Permanently delete a lead from the system. This action cannot be undone and will abort any ongoing calls.": "⚠️ Permanent verwijderen van een lead uit het systeem. Deze actie kan niet ongedaan worden gemaakt en zal alle lopende oproepen afbreken.",
|
||||
"Campaign": "Campagne",
|
||||
"Customer Phone Number": "Telefoonnummer klant",
|
||||
"Variables": "Variabelen",
|
||||
"Allow Duplicates": "Sta duplicaten toe",
|
||||
"Number of Secondary Contacts": "Aantal secundaire contacten",
|
||||
"Secondary Contacts": "Secundaire contactpersonen",
|
||||
"From Phone Number": "Van Telefoonnummer",
|
||||
"Recipient Phone Number": "Telefoonnummer ontvanger",
|
||||
"Message": "bericht",
|
||||
"Action": "actie",
|
||||
"Assistant": "Assistent",
|
||||
"Lead": "Lood",
|
||||
"Select the campaign": "Selecteer de campagne",
|
||||
"Enter the phone number of the customer (E.164 format: +1234567890)": "Voer het telefoonnummer van de klant (E.164 formaat: +1234567890) 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? (Max: 10)": "Hoeveel secundaire contacten wilt u toevoegen? (Max: 10)",
|
||||
"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 from": "Selecteer een telefoonnummer dat in staat is om uit te zenden",
|
||||
"Enter the recipient's phone number (E.164 format: +1234567890)": "Voer het telefoonnummer van de ontvanger in (E.164 formaat: +1234567890)",
|
||||
"SMS message content (max 300 characters). Long messages may be split into multiple segments.": "SMS berichtinhoud (max 300 tekens). Lange berichten kunnen in meerdere segmenten worden gesplitst.",
|
||||
"Select the action to perform on the campaign": "Selecteer de actie om uit te voeren op de campagne",
|
||||
"Select the AI assistant to use for the call": "Selecteer de AI-assistent om te gebruiken voor het gesprek",
|
||||
"Enter the phone number to call (E.164 format: +1234567890)": "Voer het telefoonnummer in om te bellen (E.164 formaat: +1234567890)",
|
||||
"Variables to pass to the assistant during the call": "Variabelen om door te geven aan de assistent tijdens de oproep",
|
||||
"Select the lead to delete": "Selecteer de te verwijderen lead",
|
||||
"Start Campaign": "Start Campagne",
|
||||
"Stop Campaign": "Stoppen campagne",
|
||||
"Phone Call Completed": "Telefoongesprek voltooid",
|
||||
"New or Updated Assistant": "Nieuwe of bijgewerkte assistent",
|
||||
"Inbound Call Received": "Binnenkomende oproep ontvangen",
|
||||
"Triggers when a phone call is completed, providing full call transcript, extracted variables, and call metadata.": "Triggers wanneer een telefoongesprek is voltooid, geeft volledige transcriptie van gesprekken, uitgepakte variabelen en oproep metadata.",
|
||||
"Triggers when AI assistants are created or updated in your Famulor account.": "Triggers wanneer AI assistenten worden aangemaakt of bijgewerkt in je Famulor account.",
|
||||
"Triggers when an inbound call is received by your AI assistant. Webhook must be enabled for the selected assistant.": "Triggers wanneer een inkomende oproep wordt ontvangen door uw AI-assistent. Webhook moet worden ingeschakeld voor de geselecteerde assistent.",
|
||||
"Assistant Type": "Type assistent",
|
||||
"Items Per Page": "Items Per pagina",
|
||||
"Inbound Assistant": "Inkomende assistent",
|
||||
"Select an assistant to receive post-call webhook notifications for": "Selecteer een assistent om na oproep webhook meldingen te ontvangen voor",
|
||||
"Filter assistants by type": "Filter assistenten op type",
|
||||
"Number of assistants to fetch per page (1-100, default: 10)": "Aantal medewerkers om per pagina op te halen (1-100, standaard: 10)",
|
||||
"Select an inbound assistant to receive webhook notifications for": "Selecteer een inkomende assistent om webhook meldingen te ontvangen voor",
|
||||
"All Types": "Alle typen",
|
||||
"Inbound": "Inkomende",
|
||||
"Outbound": "Uitgaande"
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"AI-powered calling and SMS platform. Automate outbound campaigns, manage leads, and get real-time call analytics.": "Ativar chamadas e enviar SMS. Automatize campanhas de saída, gerencie líderes e obtenha análise de chamadas em tempo real.",
|
||||
"Create an API key in your Famulor account and paste the value here. Get API key here -> https://app.famulor.de.": "Crie uma chave de API na sua conta Famulor e cole o valor aqui. Obtenha a chave de API aqui -> https://app.famulor.de.",
|
||||
"Add Lead to Campaign": "Adicionar Lead para Campanha",
|
||||
"Send SMS": "Enviar SMS",
|
||||
"Start/Stop Campaign": "Iniciar/Parar Campanha",
|
||||
"Make Phone Call": "Fazer chamada telefônica",
|
||||
"Delete Lead": "Excluir Lead",
|
||||
"Add a lead to an outbound campaign to be called by an AI assistant.": "Adicione um lead a uma campanha de saída para ser chamada por um assistente de IA.",
|
||||
"Send an SMS message using your purchased phone numbers. Costs are automatically deducted from your account.": "Enviar uma mensagem SMS usando os números de telefone comprados. Os custos são automaticamente deduzidos da sua conta.",
|
||||
"Start or stop an outbound calling campaign. Starting requires sufficient leads; stopping cancels ongoing calls.": "Iniciar ou interromper uma campanha de chamada de saída. Iniciar requer oportunidades suficientes; interromper cancela chamadas em andamento.",
|
||||
"Initiate an AI-powered phone call to a customer using a selected assistant.": "Inicie uma chamada para um cliente usando um assistente selecionado.",
|
||||
"⚠️ Permanently delete a lead from the system. This action cannot be undone and will abort any ongoing calls.": "⚠️ Exclua permanentemente um lead do sistema. Esta ação não pode ser desfeita e abortará todas as chamadas em andamento.",
|
||||
"Campaign": "Campanha",
|
||||
"Customer Phone Number": "Número de 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",
|
||||
"Recipient Phone Number": "Número de telefone destinatário",
|
||||
"Message": "mensagem",
|
||||
"Action": "Acão",
|
||||
"Assistant": "Assistente",
|
||||
"Lead": "Conduzir",
|
||||
"Select the campaign": "Selecione a campanha",
|
||||
"Enter the phone number of the customer (E.164 format: +1234567890)": "Digite o número de telefone do cliente (formato 164: +1234567890)",
|
||||
"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? (Max: 10)": "Quantos contatos secundários você deseja adicionar? (Max: 10)",
|
||||
"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 from": "Selecione um número de telefone compatível com SMS para enviar",
|
||||
"Enter the recipient's phone number (E.164 format: +1234567890)": "Digite o número de telefone do destinatário (formato 164: +1234567890)",
|
||||
"SMS message content (max 300 characters). Long messages may be split into multiple segments.": "O conteúdo da mensagem SMS (máx. 300 caracteres). Mensagens longas podem ser divididas em vários segmentos.",
|
||||
"Select the action to perform on the campaign": "Selecione a ação a ser executada na campanha",
|
||||
"Select the AI assistant to use for the call": "Selecione o assistente de IA para usar a chamada",
|
||||
"Enter the phone number to call (E.164 format: +1234567890)": "Digite o número de telefone para ligar (formato 164: +1234567890)",
|
||||
"Variables to pass to the assistant during the call": "Variáveis para passar para o assistente durante a chamada",
|
||||
"Select the lead to delete": "Selecione o Lead para Apagar",
|
||||
"Start Campaign": "Iniciar Campanha",
|
||||
"Stop Campaign": "Parar De Campanha",
|
||||
"Phone Call Completed": "Chamada Telefônica Concluída",
|
||||
"New or Updated Assistant": "Assistente novo ou atualizado",
|
||||
"Inbound Call Received": "Chamada de entrada recebida",
|
||||
"Triggers when a phone call is completed, providing full call transcript, extracted variables, and call metadata.": "Aciona quando uma chamada é concluída, fornecendo transcrição de chamada completa, variáveis extraídas e metadados de chamada.",
|
||||
"Triggers when AI assistants are created or updated in your Famulor account.": "Aciona quando assistentes de IA são criados ou atualizados na sua conta de Famulor.",
|
||||
"Triggers when an inbound call is received by your AI assistant. Webhook must be enabled for the selected assistant.": "Aciona quando uma chamada recebida pelo seu assistente de Inteligência Artificial. Webhook deve ser ativado para o assistente selecionado.",
|
||||
"Assistant Type": "Tipo de Assistente",
|
||||
"Items Per Page": "Itens por página",
|
||||
"Inbound Assistant": "Assistente de Entrada",
|
||||
"Select an assistant to receive post-call webhook notifications for": "Selecione um assistente para receber notificações pós-chamada para",
|
||||
"Filter assistants by type": "Filtrar assistentes por tipo",
|
||||
"Number of assistants to fetch per page (1-100, default: 10)": "Número de assistentes a buscar por página (1-100, padrão: 10)",
|
||||
"Select an inbound assistant to receive webhook notifications for": "Selecionar um assistente de entrada para receber notificações de webhook",
|
||||
"All Types": "Todos os tipos",
|
||||
"Inbound": "Entrada",
|
||||
"Outbound": "Saída"
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"Famulor": "Famulor",
|
||||
"Automate phone calls using our AI calling platform.": "Автоматизировать телефонные звонки, используя нашу платформу для вызова AI.",
|
||||
"Create an API key in your Famulor account and paste the value here. Get API key here -> https://app.famulor.ai.": "Создайте API ключ в вашей учетной записи Famulor и вставьте сюда значение. Получить API ключ здесь -> https://app.famulor.de.",
|
||||
"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 Famulor account.": "Срабатывает при получении или обновлении ассистентов в вашем аккаунте Famulor.",
|
||||
"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"
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"AI-powered calling and SMS platform. Automate outbound campaigns, manage leads, and get real-time call analytics.": "AI-powered calling and SMS platform. Automate outbound campaigns, manage leads, and get real-time call analytics.",
|
||||
"Create an API key in your Famulor account and paste the value here. Get API key here -> https://app.famulor.de.": "Create an API key in your Famulor account and paste the value here. Get API key here -> https://app.famulor.de.",
|
||||
"Add Lead to Campaign": "Add Lead to Campaign",
|
||||
"Send SMS": "Send SMS",
|
||||
"Start/Stop Campaign": "Start/Stop Campaign",
|
||||
"Make Phone Call": "Make Phone Call",
|
||||
"Delete Lead": "Delete Lead",
|
||||
"Add a lead to an outbound campaign to be called by an AI assistant.": "Add a lead to an outbound campaign to be called by an AI assistant.",
|
||||
"Send an SMS message using your purchased phone numbers. Costs are automatically deducted from your account.": "Send an SMS message using your purchased phone numbers. Costs are automatically deducted from your account.",
|
||||
"Start or stop an outbound calling campaign. Starting requires sufficient leads; stopping cancels ongoing calls.": "Start or stop an outbound calling campaign. Starting requires sufficient leads; stopping cancels ongoing calls.",
|
||||
"Initiate an AI-powered phone call to a customer using a selected assistant.": "Initiate an AI-powered phone call to a customer using a selected assistant.",
|
||||
"⚠️ Permanently delete a lead from the system. This action cannot be undone and will abort any ongoing calls.": "⚠️ Permanently delete a lead from the system. This action cannot be undone and will abort any ongoing calls.",
|
||||
"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",
|
||||
"Recipient Phone Number": "Recipient Phone Number",
|
||||
"Message": "Message",
|
||||
"Action": "Action",
|
||||
"Assistant": "Assistant",
|
||||
"Lead": "Lead",
|
||||
"Select the campaign": "Select the campaign",
|
||||
"Enter the phone number of the customer (E.164 format: +1234567890)": "Enter the phone number of the customer (E.164 format: +1234567890)",
|
||||
"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? (Max: 10)": "How many secondary contacts do you want to add? (Max: 10)",
|
||||
"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 from": "Select an SMS-capable phone number to send from",
|
||||
"Enter the recipient's phone number (E.164 format: +1234567890)": "Enter the recipient's phone number (E.164 format: +1234567890)",
|
||||
"SMS message content (max 300 characters). Long messages may be split into multiple segments.": "SMS message content (max 300 characters). Long messages may be split into multiple segments.",
|
||||
"Select the action to perform on the campaign": "Select the action to perform on the campaign",
|
||||
"Select the AI assistant to use for the call": "Select the AI assistant to use for the call",
|
||||
"Enter the phone number to call (E.164 format: +1234567890)": "Enter the phone number to call (E.164 format: +1234567890)",
|
||||
"Variables to pass to the assistant during the call": "Variables to pass to the assistant during the call",
|
||||
"Select the lead to delete": "Select the lead to delete",
|
||||
"Start Campaign": "Start Campaign",
|
||||
"Stop Campaign": "Stop Campaign",
|
||||
"Phone Call Completed": "Phone Call Completed",
|
||||
"New or Updated Assistant": "New or Updated Assistant",
|
||||
"Inbound Call Received": "Inbound Call Received",
|
||||
"Triggers when a phone call is completed, providing full call transcript, extracted variables, and call metadata.": "Triggers when a phone call is completed, providing full call transcript, extracted variables, and call metadata.",
|
||||
"Triggers when AI assistants are created or updated in your Famulor account.": "Triggers when AI assistants are created or updated in your Famulor account.",
|
||||
"Triggers when an inbound call is received by your AI assistant. Webhook must be enabled for the selected assistant.": "Triggers when an inbound call is received by your AI assistant. Webhook must be enabled for the selected assistant.",
|
||||
"Assistant Type": "Assistant Type",
|
||||
"Items Per Page": "Items Per Page",
|
||||
"Inbound Assistant": "Inbound Assistant",
|
||||
"Select an assistant to receive post-call webhook notifications for": "Select an assistant to receive post-call webhook notifications for",
|
||||
"Filter assistants by type": "Filter assistants by type",
|
||||
"Number of assistants to fetch per page (1-100, default: 10)": "Number of assistants to fetch per page (1-100, default: 10)",
|
||||
"Select an inbound assistant to receive webhook notifications for": "Select an inbound assistant to receive webhook notifications for",
|
||||
"All Types": "All Types",
|
||||
"Inbound": "Inbound",
|
||||
"Outbound": "Outbound"
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"Famulor": "Famulor",
|
||||
"Automate phone calls using our AI calling platform.": "Automate phone calls using our AI calling platform.",
|
||||
"Create an API key in your Famulor account and paste the value here. Get API key here -> https://app.famulor.ai.": "Create an API key in your Famulor account and paste the value here. Get API key here -> https://app.famulor.de.",
|
||||
"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 Famulor account.": "Triggers when assistants are fetched or updated in your Famulor 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"
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"AI-powered calling and SMS platform. Automate outbound campaigns, manage leads, and get real-time call analytics.": "AI-powered calling and SMS platform. Automate outbound campaigns, manage leads, and get real-time call analytics.",
|
||||
"Create an API key in your Famulor account and paste the value here. Get API key here -> https://app.famulor.de.": "Create an API key in your Famulor account and paste the value here. Get API key here -> https://app.famulor.de.",
|
||||
"Add Lead to Campaign": "Add Lead to Campaign",
|
||||
"Send SMS": "Send SMS",
|
||||
"Start/Stop Campaign": "Start/Stop Campaign",
|
||||
"Make Phone Call": "Make Phone Call",
|
||||
"Delete Lead": "Delete Lead",
|
||||
"Add a lead to an outbound campaign to be called by an AI assistant.": "Add a lead to an outbound campaign to be called by an AI assistant.",
|
||||
"Send an SMS message using your purchased phone numbers. Costs are automatically deducted from your account.": "Send an SMS message using your purchased phone numbers. Costs are automatically deducted from your account.",
|
||||
"Start or stop an outbound calling campaign. Starting requires sufficient leads; stopping cancels ongoing calls.": "Start or stop an outbound calling campaign. Starting requires sufficient leads; stopping cancels ongoing calls.",
|
||||
"Initiate an AI-powered phone call to a customer using a selected assistant.": "Initiate an AI-powered phone call to a customer using a selected assistant.",
|
||||
"⚠️ Permanently delete a lead from the system. This action cannot be undone and will abort any ongoing calls.": "⚠️ Permanently delete a lead from the system. This action cannot be undone and will abort any ongoing calls.",
|
||||
"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",
|
||||
"Recipient Phone Number": "Recipient Phone Number",
|
||||
"Message": "Message",
|
||||
"Action": "行 动",
|
||||
"Assistant": "Assistant",
|
||||
"Lead": "Lead",
|
||||
"Select the campaign": "Select the campaign",
|
||||
"Enter the phone number of the customer (E.164 format: +1234567890)": "Enter the phone number of the customer (E.164 format: +1234567890)",
|
||||
"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? (Max: 10)": "How many secondary contacts do you want to add? (Max: 10)",
|
||||
"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 from": "Select an SMS-capable phone number to send from",
|
||||
"Enter the recipient's phone number (E.164 format: +1234567890)": "Enter the recipient's phone number (E.164 format: +1234567890)",
|
||||
"SMS message content (max 300 characters). Long messages may be split into multiple segments.": "SMS message content (max 300 characters). Long messages may be split into multiple segments.",
|
||||
"Select the action to perform on the campaign": "Select the action to perform on the campaign",
|
||||
"Select the AI assistant to use for the call": "Select the AI assistant to use for the call",
|
||||
"Enter the phone number to call (E.164 format: +1234567890)": "Enter the phone number to call (E.164 format: +1234567890)",
|
||||
"Variables to pass to the assistant during the call": "Variables to pass to the assistant during the call",
|
||||
"Select the lead to delete": "Select the lead to delete",
|
||||
"Start Campaign": "Start Campaign",
|
||||
"Stop Campaign": "Stop Campaign",
|
||||
"Phone Call Completed": "Phone Call Completed",
|
||||
"New or Updated Assistant": "New or Updated Assistant",
|
||||
"Inbound Call Received": "Inbound Call Received",
|
||||
"Triggers when a phone call is completed, providing full call transcript, extracted variables, and call metadata.": "Triggers when a phone call is completed, providing full call transcript, extracted variables, and call metadata.",
|
||||
"Triggers when AI assistants are created or updated in your Famulor account.": "Triggers when AI assistants are created or updated in your Famulor account.",
|
||||
"Triggers when an inbound call is received by your AI assistant. Webhook must be enabled for the selected assistant.": "Triggers when an inbound call is received by your AI assistant. Webhook must be enabled for the selected assistant.",
|
||||
"Assistant Type": "Assistant Type",
|
||||
"Items Per Page": "Items Per Page",
|
||||
"Inbound Assistant": "Inbound Assistant",
|
||||
"Select an assistant to receive post-call webhook notifications for": "Select an assistant to receive post-call webhook notifications for",
|
||||
"Filter assistants by type": "Filter assistants by type",
|
||||
"Number of assistants to fetch per page (1-100, default: 10)": "Number of assistants to fetch per page (1-100, default: 10)",
|
||||
"Select an inbound assistant to receive webhook notifications for": "Select an inbound assistant to receive webhook notifications for",
|
||||
"All Types": "All Types",
|
||||
"Inbound": "Inbound",
|
||||
"Outbound": "Outbound"
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
import { createPiece, PieceAuth } from "@activepieces/pieces-framework";
|
||||
import { PieceCategory } from '@activepieces/shared';
|
||||
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 { baseApiUrl } from './lib/common';
|
||||
import { campaignControl } from "./lib/actions/campaign-control";
|
||||
import { deleteLead } from "./lib/actions/delete-lead";
|
||||
|
||||
|
||||
export const famulorAuth = PieceAuth.SecretText({
|
||||
displayName: 'API Key',
|
||||
description: 'Create an API key in your Famulor account and paste the value here. Get API key here -> https://app.famulor.de.',
|
||||
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 famulor = createPiece({
|
||||
displayName: "Famulor AI - Voice Agent",
|
||||
auth:famulorAuth,
|
||||
minimumSupportedRelease: '0.36.1',
|
||||
logoUrl: "https://cdn.activepieces.com/pieces/famulor.png",
|
||||
description: "AI-powered calling and SMS platform. Automate outbound campaigns, manage leads, and get real-time call analytics.",
|
||||
authors: ['bekservice', 'onyedikachi-david'],
|
||||
categories: [PieceCategory.SALES_AND_CRM],
|
||||
actions: [addLead,sendSms,campaignControl,makePhoneCall,deleteLead],
|
||||
triggers: [phoneCallEnded,getAssistants,inboundCall],
|
||||
});
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { famulorAuth } from '../..';
|
||||
import { famulorCommon } from '../common';
|
||||
|
||||
export const addLead = createAction({
|
||||
auth: famulorAuth,
|
||||
name: 'addLead',
|
||||
displayName: 'Add Lead to Campaign',
|
||||
description: 'Add a lead to an outbound campaign to be called by an AI assistant.',
|
||||
props: famulorCommon.addLeadProperties(),
|
||||
async run({ auth, propsValue }) {
|
||||
await propsValidation.validateZod(propsValue, famulorCommon.addLeadSchema);
|
||||
|
||||
// Process secondary contacts if provided
|
||||
let secondaryContacts: Array<{ phone_number: string; variables?: Record<string, any> }> | undefined;
|
||||
|
||||
if (propsValue.secondary_contacts && propsValue.num_secondary_contacts) {
|
||||
const secondaryContactsData = propsValue.secondary_contacts as Record<string, any>;
|
||||
const numContacts = Math.min(Number(propsValue.num_secondary_contacts) || 0, 10);
|
||||
const contacts: Array<{ phone_number: string; variables?: Record<string, any> }> = [];
|
||||
|
||||
for (let i = 1; i <= numContacts; i++) {
|
||||
const phoneNumber = secondaryContactsData[`contact_${i}_phone`];
|
||||
const variables = secondaryContactsData[`contact_${i}_variables`];
|
||||
|
||||
if (phoneNumber && phoneNumber.trim() !== '') {
|
||||
contacts.push({
|
||||
phone_number: phoneNumber,
|
||||
variables: variables || { customer_name: '' }
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (contacts.length > 0) {
|
||||
secondaryContacts = contacts;
|
||||
}
|
||||
}
|
||||
|
||||
return await famulorCommon.addLead({
|
||||
auth: auth.secret_text,
|
||||
campaign_id: propsValue.campaign,
|
||||
phone_number: propsValue.phone_number!,
|
||||
variable: propsValue.variables,
|
||||
allow_dupplicate: propsValue.allow_dupplicate,
|
||||
secondary_contacts: secondaryContacts,
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,21 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { famulorAuth } from '../..';
|
||||
import { famulorCommon } from '../common';
|
||||
|
||||
export const campaignControl = createAction({
|
||||
auth: famulorAuth,
|
||||
name: 'campaignControl',
|
||||
displayName: 'Start/Stop Campaign',
|
||||
description: 'Start or stop an outbound calling campaign. Starting requires sufficient leads; stopping cancels ongoing calls.',
|
||||
props: famulorCommon.campaignControlProperties(),
|
||||
async run({ auth, propsValue }) {
|
||||
await propsValidation.validateZod(propsValue, famulorCommon.campaignControlSchema);
|
||||
|
||||
return await famulorCommon.campaignControl({
|
||||
auth: auth.secret_text,
|
||||
campaign_id: propsValue.campaign,
|
||||
action: propsValue.action as 'start' | 'stop',
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,20 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { famulorAuth } from '../..';
|
||||
import { famulorCommon } from '../common';
|
||||
|
||||
export const deleteLead = createAction({
|
||||
auth: famulorAuth,
|
||||
name: 'deleteLead',
|
||||
displayName: 'Delete Lead',
|
||||
description: '⚠️ Permanently delete a lead from the system. This action cannot be undone and will abort any ongoing calls.',
|
||||
props: famulorCommon.deleteLeadProperties(),
|
||||
async run({ auth, propsValue }) {
|
||||
await propsValidation.validateZod(propsValue, famulorCommon.deleteLeadSchema);
|
||||
|
||||
return await famulorCommon.deleteLead({
|
||||
auth: auth.secret_text,
|
||||
lead_id: propsValue.lead_id,
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,22 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { famulorAuth } from '../..';
|
||||
import { famulorCommon } from '../common';
|
||||
|
||||
export const makePhoneCall = createAction({
|
||||
auth: famulorAuth,
|
||||
name: 'makePhoneCall',
|
||||
displayName: 'Make Phone Call',
|
||||
description: 'Initiate an AI-powered phone call to a customer using a selected assistant.',
|
||||
props: famulorCommon.makePhoneCallProperties(),
|
||||
async run({ auth, propsValue }) {
|
||||
await propsValidation.validateZod(propsValue, famulorCommon.makePhoneCallSchema);
|
||||
|
||||
return await famulorCommon.makePhoneCall({
|
||||
auth: auth.secret_text,
|
||||
assistant_id: propsValue.assistant_id as number,
|
||||
phone_number: propsValue.phone_number!,
|
||||
variable: propsValue.variable,
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,22 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { famulorAuth } from '../..';
|
||||
import { famulorCommon } from '../common';
|
||||
|
||||
export const sendSms = createAction({
|
||||
auth: famulorAuth,
|
||||
name: 'sendSms',
|
||||
displayName: 'Send SMS',
|
||||
description: 'Send an SMS message using your purchased phone numbers. Costs are automatically deducted from your account.',
|
||||
props: famulorCommon.sendSmsProperties(),
|
||||
async run({ auth, propsValue }) {
|
||||
await propsValidation.validateZod(propsValue, famulorCommon.sendSmsSchema);
|
||||
|
||||
return await famulorCommon.sendSms({
|
||||
auth: auth.secret_text,
|
||||
from: propsValue.from as number,
|
||||
to: propsValue.to!,
|
||||
bodysuit: propsValue.bodysuit!,
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,271 @@
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import * as properties from './properties';
|
||||
import * as schemas from './schemas';
|
||||
import {
|
||||
ListCampaignsResponse,
|
||||
AddLeadParams,
|
||||
SendSmsParams,
|
||||
MakePhoneCallParams,
|
||||
CampaignControlParams,
|
||||
DeleteLeadParams,
|
||||
LeadResponse
|
||||
} from './types';
|
||||
|
||||
export const baseApiUrl = 'https://app.famulor.de/';
|
||||
|
||||
export const famulorCommon = {
|
||||
baseHeaders: (auth: string) => ({
|
||||
'Authorization': `Bearer ${auth}`,
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
}),
|
||||
|
||||
// Properties
|
||||
addLeadProperties: properties.addLead,
|
||||
sendSmsProperties: properties.sendSms,
|
||||
makePhoneCallProperties: properties.makePhoneCall,
|
||||
campaignControlProperties: properties.campaignControl,
|
||||
deleteLeadProperties: properties.deleteLead,
|
||||
|
||||
// Schemas
|
||||
addLeadSchema: schemas.addLead,
|
||||
sendSmsSchema: schemas.sendSms,
|
||||
makePhoneCallSchema: schemas.makePhoneCall,
|
||||
campaignControlSchema: schemas.campaignControl,
|
||||
deleteLeadSchema: schemas.deleteLead,
|
||||
|
||||
// Methods
|
||||
listAllAssistants: async ({ auth, per_page = 10, page = 1, type }: { auth: string; per_page?: number; page?: number; type?: string }) => {
|
||||
const queryParams: Record<string, string> = {
|
||||
per_page: per_page.toString(),
|
||||
page: page.toString(),
|
||||
};
|
||||
|
||||
if (type && type !== '') {
|
||||
queryParams['type'] = type;
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: `${baseApiUrl}api/user/assistants/get`,
|
||||
headers: famulorCommon.baseHeaders(auth),
|
||||
queryParams,
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to fetch assistants: ${response.status}`);
|
||||
}
|
||||
|
||||
return response.body;
|
||||
},
|
||||
|
||||
listPhoneNumbers: async ({ auth }: { auth: string }) => {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: `${baseApiUrl}api/user/assistants/phone-numbers`,
|
||||
headers: famulorCommon.baseHeaders(auth),
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to fetch phone numbers: ${response.status}`);
|
||||
}
|
||||
|
||||
return response.body || [];
|
||||
},
|
||||
|
||||
listAssistants: async ({ auth }: { auth: string }) => {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: `${baseApiUrl}api/user/assistants/outbound`,
|
||||
headers: famulorCommon.baseHeaders(auth),
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to fetch assistants: ${response.status}`);
|
||||
}
|
||||
|
||||
return response.body || [];
|
||||
},
|
||||
|
||||
listLeads: async ({ auth }: { auth: string }) => {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: `${baseApiUrl}api/user/leads`,
|
||||
headers: famulorCommon.baseHeaders(auth),
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to fetch leads: ${response.status}`);
|
||||
}
|
||||
|
||||
return response.body.leads || response.body;
|
||||
},
|
||||
|
||||
listCampaigns: async ({ auth }: { auth: string }) => {
|
||||
const response = await httpClient.sendRequest<ListCampaignsResponse>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${baseApiUrl}api/user/campaigns`,
|
||||
headers: famulorCommon.baseHeaders(auth),
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to fetch campaigns: ${response.status}`);
|
||||
}
|
||||
|
||||
return response.body.campaigns || response.body;
|
||||
},
|
||||
|
||||
addLead: async (params: AddLeadParams): Promise<LeadResponse> => {
|
||||
const { auth, ...body } = params;
|
||||
|
||||
const response = await httpClient.sendRequest<LeadResponse>({
|
||||
method: HttpMethod.POST,
|
||||
url: `${baseApiUrl}api/user/lead`,
|
||||
headers: famulorCommon.baseHeaders(auth),
|
||||
body,
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to add lead: ${response.status}`);
|
||||
}
|
||||
|
||||
return response.body;
|
||||
},
|
||||
|
||||
sendSms: async (params: SendSmsParams) => {
|
||||
const { auth, ...body } = params;
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${baseApiUrl}api/user/sms`,
|
||||
headers: famulorCommon.baseHeaders(auth),
|
||||
body,
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to send SMS: ${response.status}`);
|
||||
}
|
||||
|
||||
return response.body;
|
||||
},
|
||||
|
||||
makePhoneCall: async (params: MakePhoneCallParams) => {
|
||||
const { auth, ...body } = params;
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${baseApiUrl}api/user/make_call`,
|
||||
headers: famulorCommon.baseHeaders(auth),
|
||||
body,
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to make phone call: ${response.status}`);
|
||||
}
|
||||
|
||||
return response.body;
|
||||
},
|
||||
|
||||
campaignControl: async (params: CampaignControlParams) => {
|
||||
const { auth, ...body } = params;
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${baseApiUrl}api/user/campaigns/update-status`,
|
||||
headers: famulorCommon.baseHeaders(auth),
|
||||
body,
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to control campaign: ${response.status}`);
|
||||
}
|
||||
|
||||
return response.body;
|
||||
},
|
||||
|
||||
deleteLead: async (params: DeleteLeadParams) => {
|
||||
const { auth, lead_id } = params;
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.DELETE,
|
||||
url: `${baseApiUrl}api/user/leads/${lead_id}`,
|
||||
headers: famulorCommon.baseHeaders(auth),
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to delete lead: ${response.status}`);
|
||||
}
|
||||
|
||||
return response.body;
|
||||
},
|
||||
|
||||
enableInboundWebhook: async ({ auth, assistant_id, webhook_url }: { auth: string; assistant_id: number; webhook_url: string }) => {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${baseApiUrl}api/user/assistants/enable-inbound-webhook`,
|
||||
headers: famulorCommon.baseHeaders(auth),
|
||||
body: {
|
||||
assistant_id,
|
||||
webhook_url,
|
||||
},
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to enable inbound webhook: ${response.status}`);
|
||||
}
|
||||
|
||||
return response.body;
|
||||
},
|
||||
|
||||
disableInboundWebhook: async ({ auth, assistant_id }: { auth: string; assistant_id: number }) => {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${baseApiUrl}api/user/assistants/disable-inbound-webhook`,
|
||||
headers: famulorCommon.baseHeaders(auth),
|
||||
body: {
|
||||
assistant_id,
|
||||
},
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to disable inbound webhook: ${response.status}`);
|
||||
}
|
||||
|
||||
return response.body;
|
||||
},
|
||||
|
||||
enablePostCallWebhook: async ({ auth, assistant_id, webhook_url }: { auth: string; assistant_id: number; webhook_url: string }) => {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${baseApiUrl}api/user/assistants/enable-webhook`,
|
||||
headers: famulorCommon.baseHeaders(auth),
|
||||
body: {
|
||||
assistant_id,
|
||||
webhook_url,
|
||||
},
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to enable post-call webhook: ${response.status}`);
|
||||
}
|
||||
|
||||
return response.body;
|
||||
},
|
||||
|
||||
disablePostCallWebhook: async ({ auth, assistant_id }: { auth: string; assistant_id: number }) => {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${baseApiUrl}api/user/assistants/disable-webhook`,
|
||||
headers: famulorCommon.baseHeaders(auth),
|
||||
body: {
|
||||
assistant_id,
|
||||
},
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to disable post-call webhook: ${response.status}`);
|
||||
}
|
||||
|
||||
return response.body;
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,281 @@
|
||||
import { Property } from '@activepieces/pieces-framework';
|
||||
import { famulorCommon } from '.';
|
||||
import { famulorAuth } from '../..';
|
||||
|
||||
// Dynamic Properties
|
||||
const campaignDropdown = () =>
|
||||
Property.Dropdown({
|
||||
auth: famulorAuth,
|
||||
displayName: 'Campaign',
|
||||
description: 'Select the campaign',
|
||||
required: true,
|
||||
refreshers: ['auth'],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Please authenticate first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const campaigns = await famulorCommon.listCampaigns({ auth: auth.secret_text });
|
||||
|
||||
if (!campaigns || campaigns.length === 0) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'No campaigns found. Create one first.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
options: campaigns.map((campaign: any) => ({
|
||||
label: campaign.name,
|
||||
value: campaign.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Failed to fetch campaigns',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
const phoneNumberProperty = (displayName: string, description: string, required = true) =>
|
||||
Property.ShortText({
|
||||
displayName,
|
||||
description: `${description} (E.164 format: +1234567890)`,
|
||||
required,
|
||||
});
|
||||
|
||||
const variablesProperty = (displayName: string, description: string, required = false) =>
|
||||
Property.Object({
|
||||
displayName,
|
||||
description,
|
||||
required,
|
||||
defaultValue: {
|
||||
customer_name: 'John Doe',
|
||||
},
|
||||
});
|
||||
|
||||
// Action Properties
|
||||
export const addLead = () => ({
|
||||
campaign: campaignDropdown(),
|
||||
phone_number: phoneNumberProperty('Customer Phone Number', 'Enter the phone number of the customer'),
|
||||
variables: variablesProperty('Variables', 'Variables to pass to the assistant'),
|
||||
allow_dupplicate: Property.Checkbox({
|
||||
displayName: 'Allow Duplicates',
|
||||
description: 'Allow the same phone number to be added to the campaign more than once',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
num_secondary_contacts: Property.Number({
|
||||
displayName: 'Number of Secondary Contacts',
|
||||
description: 'How many secondary contacts do you want to add? (Max: 10)',
|
||||
required: false,
|
||||
defaultValue: 0,
|
||||
}),
|
||||
secondary_contacts: Property.DynamicProperties({
|
||||
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'],
|
||||
auth: famulorAuth,
|
||||
props: async ({ num_secondary_contacts }) => {
|
||||
const contacts: any = {};
|
||||
const numContacts = Math.min(Number(num_secondary_contacts) || 0, 10);
|
||||
|
||||
for (let i = 1; i <= numContacts; i++) {
|
||||
contacts[`contact_${i}_phone`] = phoneNumberProperty(
|
||||
`Contact ${i} - Phone Number`,
|
||||
`Phone number for secondary contact ${i}`
|
||||
);
|
||||
|
||||
contacts[`contact_${i}_variables`] = variablesProperty(
|
||||
`Contact ${i} - Variables`,
|
||||
`Variables for secondary contact ${i} as key-value pairs`,
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
return contacts;
|
||||
},
|
||||
}),
|
||||
});
|
||||
|
||||
const phoneNumberDropdown = () =>
|
||||
Property.Dropdown({
|
||||
auth: famulorAuth,
|
||||
displayName: 'From Phone Number',
|
||||
description: 'Select an SMS-capable phone number to send from',
|
||||
required: true,
|
||||
refreshers: ['auth'],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Please authenticate first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const phoneNumbers = await famulorCommon.listPhoneNumbers({ auth: auth.secret_text });
|
||||
|
||||
if (!phoneNumbers || phoneNumbers.length === 0) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'No phone numbers found. Purchase an SMS-capable phone number first.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
options: phoneNumbers.map((phoneNumber: any) => ({
|
||||
label: `${phoneNumber.phone_number} (${phoneNumber.country_code})`,
|
||||
value: phoneNumber.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Failed to fetch phone numbers',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const sendSms = () => ({
|
||||
from: phoneNumberDropdown(),
|
||||
to: phoneNumberProperty('Recipient Phone Number', 'Enter the recipient\'s phone number'),
|
||||
bodysuit: Property.LongText({
|
||||
displayName: 'Message',
|
||||
description: 'SMS message content (max 300 characters). Long messages may be split into multiple segments.',
|
||||
required: true,
|
||||
}),
|
||||
});
|
||||
|
||||
const assistantDropdown = () =>
|
||||
Property.Dropdown({
|
||||
auth: famulorAuth,
|
||||
displayName: 'Assistant',
|
||||
description: 'Select the AI assistant to use for the call',
|
||||
required: true,
|
||||
refreshers: ['auth'],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Please authenticate first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const assistants = await famulorCommon.listAssistants({ auth: auth.secret_text });
|
||||
|
||||
if (!assistants || assistants.length === 0) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'No outbound assistants found. Create one first.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
options: assistants.map((assistant: any) => ({
|
||||
label: assistant.name,
|
||||
value: assistant.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Failed to fetch assistants',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const makePhoneCall = () => ({
|
||||
assistant_id: assistantDropdown(),
|
||||
phone_number: phoneNumberProperty('Customer Phone Number', 'Enter the phone number to call'),
|
||||
variable: Property.Object({
|
||||
displayName: 'Variables',
|
||||
description: 'Variables to pass to the assistant during the call',
|
||||
required: false,
|
||||
defaultValue: {
|
||||
customer_name: 'John Doe',
|
||||
email: 'john@example.com',
|
||||
},
|
||||
}),
|
||||
});
|
||||
|
||||
export const campaignControl = () => ({
|
||||
campaign: campaignDropdown(),
|
||||
action: Property.StaticDropdown({
|
||||
displayName: 'Action',
|
||||
description: 'Select the action to perform on the campaign',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Start Campaign', value: 'start' },
|
||||
{ label: 'Stop Campaign', value: 'stop' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
});
|
||||
|
||||
const leadDropdown = () =>
|
||||
Property.Dropdown<number,true,typeof famulorAuth>({
|
||||
auth: famulorAuth,
|
||||
displayName: 'Lead',
|
||||
description: 'Select the lead to delete',
|
||||
required: true,
|
||||
refreshers: ['auth'],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Please authenticate first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const leads = await famulorCommon.listLeads({ auth: auth.secret_text });
|
||||
|
||||
if (!leads || leads.length === 0) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'No leads found.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
options: leads.map((lead: any) => ({
|
||||
label: `${lead.phone_number} - ${lead.campaign?.name || 'Unknown Campaign'}`,
|
||||
value: lead.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Failed to fetch leads',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const deleteLead = () => ({
|
||||
lead_id: leadDropdown(),
|
||||
});
|
||||
@@ -0,0 +1,36 @@
|
||||
import z from 'zod';
|
||||
|
||||
export const addLead = {
|
||||
campaign_id: z.number().int().positive(),
|
||||
phone_number: z.string().regex(/^\+[1-9]\d{1,14}$/, 'Phone number must be in E.164 format (e.g. +1234567890)'),
|
||||
variable: z.record(z.string(), z.any()).optional(),
|
||||
allow_dupplicate: z.boolean().optional(),
|
||||
secondary_contacts: z.array(z.object({
|
||||
phone_number: z.string().regex(/^\+[1-9]\d{1,14}$/, 'Phone number must be in E.164 format'),
|
||||
variables: z.record(z.string(), z.any()).optional(),
|
||||
})).optional(),
|
||||
};
|
||||
|
||||
export const sendSms = {
|
||||
from: z.number().int().positive('Phone number ID is required'),
|
||||
to: z.string().regex(/^\+[1-9]\d{1,14}$/, 'Phone number must be in E.164 format (e.g. +1234567890)'),
|
||||
bodysuit: z.string().max(300, 'Message must be 300 characters or less'),
|
||||
};
|
||||
|
||||
export const makePhoneCall = {
|
||||
assistant_id: z.number().int().positive(),
|
||||
phone_number: z.string().regex(/^\+[1-9]\d{1,14}$/, 'Phone number must be in E.164 format (e.g. +1234567890)'),
|
||||
variable: z.object({
|
||||
customer_name: z.string().optional(),
|
||||
email: z.string().email().optional(),
|
||||
}).catchall(z.any()).optional(),
|
||||
};
|
||||
|
||||
export const campaignControl = {
|
||||
campaign_id: z.number().int().positive(),
|
||||
action: z.enum(['start', 'stop']),
|
||||
};
|
||||
|
||||
export const deleteLead = {
|
||||
lead_id: z.number().int().positive('Lead ID must be a positive integer'),
|
||||
};
|
||||
@@ -0,0 +1,66 @@
|
||||
export interface Campaign {
|
||||
id: number;
|
||||
name: string;
|
||||
status: string;
|
||||
max_calls_in_parallel: number;
|
||||
mark_complete_when_no_leads: boolean;
|
||||
allowed_hours_start_time: string;
|
||||
allowed_hours_end_time: string;
|
||||
allowed_days: string[];
|
||||
max_retries: number;
|
||||
retry_interval: number;
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
}
|
||||
|
||||
export interface ListCampaignsResponse {
|
||||
campaigns: Campaign[];
|
||||
}
|
||||
|
||||
export interface AddLeadParams {
|
||||
auth: string;
|
||||
campaign_id: number;
|
||||
phone_number: string;
|
||||
variable?: Record<string, any>;
|
||||
allow_dupplicate?: boolean;
|
||||
secondary_contacts?: Array<{
|
||||
phone_number: string;
|
||||
variables?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
||||
export interface SendSmsParams {
|
||||
auth: string;
|
||||
from: number;
|
||||
to: string;
|
||||
bodysuit: string;
|
||||
}
|
||||
|
||||
export interface MakePhoneCallParams {
|
||||
auth: string;
|
||||
assistant_id: number;
|
||||
phone_number: string;
|
||||
variable?: {
|
||||
customer_name?: string;
|
||||
email?: string;
|
||||
[key: string]: any;
|
||||
};
|
||||
}
|
||||
|
||||
export interface CampaignControlParams {
|
||||
auth: string;
|
||||
campaign_id: number;
|
||||
action: 'start' | 'stop';
|
||||
}
|
||||
|
||||
export interface DeleteLeadParams {
|
||||
auth: string;
|
||||
lead_id: number;
|
||||
}
|
||||
|
||||
export interface LeadResponse {
|
||||
message: string;
|
||||
data: {
|
||||
id: string;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
import { createTrigger, TriggerStrategy, PiecePropValueSchema, Property } from '@activepieces/pieces-framework';
|
||||
import { DedupeStrategy, Polling, pollingHelper } from '@activepieces/pieces-common';
|
||||
import { famulorAuth } from '../..';
|
||||
import { famulorCommon } from '../common';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
const polling: Polling<PiecePropValueSchema<any>, { type?: string; per_page?: number }> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth, propsValue }) => {
|
||||
const perPage = propsValue['per_page'] || 10;
|
||||
const type = propsValue['type'];
|
||||
|
||||
// Get all assistants with pagination
|
||||
let allAssistants: any[] = [];
|
||||
let currentPage = 1;
|
||||
let hasMorePages = true;
|
||||
|
||||
while (hasMorePages) {
|
||||
const assistants = await famulorCommon.listAllAssistants({
|
||||
auth: auth as string,
|
||||
per_page: perPage,
|
||||
page: currentPage,
|
||||
type
|
||||
});
|
||||
|
||||
if (assistants.data && assistants.data.length > 0) {
|
||||
allAssistants = allAssistants.concat(assistants.data);
|
||||
hasMorePages = currentPage < assistants.last_page;
|
||||
currentPage++;
|
||||
} else {
|
||||
hasMorePages = false;
|
||||
}
|
||||
}
|
||||
|
||||
return allAssistants.map((assistant) => {
|
||||
const assistantDate = assistant.updated_at
|
||||
? dayjs(assistant.updated_at)
|
||||
: dayjs(assistant.created_at);
|
||||
return {
|
||||
epochMilliSeconds: assistantDate.valueOf(),
|
||||
data: assistant,
|
||||
};
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
export const getAssistants = createTrigger({
|
||||
auth: famulorAuth,
|
||||
name: 'getAssistants',
|
||||
displayName: 'New or Updated Assistant',
|
||||
description: 'Triggers when AI assistants are created or updated in your Famulor account.',
|
||||
props: {
|
||||
type: Property.StaticDropdown({
|
||||
displayName: 'Assistant Type',
|
||||
description: 'Filter assistants by type',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'All Types', value: '' },
|
||||
{ label: 'Inbound', value: 'inbound' },
|
||||
{ label: 'Outbound', value: 'outbound' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
per_page: Property.Number({
|
||||
displayName: 'Items Per Page',
|
||||
description: 'Number of assistants to fetch per page (1-100, default: 10)',
|
||||
required: false,
|
||||
defaultValue: 10,
|
||||
}),
|
||||
},
|
||||
sampleData: {
|
||||
id: 123,
|
||||
user_id: 456,
|
||||
name: "Customer Support Assistant",
|
||||
type: "inbound",
|
||||
status: "active",
|
||||
phone_number_id: 789,
|
||||
voice_id: 101,
|
||||
language_id: 1,
|
||||
language: "en-US",
|
||||
timezone: "UTC",
|
||||
initial_message: "Hello! How can I help you today?",
|
||||
system_prompt: "You are a helpful customer support assistant.",
|
||||
max_duration: 1800,
|
||||
record: true,
|
||||
created_at: "2024-01-15T10:30:00Z",
|
||||
updated_at: "2024-01-15T14:20:00Z",
|
||||
variable: {
|
||||
company_name: "ACME Corp",
|
||||
support_email: "support@acme.com"
|
||||
},
|
||||
is_webhook_active: true,
|
||||
webhook_url: "https://api.example.com/webhook"
|
||||
},
|
||||
type: TriggerStrategy.POLLING,
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async onEnable(context) {
|
||||
const { store, auth, propsValue } = context;
|
||||
await pollingHelper.onEnable(polling, { store, auth, propsValue });
|
||||
},
|
||||
async onDisable(context) {
|
||||
const { store, auth, propsValue } = context;
|
||||
await pollingHelper.onDisable(polling, { store, auth, propsValue });
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,90 @@
|
||||
import { createTrigger, Property, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { famulorAuth } from '../..';
|
||||
import { famulorCommon } from '../common';
|
||||
|
||||
const inboundAssistantDropdown = () =>
|
||||
Property.Dropdown({
|
||||
auth: famulorAuth,
|
||||
displayName: 'Inbound Assistant',
|
||||
description: 'Select an inbound assistant to receive webhook notifications for',
|
||||
required: true,
|
||||
refreshers: ['auth'],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Please authenticate first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
// Filter for inbound assistants only
|
||||
const assistants = await famulorCommon.listAllAssistants({
|
||||
auth: auth.secret_text,
|
||||
type: 'inbound',
|
||||
per_page: 100
|
||||
});
|
||||
|
||||
if (!assistants.data || assistants.data.length === 0) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'No inbound assistants found. Create one first.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
options: assistants.data.map((assistant: any) => ({
|
||||
label: `${assistant.name} (${assistant.status})`,
|
||||
value: assistant.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Failed to fetch assistants',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const inboundCall = createTrigger({
|
||||
auth: famulorAuth,
|
||||
name: 'inboundCall',
|
||||
displayName: 'Inbound Call Received',
|
||||
description: 'Triggers when an inbound call is received by your AI assistant. Webhook must be enabled for the selected assistant.',
|
||||
props: {
|
||||
assistant_id: inboundAssistantDropdown(),
|
||||
},
|
||||
sampleData: {
|
||||
assistant_id: 123,
|
||||
customer_phone: '+16380991171',
|
||||
assistant_phone: '+16380991171',
|
||||
call_id: "call_abc123",
|
||||
timestamp: "2024-01-15T10:30:00Z",
|
||||
status: "incoming",
|
||||
variables: {
|
||||
customer_name: "John Doe",
|
||||
caller_id: "+16380991171"
|
||||
}
|
||||
},
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
async onEnable(context) {
|
||||
await famulorCommon.enableInboundWebhook({
|
||||
auth: context.auth.secret_text,
|
||||
assistant_id: context.propsValue.assistant_id as number,
|
||||
webhook_url: context.webhookUrl,
|
||||
});
|
||||
},
|
||||
async onDisable(context) {
|
||||
await famulorCommon.disableInboundWebhook({
|
||||
auth: context.auth.secret_text,
|
||||
assistant_id: context.propsValue.assistant_id as number,
|
||||
});
|
||||
},
|
||||
async run(context) {
|
||||
return [context.payload.body];
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,117 @@
|
||||
import { createTrigger, Property, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { famulorAuth } from '../..';
|
||||
import { famulorCommon } from '../common';
|
||||
|
||||
const assistantDropdownForWebhook = () =>
|
||||
Property.Dropdown({
|
||||
auth: famulorAuth,
|
||||
displayName: 'Assistant',
|
||||
description: 'Select an assistant to receive post-call webhook notifications for',
|
||||
required: true,
|
||||
refreshers: ['auth'],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Please authenticate first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
// Get all assistants (both inbound and outbound can make calls)
|
||||
const assistants = await famulorCommon.listAllAssistants({
|
||||
auth: auth.secret_text,
|
||||
per_page: 100
|
||||
});
|
||||
|
||||
if (!assistants.data || assistants.data.length === 0) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'No assistants found. Create one first.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
options: assistants.data.map((assistant: any) => ({
|
||||
label: `${assistant.name} (${assistant.type} - ${assistant.status})`,
|
||||
value: assistant.id,
|
||||
})),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Failed to fetch assistants',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const phoneCallEnded = createTrigger({
|
||||
auth: famulorAuth,
|
||||
name: 'phoneCallEnded',
|
||||
displayName: 'Phone Call Completed',
|
||||
description: 'Triggers when a phone call is completed, providing full call transcript, extracted variables, and call metadata.',
|
||||
props: {
|
||||
assistant_id: assistantDropdownForWebhook(),
|
||||
},
|
||||
sampleData: {
|
||||
id: 480336,
|
||||
customer_phone: "+4915123456789",
|
||||
assistant_phone: "+4912345678",
|
||||
duration: 180,
|
||||
status: "completed",
|
||||
extracted_variables: {
|
||||
customer_interested: true,
|
||||
appointment_scheduled: false,
|
||||
contact_reason: "product_inquiry",
|
||||
follow_up_needed: true,
|
||||
customer_budget: "10000-50000",
|
||||
decision_maker: true,
|
||||
next_contact_date: "2024-02-15"
|
||||
},
|
||||
input_variables: {
|
||||
customer_name: "Max Mustermann",
|
||||
company: "Beispiel GmbH"
|
||||
},
|
||||
transcript: "Assistent: Guten Tag, Herr Mustermann! Ich bin...",
|
||||
recording_url: "https://recordings.famulor.de/call-480336.mp3",
|
||||
created_at: "2024-01-15T10:30:00Z",
|
||||
finished_at: "2024-01-15T10:33:00Z",
|
||||
lead: {
|
||||
id: 12345,
|
||||
phone_number: "+4915123456789",
|
||||
variables: {
|
||||
customer_name: "Max Mustermann",
|
||||
company: "Beispiel GmbH",
|
||||
source: "website"
|
||||
},
|
||||
status: "contacted",
|
||||
created_at: "2024-01-14T09:00:00Z",
|
||||
updated_at: "2024-01-15T10:33:00Z"
|
||||
},
|
||||
campaign: {
|
||||
id: 123,
|
||||
name: "Q1 Sales Campaign"
|
||||
}
|
||||
},
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
async onEnable(context) {
|
||||
await famulorCommon.enablePostCallWebhook({
|
||||
auth: context.auth.secret_text,
|
||||
assistant_id: context.propsValue.assistant_id as number,
|
||||
webhook_url: context.webhookUrl,
|
||||
});
|
||||
},
|
||||
async onDisable(context) {
|
||||
await famulorCommon.disablePostCallWebhook({
|
||||
auth: context.auth.secret_text,
|
||||
assistant_id: context.propsValue.assistant_id as number,
|
||||
});
|
||||
},
|
||||
async run(context) {
|
||||
return [context.payload.body];
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user