Dialpad module changelog
Reconstructed history of dialpad, covering 1.0.0 through 1.3, using all 13 available source snapshots and historical in-module notes. There are 13 version entries, newest first.
The active module is modules/dialpad.py modules/dialpad.py, as selected by modules.json modules.json. All 12 backups and the active module are included. The current author notes reach back only to 1.1; earlier snapshots preserve notes that were later relabeled.
How to read this history
- Snapshot evidence: each release links to its exact source and preceding available snapshot. Bullets describe source changes; an addition means the first preserved implementation, not a guarantee that it was bug-free.
- Author notes: notes from every available snapshot were checked. Claims that differ from the source are identified explicitly; all versions named in the preserved notes have a source snapshot.
- Gaps: No source before 1.0.0 is available. Missing version numbers are not inferred as releases.
- Approximate dates: each date is the source file’s last-modified timestamp converted to UTC, not a confirmed release date. Saves, backup creation, and copies may be later than publication; equal timestamps do not prove simultaneous releases. This workspace has no usable Git history to confirm dates.
- Scope: library behavior, API changes, meaningful documentation edits, and demonstration/startup changes are included. Routine whitespace is omitted. Historical sources were read and compared without importing them, starting servers, or contacting external services.
Compatibility changes to notice
- SMS sending and call/change event registration arrive in 1.1; email-based call initiation follows in 1.1.2.
find_userarrives in 1.2, with annotation, name-branch, and normalization changes in 1.2.1, 1.2.4, and 1.2.5.is_consultis inserted beforecustom_datain ring-call signatures in 1.2.2; call destinations gain E.164 normalization in 1.2.3.- 1.3 rejects invalid webhook signatures and updates call state before
on_call, changing what event handlers observe.
Releases
1.3
Approximate date: 2026-09-11 (snapshot timestamp, UTC).
- Rejected webhook payloads whose computed JWT signature check is false before creating/dispatching events.
- Processed call logs into the client’s call cache before invoking
on_call, so the handler can see updated call state. Fixed new-call insertion to await the calls property and then append to the resulting list. - Compared related call IDs as strings and matched incoming/existing ID sets, excluding
Noneand empty strings; made secondary call-ID lookup tolerant of integer/string differences. - Handled missing master-call ID, direction, and external number; guarded target lookup against non-dictionaries; expanded recording discovery to string/list URLs and
recording_details, selecting the first HTTPS candidate. - Changed the import-time updater call to
primary_mod=True. The author note attributes the small changes to AI; this entry reconstructs their behavior from the actual source diff.
Evidence: Snapshot 1.3 modules/dialpad.py; compared with Snapshot 1.2.6 backups/dialpad_1.2.6\n.py.
1.2.6
Approximate date: 2026-09-11 (snapshot timestamp, UTC).
- Added a fallback for JWT payload parsing: if decoding with the existing appended padding fails, pad the original segment to a multiple of four and decode again. Both attempts still use
base64.b64decode; this is not a switch to a URL-safe decoder.
Evidence: Snapshot 1.2.6 backups/dialpad_1.2.6\n.py; compared with Snapshot 1.2.5 backups/dialpad_1.2.5\n.py.
1.2.5
Approximate date: 2026-06-22 (snapshot timestamp, UTC).
- Normalized string input before ID/email/name selection and normalized stored email values before comparison, making email matching case-insensitive and ignoring surrounding/embedded spaces. The earlier 1.2.4 name-branch correction remains in place.
Evidence: Snapshot 1.2.5 backups/dialpad_1.2.5\n.py; compared with Snapshot 1.2.4 backups/dialpad_1.2.4\n.py.
1.2.4
Approximate date: 2026-05-04 (snapshot timestamp, UTC).
- Moved normalized name matching out of the email branch in
Client.find_user, allowing ordinary name strings to be searched. This snapshot carries the original 1.2.4 fix note, which is later relabeled 1.2.5.
Evidence: Snapshot 1.2.4 backups/dialpad_1.2.4\n.py; compared with Snapshot 1.2.3 backups/dialpad_1.2.3\n.py.
1.2.3
Approximate date: 2026-05-04 (snapshot timestamp, UTC).
- Normalized call destinations through
toolbox.PhoneNumber(...).e164in endpoint-levelenqueue_callback,initiate_call, andinitiate_call_via_ring. - The author note calls the callback method
enqueue_call; the implemented method isenqueue_callback.
Evidence: Snapshot 1.2.3 backups/dialpad_1.2.3\n.py; compared with Snapshot 1.2.2 backups/dialpad_1.2.2\n.py.
1.2.2
Approximate date: 2026-05-04 (snapshot timestamp, UTC).
- Added
is_consult=Falseto ring-based initiation onClient, its endpoint helper,User, andGroup; sendsis_consult=Truewhen requested. - The new positional parameter appears before
custom_data, so callers passing the old final argument positionally need to account for the signature change.
Evidence: Snapshot 1.2.2 backups/dialpad_1.2.2\n.py; compared with Snapshot 1.2.1 backups/dialpad_1.2.1\n.py.
1.2.1
Approximate date: 2026-05-04 (snapshot timestamp, UTC).
- Replaced
find_userannotations withuser: strand the quoted return annotation"User", removing the runtime string/None union expression. Runtime branches still acceptUserobjects and integers and can returnNone.
Evidence: Snapshot 1.2.1 backups/dialpad_1.2.1\n.py; compared with Snapshot 1.2 backups/dialpad_1.2\n.py.
1.2
Approximate date: 2026-05-04 (snapshot timestamp, UTC).
- Added asynchronous
Client.find_userfor existingUserobjects, integer/numeric-string IDs, email lookup, and normalized name matching. The initial name-matching branch is nested under email-like input handling, so ordinary names do not reach it until 1.2.4. - Changed the department-change condition from
clone_department AND new_departmenttoclone_department OR new_department, allowing either event to trigger department retrieval. - The initial return annotation is
"User" | Nonewithout postponed annotation evaluation, which can raise during definition; 1.2.1 replaces it with a quoted forward reference.
Evidence: Snapshot 1.2 backups/dialpad_1.2\n.py; compared with Snapshot 1.1.2 backups/dialpad_1.1.2\n.py.
1.1.2
Approximate date: 2026-05-04 (snapshot timestamp, UTC).
- Added email-based user resolution to
Client.initiate_callandinitiate_call_via_ring, searching cached users and raisingValueErrorwhen an email-like input has no match. - The author notes also claim the addition of
get_department_from_idandUser.screen_pop. Source comparison shows the department helper in 1.1.1 andscreen_popalready in the 1.0.0 baseline; neither is newly implemented here.
Evidence: Snapshot 1.1.2 backups/dialpad_1.1.2\n.py; compared with Snapshot 1.1.1 backups/dialpad_1.1.1\n.py.
1.1.1
Approximate date: 2026-04-17 (snapshot timestamp, UTC).
- Added
Client.get_department_from_id, plus annotations/documentation for user and group lookup helpers. This is the first source and original author note for the department helper; later notes relabel it as 1.1.2.
Evidence: Snapshot 1.1.1 backups/dialpad_1.1.1\n.py; compared with Snapshot 1.1 backups/dialpad_1.1\n.py.
1.1
Approximate date: 2026-04-17 (snapshot timestamp, UTC).
- Added
on_callandon_changeregistration toClient.event, alongside the existing agent-status event. - Added
Client._Endpoints.send_sms, accepting one recipient or a recipient list, sender/user/group options, country-code inference, and optional media. It validates text/list/group inputs, caps the list at ten recipients, base64-encodes bytes or a short string treated as a file path, and checks the resulting media string against a 500 KiB length threshold.
Evidence: Snapshot 1.1 backups/dialpad_1.1\n.py; compared with Snapshot 1.0.0.1 backups/dialpad_1.0.0.1\n.py.
1.0.0.1
Approximate date: 2026-04-09 (snapshot timestamp, UTC).
- Removed the guarded demonstration and its embedded API-key sample. No library implementation change found relative to 1.0.0.
Evidence: Snapshot 1.0.0.1 backups/dialpad_1.0.0.1\n.py; compared with Snapshot 1.0.0 backups/dialpad_1.0.0\n.py.
1.0.0
Approximate date: 2026-04-08 (snapshot timestamp, UTC).
- Earliest available source; no preceding snapshot is available. Already contains a sandbox/live async
Client, cached users/departments/call centers/groups, ID lookups, initialization/refresh helpers, and authenticated endpoint access. - Already provides call initiation, ring-based calls, callback queueing,
User.screen_pop, user/group models, webhooks/subscriptions,WebhookManager, JWT parsing/signature comparison, downloadable recordings,Call/CallLog,AgentStatus, and serviceChangelogevent models. - Only
on_agent_statuscan be registered through the event decorator at this baseline. JWT objects expose a verification result, but webhook processing does not yet reject a false result; 1.3 adds that check. - Includes import-time self-updating and a guarded live-service demonstration. The baseline was read without importing or executing it.
Evidence: Snapshot 1.0.0 backups/dialpad_1.0.0\n.py; earliest available baseline.