Add Activepieces integration for workflow automation

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

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

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

View File

@@ -0,0 +1,34 @@
{
"Twilio": "Twilio",
"Cloud communications platform for building SMS, Voice & Messaging applications": "Cloud communications platform for building SMS, Voice & Messaging applications",
"Account SID": "Account SID",
"The account SID to use to connect to Twilio": "The account SID to use to connect to Twilio",
"Auth token": "Auth token",
"The auth token to use to connect to Twilio": "The auth token to use to connect to Twilio",
"The authentication to use to connect to Twilio": "The authentication to use to connect to Twilio",
"Send SMS": "Send SMS",
"Custom API Call": "Custom API Call",
"Send a new SMS message": "Send a new SMS message",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"From": "From",
"Message Body": "Message Body",
"To": "To",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"The phone number to send the message from": "The phone number to send the message from",
"The body of the message to send": "The body of the message to send",
"The phone number to send the message to": "The phone number to send the message to",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Incoming SMS": "New Incoming SMS",
"Triggers when a new SMS message is received": "Triggers when a new SMS message is received"
}

View File

@@ -0,0 +1,83 @@
{
"Cloud communications platform for building SMS, Voice & Messaging applications": "Cloud-Kommunikationsplattform zum Erstellen von SMS, Voice & Messaging-Anwendungen",
"Account SID": "SID Konto",
"The account SID to use to connect to Twilio": "Die SID zum Verbinden mit Twilio",
"Auth token": "Auth Token",
"The auth token to use to connect to Twilio": "Das Authentifizierungs-Token zum Verbinden mit Twilio",
"The authentication to use to connect to Twilio": "Die Authentifizierung zum Verbinden mit Twilio",
"Send SMS": "SMS senden",
"Phone Number Lookup": "Telefonnummersuche",
"Call Phone": "Telefon anrufen",
"Get Message": "Nachricht erhalten",
"Download Recording Media": "Aufzeichnungsmedien herunterladen",
"Custom API Call": "Eigener API-Aufruf",
"Send a new SMS message": "Eine neue SMS-Nachricht senden",
"Lookup information about a phone number.": "Suchen Sie Informationen über eine Telefonnummer.",
"Call a number and say a message.": "Rufen Sie eine Nummer an und sagen Sie eine Nachricht.",
"Retrieves the details of a specific message.": "Ruft die Details einer bestimmten Nachricht ab.",
"Download the media file for a specific recording.": "Laden Sie die Mediendatei für eine bestimmte Aufnahme herunter.",
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
"From": "Von",
"Message Body": "Nachrichtentext",
"To": "An",
"Phone Number": "Telefonnummer",
"Message to Say": "Zu sagende Nachricht",
"Voice": "Stimme",
"Language": "Sprache",
"Send DTMF Tones": "DTMF Töne senden",
"Timeout (seconds)": "Timeout (Sekunden)",
"Message SID": "Nachricht SID",
"Recording SID": "Aufzeichnung SID",
"Format": "Format",
"Channels": "Kanäle",
"Method": "Methode",
"Headers": "Kopfzeilen",
"Query Parameters": "Abfrageparameter",
"Body": "Körper",
"Response is Binary ?": "Antwort ist binär?",
"No Error on Failure": "Kein Fehler bei Fehler",
"Timeout (in seconds)": "Timeout (in Sekunden)",
"The phone number to send the message from": "Die Telefonnummer, von der die Nachricht gesendet wird",
"The body of the message to send": "Der Inhalt der zu sendenden Nachricht",
"The phone number to send the message to": "Die Telefonnummer, an die die Nachricht gesendet werden soll",
"The phone number to call. Must be in E.164 format (e.g., +15558675310).": "Die zu anrufende Telefonnummer. Muss im E.164-Format sein (z.B. +15558675310).",
"The text message to be converted to speech and spoken to the recipient.": "Die Textnachricht wird in Sprache umgewandelt und mit dem Empfänger gesprochen.",
"The voice to use for the text-to-speech message.": "Die zu verwendende Stimme für die Text-zu-Sprach-Nachricht.",
"The language to use for the text-to-speech message.": "Die Sprache, die für die Text-zu-Sprache verwendet werden soll.",
"A string of keys to dial after the call is connected. Use 'w' for a half-second pause.": "Eine Zeichenfolge von Tasten, die nach dem Anruf gewählt werden soll. Verwenden Sie 'w' für eine halbe Sekunde Pause.",
"The number of seconds to let the phone ring before assuming no answer. Default is 60.": "Die Anzahl der Sekunden, um den Telefonring zu lassen, bevor keine Antwort angenommen wird. Standard ist 60.",
"The unique identifier (SID) of the message to retrieve. It starts with \"SM\" or \"MM\".": "Der eindeutige Identifikator (SID) der zu holenden Nachricht. Er beginnt mit \"SM\" oder \"MM\".",
"The unique identifier (SID) of the recording to download. It starts with \"RE\".": "Der eindeutige Identifikator (SID) der zu ladenden Aufzeichnung. Er beginnt mit \"RE\".",
"The desired audio format for the download file.": "Das gewünschte Audioformat für die Downloaddatei.",
"Specify whether to download a mono or dual-channel file. Note: Dual-channel may not be available for all recordings.": "Legen Sie fest, ob eine Mono-oder Zwei-Kanal-Datei heruntergeladen werden soll. Hinweis: Dual-Channel ist möglicherweise nicht für alle Aufnahmen verfügbar.",
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
"Alice (Default)": "Alice (Standard)",
"Man": "Mann",
"Woman": "Frau",
"English (US)": "Englisch (USA)",
"English (UK)": "Englisch (UK)",
"Spanish": "Spanisch",
"French": "Französisch",
"German": "Deutsch",
"MP3": "MP3",
"WAV": "WAV",
"Mono": "Mono",
"Dual": "Duell",
"GET": "ERHALTEN",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "LÖSCHEN",
"HEAD": "HEAD",
"New Incoming SMS": "Neue eingehende SMS",
"New Phone Number": "Neue Telefonnummer",
"New Recording": "Neue Aufnahme",
"New Transcription": "Neue Transkription",
"New Call": "Neuer Anruf",
"Triggers when a new SMS message is received": "Wird ausgelöst, wenn eine neue SMS empfangen wird",
"Triggers when you add a new phone number to your account.": "Wird ausgelöst, wenn Sie Ihrem Konto eine neue Telefonnummer hinzufügen.",
"Triggers when a new call recording is completed and available.": "Wird ausgelöst, wenn eine neue Anrufaufnahme abgeschlossen und verfügbar ist.",
"Triggers when a new call recording transcription is completed.": "Wird ausgelöst, wenn eine neue Transkription der Anrufaufzeichnung abgeschlossen ist.",
"Triggers when a call completes (incoming or outgoing).": "Wird ausgelöst, wenn ein Anruf abgeschlossen ist (ein- oder ausgehend)."
}

View File

@@ -0,0 +1,83 @@
{
"Cloud communications platform for building SMS, Voice & Messaging applications": "Plataforma de comunicaciones en la nube para construir aplicaciones SMS, Voz y mensajería",
"Account SID": "Cuenta SID",
"The account SID to use to connect to Twilio": "El SID de la cuenta a usar para conectarse a Twilio",
"Auth token": "Token Auth",
"The auth token to use to connect to Twilio": "El token de autenticación a usar para conectarse a Twilio",
"The authentication to use to connect to Twilio": "La autenticación a usar para conectarse a Twilio",
"Send SMS": "Enviar SMS",
"Phone Number Lookup": "Búsqueda de número de teléfono",
"Call Phone": "Llamar al teléfono",
"Get Message": "Obtener mensaje",
"Download Recording Media": "Descargar medios de grabación",
"Custom API Call": "Llamada API personalizada",
"Send a new SMS message": "Enviar un nuevo mensaje SMS",
"Lookup information about a phone number.": "Información de búsqueda sobre un número de teléfono.",
"Call a number and say a message.": "Llamar a un número y decir un mensaje.",
"Retrieves the details of a specific message.": "Devuelve los detalles de un mensaje específico.",
"Download the media file for a specific recording.": "Descargue el archivo multimedia para una grabación específica.",
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
"From": "De",
"Message Body": "Cuerpo",
"To": "A",
"Phone Number": "Número de teléfono",
"Message to Say": "Mensaje a decir",
"Voice": "Voz",
"Language": "Idioma",
"Send DTMF Tones": "Enviar tonos DTMF",
"Timeout (seconds)": "Tiempo agotado (segundos)",
"Message SID": "Mensaje SID",
"Recording SID": "Grabando SID",
"Format": "Formatear",
"Channels": "Canales",
"Method": "Método",
"Headers": "Encabezados",
"Query Parameters": "Parámetros de consulta",
"Body": "Cuerpo",
"Response is Binary ?": "¿Respuesta es binaria?",
"No Error on Failure": "No hay ningún error en fallo",
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
"The phone number to send the message from": "El número de teléfono desde el que enviar el mensaje",
"The body of the message to send": "El cuerpo del mensaje a enviar",
"The phone number to send the message to": "El número de teléfono al que enviar el mensaje",
"The phone number to call. Must be in E.164 format (e.g., +15558675310).": "El número de teléfono para llamar. Debe estar en formato E.164 (por ejemplo, +15558675310).",
"The text message to be converted to speech and spoken to the recipient.": "El mensaje de texto que se convertirá en voz y se hablará con el destinatario.",
"The voice to use for the text-to-speech message.": "La voz a usar para el mensaje de texto a voz.",
"The language to use for the text-to-speech message.": "El idioma a usar para el mensaje de texto a voz.",
"A string of keys to dial after the call is connected. Use 'w' for a half-second pause.": "Una cadena de teclas para marcar después de la llamada está conectada. Use 'w' para una pausa de medio segundo.",
"The number of seconds to let the phone ring before assuming no answer. Default is 60.": "El número de segundos para dejar que el teléfono llame antes de asumir ninguna respuesta. Por defecto es 60.",
"The unique identifier (SID) of the message to retrieve. It starts with \"SM\" or \"MM\".": "El identificador único (SID) del mensaje a recuperar. Comienza con \"SM\" o \"MM\".",
"The unique identifier (SID) of the recording to download. It starts with \"RE\".": "El identificador único (SID) de la grabación a descargar. Empieza con \"RE\".",
"The desired audio format for the download file.": "El formato de audio deseado para el archivo de descarga.",
"Specify whether to download a mono or dual-channel file. Note: Dual-channel may not be available for all recordings.": "Especifique si desea descargar un archivo mono o de canal dual. Nota: es posible que el doble canal no esté disponible para todas las grabaciones.",
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDFs, imágenes, etc.",
"Alice (Default)": "Alicia (por defecto)",
"Man": "Hombre",
"Woman": "Mujer",
"English (US)": "Inglés (US)",
"English (UK)": "Inglés (UK)",
"Spanish": "Español",
"French": "Francés",
"German": "Alemán",
"MP3": "MP3",
"WAV": "WAV",
"Mono": "Mono",
"Dual": "Doble",
"GET": "RECOGER",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "BORRAR",
"HEAD": "LIMPIO",
"New Incoming SMS": "Nuevo SMS entrante",
"New Phone Number": "Nuevo número de teléfono",
"New Recording": "Nueva grabación",
"New Transcription": "Nueva Transcripción",
"New Call": "Nueva llamada",
"Triggers when a new SMS message is received": "Dispara cuando se recibe un nuevo mensaje SMS",
"Triggers when you add a new phone number to your account.": "Desencadena cuando agregas un nuevo número de teléfono a tu cuenta.",
"Triggers when a new call recording is completed and available.": "Se activa cuando una nueva grabación de llamadas se completa y está disponible.",
"Triggers when a new call recording transcription is completed.": "Se activa cuando se completa una nueva transcripción de la grabación de llamadas.",
"Triggers when a call completes (incoming or outgoing).": "Se activa cuando se completa una llamada (entrante o saliente)."
}

View File

@@ -0,0 +1,83 @@
{
"Cloud communications platform for building SMS, Voice & Messaging applications": "Plateforme de communication dans le Cloud pour construire des applications SMS, Voix et Messagerie",
"Account SID": "SID du compte client",
"The account SID to use to connect to Twilio": "Le compte SID à utiliser pour se connecter à Twilio",
"Auth token": "Jeton d'authentification",
"The auth token to use to connect to Twilio": "Le jeton d'authentification à utiliser pour se connecter à Twilio",
"The authentication to use to connect to Twilio": "L'authentification à utiliser pour se connecter à Twilio",
"Send SMS": "Envoyer un SMS",
"Phone Number Lookup": "Recherche de numéro de téléphone",
"Call Phone": "Appelez le téléphone",
"Get Message": "Obtenir le message",
"Download Recording Media": "Télécharger le média denregistrement",
"Custom API Call": "Appel d'API personnalisé",
"Send a new SMS message": "Envoyer un nouveau message SMS",
"Lookup information about a phone number.": "Rechercher des informations sur un numéro de téléphone.",
"Call a number and say a message.": "Appelez un numéro et dites un message.",
"Retrieves the details of a specific message.": "Récupère les détails d'un message spécifique.",
"Download the media file for a specific recording.": "Télécharger le fichier média pour un enregistrement spécifique.",
"Make a custom API call to a specific endpoint": "Passer un appel API personnalisé à un endpoint spécifique",
"From": "A partir de",
"Message Body": "Corps du message",
"To": "À",
"Phone Number": "Numéro de téléphone",
"Message to Say": "Message à Say",
"Voice": "Voix",
"Language": "Langue",
"Send DTMF Tones": "Envoyer des tonalités DTMF",
"Timeout (seconds)": "Délai d'attente (secondes)",
"Message SID": "SID du message",
"Recording SID": "SID d'enregistrement",
"Format": "Formater",
"Channels": "Canaux",
"Method": "Méthode",
"Headers": "En-têtes",
"Query Parameters": "Paramètres de requête",
"Body": "Corps",
"Response is Binary ?": "La réponse est Binaire ?",
"No Error on Failure": "Aucune erreur en cas d'échec",
"Timeout (in seconds)": "Délai d'expiration (en secondes)",
"The phone number to send the message from": "Le numéro de téléphone depuis lequel envoyer le message",
"The body of the message to send": "Le corps du message à envoyer",
"The phone number to send the message to": "Le numéro de téléphone pour envoyer le message à",
"The phone number to call. Must be in E.164 format (e.g., +15558675310).": "Le numéro de téléphone à appeler. Doit être au format E.164 (par exemple, +15558675310).",
"The text message to be converted to speech and spoken to the recipient.": "Le message texte à convertir en discours et à parler au destinataire.",
"The voice to use for the text-to-speech message.": "La voix à utiliser pour le message de synthèse vocale.",
"The language to use for the text-to-speech message.": "La langue à utiliser pour le message de synthèse vocale.",
"A string of keys to dial after the call is connected. Use 'w' for a half-second pause.": "Une chaîne de touches à composer après la connexion de l'appel. Utilisez 'w' pour une pause d'une demi-seconde.",
"The number of seconds to let the phone ring before assuming no answer. Default is 60.": "Le nombre de secondes pour laisser sonner le téléphone avant d'assumer aucune réponse. La valeur par défaut est 60.",
"The unique identifier (SID) of the message to retrieve. It starts with \"SM\" or \"MM\".": "L'identifiant unique (SID) du message à récupérer. Il commence par \"SM\" ou \"MM\".",
"The unique identifier (SID) of the recording to download. It starts with \"RE\".": "L'identifiant unique (SID) de l'enregistrement à télécharger. Il commence par \"RE\".",
"The desired audio format for the download file.": "Le format audio souhaité pour le fichier de téléchargement.",
"Specify whether to download a mono or dual-channel file. Note: Dual-channel may not be available for all recordings.": "Indique si vous voulez télécharger un fichier mono ou dual-canal. Note : Il est possible que le double canal ne soit pas disponible pour tous les enregistrements.",
"Authorization headers are injected automatically from your connection.": "Les en-têtes d'autorisation sont injectés automatiquement à partir de votre connexion.",
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDFs, les images, etc.",
"Alice (Default)": "Alice (par défaut)",
"Man": "Homme",
"Woman": "Femme",
"English (US)": "Anglais (US)",
"English (UK)": "Anglais (Royaume-Uni)",
"Spanish": "Espagnol",
"French": "Français",
"German": "Allemand",
"MP3": "Mp3",
"WAV": "WAV",
"Mono": "Mono",
"Dual": "Dual",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Incoming SMS": "Nouveau SMS entrant",
"New Phone Number": "Nouveau numéro de téléphone",
"New Recording": "Nouvel enregistrement",
"New Transcription": "Nouvelle transcription",
"New Call": "Nouvel appel",
"Triggers when a new SMS message is received": "Déclenche quand un nouveau SMS est reçu",
"Triggers when you add a new phone number to your account.": "Déclenche lorsque vous ajoutez un nouveau numéro de téléphone à votre compte.",
"Triggers when a new call recording is completed and available.": "Déclenche quand un nouvel enregistrement d'appel est terminé et disponible.",
"Triggers when a new call recording transcription is completed.": "Déclenche quand une nouvelle transcription d'enregistrement d'appel est terminée.",
"Triggers when a call completes (incoming or outgoing).": "Déclenche quand un appel se termine (entrant ou sortant)."
}

View File

@@ -0,0 +1,34 @@
{
"Twilio": "Twilio",
"Cloud communications platform for building SMS, Voice & Messaging applications": "Cloud communications platform for building SMS, Voice & Messaging applications",
"Account SID": "Account SID",
"The account SID to use to connect to Twilio": "The account SID to use to connect to Twilio",
"Auth token": "Auth token",
"The auth token to use to connect to Twilio": "The auth token to use to connect to Twilio",
"The authentication to use to connect to Twilio": "The authentication to use to connect to Twilio",
"Send SMS": "Send SMS",
"Custom API Call": "Custom API Call",
"Send a new SMS message": "Send a new SMS message",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"From": "From",
"Message Body": "Message Body",
"To": "To",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"The phone number to send the message from": "The phone number to send the message from",
"The body of the message to send": "The body of the message to send",
"The phone number to send the message to": "The phone number to send the message to",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Incoming SMS": "New Incoming SMS",
"Triggers when a new SMS message is received": "Triggers when a new SMS message is received"
}

View File

@@ -0,0 +1,34 @@
{
"Twilio": "Twilio",
"Cloud communications platform for building SMS, Voice & Messaging applications": "Cloud communications platform for building SMS, Voice & Messaging applications",
"Account SID": "Account SID",
"The account SID to use to connect to Twilio": "The account SID to use to connect to Twilio",
"Auth token": "Auth token",
"The auth token to use to connect to Twilio": "The auth token to use to connect to Twilio",
"The authentication to use to connect to Twilio": "The authentication to use to connect to Twilio",
"Send SMS": "Send SMS",
"Custom API Call": "Custom API Call",
"Send a new SMS message": "Send a new SMS message",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"From": "From",
"Message Body": "Message Body",
"To": "To",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"The phone number to send the message from": "The phone number to send the message from",
"The body of the message to send": "The body of the message to send",
"The phone number to send the message to": "The phone number to send the message to",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Incoming SMS": "New Incoming SMS",
"Triggers when a new SMS message is received": "Triggers when a new SMS message is received"
}

View File

@@ -0,0 +1,83 @@
{
"Cloud communications platform for building SMS, Voice & Messaging applications": "SMS、音声およびメッセージングアプリケーションを構築するためのクラウド通信プラットフォーム",
"Account SID": "アカウント SID",
"The account SID to use to connect to Twilio": "Twilio に接続するために使用するアカウント SID",
"Auth token": "認証トークン",
"The auth token to use to connect to Twilio": "Twilio に接続するために使用する認証トークン",
"The authentication to use to connect to Twilio": "Twilio に接続するために使用する認証",
"Send SMS": "SMSの送信",
"Phone Number Lookup": "電話番号検索",
"Call Phone": "電話に発信",
"Get Message": "メッセージを受け取る",
"Download Recording Media": "録画メディアをダウンロード",
"Custom API Call": "カスタムAPI通話",
"Send a new SMS message": "新しいSMSメッセージを送信",
"Lookup information about a phone number.": "電話番号に関する情報を検索します。",
"Call a number and say a message.": "電話番号を呼んでメッセージを言う。",
"Retrieves the details of a specific message.": "特定のメッセージの詳細を取得します。",
"Download the media file for a specific recording.": "特定の録画用のメディア ファイルをダウンロードします。",
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
"From": "差出人:",
"Message Body": "メッセージ本文",
"To": "終了日",
"Phone Number": "電話番号",
"Message to Say": "メッセージを送信する",
"Voice": "音声",
"Language": "言語",
"Send DTMF Tones": "DTMFトーンを送信",
"Timeout (seconds)": "タイムアウト (秒)",
"Message SID": "Message SID",
"Recording SID": "録音SID録音",
"Format": "書式",
"Channels": "チャンネル",
"Method": "方法",
"Headers": "ヘッダー",
"Query Parameters": "クエリパラメータ",
"Body": "本文",
"Response is Binary ?": "応答はバイナリですか?",
"No Error on Failure": "失敗時にエラーはありません",
"Timeout (in seconds)": "タイムアウト(秒)",
"The phone number to send the message from": "メッセージを送信する電話番号",
"The body of the message to send": "送信するメッセージの本文",
"The phone number to send the message to": "メッセージを送信する電話番号",
"The phone number to call. Must be in E.164 format (e.g., +15558675310).": "電話番号。E.164形式(例:+15558675310でなければなりません。",
"The text message to be converted to speech and spoken to the recipient.": "テキストメッセージは、スピーチに変換され、受信者に話されます。",
"The voice to use for the text-to-speech message.": "テキスト読み上げメッセージに使用する音声。",
"The language to use for the text-to-speech message.": "テキスト読み上げメッセージに使用する言語",
"A string of keys to dial after the call is connected. Use 'w' for a half-second pause.": "通話が接続された後にダイヤルするキーの文字列。半秒の一時停止には「w」を使用してください。",
"The number of seconds to let the phone ring before assuming no answer. Default is 60.": "電話に応答を出さないようにする秒数。既定値は 60 です。",
"The unique identifier (SID) of the message to retrieve. It starts with \"SM\" or \"MM\".": "取得するメッセージの一意の識別子 (SID) 。「SM」または「MM」で始まります。",
"The unique identifier (SID) of the recording to download. It starts with \"RE\".": "ダウンロードする記録の一意の識別子 (SID) 。「RE」で始まります。",
"The desired audio format for the download file.": "ダウンロードファイルに必要なオーディオ形式。",
"Specify whether to download a mono or dual-channel file. Note: Dual-channel may not be available for all recordings.": "モノラルファイルまたはデュアルチャンネルファイルをダウンロードするかどうかを指定します。注意: デュアル・チャンネルはすべての録音で使用できない場合があります。",
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
"Alice (Default)": "アリス(デフォルト)",
"Man": "男",
"Woman": "女性",
"English (US)": "英語 (米国)",
"English (UK)": "英語 (英国)",
"Spanish": "スペイン語",
"French": "フランス語",
"German": "ドイツ語",
"MP3": "MP3",
"WAV": "WAV",
"Mono": "モノラル",
"Dual": "Dual",
"GET": "取得",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "削除",
"HEAD": "頭",
"New Incoming SMS": "新しいSMS着信",
"New Phone Number": "新しい電話番号",
"New Recording": "新しい録音",
"New Transcription": "新しい表記記号",
"New Call": "新しい通話",
"Triggers when a new SMS message is received": "新しいSMSメッセージを受信したときにトリガーします",
"Triggers when you add a new phone number to your account.": "アカウントに新しい電話番号を追加するとトリガーします。",
"Triggers when a new call recording is completed and available.": "新しい通話録音が完了し、利用可能になったときにトリガーします。",
"Triggers when a new call recording transcription is completed.": "新しい通話録音が完了したときにトリガーします。",
"Triggers when a call completes (incoming or outgoing).": "呼び出しが完了したとき(着信または発信)にトリガーします。"
}

View File

@@ -0,0 +1,83 @@
{
"Cloud communications platform for building SMS, Voice & Messaging applications": "Cloud communicatie platform voor het maken van SMS, Voice & Messaging applicaties",
"Account SID": "Klant SID",
"The account SID to use to connect to Twilio": "De account SID om te gebruiken om te verbinden met Twilio",
"Auth token": "Authenticatie token",
"The auth token to use to connect to Twilio": "De authenticatietoken die gebruikt moet worden om te verbinden met Twilio",
"The authentication to use to connect to Twilio": "De authenticatie om te gebruiken om verbinding te maken met Twilio",
"Send SMS": "Sms verzenden",
"Phone Number Lookup": "Telefoonnummer opzoeken",
"Call Phone": "Telefoon bellen",
"Get Message": "Bericht opvragen",
"Download Recording Media": "Opname van media downloaden",
"Custom API Call": "Custom API Call",
"Send a new SMS message": "Een nieuw SMS-bericht verzenden",
"Lookup information about a phone number.": "Zoek informatie over een telefoonnummer.",
"Call a number and say a message.": "Bel een nummer en zeg een bericht.",
"Retrieves the details of a specific message.": "Ophalen van de details van een specifiek bericht.",
"Download the media file for a specific recording.": "Download het mediabestand voor een specifieke opname.",
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
"From": "van",
"Message Body": "Bericht Body",
"To": "tot",
"Phone Number": "Telefoon nummer",
"Message to Say": "Bericht naar Zeg",
"Voice": "Stem",
"Language": "Taal",
"Send DTMF Tones": "Stuur DTMF Tonen",
"Timeout (seconds)": "Time-out (seconden)",
"Message SID": "Bericht SID",
"Recording SID": "Opname SID",
"Format": "Formatteren",
"Channels": "Kanalen",
"Method": "Methode",
"Headers": "Kopteksten",
"Query Parameters": "Query parameters",
"Body": "Lichaam",
"Response is Binary ?": "Antwoord is binair?",
"No Error on Failure": "Geen fout bij fout",
"Timeout (in seconds)": "Time-out (in seconden)",
"The phone number to send the message from": "Het telefoonnummer van waaruit een bericht moet worden verstuurd",
"The body of the message to send": "De inhoud van het te verzenden bericht",
"The phone number to send the message to": "Het telefoonnummer waar het bericht naartoe moet worden gestuurd",
"The phone number to call. Must be in E.164 format (e.g., +15558675310).": "Het telefoonnummer om te bellen. Moet in E.164-formaat zijn (bijv. +15558675310).",
"The text message to be converted to speech and spoken to the recipient.": "Het tekstbericht dat naar spraak moet worden omgezet en naar de ontvanger wordt gesproken.",
"The voice to use for the text-to-speech message.": "De stem die moet worden gebruikt voor het tekst-naar-spraak bericht.",
"The language to use for the text-to-speech message.": "De taal die moet worden gebruikt voor het tekst-naar-spraak bericht.",
"A string of keys to dial after the call is connected. Use 'w' for a half-second pause.": "Een reeks sleutels om te bellen nadat de oproep is verbonden. Gebruik 'w' voor een halve pauze.",
"The number of seconds to let the phone ring before assuming no answer. Default is 60.": "Het aantal seconden om de telefoon te laten bellen voor het aannemen van geen antwoord. Standaard is 60.",
"The unique identifier (SID) of the message to retrieve. It starts with \"SM\" or \"MM\".": "De unieke id van het op te halen bericht. Het begint met \"SM\" of \"MM\".",
"The unique identifier (SID) of the recording to download. It starts with \"RE\".": "De unieke id van de te downloaden opname (SID). Het begint met \"RE\".",
"The desired audio format for the download file.": "Het gewenste audioformaat voor het downloadbestand.",
"Specify whether to download a mono or dual-channel file. Note: Dual-channel may not be available for all recordings.": "Specificeer of een mono of dual-kanaal bestand moet worden gedownload. Opmerking: Dual-kanaal is mogelijk niet beschikbaar voor alle opnames.",
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
"Alice (Default)": "Alice (standaard)",
"Man": "Handmatig",
"Woman": "Vrouw",
"English (US)": "Engels (VS)",
"English (UK)": "Engels (UK)",
"Spanish": "Spaans",
"French": "Frans",
"German": "Duits",
"MP3": "MP3",
"WAV": "WV",
"Mono": "Monochroom",
"Dual": "Dubbel",
"GET": "KRIJG",
"POST": "POSTE",
"PATCH": "BEKIJK",
"PUT": "PUT",
"DELETE": "VERWIJDEREN",
"HEAD": "HOOFD",
"New Incoming SMS": "Nieuwe inkomende SMS",
"New Phone Number": "Nieuw telefoonnummer",
"New Recording": "Nieuwe opname",
"New Transcription": "Nieuwe transcriptie",
"New Call": "Nieuwe oproep",
"Triggers when a new SMS message is received": "Triggert wanneer een nieuw SMS-bericht wordt ontvangen",
"Triggers when you add a new phone number to your account.": "Triggert wanneer je een nieuw telefoonnummer aan je account toevoegt.",
"Triggers when a new call recording is completed and available.": "Triggert wanneer een nieuwe gespreksopname is voltooid en beschikbaar.",
"Triggers when a new call recording transcription is completed.": "Activeert wanneer een nieuwe gespreksopname is voltooid.",
"Triggers when a call completes (incoming or outgoing).": "Triggert wanneer een oproep wordt uitgevoerd (binnenkomende of uitgaande oproep)."
}

View File

@@ -0,0 +1,83 @@
{
"Cloud communications platform for building SMS, Voice & Messaging applications": "Plataforma de comunicações na nuvem para construir aplicativos de SMS, voz e mensagens",
"Account SID": "SID da Conta",
"The account SID to use to connect to Twilio": "O SID da conta a ser usada para conectar ao Twilio",
"Auth token": "Token de autenticação",
"The auth token to use to connect to Twilio": "O token de autenticação para conectar ao Twilio",
"The authentication to use to connect to Twilio": "A autenticação para conectar ao Twilio",
"Send SMS": "Enviar SMS",
"Phone Number Lookup": "Pesquisar números de telefone",
"Call Phone": "Telefone de Chamada",
"Get Message": "Obter mensagem",
"Download Recording Media": "Baixar Mídia de Gravação",
"Custom API Call": "Chamada de API personalizada",
"Send a new SMS message": "Enviar uma nova mensagem SMS",
"Lookup information about a phone number.": "Procurar informações sobre um número de telefone.",
"Call a number and say a message.": "Ligue para um número e diga uma mensagem.",
"Retrieves the details of a specific message.": "Recupera os detalhes de uma mensagem específica.",
"Download the media file for a specific recording.": "Baixe o arquivo de mídia para uma gravação específica.",
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
"From": "De",
"Message Body": "Corpo da Mensagem",
"To": "Para",
"Phone Number": "Número de telefone",
"Message to Say": "Mensagem a enviar",
"Voice": "Voz",
"Language": "IDIOMA",
"Send DTMF Tones": "Enviar Tons DTMF",
"Timeout (seconds)": "Tempo limite (segundos)",
"Message SID": "SID da mensagem",
"Recording SID": "Gravando SID",
"Format": "Formato",
"Channels": "Canais",
"Method": "Método",
"Headers": "Cabeçalhos",
"Query Parameters": "Parâmetros da consulta",
"Body": "Conteúdo",
"Response is Binary ?": "A resposta é binária ?",
"No Error on Failure": "Nenhum erro no Failure",
"Timeout (in seconds)": "Tempo limite (em segundos)",
"The phone number to send the message from": "Número de telefone de onde enviar a mensagem",
"The body of the message to send": "O corpo da mensagem a enviar",
"The phone number to send the message to": "Número de telefone para enviar a mensagem",
"The phone number to call. Must be in E.164 format (e.g., +15558675310).": "O número de telefone a ser chamado. Deve estar no formato E.164 (ex: +15558675310).",
"The text message to be converted to speech and spoken to the recipient.": "A mensagem de texto a ser convertida em fala e falada com o destinatário.",
"The voice to use for the text-to-speech message.": "A voz a ser usada para a mensagem de conversão de texto.",
"The language to use for the text-to-speech message.": "O idioma a ser usado na mensagem de conversão de texto.",
"A string of keys to dial after the call is connected. Use 'w' for a half-second pause.": "Uma sequência de caracteres de teclas para discar após a chamada ser conectada. Use 'w' para uma meia segunda pausa.",
"The number of seconds to let the phone ring before assuming no answer. Default is 60.": "O número de segundos para deixar o telefone tocar antes de não responder. O padrão é 60.",
"The unique identifier (SID) of the message to retrieve. It starts with \"SM\" or \"MM\".": "O identificador único (SID) da mensagem para recuperar. Começa com \"SM\" ou \"MM\".",
"The unique identifier (SID) of the recording to download. It starts with \"RE\".": "O identificador único (SID) da gravação para download. Ele começa com \"RE\".",
"The desired audio format for the download file.": "Formato de áudio desejado para o arquivo de download.",
"Specify whether to download a mono or dual-channel file. Note: Dual-channel may not be available for all recordings.": "Especifique se deseja baixar um arquivo de canal duplo ou mono. Nota: canal duplo pode não estar disponível para todas as gravações.",
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
"Alice (Default)": "Alice (Padrão)",
"Man": "Homem",
"Woman": "Mulher",
"English (US)": "Português Brasileiro (pt-BR)",
"English (UK)": "Inglês (Reino Unido)",
"Spanish": "espanhol",
"French": "francês",
"German": "alemão",
"MP3": "MP3",
"WAV": "WAV",
"Mono": "Monocromático",
"Dual": "Duplo",
"GET": "OBTER",
"POST": "POSTAR",
"PATCH": "COMPRAR",
"PUT": "COLOCAR",
"DELETE": "EXCLUIR",
"HEAD": "CABEÇA",
"New Incoming SMS": "Novo SMS de entrada",
"New Phone Number": "Novo número de telefone",
"New Recording": "Nova Gravação",
"New Transcription": "Nova Transcrição",
"New Call": "Nova Ligação",
"Triggers when a new SMS message is received": "Aciona quando uma nova mensagem SMS é recebida",
"Triggers when you add a new phone number to your account.": "Aciona quando você adiciona um novo número de telefone à sua conta.",
"Triggers when a new call recording is completed and available.": "Dispara quando uma nova gravação de chamadas for concluída e disponível.",
"Triggers when a new call recording transcription is completed.": "Dispara quando uma nova transcrição da gravação de chamadas for concluída.",
"Triggers when a call completes (incoming or outgoing).": "Dispara quando uma chamada é concluída (entrada ou saída)."
}

View File

@@ -0,0 +1,34 @@
{
"Twilio": "Твилио",
"Cloud communications platform for building SMS, Voice & Messaging applications": "Облачная платформа связи для создания приложений, связанных с SMS, голосовой связью и сообщениями",
"Account SID": "SID клиента",
"The account SID to use to connect to Twilio": "SID аккаунта для подключения к Twilio",
"Auth token": "Токен аутентификации",
"The auth token to use to connect to Twilio": "Токен авторизации, используемый для подключения к Twilio",
"The authentication to use to connect to Twilio": "Аутентификация, используемая для подключения к Twilio",
"Send SMS": "Отправить СМС",
"Custom API Call": "Пользовательский вызов API",
"Send a new SMS message": "Отправить новое SMS-сообщение",
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
"From": "От",
"Message Body": "Тело сообщения",
"To": "Кому",
"Method": "Метод",
"Headers": "Заголовки",
"Query Parameters": "Параметры запроса",
"Body": "Тело",
"No Error on Failure": "Нет ошибок при ошибке",
"Timeout (in seconds)": "Таймаут (в секундах)",
"The phone number to send the message from": "Номер телефона для отправки сообщения от",
"The body of the message to send": "Тело сообщения для отправки",
"The phone number to send the message to": "Номер телефона для отправки сообщения",
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
"GET": "ПОЛУЧИТЬ",
"POST": "ПОСТ",
"PATCH": "ПАТЧ",
"PUT": "ПОКУПИТЬ",
"DELETE": "УДАЛИТЬ",
"HEAD": "HEAD",
"New Incoming SMS": "Новые входящие SMS",
"Triggers when a new SMS message is received": "Включает при получении нового SMS-сообщения"
}

View File

@@ -0,0 +1,83 @@
{
"Cloud communications platform for building SMS, Voice & Messaging applications": "Cloud communications platform for building SMS, Voice & Messaging applications",
"Account SID": "Account SID",
"The account SID to use to connect to Twilio": "The account SID to use to connect to Twilio",
"Auth token": "Auth token",
"The auth token to use to connect to Twilio": "The auth token to use to connect to Twilio",
"The authentication to use to connect to Twilio": "The authentication to use to connect to Twilio",
"Send SMS": "Send SMS",
"Phone Number Lookup": "Phone Number Lookup",
"Call Phone": "Call Phone",
"Get Message": "Get Message",
"Download Recording Media": "Download Recording Media",
"Custom API Call": "Custom API Call",
"Send a new SMS message": "Send a new SMS message",
"Lookup information about a phone number.": "Lookup information about a phone number.",
"Call a number and say a message.": "Call a number and say a message.",
"Retrieves the details of a specific message.": "Retrieves the details of a specific message.",
"Download the media file for a specific recording.": "Download the media file for a specific recording.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"From": "From",
"Message Body": "Message Body",
"To": "To",
"Phone Number": "Phone Number",
"Message to Say": "Message to Say",
"Voice": "Voice",
"Language": "Language",
"Send DTMF Tones": "Send DTMF Tones",
"Timeout (seconds)": "Timeout (seconds)",
"Message SID": "Message SID",
"Recording SID": "Recording SID",
"Format": "Format",
"Channels": "Channels",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"The phone number to send the message from": "The phone number to send the message from",
"The body of the message to send": "The body of the message to send",
"The phone number to send the message to": "The phone number to send the message to",
"The phone number to call. Must be in E.164 format (e.g., +15558675310).": "The phone number to call. Must be in E.164 format (e.g., +15558675310).",
"The text message to be converted to speech and spoken to the recipient.": "The text message to be converted to speech and spoken to the recipient.",
"The voice to use for the text-to-speech message.": "The voice to use for the text-to-speech message.",
"The language to use for the text-to-speech message.": "The language to use for the text-to-speech message.",
"A string of keys to dial after the call is connected. Use 'w' for a half-second pause.": "A string of keys to dial after the call is connected. Use 'w' for a half-second pause.",
"The number of seconds to let the phone ring before assuming no answer. Default is 60.": "The number of seconds to let the phone ring before assuming no answer. Default is 60.",
"The unique identifier (SID) of the message to retrieve. It starts with \"SM\" or \"MM\".": "The unique identifier (SID) of the message to retrieve. It starts with \"SM\" or \"MM\".",
"The unique identifier (SID) of the recording to download. It starts with \"RE\".": "The unique identifier (SID) of the recording to download. It starts with \"RE\".",
"The desired audio format for the download file.": "The desired audio format for the download file.",
"Specify whether to download a mono or dual-channel file. Note: Dual-channel may not be available for all recordings.": "Specify whether to download a mono or dual-channel file. Note: Dual-channel may not be available for all recordings.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"Alice (Default)": "Alice (Default)",
"Man": "Man",
"Woman": "Woman",
"English (US)": "English (US)",
"English (UK)": "English (UK)",
"Spanish": "Spanish",
"French": "French",
"German": "German",
"MP3": "MP3",
"WAV": "WAV",
"Mono": "Mono",
"Dual": "Dual",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Incoming SMS": "New Incoming SMS",
"New Phone Number": "New Phone Number",
"New Recording": "New Recording",
"New Transcription": "New Transcription",
"New Call": "New Call",
"Triggers when a new SMS message is received": "Triggers when a new SMS message is received",
"Triggers when you add a new phone number to your account.": "Triggers when you add a new phone number to your account.",
"Triggers when a new call recording is completed and available.": "Triggers when a new call recording is completed and available.",
"Triggers when a new call recording transcription is completed.": "Triggers when a new call recording transcription is completed.",
"Triggers when a call completes (incoming or outgoing).": "Triggers when a call completes (incoming or outgoing)."
}

View File

@@ -0,0 +1,34 @@
{
"Twilio": "Twilio",
"Cloud communications platform for building SMS, Voice & Messaging applications": "Cloud communications platform for building SMS, Voice & Messaging applications",
"Account SID": "Account SID",
"The account SID to use to connect to Twilio": "The account SID to use to connect to Twilio",
"Auth token": "Auth token",
"The auth token to use to connect to Twilio": "The auth token to use to connect to Twilio",
"The authentication to use to connect to Twilio": "The authentication to use to connect to Twilio",
"Send SMS": "Send SMS",
"Custom API Call": "Custom API Call",
"Send a new SMS message": "Send a new SMS message",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"From": "From",
"Message Body": "Message Body",
"To": "To",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"The phone number to send the message from": "The phone number to send the message from",
"The body of the message to send": "The body of the message to send",
"The phone number to send the message to": "The phone number to send the message to",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Incoming SMS": "New Incoming SMS",
"Triggers when a new SMS message is received": "Triggers when a new SMS message is received"
}

View File

@@ -0,0 +1,83 @@
{
"Cloud communications platform for building SMS, Voice & Messaging applications": "Cloud communications platform for building SMS, Voice & Messaging applications",
"Account SID": "Account SID",
"The account SID to use to connect to Twilio": "The account SID to use to connect to Twilio",
"Auth token": "Auth token",
"The auth token to use to connect to Twilio": "The auth token to use to connect to Twilio",
"The authentication to use to connect to Twilio": "The authentication to use to connect to Twilio",
"Send SMS": "Send SMS",
"Phone Number Lookup": "Phone Number Lookup",
"Call Phone": "Call Phone",
"Get Message": "Get Message",
"Download Recording Media": "Download Recording Media",
"Custom API Call": "自定义 API 呼叫",
"Send a new SMS message": "Send a new SMS message",
"Lookup information about a phone number.": "Lookup information about a phone number.",
"Call a number and say a message.": "Call a number and say a message.",
"Retrieves the details of a specific message.": "Retrieves the details of a specific message.",
"Download the media file for a specific recording.": "Download the media file for a specific recording.",
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
"From": "From",
"Message Body": "Message Body",
"To": "To",
"Phone Number": "Phone Number",
"Message to Say": "Message to Say",
"Voice": "Voice",
"Language": "Language",
"Send DTMF Tones": "Send DTMF Tones",
"Timeout (seconds)": "Timeout (seconds)",
"Message SID": "Message SID",
"Recording SID": "Recording SID",
"Format": "Format",
"Channels": "Channels",
"Method": "方法",
"Headers": "信头",
"Query Parameters": "查询参数",
"Body": "正文内容",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "失败时没有错误",
"Timeout (in seconds)": "超时(秒)",
"The phone number to send the message from": "The phone number to send the message from",
"The body of the message to send": "The body of the message to send",
"The phone number to send the message to": "The phone number to send the message to",
"The phone number to call. Must be in E.164 format (e.g., +15558675310).": "The phone number to call. Must be in E.164 format (e.g., +15558675310).",
"The text message to be converted to speech and spoken to the recipient.": "The text message to be converted to speech and spoken to the recipient.",
"The voice to use for the text-to-speech message.": "The voice to use for the text-to-speech message.",
"The language to use for the text-to-speech message.": "The language to use for the text-to-speech message.",
"A string of keys to dial after the call is connected. Use 'w' for a half-second pause.": "A string of keys to dial after the call is connected. Use 'w' for a half-second pause.",
"The number of seconds to let the phone ring before assuming no answer. Default is 60.": "The number of seconds to let the phone ring before assuming no answer. Default is 60.",
"The unique identifier (SID) of the message to retrieve. It starts with \"SM\" or \"MM\".": "The unique identifier (SID) of the message to retrieve. It starts with \"SM\" or \"MM\".",
"The unique identifier (SID) of the recording to download. It starts with \"RE\".": "The unique identifier (SID) of the recording to download. It starts with \"RE\".",
"The desired audio format for the download file.": "The desired audio format for the download file.",
"Specify whether to download a mono or dual-channel file. Note: Dual-channel may not be available for all recordings.": "Specify whether to download a mono or dual-channel file. Note: Dual-channel may not be available for all recordings.",
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"Alice (Default)": "Alice (Default)",
"Man": "Man",
"Woman": "Woman",
"English (US)": "English (US)",
"English (UK)": "English (UK)",
"Spanish": "Spanish",
"French": "French",
"German": "German",
"MP3": "MP3",
"WAV": "WAV",
"Mono": "Mono",
"Dual": "Dual",
"GET": "获取",
"POST": "帖子",
"PATCH": "PATCH",
"PUT": "弹出",
"DELETE": "删除",
"HEAD": "黑色",
"New Incoming SMS": "New Incoming SMS",
"New Phone Number": "New Phone Number",
"New Recording": "New Recording",
"New Transcription": "New Transcription",
"New Call": "New Call",
"Triggers when a new SMS message is received": "Triggers when a new SMS message is received",
"Triggers when you add a new phone number to your account.": "Triggers when you add a new phone number to your account.",
"Triggers when a new call recording is completed and available.": "Triggers when a new call recording is completed and available.",
"Triggers when a new call recording transcription is completed.": "Triggers when a new call recording transcription is completed.",
"Triggers when a call completes (incoming or outgoing).": "Triggers when a call completes (incoming or outgoing)."
}

View File

@@ -0,0 +1,63 @@
import { createCustomApiCallAction } from '@activepieces/pieces-common';
import { PieceAuth, createPiece } from '@activepieces/pieces-framework';
import { PieceCategory } from '@activepieces/shared';
import { twilioSendSms } from './lib/action/send-sms';
import { twilioNewIncomingSms } from './lib/trigger/new-incoming-sms';
import { twilioPhoneNumberLookup } from './lib/action/phone-number-lookup';
import { twilioMakeCall } from './lib/action/make-call';
import { twilioGetMessage } from './lib/action/get-message';
import { twilioDownloadRecordingMedia } from './lib/action/download-recording-media';
import { twilioNewPhoneNumber } from './lib/trigger/new-phone-number';
import { twilioNewRecording } from './lib/trigger/new-recording';
import { twilioNewTranscription } from './lib/trigger/new-transcription';
import { twilioNewCall } from './lib/trigger/new-call';
export const twilioAuth = PieceAuth.BasicAuth({
description: 'The authentication to use to connect to Twilio',
required: true,
username: {
displayName: 'Account SID',
description: 'The account SID to use to connect to Twilio',
},
password: {
displayName: 'Auth token',
description: 'The auth token to use to connect to Twilio',
},
});
export const twilio = createPiece({
displayName: 'Twilio',
description:
'Cloud communications platform for building SMS, Voice & Messaging applications',
minimumSupportedRelease: '0.30.0',
logoUrl: 'https://cdn.activepieces.com/pieces/twilio.png',
auth: twilioAuth,
categories: [PieceCategory.COMMUNICATION],
actions: [
twilioSendSms,
twilioPhoneNumberLookup,
twilioMakeCall,
twilioGetMessage,
twilioDownloadRecordingMedia,
createCustomApiCallAction({
baseUrl: () => 'https://api.twilio.com/2010-04-01',
auth: twilioAuth,
authMapping: async (auth) => ({
Authorization: `Basic ${Buffer.from(
`${auth.username}:${
auth.password
}`
).toString('base64')}`,
}),
}),
],
authors: ["kishanprmr","MoShizzle","khaledmashaly","abuaboud"],
triggers: [twilioNewIncomingSms,
twilioNewPhoneNumber,
twilioNewRecording,
twilioNewTranscription,
twilioNewCall
],
});

View File

@@ -0,0 +1,72 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod, httpClient, AuthenticationType, QueryParams } from '@activepieces/pieces-common';
import { twilioAuth } from '../..';
export const twilioDownloadRecordingMedia = createAction({
auth: twilioAuth,
name: 'download_recording_media',
displayName: 'Download Recording Media',
description: 'Download the media file for a specific recording.',
props: {
recording_sid: Property.ShortText({
displayName: 'Recording SID',
description: 'The unique identifier (SID) of the recording to download. It starts with "RE".',
required: true,
}),
format: Property.StaticDropdown({
displayName: 'Format',
description: 'The desired audio format for the download file.',
required: false,
defaultValue: 'mp3',
options: {
options: [
{ label: 'MP3', value: 'mp3' },
{ label: 'WAV', value: 'wav' },
],
},
}),
channels: Property.StaticDropdown({
displayName: 'Channels',
description: 'Specify whether to download a mono or dual-channel file. Note: Dual-channel may not be available for all recordings.',
required: false,
options: {
options: [
{ label: 'Mono', value: 1 },
{ label: 'Dual', value: 2 },
]
}
})
},
async run(context) {
const { recording_sid, format, channels } = context.propsValue;
const account_sid = context.auth.username;
const auth_token = context.auth.password;
const fileFormat = format ?? 'mp3';
const path = `Recordings/${recording_sid}.${fileFormat}`;
const queryParams: QueryParams = {};
if (channels) {
queryParams['RequestedChannels'] = channels.toString();
}
const response = await httpClient.sendRequest<ArrayBuffer>({
method: HttpMethod.GET,
url: `https://api.twilio.com/2010-04-01/Accounts/${account_sid}/${path}`,
queryParams: queryParams,
authentication: {
type: AuthenticationType.BASIC,
username: account_sid,
password: auth_token,
},
responseType: 'arraybuffer',
});
const fileData = Buffer.from(response.body);
return await context.files.write({
fileName: `${recording_sid}.${fileFormat}`,
data: fileData,
});
},
});

View File

@@ -0,0 +1,33 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { callTwilioApi } from '../common';
import { twilioAuth } from '../..';
export const twilioGetMessage = createAction({
auth: twilioAuth,
name: 'get_message',
description: 'Retrieves the details of a specific message.',
displayName: 'Get Message',
props: {
message_sid: Property.ShortText({
displayName: 'Message SID',
description: 'The unique identifier (SID) of the message to retrieve. It starts with "SM" or "MM".',
required: true,
}),
},
async run(context) {
const { message_sid } = context.propsValue;
const account_sid = context.auth.username;
const auth_token = context.auth.password;
const path = `Messages/${message_sid}.json`;
const response = await callTwilioApi(
HttpMethod.GET,
path,
{ account_sid, auth_token }
);
return response.body;
},
});

View File

@@ -0,0 +1,99 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { callTwilioApi, twilioCommon } from '../common';
import { twilioAuth } from '../..';
export const twilioMakeCall = createAction({
auth: twilioAuth,
name: 'make_call',
description: 'Call a number and say a message.',
displayName: 'Call Phone',
props: {
from: twilioCommon.phone_number,
to: Property.ShortText({
displayName: 'To',
description: 'The phone number to call. Must be in E.164 format (e.g., +15558675310).',
required: true,
}),
message: Property.LongText({
displayName: 'Message to Say',
description: 'The text message to be converted to speech and spoken to the recipient.',
required: true,
}),
voice: Property.StaticDropdown({
displayName: 'Voice',
description: 'The voice to use for the text-to-speech message.',
required: false,
options: {
options: [
{ label: 'Alice (Default)', value: 'alice' },
{ label: 'Man', value: 'man' },
{ label: 'Woman', value: 'woman' },
]
}
}),
language: Property.StaticDropdown({
displayName: 'Language',
description: 'The language to use for the text-to-speech message.',
required: false,
options: {
options: [
{ label: 'English (US)', value: 'en-US' },
{ label: 'English (UK)', value: 'en-GB' },
{ label: 'Spanish', value: 'es-ES' },
{ label: 'French', value: 'fr-FR' },
{ label: 'German', value: 'de-DE' },
]
}
}),
sendDigits: Property.ShortText({
displayName: 'Send DTMF Tones',
description: "A string of keys to dial after the call is connected. Use 'w' for a half-second pause.",
required: false,
}),
timeout: Property.Number({
displayName: 'Timeout (seconds)',
description: 'The number of seconds to let the phone ring before assuming no answer. Default is 60.',
required: false,
})
},
async run(context) {
const { from, to, message, voice, language, sendDigits, timeout } = context.propsValue;
const account_sid = context.auth.username;
const auth_token = context.auth.password;
// Construct TwiML for the <Say> verb
const voiceAttr = voice ? ` voice="${voice}"` : '';
const langAttr = language ? ` language="${language}"` : '';
const escapedMessage = message
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&apos;');
const twiml = `<Response><Say${voiceAttr}${langAttr}>${escapedMessage}</Say></Response>`;
const bodyParams: Record<string, unknown> = {
From: from,
To: to,
Twiml: twiml,
};
if (sendDigits) {
bodyParams['SendDigits'] = sendDigits;
}
if (timeout) {
bodyParams['Timeout'] = timeout;
}
const response = await callTwilioApi(
HttpMethod.POST,
'Calls.json',
{ account_sid, auth_token },
bodyParams
);
return response.body;
},
});

View File

@@ -0,0 +1,37 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { AuthenticationType, httpClient, HttpMethod } from '@activepieces/pieces-common';
import { twilioAuth } from '../..';
export const twilioPhoneNumberLookup = createAction({
auth: twilioAuth,
name: 'phone_number_lookup',
description: 'Lookup information about a phone number.',
displayName: 'Phone Number Lookup',
props: {
phone_number:Property.ShortText({
displayName:'Phone Number',
required:true
})
},
async run(context) {
const { phone_number } = context.propsValue;
const account_sid = context.auth.username;
const auth_token = context.auth.password;
const response = await httpClient.sendRequest({
method:HttpMethod.GET,
url:`https://lookups.twilio.com/v2/PhoneNumbers/${encodeURIComponent(phone_number)}`,
authentication: {
type: AuthenticationType.BASIC,
username: account_sid,
password: auth_token,
},
queryParams:{
Fields:'line_type_intelligence'
}
})
return response.body
},
});

View File

@@ -0,0 +1,39 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { HttpMethod } from '@activepieces/pieces-common';
import { callTwilioApi, twilioCommon } from '../common';
import { twilioAuth } from '../..';
export const twilioSendSms = createAction({
auth: twilioAuth,
name: 'send_sms',
description: 'Send a new SMS message',
displayName: 'Send SMS',
props: {
from: twilioCommon.phone_number,
body: Property.ShortText({
description: 'The body of the message to send',
displayName: 'Message Body',
required: true,
}),
to: Property.ShortText({
description: 'The phone number to send the message to',
displayName: 'To',
required: true,
}),
},
async run(context) {
const { body, to, from } = context.propsValue;
const account_sid = context.auth.username;
const auth_token = context.auth.password;
return await callTwilioApi(
HttpMethod.POST,
'Messages.json',
{ account_sid, auth_token },
{
From: from,
Body: body,
To: to,
}
);
},
});

View File

@@ -0,0 +1,69 @@
import {
Property,
BasicAuthPropertyValue,
} from '@activepieces/pieces-framework';
import {
HttpMethod,
HttpMessageBody,
httpClient,
AuthenticationType,
} from '@activepieces/pieces-common';
import { twilioAuth } from '../..';
export const twilioCommon = {
phone_number: Property.Dropdown({
auth: twilioAuth,
description: 'The phone number to send the message from',
displayName: 'From',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'connect your account first',
options: [],
};
}
const basicAuthProperty = auth;
const response = await callTwilioApi<{
incoming_phone_numbers: {
phone_number: string;
friendly_name: string;
}[];
}>(HttpMethod.GET, 'IncomingPhoneNumbers.json', {
account_sid: basicAuthProperty.username,
auth_token: basicAuthProperty.password,
});
return {
disabled: false,
options: response.body.incoming_phone_numbers.map((number: any) => ({
value: number.phone_number,
label: number.friendly_name,
})),
};
},
}),
};
export const callTwilioApi = async <T extends HttpMessageBody>(
method: HttpMethod,
path: string,
auth: { account_sid: string; auth_token: string },
body?: any
) => {
return await httpClient.sendRequest<T>({
method,
url: `https://api.twilio.com/2010-04-01/Accounts/${auth.account_sid}/${path}`,
authentication: {
type: AuthenticationType.BASIC,
username: auth.account_sid,
password: auth.auth_token,
},
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: body,
});
};

View File

@@ -0,0 +1,153 @@
import { createTrigger, TriggerStrategy, PiecePropValueSchema, AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework';
import { twilioAuth } from '../..';
import { AuthenticationType, DedupeStrategy, httpClient, HttpMethod, Polling, pollingHelper } from '@activepieces/pieces-common';
interface Call {
sid: string;
status: string;
direction: string;
from: string;
to: string;
start_time: string;
end_time: string;
duration: string;
price: string;
price_unit: string;
date_created:string
}
interface CallsResponse {
calls: Call[];
next_page_uri:string
}
const polling: Polling<
AppConnectionValueForAuthProperty<typeof twilioAuth>,
Record<string, unknown>
> = {
strategy: DedupeStrategy.TIMEBASED,
async items({ auth, lastFetchEpochMS }) {
const isTest = lastFetchEpochMS === 0;
const account_sid = auth.username;
const auth_token = auth.password;
let currentUri:
| string
| null = `/2010-04-01/Accounts/${account_sid}/Calls.json?PageSize=${
isTest ? 1 : 1000
}`;
const results = [];
let stop = false;
do {
const response: any = await httpClient.sendRequest({
method: HttpMethod.GET,
url: `https://api.twilio.com${currentUri}`,
authentication: {
type: AuthenticationType.BASIC,
username: account_sid,
password: auth_token,
},
});
const payload = response.body as CallsResponse;
const calls = payload.calls ?? [];
for (const call of calls) {
const ts = new Date(call.date_created).getTime();
if(call.status !== 'completed') continue;
if (isTest || ts > lastFetchEpochMS) {
results.push(call);
} else {
stop = true;
break;
}
}
if (isTest) break;
currentUri = payload?.next_page_uri ?? null;
} while (currentUri && !stop);
return results.map((call) => {
return {
epochMilliSeconds: new Date(call.date_created).getTime(),
data: call,
};
});
},
};
export const twilioNewCall = createTrigger({
auth: twilioAuth,
name: 'new_call',
displayName: 'New Call',
description: 'Triggers when a call completes (incoming or outgoing).',
props: {},
sampleData:{
"account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"answered_by": "machine_start",
"api_version": "2010-04-01",
"caller_name": "callerid1",
"date_created": "Fri, 18 Oct 2019 17:00:00 +0000",
"date_updated": "Fri, 18 Oct 2019 17:01:00 +0000",
"direction": "outbound-api",
"duration": "4",
"end_time": "Fri, 18 Oct 2019 17:03:00 +0000",
"forwarded_from": "calledvia1",
"from": "+13051416799",
"from_formatted": "(305) 141-6799",
"group_sid": "GPdeadbeefdeadbeefdeadbeefdeadbeef",
"parent_call_sid": "CAdeadbeefdeadbeefdeadbeefdeadbeef",
"phone_number_sid": "PNdeadbeefdeadbeefdeadbeefdeadbeef",
"price": "-0.200",
"price_unit": "USD",
"sid": "CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"start_time": "Fri, 18 Oct 2019 17:02:00 +0000",
"status": "completed",
"subresource_uris": {
"notifications": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Notifications.json",
"recordings": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings.json",
"payments": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Payments.json",
"events": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Events.json",
"siprec": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Siprec.json",
"streams": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Streams.json",
"transcriptions": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Transcriptions.json",
"user_defined_message_subscriptions": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/UserDefinedMessageSubscriptions.json",
"user_defined_messages": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/UserDefinedMessages.json"
},
"to": "+13051913581",
"to_formatted": "(305) 191-3581",
"trunk_sid": "TKdeadbeefdeadbeefdeadbeefdeadbeef",
"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Calls/CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json",
"queue_time": "1000"
},
type: TriggerStrategy.POLLING,
async onEnable(context) {
await pollingHelper.onEnable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async onDisable(context) {
await pollingHelper.onDisable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async test(context) {
return await pollingHelper.test(polling, context);
},
async run(context) {
return await pollingHelper.poll(polling, context);
},
});

View File

@@ -0,0 +1,120 @@
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
import {
HttpMethod,
HttpResponse,
httpClient,
AuthenticationType,
} from '@activepieces/pieces-common';
import { callTwilioApi, twilioCommon } from '../common';
import { twilioAuth } from '../..';
export const twilioNewIncomingSms = createTrigger({
auth: twilioAuth,
name: 'new_incoming_sms',
displayName: 'New Incoming SMS',
description: 'Triggers when a new SMS message is received',
props: {
phone_number: twilioCommon.phone_number,
},
sampleData: {
body: 'Hello',
num_segments: '1',
direction: 'inbound',
from: '+12184191735',
date_updated: 'Wed, 08 Feb 2023 01:40:51 +0000',
price: null,
error_message: null,
uri: '/2010-04-01/Accounts/ACc0ea1238d61fe90d78a69a3de71d45619/Messages/SM8c3920d3f2ac481ba83e639a69dadd63.json',
account_sid: 'ACc0ea716d61fe90d78a123a3de71d45619',
num_media: '0',
to: '+12184191735',
date_created: 'Wed, 08 Feb 2023 01:40:50 +0000',
status: 'failed',
sid: 'SM8c3920d3f2ac481ba83e639a69dadd63',
date_sent: 'Wed, 08 Feb 2023 01:40:51 +0000',
messaging_service_sid: 'MG88e323e6a88ce67ba3bf12e1bcb7e0b8',
error_code: 21211,
price_unit: 'USD',
api_version: '2010-04-01',
subresource_uris: {
media:
'/2010-04-01/Accounts/ACc0ea716d61fe90d78a69a3de71d45619/Messages/SM8c3920d3f2ac481ba83e639a69dadd63/Media.json',
feedback:
'/2010-04-01/Accounts/ACc0ea716d61fe90d78a69a3de71d45619/Messages/SM8c3920d3f2ac481ba83e639a69dadd63/Feedback.json',
},
},
// Twilio API only allows one webhook per phone number, so we need to poll
type: TriggerStrategy.POLLING,
async onEnable(context) {
const { phone_number } = context.propsValue;
const account_sid = context.auth.username;
const auth_token = context.auth.password;
const response = await callTwilioApi<MessagePaginationResponse>(
HttpMethod.GET,
`Messages.json?PageSize=20&To=${phone_number}`,
{ account_sid, auth_token },
{}
);
await context.store.put<LastMessage>('_new_incoming_sms_trigger', {
lastMessageId:
response.body.messages.length === 0
? null
: response.body.messages[0].sid,
});
},
async onDisable(context) {
await context.store.put('_new_incoming_sms_trigger', null);
},
async run(context) {
const account_sid = context.auth.username;
const auth_token = context.auth.password;
const newMessages: unknown[] = [];
const lastMessage = await context.store.get<LastMessage>(
'_new_incoming_sms_trigger'
);
let currentUri:
| string
| null = `2010-04-01/Accounts/${account_sid}/Messages.json?PageSize=20&To=${context.propsValue.phone_number}`;
let firstMessageId = undefined;
while (currentUri !== undefined && currentUri !== null) {
const res: HttpResponse<MessagePaginationResponse> =
await httpClient.sendRequest<MessagePaginationResponse>({
method: HttpMethod.GET,
url: `https://api.twilio.com/${currentUri}`,
authentication: {
type: AuthenticationType.BASIC,
username: account_sid,
password: auth_token,
},
});
const messages = res.body.messages;
if (!firstMessageId && messages.length > 0) {
firstMessageId = messages[0].sid;
}
currentUri = res.body.next_page_uri;
for (let i = 0; i < messages.length; i++) {
const message = messages[i];
if (message.sid === lastMessage?.lastMessageId) {
currentUri = null;
break;
}
if (message.direction === 'inbound') {
newMessages.push(message);
}
}
}
await context.store.put<LastMessage>('_new_incoming_sms_trigger', {
lastMessageId: firstMessageId ?? lastMessage!.lastMessageId,
});
return newMessages;
},
});
interface LastMessage {
lastMessageId: string | null;
}
interface MessagePaginationResponse {
messages: { sid: string; to: string; status: string; direction: string }[];
next_page_uri: string;
}

View File

@@ -0,0 +1,146 @@
import {
AppConnectionValueForAuthProperty,
createTrigger,
PiecePropValueSchema,
TriggerStrategy,
} from '@activepieces/pieces-framework';
import {
AuthenticationType,
DedupeStrategy,
httpClient,
HttpMethod,
Polling,
pollingHelper,
} from '@activepieces/pieces-common';
import { twilioAuth } from '../..';
// The full structure of an IncomingPhoneNumber object from the Twilio API
interface TwilioPhoneNumber {
sid: string;
account_sid: string;
friendly_name: string;
phone_number: string;
voice_url: string;
voice_method: string;
sms_url: string;
sms_method: string;
date_created: string;
date_updated: string;
capabilities: {
voice: boolean;
sms: boolean;
mms: boolean;
};
uri: string;
}
interface IncomingPhoneNumbersResponse {
incoming_phone_numbers: TwilioPhoneNumber[];
next_page_uri:string
}
const polling: Polling<
AppConnectionValueForAuthProperty<typeof twilioAuth>,
Record<string, unknown>
> = {
strategy: DedupeStrategy.TIMEBASED,
async items({ auth, lastFetchEpochMS }) {
const isTest = lastFetchEpochMS === 0;
const account_sid = auth.username;
const auth_token = auth.password;
let currentUri:
| string
| null = `/2010-04-01/Accounts/${account_sid}/IncomingPhoneNumbers.json?PageSize=${
isTest ? 10 : 1000
}`;
const results = [];
let stop = false;
do {
const response: any = await httpClient.sendRequest({
method: HttpMethod.GET,
url: `https://api.twilio.com${currentUri}`,
authentication: {
type: AuthenticationType.BASIC,
username: account_sid,
password: auth_token,
},
});
const payload = response.body as IncomingPhoneNumbersResponse;
const numbers = payload.incoming_phone_numbers ?? [];
for (const num of numbers) {
const ts = new Date(num.date_created).getTime();
if (isTest || ts > lastFetchEpochMS) {
results.push(num);
} else {
stop = true;
break;
}
}
if (isTest) break;
currentUri = payload?.next_page_uri ?? null;
} while (currentUri && !stop);
return results.map((num) => {
return {
epochMilliSeconds: new Date(num.date_created).getTime(),
data: num,
};
});
},
};
export const twilioNewPhoneNumber = createTrigger({
auth: twilioAuth,
name: 'new_phone_number',
displayName: 'New Phone Number',
description: 'Triggers when you add a new phone number to your account.',
props: {},
sampleData: {
sid: 'PNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
account_sid: 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
friendly_name: '(555) 123-4567',
phone_number: '+15551234567',
voice_url: 'https://demo.twilio.com/welcome/voice/',
voice_method: 'POST',
sms_url: 'https://demo.twilio.com/welcome/sms/',
sms_method: 'POST',
date_created: '2025-08-28T11:44:10+00:00',
date_updated: '2025-08-28T11:44:10+00:00',
capabilities: {
voice: true,
sms: true,
mms: true,
},
uri: '/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/IncomingPhoneNumbers/PNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.json',
},
type: TriggerStrategy.POLLING,
async onEnable(context) {
await pollingHelper.onEnable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async onDisable(context) {
await pollingHelper.onDisable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async test(context) {
return await pollingHelper.test(polling, context);
},
async run(context) {
return await pollingHelper.poll(polling, context);
},
});

View File

@@ -0,0 +1,137 @@
import { AppConnectionValueForAuthProperty, createTrigger, PiecePropValueSchema, TriggerStrategy } from '@activepieces/pieces-framework';
import { AuthenticationType, DedupeStrategy, httpClient, HttpMethod, Polling, pollingHelper } from '@activepieces/pieces-common';
import { twilioAuth } from '../..';
interface Recording {
sid: string;
status: string;
date_created: string;
call_sid: string;
duration: string;
source: string;
price: string;
price_unit: string;
}
interface RecordingsResponse {
recordings: Recording[];
next_page_uri:string
}
const polling: Polling<
AppConnectionValueForAuthProperty<typeof twilioAuth>,
Record<string, unknown>
> = {
strategy: DedupeStrategy.TIMEBASED,
async items({ auth, lastFetchEpochMS }) {
const isTest = lastFetchEpochMS === 0;
const account_sid = auth.username;
const auth_token = auth.password;
let currentUri:
| string
| null = `/2010-04-01/Accounts/${account_sid}/Recordings.json?PageSize=${
isTest ? 10 : 1000
}`;
const results = [];
let stop = false;
do {
const response: any = await httpClient.sendRequest({
method: HttpMethod.GET,
url: `https://api.twilio.com${currentUri}`,
authentication: {
type: AuthenticationType.BASIC,
username: account_sid,
password: auth_token,
},
});
const payload = response.body as RecordingsResponse;
const recordings = payload.recordings ?? [];
for (const recording of recordings) {
const ts = new Date(recording.date_created).getTime();
if (isTest || ts > lastFetchEpochMS) {
results.push(recording);
} else {
stop = true;
break;
}
}
if (isTest) break;
currentUri = payload?.next_page_uri ?? null;
} while (currentUri && !stop);
return results.map((recording) => {
return {
epochMilliSeconds: new Date(recording.date_created).getTime(),
data: recording,
};
});
},
};
export const twilioNewRecording = createTrigger({
auth: twilioAuth,
name: 'new_recording',
displayName: 'New Recording',
description: 'Triggers when a new call recording is completed and available.',
props: {},
sampleData: {
"account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"api_version": "2010-04-01",
"call_sid": "CAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"conference_sid": "CFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"channels": 1,
"date_created": "Fri, 14 Oct 2016 21:56:34 +0000",
"date_updated": "Fri, 14 Oct 2016 21:56:38 +0000",
"start_time": "Fri, 14 Oct 2016 21:56:34 +0000",
"price": "0.04",
"price_unit": "USD",
"duration": "4",
"sid": "REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"source": "StartConferenceRecordingAPI",
"status": "completed",
"error_code": null,
"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json",
"subresource_uris": {
"add_on_results": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/AddOnResults.json",
"transcriptions": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Transcriptions.json"
},
"encryption_details": {
"encryption_public_key_sid": "CRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"encryption_cek": "OV4h6zrsxMIW7h0Zfqwfn6TI2GCNl54KALlg8wn8YB8KYZhXt6HlgvBWAmQTlfYVeLWydMiCewY0YkDDT1xmNe5huEo9vjuKBS5OmYK4CZkSx1NVv3XOGrZHpd2Pl/5WJHVhUK//AUO87uh5qnUP2E0KoLh1nyCLeGcEkXU0RfpPn/6nxjof/n6m6OzZOyeIRK4Oed5+rEtjqFDfqT0EVKjs6JAxv+f0DCc1xYRHl2yV8bahUPVKs+bHYdy4PVszFKa76M/Uae4jFA9Lv233JqWcxj+K2UoghuGhAFbV/JQIIswY2CBYI8JlVSifSqNEl9vvsTJ8bkVMm3MKbG2P7Q==",
"encryption_iv": "8I2hhNIYNTrwxfHk"
},
"media_url": "http://api.twilio.com/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Recordings/REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
},
type: TriggerStrategy.POLLING,
async onEnable(context) {
await pollingHelper.onEnable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async onDisable(context) {
await pollingHelper.onDisable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async test(context) {
return await pollingHelper.test(polling, context);
},
async run(context) {
return await pollingHelper.poll(polling, context);
},
});

View File

@@ -0,0 +1,137 @@
import {
AppConnectionValueForAuthProperty,
createTrigger,
PiecePropValueSchema,
TriggerStrategy,
} from '@activepieces/pieces-framework';
import {
AuthenticationType,
DedupeStrategy,
httpClient,
HttpMethod,
Polling,
pollingHelper,
} from '@activepieces/pieces-common';
import { twilioAuth } from '../..';
interface Transcription {
sid: string;
status: string;
date_created: string;
recording_sid: string;
duration: string;
price: string;
price_unit: string;
transcription_text: string;
}
interface TranscriptionsResponse {
transcriptions: Transcription[];
next_page_uri: string;
}
const polling: Polling<
AppConnectionValueForAuthProperty<typeof twilioAuth>,
Record<string, unknown>
> = {
strategy: DedupeStrategy.TIMEBASED,
async items({ auth, lastFetchEpochMS }) {
const isTest = lastFetchEpochMS === 0;
const account_sid = auth.username;
const auth_token = auth.password;
let currentUri:
| string
| null = `/2010-04-01/Accounts/${account_sid}/Transcriptions.json?PageSize=${
isTest ? 10 : 1000
}`;
const results = [];
let stop = false;
do {
const response: any = await httpClient.sendRequest({
method: HttpMethod.GET,
url: `https://api.twilio.com${currentUri}`,
authentication: {
type: AuthenticationType.BASIC,
username: account_sid,
password: auth_token,
},
});
const payload = response.body as TranscriptionsResponse;
const transcriptions = payload.transcriptions ?? [];
for (const recording of transcriptions) {
const ts = new Date(recording.date_created).getTime();
if (recording.status !== 'completed') continue;
if (isTest || ts > lastFetchEpochMS) {
results.push(recording);
} else {
stop = true;
break;
}
}
if (isTest) break;
currentUri = payload?.next_page_uri ?? null;
} while (currentUri && !stop);
return results.map((recording) => {
return {
epochMilliSeconds: new Date(recording.date_created).getTime(),
data: recording,
};
});
},
};
export const twilioNewTranscription = createTrigger({
auth: twilioAuth,
name: 'new_transcription',
displayName: 'New Transcription',
description: 'Triggers when a new call recording transcription is completed.',
props: {},
sampleData: {
"account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"api_version": "2008-08-01",
"date_created": "Thu, 25 Aug 2011 20:59:45 +0000",
"date_updated": "Thu, 25 Aug 2011 20:59:45 +0000",
"duration": "10",
"price": "0.00000",
"price_unit": "USD",
"recording_sid": "REaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"sid": "TRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"status": "completed",
"transcription_text": null,
"type": "fast",
"uri": "/2010-04-01/Accounts/ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Transcriptions/TRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json"
},
type: TriggerStrategy.POLLING,
async onEnable(context) {
await pollingHelper.onEnable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async onDisable(context) {
await pollingHelper.onDisable(polling, {
auth: context.auth,
store: context.store,
propsValue: context.propsValue,
});
},
async test(context) {
return await pollingHelper.test(polling, context);
},
async run(context) {
return await pollingHelper.poll(polling, context);
},
});