@smartytalent/openai-tools 0.1.33-dev.26 → 0.1.33-dev.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tools.json +738 -149
- package/package.json +1 -1
package/dist/tools.json
CHANGED
|
@@ -10488,14 +10488,73 @@
|
|
|
10488
10488
|
"parameters": {
|
|
10489
10489
|
"type": "object",
|
|
10490
10490
|
"properties": {
|
|
10491
|
-
"
|
|
10491
|
+
"filterFolder": {
|
|
10492
10492
|
"type": "string",
|
|
10493
|
-
"description": "
|
|
10493
|
+
"description": "Filter by folder bucket. Mirrors the left-nav chips. Single-status\nfolders translate to filterStatus + filterDirection internally\n(drafts/scheduled/cancelled/archived/incoming/outgoing). Multi-\nstatus folders (active, missed) use a Scan path. Conflicts with\nexplicit filterStatus / filterDirection (request returns 400).",
|
|
10494
10494
|
"enum": [
|
|
10495
|
+
"drafts",
|
|
10496
|
+
"scheduled",
|
|
10495
10497
|
"active",
|
|
10498
|
+
"incoming",
|
|
10499
|
+
"outgoing",
|
|
10500
|
+
"missed",
|
|
10501
|
+
"cancelled",
|
|
10502
|
+
"archived"
|
|
10503
|
+
]
|
|
10504
|
+
},
|
|
10505
|
+
"filterStatus": {
|
|
10506
|
+
"type": "string",
|
|
10507
|
+
"description": "Filter by status. Accepts single value or comma-separated list\n(e.g. `queued,ringing,in-progress`). Comma-list routes to the\nScan path (slower, no cursor pagination).",
|
|
10508
|
+
"enum": [
|
|
10509
|
+
"draft",
|
|
10510
|
+
"scheduled",
|
|
10511
|
+
"cancelled",
|
|
10512
|
+
"queued",
|
|
10513
|
+
"ringing",
|
|
10514
|
+
"in-progress",
|
|
10515
|
+
"completed",
|
|
10516
|
+
"failed",
|
|
10517
|
+
"no-answer",
|
|
10518
|
+
"busy",
|
|
10519
|
+
"voicemail",
|
|
10520
|
+
"abandoned",
|
|
10496
10521
|
"archived"
|
|
10497
10522
|
]
|
|
10498
10523
|
},
|
|
10524
|
+
"filterDirection": {
|
|
10525
|
+
"type": "string",
|
|
10526
|
+
"description": "Filter by direction (inbound or outbound).",
|
|
10527
|
+
"enum": [
|
|
10528
|
+
"inbound",
|
|
10529
|
+
"outbound"
|
|
10530
|
+
]
|
|
10531
|
+
},
|
|
10532
|
+
"filterProtocol": {
|
|
10533
|
+
"type": "string",
|
|
10534
|
+
"description": "Filter by wire protocol. `phone` is PSTN via Twilio; `webrtc` reserved for the future recruiter Voice SDK.",
|
|
10535
|
+
"enum": [
|
|
10536
|
+
"phone",
|
|
10537
|
+
"webrtc"
|
|
10538
|
+
]
|
|
10539
|
+
},
|
|
10540
|
+
"filterFromIdentifier": {
|
|
10541
|
+
"type": "string",
|
|
10542
|
+
"description": "Filter by caller's protocol-native handle (E.164 phone for PSTN). Indexed via FromIdentifierIndex GSI."
|
|
10543
|
+
},
|
|
10544
|
+
"filterConversationId": {
|
|
10545
|
+
"type": "string",
|
|
10546
|
+
"description": "Filter all calls in a conversation thread. Indexed via ConversationIdIndex GSI."
|
|
10547
|
+
},
|
|
10548
|
+
"filterIntent": {
|
|
10549
|
+
"type": "string",
|
|
10550
|
+
"description": "Filter by AI intent classifier output (inbound calls only). Post-filtered after pagination - acceptable while intent classification is small-scale.",
|
|
10551
|
+
"enum": [
|
|
10552
|
+
"brief_request",
|
|
10553
|
+
"sales_chat",
|
|
10554
|
+
"faq",
|
|
10555
|
+
"other"
|
|
10556
|
+
]
|
|
10557
|
+
},
|
|
10499
10558
|
"filterCreatedFrom": {
|
|
10500
10559
|
"type": "string",
|
|
10501
10560
|
"description": "Filters results to include only those created from the specified date and time. The value must be in ISO 8601 format."
|
|
@@ -10527,6 +10586,16 @@
|
|
|
10527
10586
|
"pageBefore": {
|
|
10528
10587
|
"type": "string",
|
|
10529
10588
|
"description": "Returns the data encoded in Base64 format, used for cursor-based pagination"
|
|
10589
|
+
},
|
|
10590
|
+
"sort": {
|
|
10591
|
+
"type": "string",
|
|
10592
|
+
"description": "Sort order. Default `-created` (newest first). Currently\nsupports `-created`, `created`, `-modified`, `modified`. Sort\nby `-startedAt` / `-endedAt` / `-durationSec` deferred until\ncomposite GSIs land - see backend backlog #93.",
|
|
10593
|
+
"enum": [
|
|
10594
|
+
"-created",
|
|
10595
|
+
"created",
|
|
10596
|
+
"-modified",
|
|
10597
|
+
"modified"
|
|
10598
|
+
]
|
|
10530
10599
|
}
|
|
10531
10600
|
}
|
|
10532
10601
|
}
|
|
@@ -10561,104 +10630,296 @@
|
|
|
10561
10630
|
"attributes": {
|
|
10562
10631
|
"title": "CallAttributesSchema",
|
|
10563
10632
|
"type": "object",
|
|
10633
|
+
"description": "Cross-protocol call attributes. Mirror of chat with voice-\nspecific extensions: lifecycle covers provider phases (queued\n-> ringing -> in-progress -> completed) plus the operator\nreview window (draft -> scheduled -> queued). aiMode toggles\nwhether the AI agent is the active speaker, a silent observer,\nor fully off. transcript + summary are multilingual dicts\nmirroring email/chat body shape; the call AI translate Step\nFunction fans them across tenant locales.",
|
|
10564
10634
|
"properties": {
|
|
10565
|
-
"name": {
|
|
10566
|
-
"type": "string",
|
|
10567
|
-
"description": "Call title, e.g. Inbound call from John"
|
|
10568
|
-
},
|
|
10569
10635
|
"direction": {
|
|
10570
10636
|
"type": "string",
|
|
10571
10637
|
"enum": [
|
|
10572
10638
|
"inbound",
|
|
10573
|
-
"outbound"
|
|
10574
|
-
"ai-bot"
|
|
10639
|
+
"outbound"
|
|
10575
10640
|
],
|
|
10576
|
-
"description": "Call direction"
|
|
10641
|
+
"description": "Call direction relative to boe (inbound = caller dialed boe; outbound = boe placed the call)."
|
|
10577
10642
|
},
|
|
10578
|
-
"
|
|
10643
|
+
"protocol": {
|
|
10579
10644
|
"type": "string",
|
|
10580
10645
|
"enum": [
|
|
10581
|
-
"
|
|
10582
|
-
"
|
|
10583
|
-
"follow-up",
|
|
10584
|
-
"screening",
|
|
10585
|
-
"reference-check"
|
|
10646
|
+
"phone",
|
|
10647
|
+
"webrtc"
|
|
10586
10648
|
],
|
|
10587
|
-
"description": "
|
|
10588
|
-
},
|
|
10589
|
-
"duration": {
|
|
10590
|
-
"type": "integer",
|
|
10591
|
-
"description": "Call duration in seconds"
|
|
10649
|
+
"description": "Wire protocol. Phone is PSTN via Twilio; WebRTC reserves the slot for the future recruiter Voice SDK in the admin web app."
|
|
10592
10650
|
},
|
|
10593
|
-
"
|
|
10651
|
+
"status": {
|
|
10594
10652
|
"type": "string",
|
|
10595
10653
|
"enum": [
|
|
10596
|
-
"
|
|
10597
|
-
"
|
|
10598
|
-
"
|
|
10654
|
+
"draft",
|
|
10655
|
+
"scheduled",
|
|
10656
|
+
"cancelled",
|
|
10657
|
+
"queued",
|
|
10658
|
+
"ringing",
|
|
10659
|
+
"in-progress",
|
|
10660
|
+
"completed",
|
|
10661
|
+
"failed",
|
|
10599
10662
|
"no-answer",
|
|
10600
|
-
"busy"
|
|
10663
|
+
"busy",
|
|
10664
|
+
"voicemail",
|
|
10665
|
+
"abandoned",
|
|
10666
|
+
"archived"
|
|
10667
|
+
],
|
|
10668
|
+
"description": "Lifecycle state. Outbound rows that go through an operator review window or explicit scheduling start at `draft` (editable) or `scheduled` (Schedule armed for fireAt); on Schedule fire they progress queued -> ringing -> in-progress -> completed (or failed / no-answer / busy / voicemail). `abandoned` covers inbound calls where the caller hung up before the AI answered. `cancelled` is operator hard-kill before dial. `archived` is a terminal soft-delete."
|
|
10669
|
+
},
|
|
10670
|
+
"fromIdentifier": {
|
|
10671
|
+
"type": "string",
|
|
10672
|
+
"description": "Caller's protocol-native handle (E.164 phone for PSTN, AAD object id for WebRTC)."
|
|
10673
|
+
},
|
|
10674
|
+
"fromName": {
|
|
10675
|
+
"type": "string",
|
|
10676
|
+
"description": "Display name of the caller at write time. Denormalised from the resolved principal."
|
|
10677
|
+
},
|
|
10678
|
+
"fromType": {
|
|
10679
|
+
"type": "string",
|
|
10680
|
+
"enum": [
|
|
10681
|
+
"user",
|
|
10682
|
+
"candidate",
|
|
10683
|
+
"talent",
|
|
10684
|
+
"guest"
|
|
10601
10685
|
],
|
|
10602
|
-
"description": "
|
|
10686
|
+
"description": "Principal type of the caller."
|
|
10603
10687
|
},
|
|
10604
|
-
"
|
|
10688
|
+
"toIdentifier": {
|
|
10605
10689
|
"type": "string",
|
|
10606
|
-
"description": "
|
|
10690
|
+
"description": "Callee's protocol-native handle."
|
|
10607
10691
|
},
|
|
10608
|
-
"
|
|
10692
|
+
"toName": {
|
|
10609
10693
|
"type": "string",
|
|
10610
|
-
"description": "
|
|
10694
|
+
"description": "Display name of the callee at write time."
|
|
10611
10695
|
},
|
|
10612
|
-
"
|
|
10696
|
+
"toType": {
|
|
10613
10697
|
"type": "string",
|
|
10614
|
-
"
|
|
10698
|
+
"enum": [
|
|
10699
|
+
"user",
|
|
10700
|
+
"candidate",
|
|
10701
|
+
"talent",
|
|
10702
|
+
"guest"
|
|
10703
|
+
],
|
|
10704
|
+
"description": "Principal type of the callee."
|
|
10615
10705
|
},
|
|
10616
10706
|
"transcript": {
|
|
10617
10707
|
"type": "object",
|
|
10618
|
-
"description": "
|
|
10708
|
+
"description": "Multilingual transcript keyed by BCP 47 locale (e.g. {`en-US`: `Hi`, `pl-PL`: `Cześć`}). Source locale is captured first; the AI translate Step Function fills in the rest of the tenant's active locales.",
|
|
10709
|
+
"additionalProperties": {
|
|
10710
|
+
"type": "string"
|
|
10711
|
+
}
|
|
10619
10712
|
},
|
|
10620
|
-
"
|
|
10621
|
-
"type": "
|
|
10622
|
-
"description": "
|
|
10623
|
-
"
|
|
10624
|
-
"type": "
|
|
10713
|
+
"summary": {
|
|
10714
|
+
"type": "object",
|
|
10715
|
+
"description": "Multilingual post-call summary keyed by BCP 47 locale. LLM-generated after call ends.",
|
|
10716
|
+
"additionalProperties": {
|
|
10717
|
+
"type": "string"
|
|
10625
10718
|
}
|
|
10626
10719
|
},
|
|
10627
|
-
"
|
|
10720
|
+
"criteriaScoring": {
|
|
10721
|
+
"type": "object",
|
|
10722
|
+
"description": "Per-criterion scoring extracted from the transcript when the call is tied to a job (relationships.job). Map of criterion key -> {score, evidence, confidence}."
|
|
10723
|
+
},
|
|
10724
|
+
"startedAt": {
|
|
10628
10725
|
"type": "string",
|
|
10629
|
-
"description": "
|
|
10726
|
+
"description": "ISO 8601 timestamp when the call started (ringing began). Set on outbound dial or inbound webhook arrival."
|
|
10630
10727
|
},
|
|
10631
|
-
"
|
|
10632
|
-
"type": "
|
|
10633
|
-
"description": "
|
|
10728
|
+
"answeredAt": {
|
|
10729
|
+
"type": "string",
|
|
10730
|
+
"description": "ISO 8601 timestamp when the call connected (recipient picked up)."
|
|
10634
10731
|
},
|
|
10635
|
-
"
|
|
10732
|
+
"endedAt": {
|
|
10733
|
+
"type": "string",
|
|
10734
|
+
"description": "ISO 8601 timestamp when the call ended (terminal status reached)."
|
|
10735
|
+
},
|
|
10736
|
+
"durationSec": {
|
|
10737
|
+
"type": "integer",
|
|
10738
|
+
"description": "Call duration in seconds (endedAt - answeredAt)."
|
|
10739
|
+
},
|
|
10740
|
+
"scheduledFireAt": {
|
|
10741
|
+
"type": "string",
|
|
10742
|
+
"description": "ISO 8601 timestamp at which the Schedule armed for this call will fire and place the outbound dial. Operators can PATCH to reschedule; the eventbus PATCHes the underlying Schedule row in lockstep. Mirror of email/chat scheduledFireAt."
|
|
10743
|
+
},
|
|
10744
|
+
"scheduleId": {
|
|
10745
|
+
"type": "string",
|
|
10746
|
+
"description": "FK denormalisation of relationships.schedule for cheap read paths."
|
|
10747
|
+
},
|
|
10748
|
+
"conferenceSid": {
|
|
10749
|
+
"type": "string",
|
|
10750
|
+
"description": "Twilio conference id when the call is a multi-party (3-way) conference. Null for 1:1."
|
|
10751
|
+
},
|
|
10752
|
+
"isConference": {
|
|
10636
10753
|
"type": "boolean",
|
|
10637
|
-
"description": "
|
|
10754
|
+
"description": "True when the call is a multi-party conference (recruiter joining via Voice SDK + candidate + boe AI). False for 1:1."
|
|
10755
|
+
},
|
|
10756
|
+
"aiMode": {
|
|
10757
|
+
"type": "string",
|
|
10758
|
+
"enum": [
|
|
10759
|
+
"active",
|
|
10760
|
+
"observer",
|
|
10761
|
+
"silent"
|
|
10762
|
+
],
|
|
10763
|
+
"description": "How the AI agent participates. `active` = AI speaks (default for boe ↔ candidate). `observer` = AI listens, transcribes, surfaces real-time suggestions to the recruiter UI but does not speak. `silent` = recording + post-call analysis only, no AI in the call."
|
|
10638
10764
|
},
|
|
10639
|
-
"
|
|
10765
|
+
"plannedTopics": {
|
|
10640
10766
|
"type": "array",
|
|
10641
|
-
"description": "
|
|
10767
|
+
"description": "List of topic keys the AI agent should cover during the call (e.g. ['salary', 'experience', 'languagesSpoken']). Operator-editable in the review window before fire.",
|
|
10642
10768
|
"items": {
|
|
10643
|
-
"type": "
|
|
10769
|
+
"type": "string"
|
|
10644
10770
|
}
|
|
10645
10771
|
},
|
|
10646
|
-
"
|
|
10772
|
+
"systemPrompt": {
|
|
10773
|
+
"type": "string",
|
|
10774
|
+
"description": "Operator-editable agent instructions used as the OpenAI Realtime session's system prompt at fire time. Mirror of email body in the operator review window: edit before fire, the dialed call uses the latest version."
|
|
10775
|
+
},
|
|
10776
|
+
"recording": {
|
|
10647
10777
|
"type": "object",
|
|
10648
|
-
"description": "
|
|
10778
|
+
"description": "Recording artifacts. Raw G.711 µ-law file is captured live; the audio convert Lambda emits the MP3 derivatives post-call.",
|
|
10779
|
+
"properties": {
|
|
10780
|
+
"type": {
|
|
10781
|
+
"type": "string",
|
|
10782
|
+
"enum": [
|
|
10783
|
+
"dual-channel",
|
|
10784
|
+
"mixed"
|
|
10785
|
+
],
|
|
10786
|
+
"description": "Recording layout: dual-channel separates speakers per Twilio leg; mixed is single-track combined."
|
|
10787
|
+
},
|
|
10788
|
+
"rawUrl": {
|
|
10789
|
+
"type": "string",
|
|
10790
|
+
"description": "S3 URI to the raw G.711 µ-law audio."
|
|
10791
|
+
},
|
|
10792
|
+
"mixedMp3Url": {
|
|
10793
|
+
"type": "string",
|
|
10794
|
+
"description": "S3 URI to the mixed conversation MP3."
|
|
10795
|
+
},
|
|
10796
|
+
"humanOnlyMp3Url": {
|
|
10797
|
+
"type": "string",
|
|
10798
|
+
"description": "S3 URI to the human-only MP3 (silent during AI turns)."
|
|
10799
|
+
},
|
|
10800
|
+
"aiOnlyMp3Url": {
|
|
10801
|
+
"type": "string",
|
|
10802
|
+
"description": "S3 URI to the AI-only MP3 (silent during human turns)."
|
|
10803
|
+
}
|
|
10804
|
+
}
|
|
10805
|
+
},
|
|
10806
|
+
"languageCode": {
|
|
10807
|
+
"type": "string",
|
|
10808
|
+
"description": "BCP 47 locale of the call (the locale key initially populated in transcript). Detected from the caller's settings or call audio."
|
|
10649
10809
|
},
|
|
10650
10810
|
"shortCode": {
|
|
10651
10811
|
"type": "string",
|
|
10652
|
-
"description": "
|
|
10812
|
+
"description": "Unique short identifier (provider/lookup correlation)."
|
|
10653
10813
|
},
|
|
10654
|
-
"
|
|
10814
|
+
"transcriptSegments": {
|
|
10815
|
+
"type": "array",
|
|
10816
|
+
"description": "Structured transcript with timing. Each segment is one turn captured live by the Realtime API. Single shape (NOT translated); text is in `languageCode`. Drives the audio player's clickable speaker timeline.",
|
|
10817
|
+
"items": {
|
|
10818
|
+
"type": "object",
|
|
10819
|
+
"properties": {
|
|
10820
|
+
"startMs": {
|
|
10821
|
+
"type": "integer",
|
|
10822
|
+
"description": "Offset from call start in milliseconds when the speaker began this turn."
|
|
10823
|
+
},
|
|
10824
|
+
"endMs": {
|
|
10825
|
+
"type": "integer",
|
|
10826
|
+
"description": "Offset from call start in milliseconds when the speaker finished this turn."
|
|
10827
|
+
},
|
|
10828
|
+
"speakerType": {
|
|
10829
|
+
"type": "string",
|
|
10830
|
+
"enum": [
|
|
10831
|
+
"ai",
|
|
10832
|
+
"human"
|
|
10833
|
+
],
|
|
10834
|
+
"description": "Which side spoke this turn."
|
|
10835
|
+
},
|
|
10836
|
+
"speakerName": {
|
|
10837
|
+
"type": "string",
|
|
10838
|
+
"description": "Display name of the speaker at write time."
|
|
10839
|
+
},
|
|
10840
|
+
"text": {
|
|
10841
|
+
"type": "string",
|
|
10842
|
+
"description": "What the speaker said, in `languageCode`."
|
|
10843
|
+
}
|
|
10844
|
+
}
|
|
10845
|
+
}
|
|
10846
|
+
},
|
|
10847
|
+
"speakerStats": {
|
|
10848
|
+
"type": "array",
|
|
10849
|
+
"description": "Per-speaker talk statistics computed once on call finalization. Used by the timeline UI to show talk-time bars.",
|
|
10850
|
+
"items": {
|
|
10851
|
+
"type": "object",
|
|
10852
|
+
"properties": {
|
|
10853
|
+
"speakerType": {
|
|
10854
|
+
"type": "string",
|
|
10855
|
+
"enum": [
|
|
10856
|
+
"ai",
|
|
10857
|
+
"human"
|
|
10858
|
+
]
|
|
10859
|
+
},
|
|
10860
|
+
"speakerName": {
|
|
10861
|
+
"type": "string"
|
|
10862
|
+
},
|
|
10863
|
+
"talkPercentageBp": {
|
|
10864
|
+
"type": "integer",
|
|
10865
|
+
"description": "Talk-time percentage in basis points (10000 = 100.00%). Integer to avoid float rounding mismatches across clients."
|
|
10866
|
+
}
|
|
10867
|
+
}
|
|
10868
|
+
}
|
|
10869
|
+
},
|
|
10870
|
+
"keyNotes": {
|
|
10871
|
+
"type": "array",
|
|
10872
|
+
"description": "AI-generated bullet points distilled from the transcript. In `languageCode` (NOT multilingual - single shape; FE renders as-is).",
|
|
10873
|
+
"items": {
|
|
10874
|
+
"type": "string"
|
|
10875
|
+
}
|
|
10876
|
+
},
|
|
10877
|
+
"topicsDiscussed": {
|
|
10878
|
+
"type": "array",
|
|
10879
|
+
"description": "Stable facet keys (e.g. `salary`, `experience`, `languagesSpoken`) covered in the call. FE renders via shared `callTopics` dictionary for human-readable labels.",
|
|
10880
|
+
"items": {
|
|
10881
|
+
"type": "string"
|
|
10882
|
+
}
|
|
10883
|
+
},
|
|
10884
|
+
"sentiment": {
|
|
10885
|
+
"type": "string",
|
|
10886
|
+
"enum": [
|
|
10887
|
+
"positive",
|
|
10888
|
+
"neutral",
|
|
10889
|
+
"negative",
|
|
10890
|
+
"mixed"
|
|
10891
|
+
],
|
|
10892
|
+
"description": "AI-derived sentiment of the conversation as a whole."
|
|
10893
|
+
},
|
|
10894
|
+
"summaryGeneratedAt": {
|
|
10895
|
+
"type": "string",
|
|
10896
|
+
"description": "ISO 8601 timestamp when the AI summary pipeline (keyNotes + topicsDiscussed + sentiment + summary) finalized. Null until the post-call AI Step Function completes."
|
|
10897
|
+
},
|
|
10898
|
+
"folder": {
|
|
10655
10899
|
"type": "string",
|
|
10656
10900
|
"enum": [
|
|
10901
|
+
"drafts",
|
|
10902
|
+
"scheduled",
|
|
10657
10903
|
"active",
|
|
10658
|
-
"
|
|
10659
|
-
"
|
|
10660
|
-
"
|
|
10661
|
-
|
|
10904
|
+
"incoming",
|
|
10905
|
+
"outgoing",
|
|
10906
|
+
"missed",
|
|
10907
|
+
"cancelled",
|
|
10908
|
+
"archived"
|
|
10909
|
+
],
|
|
10910
|
+
"description": "Server-derived bucket for the left-nav / filter chips, computed from (direction, status). Mirror of email/chat folder. UI uses this directly; do NOT compute on the client."
|
|
10911
|
+
},
|
|
10912
|
+
"isLive": {
|
|
10913
|
+
"type": "boolean",
|
|
10914
|
+
"description": "Server-derived: true when status is in {queued, ringing, in-progress}. Drives the live indicator + polling decision in the UI."
|
|
10915
|
+
},
|
|
10916
|
+
"hasRecording": {
|
|
10917
|
+
"type": "boolean",
|
|
10918
|
+
"description": "Server-derived: true when recording.mixedMp3Url is present. Lets the list page show a play icon without sending the heavy `recording` block."
|
|
10919
|
+
},
|
|
10920
|
+
"hasTranscript": {
|
|
10921
|
+
"type": "boolean",
|
|
10922
|
+
"description": "Server-derived: true when transcriptSegments has any entries OR transcript dict has any locale keys. Lets the list page show a transcript icon without sending the heavy `transcript`/`transcriptSegments` payload."
|
|
10662
10923
|
},
|
|
10663
10924
|
"timestamps": {
|
|
10664
10925
|
"title": "ResourceTimestampsSchema",
|
|
@@ -10679,52 +10940,184 @@
|
|
|
10679
10940
|
"relationships": {
|
|
10680
10941
|
"title": "CallRelationshipsSchema",
|
|
10681
10942
|
"type": "object",
|
|
10943
|
+
"description": "Relationship slots on the call resource. All to-one. Direction\n+ attributes.fromType / toType tell you which side of the\nconversation each principal occupies. Mirror of chat's slot\nset with two voice-specific additions: `job` (call about a\nspecific opening) and `brief` (call collecting / clarifying\na specific brief). `boeUser` is split from `user` so the AI\nagent has a dedicated slot - `user` is reserved for human\ncounterparties (3-way conference recruiter, future user-to-\nuser webapp/Teams chat).",
|
|
10682
10944
|
"properties": {
|
|
10683
|
-
"
|
|
10684
|
-
"title": "
|
|
10945
|
+
"conversation": {
|
|
10946
|
+
"title": "CallRelationshipsConversationSchema",
|
|
10947
|
+
"description": "Thread the call belongs to. Phone calls in the same workflow run share a conversation; per-thread queries via ConversationIdIndex.",
|
|
10685
10948
|
"type": "object",
|
|
10686
10949
|
"properties": {
|
|
10687
10950
|
"data": {
|
|
10688
|
-
"
|
|
10689
|
-
"
|
|
10690
|
-
|
|
10691
|
-
"type":
|
|
10692
|
-
|
|
10693
|
-
|
|
10694
|
-
|
|
10695
|
-
|
|
10696
|
-
"id": {
|
|
10697
|
-
"type": "string"
|
|
10698
|
-
}
|
|
10951
|
+
"title": "CallRelationshipsConversationDataSchema",
|
|
10952
|
+
"type": "object",
|
|
10953
|
+
"properties": {
|
|
10954
|
+
"type": {
|
|
10955
|
+
"type": "string"
|
|
10956
|
+
},
|
|
10957
|
+
"id": {
|
|
10958
|
+
"type": "string"
|
|
10699
10959
|
}
|
|
10700
10960
|
}
|
|
10701
10961
|
}
|
|
10702
10962
|
}
|
|
10703
|
-
}
|
|
10704
|
-
|
|
10705
|
-
|
|
10706
|
-
|
|
10707
|
-
|
|
10708
|
-
|
|
10709
|
-
|
|
10710
|
-
|
|
10711
|
-
|
|
10712
|
-
|
|
10713
|
-
|
|
10714
|
-
|
|
10715
|
-
|
|
10716
|
-
|
|
10717
|
-
|
|
10718
|
-
|
|
10719
|
-
|
|
10720
|
-
|
|
10721
|
-
|
|
10722
|
-
|
|
10723
|
-
|
|
10724
|
-
|
|
10725
|
-
|
|
10726
|
-
|
|
10727
|
-
|
|
10963
|
+
},
|
|
10964
|
+
"candidate": {
|
|
10965
|
+
"title": "CallRelationshipsCandidateSchema",
|
|
10966
|
+
"description": "External candidate principal. Set when fromType=candidate (inbound) or toType=candidate (outbound).",
|
|
10967
|
+
"type": "object",
|
|
10968
|
+
"properties": {
|
|
10969
|
+
"data": {
|
|
10970
|
+
"title": "CallRelationshipsCandidateDataSchema",
|
|
10971
|
+
"type": "object",
|
|
10972
|
+
"properties": {
|
|
10973
|
+
"type": {
|
|
10974
|
+
"type": "string"
|
|
10975
|
+
},
|
|
10976
|
+
"id": {
|
|
10977
|
+
"type": "string"
|
|
10978
|
+
}
|
|
10979
|
+
}
|
|
10980
|
+
}
|
|
10981
|
+
}
|
|
10982
|
+
},
|
|
10983
|
+
"talent": {
|
|
10984
|
+
"title": "CallRelationshipsTalentSchema",
|
|
10985
|
+
"description": "External talent principal. Set when fromType=talent (inbound) or toType=talent (outbound).",
|
|
10986
|
+
"type": "object",
|
|
10987
|
+
"properties": {
|
|
10988
|
+
"data": {
|
|
10989
|
+
"title": "CallRelationshipsTalentDataSchema",
|
|
10990
|
+
"type": "object",
|
|
10991
|
+
"properties": {
|
|
10992
|
+
"type": {
|
|
10993
|
+
"type": "string"
|
|
10994
|
+
},
|
|
10995
|
+
"id": {
|
|
10996
|
+
"type": "string"
|
|
10997
|
+
}
|
|
10998
|
+
}
|
|
10999
|
+
}
|
|
11000
|
+
}
|
|
11001
|
+
},
|
|
11002
|
+
"user": {
|
|
11003
|
+
"title": "CallRelationshipsUserSchema",
|
|
11004
|
+
"description": "Internal human user (employee). Reserved for 3-way conference recruiters (boe + recruiter + candidate). Today this is typically null on boe-mediated 1:1 calls - the boe AI agent goes in `boeUser`, not here.",
|
|
11005
|
+
"type": "object",
|
|
11006
|
+
"properties": {
|
|
11007
|
+
"data": {
|
|
11008
|
+
"title": "CallRelationshipsUserDataSchema",
|
|
11009
|
+
"type": "object",
|
|
11010
|
+
"properties": {
|
|
11011
|
+
"type": {
|
|
11012
|
+
"type": "string"
|
|
11013
|
+
},
|
|
11014
|
+
"id": {
|
|
11015
|
+
"type": "string"
|
|
11016
|
+
}
|
|
11017
|
+
}
|
|
11018
|
+
}
|
|
11019
|
+
}
|
|
11020
|
+
},
|
|
11021
|
+
"boeUser": {
|
|
11022
|
+
"title": "CallRelationshipsBoeUserSchema",
|
|
11023
|
+
"description": "Boe AI agent involved in the call. Mirror of tenant.relationships.boeUser - always populated when boe is on the call. Splitting this from the generic `user` slot keeps the semantics clean: `user` is for human counterparties, `boeUser` is the AI agent.",
|
|
11024
|
+
"type": "object",
|
|
11025
|
+
"properties": {
|
|
11026
|
+
"data": {
|
|
11027
|
+
"title": "CallRelationshipsBoeUserDataSchema",
|
|
11028
|
+
"type": "object",
|
|
11029
|
+
"properties": {
|
|
11030
|
+
"type": {
|
|
11031
|
+
"type": "string"
|
|
11032
|
+
},
|
|
11033
|
+
"id": {
|
|
11034
|
+
"type": "string"
|
|
11035
|
+
}
|
|
11036
|
+
}
|
|
11037
|
+
}
|
|
11038
|
+
}
|
|
11039
|
+
},
|
|
11040
|
+
"job": {
|
|
11041
|
+
"title": "CallRelationshipsJobSchema",
|
|
11042
|
+
"description": "Job opening this call is about. Set on screening calls + phone-brief outbound clarifications targeting a specific opening. Drives criteriaScoring against the job's criteria.",
|
|
11043
|
+
"type": "object",
|
|
11044
|
+
"properties": {
|
|
11045
|
+
"data": {
|
|
11046
|
+
"title": "CallRelationshipsJobDataSchema",
|
|
11047
|
+
"type": "object",
|
|
11048
|
+
"properties": {
|
|
11049
|
+
"type": {
|
|
11050
|
+
"type": "string"
|
|
11051
|
+
},
|
|
11052
|
+
"id": {
|
|
11053
|
+
"type": "string"
|
|
11054
|
+
}
|
|
11055
|
+
}
|
|
11056
|
+
}
|
|
11057
|
+
}
|
|
11058
|
+
},
|
|
11059
|
+
"brief": {
|
|
11060
|
+
"title": "CallRelationshipsBriefSchema",
|
|
11061
|
+
"description": "Brief this call is collecting / clarifying. Set on phone-brief discovery + clarification calls. Drives the `Calls for brief X` view in the operator UI.",
|
|
11062
|
+
"type": "object",
|
|
11063
|
+
"properties": {
|
|
11064
|
+
"data": {
|
|
11065
|
+
"title": "CallRelationshipsBriefDataSchema",
|
|
11066
|
+
"type": "object",
|
|
11067
|
+
"properties": {
|
|
11068
|
+
"type": {
|
|
11069
|
+
"type": "string"
|
|
11070
|
+
},
|
|
11071
|
+
"id": {
|
|
11072
|
+
"type": "string"
|
|
11073
|
+
}
|
|
11074
|
+
}
|
|
11075
|
+
}
|
|
11076
|
+
}
|
|
11077
|
+
},
|
|
11078
|
+
"schedule": {
|
|
11079
|
+
"title": "CallRelationshipsScheduleSchema",
|
|
11080
|
+
"description": "Schedule row armed for this call's outbound dial. Set when scheduledFireAt is populated; null on inbound rows or on outbound rows that bypass the review window. Operators reschedule/cancel via PATCH/DELETE on the call resource - the eventbus reflects those changes onto the Schedule row, never the other way around.",
|
|
11081
|
+
"type": "object",
|
|
11082
|
+
"properties": {
|
|
11083
|
+
"data": {
|
|
11084
|
+
"title": "CallRelationshipsScheduleDataSchema",
|
|
11085
|
+
"type": "object",
|
|
11086
|
+
"properties": {
|
|
11087
|
+
"type": {
|
|
11088
|
+
"type": "string"
|
|
11089
|
+
},
|
|
11090
|
+
"id": {
|
|
11091
|
+
"type": "string"
|
|
11092
|
+
}
|
|
11093
|
+
}
|
|
11094
|
+
}
|
|
11095
|
+
}
|
|
11096
|
+
}
|
|
11097
|
+
}
|
|
11098
|
+
}
|
|
11099
|
+
}
|
|
11100
|
+
}
|
|
11101
|
+
}
|
|
11102
|
+
}
|
|
11103
|
+
}
|
|
11104
|
+
},
|
|
11105
|
+
{
|
|
11106
|
+
"type": "function",
|
|
11107
|
+
"function": {
|
|
11108
|
+
"name": "calls_options",
|
|
11109
|
+
"description": "Calls Options",
|
|
11110
|
+
"parameters": {
|
|
11111
|
+
"type": "object",
|
|
11112
|
+
"properties": {}
|
|
11113
|
+
}
|
|
11114
|
+
}
|
|
11115
|
+
},
|
|
11116
|
+
{
|
|
11117
|
+
"type": "function",
|
|
11118
|
+
"function": {
|
|
11119
|
+
"name": "show_call",
|
|
11120
|
+
"description": "Show Call",
|
|
10728
11121
|
"parameters": {
|
|
10729
11122
|
"type": "object",
|
|
10730
11123
|
"properties": {}
|
|
@@ -10764,104 +11157,296 @@
|
|
|
10764
11157
|
"attributes": {
|
|
10765
11158
|
"title": "CallAttributesSchema",
|
|
10766
11159
|
"type": "object",
|
|
11160
|
+
"description": "Cross-protocol call attributes. Mirror of chat with voice-\nspecific extensions: lifecycle covers provider phases (queued\n-> ringing -> in-progress -> completed) plus the operator\nreview window (draft -> scheduled -> queued). aiMode toggles\nwhether the AI agent is the active speaker, a silent observer,\nor fully off. transcript + summary are multilingual dicts\nmirroring email/chat body shape; the call AI translate Step\nFunction fans them across tenant locales.",
|
|
10767
11161
|
"properties": {
|
|
10768
|
-
"name": {
|
|
10769
|
-
"type": "string",
|
|
10770
|
-
"description": "Call title, e.g. Inbound call from John"
|
|
10771
|
-
},
|
|
10772
11162
|
"direction": {
|
|
10773
11163
|
"type": "string",
|
|
10774
11164
|
"enum": [
|
|
10775
11165
|
"inbound",
|
|
10776
|
-
"outbound"
|
|
10777
|
-
"ai-bot"
|
|
11166
|
+
"outbound"
|
|
10778
11167
|
],
|
|
10779
|
-
"description": "Call direction"
|
|
11168
|
+
"description": "Call direction relative to boe (inbound = caller dialed boe; outbound = boe placed the call)."
|
|
10780
11169
|
},
|
|
10781
|
-
"
|
|
11170
|
+
"protocol": {
|
|
10782
11171
|
"type": "string",
|
|
10783
11172
|
"enum": [
|
|
10784
|
-
"
|
|
10785
|
-
"
|
|
10786
|
-
"follow-up",
|
|
10787
|
-
"screening",
|
|
10788
|
-
"reference-check"
|
|
11173
|
+
"phone",
|
|
11174
|
+
"webrtc"
|
|
10789
11175
|
],
|
|
10790
|
-
"description": "
|
|
11176
|
+
"description": "Wire protocol. Phone is PSTN via Twilio; WebRTC reserves the slot for the future recruiter Voice SDK in the admin web app."
|
|
10791
11177
|
},
|
|
10792
|
-
"
|
|
10793
|
-
"type": "integer",
|
|
10794
|
-
"description": "Call duration in seconds"
|
|
10795
|
-
},
|
|
10796
|
-
"outcome": {
|
|
11178
|
+
"status": {
|
|
10797
11179
|
"type": "string",
|
|
10798
11180
|
"enum": [
|
|
10799
|
-
"
|
|
10800
|
-
"
|
|
10801
|
-
"
|
|
11181
|
+
"draft",
|
|
11182
|
+
"scheduled",
|
|
11183
|
+
"cancelled",
|
|
11184
|
+
"queued",
|
|
11185
|
+
"ringing",
|
|
11186
|
+
"in-progress",
|
|
11187
|
+
"completed",
|
|
11188
|
+
"failed",
|
|
10802
11189
|
"no-answer",
|
|
10803
|
-
"busy"
|
|
11190
|
+
"busy",
|
|
11191
|
+
"voicemail",
|
|
11192
|
+
"abandoned",
|
|
11193
|
+
"archived"
|
|
10804
11194
|
],
|
|
10805
|
-
"description": "
|
|
11195
|
+
"description": "Lifecycle state. Outbound rows that go through an operator review window or explicit scheduling start at `draft` (editable) or `scheduled` (Schedule armed for fireAt); on Schedule fire they progress queued -> ringing -> in-progress -> completed (or failed / no-answer / busy / voicemail). `abandoned` covers inbound calls where the caller hung up before the AI answered. `cancelled` is operator hard-kill before dial. `archived` is a terminal soft-delete."
|
|
11196
|
+
},
|
|
11197
|
+
"fromIdentifier": {
|
|
11198
|
+
"type": "string",
|
|
11199
|
+
"description": "Caller's protocol-native handle (E.164 phone for PSTN, AAD object id for WebRTC)."
|
|
11200
|
+
},
|
|
11201
|
+
"fromName": {
|
|
11202
|
+
"type": "string",
|
|
11203
|
+
"description": "Display name of the caller at write time. Denormalised from the resolved principal."
|
|
10806
11204
|
},
|
|
10807
|
-
"
|
|
11205
|
+
"fromType": {
|
|
10808
11206
|
"type": "string",
|
|
10809
|
-
"
|
|
11207
|
+
"enum": [
|
|
11208
|
+
"user",
|
|
11209
|
+
"candidate",
|
|
11210
|
+
"talent",
|
|
11211
|
+
"guest"
|
|
11212
|
+
],
|
|
11213
|
+
"description": "Principal type of the caller."
|
|
10810
11214
|
},
|
|
10811
|
-
"
|
|
11215
|
+
"toIdentifier": {
|
|
10812
11216
|
"type": "string",
|
|
10813
|
-
"description": "
|
|
11217
|
+
"description": "Callee's protocol-native handle."
|
|
10814
11218
|
},
|
|
10815
|
-
"
|
|
11219
|
+
"toName": {
|
|
10816
11220
|
"type": "string",
|
|
10817
|
-
"description": "
|
|
11221
|
+
"description": "Display name of the callee at write time."
|
|
11222
|
+
},
|
|
11223
|
+
"toType": {
|
|
11224
|
+
"type": "string",
|
|
11225
|
+
"enum": [
|
|
11226
|
+
"user",
|
|
11227
|
+
"candidate",
|
|
11228
|
+
"talent",
|
|
11229
|
+
"guest"
|
|
11230
|
+
],
|
|
11231
|
+
"description": "Principal type of the callee."
|
|
10818
11232
|
},
|
|
10819
11233
|
"transcript": {
|
|
10820
11234
|
"type": "object",
|
|
10821
|
-
"description": "
|
|
11235
|
+
"description": "Multilingual transcript keyed by BCP 47 locale (e.g. {`en-US`: `Hi`, `pl-PL`: `Cześć`}). Source locale is captured first; the AI translate Step Function fills in the rest of the tenant's active locales.",
|
|
11236
|
+
"additionalProperties": {
|
|
11237
|
+
"type": "string"
|
|
11238
|
+
}
|
|
10822
11239
|
},
|
|
10823
|
-
"
|
|
10824
|
-
"type": "
|
|
10825
|
-
"description": "
|
|
10826
|
-
"
|
|
10827
|
-
"type": "
|
|
11240
|
+
"summary": {
|
|
11241
|
+
"type": "object",
|
|
11242
|
+
"description": "Multilingual post-call summary keyed by BCP 47 locale. LLM-generated after call ends.",
|
|
11243
|
+
"additionalProperties": {
|
|
11244
|
+
"type": "string"
|
|
10828
11245
|
}
|
|
10829
11246
|
},
|
|
10830
|
-
"
|
|
11247
|
+
"criteriaScoring": {
|
|
11248
|
+
"type": "object",
|
|
11249
|
+
"description": "Per-criterion scoring extracted from the transcript when the call is tied to a job (relationships.job). Map of criterion key -> {score, evidence, confidence}."
|
|
11250
|
+
},
|
|
11251
|
+
"startedAt": {
|
|
10831
11252
|
"type": "string",
|
|
10832
|
-
"description": "
|
|
11253
|
+
"description": "ISO 8601 timestamp when the call started (ringing began). Set on outbound dial or inbound webhook arrival."
|
|
10833
11254
|
},
|
|
10834
|
-
"
|
|
10835
|
-
"type": "
|
|
10836
|
-
"description": "
|
|
11255
|
+
"answeredAt": {
|
|
11256
|
+
"type": "string",
|
|
11257
|
+
"description": "ISO 8601 timestamp when the call connected (recipient picked up)."
|
|
10837
11258
|
},
|
|
10838
|
-
"
|
|
11259
|
+
"endedAt": {
|
|
11260
|
+
"type": "string",
|
|
11261
|
+
"description": "ISO 8601 timestamp when the call ended (terminal status reached)."
|
|
11262
|
+
},
|
|
11263
|
+
"durationSec": {
|
|
11264
|
+
"type": "integer",
|
|
11265
|
+
"description": "Call duration in seconds (endedAt - answeredAt)."
|
|
11266
|
+
},
|
|
11267
|
+
"scheduledFireAt": {
|
|
11268
|
+
"type": "string",
|
|
11269
|
+
"description": "ISO 8601 timestamp at which the Schedule armed for this call will fire and place the outbound dial. Operators can PATCH to reschedule; the eventbus PATCHes the underlying Schedule row in lockstep. Mirror of email/chat scheduledFireAt."
|
|
11270
|
+
},
|
|
11271
|
+
"scheduleId": {
|
|
11272
|
+
"type": "string",
|
|
11273
|
+
"description": "FK denormalisation of relationships.schedule for cheap read paths."
|
|
11274
|
+
},
|
|
11275
|
+
"conferenceSid": {
|
|
11276
|
+
"type": "string",
|
|
11277
|
+
"description": "Twilio conference id when the call is a multi-party (3-way) conference. Null for 1:1."
|
|
11278
|
+
},
|
|
11279
|
+
"isConference": {
|
|
10839
11280
|
"type": "boolean",
|
|
10840
|
-
"description": "
|
|
11281
|
+
"description": "True when the call is a multi-party conference (recruiter joining via Voice SDK + candidate + boe AI). False for 1:1."
|
|
11282
|
+
},
|
|
11283
|
+
"aiMode": {
|
|
11284
|
+
"type": "string",
|
|
11285
|
+
"enum": [
|
|
11286
|
+
"active",
|
|
11287
|
+
"observer",
|
|
11288
|
+
"silent"
|
|
11289
|
+
],
|
|
11290
|
+
"description": "How the AI agent participates. `active` = AI speaks (default for boe ↔ candidate). `observer` = AI listens, transcribes, surfaces real-time suggestions to the recruiter UI but does not speak. `silent` = recording + post-call analysis only, no AI in the call."
|
|
10841
11291
|
},
|
|
10842
|
-
"
|
|
11292
|
+
"plannedTopics": {
|
|
10843
11293
|
"type": "array",
|
|
10844
|
-
"description": "
|
|
11294
|
+
"description": "List of topic keys the AI agent should cover during the call (e.g. ['salary', 'experience', 'languagesSpoken']). Operator-editable in the review window before fire.",
|
|
10845
11295
|
"items": {
|
|
10846
|
-
"type": "
|
|
11296
|
+
"type": "string"
|
|
10847
11297
|
}
|
|
10848
11298
|
},
|
|
10849
|
-
"
|
|
11299
|
+
"systemPrompt": {
|
|
11300
|
+
"type": "string",
|
|
11301
|
+
"description": "Operator-editable agent instructions used as the OpenAI Realtime session's system prompt at fire time. Mirror of email body in the operator review window: edit before fire, the dialed call uses the latest version."
|
|
11302
|
+
},
|
|
11303
|
+
"recording": {
|
|
10850
11304
|
"type": "object",
|
|
10851
|
-
"description": "
|
|
11305
|
+
"description": "Recording artifacts. Raw G.711 µ-law file is captured live; the audio convert Lambda emits the MP3 derivatives post-call.",
|
|
11306
|
+
"properties": {
|
|
11307
|
+
"type": {
|
|
11308
|
+
"type": "string",
|
|
11309
|
+
"enum": [
|
|
11310
|
+
"dual-channel",
|
|
11311
|
+
"mixed"
|
|
11312
|
+
],
|
|
11313
|
+
"description": "Recording layout: dual-channel separates speakers per Twilio leg; mixed is single-track combined."
|
|
11314
|
+
},
|
|
11315
|
+
"rawUrl": {
|
|
11316
|
+
"type": "string",
|
|
11317
|
+
"description": "S3 URI to the raw G.711 µ-law audio."
|
|
11318
|
+
},
|
|
11319
|
+
"mixedMp3Url": {
|
|
11320
|
+
"type": "string",
|
|
11321
|
+
"description": "S3 URI to the mixed conversation MP3."
|
|
11322
|
+
},
|
|
11323
|
+
"humanOnlyMp3Url": {
|
|
11324
|
+
"type": "string",
|
|
11325
|
+
"description": "S3 URI to the human-only MP3 (silent during AI turns)."
|
|
11326
|
+
},
|
|
11327
|
+
"aiOnlyMp3Url": {
|
|
11328
|
+
"type": "string",
|
|
11329
|
+
"description": "S3 URI to the AI-only MP3 (silent during human turns)."
|
|
11330
|
+
}
|
|
11331
|
+
}
|
|
11332
|
+
},
|
|
11333
|
+
"languageCode": {
|
|
11334
|
+
"type": "string",
|
|
11335
|
+
"description": "BCP 47 locale of the call (the locale key initially populated in transcript). Detected from the caller's settings or call audio."
|
|
10852
11336
|
},
|
|
10853
11337
|
"shortCode": {
|
|
10854
11338
|
"type": "string",
|
|
10855
|
-
"description": "
|
|
11339
|
+
"description": "Unique short identifier (provider/lookup correlation)."
|
|
10856
11340
|
},
|
|
10857
|
-
"
|
|
11341
|
+
"transcriptSegments": {
|
|
11342
|
+
"type": "array",
|
|
11343
|
+
"description": "Structured transcript with timing. Each segment is one turn captured live by the Realtime API. Single shape (NOT translated); text is in `languageCode`. Drives the audio player's clickable speaker timeline.",
|
|
11344
|
+
"items": {
|
|
11345
|
+
"type": "object",
|
|
11346
|
+
"properties": {
|
|
11347
|
+
"startMs": {
|
|
11348
|
+
"type": "integer",
|
|
11349
|
+
"description": "Offset from call start in milliseconds when the speaker began this turn."
|
|
11350
|
+
},
|
|
11351
|
+
"endMs": {
|
|
11352
|
+
"type": "integer",
|
|
11353
|
+
"description": "Offset from call start in milliseconds when the speaker finished this turn."
|
|
11354
|
+
},
|
|
11355
|
+
"speakerType": {
|
|
11356
|
+
"type": "string",
|
|
11357
|
+
"enum": [
|
|
11358
|
+
"ai",
|
|
11359
|
+
"human"
|
|
11360
|
+
],
|
|
11361
|
+
"description": "Which side spoke this turn."
|
|
11362
|
+
},
|
|
11363
|
+
"speakerName": {
|
|
11364
|
+
"type": "string",
|
|
11365
|
+
"description": "Display name of the speaker at write time."
|
|
11366
|
+
},
|
|
11367
|
+
"text": {
|
|
11368
|
+
"type": "string",
|
|
11369
|
+
"description": "What the speaker said, in `languageCode`."
|
|
11370
|
+
}
|
|
11371
|
+
}
|
|
11372
|
+
}
|
|
11373
|
+
},
|
|
11374
|
+
"speakerStats": {
|
|
11375
|
+
"type": "array",
|
|
11376
|
+
"description": "Per-speaker talk statistics computed once on call finalization. Used by the timeline UI to show talk-time bars.",
|
|
11377
|
+
"items": {
|
|
11378
|
+
"type": "object",
|
|
11379
|
+
"properties": {
|
|
11380
|
+
"speakerType": {
|
|
11381
|
+
"type": "string",
|
|
11382
|
+
"enum": [
|
|
11383
|
+
"ai",
|
|
11384
|
+
"human"
|
|
11385
|
+
]
|
|
11386
|
+
},
|
|
11387
|
+
"speakerName": {
|
|
11388
|
+
"type": "string"
|
|
11389
|
+
},
|
|
11390
|
+
"talkPercentageBp": {
|
|
11391
|
+
"type": "integer",
|
|
11392
|
+
"description": "Talk-time percentage in basis points (10000 = 100.00%). Integer to avoid float rounding mismatches across clients."
|
|
11393
|
+
}
|
|
11394
|
+
}
|
|
11395
|
+
}
|
|
11396
|
+
},
|
|
11397
|
+
"keyNotes": {
|
|
11398
|
+
"type": "array",
|
|
11399
|
+
"description": "AI-generated bullet points distilled from the transcript. In `languageCode` (NOT multilingual - single shape; FE renders as-is).",
|
|
11400
|
+
"items": {
|
|
11401
|
+
"type": "string"
|
|
11402
|
+
}
|
|
11403
|
+
},
|
|
11404
|
+
"topicsDiscussed": {
|
|
11405
|
+
"type": "array",
|
|
11406
|
+
"description": "Stable facet keys (e.g. `salary`, `experience`, `languagesSpoken`) covered in the call. FE renders via shared `callTopics` dictionary for human-readable labels.",
|
|
11407
|
+
"items": {
|
|
11408
|
+
"type": "string"
|
|
11409
|
+
}
|
|
11410
|
+
},
|
|
11411
|
+
"sentiment": {
|
|
11412
|
+
"type": "string",
|
|
11413
|
+
"enum": [
|
|
11414
|
+
"positive",
|
|
11415
|
+
"neutral",
|
|
11416
|
+
"negative",
|
|
11417
|
+
"mixed"
|
|
11418
|
+
],
|
|
11419
|
+
"description": "AI-derived sentiment of the conversation as a whole."
|
|
11420
|
+
},
|
|
11421
|
+
"summaryGeneratedAt": {
|
|
11422
|
+
"type": "string",
|
|
11423
|
+
"description": "ISO 8601 timestamp when the AI summary pipeline (keyNotes + topicsDiscussed + sentiment + summary) finalized. Null until the post-call AI Step Function completes."
|
|
11424
|
+
},
|
|
11425
|
+
"folder": {
|
|
10858
11426
|
"type": "string",
|
|
10859
11427
|
"enum": [
|
|
11428
|
+
"drafts",
|
|
11429
|
+
"scheduled",
|
|
10860
11430
|
"active",
|
|
10861
|
-
"
|
|
10862
|
-
"
|
|
10863
|
-
"
|
|
10864
|
-
|
|
11431
|
+
"incoming",
|
|
11432
|
+
"outgoing",
|
|
11433
|
+
"missed",
|
|
11434
|
+
"cancelled",
|
|
11435
|
+
"archived"
|
|
11436
|
+
],
|
|
11437
|
+
"description": "Server-derived bucket for the left-nav / filter chips, computed from (direction, status). Mirror of email/chat folder. UI uses this directly; do NOT compute on the client."
|
|
11438
|
+
},
|
|
11439
|
+
"isLive": {
|
|
11440
|
+
"type": "boolean",
|
|
11441
|
+
"description": "Server-derived: true when status is in {queued, ringing, in-progress}. Drives the live indicator + polling decision in the UI."
|
|
11442
|
+
},
|
|
11443
|
+
"hasRecording": {
|
|
11444
|
+
"type": "boolean",
|
|
11445
|
+
"description": "Server-derived: true when recording.mixedMp3Url is present. Lets the list page show a play icon without sending the heavy `recording` block."
|
|
11446
|
+
},
|
|
11447
|
+
"hasTranscript": {
|
|
11448
|
+
"type": "boolean",
|
|
11449
|
+
"description": "Server-derived: true when transcriptSegments has any entries OR transcript dict has any locale keys. Lets the list page show a transcript icon without sending the heavy `transcript`/`transcriptSegments` payload."
|
|
10865
11450
|
},
|
|
10866
11451
|
"timestamps": {
|
|
10867
11452
|
"title": "ResourceTimestampsSchema",
|
|
@@ -12098,6 +12683,8 @@
|
|
|
12098
12683
|
"description": "Only return states for this resource type.",
|
|
12099
12684
|
"enum": [
|
|
12100
12685
|
"emails",
|
|
12686
|
+
"chats",
|
|
12687
|
+
"calls",
|
|
12101
12688
|
"candidates",
|
|
12102
12689
|
"conversations",
|
|
12103
12690
|
"jobs",
|
|
@@ -12405,9 +12992,11 @@
|
|
|
12405
12992
|
"properties": {
|
|
12406
12993
|
"filterResourceType": {
|
|
12407
12994
|
"type": "string",
|
|
12408
|
-
"description": "Only return aggregates for this resource type (e.g. emails).",
|
|
12995
|
+
"description": "Only return aggregates for this resource type (e.g. emails, chats, calls).",
|
|
12409
12996
|
"enum": [
|
|
12410
12997
|
"emails",
|
|
12998
|
+
"chats",
|
|
12999
|
+
"calls",
|
|
12411
13000
|
"candidates",
|
|
12412
13001
|
"conversations",
|
|
12413
13002
|
"jobs",
|