@guava-ai/guava-sdk 0.27.0 → 0.28.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.
- package/README.md +1 -1
- package/bin/example-runner.ts +67 -26
- package/dist/bin/example-runner.d.ts +1 -25
- package/dist/bin/example-runner.js +64 -24
- package/dist/bin/example-runner.js.map +1 -1
- package/dist/examples/help-desk.d.ts +1 -1
- package/dist/examples/help-desk.js +40 -29
- package/dist/examples/help-desk.js.map +1 -1
- package/dist/examples/multiple-agents.d.ts +1 -1
- package/dist/examples/multiple-agents.js +1 -1
- package/dist/examples/multiple-agents.js.map +1 -1
- package/dist/examples/polling-campaign.d.ts +1 -1
- package/dist/examples/polling-campaign.js +9 -7
- package/dist/examples/polling-campaign.js.map +1 -1
- package/dist/examples/property-insurance.d.ts +1 -1
- package/dist/examples/property-insurance.js +34 -23
- package/dist/examples/property-insurance.js.map +1 -1
- package/dist/examples/restaurant-waitlist.d.ts +1 -1
- package/dist/examples/restaurant-waitlist.js +34 -23
- package/dist/examples/restaurant-waitlist.js.map +1 -1
- package/dist/examples/scheduling-outbound.d.ts +1 -1
- package/dist/examples/scheduling-outbound.js +24 -14
- package/dist/examples/scheduling-outbound.js.map +1 -1
- package/dist/src/action-item.d.ts +8 -4
- package/dist/src/action-item.js +22 -3
- package/dist/src/action-item.js.map +1 -1
- package/dist/src/agent.d.ts +2 -2
- package/dist/src/agent.js +5 -9
- package/dist/src/agent.js.map +1 -1
- package/dist/src/call.d.ts +2 -0
- package/dist/src/call.js +7 -0
- package/dist/src/call.js.map +1 -1
- package/dist/src/campaigns.d.ts +79 -0
- package/dist/src/campaigns.js +195 -0
- package/dist/src/campaigns.js.map +1 -0
- package/dist/src/client.d.ts +10 -0
- package/dist/src/client.js +28 -0
- package/dist/src/client.js.map +1 -1
- package/dist/src/commands.d.ts +6 -3
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/examples/help-desk.ts +51 -26
- package/examples/multiple-agents.ts +1 -1
- package/examples/polling-campaign.ts +12 -7
- package/examples/property-insurance.ts +42 -22
- package/examples/restaurant-waitlist.ts +42 -22
- package/examples/scheduling-outbound.ts +26 -15
- package/package.json +2 -1
- package/src/action-item.ts +28 -5
- package/src/agent.ts +17 -13
- package/src/call.ts +9 -0
- package/src/campaigns.ts +156 -0
- package/src/client.ts +35 -0
- package/src/index.ts +8 -0
- package/src/version.ts +1 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { inspect } from "node:util";
|
|
2
|
+
import * as z from "zod";
|
|
3
|
+
import type { Client } from "./client.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Modality used for campaign agentic outreach.
|
|
6
|
+
*
|
|
7
|
+
* Currently only SMS is available.
|
|
8
|
+
*/
|
|
9
|
+
export declare const OutreachModality: z.ZodEnum<{
|
|
10
|
+
sms: "sms";
|
|
11
|
+
}>;
|
|
12
|
+
export type OutreachModality = z.infer<typeof OutreachModality>;
|
|
13
|
+
/**
|
|
14
|
+
* A contact to upload to a campaign.
|
|
15
|
+
*/
|
|
16
|
+
export declare const Contact: z.ZodObject<{
|
|
17
|
+
phoneNumber: z.ZodE164;
|
|
18
|
+
data: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
19
|
+
outreachModalities: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
20
|
+
sms: "sms";
|
|
21
|
+
}>>>;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
export type Contact = z.input<typeof Contact>;
|
|
24
|
+
/** Result of uploading contacts to a campaign. */
|
|
25
|
+
export interface UploadContactsResult {
|
|
26
|
+
/** The number of contacts that were inserted. */
|
|
27
|
+
created: number;
|
|
28
|
+
}
|
|
29
|
+
/** Status of a campaign. */
|
|
30
|
+
export interface CampaignStatus {
|
|
31
|
+
/**
|
|
32
|
+
* Mapping of contact status (e.g. `"trying"`, `"failed"`, `"completed"`,
|
|
33
|
+
* `"partially_completed"`, `"do_not_call"`) to the number of contacts in that
|
|
34
|
+
* status. Only statuses with at least one contact are included.
|
|
35
|
+
*/
|
|
36
|
+
statusCounts: Record<string, number>;
|
|
37
|
+
}
|
|
38
|
+
/** Options for {@link Campaign.uploadContacts}. */
|
|
39
|
+
export interface UploadContactsOptions {
|
|
40
|
+
/** Whether to insert contacts whose phone number is already in the campaign. */
|
|
41
|
+
allowDuplicates?: boolean;
|
|
42
|
+
/** Confirms you have consent to contact these numbers. Required by the server. */
|
|
43
|
+
acceptedTermsOfService?: boolean;
|
|
44
|
+
/** Default modalities applied to any contact that doesn't specify its own. */
|
|
45
|
+
outreachModalities?: OutreachModality[];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* A handle to an existing Guava campaign.
|
|
49
|
+
*
|
|
50
|
+
* Obtain instances via {@link Client.getCampaign} or {@link Client.listCampaigns};
|
|
51
|
+
* do not construct directly. Campaigns are created via the Guava dashboard or CLI.
|
|
52
|
+
*/
|
|
53
|
+
export declare class Campaign {
|
|
54
|
+
private _client;
|
|
55
|
+
private _id;
|
|
56
|
+
private _code;
|
|
57
|
+
private _name;
|
|
58
|
+
constructor(client: Client, id: string, code: string, name: string);
|
|
59
|
+
get id(): string;
|
|
60
|
+
get name(): string;
|
|
61
|
+
/**
|
|
62
|
+
* Upload contacts to this campaign.
|
|
63
|
+
*
|
|
64
|
+
* @param contacts - The contacts to upload.
|
|
65
|
+
* @param options.allowDuplicates - Insert contacts whose number already
|
|
66
|
+
* exists in the campaign. Defaults to `false`.
|
|
67
|
+
* @param options.acceptedTermsOfService - Confirms you have consent to
|
|
68
|
+
* contact these numbers. Defaults to `false`.
|
|
69
|
+
* @param options.outreachModalities - Default modalities for any contact that
|
|
70
|
+
* doesn't set its own {@link Contact.outreachModalities}.
|
|
71
|
+
* @returns The number of contacts that were inserted.
|
|
72
|
+
*/
|
|
73
|
+
uploadContacts(contacts: Contact[], options?: UploadContactsOptions): Promise<UploadContactsResult>;
|
|
74
|
+
/** Fetch the current status of this campaign. */
|
|
75
|
+
getStatus(): Promise<CampaignStatus>;
|
|
76
|
+
/** Permanently delete this campaign. */
|
|
77
|
+
delete(): Promise<void>;
|
|
78
|
+
[inspect.custom](): string;
|
|
79
|
+
}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
19
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
20
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
21
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
22
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
23
|
+
var _, done = false;
|
|
24
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
25
|
+
var context = {};
|
|
26
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
27
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
28
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
29
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
30
|
+
if (kind === "accessor") {
|
|
31
|
+
if (result === void 0) continue;
|
|
32
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
33
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
34
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
35
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
36
|
+
}
|
|
37
|
+
else if (_ = accept(result)) {
|
|
38
|
+
if (kind === "field") initializers.unshift(_);
|
|
39
|
+
else descriptor[key] = _;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
43
|
+
done = true;
|
|
44
|
+
};
|
|
45
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
46
|
+
var useValue = arguments.length > 2;
|
|
47
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
48
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
49
|
+
}
|
|
50
|
+
return useValue ? value : void 0;
|
|
51
|
+
};
|
|
52
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
53
|
+
var ownKeys = function(o) {
|
|
54
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
55
|
+
var ar = [];
|
|
56
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
57
|
+
return ar;
|
|
58
|
+
};
|
|
59
|
+
return ownKeys(o);
|
|
60
|
+
};
|
|
61
|
+
return function (mod) {
|
|
62
|
+
if (mod && mod.__esModule) return mod;
|
|
63
|
+
var result = {};
|
|
64
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
65
|
+
__setModuleDefault(result, mod);
|
|
66
|
+
return result;
|
|
67
|
+
};
|
|
68
|
+
})();
|
|
69
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
70
|
+
exports.Campaign = exports.Contact = exports.OutreachModality = void 0;
|
|
71
|
+
const node_util_1 = require("node:util");
|
|
72
|
+
const z = __importStar(require("zod"));
|
|
73
|
+
const utils_ts_1 = require("./utils.js");
|
|
74
|
+
const telemetry_ts_1 = require("./telemetry.js");
|
|
75
|
+
/**
|
|
76
|
+
* Modality used for campaign agentic outreach.
|
|
77
|
+
*
|
|
78
|
+
* Currently only SMS is available.
|
|
79
|
+
*/
|
|
80
|
+
exports.OutreachModality = z.enum(["sms"]);
|
|
81
|
+
/**
|
|
82
|
+
* A contact to upload to a campaign.
|
|
83
|
+
*/
|
|
84
|
+
exports.Contact = z.object({
|
|
85
|
+
/** The contact's phone number in E.164 format (e.g. `"+14155550123"`). */
|
|
86
|
+
phoneNumber: z.e164(),
|
|
87
|
+
/**
|
|
88
|
+
* Arbitrary per-contact data. This is delivered to the agent when the call is
|
|
89
|
+
* initiated and can be read during the call (e.g. via `call.getVariable`).
|
|
90
|
+
*/
|
|
91
|
+
data: z.record(z.string(), z.unknown()).default({}),
|
|
92
|
+
/**
|
|
93
|
+
* Modalities used to reach this contact. When omitted, falls back to the
|
|
94
|
+
* `outreachModalities` passed to {@link Campaign.uploadContacts}.
|
|
95
|
+
*/
|
|
96
|
+
outreachModalities: z.array(exports.OutreachModality).optional(),
|
|
97
|
+
});
|
|
98
|
+
// Wire-format schemas for parsing responses (snake_case, as returned by the API).
|
|
99
|
+
const UploadContactsResultWire = z.object({ created: z.number().int() });
|
|
100
|
+
const CampaignStatusWire = z.object({
|
|
101
|
+
status_counts: z.record(z.string(), z.number()).default({}),
|
|
102
|
+
});
|
|
103
|
+
/**
|
|
104
|
+
* A handle to an existing Guava campaign.
|
|
105
|
+
*
|
|
106
|
+
* Obtain instances via {@link Client.getCampaign} or {@link Client.listCampaigns};
|
|
107
|
+
* do not construct directly. Campaigns are created via the Guava dashboard or CLI.
|
|
108
|
+
*/
|
|
109
|
+
let Campaign = (() => {
|
|
110
|
+
let _classDecorators = [telemetry_ts_1.telemetryClient.trackClass()];
|
|
111
|
+
let _classDescriptor;
|
|
112
|
+
let _classExtraInitializers = [];
|
|
113
|
+
let _classThis;
|
|
114
|
+
var Campaign = class {
|
|
115
|
+
static { _classThis = this; }
|
|
116
|
+
static {
|
|
117
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
118
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
119
|
+
Campaign = _classThis = _classDescriptor.value;
|
|
120
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
121
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
122
|
+
}
|
|
123
|
+
_client;
|
|
124
|
+
_id;
|
|
125
|
+
_code;
|
|
126
|
+
// Snapshot of the name at the time this handle was fetched. Used for
|
|
127
|
+
// display/logging only; identity is keyed off id/code, never name.
|
|
128
|
+
_name;
|
|
129
|
+
constructor(client, id, code, name) {
|
|
130
|
+
this._client = client;
|
|
131
|
+
this._id = id;
|
|
132
|
+
this._code = code;
|
|
133
|
+
this._name = name;
|
|
134
|
+
}
|
|
135
|
+
get id() {
|
|
136
|
+
return this._id;
|
|
137
|
+
}
|
|
138
|
+
get name() {
|
|
139
|
+
return this._name;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Upload contacts to this campaign.
|
|
143
|
+
*
|
|
144
|
+
* @param contacts - The contacts to upload.
|
|
145
|
+
* @param options.allowDuplicates - Insert contacts whose number already
|
|
146
|
+
* exists in the campaign. Defaults to `false`.
|
|
147
|
+
* @param options.acceptedTermsOfService - Confirms you have consent to
|
|
148
|
+
* contact these numbers. Defaults to `false`.
|
|
149
|
+
* @param options.outreachModalities - Default modalities for any contact that
|
|
150
|
+
* doesn't set its own {@link Contact.outreachModalities}.
|
|
151
|
+
* @returns The number of contacts that were inserted.
|
|
152
|
+
*/
|
|
153
|
+
async uploadContacts(contacts, options = {}) {
|
|
154
|
+
const { allowDuplicates = false, acceptedTermsOfService = false, outreachModalities } = options;
|
|
155
|
+
const wireContacts = contacts.map((contact) => {
|
|
156
|
+
const parsed = exports.Contact.parse(contact);
|
|
157
|
+
return {
|
|
158
|
+
phone_number: parsed.phoneNumber,
|
|
159
|
+
data: parsed.data,
|
|
160
|
+
// Per-contact modalities take precedence; fall back to the method-level
|
|
161
|
+
// default, otherwise leave unset (server applies the campaign default).
|
|
162
|
+
outreach_modalities: parsed.outreachModalities ?? outreachModalities ?? null,
|
|
163
|
+
};
|
|
164
|
+
});
|
|
165
|
+
const url = new URL(`v2/campaigns/${this._code}/contacts`, this._client.getHttpBase());
|
|
166
|
+
url.searchParams.set("allow_duplicates", String(allowDuplicates));
|
|
167
|
+
url.searchParams.set("accepted_terms_of_service", String(acceptedTermsOfService));
|
|
168
|
+
const response = await (0, utils_ts_1.fetchOrThrow)(url, {
|
|
169
|
+
method: "POST",
|
|
170
|
+
headers: { ...(await this._client.headers()), "Content-Type": "application/json" },
|
|
171
|
+
body: JSON.stringify({ contacts: wireContacts }),
|
|
172
|
+
});
|
|
173
|
+
const { created } = UploadContactsResultWire.parse(await response.json());
|
|
174
|
+
return { created };
|
|
175
|
+
}
|
|
176
|
+
/** Fetch the current status of this campaign. */
|
|
177
|
+
async getStatus() {
|
|
178
|
+
const url = new URL(`v1/campaigns/${this._id}/status`, this._client.getHttpBase());
|
|
179
|
+
const response = await (0, utils_ts_1.fetchOrThrow)(url, { headers: await this._client.headers() });
|
|
180
|
+
const { status_counts } = CampaignStatusWire.parse(await response.json());
|
|
181
|
+
return { statusCounts: status_counts };
|
|
182
|
+
}
|
|
183
|
+
/** Permanently delete this campaign. */
|
|
184
|
+
async delete() {
|
|
185
|
+
const url = new URL(`v1/campaigns/${this._id}`, this._client.getHttpBase());
|
|
186
|
+
await (0, utils_ts_1.fetchOrThrow)(url, { method: "DELETE", headers: await this._client.headers() });
|
|
187
|
+
}
|
|
188
|
+
[node_util_1.inspect.custom]() {
|
|
189
|
+
return `Campaign { name: '${this._name}', code: '${this._code}' }`;
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
return Campaign = _classThis;
|
|
193
|
+
})();
|
|
194
|
+
exports.Campaign = Campaign;
|
|
195
|
+
//# sourceMappingURL=campaigns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaigns.js","sourceRoot":"","sources":["../../src/campaigns.ts"],"names":[],"mappings":"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"}
|
package/dist/src/client.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Logger } from "./logging.ts";
|
|
2
2
|
import { SmsMessage } from "./sms.ts";
|
|
3
|
+
import { Campaign } from "./campaigns.ts";
|
|
3
4
|
export interface ClientOptions {
|
|
4
5
|
apiKey?: string;
|
|
5
6
|
baseUrl?: string;
|
|
@@ -26,6 +27,15 @@ export declare class Client {
|
|
|
26
27
|
* @param ttlSec - How long the agent code remains valid, in seconds. Defaults to no expiration.
|
|
27
28
|
*/
|
|
28
29
|
createWebrtcAgent(ttlSec?: number): Promise<string>;
|
|
30
|
+
createSipAgent(): Promise<string>;
|
|
31
|
+
/**
|
|
32
|
+
* Fetch an existing campaign by its code.
|
|
33
|
+
*
|
|
34
|
+
* @param campaignCode - The campaign code (e.g. `gcmp-...`).
|
|
35
|
+
*/
|
|
36
|
+
getCampaign(campaignCode: string): Promise<Campaign>;
|
|
37
|
+
/** List all campaigns in your organization. */
|
|
38
|
+
listCampaigns(): Promise<Campaign[]>;
|
|
29
39
|
listNumbers(): Promise<{
|
|
30
40
|
phoneNumber: string;
|
|
31
41
|
}[]>;
|
package/dist/src/client.js
CHANGED
|
@@ -77,6 +77,7 @@ const node_os_1 = __importDefault(require("node:os"));
|
|
|
77
77
|
const fs = __importStar(require("node:fs"));
|
|
78
78
|
const utils_ts_1 = require("./utils.js");
|
|
79
79
|
const sms_ts_1 = require("./sms.js");
|
|
80
|
+
const campaigns_ts_1 = require("./campaigns.js");
|
|
80
81
|
const telemetry_ts_1 = require("./telemetry.js");
|
|
81
82
|
const auth_ts_1 = require("./auth.js");
|
|
82
83
|
const SDK_NAME = "typescript-sdk";
|
|
@@ -209,6 +210,33 @@ let Client = (() => {
|
|
|
209
210
|
const body = (await response.json());
|
|
210
211
|
return body.webrtc_code;
|
|
211
212
|
}
|
|
213
|
+
async createSipAgent() {
|
|
214
|
+
const url = new URL("v1/sip-agents", this.getHttpBase());
|
|
215
|
+
const response = await (0, utils_ts_1.fetchOrThrow)(url, {
|
|
216
|
+
method: "POST",
|
|
217
|
+
headers: await this.headers(),
|
|
218
|
+
});
|
|
219
|
+
const body = (await response.json());
|
|
220
|
+
return body.sip_code;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Fetch an existing campaign by its code.
|
|
224
|
+
*
|
|
225
|
+
* @param campaignCode - The campaign code (e.g. `gcmp-...`).
|
|
226
|
+
*/
|
|
227
|
+
async getCampaign(campaignCode) {
|
|
228
|
+
const url = new URL(`v1/campaigns/${campaignCode}`, this.getHttpBase());
|
|
229
|
+
const response = await (0, utils_ts_1.fetchOrThrow)(url, { headers: await this.headers() });
|
|
230
|
+
const body = (await response.json());
|
|
231
|
+
return new campaigns_ts_1.Campaign(this, body.id, body.campaign_code, body.name);
|
|
232
|
+
}
|
|
233
|
+
/** List all campaigns in your organization. */
|
|
234
|
+
async listCampaigns() {
|
|
235
|
+
const url = new URL("v1/campaigns", this.getHttpBase());
|
|
236
|
+
const response = await (0, utils_ts_1.fetchOrThrow)(url, { headers: await this.headers() });
|
|
237
|
+
const items = (await response.json());
|
|
238
|
+
return items.map((c) => new campaigns_ts_1.Campaign(this, c.id, c.campaign_code, c.name));
|
|
239
|
+
}
|
|
212
240
|
async listNumbers() {
|
|
213
241
|
const url = new URL("v1/phone-numbers", this.getHttpBase());
|
|
214
242
|
const response = await (0, utils_ts_1.fetchOrThrow)(url, { headers: await this.headers() });
|
package/dist/src/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA6D;AAC7D,6CAA2C;AAC3C,sDAAyB;AACzB,4CAA8B;AAC9B,yCAA6D;AAC7D,qCAAsC;AACtC,iDAAiD;AACjD,uCAOmB;AAEnB,MAAM,QAAQ,GAAG,gBAAgB,CAAC;AAUlC,IAAI,WAAW,GAAG,KAAK,CAAC;AAIxB,MAAM,UAAU,GAAG,YAAY,CAAC;AAChC,MAAM,WAAW,GAAG,aAAa,CAAC;IAGrB,MAAM;4BADlB,8BAAe,CAAC,UAAU,EAAE;;;;;;;;YAC7B,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/src/commands.d.ts
CHANGED
|
@@ -28,10 +28,11 @@ export declare const SetTaskCommand: z.ZodObject<{
|
|
|
28
28
|
key: z.ZodString;
|
|
29
29
|
description: z.ZodDefault<z.ZodString>;
|
|
30
30
|
question: z.ZodDefault<z.ZodString>;
|
|
31
|
-
field_type: z.ZodUnion<z.ZodLiteral<"text" | "date" | "integer" | "digit_sequence" | "multiple_choice" | "calendar_slot">[]>;
|
|
31
|
+
field_type: z.ZodUnion<z.ZodLiteral<"text" | "date" | "integer" | "digit_sequence" | "multiple_choice" | "calendar_slot" | "cvv">[]>;
|
|
32
32
|
required: z.ZodDefault<z.ZodBoolean>;
|
|
33
33
|
choices: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
34
34
|
is_search_field: z.ZodDefault<z.ZodBoolean>;
|
|
35
|
+
sensitive: z.ZodDefault<z.ZodBoolean>;
|
|
35
36
|
}, z.core.$strip>, z.ZodObject<{
|
|
36
37
|
item_type: z.ZodLiteral<"say">;
|
|
37
38
|
statement: z.ZodString;
|
|
@@ -190,10 +191,11 @@ export declare const AnyCommand: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
190
191
|
key: z.ZodString;
|
|
191
192
|
description: z.ZodDefault<z.ZodString>;
|
|
192
193
|
question: z.ZodDefault<z.ZodString>;
|
|
193
|
-
field_type: z.ZodUnion<z.ZodLiteral<"text" | "date" | "integer" | "digit_sequence" | "multiple_choice" | "calendar_slot">[]>;
|
|
194
|
+
field_type: z.ZodUnion<z.ZodLiteral<"text" | "date" | "integer" | "digit_sequence" | "multiple_choice" | "calendar_slot" | "cvv">[]>;
|
|
194
195
|
required: z.ZodDefault<z.ZodBoolean>;
|
|
195
196
|
choices: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
196
197
|
is_search_field: z.ZodDefault<z.ZodBoolean>;
|
|
198
|
+
sensitive: z.ZodDefault<z.ZodBoolean>;
|
|
197
199
|
}, z.core.$strip>, z.ZodObject<{
|
|
198
200
|
item_type: z.ZodLiteral<"say">;
|
|
199
201
|
statement: z.ZodString;
|
|
@@ -315,10 +317,11 @@ export declare const InboundTunnelCommand: z.ZodObject<{
|
|
|
315
317
|
key: z.ZodString;
|
|
316
318
|
description: z.ZodDefault<z.ZodString>;
|
|
317
319
|
question: z.ZodDefault<z.ZodString>;
|
|
318
|
-
field_type: z.ZodUnion<z.ZodLiteral<"text" | "date" | "integer" | "digit_sequence" | "multiple_choice" | "calendar_slot">[]>;
|
|
320
|
+
field_type: z.ZodUnion<z.ZodLiteral<"text" | "date" | "integer" | "digit_sequence" | "multiple_choice" | "calendar_slot" | "cvv">[]>;
|
|
319
321
|
required: z.ZodDefault<z.ZodBoolean>;
|
|
320
322
|
choices: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
321
323
|
is_search_field: z.ZodDefault<z.ZodBoolean>;
|
|
324
|
+
sensitive: z.ZodDefault<z.ZodBoolean>;
|
|
322
325
|
}, z.core.$strip>, z.ZodObject<{
|
|
323
326
|
item_type: z.ZodLiteral<"say">;
|
|
324
327
|
statement: z.ZodString;
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { Client, type InboundConnection } from "./client.ts";
|
|
2
2
|
export { Runner } from "./runner.ts";
|
|
3
3
|
export type { SmsMessage } from "./sms.ts";
|
|
4
|
+
export { Campaign } from "./campaigns.ts";
|
|
5
|
+
export type { Contact, CampaignStatus, UploadContactsResult, UploadContactsOptions, OutreachModality, } from "./campaigns.ts";
|
|
4
6
|
export { Say, Field } from "./action-item.ts";
|
|
5
7
|
export { Logger, getConsoleLogger, getDefaultLogger } from "./logging.ts";
|
|
6
8
|
export { Agent, CallInfo } from "./agent.ts";
|
package/dist/src/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MockCall = exports.TestSession = exports.DEFAULT_REACH_PERSON_OUTCOMES = exports.Call = exports.Agent = exports.getDefaultLogger = exports.getConsoleLogger = exports.Field = exports.Say = exports.Runner = exports.Client = void 0;
|
|
3
|
+
exports.MockCall = exports.TestSession = exports.DEFAULT_REACH_PERSON_OUTCOMES = exports.Call = exports.Agent = exports.getDefaultLogger = exports.getConsoleLogger = exports.Field = exports.Say = exports.Campaign = exports.Runner = exports.Client = void 0;
|
|
4
4
|
var client_ts_1 = require("./client.js");
|
|
5
5
|
Object.defineProperty(exports, "Client", { enumerable: true, get: function () { return client_ts_1.Client; } });
|
|
6
6
|
var runner_ts_1 = require("./runner.js");
|
|
7
7
|
Object.defineProperty(exports, "Runner", { enumerable: true, get: function () { return runner_ts_1.Runner; } });
|
|
8
|
+
var campaigns_ts_1 = require("./campaigns.js");
|
|
9
|
+
Object.defineProperty(exports, "Campaign", { enumerable: true, get: function () { return campaigns_ts_1.Campaign; } });
|
|
8
10
|
var action_item_ts_1 = require("./action-item.js");
|
|
9
11
|
Object.defineProperty(exports, "Say", { enumerable: true, get: function () { return action_item_ts_1.Say; } });
|
|
10
12
|
Object.defineProperty(exports, "Field", { enumerable: true, get: function () { return action_item_ts_1.Field; } });
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA6D;AAApD,mGAAA,MAAM,OAAA;AACf,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AAEf,mDAA8C;AAArC,qGAAA,GAAG,OAAA;AAAE,uGAAA,KAAK,OAAA;AACnB,2CAA0E;AAAzD,8GAAA,gBAAgB,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AACnD,uCAA6C;AAApC,iGAAA,KAAK,OAAA;AACd,qCAAgE;AAAvD,+FAAA,IAAI,OAAA;AAAE,wHAAA,6BAA6B,OAAA;AAG5C,mDAAmD;AAA1C,yGAAA,WAAW,OAAA;AACpB,+CAA8C;AAArC,oGAAA,QAAQ,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA6D;AAApD,mGAAA,MAAM,OAAA;AACf,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AAEf,+CAA0C;AAAjC,wGAAA,QAAQ,OAAA;AAQjB,mDAA8C;AAArC,qGAAA,GAAG,OAAA;AAAE,uGAAA,KAAK,OAAA;AACnB,2CAA0E;AAAzD,8GAAA,gBAAgB,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AACnD,uCAA6C;AAApC,iGAAA,KAAK,OAAA;AACd,qCAAgE;AAAvD,+FAAA,IAAI,OAAA;AAAE,wHAAA,6BAA6B,OAAA;AAG5C,mDAAmD;AAA1C,yGAAA,WAAW,OAAA;AACpB,+CAA8C;AAArC,oGAAA,QAAQ,OAAA"}
|
package/dist/src/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const SDK_VERSION = "0.
|
|
1
|
+
export declare const SDK_VERSION = "0.28.0";
|
package/dist/src/version.js
CHANGED
package/examples/help-desk.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
1
2
|
import * as guava from "@guava-ai/guava-sdk";
|
|
2
3
|
import { DocumentQA } from "@guava-ai/guava-sdk/helpers";
|
|
3
4
|
import { IntentRecognizer } from "@guava-ai/guava-sdk/helpers";
|
|
4
5
|
import { FURNITURE_RETAILER_QA } from "@guava-ai/guava-sdk/example-data";
|
|
6
|
+
import { getAgentNumber } from "@guava-ai/guava-sdk/example-utils";
|
|
5
7
|
|
|
6
8
|
export const agent = new guava.Agent({
|
|
7
9
|
name: "Nova",
|
|
@@ -14,12 +16,15 @@ const documentQA = new DocumentQA({
|
|
|
14
16
|
namespace: "clearfield-home-living-qa",
|
|
15
17
|
});
|
|
16
18
|
|
|
17
|
-
const intentRecognizer = new IntentRecognizer(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
const intentRecognizer = new IntentRecognizer({
|
|
20
|
+
sales:
|
|
21
|
+
"New purchases, product availability, pricing, promotions, price matching, store hours, order status, order changes and cancellations",
|
|
22
|
+
"delivery-and-returns":
|
|
23
|
+
"Delivery scheduling and rescheduling, installation, assembly, damaged-on-arrival items, returns, exchanges, refund status, warranty claims and repairs",
|
|
24
|
+
"account-management":
|
|
25
|
+
"Charges, invoices, payment plans, financing, billing disputes, rewards points, membership accounts, bulk and business orders",
|
|
26
|
+
other: "Anything else not listed under another category.",
|
|
27
|
+
});
|
|
23
28
|
|
|
24
29
|
agent.onQuestion(async (_call: guava.Call, question: string) => {
|
|
25
30
|
return await documentQA.ask(question);
|
|
@@ -57,24 +62,44 @@ agent.onAction("other", async (call: guava.Call) => {
|
|
|
57
62
|
);
|
|
58
63
|
});
|
|
59
64
|
|
|
60
|
-
export async function run(args: string[]) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
65
|
+
export async function run(prog: string, args: string[]) {
|
|
66
|
+
const program = new Command().name(prog).showHelpAfterError();
|
|
67
|
+
|
|
68
|
+
// Every Agent can be attached to one of many different channels.
|
|
69
|
+
program
|
|
70
|
+
.command("phone [number]")
|
|
71
|
+
.description("Listen for phone calls.")
|
|
72
|
+
.action(async (number?: string) => {
|
|
73
|
+
await agent.listenPhone(number ?? (await getAgentNumber()));
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
program
|
|
77
|
+
.command("webrtc [code]")
|
|
78
|
+
.description("Listen on a WebRTC code.")
|
|
79
|
+
.action(async (code?: string) => {
|
|
80
|
+
await agent.listenWebrtc(code);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
program
|
|
84
|
+
.command("sip <code>")
|
|
85
|
+
.description("Listen on a SIP code 'guavasip-...'.")
|
|
86
|
+
.action(async (code: string) => {
|
|
87
|
+
await agent.listenSip(code);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
program
|
|
91
|
+
.command("local")
|
|
92
|
+
.description("Start a local call.")
|
|
93
|
+
.action(async () => {
|
|
94
|
+
await agent.callLocal();
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
program
|
|
98
|
+
.command("chat")
|
|
99
|
+
.description("Start a local chat session (for testing).")
|
|
100
|
+
.action(async () => {
|
|
101
|
+
await agent.chat();
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
await program.parseAsync(args, { from: "user" });
|
|
80
105
|
}
|
|
@@ -10,7 +10,7 @@ const agentB = new guava.Agent({
|
|
|
10
10
|
purpose: "You are a helpful voice agent.",
|
|
11
11
|
});
|
|
12
12
|
|
|
13
|
-
export async function run(_args: string[]) {
|
|
13
|
+
export async function run(_prog: string, _args: string[]) {
|
|
14
14
|
const runner = new guava.Runner();
|
|
15
15
|
runner.listenPhone(agentA, process.env.GUAVA_AGENT_NUMBER!);
|
|
16
16
|
runner.listenWebrtc(agentB);
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Usage: guava-example polling-campaign <campaign-code>
|
|
9
9
|
*/
|
|
10
|
+
import { Command } from "commander";
|
|
10
11
|
import * as guava from "@guava-ai/guava-sdk";
|
|
11
12
|
|
|
12
13
|
const agent = new guava.Agent({
|
|
@@ -67,13 +68,17 @@ agent.onTaskComplete("political_poll", async (call) => {
|
|
|
67
68
|
);
|
|
68
69
|
});
|
|
69
70
|
|
|
70
|
-
export async function run(args: string[]) {
|
|
71
|
-
const
|
|
71
|
+
export async function run(prog: string, args: string[]) {
|
|
72
|
+
const program = new Command().name(prog).showHelpAfterError();
|
|
72
73
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
program
|
|
75
|
+
.argument(
|
|
76
|
+
"<campaign_code>",
|
|
77
|
+
"The campaign code to attach to (e.g. gcp-...). Use the CLI or dashboard to create a campaign.",
|
|
78
|
+
)
|
|
79
|
+
.action(async (campaignCode: string) => {
|
|
80
|
+
await agent.attachCampaign(campaignCode);
|
|
81
|
+
});
|
|
77
82
|
|
|
78
|
-
await
|
|
83
|
+
await program.parseAsync(args, { from: "user" });
|
|
79
84
|
}
|