@babelforce/babelconnect-sdk 0.11.0 → 0.13.0

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.
@@ -37,6 +37,74 @@ export declare enum AgentState {
37
37
  */
38
38
  BUSY = 7
39
39
  }
40
+ /**
41
+ * CampaignMemberState mirrors the backend's AgentStatus.Status enum exactly
42
+ * (sbf/services AgentStatus.groovy) — the predictive-dialer campaign
43
+ * membership lifecycle: offline -> logging_in -> waiting -> in_progress ->
44
+ * disposition (-> waiting for the next lead), with idle as the paused branch
45
+ * (waiting/logging_in <-> idle via pause/resume) and leave returning to
46
+ * offline from any state.
47
+ *
48
+ * @generated from enum babelconnect.v1.CampaignMemberState
49
+ */
50
+ export declare enum CampaignMemberState {
51
+ /**
52
+ * @generated from enum value: CAMPAIGN_MEMBER_STATE_UNSPECIFIED = 0;
53
+ */
54
+ UNSPECIFIED = 0,
55
+ /**
56
+ * @generated from enum value: CAMPAIGN_MEMBER_STATE_OFFLINE = 1;
57
+ */
58
+ OFFLINE = 1,
59
+ /**
60
+ * @generated from enum value: CAMPAIGN_MEMBER_STATE_LOGGING_IN = 2;
61
+ */
62
+ LOGGING_IN = 2,
63
+ /**
64
+ * @generated from enum value: CAMPAIGN_MEMBER_STATE_WAITING = 3;
65
+ */
66
+ WAITING = 3,
67
+ /**
68
+ * paused
69
+ *
70
+ * @generated from enum value: CAMPAIGN_MEMBER_STATE_IDLE = 4;
71
+ */
72
+ IDLE = 4,
73
+ /**
74
+ * @generated from enum value: CAMPAIGN_MEMBER_STATE_IN_PROGRESS = 5;
75
+ */
76
+ IN_PROGRESS = 5,
77
+ /**
78
+ * @generated from enum value: CAMPAIGN_MEMBER_STATE_DISPOSITION = 6;
79
+ */
80
+ DISPOSITION = 6
81
+ }
82
+ /**
83
+ * TransferTargetKind discriminates a TransferTarget. Mirrors the backend's
84
+ * TransferTargetItem.Type enum exactly (agent/number/application — there is no
85
+ * "phonebook" kind on the backend; bc-v2's UI groups results that way, but the
86
+ * wire type only ever carries these three).
87
+ *
88
+ * @generated from enum babelconnect.v1.TransferTargetKind
89
+ */
90
+ export declare enum TransferTargetKind {
91
+ /**
92
+ * @generated from enum value: TRANSFER_TARGET_KIND_UNSPECIFIED = 0;
93
+ */
94
+ UNSPECIFIED = 0,
95
+ /**
96
+ * @generated from enum value: TRANSFER_TARGET_KIND_AGENT = 1;
97
+ */
98
+ AGENT = 1,
99
+ /**
100
+ * @generated from enum value: TRANSFER_TARGET_KIND_NUMBER = 2;
101
+ */
102
+ NUMBER = 2,
103
+ /**
104
+ * @generated from enum value: TRANSFER_TARGET_KIND_APPLICATION = 3;
105
+ */
106
+ APPLICATION = 3
107
+ }
40
108
  /**
41
109
  * @generated from enum babelconnect.v1.CallDirection
42
110
  */
@@ -167,7 +235,7 @@ export declare class SubscribeRequest extends Message<SubscribeRequest> {
167
235
  /**
168
236
  * Ack is the empty reply to Send. It only confirms the server accepted the
169
237
  * command for processing — the resulting state (or an Error) is delivered on the
170
- * Subscribe stream, the same way Session reports it.
238
+ * Subscribe stream, never in this reply.
171
239
  *
172
240
  * @generated from message babelconnect.v1.Ack
173
241
  */
@@ -777,6 +845,35 @@ export declare class AgentInfo extends Message<AgentInfo> {
777
845
  * @generated from field: repeated babelconnect.v1.Account accounts = 19;
778
846
  */
779
847
  accounts: Account[];
848
+ /**
849
+ * The agent's own email (GET /agent/me item.email — distinct from `username`,
850
+ * which is the *login* identity from user/me/introspection and may differ).
851
+ * Populated for the embedding bridge's legacy-shaped `agent.loaded` payload
852
+ * (EMB20, bc-connect parity) — bc-connect hosts match/route on it.
853
+ *
854
+ * @generated from field: string email = 20;
855
+ */
856
+ email: string;
857
+ /**
858
+ * Subset of `available_numbers` the backend marks SMS-capable (GET
859
+ * /api/v2/agent/numbers item `sms`, sourced from core_number.sms_enabled;
860
+ * mirrors bc-v2's AgentNumberFreeText.vue `smsOnly` filter). Drives the SMS
861
+ * composer's From picker (SMSC4); empty/unknown ⇒ client falls back to
862
+ * `available_numbers` (see docs/designs/messaging.md).
863
+ *
864
+ * @generated from field: repeated string sms_capable_numbers = 21;
865
+ */
866
+ smsCapableNumbers: string[];
867
+ /**
868
+ * Outbound-dialer (predictive campaign) membership state — folded from the
869
+ * `/agent/{id}/obd` Faye push plus a GET /agent/outbound/status enrichment
870
+ * read (OBDA1–4). Unset/UNSPECIFIED means the agent has never touched a
871
+ * campaign this session; explicit OFFLINE means they left/aren't in one.
872
+ * See docs/designs/obd.md.
873
+ *
874
+ * @generated from field: babelconnect.v1.CampaignStatus campaign_status = 22;
875
+ */
876
+ campaignStatus?: CampaignStatus;
780
877
  constructor(data?: PartialMessage<AgentInfo>);
781
878
  static readonly runtime: typeof proto3;
782
879
  static readonly typeName = "babelconnect.v1.AgentInfo";
@@ -786,6 +883,183 @@ export declare class AgentInfo extends Message<AgentInfo> {
786
883
  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): AgentInfo;
787
884
  static equals(a: AgentInfo | PlainMessage<AgentInfo> | undefined, b: AgentInfo | PlainMessage<AgentInfo> | undefined): boolean;
788
885
  }
886
+ /**
887
+ * CampaignStatus is the agent's outbound-dialer campaign membership envelope
888
+ * (OBDA1–4 CORE). `campaign_id`/`campaign_name` and `state` come from a GET
889
+ * /agent/outbound/status read (backend: ObdAgentService.getStatus); `state`
890
+ * and `last_reason` are additionally kept live by the `/agent/{id}/obd` Faye
891
+ * push (AgentPushService.pushObdEvent — that push carries ONLY status +
892
+ * last_reason, never campaign/lead, hence the enrichment read). `last_reason`
893
+ * mirrors the backend's AgentStatus.Reason enum as a lowercase string (e.g.
894
+ * "unreachable", "no_answer", "busy", "answer", "hungup", "none") — kept as a
895
+ * string rather than a wire enum since the client only ever compares it
896
+ * against "unreachable" for the OBDA4 toast. `paused` is a convenience mirror
897
+ * of `state == CAMPAIGN_MEMBER_STATE_IDLE`. The lead the agent is currently
898
+ * dialing, disposition reasons, and live campaign metrics are additive fields
899
+ * below (OBDB1/OBDD1) layered on top of this envelope.
900
+ *
901
+ * @generated from message babelconnect.v1.CampaignStatus
902
+ */
903
+ export declare class CampaignStatus extends Message<CampaignStatus> {
904
+ /**
905
+ * @generated from field: string campaign_id = 1;
906
+ */
907
+ campaignId: string;
908
+ /**
909
+ * @generated from field: string campaign_name = 2;
910
+ */
911
+ campaignName: string;
912
+ /**
913
+ * @generated from field: babelconnect.v1.CampaignMemberState state = 3;
914
+ */
915
+ state: CampaignMemberState;
916
+ /**
917
+ * @generated from field: bool paused = 4;
918
+ */
919
+ paused: boolean;
920
+ /**
921
+ * @generated from field: string last_reason = 5;
922
+ */
923
+ lastReason: string;
924
+ /**
925
+ * unix seconds this state was entered/last confirmed
926
+ *
927
+ * @generated from field: int64 since = 6;
928
+ */
929
+ since: bigint;
930
+ /**
931
+ * lead is the customer the dialer connected the agent to (OBDB1) — set once
932
+ * GET /agent/outbound/status's `lead` sub-object is non-empty (IN_PROGRESS/
933
+ * DISPOSITION), unset otherwise. Also kept live by a genuine backend push (a
934
+ * `cti.outbound.lead` Faye event — sbf/services AgentCtiService#pushLead,
935
+ * CTIA3) that arrives the moment the dialer connects a lead, ahead of the
936
+ * next enrichment poll.
937
+ *
938
+ * @generated from field: babelconnect.v1.Lead lead = 7;
939
+ */
940
+ lead?: Lead;
941
+ /**
942
+ * metrics is the campaign's live pacing snapshot (OBDD1), refreshed
943
+ * alongside the enrichment read while `state == IDLE` (paused) — the only
944
+ * state the Outbound tab shows it in; unset otherwise (and left unset if the
945
+ * GET /agent/outbound/metrics read 404s, e.g. between polls).
946
+ *
947
+ * @generated from field: babelconnect.v1.CampaignMetrics metrics = 8;
948
+ */
949
+ metrics?: CampaignMetrics;
950
+ constructor(data?: PartialMessage<CampaignStatus>);
951
+ static readonly runtime: typeof proto3;
952
+ static readonly typeName = "babelconnect.v1.CampaignStatus";
953
+ static readonly fields: FieldList;
954
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CampaignStatus;
955
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CampaignStatus;
956
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CampaignStatus;
957
+ static equals(a: CampaignStatus | PlainMessage<CampaignStatus> | undefined, b: CampaignStatus | PlainMessage<CampaignStatus> | undefined): boolean;
958
+ }
959
+ /**
960
+ * Lead is the customer the outbound dialer connected the agent to (OBDB1),
961
+ * grounded in GET /agent/outbound/status's `lead` sub-object (sbf/services
962
+ * ObdAgentService#getStatus) and the `cti.outbound.lead` Faye push's `body`
963
+ * (AgentPushMessages.Lead.LeadBody, CTIA3) — both share the uid/number/data
964
+ * shape; `id`/`rank` are only present on the richer (list-enriched) form the
965
+ * GET read can return. `id` is the internal lead-list-item id — DISTINCT from
966
+ * `uid`, the customer-provided identifier the OBDB1 acceptance calls the
967
+ * lead's "id" in the UI.
968
+ *
969
+ * @generated from message babelconnect.v1.Lead
970
+ */
971
+ export declare class Lead extends Message<Lead> {
972
+ /**
973
+ * internal lead-list-item id (uuid); may be empty
974
+ *
975
+ * @generated from field: string id = 1;
976
+ */
977
+ id: string;
978
+ /**
979
+ * customer-provided lead identifier — the UI's "id"
980
+ *
981
+ * @generated from field: string uid = 2;
982
+ */
983
+ uid: string;
984
+ /**
985
+ * @generated from field: string number = 3;
986
+ */
987
+ number: string;
988
+ /**
989
+ * @generated from field: int32 rank = 4;
990
+ */
991
+ rank: number;
992
+ /**
993
+ * arbitrary customer-supplied key/values
994
+ *
995
+ * @generated from field: map<string, string> data = 5;
996
+ */
997
+ data: {
998
+ [key: string]: string;
999
+ };
1000
+ constructor(data?: PartialMessage<Lead>);
1001
+ static readonly runtime: typeof proto3;
1002
+ static readonly typeName = "babelconnect.v1.Lead";
1003
+ static readonly fields: FieldList;
1004
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): Lead;
1005
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): Lead;
1006
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): Lead;
1007
+ static equals(a: Lead | PlainMessage<Lead> | undefined, b: Lead | PlainMessage<Lead> | undefined): boolean;
1008
+ }
1009
+ /**
1010
+ * CampaignMetrics is the campaign's live pacing snapshot (OBDD1), grounded in
1011
+ * GET /agent/outbound/metrics's flat dot-key map (sbf/services
1012
+ * ObdController#metrics, itself a filtered subset of Vicidial's realtime
1013
+ * report) — always this exact 6-key subset, never more.
1014
+ *
1015
+ * @generated from message babelconnect.v1.CampaignMetrics
1016
+ */
1017
+ export declare class CampaignMetrics extends Message<CampaignMetrics> {
1018
+ /**
1019
+ * agents.in_calls
1020
+ *
1021
+ * @generated from field: int32 agents_in_calls = 1;
1022
+ */
1023
+ agentsInCalls: number;
1024
+ /**
1025
+ * agents.in_disp
1026
+ *
1027
+ * @generated from field: int32 agents_in_disp = 2;
1028
+ */
1029
+ agentsInDisp: number;
1030
+ /**
1031
+ * agents.paused
1032
+ *
1033
+ * @generated from field: int32 agents_paused = 3;
1034
+ */
1035
+ agentsPaused: number;
1036
+ /**
1037
+ * agents.waiting
1038
+ *
1039
+ * @generated from field: int32 agents_waiting = 4;
1040
+ */
1041
+ agentsWaiting: number;
1042
+ /**
1043
+ * calls.being_placed
1044
+ *
1045
+ * @generated from field: int32 calls_being_placed = 5;
1046
+ */
1047
+ callsBeingPlaced: number;
1048
+ /**
1049
+ * calls.ringing
1050
+ *
1051
+ * @generated from field: int32 calls_ringing = 6;
1052
+ */
1053
+ callsRinging: number;
1054
+ constructor(data?: PartialMessage<CampaignMetrics>);
1055
+ static readonly runtime: typeof proto3;
1056
+ static readonly typeName = "babelconnect.v1.CampaignMetrics";
1057
+ static readonly fields: FieldList;
1058
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CampaignMetrics;
1059
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CampaignMetrics;
1060
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CampaignMetrics;
1061
+ static equals(a: CampaignMetrics | PlainMessage<CampaignMetrics> | undefined, b: CampaignMetrics | PlainMessage<CampaignMetrics> | undefined): boolean;
1062
+ }
789
1063
  /**
790
1064
  * PhonebookEntry is one dialable contact (or a recent number) for the dialer's
791
1065
  * autocomplete.
@@ -863,6 +1137,96 @@ export declare class PhonebookResponse extends Message<PhonebookResponse> {
863
1137
  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): PhonebookResponse;
864
1138
  static equals(a: PhonebookResponse | PlainMessage<PhonebookResponse> | undefined, b: PhonebookResponse | PlainMessage<PhonebookResponse> | undefined): boolean;
865
1139
  }
1140
+ /**
1141
+ * TransferTarget is one autocomplete result for a blind transfer / add-member
1142
+ * pick. `id` is the backend id to pass back on Transfer/AddConferenceMember
1143
+ * (an agent or application UUID; for a synthetic NUMBER result it is the raw
1144
+ * query, not a stable id — clients should send `number`, not `id`, for that
1145
+ * kind). `category` is the IVR module name (APPLICATION only, e.g.
1146
+ * "simpleMenu"); `browser` marks an agent reachable only via browser phone
1147
+ * (no PSTN number) — AGENT only.
1148
+ *
1149
+ * @generated from message babelconnect.v1.TransferTarget
1150
+ */
1151
+ export declare class TransferTarget extends Message<TransferTarget> {
1152
+ /**
1153
+ * @generated from field: string id = 1;
1154
+ */
1155
+ id: string;
1156
+ /**
1157
+ * @generated from field: babelconnect.v1.TransferTargetKind kind = 2;
1158
+ */
1159
+ kind: TransferTargetKind;
1160
+ /**
1161
+ * @generated from field: string label = 3;
1162
+ */
1163
+ label: string;
1164
+ /**
1165
+ * NUMBER kind, and AGENT kind when it has a PSTN number
1166
+ *
1167
+ * @generated from field: string number = 4;
1168
+ */
1169
+ number: string;
1170
+ /**
1171
+ * APPLICATION only: the IVR module name
1172
+ *
1173
+ * @generated from field: string category = 5;
1174
+ */
1175
+ category: string;
1176
+ /**
1177
+ * AGENT only: browser-phone-reachable, no PSTN number
1178
+ *
1179
+ * @generated from field: bool browser = 6;
1180
+ */
1181
+ browser: boolean;
1182
+ constructor(data?: PartialMessage<TransferTarget>);
1183
+ static readonly runtime: typeof proto3;
1184
+ static readonly typeName = "babelconnect.v1.TransferTarget";
1185
+ static readonly fields: FieldList;
1186
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): TransferTarget;
1187
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): TransferTarget;
1188
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): TransferTarget;
1189
+ static equals(a: TransferTarget | PlainMessage<TransferTarget> | undefined, b: TransferTarget | PlainMessage<TransferTarget> | undefined): boolean;
1190
+ }
1191
+ /**
1192
+ * TransferTargetsRequest / TransferTargetsResponse back the transfer-target
1193
+ * autocomplete (blind transfer + add-member dialogs). `query` filters
1194
+ * server-side; empty returns the default result set (a synthetic NUMBER
1195
+ * target only appears once `query` looks like a number).
1196
+ *
1197
+ * @generated from message babelconnect.v1.TransferTargetsRequest
1198
+ */
1199
+ export declare class TransferTargetsRequest extends Message<TransferTargetsRequest> {
1200
+ /**
1201
+ * @generated from field: string query = 1;
1202
+ */
1203
+ query: string;
1204
+ constructor(data?: PartialMessage<TransferTargetsRequest>);
1205
+ static readonly runtime: typeof proto3;
1206
+ static readonly typeName = "babelconnect.v1.TransferTargetsRequest";
1207
+ static readonly fields: FieldList;
1208
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): TransferTargetsRequest;
1209
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): TransferTargetsRequest;
1210
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): TransferTargetsRequest;
1211
+ static equals(a: TransferTargetsRequest | PlainMessage<TransferTargetsRequest> | undefined, b: TransferTargetsRequest | PlainMessage<TransferTargetsRequest> | undefined): boolean;
1212
+ }
1213
+ /**
1214
+ * @generated from message babelconnect.v1.TransferTargetsResponse
1215
+ */
1216
+ export declare class TransferTargetsResponse extends Message<TransferTargetsResponse> {
1217
+ /**
1218
+ * @generated from field: repeated babelconnect.v1.TransferTarget targets = 1;
1219
+ */
1220
+ targets: TransferTarget[];
1221
+ constructor(data?: PartialMessage<TransferTargetsResponse>);
1222
+ static readonly runtime: typeof proto3;
1223
+ static readonly typeName = "babelconnect.v1.TransferTargetsResponse";
1224
+ static readonly fields: FieldList;
1225
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): TransferTargetsResponse;
1226
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): TransferTargetsResponse;
1227
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): TransferTargetsResponse;
1228
+ static equals(a: TransferTargetsResponse | PlainMessage<TransferTargetsResponse> | undefined, b: TransferTargetsResponse | PlainMessage<TransferTargetsResponse> | undefined): boolean;
1229
+ }
866
1230
  /**
867
1231
  * PresenceOption is one selectable agent presence — "Available" or a configured
868
1232
  * pause reason. `available` is whether the agent can receive calls in it.
@@ -979,6 +1343,17 @@ export declare class CallState extends Message<CallState> {
979
1343
  * @generated from field: repeated babelconnect.v1.IceServer ice_servers = 17;
980
1344
  */
981
1345
  iceServers: IceServer[];
1346
+ /**
1347
+ * can_transfer_to_application is server-computed: true for inbound calls and
1348
+ * taken callbacks (source == CALL_SOURCE_CALLBACK), false otherwise. Plain
1349
+ * outbound calls must not be offered application (IVR module) transfer
1350
+ * targets — forwarding them into a queue module strands the agent
1351
+ * (DEV-549/B2-526). Clients gate the "App" transfer-target segment on this
1352
+ * flag instead of re-deriving the rule from direction/source themselves.
1353
+ *
1354
+ * @generated from field: bool can_transfer_to_application = 18;
1355
+ */
1356
+ canTransferToApplication: boolean;
982
1357
  constructor(data?: PartialMessage<CallState>);
983
1358
  static readonly runtime: typeof proto3;
984
1359
  static readonly typeName = "babelconnect.v1.CallState";
@@ -1056,7 +1431,7 @@ export declare class WrapUpStatus extends Message<WrapUpStatus> {
1056
1431
  static equals(a: WrapUpStatus | PlainMessage<WrapUpStatus> | undefined, b: WrapUpStatus | PlainMessage<WrapUpStatus> | undefined): boolean;
1057
1432
  }
1058
1433
  /**
1059
- * StateUpdate is the single server → client message on the Session stream. On
1434
+ * StateUpdate is the single server → client message on the Subscribe stream. On
1060
1435
  * open the client receives a snapshot; thereafter partial patches. `seq` is
1061
1436
  * monotonic across snapshot+patch — a gap means the client should resubscribe
1062
1437
  * for a fresh snapshot. `error` is an out-of-band notice (command rejection /
@@ -1118,7 +1493,7 @@ export declare class StateUpdate extends Message<StateUpdate> {
1118
1493
  static equals(a: StateUpdate | PlainMessage<StateUpdate> | undefined, b: StateUpdate | PlainMessage<StateUpdate> | undefined): boolean;
1119
1494
  }
1120
1495
  /**
1121
- * Keepalive is an empty heartbeat frame sent on the Session/Subscribe streams so
1496
+ * Keepalive is an empty heartbeat frame sent on the Subscribe stream so
1122
1497
  * idle connections through proxies/LBs are not closed as idle. Notably the AWS
1123
1498
  * Classic ELB in front of ingress-nginx (dev/prod EKS) has a 300s connection
1124
1499
  * idle timeout; without these frames a quiet agent's gRPC-web server-stream is
@@ -1554,6 +1929,50 @@ export declare class Command extends Message<Command> {
1554
1929
  */
1555
1930
  value: Pong;
1556
1931
  case: "pong";
1932
+ } | {
1933
+ /**
1934
+ * Outbound-dialer campaign controls (OBDA1–3 CORE).
1935
+ *
1936
+ * enter a campaign (the picker's "Enter")
1937
+ *
1938
+ * @generated from field: babelconnect.v1.JoinCampaign join_campaign = 31;
1939
+ */
1940
+ value: JoinCampaign;
1941
+ case: "joinCampaign";
1942
+ } | {
1943
+ /**
1944
+ * leave the campaign (selector row or in-call)
1945
+ *
1946
+ * @generated from field: babelconnect.v1.LeaveCampaign leave_campaign = 32;
1947
+ */
1948
+ value: LeaveCampaign;
1949
+ case: "leaveCampaign";
1950
+ } | {
1951
+ /**
1952
+ * pause (on=true) / resume (on=false) the campaign
1953
+ *
1954
+ * @generated from field: babelconnect.v1.PauseCampaign pause_campaign = 33;
1955
+ */
1956
+ value: PauseCampaign;
1957
+ case: "pauseCampaign";
1958
+ } | {
1959
+ /**
1960
+ * Outbound-dialer call/disposition controls (OBDB2/OBDC1/OBDC2 follow-up).
1961
+ *
1962
+ * end the live campaign call (OBDB2)
1963
+ *
1964
+ * @generated from field: babelconnect.v1.EndCampaignCall end_campaign_call = 34;
1965
+ */
1966
+ value: EndCampaignCall;
1967
+ case: "endCampaignCall";
1968
+ } | {
1969
+ /**
1970
+ * record the call outcome, optionally with a callback (OBDC1/OBDC2)
1971
+ *
1972
+ * @generated from field: babelconnect.v1.DisposeCall dispose_call = 35;
1973
+ */
1974
+ value: DisposeCall;
1975
+ case: "disposeCall";
1557
1976
  } | {
1558
1977
  case: undefined;
1559
1978
  value?: undefined;
@@ -2012,6 +2431,227 @@ export declare class SetAgentNumber extends Message<SetAgentNumber> {
2012
2431
  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): SetAgentNumber;
2013
2432
  static equals(a: SetAgentNumber | PlainMessage<SetAgentNumber> | undefined, b: SetAgentNumber | PlainMessage<SetAgentNumber> | undefined): boolean;
2014
2433
  }
2434
+ /**
2435
+ * Campaign is one outbound-dialer campaign the agent may join (the picker's
2436
+ * entries). `test_mode` drives the "name (live)" / "name (test)" label
2437
+ * (OBDA1). Sourced from GET /api/v2/agent/outbound/campaigns (sbf/services
2438
+ * ObdController#listCampaigns / ObdModel.Campaign.Simple).
2439
+ *
2440
+ * @generated from message babelconnect.v1.Campaign
2441
+ */
2442
+ export declare class Campaign extends Message<Campaign> {
2443
+ /**
2444
+ * @generated from field: string id = 1;
2445
+ */
2446
+ id: string;
2447
+ /**
2448
+ * @generated from field: string name = 2;
2449
+ */
2450
+ name: string;
2451
+ /**
2452
+ * @generated from field: bool test_mode = 3;
2453
+ */
2454
+ testMode: boolean;
2455
+ /**
2456
+ * @generated from field: bool active = 4;
2457
+ */
2458
+ active: boolean;
2459
+ constructor(data?: PartialMessage<Campaign>);
2460
+ static readonly runtime: typeof proto3;
2461
+ static readonly typeName = "babelconnect.v1.Campaign";
2462
+ static readonly fields: FieldList;
2463
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): Campaign;
2464
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): Campaign;
2465
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): Campaign;
2466
+ static equals(a: Campaign | PlainMessage<Campaign> | undefined, b: Campaign | PlainMessage<Campaign> | undefined): boolean;
2467
+ }
2468
+ /**
2469
+ * ListCampaignsRequest / ListCampaignsResponse back the campaign picker
2470
+ * (OBDA1). Empty request: the server always asks the backend for active
2471
+ * campaigns only (`?active=true`) — there is no agent-facing use for
2472
+ * inactive ones.
2473
+ *
2474
+ * @generated from message babelconnect.v1.ListCampaignsRequest
2475
+ */
2476
+ export declare class ListCampaignsRequest extends Message<ListCampaignsRequest> {
2477
+ constructor(data?: PartialMessage<ListCampaignsRequest>);
2478
+ static readonly runtime: typeof proto3;
2479
+ static readonly typeName = "babelconnect.v1.ListCampaignsRequest";
2480
+ static readonly fields: FieldList;
2481
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListCampaignsRequest;
2482
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListCampaignsRequest;
2483
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListCampaignsRequest;
2484
+ static equals(a: ListCampaignsRequest | PlainMessage<ListCampaignsRequest> | undefined, b: ListCampaignsRequest | PlainMessage<ListCampaignsRequest> | undefined): boolean;
2485
+ }
2486
+ /**
2487
+ * @generated from message babelconnect.v1.ListCampaignsResponse
2488
+ */
2489
+ export declare class ListCampaignsResponse extends Message<ListCampaignsResponse> {
2490
+ /**
2491
+ * @generated from field: repeated babelconnect.v1.Campaign campaigns = 1;
2492
+ */
2493
+ campaigns: Campaign[];
2494
+ constructor(data?: PartialMessage<ListCampaignsResponse>);
2495
+ static readonly runtime: typeof proto3;
2496
+ static readonly typeName = "babelconnect.v1.ListCampaignsResponse";
2497
+ static readonly fields: FieldList;
2498
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListCampaignsResponse;
2499
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListCampaignsResponse;
2500
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListCampaignsResponse;
2501
+ static equals(a: ListCampaignsResponse | PlainMessage<ListCampaignsResponse> | undefined, b: ListCampaignsResponse | PlainMessage<ListCampaignsResponse> | undefined): boolean;
2502
+ }
2503
+ /**
2504
+ * JoinCampaign enters a campaign (POST /api/v2/agent/outbound/enter
2505
+ * {campaignId, paused}). `paused` mirrors the backend's own field (NOT
2506
+ * "unpause" — bc-v2's client sent that stale name, which the backend command
2507
+ * object silently ignores, defaulting `paused` true); the client normally
2508
+ * sends false so the agent starts `waiting` for a lead right away.
2509
+ *
2510
+ * @generated from message babelconnect.v1.JoinCampaign
2511
+ */
2512
+ export declare class JoinCampaign extends Message<JoinCampaign> {
2513
+ /**
2514
+ * @generated from field: string campaign_id = 1;
2515
+ */
2516
+ campaignId: string;
2517
+ /**
2518
+ * @generated from field: bool paused = 2;
2519
+ */
2520
+ paused: boolean;
2521
+ constructor(data?: PartialMessage<JoinCampaign>);
2522
+ static readonly runtime: typeof proto3;
2523
+ static readonly typeName = "babelconnect.v1.JoinCampaign";
2524
+ static readonly fields: FieldList;
2525
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): JoinCampaign;
2526
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): JoinCampaign;
2527
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): JoinCampaign;
2528
+ static equals(a: JoinCampaign | PlainMessage<JoinCampaign> | undefined, b: JoinCampaign | PlainMessage<JoinCampaign> | undefined): boolean;
2529
+ }
2530
+ /**
2531
+ * LeaveCampaign exits the current campaign (POST /api/v2/agent/outbound/leave
2532
+ * — no body; the backend resolves the agent's current campaign server-side).
2533
+ * Available both from the campaign selector row and from within an active
2534
+ * call (OBDA3).
2535
+ *
2536
+ * @generated from message babelconnect.v1.LeaveCampaign
2537
+ */
2538
+ export declare class LeaveCampaign extends Message<LeaveCampaign> {
2539
+ constructor(data?: PartialMessage<LeaveCampaign>);
2540
+ static readonly runtime: typeof proto3;
2541
+ static readonly typeName = "babelconnect.v1.LeaveCampaign";
2542
+ static readonly fields: FieldList;
2543
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): LeaveCampaign;
2544
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): LeaveCampaign;
2545
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): LeaveCampaign;
2546
+ static equals(a: LeaveCampaign | PlainMessage<LeaveCampaign> | undefined, b: LeaveCampaign | PlainMessage<LeaveCampaign> | undefined): boolean;
2547
+ }
2548
+ /**
2549
+ * PauseCampaign pauses (`on=true`, POST .../pause) or resumes (`on=false`,
2550
+ * POST .../unpause) the campaign — no request body either way (OBDA2), same
2551
+ * on/off shape as Mute/Hold.
2552
+ *
2553
+ * @generated from message babelconnect.v1.PauseCampaign
2554
+ */
2555
+ export declare class PauseCampaign extends Message<PauseCampaign> {
2556
+ /**
2557
+ * @generated from field: bool on = 1;
2558
+ */
2559
+ on: boolean;
2560
+ constructor(data?: PartialMessage<PauseCampaign>);
2561
+ static readonly runtime: typeof proto3;
2562
+ static readonly typeName = "babelconnect.v1.PauseCampaign";
2563
+ static readonly fields: FieldList;
2564
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): PauseCampaign;
2565
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): PauseCampaign;
2566
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): PauseCampaign;
2567
+ static equals(a: PauseCampaign | PlainMessage<PauseCampaign> | undefined, b: PauseCampaign | PlainMessage<PauseCampaign> | undefined): boolean;
2568
+ }
2569
+ /**
2570
+ * EndCampaignCall ends the agent's live campaign call (POST
2571
+ * /api/v2/agent/outbound/hangup — no body; OBDB2). Grounded distinct from the
2572
+ * generic Hangup: the backend's VicidialWrapperService#hangup both tells
2573
+ * Vicidial's own dialer to release the channel AND drives the campaign
2574
+ * member-state transition to DISPOSITION (sbf/services), neither of which a
2575
+ * plain SIP/media-plane hangup would trigger.
2576
+ *
2577
+ * @generated from message babelconnect.v1.EndCampaignCall
2578
+ */
2579
+ export declare class EndCampaignCall extends Message<EndCampaignCall> {
2580
+ constructor(data?: PartialMessage<EndCampaignCall>);
2581
+ static readonly runtime: typeof proto3;
2582
+ static readonly typeName = "babelconnect.v1.EndCampaignCall";
2583
+ static readonly fields: FieldList;
2584
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): EndCampaignCall;
2585
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): EndCampaignCall;
2586
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): EndCampaignCall;
2587
+ static equals(a: EndCampaignCall | PlainMessage<EndCampaignCall> | undefined, b: EndCampaignCall | PlainMessage<EndCampaignCall> | undefined): boolean;
2588
+ }
2589
+ /**
2590
+ * DisposeCall records the outcome of a campaign call (POST
2591
+ * /api/v2/agent/outbound/dispose {code, callbackDate?} — OBDC1/OBDC2). `code`
2592
+ * is one of ListDispositionsResponse's codes (e.g. "no_answer", "callback").
2593
+ * `callback_date` is ISO `YYYY-MM-DDTHH:mmZZ` and is set ONLY for the
2594
+ * "callback" disposition (OBDC2) — omitted (empty) otherwise, matching the
2595
+ * backend command object's own optional field (grounded: a `pause` field also
2596
+ * exists on the backend but is `@ApiStatus(not_implemented)`, so it is
2597
+ * intentionally not exposed here).
2598
+ *
2599
+ * @generated from message babelconnect.v1.DisposeCall
2600
+ */
2601
+ export declare class DisposeCall extends Message<DisposeCall> {
2602
+ /**
2603
+ * @generated from field: string code = 1;
2604
+ */
2605
+ code: string;
2606
+ /**
2607
+ * @generated from field: string callback_date = 2;
2608
+ */
2609
+ callbackDate: string;
2610
+ constructor(data?: PartialMessage<DisposeCall>);
2611
+ static readonly runtime: typeof proto3;
2612
+ static readonly typeName = "babelconnect.v1.DisposeCall";
2613
+ static readonly fields: FieldList;
2614
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): DisposeCall;
2615
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): DisposeCall;
2616
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): DisposeCall;
2617
+ static equals(a: DisposeCall | PlainMessage<DisposeCall> | undefined, b: DisposeCall | PlainMessage<DisposeCall> | undefined): boolean;
2618
+ }
2619
+ /**
2620
+ * ListDispositionsRequest / ListDispositionsResponse back the disposition
2621
+ * picker (OBDC1). Empty request: the list is a static global on the backend,
2622
+ * not campaign- or agent-scoped.
2623
+ *
2624
+ * @generated from message babelconnect.v1.ListDispositionsRequest
2625
+ */
2626
+ export declare class ListDispositionsRequest extends Message<ListDispositionsRequest> {
2627
+ constructor(data?: PartialMessage<ListDispositionsRequest>);
2628
+ static readonly runtime: typeof proto3;
2629
+ static readonly typeName = "babelconnect.v1.ListDispositionsRequest";
2630
+ static readonly fields: FieldList;
2631
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListDispositionsRequest;
2632
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListDispositionsRequest;
2633
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListDispositionsRequest;
2634
+ static equals(a: ListDispositionsRequest | PlainMessage<ListDispositionsRequest> | undefined, b: ListDispositionsRequest | PlainMessage<ListDispositionsRequest> | undefined): boolean;
2635
+ }
2636
+ /**
2637
+ * @generated from message babelconnect.v1.ListDispositionsResponse
2638
+ */
2639
+ export declare class ListDispositionsResponse extends Message<ListDispositionsResponse> {
2640
+ /**
2641
+ * raw codes, e.g. "no_answer", "callback"
2642
+ *
2643
+ * @generated from field: repeated string reasons = 1;
2644
+ */
2645
+ reasons: string[];
2646
+ constructor(data?: PartialMessage<ListDispositionsResponse>);
2647
+ static readonly runtime: typeof proto3;
2648
+ static readonly typeName = "babelconnect.v1.ListDispositionsResponse";
2649
+ static readonly fields: FieldList;
2650
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListDispositionsResponse;
2651
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListDispositionsResponse;
2652
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListDispositionsResponse;
2653
+ static equals(a: ListDispositionsResponse | PlainMessage<ListDispositionsResponse> | undefined, b: ListDispositionsResponse | PlainMessage<ListDispositionsResponse> | undefined): boolean;
2654
+ }
2015
2655
  /**
2016
2656
  * SmsConversation is one SMS thread summary carried in the AgentView (the full
2017
2657
  * thread history is fetched on demand, not held in the snapshot). Upsert-by-id;
@@ -2400,7 +3040,14 @@ export declare class StartConference extends Message<StartConference> {
2400
3040
  }
2401
3041
  /**
2402
3042
  * AddConferenceMember invites a participant — exactly one of agent_id / number.
2403
- * Starts a conference first if none is active.
3043
+ * Starts a conference first if none is active. `hold_others` parks every other
3044
+ * live, non-held member of the CURRENT conference before the invite goes out
3045
+ * (bc-v2's add-member "hold others" checkbox, `AddNewMemberModal.vue`, default
3046
+ * off) so they don't overhear the new invitee ringing; the server unholds them
3047
+ * again once the invitee reaches a terminal state (added = joined, or
3048
+ * failed/removed = rejected/timed out) — see CA4 / docs/designs/conferencing.md.
3049
+ * No effect when starting a brand-new conference: StartConference(hold=true)
3050
+ * already parks the original party unconditionally in that case.
2404
3051
  *
2405
3052
  * @generated from message babelconnect.v1.AddConferenceMember
2406
3053
  */
@@ -2413,6 +3060,10 @@ export declare class AddConferenceMember extends Message<AddConferenceMember> {
2413
3060
  * @generated from field: string number = 2;
2414
3061
  */
2415
3062
  number: string;
3063
+ /**
3064
+ * @generated from field: bool hold_others = 3;
3065
+ */
3066
+ holdOthers: boolean;
2416
3067
  constructor(data?: PartialMessage<AddConferenceMember>);
2417
3068
  static readonly runtime: typeof proto3;
2418
3069
  static readonly typeName = "babelconnect.v1.AddConferenceMember";