
Xodera Plugins · Bubble Native
Xodera Audio Recorder Native
Permettez l’enregistrement d’une note vocale, l’écoute avant envoi et la conservation d’un brouillon local. Le téléversement se fait uniquement sur demande.
Guides bêta publics · instructions Haptics dans sa fiche Bubble
Offre bêta publique : installation Bubble gratuite · essai de 7 jours avec carte, puis 1,50 USD/mois par plugin/projet.
Documentation révisée 6 novembre 2026
Exemples pratiques
Écouter avant d’envoyer un message vocal non confidentiel
L’utilisateur doit pouvoir réécouter et remplacer son enregistrement avant de le joindre à un message.
`title = the app’s conversation label` ; définissez `max_duration_seconds` et `max_upload_bytes` selon votre politique de messagerie.
Start recording → Stop recording → attendre `recording_ready` → Play preview. Proposez Seek preview et Set preview speed. Seul Envoyer appelle Upload to Bubble vers le point d’envoi validé de votre app.
Uniquement sur `upload_succeeded`, créez votre Message et définissez son champ audio sur `uploaded_file`. Le message n’est pas créé par l’enregistreur lui‑-même.
En cas de refus du micro, affichez `permission_status`. Après un échec d’envoi, gardez l’enregistrement local. Réconciliez une réponse inconnue avant tout nouvel envoi pour éviter les doublons.
L’envoi Bubble crée un fichier audio public. Ne l’utilisez pas pour un enregistrement confidentiel.
S’entraîner à la prononciation sans envoi immédiat
L’apprenant veut écouter sa réponse avant de décider de la transmettre.
`title = Current Exercise’s prompt` ; `max_duration_seconds = the exercise limit` ; une réponse d’exercice reste un enregistrement appartenant à l’application.
Enregistrer → arrêter → Play preview. L’apprenant peut se déplacer, ralentir l’aperçu ou annuler pour recommencer. Save locally ne s’exécute que s’il veut garder le brouillon.
`duration`, `local_uri`, `mime_type` et `draft_id` décrivent la tentative. Votre app choisit de la garder localement ou de la transmettre plus tard par votre workflow d’envoi.
Sur `preview_error`, conservez le brouillon et affichez `error_code`. Un aperçu ou un brouillon local ne doit pas devenir une Réponse soumise avant la réussite du workflow d’envoi.
L’envoi Bubble crée un fichier audio public. Ne l’utilisez pas pour un enregistrement confidentiel.
Garder un brouillon vocal local et choisir quand l’envoyer
Un intervenant peut être interrompu ; il ne devrait pas devoir envoyer sa note pour la conserver.
`saved_draft_id = the draft ID stored by your app for this device and account` ; `title = the selected non-sensitive task label`.
Start/Stop recording → Save locally. Gardez le `draft_id` dans un état propre au compte et à l’appareil. Restore local draft reprend cet ID, puis Play preview permet de vérifier avant un éventuel envoi.
Sur `local_saved` ou `local_restored`, vérifiez `is_saved_locally`, `local_uri` et `duration`. Ne supprimez le brouillon qu’après un choix explicite ou une politique de conservation confirmée séparément.
Si la restauration échoue, affichez `error_code` et conservez l’ID pour le diagnostic ; ne signalez pas un enregistrement vide ou différent comme restauré. Ne faites jamais de téléversement auto lors d’une reconnexion.
L’envoi Bubble crée un fichier audio public. Ne l’utilisez pas pour un enregistrement confidentiel.
Ce qui fonctionne maintenant
Bêta publique. Utilisez les commandes et actions documentées ; testez les formats, les autorisations et le comportement dans votre propre app native. L’aperçu web ne valide pas les résultats sur appareil.
Construire le workflow
Utilisez les actions bêta disponibles ci-dessous et testez le résultat sur vos appareils cibles.
Les exemples utilisent des fiches comme Lesson, Message et Order. Remplacez-les par vos types de données et noms d’éléments. Utilisez vos propres fichiers à la place des adresses d’exemple.
Ajoutez l’enregistreur. document_context = Current User's unique id ; is_active indique si la vue d’enregistrement est ouverte.
Start recording demande le microphone. Pause et Resume gardent la même prise. Stop recording la termine ; attendez recording_ready avant de proposer écoute ou envoi.
Écoutez avec les commandes d’aperçu. Save locally garde un brouillon sur cet appareil ; après local_saved, conservez draft_id pour Restore local draft.
Expliquez que l’envoi crée un fichier public. Renseignez bubble_upload_url avec l’adresse de téléversement de votre app Bubble, en Development ou Live. Lancez Upload to Bubble seulement sur Envoyer ; à upload_succeeded, enregistrez uploaded_file dans la fiche.
Configurer une fois
Créez ou choisissez votre projet Bubble dans BestPlugins → Dashboard → Plugins. Choisissez Xodera Audio Recorder Native, copiez sa clé, puis ouvrez Bubble → Plugins → Xodera Audio Recorder Native et collez-la dans licensing_api_key. Enregistrez une fois, puis utilisez les actions ci-dessous. Chaque plugin de chaque projet possède sa propre clé.
Demandez le microphone au démarrage de l’enregistrement. Choisissez comment garder les brouillons. L’envoi Bubble crée un fichier public : utilisez uniquement un audio adapté à ce stockage.
Configurer une fois
- Créez ou choisissez votre projet Bubble dans BestPlugins → Dashboard → Plugins.
- Choisissez ce plugin et copiez sa clé de projet.
- Ouvrez Bubble → Plugins → ce plugin. Collez sa clé de projet dans licensing_api_key et enregistrez.
- Ajoutez l’élément, choisissez vos données et construisez le workflow ci-dessous.
- Dans le tableau de bord, vérifiez et confirmez l’essai de 7 jours avec carte pour ce plugin. Il coûte ensuite 1,50 USD/mois par projet, développement et production inclus. Annulez avant la fin de l’essai pour éviter le premier débit.
Installation et abonnement
Pour Audio Player, Video Player, Photo Editor, Audio Recorder, Files Kit et Haptics : installation Bubble gratuite, essai de 7 jours avec carte, puis 1,50 USD par mois, par plugin et projet. Développement et production inclus, sans plafond d’opérations. Les limites de fichier et de fonction restent applicables. Vérifiez facturation et annulation avant confirmation. Les autres plugins ne sont pas ouverts à l’achat.
Enregistrer le résultat dans votre app
Après upload_succeeded, renseignez VoiceMessage.audio = Recorder's uploaded_file, owner = Current User, duration = Recorder's duration et mime_type = Recorder's mime_type. draft_id restaure un brouillon sur cet appareil ; ce n’est pas un fichier audio en ligne.
Échec, annulation et reprise
Si le microphone est refusé, expliquez comment l’activer dans les réglages de l’appareil. Cancel recording abandonne la prise non enregistrée ; les brouillons restent. Si l’envoi est interrompu, gardez l’audio local et vérifiez son arrivée avant de renvoyer. Delete saved draft supprime seulement le brouillon choisi.
Fonctions et limites
Enregistrement maximal par défaut : 300 secondes ; configurable 1–3600. Limite de téléchargement par défaut : 10 MiB ; maximum 30 MiB. Délai d'expiration du téléchargement : 60 secondes, sans nouvelle tentative automatique. Les téléchargements Bubble sont publics. Seules vos propres adresses de téléchargement de fichiers *.bubbleapps.io sont prises en charge ; les domaines personnalisés ne le sont pas. Les brouillons locaux ne sont pas un stockage chiffré.
Réglages, actions et résultats
Utilisez ces noms dans Bubble. Les fonctionnalités prévues sont marquées séparément.
Paramètres bêta disponibles
Réglages de l’élément
title · textmax_duration_seconds · numbermax_upload_bytes · numberis_active · yes_nodisabled · yes_noui_text_json · textsaved_draft_id · textbubble_upload_url · textlanguage · textdocument_context · textÉtats
recorder_status · textpermission_status · textis_recording · yes_nois_paused · yes_noduration · numberlocal_uri · textdraft_id · textis_saved_locally · yes_nomime_type · textfile_size · numberwaveform_peaks_json · textpreview_status · textpreview_is_playing · yes_nopreview_current_time · numberupload_status · textupload_progress · numberuploaded_url · textuploaded_file · fileerror_code · textÉvénements
recording_startedrecording_pausedrecording_resumedrecording_stoppedrecording_readyrecording_cancelledrecorder_errorlocal_savedlocal_restoredlocal_deletedupload_succeededupload_failedupload_cancelledpreview_readypreview_errorActions et paramètres
Start recordingPause recordingResume recordingStop recordingCancel recordingSave locallyRestore local draftDelete saved draftUpload to BubbleCancel uploadPlay previewPause previewStop previewSeek previewSet preview speedRéglages de l’élément · 10
titletext · Défaut: ""- Valeur exemple
Lesson 4 — review - Expression Bubble exemple
Selected Lesson's name - Texte visible ; vide utilise le texte localisé prévu. Aucun identifiant secret.
max_duration_secondsnumber · Défaut: 300- Valeur exemple
300 - Expression Bubble exemple
Voice Settings' max_seconds - Utilisez la valeur de la fiche courante et les limites ci-dessous.
max_upload_bytesnumber · Défaut: 10485760- Valeur exemple
10485760 - Expression Bubble exemple
Voice Settings' max_upload_bytes - Utilisez la valeur de la fiche courante et les limites ci-dessous.
is_activeyes_no · Défaut: true- Valeur exemple
yes - Expression Bubble exemple
GuideHost's view_is_active (your yes/no custom state) - yes tant que cette vue est ouverte ; no en la quittant pour arrêter la lecture ou l’action en cours.
disabledyes_no · Défaut: false- Valeur exemple
no - Expression Bubble exemple
GuideHost's is_busy (your yes/no custom state) - Désactivez l’élément si l’app est occupée ou l’action indisponible.
ui_text_jsontext · Défaut: ""- Valeur exemple
{} - Expression Bubble exemple
App Settings' player_labels_json (supported keys only) - JSON facultatif avec les libellés de boutons pris en charge. Laissez vide pour les textes intégrés.
saved_draft_idtext · Défaut: ""- Valeur exemple
<returned draft_id> - Expression Bubble exemple
Selected VoiceDraft's draft_id - Utilisez la valeur de la fiche courante et les limites ci-dessous.
bubble_upload_urltext · Défaut: ""- Valeur exemple
https://your-app.bubbleapps.io/version-test/fileupload - Expression Bubble exemple
App Settings' selected_bubble_upload_url - Adresse de téléversement de votre app Bubble : /version-test/fileupload pour Development, /fileupload pour Live. Les fichiers envoyés sont publics.
languagetext · Défaut: "auto"- Valeur exemple
uk - Expression Bubble exemple
Current User's preferred_language - Utilisez language=auto pour suivre une langue prise en charge sur l’appareil ou dans le navigateur. Saisissez un code de langue pris en charge pour la choisir explicitement.
document_contexttext · Défaut: ""- Valeur exemple
<current-user-id> - Expression Bubble exemple
Current User's unique id - Valeur stable pour ce compte ou cette fiche. Réutilisez-la pour restaurer ses fichiers ou brouillons.
Actions et paramètres · 15
Start recording
Aucun paramètre d’action
Pause recording
Aucun paramètre d’action
Resume recording
Aucun paramètre d’action
Stop recording
Aucun paramètre d’action
Cancel recording
Aucun paramètre d’action
Save locally
Aucun paramètre d’action
Restore local draft
draft_idtext · Défaut: —- Valeur exemple
<returned draft_id> - Expression Bubble exemple
Selected VoiceDraft's draft_id - Utilisez la valeur de la fiche courante et les limites ci-dessous.
Delete saved draft
draft_idtext · Défaut: —- Valeur exemple
<returned draft_id> - Expression Bubble exemple
Selected VoiceDraft's draft_id - Utilisez la valeur de la fiche courante et les limites ci-dessous.
Upload to Bubble
Aucun paramètre d’action
Cancel upload
Aucun paramètre d’action
Play preview
Aucun paramètre d’action
Pause preview
Aucun paramètre d’action
Stop preview
Aucun paramètre d’action
Seek preview
secondsnumber · Défaut: —- Valeur exemple
12 - Expression Bubble exemple
Selected Comment's seconds - Utilisez la valeur de la fiche courante et les limites ci-dessous.
Set preview speed
ratenumber · Défaut: —- Valeur exemple
1.5 - Expression Bubble exemple
Preview Speed Dropdown's value - Utilisez la valeur de la fiche courante et les limites ci-dessous.
États et événements
États
recorder_status · textRésultat actuel de l’action. Attendez l’événement de fin correspondant avant de valider la réussite.
permission_status · textRésultat actuel de l’action. Attendez l’événement de fin correspondant avant de valider la réussite.
is_recording · yes_noValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
is_paused · yes_noValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
duration · numberValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
local_uri · textEmplacement du fichier sur cet appareil. Sauvegardez ou envoyez-le séparément pour le conserver en ligne.
draft_id · textIdentifiant de cet élément ou de cette action. Gardez-le avec la fiche correspondante. Réutilisez le même identifiant de demande si le résultat est incertain.
is_saved_locally · yes_noValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
mime_type · textValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
file_size · numberValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
waveform_peaks_json · textValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
preview_status · textRésultat actuel de l’action. Attendez l’événement de fin correspondant avant de valider la réussite.
preview_is_playing · yes_noValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
preview_current_time · numberValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
upload_status · textRésultat actuel de l’action. Attendez l’événement de fin correspondant avant de valider la réussite.
upload_progress · numberValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
uploaded_url · textValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
uploaded_file · fileFichier obtenu après upload_succeeded. Enregistrez-le dans votre champ Bubble File.
error_code · textInformation sur l’erreur de la dernière action. Affichez un message utile et proposez la bonne nouvelle tentative.
Événements
recording_startedÀ cet événement, lisez les états correspondants du même élément.
recording_pausedÀ cet événement, lisez les états correspondants du même élément.
recording_resumedÀ cet événement, lisez les états correspondants du même élément.
recording_stoppedÀ cet événement, lisez les états correspondants du même élément.
recording_readyÀ cet événement, lisez les états correspondants du même élément.
recording_cancelledÀ cet événement, lisez les états correspondants du même élément.
recorder_errorÀ cet événement, lisez les états correspondants du même élément.
local_savedÀ cet événement, lisez les états correspondants du même élément.
local_restoredÀ cet événement, lisez les états correspondants du même élément.
local_deletedÀ cet événement, lisez les états correspondants du même élément.
upload_succeededÀ cet événement, lisez les états correspondants du même élément.
upload_failedÀ cet événement, lisez les états correspondants du même élément.
upload_cancelledÀ cet événement, lisez les états correspondants du même élément.
preview_readyÀ cet événement, lisez les états correspondants du même élément.
preview_errorÀ cet événement, lisez les états correspondants du même élément.
Questions des développeurs
La sauvegarde locale téléverse-t-elle ?
Non. Save locally conserve un brouillon sur l’appareil. Upload to Bubble est distinct et public.
Comment fonctionne l’abonnement ?
Pour Audio Player, Video Player, Photo Editor, Audio Recorder, Files Kit et Haptics : installation Bubble gratuite, essai de 7 jours avec carte, puis 1,50 USD par mois, par plugin et projet. Développement et production inclus, sans plafond d’opérations. Les limites de fichier et de fonction restent applicables. Vérifiez facturation et annulation avant confirmation. Les autres plugins ne sont pas ouverts à l’achat.
Guides associés
Pour obtenir de l’aide, indiquez le plugin, l’appareil, l’action essayée et le résultat. Utilisez un exemple sans données personnelles. Ne partagez jamais votre clé ni vos fichiers privés.