PSAPLink PSAP — Setup
Lightweight agent installed on each PSAP's isolated network. Talks outbound only — no inbound internet connections required (except the optional ACK callback endpoint).
What It Does
- Polls CAD export files (CFS) using vendor-specific parsers (TriTech, CentralSquare, NewWorld Aegis, generic XML)
- Provides a dispatch API for TCOs to create and push incidents
- Signs and pushes incident events to PSAPLink Cloud via HMAC-signed HTTPS
- Receives ACK confirmations from Cloud (poll or callback mode)
What It Does NOT Do
- Manage company users or transport preferences — that's Cloud's job
- Handle notification fan-out — that's Cloud's job
- Require multi-tenancy — one instance serves exactly one PSAP
Prerequisites
- PHP 8.2+ / Composer 2.x
- PostgreSQL 15+
- Network access to your PSAPLink Cloud instance (outbound HTTPS only)
Setup
1. Configure environment
cd psap
cp .env.example .env.local
| Variable | Description |
|---|---|
DATABASE_URL | Local PostgreSQL connection string |
APP_SECRET | 32+ random characters |
JWT_SECRET_KEY / JWT_PUBLIC_KEY / JWT_PASSPHRASE | Local JWT keys |
CLOUD_BASE_URL | e.g. https://psaplink.com |
CLOUD_PSAP_ID | The PSAP agency UUID as registered in Cloud |
CLOUD_API_KEY | Raw API key issued by Cloud for this instance |
ACK_MODE | poll or callback |
2. Create the database
createdb psaplink_psap
3. Generate JWT keys
php bin/console lexik:jwt:generate-keypair
4. Run migrations
php bin/console doctrine:migrations:migrate
5. Bootstrap from Cloud
Pulls PSAP metadata and CFS configurations from your Cloud instance:
php bin/console psaplink:psap:bootstrap \
--cloud-url=https://psaplink.com \
--api-key=<your-raw-api-key>
This calls GET /api/v1/core/psap-config on Cloud and writes the LocalPsap row and all CfsConfiguration rows to the local database.
ACK Modes
| Mode | How it works |
|---|---|
poll | PSAP agent polls GET /api/v1/core/ack-queue/{psapId} on a schedule. No inbound ports needed. |
callback | Cloud POSTs to the PSAP's POST /api/v1/core/callback/ack endpoint. Faster, requires PSAP to be reachable. |
Quick Start (Docker)
cd psap
cp .env.example .env.local
./dev-up.sh --fresh