mirror of
https://github.com/Sea-Haven-Industries/ring-scheduler-3cx.git
synced 2026-05-18 20:20:12 +00:00
Scheduled ring group routing for 3CX phone system
Updates the requirements on [boto3](https://github.com/boto/boto3) to permit the latest version. - [Release notes](https://github.com/boto/boto3/releases) - [Commits](https://github.com/boto/boto3/compare/1.28.0...1.43.2) --- updated-dependencies: - dependency-name: boto3 dependency-version: 1.43.2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> |
||
|---|---|---|
| .github | ||
| config | ||
| src | ||
| .gitignore | ||
| README.md | ||
| requirements.txt | ||
| samconfig.toml | ||
| template.yaml | ||
3CX Ring Group Scheduler
AWS Lambda that automatically updates the after-hours and holiday forwarding destinations on a 3CX ring group daily at 8am ET.
How it works
- Two EventBridge rules fire daily (one for EST, one for EDT) to handle DST
- Lambda checks if it's actually 8am Eastern — skips if not
- Reads the weekly schedule from
config/schedule.yaml - Authenticates to 3CX V20 XAPI via OAuth2
- Updates the ring group's "office closed" and "holiday" routing
Schedule config
Edit config/schedule.yaml to change the weekly schedule or add exception dates:
ring_group_number: "800"
weekly_schedule:
Monday: "114"
Tuesday: "115"
Wednesday: "114"
Thursday: "115"
Friday: "116"
Saturday: "100"
Sunday: "100"
exceptions:
"2026-12-25": "100"
Setup
1. Create 3CX API client
In 3CX Admin Console > Integrations > API, create a new client with XAPI access enabled.
2. Store credentials in SSM
aws ssm put-parameter --name /3cx-scheduler/domain --value "yourcompany.3cx.us" --type SecureString
aws ssm put-parameter --name /3cx-scheduler/client_id --value "your-client-id" --type SecureString
aws ssm put-parameter --name /3cx-scheduler/client_secret --value "your-secret" --type SecureString
3. Deploy
sam build
sam deploy --stack-name ring-scheduler-3cx --resolve-s3 --capabilities CAPABILITY_IAM --parameter-overrides Timezone=America/New_York
Manual invocation
# Run using today's schedule
aws lambda invoke --function-name 3cx-ring-group-scheduler \
--payload '{"force": true}' \
--cli-binary-format raw-in-base64-out output.json
# Override to a specific extension
aws lambda invoke --function-name 3cx-ring-group-scheduler \
--payload '{"force": true, "override_extension": "100"}' \
--cli-binary-format raw-in-base64-out output.json