@pocketping/sdk-node 1.7.0 → 1.8.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/dist/index.cjs +115 -30
- package/dist/index.d.cts +12 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +115 -30
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -237,14 +237,19 @@ var DiscordBridge = class _DiscordBridge {
|
|
|
237
237
|
*/
|
|
238
238
|
async onNewSession(session) {
|
|
239
239
|
const url = session.metadata?.url || "Unknown page";
|
|
240
|
+
const email = session.identity?.email;
|
|
241
|
+
const phone = session.userPhone;
|
|
242
|
+
const userAgent = session.metadata?.userAgent;
|
|
243
|
+
const fields = [];
|
|
244
|
+
if (email) fields.push({ name: "\u{1F4E7} Email", value: email, inline: true });
|
|
245
|
+
if (phone) fields.push({ name: "\u{1F4F1} Phone", value: phone, inline: true });
|
|
246
|
+
if (userAgent) fields.push({ name: "\u{1F310} Device", value: this.parseUserAgent(userAgent), inline: true });
|
|
247
|
+
fields.push({ name: "\u{1F4CD} Page", value: url, inline: false });
|
|
240
248
|
const embed = {
|
|
241
|
-
title: "New chat session",
|
|
249
|
+
title: "\u{1F195} New chat session",
|
|
242
250
|
color: 5793266,
|
|
243
251
|
// Discord blurple
|
|
244
|
-
fields
|
|
245
|
-
{ name: "Visitor", value: session.visitorId, inline: true },
|
|
246
|
-
{ name: "Page", value: url, inline: false }
|
|
247
|
-
],
|
|
252
|
+
fields,
|
|
248
253
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
249
254
|
};
|
|
250
255
|
try {
|
|
@@ -253,6 +258,24 @@ var DiscordBridge = class _DiscordBridge {
|
|
|
253
258
|
console.error("[DiscordBridge] Failed to send new session notification:", error);
|
|
254
259
|
}
|
|
255
260
|
}
|
|
261
|
+
/**
|
|
262
|
+
* Parse user agent to readable format
|
|
263
|
+
*/
|
|
264
|
+
parseUserAgent(ua) {
|
|
265
|
+
let browser = "Unknown";
|
|
266
|
+
if (ua.includes("Firefox/")) browser = "Firefox";
|
|
267
|
+
else if (ua.includes("Edg/")) browser = "Edge";
|
|
268
|
+
else if (ua.includes("Chrome/")) browser = "Chrome";
|
|
269
|
+
else if (ua.includes("Safari/") && !ua.includes("Chrome")) browser = "Safari";
|
|
270
|
+
else if (ua.includes("Opera") || ua.includes("OPR/")) browser = "Opera";
|
|
271
|
+
let os = "Unknown";
|
|
272
|
+
if (ua.includes("Windows")) os = "Windows";
|
|
273
|
+
else if (ua.includes("Mac OS")) os = "macOS";
|
|
274
|
+
else if (ua.includes("Linux") && !ua.includes("Android")) os = "Linux";
|
|
275
|
+
else if (ua.includes("Android")) os = "Android";
|
|
276
|
+
else if (ua.includes("iPhone") || ua.includes("iPad")) os = "iOS";
|
|
277
|
+
return `${browser}/${os}`;
|
|
278
|
+
}
|
|
256
279
|
/**
|
|
257
280
|
* Called when a visitor sends a message.
|
|
258
281
|
* Returns the Discord message ID for edit/delete sync.
|
|
@@ -616,37 +639,60 @@ ${SETUP_GUIDES.slack.botToken}`
|
|
|
616
639
|
*/
|
|
617
640
|
async onNewSession(session) {
|
|
618
641
|
const url = session.metadata?.url || "Unknown page";
|
|
642
|
+
const email = session.identity?.email;
|
|
643
|
+
const phone = session.userPhone;
|
|
644
|
+
const userAgent = session.metadata?.userAgent;
|
|
645
|
+
const contactFields = [];
|
|
646
|
+
if (email) contactFields.push({ type: "mrkdwn", text: `*\u{1F4E7} Email:*
|
|
647
|
+
${email}` });
|
|
648
|
+
if (phone) contactFields.push({ type: "mrkdwn", text: `*\u{1F4F1} Phone:*
|
|
649
|
+
${phone}` });
|
|
650
|
+
if (userAgent) contactFields.push({ type: "mrkdwn", text: `*\u{1F310} Device:*
|
|
651
|
+
${this.parseUserAgent(userAgent)}` });
|
|
619
652
|
const blocks = [
|
|
620
653
|
{
|
|
621
654
|
type: "header",
|
|
622
655
|
text: {
|
|
623
656
|
type: "plain_text",
|
|
624
|
-
text: "New chat session",
|
|
657
|
+
text: "\u{1F195} New chat session",
|
|
625
658
|
emoji: true
|
|
626
659
|
}
|
|
627
|
-
},
|
|
628
|
-
{
|
|
629
|
-
type: "section",
|
|
630
|
-
fields: [
|
|
631
|
-
{
|
|
632
|
-
type: "mrkdwn",
|
|
633
|
-
text: `*Visitor:*
|
|
634
|
-
${session.visitorId}`
|
|
635
|
-
},
|
|
636
|
-
{
|
|
637
|
-
type: "mrkdwn",
|
|
638
|
-
text: `*Page:*
|
|
639
|
-
${url}`
|
|
640
|
-
}
|
|
641
|
-
]
|
|
642
660
|
}
|
|
643
661
|
];
|
|
662
|
+
if (contactFields.length > 0) {
|
|
663
|
+
blocks.push({ type: "section", fields: contactFields });
|
|
664
|
+
}
|
|
665
|
+
blocks.push({
|
|
666
|
+
type: "section",
|
|
667
|
+
fields: [
|
|
668
|
+
{ type: "mrkdwn", text: `*\u{1F4CD} Page:*
|
|
669
|
+
${url}` }
|
|
670
|
+
]
|
|
671
|
+
});
|
|
644
672
|
try {
|
|
645
673
|
await this.sendBlocks(blocks);
|
|
646
674
|
} catch (error) {
|
|
647
675
|
console.error("[SlackBridge] Failed to send new session notification:", error);
|
|
648
676
|
}
|
|
649
677
|
}
|
|
678
|
+
/**
|
|
679
|
+
* Parse user agent to readable format
|
|
680
|
+
*/
|
|
681
|
+
parseUserAgent(ua) {
|
|
682
|
+
let browser = "Unknown";
|
|
683
|
+
if (ua.includes("Firefox/")) browser = "Firefox";
|
|
684
|
+
else if (ua.includes("Edg/")) browser = "Edge";
|
|
685
|
+
else if (ua.includes("Chrome/")) browser = "Chrome";
|
|
686
|
+
else if (ua.includes("Safari/") && !ua.includes("Chrome")) browser = "Safari";
|
|
687
|
+
else if (ua.includes("Opera") || ua.includes("OPR/")) browser = "Opera";
|
|
688
|
+
let os = "Unknown";
|
|
689
|
+
if (ua.includes("Windows")) os = "Windows";
|
|
690
|
+
else if (ua.includes("Mac OS")) os = "macOS";
|
|
691
|
+
else if (ua.includes("Linux") && !ua.includes("Android")) os = "Linux";
|
|
692
|
+
else if (ua.includes("Android")) os = "Android";
|
|
693
|
+
else if (ua.includes("iPhone") || ua.includes("iPad")) os = "iOS";
|
|
694
|
+
return `${browser}/${os}`;
|
|
695
|
+
}
|
|
650
696
|
/**
|
|
651
697
|
* Called when a visitor sends a message.
|
|
652
698
|
* Returns the Slack message timestamp for edit/delete sync.
|
|
@@ -993,8 +1039,7 @@ var TelegramBridge = class {
|
|
|
993
1039
|
* Called when a new chat session is created
|
|
994
1040
|
*/
|
|
995
1041
|
async onNewSession(session) {
|
|
996
|
-
const
|
|
997
|
-
const text = this.formatNewSession(session.visitorId, url);
|
|
1042
|
+
const text = this.formatNewSession(session);
|
|
998
1043
|
try {
|
|
999
1044
|
await this.sendMessage(text);
|
|
1000
1045
|
} catch (error) {
|
|
@@ -1191,15 +1236,55 @@ ${dataStr}
|
|
|
1191
1236
|
/**
|
|
1192
1237
|
* Format new session notification
|
|
1193
1238
|
*/
|
|
1194
|
-
formatNewSession(
|
|
1239
|
+
formatNewSession(session) {
|
|
1240
|
+
const url = session.metadata?.url || "Unknown page";
|
|
1241
|
+
const email = session.identity?.email;
|
|
1242
|
+
const phone = session.userPhone;
|
|
1243
|
+
const userAgent = session.metadata?.userAgent;
|
|
1195
1244
|
if (this.parseMode === "HTML") {
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1245
|
+
let text2 = `<b>\u{1F195} New chat session</b>
|
|
1246
|
+
|
|
1247
|
+
`;
|
|
1248
|
+
if (email) text2 += `\u{1F4E7} ${this.escapeHtml(email)}
|
|
1249
|
+
`;
|
|
1250
|
+
if (phone) text2 += `\u{1F4F1} ${this.escapeHtml(phone)}
|
|
1251
|
+
`;
|
|
1252
|
+
if (userAgent) text2 += `\u{1F310} ${this.escapeHtml(this.parseUserAgent(userAgent))}
|
|
1253
|
+
`;
|
|
1254
|
+
if (email || phone || userAgent) text2 += "\n";
|
|
1255
|
+
text2 += `<b>Page:</b> ${this.escapeHtml(url)}`;
|
|
1256
|
+
return text2;
|
|
1199
1257
|
}
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1258
|
+
let text = `*\u{1F195} New chat session*
|
|
1259
|
+
|
|
1260
|
+
`;
|
|
1261
|
+
if (email) text += `\u{1F4E7} ${this.escapeMarkdown(email)}
|
|
1262
|
+
`;
|
|
1263
|
+
if (phone) text += `\u{1F4F1} ${this.escapeMarkdown(phone)}
|
|
1264
|
+
`;
|
|
1265
|
+
if (userAgent) text += `\u{1F310} ${this.escapeMarkdown(this.parseUserAgent(userAgent))}
|
|
1266
|
+
`;
|
|
1267
|
+
if (email || phone || userAgent) text += "\n";
|
|
1268
|
+
text += `*Page:* ${this.escapeMarkdown(url)}`;
|
|
1269
|
+
return text;
|
|
1270
|
+
}
|
|
1271
|
+
/**
|
|
1272
|
+
* Parse user agent to readable format
|
|
1273
|
+
*/
|
|
1274
|
+
parseUserAgent(ua) {
|
|
1275
|
+
let browser = "Unknown";
|
|
1276
|
+
if (ua.includes("Firefox/")) browser = "Firefox";
|
|
1277
|
+
else if (ua.includes("Edg/")) browser = "Edge";
|
|
1278
|
+
else if (ua.includes("Chrome/")) browser = "Chrome";
|
|
1279
|
+
else if (ua.includes("Safari/") && !ua.includes("Chrome")) browser = "Safari";
|
|
1280
|
+
else if (ua.includes("Opera") || ua.includes("OPR/")) browser = "Opera";
|
|
1281
|
+
let os = "Unknown";
|
|
1282
|
+
if (ua.includes("Windows")) os = "Windows";
|
|
1283
|
+
else if (ua.includes("Mac OS")) os = "macOS";
|
|
1284
|
+
else if (ua.includes("Linux") && !ua.includes("Android")) os = "Linux";
|
|
1285
|
+
else if (ua.includes("Android")) os = "Android";
|
|
1286
|
+
else if (ua.includes("iPhone") || ua.includes("iPad")) os = "iOS";
|
|
1287
|
+
return `${browser}/${os}`;
|
|
1203
1288
|
}
|
|
1204
1289
|
/**
|
|
1205
1290
|
* Format visitor message
|
package/dist/index.d.cts
CHANGED
|
@@ -726,6 +726,10 @@ declare class DiscordBridge implements Bridge {
|
|
|
726
726
|
* Called when a new chat session is created
|
|
727
727
|
*/
|
|
728
728
|
onNewSession(session: Session): Promise<void>;
|
|
729
|
+
/**
|
|
730
|
+
* Parse user agent to readable format
|
|
731
|
+
*/
|
|
732
|
+
private parseUserAgent;
|
|
729
733
|
/**
|
|
730
734
|
* Called when a visitor sends a message.
|
|
731
735
|
* Returns the Discord message ID for edit/delete sync.
|
|
@@ -836,6 +840,10 @@ declare class SlackBridge implements Bridge {
|
|
|
836
840
|
* Called when a new chat session is created
|
|
837
841
|
*/
|
|
838
842
|
onNewSession(session: Session): Promise<void>;
|
|
843
|
+
/**
|
|
844
|
+
* Parse user agent to readable format
|
|
845
|
+
*/
|
|
846
|
+
private parseUserAgent;
|
|
839
847
|
/**
|
|
840
848
|
* Called when a visitor sends a message.
|
|
841
849
|
* Returns the Slack message timestamp for edit/delete sync.
|
|
@@ -966,6 +974,10 @@ declare class TelegramBridge implements Bridge {
|
|
|
966
974
|
* Format new session notification
|
|
967
975
|
*/
|
|
968
976
|
private formatNewSession;
|
|
977
|
+
/**
|
|
978
|
+
* Parse user agent to readable format
|
|
979
|
+
*/
|
|
980
|
+
private parseUserAgent;
|
|
969
981
|
/**
|
|
970
982
|
* Format visitor message
|
|
971
983
|
*/
|
package/dist/index.d.ts
CHANGED
|
@@ -726,6 +726,10 @@ declare class DiscordBridge implements Bridge {
|
|
|
726
726
|
* Called when a new chat session is created
|
|
727
727
|
*/
|
|
728
728
|
onNewSession(session: Session): Promise<void>;
|
|
729
|
+
/**
|
|
730
|
+
* Parse user agent to readable format
|
|
731
|
+
*/
|
|
732
|
+
private parseUserAgent;
|
|
729
733
|
/**
|
|
730
734
|
* Called when a visitor sends a message.
|
|
731
735
|
* Returns the Discord message ID for edit/delete sync.
|
|
@@ -836,6 +840,10 @@ declare class SlackBridge implements Bridge {
|
|
|
836
840
|
* Called when a new chat session is created
|
|
837
841
|
*/
|
|
838
842
|
onNewSession(session: Session): Promise<void>;
|
|
843
|
+
/**
|
|
844
|
+
* Parse user agent to readable format
|
|
845
|
+
*/
|
|
846
|
+
private parseUserAgent;
|
|
839
847
|
/**
|
|
840
848
|
* Called when a visitor sends a message.
|
|
841
849
|
* Returns the Slack message timestamp for edit/delete sync.
|
|
@@ -966,6 +974,10 @@ declare class TelegramBridge implements Bridge {
|
|
|
966
974
|
* Format new session notification
|
|
967
975
|
*/
|
|
968
976
|
private formatNewSession;
|
|
977
|
+
/**
|
|
978
|
+
* Parse user agent to readable format
|
|
979
|
+
*/
|
|
980
|
+
private parseUserAgent;
|
|
969
981
|
/**
|
|
970
982
|
* Format visitor message
|
|
971
983
|
*/
|
package/dist/index.js
CHANGED
|
@@ -199,14 +199,19 @@ var DiscordBridge = class _DiscordBridge {
|
|
|
199
199
|
*/
|
|
200
200
|
async onNewSession(session) {
|
|
201
201
|
const url = session.metadata?.url || "Unknown page";
|
|
202
|
+
const email = session.identity?.email;
|
|
203
|
+
const phone = session.userPhone;
|
|
204
|
+
const userAgent = session.metadata?.userAgent;
|
|
205
|
+
const fields = [];
|
|
206
|
+
if (email) fields.push({ name: "\u{1F4E7} Email", value: email, inline: true });
|
|
207
|
+
if (phone) fields.push({ name: "\u{1F4F1} Phone", value: phone, inline: true });
|
|
208
|
+
if (userAgent) fields.push({ name: "\u{1F310} Device", value: this.parseUserAgent(userAgent), inline: true });
|
|
209
|
+
fields.push({ name: "\u{1F4CD} Page", value: url, inline: false });
|
|
202
210
|
const embed = {
|
|
203
|
-
title: "New chat session",
|
|
211
|
+
title: "\u{1F195} New chat session",
|
|
204
212
|
color: 5793266,
|
|
205
213
|
// Discord blurple
|
|
206
|
-
fields
|
|
207
|
-
{ name: "Visitor", value: session.visitorId, inline: true },
|
|
208
|
-
{ name: "Page", value: url, inline: false }
|
|
209
|
-
],
|
|
214
|
+
fields,
|
|
210
215
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
211
216
|
};
|
|
212
217
|
try {
|
|
@@ -215,6 +220,24 @@ var DiscordBridge = class _DiscordBridge {
|
|
|
215
220
|
console.error("[DiscordBridge] Failed to send new session notification:", error);
|
|
216
221
|
}
|
|
217
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* Parse user agent to readable format
|
|
225
|
+
*/
|
|
226
|
+
parseUserAgent(ua) {
|
|
227
|
+
let browser = "Unknown";
|
|
228
|
+
if (ua.includes("Firefox/")) browser = "Firefox";
|
|
229
|
+
else if (ua.includes("Edg/")) browser = "Edge";
|
|
230
|
+
else if (ua.includes("Chrome/")) browser = "Chrome";
|
|
231
|
+
else if (ua.includes("Safari/") && !ua.includes("Chrome")) browser = "Safari";
|
|
232
|
+
else if (ua.includes("Opera") || ua.includes("OPR/")) browser = "Opera";
|
|
233
|
+
let os = "Unknown";
|
|
234
|
+
if (ua.includes("Windows")) os = "Windows";
|
|
235
|
+
else if (ua.includes("Mac OS")) os = "macOS";
|
|
236
|
+
else if (ua.includes("Linux") && !ua.includes("Android")) os = "Linux";
|
|
237
|
+
else if (ua.includes("Android")) os = "Android";
|
|
238
|
+
else if (ua.includes("iPhone") || ua.includes("iPad")) os = "iOS";
|
|
239
|
+
return `${browser}/${os}`;
|
|
240
|
+
}
|
|
218
241
|
/**
|
|
219
242
|
* Called when a visitor sends a message.
|
|
220
243
|
* Returns the Discord message ID for edit/delete sync.
|
|
@@ -578,37 +601,60 @@ ${SETUP_GUIDES.slack.botToken}`
|
|
|
578
601
|
*/
|
|
579
602
|
async onNewSession(session) {
|
|
580
603
|
const url = session.metadata?.url || "Unknown page";
|
|
604
|
+
const email = session.identity?.email;
|
|
605
|
+
const phone = session.userPhone;
|
|
606
|
+
const userAgent = session.metadata?.userAgent;
|
|
607
|
+
const contactFields = [];
|
|
608
|
+
if (email) contactFields.push({ type: "mrkdwn", text: `*\u{1F4E7} Email:*
|
|
609
|
+
${email}` });
|
|
610
|
+
if (phone) contactFields.push({ type: "mrkdwn", text: `*\u{1F4F1} Phone:*
|
|
611
|
+
${phone}` });
|
|
612
|
+
if (userAgent) contactFields.push({ type: "mrkdwn", text: `*\u{1F310} Device:*
|
|
613
|
+
${this.parseUserAgent(userAgent)}` });
|
|
581
614
|
const blocks = [
|
|
582
615
|
{
|
|
583
616
|
type: "header",
|
|
584
617
|
text: {
|
|
585
618
|
type: "plain_text",
|
|
586
|
-
text: "New chat session",
|
|
619
|
+
text: "\u{1F195} New chat session",
|
|
587
620
|
emoji: true
|
|
588
621
|
}
|
|
589
|
-
},
|
|
590
|
-
{
|
|
591
|
-
type: "section",
|
|
592
|
-
fields: [
|
|
593
|
-
{
|
|
594
|
-
type: "mrkdwn",
|
|
595
|
-
text: `*Visitor:*
|
|
596
|
-
${session.visitorId}`
|
|
597
|
-
},
|
|
598
|
-
{
|
|
599
|
-
type: "mrkdwn",
|
|
600
|
-
text: `*Page:*
|
|
601
|
-
${url}`
|
|
602
|
-
}
|
|
603
|
-
]
|
|
604
622
|
}
|
|
605
623
|
];
|
|
624
|
+
if (contactFields.length > 0) {
|
|
625
|
+
blocks.push({ type: "section", fields: contactFields });
|
|
626
|
+
}
|
|
627
|
+
blocks.push({
|
|
628
|
+
type: "section",
|
|
629
|
+
fields: [
|
|
630
|
+
{ type: "mrkdwn", text: `*\u{1F4CD} Page:*
|
|
631
|
+
${url}` }
|
|
632
|
+
]
|
|
633
|
+
});
|
|
606
634
|
try {
|
|
607
635
|
await this.sendBlocks(blocks);
|
|
608
636
|
} catch (error) {
|
|
609
637
|
console.error("[SlackBridge] Failed to send new session notification:", error);
|
|
610
638
|
}
|
|
611
639
|
}
|
|
640
|
+
/**
|
|
641
|
+
* Parse user agent to readable format
|
|
642
|
+
*/
|
|
643
|
+
parseUserAgent(ua) {
|
|
644
|
+
let browser = "Unknown";
|
|
645
|
+
if (ua.includes("Firefox/")) browser = "Firefox";
|
|
646
|
+
else if (ua.includes("Edg/")) browser = "Edge";
|
|
647
|
+
else if (ua.includes("Chrome/")) browser = "Chrome";
|
|
648
|
+
else if (ua.includes("Safari/") && !ua.includes("Chrome")) browser = "Safari";
|
|
649
|
+
else if (ua.includes("Opera") || ua.includes("OPR/")) browser = "Opera";
|
|
650
|
+
let os = "Unknown";
|
|
651
|
+
if (ua.includes("Windows")) os = "Windows";
|
|
652
|
+
else if (ua.includes("Mac OS")) os = "macOS";
|
|
653
|
+
else if (ua.includes("Linux") && !ua.includes("Android")) os = "Linux";
|
|
654
|
+
else if (ua.includes("Android")) os = "Android";
|
|
655
|
+
else if (ua.includes("iPhone") || ua.includes("iPad")) os = "iOS";
|
|
656
|
+
return `${browser}/${os}`;
|
|
657
|
+
}
|
|
612
658
|
/**
|
|
613
659
|
* Called when a visitor sends a message.
|
|
614
660
|
* Returns the Slack message timestamp for edit/delete sync.
|
|
@@ -955,8 +1001,7 @@ var TelegramBridge = class {
|
|
|
955
1001
|
* Called when a new chat session is created
|
|
956
1002
|
*/
|
|
957
1003
|
async onNewSession(session) {
|
|
958
|
-
const
|
|
959
|
-
const text = this.formatNewSession(session.visitorId, url);
|
|
1004
|
+
const text = this.formatNewSession(session);
|
|
960
1005
|
try {
|
|
961
1006
|
await this.sendMessage(text);
|
|
962
1007
|
} catch (error) {
|
|
@@ -1153,15 +1198,55 @@ ${dataStr}
|
|
|
1153
1198
|
/**
|
|
1154
1199
|
* Format new session notification
|
|
1155
1200
|
*/
|
|
1156
|
-
formatNewSession(
|
|
1201
|
+
formatNewSession(session) {
|
|
1202
|
+
const url = session.metadata?.url || "Unknown page";
|
|
1203
|
+
const email = session.identity?.email;
|
|
1204
|
+
const phone = session.userPhone;
|
|
1205
|
+
const userAgent = session.metadata?.userAgent;
|
|
1157
1206
|
if (this.parseMode === "HTML") {
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1207
|
+
let text2 = `<b>\u{1F195} New chat session</b>
|
|
1208
|
+
|
|
1209
|
+
`;
|
|
1210
|
+
if (email) text2 += `\u{1F4E7} ${this.escapeHtml(email)}
|
|
1211
|
+
`;
|
|
1212
|
+
if (phone) text2 += `\u{1F4F1} ${this.escapeHtml(phone)}
|
|
1213
|
+
`;
|
|
1214
|
+
if (userAgent) text2 += `\u{1F310} ${this.escapeHtml(this.parseUserAgent(userAgent))}
|
|
1215
|
+
`;
|
|
1216
|
+
if (email || phone || userAgent) text2 += "\n";
|
|
1217
|
+
text2 += `<b>Page:</b> ${this.escapeHtml(url)}`;
|
|
1218
|
+
return text2;
|
|
1161
1219
|
}
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1220
|
+
let text = `*\u{1F195} New chat session*
|
|
1221
|
+
|
|
1222
|
+
`;
|
|
1223
|
+
if (email) text += `\u{1F4E7} ${this.escapeMarkdown(email)}
|
|
1224
|
+
`;
|
|
1225
|
+
if (phone) text += `\u{1F4F1} ${this.escapeMarkdown(phone)}
|
|
1226
|
+
`;
|
|
1227
|
+
if (userAgent) text += `\u{1F310} ${this.escapeMarkdown(this.parseUserAgent(userAgent))}
|
|
1228
|
+
`;
|
|
1229
|
+
if (email || phone || userAgent) text += "\n";
|
|
1230
|
+
text += `*Page:* ${this.escapeMarkdown(url)}`;
|
|
1231
|
+
return text;
|
|
1232
|
+
}
|
|
1233
|
+
/**
|
|
1234
|
+
* Parse user agent to readable format
|
|
1235
|
+
*/
|
|
1236
|
+
parseUserAgent(ua) {
|
|
1237
|
+
let browser = "Unknown";
|
|
1238
|
+
if (ua.includes("Firefox/")) browser = "Firefox";
|
|
1239
|
+
else if (ua.includes("Edg/")) browser = "Edge";
|
|
1240
|
+
else if (ua.includes("Chrome/")) browser = "Chrome";
|
|
1241
|
+
else if (ua.includes("Safari/") && !ua.includes("Chrome")) browser = "Safari";
|
|
1242
|
+
else if (ua.includes("Opera") || ua.includes("OPR/")) browser = "Opera";
|
|
1243
|
+
let os = "Unknown";
|
|
1244
|
+
if (ua.includes("Windows")) os = "Windows";
|
|
1245
|
+
else if (ua.includes("Mac OS")) os = "macOS";
|
|
1246
|
+
else if (ua.includes("Linux") && !ua.includes("Android")) os = "Linux";
|
|
1247
|
+
else if (ua.includes("Android")) os = "Android";
|
|
1248
|
+
else if (ua.includes("iPhone") || ua.includes("iPad")) os = "iOS";
|
|
1249
|
+
return `${browser}/${os}`;
|
|
1165
1250
|
}
|
|
1166
1251
|
/**
|
|
1167
1252
|
* Format visitor message
|