Connect modules connect_s3

Platform

Connect S3 Recording Storage

Store Twilio recordings in your own S3 bucket.

Stores Twilio call recordings in your own AWS S3 bucket instead of Twilio’s cloud. You own the media lifecycle, Twilio stops billing you for storage, and the recordings sit under whatever encryption, retention and access policy your organisation already applies to its own buckets.

The design leans on Twilio doing the writing. Odoo provisions the bucket, generates the IAM policy, creates the Twilio-side AWS credential and then gets out of the way; from that point Twilio writes the audio directly to S3 and Odoo only reads it back for playback, proxy download and transcription. That keeps the Odoo worker off the media path entirely.

Everything downstream of the recording carries on as before. The player, the recordings list, Whisper transcription and the AI summary all work against the S3 object the same way they worked against Twilio’s copy, and because transcript and summary live on the call record, expiring the audio under a lifecycle rule costs you nothing but the audio.

What it offers

  • Twilio writes straight to your bucket

    Built on Twilio's External S3 Storage feature: once it is switched on, Twilio puts each recording into your bucket itself and the URL Odoo receives points at S3. Odoo never uploads audio, so no recording passes through the Odoo server on its way to storage.

  • Bucket provisioned from the settings page

    CREATE / CONFIGURE S3 BUCKET creates the bucket, blocks all public access, turns on SSE-S3 encryption at rest and installs the lifecycle rule for your retention. Pressing it again re-applies the configuration to an existing bucket rather than failing.

  • IAM policy generated for you

    Connect > Configuration > S3 Storage prints the exact IAM policy to paste into AWS, scoped to your bucket prefix (oduist-connect- by default) and containing no iam:* permissions. Every bucket name you type is forced to start with that prefix, so the policy and the bucket cannot drift apart.

  • Twilio credential created from Odoo

    CREATE TWILIO AWS CREDENTIAL registers your AWS access key with Twilio under the name connect-s3-recordings and shows the resulting SID, so AWS keys are never pasted into the Twilio Console. Pressing it again adopts the existing credential instead of duplicating it, and RECREATE TWILIO CREDENTIAL handles key rotation.

  • Retention you control, transcripts you keep

    Set Retention (days) and an S3 lifecycle rule deletes the audio that many days after the recording started; 0 keeps it forever. When a file is gone the player says Recording expired, the download answers HTTP 410 rather than an error page, and the recording row with its transcript and summary stays.

  • Playback and transcription unchanged

    Audio streams from your bucket through the same recording player and proxy download, and OpenAI transcription reads the media from S3, so transcripts and AI summaries keep working after the switch. The module owns no models of its own: it extends connect.settings and connect.recording and subclasses the core media controller.

Scope of the current version

  • Twilio recordings only. The module depends on connect_twilio and on Twilio's External S3 Storage feature; recordings from other providers are unaffected.
  • The boto3 Python package must be available in the Odoo environment.
  • Twilio exposes its voice recording settings in the Console only, so enabling external storage is a manual one-off step (Voice > Recordings > Settings). The Odoo settings page shows the checklist and the two values to paste.
  • There is no migration. Recordings made before the switch stay on Twilio and keep playing; the two kinds coexist indefinitely.
  • Once external storage is on, the audio is no longer fetchable from Twilio. If the AWS credentials in Odoo stop working, playback stops with them.
  • Rotating the AWS key also means re-selecting the new credential in the Twilio Console. Twilio keeps pointing at the old SID until you do, and recordings fail to upload in the meantime.

Installs with full features free for 30 days; buy the license inside the module.