Join a campaign with an extension
Puts an extension into the campaign as a session, paused. A joined
extension is held out of inbound ringing only while a campaign call is
reserved for it (ringing out or in the lead-in countdown) and while it is
on that call; in between it takes inbound calls as normal. An extension
is in one campaign at a time (409 dialer.session_exists).
Joining is idempotent: the same person joining the same extension in the
same campaign again (a reload, a retry after a lost response) gets the
session they already have, with 200. A different person on that
extension is still 409 dialer.session_exists.
Call .../sessions/{sid}/ready to start taking calls, and
.../sessions/{sid}/heartbeat every 30 seconds while the client is open.
Call .../sessions/{sid}/ready to start taking calls. A person joins
their own extension. A key with no person behind it joins extensions that
belong to no person (a softphone it drives); an extension that belongs to
a person needs dialer.supervise (403 api_key.scope_denied).
Authorization
bearerAuth Long-lived ES256 JWT minted from the dashboard (https://app.sautikit.com/developers/api-keys). Signed by the
platform keyring. Carries workspace_id and scopes claims;
revoked via the platform deny-list.
In: header
Path Parameters
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/dialer/campaigns/497f6eca-6276-4993-bfeb-53cbbbba6f08/sessions" \ -H "Content-Type: application/json" \ -d '{ "extension_id": "2001" }'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "campaign_id": "78614b6c-fe7c-41e2-8e25-c9b3a3c91904", "extension_id": "string", "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5", "state": "ready", "reserved_contact_id": "2acb98b6-7d4a-4834-97d1-92a6097fa7cd", "reserved_until": "2019-08-24T14:15:22Z", "last_ready_at": "2019-08-24T14:15:22Z", "joined_at": "2019-08-24T14:15:22Z", "left_at": "2019-08-24T14:15:22Z", "last_seen_at": "2019-08-24T14:15:22Z", "pause_requested": true}{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "campaign_id": "78614b6c-fe7c-41e2-8e25-c9b3a3c91904", "extension_id": "string", "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5", "state": "ready", "reserved_contact_id": "2acb98b6-7d4a-4834-97d1-92a6097fa7cd", "reserved_until": "2019-08-24T14:15:22Z", "last_ready_at": "2019-08-24T14:15:22Z", "joined_at": "2019-08-24T14:15:22Z", "left_at": "2019-08-24T14:15:22Z", "last_seen_at": "2019-08-24T14:15:22Z", "pause_requested": true}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ], "resolution": "string", "reason": "invalid_characters", "suggested_e164": "+254727524723" }}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ], "resolution": "string", "reason": "invalid_characters", "suggested_e164": "+254727524723" }}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ], "resolution": "string", "reason": "invalid_characters", "suggested_e164": "+254727524723" }}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ], "resolution": "string", "reason": "invalid_characters", "suggested_e164": "+254727524723" }}{ "error": { "code": "validation.bad_request", "message": "string", "request_id": "string", "details": [ "string" ], "resolution": "string", "reason": "invalid_characters", "suggested_e164": "+254727524723" }}List a campaign's sessions GET
The extensions in the campaign, oldest join first. Sessions that have left are hidden unless `include_left=true`. A supervisor (`dialer.supervise`, or an owner/admin) gets every session with its extension number and person. Anyone else with `dialer.read` gets `counts` (the headcount by state) and only their own sessions in `data`.
Take calls POST
Makes the session available for the next answered contact. From `paused` or `wrap` the session joins the back of the line; from `ready` nothing changes.