rich-megabyte-73517
05/28/2026, 2:40 PMtall-airline-16756
05/28/2026, 2:40 PMtall-airline-16756
05/28/2026, 2:40 PMegress_ended / manifestLocation), in the backup manifest, in the S3 bucket listing, or in presigned URLs you generate.
2. How you create room names: do you pass the phone number with the + directly (e.g., +12125551234), or do you apply any encoding/normalization before calling LiveKit? If possible, paste the API call or code snippet you use to create the room (redact secrets).
3. Which LiveKit flow produced the files (egress recordings, backup egress, SIP dispatch), and whether backup egress is enabled.
4. Any patterns you’ve noticed for the ~3% (specific phone formats, SDK/server versions, regions, timestamps).
5. If available, a webhook payload or S3 PutObject/Access log for a recorded occurrence (timestamps help correlate).
With those items I’ll check whether the encoding comes from:
• LiveKit webhook/manifest URLs (which may contain percent-encoding in URL contexts),
• S3 object key handling or listings,
• presigned URLs or intermediate proxies, or
• your room-creation code.
Send one redacted example (webhook manifest + S3 listing) and the room-creation snippet and I’ll analyze it and recommend a fix or a robust workaround (e.g., normalizing when reading keys or using a deterministic mapping instead of raw room names).
Sources: Security Overview | LiveKit | Backup Egress Recordings, with interactive elementsrich-megabyte-73517
05/28/2026, 2:43 PM+ in the room name — e.g. outbound-call-_+12125551234_abc123def0. Only normalization is .strip() and prepend + if missing. No URL encoding or other transforms.
Inbound: LiveKit SIP sets the name (same idea: + in the string between underscores). phone-api doesn’t build thorich-megabyte-73517
05/28/2026, 2:43 PMtall-airline-16756
05/28/2026, 2:43 PM%2B instead of +.
Quick clarification so I can pinpoint the cause:
1. Where exactly do you observe %2B? (pick one)
◦ In the DB field your system writes from the egress webhook/manifest
◦ In the webhook/manifest payload itself (attach a redacted example)
◦ In the S3 object key as listed in the S3 console
◦ In a presigned URL
1. Please paste one redacted example of:
◦ The webhook/manifest value you receive (or the DB value saved), and
◦ The exact S3 object key or S3 console listing for the same recording.
◦ You can redact IDs/secrets but keep the path/room-name portion intact.
1. Which LiveKit egress flow produced this file? (egress recording, backup egress, SIP egress)
2. LiveKit server version or deployment (self-hosted or LiveKit Cloud) and approximate timestamps for a few occurrences, if available.
With those items I’ll analyze whether the percent-encoding happens before LiveKit writes to S3, in the webhook/manifest URLs, or when your code saves the path to the DB, and then recommend a targeted fix (or a robust normalization to avoid breakage).
, with interactive elements