@product7/product7-js 0.3.8 → 0.4.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/product7-js.js +202 -16
- package/dist/product7-js.js.map +1 -1
- package/dist/product7-js.min.js +1 -1
- package/dist/product7-js.min.js.map +1 -1
- package/package.json +1 -1
- package/src/core/APIService.js +12 -10
- package/src/styles/design-tokens.js +1 -1
- package/src/styles/messenger-components.js +2 -2
- package/src/styles/messenger-core.js +1 -1
- package/src/utils/NotificationSound.js +141 -0
- package/src/widgets/MessengerWidget.js +26 -0
- package/src/widgets/messenger/views/ChatView.js +18 -2
package/dist/product7-js.js
CHANGED
|
@@ -1521,8 +1521,9 @@
|
|
|
1521
1521
|
status: true,
|
|
1522
1522
|
data: {
|
|
1523
1523
|
contact_id: 'mock_contact_' + Date.now(),
|
|
1524
|
-
email: metadata.email,
|
|
1524
|
+
email: metadata.email || '',
|
|
1525
1525
|
name: metadata.name || '',
|
|
1526
|
+
avatar: metadata.avatar || '',
|
|
1526
1527
|
is_new: true,
|
|
1527
1528
|
},
|
|
1528
1529
|
};
|
|
@@ -1530,21 +1531,22 @@
|
|
|
1530
1531
|
return mockResponse;
|
|
1531
1532
|
}
|
|
1532
1533
|
|
|
1534
|
+
const payload = {};
|
|
1535
|
+
|
|
1536
|
+
if (metadata.email) payload.email = metadata.email;
|
|
1537
|
+
if (metadata.user_id) payload.user_id = metadata.user_id;
|
|
1538
|
+
if (metadata.name) payload.name = metadata.name;
|
|
1539
|
+
if (metadata.avatar) payload.avatar = metadata.avatar;
|
|
1540
|
+
if (metadata.attributes) payload.attributes = metadata.attributes;
|
|
1541
|
+
if (metadata.company) payload.company = metadata.company;
|
|
1542
|
+
|
|
1533
1543
|
const response = await this._makeRequest('/widget/identify', {
|
|
1534
1544
|
method: 'POST',
|
|
1535
1545
|
headers: {
|
|
1536
1546
|
'Content-Type': 'application/json',
|
|
1537
1547
|
Authorization: `Bearer ${this.sessionToken}`,
|
|
1538
1548
|
},
|
|
1539
|
-
body: JSON.stringify(
|
|
1540
|
-
// user_id: metadata.user_id || null,
|
|
1541
|
-
email: metadata.email || '',
|
|
1542
|
-
// name: metadata.name || '',
|
|
1543
|
-
// phone: metadata.phone || '',
|
|
1544
|
-
// company: metadata.company || '',
|
|
1545
|
-
// avatar_url: metadata.avatar_url || '',
|
|
1546
|
-
// metadata: metadata.custom_fields || {},
|
|
1547
|
-
}),
|
|
1549
|
+
body: JSON.stringify(payload),
|
|
1548
1550
|
});
|
|
1549
1551
|
|
|
1550
1552
|
if (response?.status && response?.data) {
|
|
@@ -3017,7 +3019,7 @@
|
|
|
3017
3019
|
--msg-bg-hover: #F9FAFB;
|
|
3018
3020
|
--msg-bg-input: rgba(255, 255, 255, 0.7);
|
|
3019
3021
|
--msg-bg-bubble-own: #F3F4F6;
|
|
3020
|
-
--msg-bg-bubble-received:
|
|
3022
|
+
--msg-bg-bubble-received: #155EEF;
|
|
3021
3023
|
--msg-bg-header-gradient: linear-gradient(180deg, #e0e7ff 0%, #f0f4ff 35%, #FFFFFF 65%);
|
|
3022
3024
|
--msg-bg-header-glow1: radial-gradient(circle, rgba(21, 94, 239, 0.08) 0%, transparent 70%);
|
|
3023
3025
|
--msg-bg-header-glow2: radial-gradient(circle, rgba(139, 92, 246, 0.05) 0%, transparent 70%);
|
|
@@ -3549,13 +3551,13 @@
|
|
|
3549
3551
|
|
|
3550
3552
|
.messenger-message-own .messenger-message-bubble {
|
|
3551
3553
|
background: var(--msg-bg-bubble-own);
|
|
3552
|
-
color:
|
|
3554
|
+
color: #111827;
|
|
3553
3555
|
border-bottom-right-radius: 0.25rem;
|
|
3554
3556
|
}
|
|
3555
3557
|
|
|
3556
3558
|
.messenger-message-received .messenger-message-bubble {
|
|
3557
3559
|
background: var(--msg-bg-bubble-received);
|
|
3558
|
-
color:
|
|
3560
|
+
color: #ffffff;
|
|
3559
3561
|
border-bottom-left-radius: 0.25rem;
|
|
3560
3562
|
}
|
|
3561
3563
|
|
|
@@ -4454,7 +4456,7 @@
|
|
|
4454
4456
|
--msg-bg-hover: #232930;
|
|
4455
4457
|
--msg-bg-input: #1a1e24;
|
|
4456
4458
|
--msg-bg-bubble-own: #1e2330;
|
|
4457
|
-
--msg-bg-bubble-received:
|
|
4459
|
+
--msg-bg-bubble-received: #1D4ED8;
|
|
4458
4460
|
--msg-bg-header-gradient: linear-gradient(180deg, #1a1e2e 0%, #141720 50%, #0f1317 100%);
|
|
4459
4461
|
--msg-bg-header-glow1: radial-gradient(circle, rgba(21, 94, 239, 0.07) 0%, transparent 70%);
|
|
4460
4462
|
--msg-bg-header-glow2: radial-gradient(circle, rgba(139, 92, 246, 0.05) 0%, transparent 70%);
|
|
@@ -8259,6 +8261,149 @@
|
|
|
8259
8261
|
}
|
|
8260
8262
|
}
|
|
8261
8263
|
|
|
8264
|
+
var BUNDLED_SOUND = "data:audio/mpeg;base64,SUQzBAAAAAAAGFRTU0UAAAAOAAADTGF2ZjUyLjExMS4wAP/7MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhpbmcAAAAHAAAAHAAAIwgAHBwcNDQ0ND4+PlNTU1NfX190dHR0gICAioqKipSUlJSdnZ2oqKiosrKyu7u7u8bGxs7Ozs7X19fX3d3d4uLi4uXl5ejo6Ojr6+vu7u7u8fHx8fT09Pf39/f6+vr9/f39////AAAAAP/70GQAAAFZANHlBAAIMYAaXaCAARjV1Un5yIIKOJpo/zmAASTQWo7TdQAWD5toISgIYPg/lAQBCJw/+XP/UcKHFg++oEPwQ5c/9Rz+IAwCUm47pbZVAAROD4fBAEAQBAEw+XB8HwQBAEAQwffDHBM//Ln/iAEKwf/Lv9QIHPhjQAUrwgq4irMio5s5BUEAAAHCSeMAiNK062DzEZqDg43EwYIywBjGwcFiG8BeOXiQFAASMAAQRyHqBtpfAbggmYC5BhCyQyoANAEQsoSiRAZEc4oichtjvICKXDpy4bpkNJoXw1xzCLEwPouEsQMiZPjoEBDw4iZJUeSdNEFEoQIkCCEabjjJgrk0meMVGdJJOmx8qGxECcKZfTZRsmaIPdlysyZxRui91rqp7sv1TUwupJd/+3//onkM66K0mzVX//////8ydhEqptEMhmJZZVf3aRpEAAAFKRxTJQBaadeApgkSDQ1AQCpFGDFQEHQVfpsrtV+/z1gdSkjncSxSCceMSpHAuhKaWPxiG37ZjEW2o3XkG+6+pX+cZU6F6MX4s6EapLF/LL6lLZp7tWQWPj09HaTdNeltynw7jc3nu3P0FJAmeu43JqrUlcwr/Rydbmn1F/KqZXIAEAMkdbRou7ktcejaANCJAAlFZ4FRga9Rg2UNPqzFDTK/JF4lEjEo09F7NRDDECs5Y4DAY5JvN/EzKTZIIwMRRtNOGDSgk4VhBxa1pu4MJi04KIDFh4IcgcWJhmICJatIxBYWBQMALceRMFi67EvgcGbdmIRFOaG2VtPzccu+XJHgMtokMrl75iGZ3G5K8J+RxS8Dg9HtYBSsMAUSwEANxhuzTQ1Cqt6ksWXUqzytzNW3UHWwvRrk3bschmMwmaprXYvWkd+Uw/fj8rfyUu/EYHfySRV33Dh7Vret67qZ3S4f/9y/eWPxStez5n9vDd4LAwxk7/8LmlRxAAAgBVaDWNKCECikAADaBkbyhTdJ9AwALxiACrkxlRgIBqGRIrDGVBEw43AaJGBAGcJAQGiiAQQQOCr06EM9ZMDClaUEIiAodogZokISAGAhg8OEiMUYkQn1LVTI6dSJZctRJxCmZpW7TTWqe3hJJ6H/+9BktoAH0FVUfm9gAOeLaj/NaAAN/QFl/YWAIVwK7H+wMAT5bMWYy48/uaf7KZ7zn/moAlUj6Y0GW9Wcj5YyjU3q3W7vdmKb64D4wQv5UkdeWT0mrdLLbEq1v6kxhUy/95u5Bb9v/HoEfyP5Ou7Fa/VxwlXfq1eYfr/////xvZ4WJufl9THHPDLCmy/63aXYSWj/C4g//qb7VwAARXIiQR0NbJZURqcJH54mvNKXZpmUbACzEJJcteXbANB2YSXLL73w1zH6LbkPaRYbpNt7OO2W7rj6fui4t0Pjq43Q/v/+adzVcOdDr28f9w2Wdy5RPWXNmqKlHtZMnhYYBU/+txproyhDW/HJ/K6gAO2kkQA7v4IOiMyRrjYWrjxOU3Dk3DmefQiXGdNjEVgADik2LDDOCBcWMsNfVrEZwHGjfEw8NA0eBpYw80kkQi1KFKaGUKepd+3/0DK7EDnbt7U1XNeQEAVHf9kqBLzjxchaDngEDJaeEpfJ9oegJMJNIEqM0SUDozTc5R/85vvqZWKAgIUMfrSOzzpzjBdoTOJBsKgu4FhYGSRVY1Z5Sv8kVAoiFjQMBV36Hq+xJ/rIAADtXe63ACLsC0EudKI+PvNYWozM2vT+MFighxHKtMkGLP9V3n2v4OsZ/+i5WNZ5AbMuzfVnVq5VdiolNpio6q3tfysZRKgJwqWIhoekJp/6Ku5UQADPT2xtM6skVsL6KlTcpIeUOZk7hODETSqZzJfApYpusk8SP94xv+PLP/gmKT4DkuZUkmxnl9I+KZBZYc1IsY0FrTpqfaPJIvDCgg2SKsIpVStst3hvu9r6qP+ui/jlUQFF+3sjYO5OmwqbpxT1eFpa43QKABtkdSai5slNSzq0r6lDMJC0a4ZTymh555BgUPgZzQ4VBWKhy13G2VhsCH5R4OMsTWzV3+nobKeCAAZ997I3CudEoCwlmso4tZRVajMqeGWnRiTuKxkFdJug655kFnkj9JZ1cv3po1roaF1qQ9ZmBCAAaSKjTGLsrqSFwSeD7TQ5BeaJKOtqtegdfu08KKta9TmppaKVKbNRgAAdr/tXGB6CSCPl1Lelt7XW7T01ifVk2zjE1bLW839346gs//uAZPGAAtMh2Hn4GlhT52rfPeJdDAirVe28aaE2Dmr9tY0siLho4mUCDpWMFgQGgu42pLnLawWb/bpWNprQxluj9TNaXJSgOIMS1KzM0TRIAAAABFakEh3cgBQEGVwwSAstoCBiYpGhkVAplAwJmPAkYLCBkEDgYHpEhgdJRk+AeYkqaA6eReiyrxNIvmnxxStER14EjE2/9hljaO2siCoAhzKnpuRt269O0veD7Pq/uNbdzt6jfydzch/Kkpf1/dcqV6ta/y3Y1MWIft8iMqtZzUahrWPO71nqvG43fsROXu5Y3KZJGnRZbEH1clnOWX//OZ/+2WTnxeAH4ZfTSxQdl7ovLbXkoM0tW5UzXqqe3b9bPWP/+H7q59vrHa/P1WVuvIHDdeijc/LKqG114l3Joq5VSQSsRUcUBhEnmWs49v5f///////////////y/mff///////////////3Ad21LEZyZxNSU0SUaZb/+8Bk6AADBiBVfWGgCEbieq+nmAEjzhFJ+cyQBEdCKT85gkCgwCAAAAA6AP0AywXlGoy0hpYVBKCMGkNVAtKWyXWFQkQg10C3jJ4dCWsMS6ezji0j3yF6W6MVa5lLJbaXvIFSNMi8Vdp4aejr0kYgJ/IpLXJpq0lmN4S38scPty+3K4brc1En1pL+vzx/k/bwt3IYllNldscl0R/HlzH9/zJ2IEd+3kzt34vWlVWVWqbn5Z/njz8O/+aXAXCHDZovNNc0AZypebBMlXypavJwV2u4yFL1vG4qA//93+9d/ff/Fg5dCKWEFHZcd41TwOim499QNk7qNZnHhm2uvA4NA5XIelTssq//5////////////////KFL24Op////////////////I3ifN9VM55RBBXv+tQAA8aAYzpLaSOxTi1EgJ6SJFPyUphVqcwGS1LvW/Hx+27zX1/f7Y2w5rdPTwuJkLERYGnMZHg0LksCgqGoKvEWkqYTKtOnRLvoGgFPadXgqdiKxbu2ws92sNCIOHN0xkAtG+saAAuK4rNZxyl0v8x2rfuXaCm7ruwZLSEFAQkKru7B2WMZy0qeUZjNZr5eXDP+8VVSOR/5cly6S3120bi5SXY5P/1/UrllfUiyZj+qtq/Gz6oCQis9gNG1u21A0eEUXlKZgMvvdIkmDwsbcNCBMVljFm2IIcE8ACMnAIqJ5o4ovJhYfY7tmbWsu4ZKGwoGj1xMcMFgkXCSxoCoYgLnHOeXrZ732rlR3aaea7yj3pmotxSf7xyc1Dh+5TFr0wqwIVP21sSQbmXDVCyWUShytfMIk5hICPrNcf8gAU0jNh7zmBR7zKBdJnMh5iGmKwCw2AhFFLET9V5UhXa9tKeiboUnWpVnXt+hNyqNSCo/9lbTHi4JEl8E7XYjqAVkytmTqv480FwBHphkz+gCImRlt/l+zgEGBYUUwqFASIlSa4kDqXSQjZP/7kGTXgAMhHFV/PMAIZMpqf+yMAQuYW1PtMMchLYiqfYeY5BKRPlwyPGm0h57mTRatw8sKFSxJ6Qkii3cxr7t2npUe5jiBHD36yNAFjaTGCLBODkTI8F3rOs3tJq5ibOTHBB/1e77vxB9BcDBRj1iri4ZU1tWpYCaAHxVLR88FRh8YzNlFoqoARURTEfrZ7RoAkQhVlVWs7kJoNAICEvqiYTnEAh83wMwqBEKljl/QAQUBzQU23VCwbQiboHCIi7pAGW0gucKh1qaVodzUER3Dg1yo+yGHJ6G1rvqj2zdBAmDJmdP5O0copn7ffNlat8dijhMpej6btfn+oPJ4otdnkPadqff53u42cq/fnIcll53LGayZdEXZjbsvb/OfzuH+/E3F5unzldfBurLXidmAHmijdn7/+c7zm8d/lc5v6naliUUlNv/y3W+rlvmv/X6/f4frncYcoaOnjfX7tWOzF6knJa/stjkZlU1Wl0rpsqGXRX/73////////////////s4D//40JO7lCKrIQMosxW5slIAgAAHEwqUBMBpIRP/7wGTdgALpEdV9YSAISyJ6j6eYAR9V1U35zJID5kInvzkwAAUOswQKYfbgRGMcAS2mShYBtVW+/ZQGTCYcC3krCfxeBuQDTFYiw7QDkA3ALgAuFESiPhMeycGTD1BC4g8ghGjIkcXDdMqkiLGaGZUctjNFMTaKKtSkETR3WZuX0lHTh0mK0a7pEmUCQIITjD2QIZYS8cQyouH/RJwzNzM3l84gMaLhGeGVFcE5jmCkhX0mb/OEUYihiZrL58g5wVsOsaJASAkYRUuECJoXN21Mv8qEUPG54m3J9SB8ihoRA6LWOcLJGUEJR9E0WCLF8ZYiYuUY0dv////m6Zu////5HEyUi2pay7VlQCu/lSLHr5UCnC3EtWSFFyPmU41ejDtVSXOUIxUVBqppIkDQKAaU8ccc4zuLqKthvPFLw59cO5bp17S1EFlKlQyBT6abQESjyoKuDoVd3//lnthVblKF/drhqpZv7hlUE//+scGe4n4Q4lSGBcEogF3elPhZTsZ2coDNmWOCtBE3fZz7SILsNB1AkWdqmlMDZI1BUBCNQ1Iul4GD7Rc2DjR0iapBWDVosxqlte1v20vfURLf/pa7ynUzMPtbFGA3zySgiGps6D5zr7ODoUF4smCtcWz3bTaasLlq0xTAYpCLC6X0UmU3depWpSj6zqy8PFHhQHgfEa1PKElkGbaF8UFai7TQooacDSXjrTaPFcUSauGYzQNfJEyAKhWG8FcP8viIFAa50N5ND2W0Mc2JVsuY1Txq2OTWnDBSlV9tXD6X6t1yaCwkHB087asUePLgy425hNiFnUtG7LhWCzwEscEpuWlXf30a6hqLdiEjBKRtEAf6BBmCnAObOEnDlBUeEIBjAyhrUkE5q9kUgpSmOAgBgbI32T2TCCG4o0FgXINWfFCixcmUMXEXMbKg0oLIcr1pa0Vz//qS7y4YGU5LZGUAf7FhhZpvYfa4mE4zyQA0//uQROqAAvohVP89AAhaQlq/55gBC1hzT+wxqWFgDOm896zkkHhHC3zY4TW6KxZeeKijTMT7x9fOHdIcBkxmlbM0I12nnqZs5Z+/n5nMqWbjMfLM7/+hX3X+saipUxAhEkciIGjzqgQ8URCgNZstVheWBmVAKBo+ftWTNXCKebWrP24SjE0YX29v5rH72d81aRJL/w6Z0nn0YzJaxpb+fnhAsI6ApelH2Mtp9vt1DCwzABAL11QSiX4mGFSvLH3+axdogBgOu+7zpu1mf4VhdI8PSi0IpwO5p3mbT4DLsWT1tw4JllrCREqdrljZZEIzFEvOGBZjkNfTS51Skl3dSgiYVDETG66kCUJWoGUHMHITiA/JzUAURQYJzmIRmFM19h5usH9KQ60PYKShp//ufqhGRKRKlKNjkJjUkwezNAFODQxo04gu0SBwnWFXlnpE7iuLatTZf/7nt1hDw7qKoTkjbaAK1DTUZhRnskXFHIsWikTJ5qGF7W51ruOMyXzpaqqJ6kSTRDD0RBYsKMYxjTlQsA5rchxBj6GiUY1kPfrt//uAZPKAAnoa0nnsEchPRppfYQNdCnTRQ+wka4FHked5hY0oc39Zo0OZGBFVMoHsnkrloTUGaFvYGZA8gFU6wcxWSli08ad1Lrv5C433TW+XUieWDO1yB8LTvTBlaWe5n4KVy2dEBtMkBIJWBlbp6ieU0VS6BUkmtFibBzJb/ctv+xIv6WqiTUciSKAt2D0DUKllO0vVsrMZw5hcotN206zXfvums4xvL1c+cvHmt+PuVuP20DNmRpsP2P2KG7zFDa1RVy7atP/vmglphUU0P/+kRHjQjPDpb2fTSipOIQpCAyNjl45Ep59YxWDiLcUo54i9geA4cNCdZ0QhJQTACBANNBoPJaRIhxBahgVS6hSSYCYXFFPmXCwrqJJ83dTejV/0Vf0H+9txKlVAK4QEiqv5c6amObwOV9meA8s3x3bC/lGMJIS9SgtJpbzPgRetZcsOXbRGt5cfMu61n9Se1QS0w0OjHLJHEwDzhE3/+4Bk9QCC1SVPcewaUEkDqg89Y0oL9Ks5zLBpgQ8OZ7WHmSjE0DOWD1UB6x2selkCOsgsdBIhQ0fIGHnQ4AT4fUBlOE5sGSQ0MBdoEcKhaSFQK5iKC7T0hLGj5oiYWbQcclKOlnYV4rqssFEC6vDOpIbcaSAAWlmLGECRI+zfOsT4gSrqN0lxgvDzj73j2xaLJn42lK0jKPmSqSzF7G5gxSGgeLkBtj3RVifNmRnZFXiFv/VVmHh3RDM42okgDg8ewcCjcCIB0JSwqFjEyQ2L8IuzGm8YVQnVfFrhVQGCYcHoED0LtuDgCLBkPrWgNH0MYEBebFrnCNgTeGgmpuoeU1n8HxQqw1Udq9O3+iea3JIfWIB/ZGr8taNAbzQw+0BT8VNDEHASHaccmmny+p+pvUJQ2exjvPOVk/GnY7JHrfu+Qz3uOOGBY+CYy9r311KaFqhZZJyjHRf0e7+pau7/q0n2ldaUKQIBzXwCEv/7cGT2AALbEE9zDBnAOsI5vGHjOAqoM0HnvSTBHw6nPPeNKJ4wSnnL3Pfd0nkVIfx3OCLRicV7A+zrEd7BzqJbZZ9dkRpMxNApobQLtadQYMAUPBtalBgIBk0YOFix6y01dsQSQxAoj+3bb/P19nq8w6RdlrttScROZCmzUN6vAN+s/1SGFiAeZhiCx6whRcskuRZaViO4OBIIBr6vq4qvOtRQqJ6tnSd1Kczt//Rr/f//6ChnZlVVORpJAgpIloYiZQpciVtOkowTmgIBk0sJxk+ZPLaMyJ9zT3rTRVH5MzmrZ5KgIgciJWFDp95c5Dx2IRUyMIEUCoKqwyYAwoLoI7/0e6N010Q/+hd366xSNkhAH1CvSYD9yiZrYQzAIrgxeWh9ViBA7AoZ6bTtZ5ywmoQBWBohn6D/+4Bk5oASwhHO+68ZwFOEeZxtZkoLcHE3rTxpQQMO5rW0DShLNF0HMvMgw1KeroR/++t/5IVDj9u1jaqaUDUVzxaodFpuUs0SJRNxbDxbFw4rhYiPI1MQAnbTE2bbpkfjT/Oyc8c5yj4jU55x70An0AeJoKHGi0AkZNrWGEzhCJlUXub230ep32f6mbKTttrHF/cAAjJcXiXKZlY2UkK2ISVhcgeynDULl55lV9lCtdjnmgpfjUGrH1B96Tp0KCwUAd4mRPElrkf7f//6agiHdXVlRxJIAAXC5SiMAwSeHlBKGPPAiIRwTqhgmRAi5TtLq7Op6lv14pszASS/+hUic05F4WUCt7c/UuglYV9KXd2n5dAv2K29teToHq5/8N4Eu8RKxDW2SIAANEw6hD6sj16yu8O0AD5J7LqnGmDtxa7Xq7SIexnpFZKdht54Z4Oj1E2y0QGJxJBHZNEzYYFLKd/G/divLiNrJZYr/v/7gGTnAAK6Gc57KTHAQSOpvWGDSgrEXzWMPMcBAg7msPSNKAQFBtAIyBJkLlvLzVSrYwJxwewpn8lp6s223beynSZ0IneseWpnmooQHg6KFgOJgkPUCACALkIQeCQq++iu7c/bDdlNOK4sRGKaw0zpZc+38vkQiIeImIb/Wk1cZLK7EB43TskkqRG0FhHduBqDZHDdKisxWGAZN5ple7KJuBXtLQ1p7l0b+NPdj5Kb/57v4ZrqkbMbaDwAM6rBajuLsj4Ud2RICsnXF2PxsK2tSiX8diXI1qQ1JigPjaFs8zr2oEK8K336e4xbnJcH47+f79qLDdyD/+V+3tqWm5e1D2v+X5vvP398v/9od95G6lX656mgdnhndmVyRogABpch8ohZhELgTFMkSISHhFpFyyFSe+MiIj9wJhMqeBxCcGhyhCk8YOE2LF01ul93eOVG0j267bOVyNgAATvEkEaOaidgMSH4qyPgUbFy//twZPQAEpEsTnnpGmpHRHn/PYNLSwRzM4wwaUD8ieg9hIzlVAbKoTUn/3D7LGpKCUdiZUPlNrbOoOUDAXBqRPDGgmFVtTZWH3OeOn6hHOdChrv99rYmwI7UdNMzqbakgHB6wqihck19DBtNwP4pQ7NMgx/+1EDOb2C5vMbrmiQp32Mb/0NyRpstUrAB+y02vpp7I7EAQ9MW04wMDj01ikpOXWVnDNiw9K6jYgGh8Pmf3S8+pOab1sihfCWIrIoQSizTah9rDondc6MYcUX6WrGhj6lHPfa+i7vQ1hWpFA6SGlmroBNdnSZWrVLRV+MUQAgXJ6OGnhBrOaWi5oxeVypErF0q6rlTBQVvMngOGQcclwfoYLrizqkvTAos7ePFyviz5XXrGFWdC9mLe91XV4tnMqoAeBNrD//7gGTmABL8F0rZ7BnCPWHZ3z0mJwjseTWnpGlA0o6nNPQJLbTse1HtTVAsiGnwADAQIM7GGcgCw0iUCxE68DAUXOgcHA4gSgcdckYeWgCAiQD14HWYDzww8Vtzlr0FrKh+t+3FEaarPoa8lCqj1aShkASbSlk64mSs7XS7zNsOfjErzKEEhaJxczc5LuxHRpS7TJ7mR0RmCTg1TRFnjmk6fz8hbahvY1KF/////o/61fftqpUAEJSosR2aohuAyWwgO4P0Nshk1pZpUw9zMHCo5RFIGccjRqlgAuLHlC5ZHffCdO0s8eold5tIxaw7z6EZZ9wzffr2baG7hVjljWRSS2NtAAAK1xFubUtCh1rnrEKMFfztMiFchUPMrEfp0QrU4K8rB5qBiyEzLyCrUymqjdLAyPAiX8U5VZVi3NKwqFA+LhAsDwdB1YfDpNQKsOPDg9JLLgEMVC1TRy7dGlTmFz6lNQpDUXJTW6tJ//twZP4AEtgrSuNJGmBOo6k4aMNKCsA5KSwkRMD+jqUxkxUoWjcnetr3ossDa0aH0L3kmq/CJJtG2joTVrFHEQzo4DGAI2Ql56ZEDaaXMWv/JJtdZRP/2bP//tfZq//0qrEyUkn/wAHcC0113Nq8luMSKgQIkJlUNEcgT1erIi5L2mSZjUmbYdCAbi6ljBom3/bR2f/bZ///p3ej+hsQlptHIAAsz9aja4E1e7h5a3d6KUmRKHuCokDY6405AoEK0oak9UqZGJqoCM3qXEai7IfdVGqwYVNgAoPBprDLgbnKTDRZccx3/+5/yW27/6v//s//6hRIbmgHpoQlYp81tSaKCweNpfT3OQ4QEyLRqUmkuFbWVKAACNmhlQQJFBRB3abC/DhKBDY26rMLy/9qff7Wd1Hf7l/7///7cGTogRJpE8pJ6BHALUP5nTxiSwnkOScnmGTAupClJPCNKP/+vYloJAA4ZFjoWBXEhWPsCTyrPkf/VSrTEEk22LwIs0qCJVR4ChMPygSAPknFIoJtQTH/AQJecQ5IDGuj/2y1TEFNRTMuOTkuNVVVVVVVVVVVVVVVVVVVpAAAgAAAPiQJHPs/5FKgoQCgAABUiS+nyxsaAadglwQFUlUrmUxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVcQAAAAIy8NYgAAAHlp56ACNuQRQWWUqTEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrgAAFNcQgc0AAAC14AAlbgmdVMQU1FMy45OS41VVVVVVX/+1Bk9oER4htK4yEZwCfBeVw9AycF4CEnLCRigHsA5WUAgARVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVgAAAS6HUNUxBTUUzLjk5LjVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVKTEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//swZPOBEUQESTIJGAAXYLk4YEMSA1AHLYwEACAxASTU8QAEqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sQRPAHMH0BycjpAAgK4Dk4QSABQIgFJqWAACgZAGUVAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqTEFNRTMuOTkuNaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+xBk6QdwQAFJweAACgYgOSUwIAHAsAcnB4QAKAoA5ECwAASqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpMQU1FMy45OS41qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7EGTmh3A7Asop4RAOBGAZNRQAAUB8AyahAAAoBwCjwLAABKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkxBTUUzLjk5LjWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sQZOEH8CYBSajgAAwAAA/wAAABACwBKAAAACABgGVAEAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+xBk3g/wAwDJgCAACAAAD/AAAAEAAAH+AAAAIAAAP8AAAASqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7EETdj/AAAH+AAAAIAAAP8AAAAQAAAf4AAAAgAAA/wAAABKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sQZN2P8AAAf4AAAAgAAA/wAAABAAAB/gAAACAAAD/AAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr/+xBk3Y/wAAB/gAAACAAAD/AAAAEAAAH+AAAAIAAAP8AAAASqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv/7EETdj/AAAH+AAAAIAAAP8AAAAQAAAf4AAAAgAAA/wAAABKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq//sQZN2P8AAAf4AAAAgAAA/wAAABAAABpAAAACAAADSAAAAEqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqo=";
|
|
8265
|
+
|
|
8266
|
+
/**
|
|
8267
|
+
* NotificationSound — plays a soft ping when a new agent message arrives.
|
|
8268
|
+
*
|
|
8269
|
+
* Default: the bundled notification-sound.mp3 (inlined as base64 at build time).
|
|
8270
|
+
* Falls back to a Web Audio API synthetic chime if the file was not bundled.
|
|
8271
|
+
* Override: pass `soundUrl` (MP3/OGG/WAV URL or base64 data URI) to use a different file.
|
|
8272
|
+
*/
|
|
8273
|
+
|
|
8274
|
+
class NotificationSound {
|
|
8275
|
+
constructor({ soundUrl = BUNDLED_SOUND, volume = 0.4 } = {}) {
|
|
8276
|
+
this._soundUrl = soundUrl;
|
|
8277
|
+
this._volume = Math.min(1, Math.max(0, volume));
|
|
8278
|
+
this._enabled = true;
|
|
8279
|
+
this._audioCtx = null;
|
|
8280
|
+
this._audioBuffer = null;
|
|
8281
|
+
this._loadPromise = null;
|
|
8282
|
+
|
|
8283
|
+
if (soundUrl) {
|
|
8284
|
+
this._loadPromise = this._loadAudioFile(soundUrl);
|
|
8285
|
+
}
|
|
8286
|
+
}
|
|
8287
|
+
|
|
8288
|
+
setEnabled(enabled) {
|
|
8289
|
+
this._enabled = Boolean(enabled);
|
|
8290
|
+
}
|
|
8291
|
+
|
|
8292
|
+
setVolume(volume) {
|
|
8293
|
+
this._volume = Math.min(1, Math.max(0, volume));
|
|
8294
|
+
}
|
|
8295
|
+
|
|
8296
|
+
async play() {
|
|
8297
|
+
if (!this._enabled) return;
|
|
8298
|
+
if (typeof window === 'undefined') return;
|
|
8299
|
+
|
|
8300
|
+
try {
|
|
8301
|
+
if (this._soundUrl) {
|
|
8302
|
+
await this._playFile();
|
|
8303
|
+
} else {
|
|
8304
|
+
this._playSynthetic();
|
|
8305
|
+
}
|
|
8306
|
+
} catch {
|
|
8307
|
+
/* autoplay policy or context suspended — silent fail */
|
|
8308
|
+
}
|
|
8309
|
+
}
|
|
8310
|
+
|
|
8311
|
+
// ── Private ────────────────────────────────────────────────────────────────
|
|
8312
|
+
|
|
8313
|
+
_getAudioContext() {
|
|
8314
|
+
if (!this._audioCtx || this._audioCtx.state === 'closed') {
|
|
8315
|
+
const AudioContext = window.AudioContext || window.webkitAudioContext;
|
|
8316
|
+
if (!AudioContext) return null;
|
|
8317
|
+
this._audioCtx = new AudioContext();
|
|
8318
|
+
}
|
|
8319
|
+
return this._audioCtx;
|
|
8320
|
+
}
|
|
8321
|
+
|
|
8322
|
+
/**
|
|
8323
|
+
* Synthetic two-tone chime via Web Audio API — no file required.
|
|
8324
|
+
* • First tone: 880 Hz, 0–80 ms
|
|
8325
|
+
* • Second tone: 1100 Hz, 60–160 ms
|
|
8326
|
+
* Sounds like a gentle message ping.
|
|
8327
|
+
*/
|
|
8328
|
+
_playSynthetic() {
|
|
8329
|
+
const ctx = this._getAudioContext();
|
|
8330
|
+
if (!ctx) return;
|
|
8331
|
+
|
|
8332
|
+
if (ctx.state === 'suspended') {
|
|
8333
|
+
ctx.resume().catch(() => {});
|
|
8334
|
+
}
|
|
8335
|
+
|
|
8336
|
+
const now = ctx.currentTime;
|
|
8337
|
+
const vol = this._volume;
|
|
8338
|
+
|
|
8339
|
+
const tones = [
|
|
8340
|
+
{ freq: 880, start: 0, end: 0.08 },
|
|
8341
|
+
{ freq: 1100, start: 0.06, end: 0.16 },
|
|
8342
|
+
];
|
|
8343
|
+
|
|
8344
|
+
tones.forEach(({ freq, start, end }) => {
|
|
8345
|
+
const osc = ctx.createOscillator();
|
|
8346
|
+
const gain = ctx.createGain();
|
|
8347
|
+
|
|
8348
|
+
osc.type = 'sine';
|
|
8349
|
+
osc.frequency.value = freq;
|
|
8350
|
+
|
|
8351
|
+
gain.gain.setValueAtTime(0, now + start);
|
|
8352
|
+
gain.gain.linearRampToValueAtTime(vol, now + start + 0.01);
|
|
8353
|
+
gain.gain.linearRampToValueAtTime(0, now + end);
|
|
8354
|
+
|
|
8355
|
+
osc.connect(gain);
|
|
8356
|
+
gain.connect(ctx.destination);
|
|
8357
|
+
|
|
8358
|
+
osc.start(now + start);
|
|
8359
|
+
osc.stop(now + end + 0.01);
|
|
8360
|
+
});
|
|
8361
|
+
}
|
|
8362
|
+
|
|
8363
|
+
async _loadAudioFile(url) {
|
|
8364
|
+
try {
|
|
8365
|
+
const ctx = this._getAudioContext();
|
|
8366
|
+
if (!ctx) return;
|
|
8367
|
+
|
|
8368
|
+
const response = await fetch(url);
|
|
8369
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
8370
|
+
this._audioBuffer = await ctx.decodeAudioData(arrayBuffer);
|
|
8371
|
+
} catch {
|
|
8372
|
+
/* failed to load — fall back to synthetic */
|
|
8373
|
+
this._soundUrl = null;
|
|
8374
|
+
}
|
|
8375
|
+
}
|
|
8376
|
+
|
|
8377
|
+
async _playFile() {
|
|
8378
|
+
if (this._loadPromise) {
|
|
8379
|
+
await this._loadPromise;
|
|
8380
|
+
this._loadPromise = null;
|
|
8381
|
+
}
|
|
8382
|
+
|
|
8383
|
+
if (!this._audioBuffer) {
|
|
8384
|
+
this._playSynthetic();
|
|
8385
|
+
return;
|
|
8386
|
+
}
|
|
8387
|
+
|
|
8388
|
+
const ctx = this._getAudioContext();
|
|
8389
|
+
if (!ctx) return;
|
|
8390
|
+
|
|
8391
|
+
if (ctx.state === 'suspended') {
|
|
8392
|
+
await ctx.resume();
|
|
8393
|
+
}
|
|
8394
|
+
|
|
8395
|
+
const source = ctx.createBufferSource();
|
|
8396
|
+
const gain = ctx.createGain();
|
|
8397
|
+
|
|
8398
|
+
source.buffer = this._audioBuffer;
|
|
8399
|
+
gain.gain.value = this._volume;
|
|
8400
|
+
|
|
8401
|
+
source.connect(gain);
|
|
8402
|
+
gain.connect(ctx.destination);
|
|
8403
|
+
source.start();
|
|
8404
|
+
}
|
|
8405
|
+
}
|
|
8406
|
+
|
|
8262
8407
|
/**
|
|
8263
8408
|
* WebSocketService - Real-time communication for messenger widget
|
|
8264
8409
|
*/
|
|
@@ -9800,9 +9945,25 @@
|
|
|
9800
9945
|
`;
|
|
9801
9946
|
}
|
|
9802
9947
|
|
|
9948
|
+
// Render automated/bot messages as a proper received chat bubble
|
|
9949
|
+
const teamName = this.state.teamName || 'Support';
|
|
9950
|
+
const logoUrl = this.options.logoUrl;
|
|
9951
|
+
const avatarHtml = logoUrl
|
|
9952
|
+
? `<div class="sdk-avatar sdk-avatar-sm"><img src="${this._escapeHtml(logoUrl)}" alt="${this._escapeHtml(teamName)}" /></div>`
|
|
9953
|
+
: `<div class="sdk-avatar sdk-avatar-sm">${teamName.charAt(0).toUpperCase()}</div>`;
|
|
9954
|
+
const timeStr = this._formatMessageTime(message.timestamp);
|
|
9955
|
+
|
|
9803
9956
|
return `
|
|
9804
|
-
<div class="messenger-message-
|
|
9805
|
-
<
|
|
9957
|
+
<div class="messenger-message messenger-message-received">
|
|
9958
|
+
<div class="messenger-message-row">
|
|
9959
|
+
<div class="messenger-message-avatar">${avatarHtml}</div>
|
|
9960
|
+
<div class="messenger-message-wrapper">
|
|
9961
|
+
<div class="messenger-message-bubble">
|
|
9962
|
+
<div class="messenger-message-content">${this._formatMessageContent(content)}</div>
|
|
9963
|
+
</div>
|
|
9964
|
+
</div>
|
|
9965
|
+
</div>
|
|
9966
|
+
${timeStr ? `<div class="messenger-message-meta"><span>${timeStr}</span></div>` : ''}
|
|
9806
9967
|
</div>
|
|
9807
9968
|
`;
|
|
9808
9969
|
}
|
|
@@ -11363,6 +11524,19 @@
|
|
|
11363
11524
|
this._wsUnsubscribers = [];
|
|
11364
11525
|
this._feedbackWidget = null;
|
|
11365
11526
|
|
|
11527
|
+
const notificationSoundOption = options.notificationSound !== undefined
|
|
11528
|
+
? options.notificationSound
|
|
11529
|
+
: true;
|
|
11530
|
+
|
|
11531
|
+
this._notificationSound = new NotificationSound({
|
|
11532
|
+
soundUrl: typeof notificationSoundOption === 'string' ? notificationSoundOption : null,
|
|
11533
|
+
volume: options.notificationVolume ?? 0.4,
|
|
11534
|
+
});
|
|
11535
|
+
|
|
11536
|
+
if (notificationSoundOption === false) {
|
|
11537
|
+
this._notificationSound.setEnabled(false);
|
|
11538
|
+
}
|
|
11539
|
+
|
|
11366
11540
|
this._handleOpenChange = this._handleOpenChange.bind(this);
|
|
11367
11541
|
this._handleWebSocketMessage = this._handleWebSocketMessage.bind(this);
|
|
11368
11542
|
this._handleTypingStarted = this._handleTypingStarted.bind(this);
|
|
@@ -11687,6 +11861,18 @@
|
|
|
11687
11861
|
optimisticMatchWindowMs: 30000,
|
|
11688
11862
|
});
|
|
11689
11863
|
|
|
11864
|
+
const isOwnMessage = message.sender_type === 'customer';
|
|
11865
|
+
|
|
11866
|
+
if (!isOwnMessage) {
|
|
11867
|
+
const panelOpenOnThisConversation =
|
|
11868
|
+
this.messengerState.isOpen &&
|
|
11869
|
+
this.messengerState.activeConversationId === conversation_id;
|
|
11870
|
+
|
|
11871
|
+
if (!panelOpenOnThisConversation) {
|
|
11872
|
+
this._notificationSound.play();
|
|
11873
|
+
}
|
|
11874
|
+
}
|
|
11875
|
+
|
|
11690
11876
|
if (
|
|
11691
11877
|
!this.messengerState.isOpen ||
|
|
11692
11878
|
this.messengerState.activeConversationId !== conversation_id
|