@xapp/stentor-service-jobber 1.58.20 → 1.58.23

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.
@@ -1,14 +1,18 @@
1
1
  /*! Copyright (c) 2024, XAPP AI */
2
2
  import { FetchService } from "stentor-service-fetch";
3
- import { BaseService, CrmResponse, CrmService, CrmServiceAvailability, CrmServiceAvailabilityOptions, CrmServiceJobType, DateTimeRange, ExternalLead } from "stentor-models";
3
+ import { BaseService, CrmResponse, CrmService, CrmServiceAvailability, CrmServiceAvailabilityOptions, CrmServiceAvailabilitySettings, CrmServiceJobType, DateTimeRange, ExternalLead } from "stentor-models";
4
4
  import { Product } from "./graphql";
5
- export interface JobberServiceProps extends BaseService {
5
+ export interface JobberServiceProps extends BaseService, CrmServiceAvailabilitySettings {
6
6
  appId: string;
7
7
  channel?: string;
8
8
  authenticate: JobberAuthenticator;
9
9
  openAI: {
10
10
  apiKey: string;
11
11
  };
12
+ defaultJobTypeId: string;
13
+ serviceWindowsHours?: number;
14
+ apiEndpoint?: string;
15
+ fetchTimeoutMs?: number;
12
16
  }
13
17
  export interface JobberAuthenticator {
14
18
  (): Promise<{
@@ -106,16 +110,10 @@ export interface JobberLead extends JobberExternalLeadExtras {
106
110
  value: string;
107
111
  }[];
108
112
  }
109
- export interface JobberResponse {
110
- Status: "Success" | undefined;
111
- /**
112
- * When Status is Success, a message like "Data Successfully Received" is used.
113
- */
114
- Message?: string;
115
- /**
116
- * If Status is undefined, look here for an error message.
117
- */
118
- Reason?: string;
113
+ export interface JobberResponse<Data = any> {
114
+ status: "Success" | "Failure";
115
+ error?: string;
116
+ data?: Data;
119
117
  }
120
118
  export declare class JobberService extends FetchService implements CrmService {
121
119
  private props;
@@ -124,6 +122,7 @@ export declare class JobberService extends FetchService implements CrmService {
124
122
  constructor(props: JobberServiceProps);
125
123
  static get defaultBaseUrl(): string;
126
124
  getAvailability(range: DateTimeRange, options?: CrmServiceAvailabilityOptions): Promise<CrmServiceAvailability>;
125
+ private fetchJobTypes;
127
126
  getJobType(message: string, externalLead?: ExternalLead): Promise<CrmServiceJobType>;
128
127
  /**
129
128
  * Send the lead
@@ -165,6 +164,7 @@ export declare class JobberService extends FetchService implements CrmService {
165
164
  private createJob;
166
165
  private checkForExistingClient;
167
166
  private getProperty;
167
+ private getFutureVisits;
168
168
  getProducts(): Promise<Product[]>;
169
169
  /**
170
170
  * Shared request headers
@@ -11,7 +11,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
- var _a;
15
14
  Object.defineProperty(exports, "__esModule", { value: true });
16
15
  exports.JobberService = void 0;
17
16
  /*! Copyright (c) 2024, XAPP AI */
@@ -19,10 +18,12 @@ const stentor_service_fetch_1 = require("stentor-service-fetch");
19
18
  const stentor_logger_1 = require("stentor-logger");
20
19
  const moment_timezone_1 = __importDefault(require("moment-timezone"));
21
20
  const addresser_1 = __importDefault(require("addresser"));
22
- const ai_1 = require("./ai");
23
- const FETCH_TIMEOUT = Number((_a = process.env.FETCH_TIMEOUT) !== null && _a !== void 0 ? _a : 3000);
24
21
  const graphql_1 = require("./graphql");
25
22
  const util_1 = require("./util");
23
+ const ai_1 = require("./ai");
24
+ const stentor_utils_1 = require("stentor-utils");
25
+ // Default max appointments to be scheduled per day
26
+ const DEFAULT_PER_DAY_APPT_THRESHOLD = 4;
26
27
  class JobberService extends stentor_service_fetch_1.FetchService {
27
28
  constructor(props) {
28
29
  (0, stentor_logger_1.log)().info(`Jobber Service, app id: ${props.appId}`);
@@ -35,19 +36,129 @@ class JobberService extends stentor_service_fetch_1.FetchService {
35
36
  }
36
37
  getAvailability(range, options) {
37
38
  return __awaiter(this, void 0, void 0, function* () {
38
- // no op for now, get class name and print warning
39
- (0, stentor_logger_1.log)().error(`${this.constructor.name} getAvailability not implemented, returning empty availability, which is full availability.`);
40
- return {
39
+ var _a, _b;
40
+ const availability = {
41
41
  range,
42
42
  unavailabilities: []
43
43
  };
44
+ // if no start use "now"
45
+ const startsOnOrAfter = range.start ? (0, stentor_utils_1.dateTimeToString)(range.start) : new Date().toISOString();
46
+ const startsBefore = range.end ? (0, stentor_utils_1.dateTimeToString)(range.end) : undefined;
47
+ const appointments = yield this.getFutureVisits({
48
+ startsOnOrAfter,
49
+ startsBefore,
50
+ status: ["ACTIVE", "LATE", "UPCOMING"]
51
+ });
52
+ if (appointments === null) {
53
+ return Promise.resolve(availability); // All available if we fail
54
+ }
55
+ (0, stentor_logger_1.log)().info(`ServiceTitan: Got ${appointments === null || appointments === void 0 ? void 0 : appointments.length} appointments between ${startsOnOrAfter} and ${startsBefore || "forever"}`);
56
+ // Count appointments per day
57
+ const appointmentCount = {};
58
+ // TODO: This is a bit sloppy. In the US the UTC day is always the original day
59
+ // (assuming the latest appointment start is 6pm)
60
+ appointments.forEach((appointment) => {
61
+ const date = appointment.startAt.split("T")[0];
62
+ if (!appointmentCount[date]) {
63
+ appointmentCount[date] = 0;
64
+ }
65
+ appointmentCount[date]++;
66
+ });
67
+ const threshold = (options === null || options === void 0 ? void 0 : options.maxTotalDailyAppointments) ||
68
+ this.props.maxTotalDailyAppointments ||
69
+ DEFAULT_PER_DAY_APPT_THRESHOLD;
70
+ // Filter days with more than threshold appointments
71
+ const busyDays = Object.keys(appointmentCount).filter((date) => appointmentCount[date] >= threshold);
72
+ (0, stentor_logger_1.log)().info(`Jobber: Got ${busyDays === null || busyDays === void 0 ? void 0 : busyDays.length} busy day(s) for threshold ${threshold}: ${busyDays}`);
73
+ // Lucky us. The format is YYYY-MM-DD
74
+ availability.unavailabilities = busyDays.map((day) => ({ date: { date: day }, available: false }));
75
+ // Add locked days for job type (usually skip next N). This needs a map (jobType: skippedDays) in the CRM constructor
76
+ if ((options === null || options === void 0 ? void 0 : options.jobType) && this.props.delayedJobTypes) {
77
+ if (this.props.delayedJobTypes.indexOf((_a = options === null || options === void 0 ? void 0 : options.jobType) === null || _a === void 0 ? void 0 : _a.id) !== -1) {
78
+ const nextDays = (0, util_1.getNextDays)(3);
79
+ const skippedDays = nextDays.map((date) => ({
80
+ date,
81
+ available: false
82
+ }));
83
+ availability.unavailabilities = availability.unavailabilities.concat(skippedDays);
84
+ }
85
+ }
86
+ // Add class specific blocked days
87
+ if ((_b = options === null || options === void 0 ? void 0 : options.jobType) === null || _b === void 0 ? void 0 : _b.class) {
88
+ let daysToSkip = 0;
89
+ switch (options.jobType.class) {
90
+ case "ESTIMATION":
91
+ case "MAINTENANCE":
92
+ case "INSTALLATION":
93
+ daysToSkip = 5;
94
+ break;
95
+ case "REPAIR":
96
+ daysToSkip = 0;
97
+ break;
98
+ default:
99
+ daysToSkip = 0;
100
+ break;
101
+ }
102
+ const nextDays = (0, util_1.getNextDays)(daysToSkip);
103
+ const skippedDays = nextDays.map((date) => ({
104
+ date,
105
+ available: false
106
+ }));
107
+ availability.unavailabilities = availability.unavailabilities.concat(skippedDays);
108
+ }
109
+ // Add explicitly specified blocked days (holidays)
110
+ const blockedDays = (options === null || options === void 0 ? void 0 : options.blockedDays) || this.props.blockedDays;
111
+ if (blockedDays) {
112
+ const holidays = blockedDays.map((date) => ({
113
+ date,
114
+ available: false
115
+ }));
116
+ availability.unavailabilities = availability.unavailabilities.concat(holidays);
117
+ }
118
+ return Promise.resolve(availability);
119
+ });
120
+ }
121
+ fetchJobTypes() {
122
+ return __awaiter(this, void 0, void 0, function* () {
123
+ if (!this.products) {
124
+ this.products = yield this.getProducts();
125
+ }
126
+ const jobTypes = this.products.map((jt) => {
127
+ return { id: jt.id, summary: jt.description, name: jt.name };
128
+ });
129
+ return jobTypes;
44
130
  });
45
131
  }
46
132
  getJobType(message, externalLead) {
47
133
  return __awaiter(this, void 0, void 0, function* () {
48
- // no op for now, get class name and print warning
49
- (0, stentor_logger_1.log)().error(`${this.constructor.name} getJobType not implemented, returning no match`);
50
- return;
134
+ var _a, _b;
135
+ const jobTypes = yield this.fetchJobTypes();
136
+ let jobType;
137
+ if (jobTypes && jobTypes.length > 0) {
138
+ (0, stentor_logger_1.log)().info("Jobber: Asking AI about job type");
139
+ const suggestedJobTypes = yield (0, ai_1.guessJobTypes)({
140
+ question: message,
141
+ jobTypes,
142
+ defaultJobTypeId: this.props.defaultJobTypeId,
143
+ apiKey: (_a = this.props.openAI) === null || _a === void 0 ? void 0 : _a.apiKey
144
+ });
145
+ const suggestedJobType = (_b = suggestedJobTypes === null || suggestedJobTypes === void 0 ? void 0 : suggestedJobTypes.jobTypes) === null || _b === void 0 ? void 0 : _b[0];
146
+ if (suggestedJobType) {
147
+ (0, stentor_logger_1.log)().info(`Jobber: AI selected job type: ${JSON.stringify(suggestedJobType)}`);
148
+ jobType = {
149
+ id: suggestedJobType.id + "",
150
+ class: suggestedJobType.class,
151
+ name: suggestedJobType.name
152
+ };
153
+ }
154
+ else {
155
+ (0, stentor_logger_1.log)().info("Jobber: AI didn't suggest job type");
156
+ }
157
+ }
158
+ else {
159
+ (0, stentor_logger_1.log)().info("Jobber: NOT Asking AI about job type (no job types)");
160
+ }
161
+ return jobType;
51
162
  });
52
163
  }
53
164
  // Called by CRM Service to send the lead
@@ -61,7 +172,7 @@ class JobberService extends stentor_service_fetch_1.FetchService {
61
172
  */
62
173
  send(externalLead) {
63
174
  return __awaiter(this, void 0, void 0, function* () {
64
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
175
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
65
176
  const crmResponse = {
66
177
  status: "Failure",
67
178
  message: ""
@@ -71,7 +182,7 @@ class JobberService extends stentor_service_fetch_1.FetchService {
71
182
  const names = (0, util_1.getName)(externalLead);
72
183
  // Init Authentication Tokens
73
184
  // We need to combine the address stuff here?
74
- yield this.createContact({
185
+ const contact = yield this.createContact({
75
186
  name: names,
76
187
  email: (_a = externalLead.fields.find((x) => x.name === "EMAIL")) === null || _a === void 0 ? void 0 : _a.value,
77
188
  phone: (_b = externalLead.fields.find((x) => x.name === "PHONE")) === null || _b === void 0 ? void 0 : _b.value,
@@ -86,6 +197,7 @@ class JobberService extends stentor_service_fetch_1.FetchService {
86
197
  consentApproval: (_l = externalLead.fields.find((x) => x.name == "CONSENT_APPROVAL")) === null || _l === void 0 ? void 0 : _l.value
87
198
  }, externalLead);
88
199
  crmResponse.status = "Success";
200
+ crmResponse.refId = (_m = contact.data) === null || _m === void 0 ? void 0 : _m.refId;
89
201
  }
90
202
  catch (e) {
91
203
  (0, stentor_logger_1.log)().error(`Error sending lead to Jobber: ${e}`);
@@ -136,14 +248,13 @@ class JobberService extends stentor_service_fetch_1.FetchService {
136
248
  yield this.createNote(requestId, transcriptData);
137
249
  // Add a Job (when if all data exists)
138
250
  yield this.processSchedulingInfo(contact, propertyId, requestId);
251
+ return { status: "Success", data: { refId: requestId } };
139
252
  });
140
253
  }
141
254
  processSchedulingInfo(contact, propertyId, requestId) {
142
255
  return __awaiter(this, void 0, void 0, function* () {
256
+ var _a;
143
257
  const hasAgreed = !!(contact === null || contact === void 0 ? void 0 : contact.consentApproval) && (contact === null || contact === void 0 ? void 0 : contact.consentApproval.includes("agreed"));
144
- if (!this.products) {
145
- this.products = yield this.getProducts();
146
- }
147
258
  // Create a job?
148
259
  if (contact.address && hasAgreed && contact.dateTime) {
149
260
  const appointmentTime = (0, moment_timezone_1.default)(contact.dateTime); // Localized time
@@ -165,20 +276,19 @@ class JobberService extends stentor_service_fetch_1.FetchService {
165
276
  }
166
277
  appointmentTime.add(offsetHours, "hours");
167
278
  const requestTime = appointmentTime ? appointmentTime.utc().format() : undefined;
168
- const guess = yield (0, ai_1.guessJobTypes)({
279
+ const jobTypes = yield this.fetchJobTypes();
280
+ const suggestedJobTypes = yield (0, ai_1.guessJobTypes)({
169
281
  question: contact.message,
170
- jobTypes: this.products.map((x) => `"${x.name}"\n`),
171
- apiKey: this.props.openAI.apiKey
282
+ jobTypes,
283
+ apiKey: this.props.openAI.apiKey,
284
+ defaultJobTypeId: this.props.defaultJobTypeId
172
285
  });
173
- let jobName = "XAPP Job Request";
174
- if (guess && guess != "Unknown") {
175
- jobName = guess;
176
- }
286
+ const suggestedJobType = (_a = suggestedJobTypes === null || suggestedJobTypes === void 0 ? void 0 : suggestedJobTypes.jobTypes) === null || _a === void 0 ? void 0 : _a[0];
177
287
  const jobRequest = {
178
288
  job: {
179
289
  propertyId,
180
290
  requestId,
181
- title: jobName,
291
+ title: suggestedJobType.name,
182
292
  scheduling: {
183
293
  createVisits: true,
184
294
  notifyTeam: false,
@@ -345,6 +455,33 @@ class JobberService extends stentor_service_fetch_1.FetchService {
345
455
  return propertyId;
346
456
  });
347
457
  }
458
+ // Get Property for a Contact
459
+ getFutureVisits(query) {
460
+ return __awaiter(this, void 0, void 0, function* () {
461
+ var _a;
462
+ const apiResult = yield this.graphqlRequest(graphql_1.GET_FUTURE_VISITS, {
463
+ startDate: {
464
+ after: query.startsOnOrAfter
465
+ }
466
+ });
467
+ const visitEdges = (_a = apiResult.visits) === null || _a === void 0 ? void 0 : _a.edges;
468
+ // Nothing scheduled
469
+ if (!visitEdges || visitEdges.length === 0) {
470
+ return null;
471
+ }
472
+ // Dig out the nodes
473
+ const visits = visitEdges.map((edge) => edge.node);
474
+ // Status filter
475
+ const statusList = query.status;
476
+ if (statusList && statusList.length > 0) {
477
+ return visits.filter((visit) => statusList.indexOf(visit.visitStatus) !== -1);
478
+ }
479
+ else {
480
+ return visits;
481
+ }
482
+ return null;
483
+ });
484
+ }
348
485
  // Get List Of Products
349
486
  getProducts() {
350
487
  return __awaiter(this, void 0, void 0, function* () {
@@ -363,7 +500,7 @@ class JobberService extends stentor_service_fetch_1.FetchService {
363
500
  */
364
501
  requestHeader() {
365
502
  return __awaiter(this, void 0, void 0, function* () {
366
- const version = process.env.JOBBER_API_VERSION || "2023-05-05";
503
+ const version = process.env.JOBBER_API_VERSION || "2024-04-17";
367
504
  const token = yield this.getAuthenticationToken();
368
505
  return {
369
506
  Authorization: `Bearer ${token}}`,
@@ -383,8 +520,10 @@ class JobberService extends stentor_service_fetch_1.FetchService {
383
520
  }
384
521
  graphqlRequest(query, variables) {
385
522
  return __awaiter(this, void 0, void 0, function* () {
386
- const url = process.env.JOBBER_BaseUrl || JobberService.defaultBaseUrl;
523
+ var _a;
524
+ const url = this.props.apiEndpoint ? `https://${this.props.apiEndpoint}` : JobberService.defaultBaseUrl;
387
525
  const headers = yield this.requestHeader();
526
+ const FETCH_TIMEOUT = (_a = this.props.fetchTimeoutMs) !== null && _a !== void 0 ? _a : 10000;
388
527
  const response = yield this.fetch(url, {
389
528
  method: "POST",
390
529
  headers,
@@ -1 +1 @@
1
- {"version":3,"file":"JobberService.js","sourceRoot":"","sources":["../src/JobberService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JobberService.js","sourceRoot":"","sources":["../src/JobberService.ts"],"names":[],"mappings":"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"}
package/lib/ai.d.ts CHANGED
@@ -1,6 +1,23 @@
1
+ /*! Copyright (c) 2024, XAPPmedia */
1
2
  export interface JobTypeAiQuery {
2
3
  question: string;
3
- jobTypes?: string[];
4
+ jobTypes: JobTypeDescriptor[];
5
+ defaultJobTypeId: string;
4
6
  apiKey?: string;
5
7
  }
6
- export declare function guessJobTypes(query: JobTypeAiQuery): Promise<string>;
8
+ export interface JobTypeDescriptor {
9
+ id: string;
10
+ name: string;
11
+ summary: string;
12
+ businessUnitIds?: number[];
13
+ }
14
+ export interface JobTypeAiResponse extends JobTypeDescriptor {
15
+ confidence: number;
16
+ analysis: string;
17
+ class: string;
18
+ }
19
+ export interface AiResponse {
20
+ jobTypes: JobTypeAiResponse[];
21
+ }
22
+ export declare function checkResult(input: JobTypeAiResponse | JobTypeAiResponse[]): JobTypeAiResponse[];
23
+ export declare function guessJobTypes(query: JobTypeAiQuery): Promise<AiResponse>;
package/lib/ai.js CHANGED
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ /*! Copyright (c) 2024, XAPPmedia */
2
3
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
4
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
5
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -12,49 +13,134 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
13
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
14
  };
14
15
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.guessJobTypes = void 0;
16
- /*! Copyright (c) 2024, XAPP AI */
16
+ exports.guessJobTypes = exports.checkResult = void 0;
17
17
  const openai_1 = __importDefault(require("openai"));
18
+ require("dotenv").config();
18
19
  const stentor_logger_1 = require("stentor-logger");
20
+ function checkResult(input) {
21
+ // Assume array is good
22
+ if (Array.isArray(input)) {
23
+ return input;
24
+ }
25
+ // Single object?
26
+ if (input.id && input.confidence) {
27
+ return [input];
28
+ }
29
+ // Fishy...
30
+ return [];
31
+ }
32
+ exports.checkResult = checkResult;
19
33
  function guessJobTypes(query) {
20
34
  return __awaiter(this, void 0, void 0, function* () {
21
35
  var _a, _b, _c;
22
- const { question, apiKey } = query;
36
+ const { question, jobTypes, apiKey } = query;
23
37
  const openai = new openai_1.default({
24
- apiKey: apiKey || process.env.OPENAI_API_KEY
38
+ apiKey: apiKey
39
+ });
40
+ const response = yield openai.chat.completions.create({
41
+ model: "gpt-4o",
42
+ response_format: { type: "json_object" },
43
+ messages: [
44
+ {
45
+ role: "system",
46
+ content: `You are a helpful assistant for a plumbing company. Your task is to match a customer request to specific job types based on the customer's description of a problem. When matching, use the name and the description in the available job types.
47
+
48
+ Output your response as JSON as it will be parsed programmatically. Use the following keys:
49
+
50
+ * jobTypes: required - an array of objects with the following keys:
51
+ "id": required - The selected id from the provided ids in the prompt,
52
+ "name": required - Corresponding name to the selected "id",
53
+ "summary": required - Corresponding summary if available,
54
+ "confidence": required - A confidence between 0 and 1, where 0 is a bad match to the customer problem and 1 is a perfect match,
55
+ "analysis": required - An explanation why you selected the job type and its confidence.
56
+ "class": required - enum with values "MAINTENANCE" - customer requires routine maintenance procedure, "REPAIR" - customer requires a repair, most likely to fix a non-functioning appliance or component, "INSTALLATION" - customer requires installation of a brand new or replace existing, "ESTIMATION" - customer needs an estimate for a repair or installation.
57
+
58
+ Sort the jobTypes array by confidence level. Start with the highest confidence.
59
+
60
+ Here are the available job types: ${JSON.stringify(jobTypes)}
61
+
62
+ ### Example:
63
+ Customer request: "My kitchen sink is leaking, and I need it fixed as soon as possible."
64
+ Response:
65
+ {
66
+ "jobTypes": [
67
+ {
68
+ "id": "123",
69
+ "name": "Leak Repair",
70
+ "summary": "Fixing leaks in various plumbing fixtures",
71
+ "confidence": 0.9,
72
+ "analysis": "The customer mentioned a leaking kitchen sink which directly matches the 'Leak Repair' job type.",
73
+ "class": "REPAIR"
74
+ }
75
+ ]
76
+ }
77
+
78
+ Notes:
79
+ If there are multiple matching job types, include all with their respective confidence levels.
80
+ If the request involves any kind of leak, classify it as REPAIR.`
81
+ },
82
+ {
83
+ role: "user",
84
+ content: question
85
+ }
86
+ ],
87
+ temperature: 1,
88
+ max_tokens: 256,
89
+ top_p: 1,
90
+ frequency_penalty: 0,
91
+ presence_penalty: 0
25
92
  });
26
- let content = `"Unknown"`;
27
- query.jobTypes.push(content);
93
+ const rawContent = (_c = (_b = (_a = response === null || response === void 0 ? void 0 : response.choices) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) === null || _c === void 0 ? void 0 : _c.content;
94
+ // log().info(`OpenAI: raw: ${rawContent}`);
95
+ let choices;
28
96
  try {
29
- const SYSTEM_MESSAGE = `You are a helpful assistant for a Home Services company. Match a customer
30
- request to a specific job type based on a customer's input of a problem.
31
- respond with one of the following job types:
32
- ${query.jobTypes}`;
33
- const response = yield openai.chat.completions.create({
34
- model: "gpt-3.5-turbo",
35
- messages: [
36
- {
37
- role: "system",
38
- content: SYSTEM_MESSAGE
39
- },
97
+ choices = JSON.parse(rawContent);
98
+ (0, stentor_logger_1.log)().info(`OpenAI: parsed: ${JSON.stringify(choices)}`);
99
+ }
100
+ catch (err1) {
101
+ (0, stentor_logger_1.log)().error(`OpenAI: Cannot parse response. ${err1}`);
102
+ (0, stentor_logger_1.log)().error(`OpenAI: QUESTION: "${question}" RESPONSE: "${rawContent}"`);
103
+ (0, stentor_logger_1.log)().info("OpenAI: Trying to salvage AI garbage");
104
+ // Find the end of the last complete object
105
+ const lastValidIndex = rawContent.lastIndexOf("}");
106
+ if (lastValidIndex !== -1) {
107
+ // Slice the string to the last valid index
108
+ let fixedJson = rawContent.slice(0, lastValidIndex + 1);
109
+ // Manually close the array and the JSON object
110
+ fixedJson += "]}";
111
+ // Parse the fixed JSON
112
+ try {
113
+ choices = JSON.parse(fixedJson);
114
+ (0, stentor_logger_1.log)().info("OpenAI: Parsed salvaged JSON data");
115
+ }
116
+ catch (err2) {
117
+ (0, stentor_logger_1.log)().error(`OpenAI: Basket case. Failed to parse salvaged JSON. ${err2}`);
118
+ (0, stentor_logger_1.log)().error(`OpenAI: REPAIRED RESPONSE: "${fixedJson}"`);
119
+ }
120
+ }
121
+ else {
122
+ console.error("OpenAI: No valid JSON object found.");
123
+ }
124
+ }
125
+ const selectedJobTypes = choices === null || choices === void 0 ? void 0 : choices.jobTypes;
126
+ if (!selectedJobTypes || selectedJobTypes.length === 0) {
127
+ (0, stentor_logger_1.log)().info(`OpenAI: No match. Using default job type: ${query.defaultJobTypeId}`);
128
+ const defaultJobType = jobTypes.find((jt) => jt && query.defaultJobTypeId === jt.id);
129
+ choices = {
130
+ jobTypes: [
40
131
  {
41
- role: "user",
42
- content: question
132
+ confidence: 0,
133
+ id: defaultJobType.id,
134
+ name: defaultJobType.name,
135
+ summary: defaultJobType.summary,
136
+ analysis: "There was no match. This is the default job type.",
137
+ class: "SERVICE"
43
138
  }
44
- ],
45
- temperature: 0,
46
- max_tokens: 256,
47
- top_p: 0.48,
48
- frequency_penalty: 0,
49
- presence_penalty: 0
50
- });
51
- content = (_c = (_b = (_a = response === null || response === void 0 ? void 0 : response.choices) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.message) === null || _c === void 0 ? void 0 : _c.content;
52
- (0, stentor_logger_1.log)().info(`AI Matching Question: ${question} JobType: ${content}`);
53
- }
54
- catch (err) {
55
- (0, stentor_logger_1.log)().error(`OpenAI: Cannot parse response. QUESTION: "${question}" RESPONSE: "${content}"`);
139
+ ]
140
+ };
56
141
  }
57
- return content;
142
+ // log().info(`OpenAI: Choices: ${JSON.stringify(choices)}`);
143
+ return choices;
58
144
  });
59
145
  }
60
146
  exports.guessJobTypes = guessJobTypes;
package/lib/ai.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kCAAkC;AAClC,oDAA4B;AAC5B,mDAAqC;AAQrC,SAAsB,aAAa,CAAC,KAAqB;;;QACrD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QAEnC,MAAM,MAAM,GAAG,IAAI,gBAAM,CAAC;YACtB,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;SAC/C,CAAC,CAAC;QAEH,IAAI,OAAO,GAAG,WAAW,CAAC;QAE1B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE7B,IAAI,CAAC;YACD,MAAM,cAAc,GAAG;;;UAGrB,KAAK,CAAC,QAAQ,EAAE,CAAC;YAEnB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;gBAClD,KAAK,EAAE,eAAe;gBACtB,QAAQ,EAAE;oBACN;wBACI,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,cAAc;qBAC1B;oBACD;wBACI,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,QAAQ;qBACpB;iBACJ;gBACD,WAAW,EAAE,CAAC;gBACd,UAAU,EAAE,GAAG;gBACf,KAAK,EAAE,IAAI;gBACX,iBAAiB,EAAE,CAAC;gBACpB,gBAAgB,EAAE,CAAC;aACtB,CAAC,CAAC;YAEH,OAAO,GAAG,MAAA,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,0CAAG,CAAC,CAAC,0CAAE,OAAO,0CAAE,OAAO,CAAC;YAEnD,IAAA,oBAAG,GAAE,CAAC,IAAI,CAAC,yBAAyB,QAAQ,aAAa,OAAO,EAAE,CAAC,CAAA;QAEvE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAA,oBAAG,GAAE,CAAC,KAAK,CAAC,6CAA6C,QAAQ,gBAAgB,OAAO,GAAG,CAAC,CAAC;QACjG,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;CAAA;AA7CD,sCA6CC"}
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
package/lib/graphql.d.ts CHANGED
@@ -174,4 +174,36 @@ export interface AddClientMutationResult {
174
174
  };
175
175
  };
176
176
  }
177
+ export declare const GET_FUTURE_VISITS = "\nquery GetFutureVisits($startDate: Iso8601DateTimeRangeInput!) {\n visits(filter: { startAt: $startDate }) {\n edges {\n node {\n id\n startAt\n completedAt\n allDay\n duration\n instructions\n visitStatus\n client {\n name\n }\n job {\n id\n }\n }\n }\n }\n}\n";
178
+ type Iso8601DateTime = string;
179
+ export interface Iso8601DateTimeRangeInput {
180
+ startDate: {
181
+ before?: Iso8601DateTime;
182
+ after?: Iso8601DateTime;
183
+ eq?: Iso8601DateTime;
184
+ };
185
+ }
186
+ export type VisitStatus = "ACTIVE" | "COMPLETED" | "LATE" | "TODAY" | "UNSCHEDULED" | "UPCOMING";
187
+ export interface Visit {
188
+ id: string;
189
+ startAt: Iso8601DateTime;
190
+ completedAt: Iso8601DateTime;
191
+ allDay: boolean;
192
+ duration: number;
193
+ instructions: string;
194
+ visitStatus: VisitStatus;
195
+ client: {
196
+ name: string;
197
+ };
198
+ job: {
199
+ id: string;
200
+ };
201
+ }
202
+ export interface GetFutureVisitsResult {
203
+ visits: {
204
+ edges: {
205
+ node: Visit;
206
+ }[];
207
+ };
208
+ }
177
209
  export {};
package/lib/graphql.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /*! Copyright (c) 2024, XAPP AI */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.ADD_CLIENT_MUTATION = exports.ADD_JOB_MUTATION = exports.GET_PRODUCTS_QUERY = exports.GET_PROPERTIES_QUERY = exports.ADD_NOTE_MUTATION = exports.ADD_REQUEST_MUTATION = exports.ADD_PROPERTY_MUTATION = exports.SEARCH_CLIENTS_QUERY = void 0;
4
+ exports.GET_FUTURE_VISITS = exports.ADD_CLIENT_MUTATION = exports.ADD_JOB_MUTATION = exports.GET_PRODUCTS_QUERY = exports.GET_PROPERTIES_QUERY = exports.ADD_NOTE_MUTATION = exports.ADD_REQUEST_MUTATION = exports.ADD_PROPERTY_MUTATION = exports.SEARCH_CLIENTS_QUERY = void 0;
5
5
  exports.SEARCH_CLIENTS_QUERY = `query CheckExisting($searchTerm: String) {
6
6
  clients(searchTerm: $searchTerm) {
7
7
  nodes {
@@ -89,4 +89,28 @@ mutation AddClient($client: ClientCreateInput!) {
89
89
  }
90
90
  }`;
91
91
  /////////////////////////////////////////
92
+ exports.GET_FUTURE_VISITS = `
93
+ query GetFutureVisits($startDate: Iso8601DateTimeRangeInput!) {
94
+ visits(filter: { startAt: $startDate }) {
95
+ edges {
96
+ node {
97
+ id
98
+ startAt
99
+ completedAt
100
+ allDay
101
+ duration
102
+ instructions
103
+ visitStatus
104
+ client {
105
+ name
106
+ }
107
+ job {
108
+ id
109
+ }
110
+ }
111
+ }
112
+ }
113
+ }
114
+ `;
115
+ /////////////////////////////////////////
92
116
  //# sourceMappingURL=graphql.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.js","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":";AAAA,kCAAkC;;;AAErB,QAAA,oBAAoB,GAAG;;;;;;;EAOlC,CAAC;AAYH,qCAAqC;AAExB,QAAA,qBAAqB,GAAG;;;;;;;EAOnC,CAAC;AAqCH,qCAAqC;AAErC,cAAc;AAED,QAAA,oBAAoB,GAAG;;;;;;;EAOlC,CAAC;AA8CH,qCAAqC;AAErC,cAAc;AAED,QAAA,iBAAiB,GAAG;;;;;;;EAO/B,CAAC;AAeH,qCAAqC;AAErC,kBAAkB;AAEL,QAAA,oBAAoB,GAAG;;;;;;;;;;EAUlC,CAAC;AAYH,sCAAsC;AAEtC,gBAAgB;AAEH,QAAA,kBAAkB,GAAG;;;;;;;;;;EAUhC,CAAC;AAQH,sCAAsC;AAEtC,WAAW;AAEE,QAAA,gBAAgB,GAAG;;;;;;;;;EAS9B,CAAC;AA4CH,sCAAsC;AAEzB,QAAA,mBAAmB,GAAG;;;;;;;;;EASjC,CAAC;AAwBH,yCAAyC"}
1
+ {"version":3,"file":"graphql.js","sourceRoot":"","sources":["../src/graphql.ts"],"names":[],"mappings":";AAAA,kCAAkC;;;AAErB,QAAA,oBAAoB,GAAG;;;;;;;EAOlC,CAAC;AAYH,qCAAqC;AAExB,QAAA,qBAAqB,GAAG;;;;;;;EAOnC,CAAC;AAqCH,qCAAqC;AAErC,cAAc;AAED,QAAA,oBAAoB,GAAG;;;;;;;EAOlC,CAAC;AA8CH,qCAAqC;AAErC,cAAc;AAED,QAAA,iBAAiB,GAAG;;;;;;;EAO/B,CAAC;AAeH,qCAAqC;AAErC,kBAAkB;AAEL,QAAA,oBAAoB,GAAG;;;;;;;;;;EAUlC,CAAC;AAYH,sCAAsC;AAEtC,gBAAgB;AAEH,QAAA,kBAAkB,GAAG;;;;;;;;;;EAUhC,CAAC;AAQH,sCAAsC;AAEtC,WAAW;AAEE,QAAA,gBAAgB,GAAG;;;;;;;;;EAS9B,CAAC;AA4CH,sCAAsC;AAEzB,QAAA,mBAAmB,GAAG;;;;;;;;;EASjC,CAAC;AAwBH,yCAAyC;AAE5B,QAAA,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBhC,CAAC;AAmCF,yCAAyC"}
package/lib/util.d.ts CHANGED
@@ -1,7 +1,14 @@
1
1
  /*! Copyright (c) 2024, XAPP AI */
2
- import { ExternalLead } from "stentor-models";
2
+ import { DateTime, ExternalLead } from "stentor-models";
3
3
  import { JobberContact } from "./JobberService";
4
4
  export declare function getName(lead: ExternalLead): string;
5
5
  export declare function leadToNote(lead: ExternalLead): string;
6
6
  export declare function addMessageToTranscript(contact: JobberContact, transcriptData: ExternalLead): void;
7
7
  export declare function getUTCOffset(dateString: string): number;
8
+ /**
9
+ * Array of DateTime objects for the next n days from today
10
+ *
11
+ * @param n
12
+ * @returns
13
+ */
14
+ export declare function getNextDays(n: number): DateTime[];
package/lib/util.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getUTCOffset = exports.addMessageToTranscript = exports.leadToNote = exports.getName = void 0;
3
+ exports.getNextDays = exports.getUTCOffset = exports.addMessageToTranscript = exports.leadToNote = exports.getName = void 0;
4
+ const stentor_logger_1 = require("stentor-logger");
4
5
  function getName(lead) {
5
6
  // Try to find a field with the name "FULL_NAME" in the lead.fields array
6
7
  const fullNameField = lead.fields.find((field) => field.name === "FULL_NAME");
@@ -65,4 +66,33 @@ function getUTCOffset(dateString) {
65
66
  return -utcOffsetHours; // Return negative because getTimezoneOffset returns positive for timezones ahead of UTC
66
67
  }
67
68
  exports.getUTCOffset = getUTCOffset;
69
+ function moveBackByMinutes(d, minutes) {
70
+ if (minutes !== 0) {
71
+ d.setMinutes(d.getMinutes() - minutes);
72
+ }
73
+ (0, stentor_logger_1.log)().info(`Jobber: Moved back ${minutes} minutes: ${d}`);
74
+ return d;
75
+ }
76
+ /**
77
+ * Array of DateTime objects for the next n days from today
78
+ *
79
+ * @param n
80
+ * @returns
81
+ */
82
+ function getNextDays(n) {
83
+ const dates = [];
84
+ let today = new Date();
85
+ const serverOffset = today.getTimezoneOffset();
86
+ today = moveBackByMinutes(today, 240 - serverOffset); // TODO: visitor (browser) or service location address
87
+ for (let i = 1; i <= n; i++) {
88
+ const nextDay = new Date(today);
89
+ nextDay.setDate(today.getDate() + i);
90
+ const year = nextDay.getFullYear();
91
+ const month = (nextDay.getMonth() + 1).toString().padStart(2, "0");
92
+ const day = nextDay.getDate().toString().padStart(2, "0");
93
+ dates.push({ date: `${year}-${month}-${day}` });
94
+ }
95
+ return dates;
96
+ }
97
+ exports.getNextDays = getNextDays;
68
98
  //# sourceMappingURL=util.js.map
package/lib/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;AAIA,SAAgB,OAAO,CAAC,IAAkB;IACtC,yEAAyE;IACzE,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAE9E,oDAAoD;IACpD,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC,KAAK,CAAC;IAE9C,oFAAoF;IACpF,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IAChF,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAE9E,0GAA0G;IAC1G,IAAI,cAAc,IAAI,aAAa;QAAE,OAAO,GAAG,cAAc,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;IAE7F,iGAAiG;IACjG,OAAO,EAAE,CAAC;AACd,CAAC;AAhBD,0BAgBC;AAED,SAAgB,UAAU,CAAC,IAAkB;IACzC,oDAAoD;IACpD,IAAI,UAAU,GAAG,EAAE,CAAC;IAEpB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAExC,0BAA0B;IAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3B,mDAAmD;IACnD,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;;QAClC,uDAAuD;QACvD,qFAAqF;QACrF,yEAAyE;QACzE,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAA,MAAA,CAAC,CAAC,IAAI,0CAAE,EAAE,MAAK,KAAK,IAAI,CAAA,MAAA,CAAC,CAAC,IAAI,0CAAE,EAAE,KAAI,KAAK,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,IAAI,IAAI,MAAM,IAAI,CAAC;QACnC,CAAC;aAAM,IAAI,CAAA,MAAA,CAAC,CAAC,IAAI,0CAAE,EAAE,MAAK,KAAK,EAAE,CAAC;YAC9B,MAAM,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC;QACrC,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,YAAY,CAAC;QAC1B,CAAC;QAED,wFAAwF;QACxF,UAAU,IAAI,GAAG,MAAM,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,2CAA2C;IAC3C,OAAO,UAAU,CAAC;AACtB,CAAC;AA9BD,gCA8BC;AAED,SAAgB,sBAAsB,CAAC,OAAsB,EAAE,cAA4B;IACvF,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC;YAC3B,IAAI,EAAE;gBACF,EAAE,EAAE,MAAM;aACb;YACD,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,EAAE;SAClB,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAVD,wDAUC;AAED,SAAgB,YAAY,CAAC,UAAkB;IAC3C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAClD,MAAM,cAAc,GAAG,gBAAgB,GAAG,EAAE,CAAC;IAC7C,OAAO,CAAC,cAAc,CAAC,CAAC,wFAAwF;AACpH,CAAC;AALD,oCAKC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "version": "1.58.20",
7
+ "version": "1.58.23",
8
8
  "description": "Service to integrate with Jobber",
9
9
  "types": "lib/index",
10
10
  "main": "lib/index",
@@ -21,7 +21,7 @@
21
21
  "chai": "4.4.1",
22
22
  "dotenv": "16.4.5",
23
23
  "mocha": "10.4.0",
24
- "stentor-logger": "1.59.65",
24
+ "stentor-logger": "1.59.67",
25
25
  "stentor-models": "1.59.63",
26
26
  "stentor-service-fetch": "1.59.63",
27
27
  "ts-node": "10.9.2",
@@ -38,7 +38,7 @@
38
38
  "test": "exit 0",
39
39
  "local": "mocha --recursive -r ts-node/register \"./src/**/*.test.ts\""
40
40
  },
41
- "gitHead": "54946192fddb32e6d430d0846a21771c6bbd9089",
41
+ "gitHead": "25137f983cd101e195c07dff1ac3a75d09666b9b",
42
42
  "dependencies": {
43
43
  "addresser": "1.1.20"
44
44
  }