Files
ladill-meet/config/meet.php
T
isaaccladandCursor ebc11691e2
Deploy Ladill Meet / deploy (push) Successful in 45s
Fix LiveKit egress preset call and attach completion webhook per job.
Pass null encoding preset to match the PHP SDK, and register the meet webhook on each egress start so LiveKit Cloud does not need a global webhook URL.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-04 03:42:28 +00:00

239 lines
8.0 KiB
PHP

<?php
return [
'roles' => [
'owner' => 'Owner',
'admin' => 'Administrator',
'moderator' => 'Moderator',
'member' => 'Member',
'guest' => 'Guest',
],
'room_types' => [
'instant' => 'Instant meeting',
'scheduled' => 'Scheduled meeting',
'personal' => 'Personal room',
'recurring' => 'Recurring meeting',
'webinar' => 'Webinar',
'town_hall' => 'Conference',
'space' => 'Room',
],
'room_statuses' => [
'scheduled' => 'Scheduled',
'live' => 'Live',
'ended' => 'Ended',
'cancelled' => 'Cancelled',
'recording_processing' => 'Recording processing',
],
'recording_statuses' => [
'recording' => 'Recording',
'processing' => 'Processing',
'ready' => 'Ready',
'failed' => 'Failed',
],
'recurrence_rules' => [
'daily' => 'Daily',
'weekly' => 'Weekly',
'monthly' => 'Monthly',
],
'schedule_timezones' => [
'UTC',
'America/New_York',
'America/Chicago',
'America/Los_Angeles',
'Europe/London',
'Africa/Accra',
'Africa/Lagos',
],
'participant_roles' => [
'host' => 'Host',
'co_host' => 'Co-host',
'panelist' => 'Panelist',
'participant' => 'Participant',
'attendee' => 'Attendee',
'guest' => 'Guest',
],
'session_statuses' => [
'live' => 'Live',
'ended' => 'Ended',
],
'default_settings' => [
'waiting_room' => true,
'join_before_host' => false,
'mute_on_join' => true,
'video_off_on_join' => false,
'allow_screen_share' => true,
'allow_chat' => true,
'allow_reactions' => true,
'lock_meeting' => false,
'auto_record' => false,
'live_captions' => false,
'auto_ai_summary' => true,
'lobby_mode' => false,
'webinar_auto_approve' => false,
'stage_mode' => true,
],
'breakouts' => [
'default_timer_minutes' => 15,
'max_rooms' => 20,
],
'files' => [
'disk' => env('MEET_FILES_DISK', 'local'),
'default_expiry_days' => (int) env('MEET_FILES_EXPIRY_DAYS', 30),
'drive_api_url' => env('LADILL_DRIVE_API_URL'),
'drive_api_key' => env('LADILL_DRIVE_API_KEY_MEET'),
],
'whiteboard_templates' => [
'blank' => 'Blank canvas',
'grid' => 'Grid',
'retrospective' => 'Retrospective',
],
'security_defaults' => [
'org_only' => false,
'authenticated_only' => false,
'allowed_domains' => [],
'recording_host_only' => true,
'guest_recording_disabled' => true,
'watermark_enabled' => false,
'session_idle_minutes' => 120,
],
'recordings' => [
'disk' => env('MEET_RECORDINGS_DISK', 'local'),
'max_mb' => (int) env('MEET_RECORDING_MAX_MB', 512),
'processing_timeout_minutes' => (int) env('MEET_RECORDING_PROCESSING_TIMEOUT_MINUTES', 15),
'egress' => [
'enabled' => (bool) env('MEET_EGRESS_ENABLED', false),
'webhook_url' => env('MEET_EGRESS_WEBHOOK_URL', ''),
's3' => [
'access_key' => env('MEET_EGRESS_S3_ACCESS_KEY', env('AWS_ACCESS_KEY_ID')),
'secret' => env('MEET_EGRESS_S3_SECRET', env('AWS_SECRET_ACCESS_KEY')),
'session_token' => env('MEET_EGRESS_S3_SESSION_TOKEN'),
'region' => env('MEET_EGRESS_S3_REGION', env('AWS_DEFAULT_REGION', 'us-east-1')),
'bucket' => env('MEET_EGRESS_S3_BUCKET', env('AWS_BUCKET')),
'endpoint' => env('MEET_EGRESS_S3_ENDPOINT', env('AWS_ENDPOINT')),
'assume_role_arn' => env('MEET_EGRESS_S3_ASSUME_ROLE_ARN'),
'assume_role_external_id' => env('MEET_EGRESS_S3_ASSUME_ROLE_EXTERNAL_ID'),
],
],
],
'ai' => [
'enabled' => env('MEET_AI_ENABLED', true),
'auto_summarize' => env('MEET_AI_AUTO_SUMMARIZE', true),
'api_key' => env('MEET_AI_API_KEY', env('OPENAI_API_KEY')),
'model' => env('MEET_AI_MODEL', 'gpt-4o-mini'),
'platform_api_url' => env('IDENTITY_API_URL', 'https://ladill.com/api'),
'platform_api_key' => env('IDENTITY_API_KEY_MEET'),
],
'media' => [
'provider' => env('MEET_MEDIA_PROVIDER', 'livekit'),
'livekit' => [
'url' => env('LIVEKIT_URL', ''),
'api_url' => env('LIVEKIT_API_URL', ''),
'api_key' => env('LIVEKIT_API_KEY', ''),
'api_secret' => env('LIVEKIT_API_SECRET', ''),
],
],
'report_types' => [
'summary' => 'Organization summary',
'meetings' => 'Meeting analytics',
'users' => 'Participant analytics',
'invitations' => 'Invitation & RSVP',
'branches' => 'Branch rollup',
],
'service_api_keys' => [
'care' => env('MEET_API_KEY_CARE'),
'crm' => env('MEET_API_KEY_CRM'),
'bookings' => env('MEET_API_KEY_BOOKINGS'),
'events' => env('MEET_API_KEY_EVENTS'),
'frontdesk' => env('MEET_API_KEY_FRONTDESK'),
'hr' => env('MEET_API_KEY_HR'),
'support' => env('MEET_API_KEY_SUPPORT'),
'invoice' => env('MEET_API_KEY_INVOICE'),
],
'webhook_events' => [
'meeting.scheduled',
'meeting.started',
'meeting.ended',
'meeting.cancelled',
'recording.ready',
],
'events_app_url' => env('LADILL_EVENTS_APP_URL', 'https://events.ladill.com'),
'events_api_url' => env('LADILL_EVENTS_API_URL', 'https://events.ladill.com/api/service/v1'),
'events_api_key' => env('MEET_API_KEY_EVENTS'),
'calendar' => [
'google' => [
'client_id' => env('GOOGLE_CALENDAR_CLIENT_ID'),
'client_secret' => env('GOOGLE_CALENDAR_CLIENT_SECRET'),
'redirect' => env('GOOGLE_CALENDAR_REDIRECT_URI'),
],
'microsoft' => [
'client_id' => env('MICROSOFT_CALENDAR_CLIENT_ID'),
'client_secret' => env('MICROSOFT_CALENDAR_CLIENT_SECRET'),
'redirect' => env('MICROSOFT_CALENDAR_REDIRECT_URI'),
'tenant' => env('MICROSOFT_CALENDAR_TENANT', 'common'),
],
'mail' => [
'api_url' => env('LADILL_MAIL_API_URL', 'https://mail.ladill.com/api/service/v1'),
'api_key' => env('MAIL_API_KEY_MEET'),
],
],
'live_stream' => [
'platforms' => ['youtube', 'facebook', 'linkedin', 'custom'],
'layouts' => ['speaker', 'gallery', 'screen'],
],
'billing' => [
'price_per_participant_ghs' => (float) env('MEET_PRICE_PER_PARTICIPANT', env('MEET_PRICE_PER_HOUR', 0.30)),
'price_per_gb_month_ghs' => (float) env('MEET_PRICE_PER_GB_MONTH', 0.30),
'billing_period_days' => (int) env('MEET_BILLING_PERIOD_DAYS', 30),
'grace_period_days' => (int) env('MEET_GRACE_PERIOD_DAYS', 15),
],
'audit_actions' => [
'organization.created' => 'Organization created',
'organization.updated' => 'Organization updated',
'organization.security_updated' => 'Security policy updated',
'branch.created' => 'Branch created',
'branch.updated' => 'Branch updated',
'member.created' => 'Member added',
'member.deleted' => 'Member removed',
'room.created' => 'Meeting created',
'room.updated' => 'Meeting updated',
'room.cancelled' => 'Meeting cancelled',
'session.started' => 'Meeting started',
'session.ended' => 'Meeting ended',
'participant.joined' => 'Participant joined',
'participant.left' => 'Participant left',
'participant.removed' => 'Participant removed',
'meeting.locked' => 'Meeting locked',
'meeting.unlocked' => 'Meeting unlocked',
'recording.started' => 'Recording started',
'recording.stopped' => 'Recording stopped',
'recording.ready' => 'Recording ready',
'recording.deleted' => 'Recording deleted',
'notification.meeting_started' => 'Meeting started notification',
],
];