@babelforce/babelconnect-sdk 0.11.0 → 0.12.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.
@@ -52,6 +52,93 @@ proto3.util.setEnumType(AgentState, "babelconnect.v1.AgentState", [
52
52
  { no: 6, name: "AGENT_STATE_RINGING" },
53
53
  { no: 7, name: "AGENT_STATE_BUSY" },
54
54
  ]);
55
+ /**
56
+ * CampaignMemberState mirrors the backend's AgentStatus.Status enum exactly
57
+ * (sbf/services AgentStatus.groovy) — the predictive-dialer campaign
58
+ * membership lifecycle: offline -> logging_in -> waiting -> in_progress ->
59
+ * disposition (-> waiting for the next lead), with idle as the paused branch
60
+ * (waiting/logging_in <-> idle via pause/resume) and leave returning to
61
+ * offline from any state.
62
+ *
63
+ * @generated from enum babelconnect.v1.CampaignMemberState
64
+ */
65
+ export var CampaignMemberState;
66
+ (function (CampaignMemberState) {
67
+ /**
68
+ * @generated from enum value: CAMPAIGN_MEMBER_STATE_UNSPECIFIED = 0;
69
+ */
70
+ CampaignMemberState[CampaignMemberState["UNSPECIFIED"] = 0] = "UNSPECIFIED";
71
+ /**
72
+ * @generated from enum value: CAMPAIGN_MEMBER_STATE_OFFLINE = 1;
73
+ */
74
+ CampaignMemberState[CampaignMemberState["OFFLINE"] = 1] = "OFFLINE";
75
+ /**
76
+ * @generated from enum value: CAMPAIGN_MEMBER_STATE_LOGGING_IN = 2;
77
+ */
78
+ CampaignMemberState[CampaignMemberState["LOGGING_IN"] = 2] = "LOGGING_IN";
79
+ /**
80
+ * @generated from enum value: CAMPAIGN_MEMBER_STATE_WAITING = 3;
81
+ */
82
+ CampaignMemberState[CampaignMemberState["WAITING"] = 3] = "WAITING";
83
+ /**
84
+ * paused
85
+ *
86
+ * @generated from enum value: CAMPAIGN_MEMBER_STATE_IDLE = 4;
87
+ */
88
+ CampaignMemberState[CampaignMemberState["IDLE"] = 4] = "IDLE";
89
+ /**
90
+ * @generated from enum value: CAMPAIGN_MEMBER_STATE_IN_PROGRESS = 5;
91
+ */
92
+ CampaignMemberState[CampaignMemberState["IN_PROGRESS"] = 5] = "IN_PROGRESS";
93
+ /**
94
+ * @generated from enum value: CAMPAIGN_MEMBER_STATE_DISPOSITION = 6;
95
+ */
96
+ CampaignMemberState[CampaignMemberState["DISPOSITION"] = 6] = "DISPOSITION";
97
+ })(CampaignMemberState || (CampaignMemberState = {}));
98
+ // Retrieve enum metadata with: proto3.getEnumType(CampaignMemberState)
99
+ proto3.util.setEnumType(CampaignMemberState, "babelconnect.v1.CampaignMemberState", [
100
+ { no: 0, name: "CAMPAIGN_MEMBER_STATE_UNSPECIFIED" },
101
+ { no: 1, name: "CAMPAIGN_MEMBER_STATE_OFFLINE" },
102
+ { no: 2, name: "CAMPAIGN_MEMBER_STATE_LOGGING_IN" },
103
+ { no: 3, name: "CAMPAIGN_MEMBER_STATE_WAITING" },
104
+ { no: 4, name: "CAMPAIGN_MEMBER_STATE_IDLE" },
105
+ { no: 5, name: "CAMPAIGN_MEMBER_STATE_IN_PROGRESS" },
106
+ { no: 6, name: "CAMPAIGN_MEMBER_STATE_DISPOSITION" },
107
+ ]);
108
+ /**
109
+ * TransferTargetKind discriminates a TransferTarget. Mirrors the backend's
110
+ * TransferTargetItem.Type enum exactly (agent/number/application — there is no
111
+ * "phonebook" kind on the backend; bc-v2's UI groups results that way, but the
112
+ * wire type only ever carries these three).
113
+ *
114
+ * @generated from enum babelconnect.v1.TransferTargetKind
115
+ */
116
+ export var TransferTargetKind;
117
+ (function (TransferTargetKind) {
118
+ /**
119
+ * @generated from enum value: TRANSFER_TARGET_KIND_UNSPECIFIED = 0;
120
+ */
121
+ TransferTargetKind[TransferTargetKind["UNSPECIFIED"] = 0] = "UNSPECIFIED";
122
+ /**
123
+ * @generated from enum value: TRANSFER_TARGET_KIND_AGENT = 1;
124
+ */
125
+ TransferTargetKind[TransferTargetKind["AGENT"] = 1] = "AGENT";
126
+ /**
127
+ * @generated from enum value: TRANSFER_TARGET_KIND_NUMBER = 2;
128
+ */
129
+ TransferTargetKind[TransferTargetKind["NUMBER"] = 2] = "NUMBER";
130
+ /**
131
+ * @generated from enum value: TRANSFER_TARGET_KIND_APPLICATION = 3;
132
+ */
133
+ TransferTargetKind[TransferTargetKind["APPLICATION"] = 3] = "APPLICATION";
134
+ })(TransferTargetKind || (TransferTargetKind = {}));
135
+ // Retrieve enum metadata with: proto3.getEnumType(TransferTargetKind)
136
+ proto3.util.setEnumType(TransferTargetKind, "babelconnect.v1.TransferTargetKind", [
137
+ { no: 0, name: "TRANSFER_TARGET_KIND_UNSPECIFIED" },
138
+ { no: 1, name: "TRANSFER_TARGET_KIND_AGENT" },
139
+ { no: 2, name: "TRANSFER_TARGET_KIND_NUMBER" },
140
+ { no: 3, name: "TRANSFER_TARGET_KIND_APPLICATION" },
141
+ ]);
55
142
  /**
56
143
  * @generated from enum babelconnect.v1.CallDirection
57
144
  */
@@ -1086,6 +1173,35 @@ export class AgentInfo extends Message {
1086
1173
  * @generated from field: repeated babelconnect.v1.Account accounts = 19;
1087
1174
  */
1088
1175
  accounts = [];
1176
+ /**
1177
+ * The agent's own email (GET /agent/me item.email — distinct from `username`,
1178
+ * which is the *login* identity from user/me/introspection and may differ).
1179
+ * Populated for the embedding bridge's legacy-shaped `agent.loaded` payload
1180
+ * (EMB20, bc-connect parity) — bc-connect hosts match/route on it.
1181
+ *
1182
+ * @generated from field: string email = 20;
1183
+ */
1184
+ email = "";
1185
+ /**
1186
+ * Subset of `available_numbers` the backend marks SMS-capable (GET
1187
+ * /api/v2/agent/numbers item `sms`, sourced from core_number.sms_enabled;
1188
+ * mirrors bc-v2's AgentNumberFreeText.vue `smsOnly` filter). Drives the SMS
1189
+ * composer's From picker (SMSC4); empty/unknown ⇒ client falls back to
1190
+ * `available_numbers` (see docs/designs/messaging.md).
1191
+ *
1192
+ * @generated from field: repeated string sms_capable_numbers = 21;
1193
+ */
1194
+ smsCapableNumbers = [];
1195
+ /**
1196
+ * Outbound-dialer (predictive campaign) membership state — folded from the
1197
+ * `/agent/{id}/obd` Faye push plus a GET /agent/outbound/status enrichment
1198
+ * read (OBDA1–4). Unset/UNSPECIFIED means the agent has never touched a
1199
+ * campaign this session; explicit OFFLINE means they left/aren't in one.
1200
+ * See docs/designs/obd.md.
1201
+ *
1202
+ * @generated from field: babelconnect.v1.CampaignStatus campaign_status = 22;
1203
+ */
1204
+ campaignStatus;
1089
1205
  constructor(data) {
1090
1206
  super();
1091
1207
  proto3.util.initPartial(data, this);
@@ -1112,6 +1228,9 @@ export class AgentInfo extends Message {
1112
1228
  { no: 17, name: "account_name", kind: "scalar", T: 9 /* ScalarType.STRING */ },
1113
1229
  { no: 18, name: "line_blocked", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
1114
1230
  { no: 19, name: "accounts", kind: "message", T: Account, repeated: true },
1231
+ { no: 20, name: "email", kind: "scalar", T: 9 /* ScalarType.STRING */ },
1232
+ { no: 21, name: "sms_capable_numbers", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
1233
+ { no: 22, name: "campaign_status", kind: "message", T: CampaignStatus },
1115
1234
  ]);
1116
1235
  static fromBinary(bytes, options) {
1117
1236
  return new AgentInfo().fromBinary(bytes, options);
@@ -1126,6 +1245,236 @@ export class AgentInfo extends Message {
1126
1245
  return proto3.util.equals(AgentInfo, a, b);
1127
1246
  }
1128
1247
  }
1248
+ /**
1249
+ * CampaignStatus is the agent's outbound-dialer campaign membership envelope
1250
+ * (OBDA1–4 CORE). `campaign_id`/`campaign_name` and `state` come from a GET
1251
+ * /agent/outbound/status read (backend: ObdAgentService.getStatus); `state`
1252
+ * and `last_reason` are additionally kept live by the `/agent/{id}/obd` Faye
1253
+ * push (AgentPushService.pushObdEvent — that push carries ONLY status +
1254
+ * last_reason, never campaign/lead, hence the enrichment read). `last_reason`
1255
+ * mirrors the backend's AgentStatus.Reason enum as a lowercase string (e.g.
1256
+ * "unreachable", "no_answer", "busy", "answer", "hungup", "none") — kept as a
1257
+ * string rather than a wire enum since the client only ever compares it
1258
+ * against "unreachable" for the OBDA4 toast. `paused` is a convenience mirror
1259
+ * of `state == CAMPAIGN_MEMBER_STATE_IDLE`. The lead the agent is currently
1260
+ * dialing, disposition reasons, and live campaign metrics are additive fields
1261
+ * below (OBDB1/OBDD1) layered on top of this envelope.
1262
+ *
1263
+ * @generated from message babelconnect.v1.CampaignStatus
1264
+ */
1265
+ export class CampaignStatus extends Message {
1266
+ /**
1267
+ * @generated from field: string campaign_id = 1;
1268
+ */
1269
+ campaignId = "";
1270
+ /**
1271
+ * @generated from field: string campaign_name = 2;
1272
+ */
1273
+ campaignName = "";
1274
+ /**
1275
+ * @generated from field: babelconnect.v1.CampaignMemberState state = 3;
1276
+ */
1277
+ state = CampaignMemberState.UNSPECIFIED;
1278
+ /**
1279
+ * @generated from field: bool paused = 4;
1280
+ */
1281
+ paused = false;
1282
+ /**
1283
+ * @generated from field: string last_reason = 5;
1284
+ */
1285
+ lastReason = "";
1286
+ /**
1287
+ * unix seconds this state was entered/last confirmed
1288
+ *
1289
+ * @generated from field: int64 since = 6;
1290
+ */
1291
+ since = protoInt64.zero;
1292
+ /**
1293
+ * lead is the customer the dialer connected the agent to (OBDB1) — set once
1294
+ * GET /agent/outbound/status's `lead` sub-object is non-empty (IN_PROGRESS/
1295
+ * DISPOSITION), unset otherwise. Also kept live by a genuine backend push (a
1296
+ * `cti.outbound.lead` Faye event — sbf/services AgentCtiService#pushLead,
1297
+ * CTIA3) that arrives the moment the dialer connects a lead, ahead of the
1298
+ * next enrichment poll.
1299
+ *
1300
+ * @generated from field: babelconnect.v1.Lead lead = 7;
1301
+ */
1302
+ lead;
1303
+ /**
1304
+ * metrics is the campaign's live pacing snapshot (OBDD1), refreshed
1305
+ * alongside the enrichment read while `state == IDLE` (paused) — the only
1306
+ * state the Outbound tab shows it in; unset otherwise (and left unset if the
1307
+ * GET /agent/outbound/metrics read 404s, e.g. between polls).
1308
+ *
1309
+ * @generated from field: babelconnect.v1.CampaignMetrics metrics = 8;
1310
+ */
1311
+ metrics;
1312
+ constructor(data) {
1313
+ super();
1314
+ proto3.util.initPartial(data, this);
1315
+ }
1316
+ static runtime = proto3;
1317
+ static typeName = "babelconnect.v1.CampaignStatus";
1318
+ static fields = proto3.util.newFieldList(() => [
1319
+ { no: 1, name: "campaign_id", kind: "scalar", T: 9 /* ScalarType.STRING */ },
1320
+ { no: 2, name: "campaign_name", kind: "scalar", T: 9 /* ScalarType.STRING */ },
1321
+ { no: 3, name: "state", kind: "enum", T: proto3.getEnumType(CampaignMemberState) },
1322
+ { no: 4, name: "paused", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
1323
+ { no: 5, name: "last_reason", kind: "scalar", T: 9 /* ScalarType.STRING */ },
1324
+ { no: 6, name: "since", kind: "scalar", T: 3 /* ScalarType.INT64 */ },
1325
+ { no: 7, name: "lead", kind: "message", T: Lead },
1326
+ { no: 8, name: "metrics", kind: "message", T: CampaignMetrics },
1327
+ ]);
1328
+ static fromBinary(bytes, options) {
1329
+ return new CampaignStatus().fromBinary(bytes, options);
1330
+ }
1331
+ static fromJson(jsonValue, options) {
1332
+ return new CampaignStatus().fromJson(jsonValue, options);
1333
+ }
1334
+ static fromJsonString(jsonString, options) {
1335
+ return new CampaignStatus().fromJsonString(jsonString, options);
1336
+ }
1337
+ static equals(a, b) {
1338
+ return proto3.util.equals(CampaignStatus, a, b);
1339
+ }
1340
+ }
1341
+ /**
1342
+ * Lead is the customer the outbound dialer connected the agent to (OBDB1),
1343
+ * grounded in GET /agent/outbound/status's `lead` sub-object (sbf/services
1344
+ * ObdAgentService#getStatus) and the `cti.outbound.lead` Faye push's `body`
1345
+ * (AgentPushMessages.Lead.LeadBody, CTIA3) — both share the uid/number/data
1346
+ * shape; `id`/`rank` are only present on the richer (list-enriched) form the
1347
+ * GET read can return. `id` is the internal lead-list-item id — DISTINCT from
1348
+ * `uid`, the customer-provided identifier the OBDB1 acceptance calls the
1349
+ * lead's "id" in the UI.
1350
+ *
1351
+ * @generated from message babelconnect.v1.Lead
1352
+ */
1353
+ export class Lead extends Message {
1354
+ /**
1355
+ * internal lead-list-item id (uuid); may be empty
1356
+ *
1357
+ * @generated from field: string id = 1;
1358
+ */
1359
+ id = "";
1360
+ /**
1361
+ * customer-provided lead identifier — the UI's "id"
1362
+ *
1363
+ * @generated from field: string uid = 2;
1364
+ */
1365
+ uid = "";
1366
+ /**
1367
+ * @generated from field: string number = 3;
1368
+ */
1369
+ number = "";
1370
+ /**
1371
+ * @generated from field: int32 rank = 4;
1372
+ */
1373
+ rank = 0;
1374
+ /**
1375
+ * arbitrary customer-supplied key/values
1376
+ *
1377
+ * @generated from field: map<string, string> data = 5;
1378
+ */
1379
+ data = {};
1380
+ constructor(data) {
1381
+ super();
1382
+ proto3.util.initPartial(data, this);
1383
+ }
1384
+ static runtime = proto3;
1385
+ static typeName = "babelconnect.v1.Lead";
1386
+ static fields = proto3.util.newFieldList(() => [
1387
+ { no: 1, name: "id", kind: "scalar", T: 9 /* ScalarType.STRING */ },
1388
+ { no: 2, name: "uid", kind: "scalar", T: 9 /* ScalarType.STRING */ },
1389
+ { no: 3, name: "number", kind: "scalar", T: 9 /* ScalarType.STRING */ },
1390
+ { no: 4, name: "rank", kind: "scalar", T: 5 /* ScalarType.INT32 */ },
1391
+ { no: 5, name: "data", kind: "map", K: 9 /* ScalarType.STRING */, V: { kind: "scalar", T: 9 /* ScalarType.STRING */ } },
1392
+ ]);
1393
+ static fromBinary(bytes, options) {
1394
+ return new Lead().fromBinary(bytes, options);
1395
+ }
1396
+ static fromJson(jsonValue, options) {
1397
+ return new Lead().fromJson(jsonValue, options);
1398
+ }
1399
+ static fromJsonString(jsonString, options) {
1400
+ return new Lead().fromJsonString(jsonString, options);
1401
+ }
1402
+ static equals(a, b) {
1403
+ return proto3.util.equals(Lead, a, b);
1404
+ }
1405
+ }
1406
+ /**
1407
+ * CampaignMetrics is the campaign's live pacing snapshot (OBDD1), grounded in
1408
+ * GET /agent/outbound/metrics's flat dot-key map (sbf/services
1409
+ * ObdController#metrics, itself a filtered subset of Vicidial's realtime
1410
+ * report) — always this exact 6-key subset, never more.
1411
+ *
1412
+ * @generated from message babelconnect.v1.CampaignMetrics
1413
+ */
1414
+ export class CampaignMetrics extends Message {
1415
+ /**
1416
+ * agents.in_calls
1417
+ *
1418
+ * @generated from field: int32 agents_in_calls = 1;
1419
+ */
1420
+ agentsInCalls = 0;
1421
+ /**
1422
+ * agents.in_disp
1423
+ *
1424
+ * @generated from field: int32 agents_in_disp = 2;
1425
+ */
1426
+ agentsInDisp = 0;
1427
+ /**
1428
+ * agents.paused
1429
+ *
1430
+ * @generated from field: int32 agents_paused = 3;
1431
+ */
1432
+ agentsPaused = 0;
1433
+ /**
1434
+ * agents.waiting
1435
+ *
1436
+ * @generated from field: int32 agents_waiting = 4;
1437
+ */
1438
+ agentsWaiting = 0;
1439
+ /**
1440
+ * calls.being_placed
1441
+ *
1442
+ * @generated from field: int32 calls_being_placed = 5;
1443
+ */
1444
+ callsBeingPlaced = 0;
1445
+ /**
1446
+ * calls.ringing
1447
+ *
1448
+ * @generated from field: int32 calls_ringing = 6;
1449
+ */
1450
+ callsRinging = 0;
1451
+ constructor(data) {
1452
+ super();
1453
+ proto3.util.initPartial(data, this);
1454
+ }
1455
+ static runtime = proto3;
1456
+ static typeName = "babelconnect.v1.CampaignMetrics";
1457
+ static fields = proto3.util.newFieldList(() => [
1458
+ { no: 1, name: "agents_in_calls", kind: "scalar", T: 5 /* ScalarType.INT32 */ },
1459
+ { no: 2, name: "agents_in_disp", kind: "scalar", T: 5 /* ScalarType.INT32 */ },
1460
+ { no: 3, name: "agents_paused", kind: "scalar", T: 5 /* ScalarType.INT32 */ },
1461
+ { no: 4, name: "agents_waiting", kind: "scalar", T: 5 /* ScalarType.INT32 */ },
1462
+ { no: 5, name: "calls_being_placed", kind: "scalar", T: 5 /* ScalarType.INT32 */ },
1463
+ { no: 6, name: "calls_ringing", kind: "scalar", T: 5 /* ScalarType.INT32 */ },
1464
+ ]);
1465
+ static fromBinary(bytes, options) {
1466
+ return new CampaignMetrics().fromBinary(bytes, options);
1467
+ }
1468
+ static fromJson(jsonValue, options) {
1469
+ return new CampaignMetrics().fromJson(jsonValue, options);
1470
+ }
1471
+ static fromJsonString(jsonString, options) {
1472
+ return new CampaignMetrics().fromJsonString(jsonString, options);
1473
+ }
1474
+ static equals(a, b) {
1475
+ return proto3.util.equals(CampaignMetrics, a, b);
1476
+ }
1477
+ }
1129
1478
  /**
1130
1479
  * PhonebookEntry is one dialable contact (or a recent number) for the dialer's
1131
1480
  * autocomplete.
@@ -1245,6 +1594,140 @@ export class PhonebookResponse extends Message {
1245
1594
  return proto3.util.equals(PhonebookResponse, a, b);
1246
1595
  }
1247
1596
  }
1597
+ /**
1598
+ * TransferTarget is one autocomplete result for a blind transfer / add-member
1599
+ * pick. `id` is the backend id to pass back on Transfer/AddConferenceMember
1600
+ * (an agent or application UUID; for a synthetic NUMBER result it is the raw
1601
+ * query, not a stable id — clients should send `number`, not `id`, for that
1602
+ * kind). `category` is the IVR module name (APPLICATION only, e.g.
1603
+ * "simpleMenu"); `browser` marks an agent reachable only via browser phone
1604
+ * (no PSTN number) — AGENT only.
1605
+ *
1606
+ * @generated from message babelconnect.v1.TransferTarget
1607
+ */
1608
+ export class TransferTarget extends Message {
1609
+ /**
1610
+ * @generated from field: string id = 1;
1611
+ */
1612
+ id = "";
1613
+ /**
1614
+ * @generated from field: babelconnect.v1.TransferTargetKind kind = 2;
1615
+ */
1616
+ kind = TransferTargetKind.UNSPECIFIED;
1617
+ /**
1618
+ * @generated from field: string label = 3;
1619
+ */
1620
+ label = "";
1621
+ /**
1622
+ * NUMBER kind, and AGENT kind when it has a PSTN number
1623
+ *
1624
+ * @generated from field: string number = 4;
1625
+ */
1626
+ number = "";
1627
+ /**
1628
+ * APPLICATION only: the IVR module name
1629
+ *
1630
+ * @generated from field: string category = 5;
1631
+ */
1632
+ category = "";
1633
+ /**
1634
+ * AGENT only: browser-phone-reachable, no PSTN number
1635
+ *
1636
+ * @generated from field: bool browser = 6;
1637
+ */
1638
+ browser = false;
1639
+ constructor(data) {
1640
+ super();
1641
+ proto3.util.initPartial(data, this);
1642
+ }
1643
+ static runtime = proto3;
1644
+ static typeName = "babelconnect.v1.TransferTarget";
1645
+ static fields = proto3.util.newFieldList(() => [
1646
+ { no: 1, name: "id", kind: "scalar", T: 9 /* ScalarType.STRING */ },
1647
+ { no: 2, name: "kind", kind: "enum", T: proto3.getEnumType(TransferTargetKind) },
1648
+ { no: 3, name: "label", kind: "scalar", T: 9 /* ScalarType.STRING */ },
1649
+ { no: 4, name: "number", kind: "scalar", T: 9 /* ScalarType.STRING */ },
1650
+ { no: 5, name: "category", kind: "scalar", T: 9 /* ScalarType.STRING */ },
1651
+ { no: 6, name: "browser", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
1652
+ ]);
1653
+ static fromBinary(bytes, options) {
1654
+ return new TransferTarget().fromBinary(bytes, options);
1655
+ }
1656
+ static fromJson(jsonValue, options) {
1657
+ return new TransferTarget().fromJson(jsonValue, options);
1658
+ }
1659
+ static fromJsonString(jsonString, options) {
1660
+ return new TransferTarget().fromJsonString(jsonString, options);
1661
+ }
1662
+ static equals(a, b) {
1663
+ return proto3.util.equals(TransferTarget, a, b);
1664
+ }
1665
+ }
1666
+ /**
1667
+ * TransferTargetsRequest / TransferTargetsResponse back the transfer-target
1668
+ * autocomplete (blind transfer + add-member dialogs). `query` filters
1669
+ * server-side; empty returns the default result set (a synthetic NUMBER
1670
+ * target only appears once `query` looks like a number).
1671
+ *
1672
+ * @generated from message babelconnect.v1.TransferTargetsRequest
1673
+ */
1674
+ export class TransferTargetsRequest extends Message {
1675
+ /**
1676
+ * @generated from field: string query = 1;
1677
+ */
1678
+ query = "";
1679
+ constructor(data) {
1680
+ super();
1681
+ proto3.util.initPartial(data, this);
1682
+ }
1683
+ static runtime = proto3;
1684
+ static typeName = "babelconnect.v1.TransferTargetsRequest";
1685
+ static fields = proto3.util.newFieldList(() => [
1686
+ { no: 1, name: "query", kind: "scalar", T: 9 /* ScalarType.STRING */ },
1687
+ ]);
1688
+ static fromBinary(bytes, options) {
1689
+ return new TransferTargetsRequest().fromBinary(bytes, options);
1690
+ }
1691
+ static fromJson(jsonValue, options) {
1692
+ return new TransferTargetsRequest().fromJson(jsonValue, options);
1693
+ }
1694
+ static fromJsonString(jsonString, options) {
1695
+ return new TransferTargetsRequest().fromJsonString(jsonString, options);
1696
+ }
1697
+ static equals(a, b) {
1698
+ return proto3.util.equals(TransferTargetsRequest, a, b);
1699
+ }
1700
+ }
1701
+ /**
1702
+ * @generated from message babelconnect.v1.TransferTargetsResponse
1703
+ */
1704
+ export class TransferTargetsResponse extends Message {
1705
+ /**
1706
+ * @generated from field: repeated babelconnect.v1.TransferTarget targets = 1;
1707
+ */
1708
+ targets = [];
1709
+ constructor(data) {
1710
+ super();
1711
+ proto3.util.initPartial(data, this);
1712
+ }
1713
+ static runtime = proto3;
1714
+ static typeName = "babelconnect.v1.TransferTargetsResponse";
1715
+ static fields = proto3.util.newFieldList(() => [
1716
+ { no: 1, name: "targets", kind: "message", T: TransferTarget, repeated: true },
1717
+ ]);
1718
+ static fromBinary(bytes, options) {
1719
+ return new TransferTargetsResponse().fromBinary(bytes, options);
1720
+ }
1721
+ static fromJson(jsonValue, options) {
1722
+ return new TransferTargetsResponse().fromJson(jsonValue, options);
1723
+ }
1724
+ static fromJsonString(jsonString, options) {
1725
+ return new TransferTargetsResponse().fromJsonString(jsonString, options);
1726
+ }
1727
+ static equals(a, b) {
1728
+ return proto3.util.equals(TransferTargetsResponse, a, b);
1729
+ }
1730
+ }
1248
1731
  /**
1249
1732
  * PresenceOption is one selectable agent presence — "Available" or a configured
1250
1733
  * pause reason. `available` is whether the agent can receive calls in it.
@@ -1376,6 +1859,17 @@ export class CallState extends Message {
1376
1859
  * @generated from field: repeated babelconnect.v1.IceServer ice_servers = 17;
1377
1860
  */
1378
1861
  iceServers = [];
1862
+ /**
1863
+ * can_transfer_to_application is server-computed: true for inbound calls and
1864
+ * taken callbacks (source == CALL_SOURCE_CALLBACK), false otherwise. Plain
1865
+ * outbound calls must not be offered application (IVR module) transfer
1866
+ * targets — forwarding them into a queue module strands the agent
1867
+ * (DEV-549/B2-526). Clients gate the "App" transfer-target segment on this
1868
+ * flag instead of re-deriving the rule from direction/source themselves.
1869
+ *
1870
+ * @generated from field: bool can_transfer_to_application = 18;
1871
+ */
1872
+ canTransferToApplication = false;
1379
1873
  constructor(data) {
1380
1874
  super();
1381
1875
  proto3.util.initPartial(data, this);
@@ -1400,6 +1894,7 @@ export class CallState extends Message {
1400
1894
  { no: 15, name: "recording_tags", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
1401
1895
  { no: 16, name: "recording_flagged", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
1402
1896
  { no: 17, name: "ice_servers", kind: "message", T: IceServer, repeated: true },
1897
+ { no: 18, name: "can_transfer_to_application", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
1403
1898
  ]);
1404
1899
  static fromBinary(bytes, options) {
1405
1900
  return new CallState().fromBinary(bytes, options);
@@ -1814,6 +2309,11 @@ export class Command extends Message {
1814
2309
  { no: 28, name: "set_conversation_open", kind: "message", T: SetConversationOpen, oneof: "command" },
1815
2310
  { no: 29, name: "mark_conversation_read", kind: "message", T: MarkConversationRead, oneof: "command" },
1816
2311
  { no: 30, name: "pong", kind: "message", T: Pong, oneof: "command" },
2312
+ { no: 31, name: "join_campaign", kind: "message", T: JoinCampaign, oneof: "command" },
2313
+ { no: 32, name: "leave_campaign", kind: "message", T: LeaveCampaign, oneof: "command" },
2314
+ { no: 33, name: "pause_campaign", kind: "message", T: PauseCampaign, oneof: "command" },
2315
+ { no: 34, name: "end_campaign_call", kind: "message", T: EndCampaignCall, oneof: "command" },
2316
+ { no: 35, name: "dispose_call", kind: "message", T: DisposeCall, oneof: "command" },
1817
2317
  ]);
1818
2318
  static fromBinary(bytes, options) {
1819
2319
  return new Command().fromBinary(bytes, options);
@@ -2540,6 +3040,354 @@ export class SetAgentNumber extends Message {
2540
3040
  return proto3.util.equals(SetAgentNumber, a, b);
2541
3041
  }
2542
3042
  }
3043
+ /**
3044
+ * Campaign is one outbound-dialer campaign the agent may join (the picker's
3045
+ * entries). `test_mode` drives the "name (live)" / "name (test)" label
3046
+ * (OBDA1). Sourced from GET /api/v2/agent/outbound/campaigns (sbf/services
3047
+ * ObdController#listCampaigns / ObdModel.Campaign.Simple).
3048
+ *
3049
+ * @generated from message babelconnect.v1.Campaign
3050
+ */
3051
+ export class Campaign extends Message {
3052
+ /**
3053
+ * @generated from field: string id = 1;
3054
+ */
3055
+ id = "";
3056
+ /**
3057
+ * @generated from field: string name = 2;
3058
+ */
3059
+ name = "";
3060
+ /**
3061
+ * @generated from field: bool test_mode = 3;
3062
+ */
3063
+ testMode = false;
3064
+ /**
3065
+ * @generated from field: bool active = 4;
3066
+ */
3067
+ active = false;
3068
+ constructor(data) {
3069
+ super();
3070
+ proto3.util.initPartial(data, this);
3071
+ }
3072
+ static runtime = proto3;
3073
+ static typeName = "babelconnect.v1.Campaign";
3074
+ static fields = proto3.util.newFieldList(() => [
3075
+ { no: 1, name: "id", kind: "scalar", T: 9 /* ScalarType.STRING */ },
3076
+ { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ },
3077
+ { no: 3, name: "test_mode", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
3078
+ { no: 4, name: "active", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
3079
+ ]);
3080
+ static fromBinary(bytes, options) {
3081
+ return new Campaign().fromBinary(bytes, options);
3082
+ }
3083
+ static fromJson(jsonValue, options) {
3084
+ return new Campaign().fromJson(jsonValue, options);
3085
+ }
3086
+ static fromJsonString(jsonString, options) {
3087
+ return new Campaign().fromJsonString(jsonString, options);
3088
+ }
3089
+ static equals(a, b) {
3090
+ return proto3.util.equals(Campaign, a, b);
3091
+ }
3092
+ }
3093
+ /**
3094
+ * ListCampaignsRequest / ListCampaignsResponse back the campaign picker
3095
+ * (OBDA1). Empty request: the server always asks the backend for active
3096
+ * campaigns only (`?active=true`) — there is no agent-facing use for
3097
+ * inactive ones.
3098
+ *
3099
+ * @generated from message babelconnect.v1.ListCampaignsRequest
3100
+ */
3101
+ export class ListCampaignsRequest extends Message {
3102
+ constructor(data) {
3103
+ super();
3104
+ proto3.util.initPartial(data, this);
3105
+ }
3106
+ static runtime = proto3;
3107
+ static typeName = "babelconnect.v1.ListCampaignsRequest";
3108
+ static fields = proto3.util.newFieldList(() => []);
3109
+ static fromBinary(bytes, options) {
3110
+ return new ListCampaignsRequest().fromBinary(bytes, options);
3111
+ }
3112
+ static fromJson(jsonValue, options) {
3113
+ return new ListCampaignsRequest().fromJson(jsonValue, options);
3114
+ }
3115
+ static fromJsonString(jsonString, options) {
3116
+ return new ListCampaignsRequest().fromJsonString(jsonString, options);
3117
+ }
3118
+ static equals(a, b) {
3119
+ return proto3.util.equals(ListCampaignsRequest, a, b);
3120
+ }
3121
+ }
3122
+ /**
3123
+ * @generated from message babelconnect.v1.ListCampaignsResponse
3124
+ */
3125
+ export class ListCampaignsResponse extends Message {
3126
+ /**
3127
+ * @generated from field: repeated babelconnect.v1.Campaign campaigns = 1;
3128
+ */
3129
+ campaigns = [];
3130
+ constructor(data) {
3131
+ super();
3132
+ proto3.util.initPartial(data, this);
3133
+ }
3134
+ static runtime = proto3;
3135
+ static typeName = "babelconnect.v1.ListCampaignsResponse";
3136
+ static fields = proto3.util.newFieldList(() => [
3137
+ { no: 1, name: "campaigns", kind: "message", T: Campaign, repeated: true },
3138
+ ]);
3139
+ static fromBinary(bytes, options) {
3140
+ return new ListCampaignsResponse().fromBinary(bytes, options);
3141
+ }
3142
+ static fromJson(jsonValue, options) {
3143
+ return new ListCampaignsResponse().fromJson(jsonValue, options);
3144
+ }
3145
+ static fromJsonString(jsonString, options) {
3146
+ return new ListCampaignsResponse().fromJsonString(jsonString, options);
3147
+ }
3148
+ static equals(a, b) {
3149
+ return proto3.util.equals(ListCampaignsResponse, a, b);
3150
+ }
3151
+ }
3152
+ /**
3153
+ * JoinCampaign enters a campaign (POST /api/v2/agent/outbound/enter
3154
+ * {campaignId, paused}). `paused` mirrors the backend's own field (NOT
3155
+ * "unpause" — bc-v2's client sent that stale name, which the backend command
3156
+ * object silently ignores, defaulting `paused` true); the client normally
3157
+ * sends false so the agent starts `waiting` for a lead right away.
3158
+ *
3159
+ * @generated from message babelconnect.v1.JoinCampaign
3160
+ */
3161
+ export class JoinCampaign extends Message {
3162
+ /**
3163
+ * @generated from field: string campaign_id = 1;
3164
+ */
3165
+ campaignId = "";
3166
+ /**
3167
+ * @generated from field: bool paused = 2;
3168
+ */
3169
+ paused = false;
3170
+ constructor(data) {
3171
+ super();
3172
+ proto3.util.initPartial(data, this);
3173
+ }
3174
+ static runtime = proto3;
3175
+ static typeName = "babelconnect.v1.JoinCampaign";
3176
+ static fields = proto3.util.newFieldList(() => [
3177
+ { no: 1, name: "campaign_id", kind: "scalar", T: 9 /* ScalarType.STRING */ },
3178
+ { no: 2, name: "paused", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
3179
+ ]);
3180
+ static fromBinary(bytes, options) {
3181
+ return new JoinCampaign().fromBinary(bytes, options);
3182
+ }
3183
+ static fromJson(jsonValue, options) {
3184
+ return new JoinCampaign().fromJson(jsonValue, options);
3185
+ }
3186
+ static fromJsonString(jsonString, options) {
3187
+ return new JoinCampaign().fromJsonString(jsonString, options);
3188
+ }
3189
+ static equals(a, b) {
3190
+ return proto3.util.equals(JoinCampaign, a, b);
3191
+ }
3192
+ }
3193
+ /**
3194
+ * LeaveCampaign exits the current campaign (POST /api/v2/agent/outbound/leave
3195
+ * — no body; the backend resolves the agent's current campaign server-side).
3196
+ * Available both from the campaign selector row and from within an active
3197
+ * call (OBDA3).
3198
+ *
3199
+ * @generated from message babelconnect.v1.LeaveCampaign
3200
+ */
3201
+ export class LeaveCampaign extends Message {
3202
+ constructor(data) {
3203
+ super();
3204
+ proto3.util.initPartial(data, this);
3205
+ }
3206
+ static runtime = proto3;
3207
+ static typeName = "babelconnect.v1.LeaveCampaign";
3208
+ static fields = proto3.util.newFieldList(() => []);
3209
+ static fromBinary(bytes, options) {
3210
+ return new LeaveCampaign().fromBinary(bytes, options);
3211
+ }
3212
+ static fromJson(jsonValue, options) {
3213
+ return new LeaveCampaign().fromJson(jsonValue, options);
3214
+ }
3215
+ static fromJsonString(jsonString, options) {
3216
+ return new LeaveCampaign().fromJsonString(jsonString, options);
3217
+ }
3218
+ static equals(a, b) {
3219
+ return proto3.util.equals(LeaveCampaign, a, b);
3220
+ }
3221
+ }
3222
+ /**
3223
+ * PauseCampaign pauses (`on=true`, POST .../pause) or resumes (`on=false`,
3224
+ * POST .../unpause) the campaign — no request body either way (OBDA2), same
3225
+ * on/off shape as Mute/Hold.
3226
+ *
3227
+ * @generated from message babelconnect.v1.PauseCampaign
3228
+ */
3229
+ export class PauseCampaign extends Message {
3230
+ /**
3231
+ * @generated from field: bool on = 1;
3232
+ */
3233
+ on = false;
3234
+ constructor(data) {
3235
+ super();
3236
+ proto3.util.initPartial(data, this);
3237
+ }
3238
+ static runtime = proto3;
3239
+ static typeName = "babelconnect.v1.PauseCampaign";
3240
+ static fields = proto3.util.newFieldList(() => [
3241
+ { no: 1, name: "on", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
3242
+ ]);
3243
+ static fromBinary(bytes, options) {
3244
+ return new PauseCampaign().fromBinary(bytes, options);
3245
+ }
3246
+ static fromJson(jsonValue, options) {
3247
+ return new PauseCampaign().fromJson(jsonValue, options);
3248
+ }
3249
+ static fromJsonString(jsonString, options) {
3250
+ return new PauseCampaign().fromJsonString(jsonString, options);
3251
+ }
3252
+ static equals(a, b) {
3253
+ return proto3.util.equals(PauseCampaign, a, b);
3254
+ }
3255
+ }
3256
+ /**
3257
+ * EndCampaignCall ends the agent's live campaign call (POST
3258
+ * /api/v2/agent/outbound/hangup — no body; OBDB2). Grounded distinct from the
3259
+ * generic Hangup: the backend's VicidialWrapperService#hangup both tells
3260
+ * Vicidial's own dialer to release the channel AND drives the campaign
3261
+ * member-state transition to DISPOSITION (sbf/services), neither of which a
3262
+ * plain SIP/media-plane hangup would trigger.
3263
+ *
3264
+ * @generated from message babelconnect.v1.EndCampaignCall
3265
+ */
3266
+ export class EndCampaignCall extends Message {
3267
+ constructor(data) {
3268
+ super();
3269
+ proto3.util.initPartial(data, this);
3270
+ }
3271
+ static runtime = proto3;
3272
+ static typeName = "babelconnect.v1.EndCampaignCall";
3273
+ static fields = proto3.util.newFieldList(() => []);
3274
+ static fromBinary(bytes, options) {
3275
+ return new EndCampaignCall().fromBinary(bytes, options);
3276
+ }
3277
+ static fromJson(jsonValue, options) {
3278
+ return new EndCampaignCall().fromJson(jsonValue, options);
3279
+ }
3280
+ static fromJsonString(jsonString, options) {
3281
+ return new EndCampaignCall().fromJsonString(jsonString, options);
3282
+ }
3283
+ static equals(a, b) {
3284
+ return proto3.util.equals(EndCampaignCall, a, b);
3285
+ }
3286
+ }
3287
+ /**
3288
+ * DisposeCall records the outcome of a campaign call (POST
3289
+ * /api/v2/agent/outbound/dispose {code, callbackDate?} — OBDC1/OBDC2). `code`
3290
+ * is one of ListDispositionsResponse's codes (e.g. "no_answer", "callback").
3291
+ * `callback_date` is ISO `YYYY-MM-DDTHH:mmZZ` and is set ONLY for the
3292
+ * "callback" disposition (OBDC2) — omitted (empty) otherwise, matching the
3293
+ * backend command object's own optional field (grounded: a `pause` field also
3294
+ * exists on the backend but is `@ApiStatus(not_implemented)`, so it is
3295
+ * intentionally not exposed here).
3296
+ *
3297
+ * @generated from message babelconnect.v1.DisposeCall
3298
+ */
3299
+ export class DisposeCall extends Message {
3300
+ /**
3301
+ * @generated from field: string code = 1;
3302
+ */
3303
+ code = "";
3304
+ /**
3305
+ * @generated from field: string callback_date = 2;
3306
+ */
3307
+ callbackDate = "";
3308
+ constructor(data) {
3309
+ super();
3310
+ proto3.util.initPartial(data, this);
3311
+ }
3312
+ static runtime = proto3;
3313
+ static typeName = "babelconnect.v1.DisposeCall";
3314
+ static fields = proto3.util.newFieldList(() => [
3315
+ { no: 1, name: "code", kind: "scalar", T: 9 /* ScalarType.STRING */ },
3316
+ { no: 2, name: "callback_date", kind: "scalar", T: 9 /* ScalarType.STRING */ },
3317
+ ]);
3318
+ static fromBinary(bytes, options) {
3319
+ return new DisposeCall().fromBinary(bytes, options);
3320
+ }
3321
+ static fromJson(jsonValue, options) {
3322
+ return new DisposeCall().fromJson(jsonValue, options);
3323
+ }
3324
+ static fromJsonString(jsonString, options) {
3325
+ return new DisposeCall().fromJsonString(jsonString, options);
3326
+ }
3327
+ static equals(a, b) {
3328
+ return proto3.util.equals(DisposeCall, a, b);
3329
+ }
3330
+ }
3331
+ /**
3332
+ * ListDispositionsRequest / ListDispositionsResponse back the disposition
3333
+ * picker (OBDC1). Empty request: the list is a static global on the backend,
3334
+ * not campaign- or agent-scoped.
3335
+ *
3336
+ * @generated from message babelconnect.v1.ListDispositionsRequest
3337
+ */
3338
+ export class ListDispositionsRequest extends Message {
3339
+ constructor(data) {
3340
+ super();
3341
+ proto3.util.initPartial(data, this);
3342
+ }
3343
+ static runtime = proto3;
3344
+ static typeName = "babelconnect.v1.ListDispositionsRequest";
3345
+ static fields = proto3.util.newFieldList(() => []);
3346
+ static fromBinary(bytes, options) {
3347
+ return new ListDispositionsRequest().fromBinary(bytes, options);
3348
+ }
3349
+ static fromJson(jsonValue, options) {
3350
+ return new ListDispositionsRequest().fromJson(jsonValue, options);
3351
+ }
3352
+ static fromJsonString(jsonString, options) {
3353
+ return new ListDispositionsRequest().fromJsonString(jsonString, options);
3354
+ }
3355
+ static equals(a, b) {
3356
+ return proto3.util.equals(ListDispositionsRequest, a, b);
3357
+ }
3358
+ }
3359
+ /**
3360
+ * @generated from message babelconnect.v1.ListDispositionsResponse
3361
+ */
3362
+ export class ListDispositionsResponse extends Message {
3363
+ /**
3364
+ * raw codes, e.g. "no_answer", "callback"
3365
+ *
3366
+ * @generated from field: repeated string reasons = 1;
3367
+ */
3368
+ reasons = [];
3369
+ constructor(data) {
3370
+ super();
3371
+ proto3.util.initPartial(data, this);
3372
+ }
3373
+ static runtime = proto3;
3374
+ static typeName = "babelconnect.v1.ListDispositionsResponse";
3375
+ static fields = proto3.util.newFieldList(() => [
3376
+ { no: 1, name: "reasons", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
3377
+ ]);
3378
+ static fromBinary(bytes, options) {
3379
+ return new ListDispositionsResponse().fromBinary(bytes, options);
3380
+ }
3381
+ static fromJson(jsonValue, options) {
3382
+ return new ListDispositionsResponse().fromJson(jsonValue, options);
3383
+ }
3384
+ static fromJsonString(jsonString, options) {
3385
+ return new ListDispositionsResponse().fromJsonString(jsonString, options);
3386
+ }
3387
+ static equals(a, b) {
3388
+ return proto3.util.equals(ListDispositionsResponse, a, b);
3389
+ }
3390
+ }
2543
3391
  /**
2544
3392
  * SmsConversation is one SMS thread summary carried in the AgentView (the full
2545
3393
  * thread history is fetched on demand, not held in the snapshot). Upsert-by-id;
@@ -3087,7 +3935,14 @@ export class StartConference extends Message {
3087
3935
  }
3088
3936
  /**
3089
3937
  * AddConferenceMember invites a participant — exactly one of agent_id / number.
3090
- * Starts a conference first if none is active.
3938
+ * Starts a conference first if none is active. `hold_others` parks every other
3939
+ * live, non-held member of the CURRENT conference before the invite goes out
3940
+ * (bc-v2's add-member "hold others" checkbox, `AddNewMemberModal.vue`, default
3941
+ * off) so they don't overhear the new invitee ringing; the server unholds them
3942
+ * again once the invitee reaches a terminal state (added = joined, or
3943
+ * failed/removed = rejected/timed out) — see CA4 / docs/designs/conferencing.md.
3944
+ * No effect when starting a brand-new conference: StartConference(hold=true)
3945
+ * already parks the original party unconditionally in that case.
3091
3946
  *
3092
3947
  * @generated from message babelconnect.v1.AddConferenceMember
3093
3948
  */
@@ -3100,6 +3955,10 @@ export class AddConferenceMember extends Message {
3100
3955
  * @generated from field: string number = 2;
3101
3956
  */
3102
3957
  number = "";
3958
+ /**
3959
+ * @generated from field: bool hold_others = 3;
3960
+ */
3961
+ holdOthers = false;
3103
3962
  constructor(data) {
3104
3963
  super();
3105
3964
  proto3.util.initPartial(data, this);
@@ -3109,6 +3968,7 @@ export class AddConferenceMember extends Message {
3109
3968
  static fields = proto3.util.newFieldList(() => [
3110
3969
  { no: 1, name: "agent_id", kind: "scalar", T: 9 /* ScalarType.STRING */ },
3111
3970
  { no: 2, name: "number", kind: "scalar", T: 9 /* ScalarType.STRING */ },
3971
+ { no: 3, name: "hold_others", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
3112
3972
  ]);
3113
3973
  static fromBinary(bytes, options) {
3114
3974
  return new AddConferenceMember().fromBinary(bytes, options);