@microsoft/omnichannel-chat-sdk 1.0.1-main.4ac6840 → 1.0.1-main.6567000

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.
Files changed (70) hide show
  1. package/CHANGELOG.md +26 -3
  2. package/README.md +108 -76
  3. package/lib/OmnichannelChatSDK.d.ts +6 -4
  4. package/lib/OmnichannelChatSDK.js +311 -297
  5. package/lib/OmnichannelChatSDK.js.map +1 -1
  6. package/lib/api/createVoiceVideoCalling.js +6 -2
  7. package/lib/api/createVoiceVideoCalling.js.map +1 -1
  8. package/lib/config/settings.d.ts +1 -1
  9. package/lib/config/settings.js +1 -1
  10. package/lib/config/settings.js.map +1 -1
  11. package/lib/core/ChatConfig.d.ts +4 -0
  12. package/lib/core/ChatSDKExceptionDetails.d.ts +5 -0
  13. package/lib/core/ChatSDKExceptionDetails.js +3 -0
  14. package/lib/core/ChatSDKExceptionDetails.js.map +1 -0
  15. package/lib/core/ChatTranscriptBody.d.ts +1 -1
  16. package/lib/core/LiveWorkItemDetails.d.ts +2 -0
  17. package/lib/core/OmnichannelErrorCodes.d.ts +4 -0
  18. package/lib/core/OmnichannelErrorCodes.js +8 -0
  19. package/lib/core/OmnichannelErrorCodes.js.map +1 -0
  20. package/lib/core/PostChatContext.d.ts +1 -0
  21. package/lib/core/messaging/ACSClient.js +1 -1
  22. package/lib/core/messaging/ACSClient.js.map +1 -1
  23. package/lib/core/messaging/ChatAdapterOptionalParams.d.ts +14 -0
  24. package/lib/core/messaging/ChatAdapterOptionalParams.js +3 -0
  25. package/lib/core/messaging/ChatAdapterOptionalParams.js.map +1 -0
  26. package/lib/core/messaging/MessageTags.d.ts +2 -0
  27. package/lib/core/messaging/MessageTags.js +4 -2
  28. package/lib/core/messaging/MessageTags.js.map +1 -1
  29. package/lib/external/ACSAdapter/createChannelDataEgressMiddleware.d.ts +5 -0
  30. package/lib/external/ACSAdapter/createChannelDataEgressMiddleware.js +34 -0
  31. package/lib/external/ACSAdapter/createChannelDataEgressMiddleware.js.map +1 -0
  32. package/lib/external/ACSAdapter/createFormatEgressTagsMiddleware.d.ts +2 -0
  33. package/lib/external/ACSAdapter/createFormatEgressTagsMiddleware.js +31 -0
  34. package/lib/external/ACSAdapter/createFormatEgressTagsMiddleware.js.map +1 -0
  35. package/lib/external/ACSAdapter/createFormatIngressTagsMiddleware.d.ts +2 -0
  36. package/lib/external/ACSAdapter/createFormatIngressTagsMiddleware.js +25 -0
  37. package/lib/external/ACSAdapter/createFormatIngressTagsMiddleware.js.map +1 -0
  38. package/lib/external/CallingSDK/ICallingSDKLogData.d.ts +7 -0
  39. package/lib/external/CallingSDK/ICallingSDKLogData.js +3 -0
  40. package/lib/external/CallingSDK/ICallingSDKLogData.js.map +1 -0
  41. package/lib/external/IC3Adapter/IIC3AdapterOptions.d.ts +12 -0
  42. package/lib/index.d.ts +7 -6
  43. package/lib/index.js +13 -8
  44. package/lib/index.js.map +1 -1
  45. package/lib/telemetry/AriaTelemetry.d.ts +1 -0
  46. package/lib/telemetry/AriaTelemetry.js +55 -0
  47. package/lib/telemetry/AriaTelemetry.js.map +1 -1
  48. package/lib/telemetry/ScenarioMarker.d.ts +2 -0
  49. package/lib/telemetry/ScenarioMarker.js +7 -3
  50. package/lib/telemetry/ScenarioMarker.js.map +1 -1
  51. package/lib/telemetry/ScenarioType.d.ts +1 -0
  52. package/lib/telemetry/ScenarioType.js +1 -0
  53. package/lib/telemetry/ScenarioType.js.map +1 -1
  54. package/lib/telemetry/TelemetryEvent.d.ts +1 -3
  55. package/lib/telemetry/TelemetryEvent.js +0 -2
  56. package/lib/telemetry/TelemetryEvent.js.map +1 -1
  57. package/lib/tsconfig.tsbuildinfo +908 -1127
  58. package/lib/utils/WebUtils.d.ts +3 -1
  59. package/lib/utils/WebUtils.js +8 -2
  60. package/lib/utils/WebUtils.js.map +1 -1
  61. package/lib/utils/libraries.d.ts +1 -3
  62. package/lib/utils/libraries.js +2 -11
  63. package/lib/utils/libraries.js.map +1 -1
  64. package/lib/utils/locale.d.ts +2 -0
  65. package/lib/utils/locale.js +5 -3
  66. package/lib/utils/locale.js.map +1 -1
  67. package/lib/utils/loggers.d.ts +26 -1
  68. package/lib/utils/loggers.js +94 -2
  69. package/lib/utils/loggers.js.map +1 -1
  70. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -4,12 +4,35 @@ All notable changes to this project will be documented in this file.
4
4
  ## [Unreleased]
5
5
 
6
6
  ### Added
7
- - Add Post Chat Survey Support
8
- - Add `getPostChatSurveyContext` & `initializePostChatRenderer` and `renderPostChatSurvey` API methods
9
- - Add `GetPostChatSurveyContext`, `RenderPostChatSurvey`, and `InitializePostChatRenderer` telemetry events
7
+ - Add `getPostChatSurveyContext` API method
8
+ - Add `GetPostChatSurveyContext` telemetry event
9
+ - Add `widgetId` & `clientMessageId` as metadata on sending message
10
+ - Update `ChatConfig` interface with `LiveChatVersion`, `allowedFileExtensions` & `maxUploadFileSize` properties
11
+ - Add ability to automatically detect locale from chat config
12
+ - Add `runtimeId` attribute in `OmnichannelChatSDK` & `ChatSDKRuntimeId` field in telemetry
13
+ - Add ability to automatically pass locale from chat config on calling `ChatSDK.emailLiveChatTranscript()`
14
+ - Bubble up `WidgetUseOutsideOperatingHour` exception
15
+ - Add `acs_webchat-chat-adapter` middleware to add default `channelData.tags` & `channelData.metadata`
16
+ - Update `ChatConfig` interface with `msdyn_enablemarkdown` property
17
+ - Throw exception on `ChatSDK.getVoiceVideoCalling()` if feature is disabled or platform is not supported
18
+ - Add `participantType` & `canRenderPostChat` as response of getConversationDetails() API
19
+ - Add support for separate bot post chat survey feature
20
+ - Pass `logger` to `acs_webchat-chat-adapter`
21
+
22
+ ### Fix
23
+ - Add `acs_webchat-chat-adapter` middlewares to format `channelData.tags`
24
+ - Skip `session init` call on existing conversation
25
+ - Fix `chat reconnect` not ending the conversation on calling `ChatSDK.endChat()`
26
+ - Fix on messaging client not sending heartbeat on new conversations subsequent to the first conversation
27
+ - Fix `ChatSDK.getConversationDetails()` not passing `authenticatedUserToken`
28
+ - Fix `IC3Client.dispose()` called when `IC3Client` is `undefined`
10
29
 
11
30
  ### Changed
12
31
  - README: added examples on usages of the post chat APIs.
32
+ - Uptake [@azure/communication-chat@1.1.1](https://www.npmjs.com/package/@azure/communication-chat/v/1.1.1)
33
+ - Uptake [acs_webchat-chat-adapter@0.0.35-beta.2](https://unpkg.com/acs_webchat-chat-adapter@0.0.35-beta.2/dist/chat-adapter.js)
34
+ - Update `locale` property in `ChatTranscriptBody` interface to be optional
35
+ - Uptake [acs_webchat-chat-adapter@0.0.35-beta.4](https://unpkg.com/acs_webchat-chat-adapter@0.0.35-beta.4/dist/chat-adapter.js)
13
36
 
14
37
  ## [1.0.0] - 2021-10-08
15
38
  ### Added
package/README.md CHANGED
@@ -14,7 +14,7 @@ Please make sure you have a chat widget configured before using this package or
14
14
  - [Installation on React Native](#installation-on-react-native)
15
15
  - [API Reference](#api-reference)
16
16
  - [API Examples](#api-examples)
17
- - [Sample Apps](samples/)
17
+ - [Sample Apps](https://github.com/microsoft/omnichannel-chat-sdk-samples)
18
18
  - [Common Scenarios](#common-scenarios)
19
19
  - [Feature Comparisons](#feature-comparisons)
20
20
  - [Telemetry](#telemetry)
@@ -40,7 +40,7 @@ Omnichannel offers an live chat widget (LCW) by default. You can use the Chat SD
40
40
  | Screen Sharing | ✔ | 3rd party add-on | Only supported on Web |
41
41
  | Authenticated Chat | ✔ | ✔ |
42
42
  | Pre-chat Survey | ✔ | ✔ |
43
- | Post-chat Survey | ✔ | |
43
+ | Post-chat Survey | ✔ | |
44
44
  | Download Transcript | ✔ | ✔ |
45
45
  | Email Transcript | ✔ | ✔ |
46
46
  | Data Masking | ✔ | ✔ |
@@ -65,7 +65,26 @@ Omnichannel offers an live chat widget (LCW) by default. You can use the Chat SD
65
65
 
66
66
  The following steps will be required to run Omnichannel Chat SDK on React Native:
67
67
 
68
- 1. Run `npm install node-libs-react-native --save-dev`
68
+ 1. Install `node-libs-react-native`
69
+ ```
70
+ npm install node-libs-react-native --save-dev
71
+ ```
72
+
73
+ 1. Install `react-native-randomBytes`
74
+ ```
75
+ npm install react-native-randombytes --save-dev
76
+ ```
77
+
78
+ 1. Install `react-native-get-random-values`
79
+ ```
80
+ npm install react-native-get-random-values --save-dev
81
+ ```
82
+
83
+ 1. Install `react-native-url-polyfill`
84
+ ```
85
+ npm install react-native-url-polyfill --save-dev
86
+ ```
87
+
69
88
  1. Update *metro.config.js* to use React Native compatible Node Core modules
70
89
  ```ts
71
90
  module.exports = {
@@ -80,24 +99,11 @@ The following steps will be required to run Omnichannel Chat SDK on React Native
80
99
  };
81
100
  ```
82
101
 
83
- 1. Import 'node-libs-react-native/globals' on top of your entry point file
102
+ 1. Add following *import* on top of your entry point file
84
103
  ```ts
85
104
  import 'node-libs-react-native/globals';
86
- ```
87
-
88
- 1. Install `react-native-randomBytes`
89
- ```
90
- npm install react-native-randombytes --save-dev
91
- ```
92
-
93
- 1. Install `react-native-get-random-values`
94
- ```
95
- npm install react-native-get-random-values --save-dev
96
- ```
97
-
98
- 1. Import `react-native-get-random-values` on top of your entry point file
99
- ```ts
100
105
  import 'react-native-get-random-values';
106
+ import 'react-native-url-polyfill';
101
107
  ```
102
108
 
103
109
  ## API Reference
@@ -125,8 +131,9 @@ The following steps will be required to run Omnichannel Chat SDK on React Native
125
131
  | OmnichannelChatSDK.getLiveChatTranscript() | Get transcript data (JSON) | |
126
132
  | OmnichannelChatSDK.uploadFileAttachment() | Send file attachment | |
127
133
  | OmnichannelChatSDK.downloadFileAttachment() | Download file attachment | |
128
- | OmnichannelChatSDK.createChatAdapter() | Get IC3Adapter | **Web only** |
134
+ | OmnichannelChatSDK.createChatAdapter() | Get Chat Adapter | **Web only** |
129
135
  | OmnichannelChatSDK.getVoiceVideoCalling() | Get VoiceVideoCall SDK for Escalation to Voice & Video | **Web only** |
136
+ | OmnichannelChatSDK.getPostChatSurveyContext() | Get post chat survey link, survey locale, and whether an agent has joined the survey | |
130
137
 
131
138
  ## API examples
132
139
 
@@ -204,6 +211,21 @@ The following steps will be required to run Omnichannel Chat SDK on React Native
204
211
  const preChatSurvey = await getPreChatSurvey(parseToJSON); // Adaptive Cards payload data as string
205
212
  ```
206
213
 
214
+ ### Get PostChat Survey
215
+ ```ts
216
+ try {
217
+ const context = await chatSDK.getPostChatSurveyContext();
218
+ if (context.participantJoined) { // participantJoined will be true if an agent has joined the conversation, or a bot has joined the conversation and the bot survey flag has been turned on on the admin side.
219
+ // formsProLocale is the default language you have set on the CustomerVoice portal. You can override this url parameter with any locale that CustomerVoice supports.
220
+ // If "&lang=" is not set on the url, the locale will be English.
221
+ const linkToSend = context.surveyInviteLink + "&lang=" + context.formsProLocale;
222
+ // This link is accessible and will redirect to the survey page. Use it as you see fit.
223
+ }
224
+ } catch (ex) {
225
+ // If the post chat should not be shown by any reason (e.g. post chat is not enabled), promise will be rejected.
226
+ }
227
+ ```
228
+
207
229
  ### Start Chat
208
230
  ```ts
209
231
  const customContext = {
@@ -313,8 +335,7 @@ The following steps will be required to run Omnichannel Chat SDK on React Native
313
335
  ```ts
314
336
  const body = {
315
337
  emailAddress: 'contoso@microsoft.com',
316
- attachmentMessage: 'Attachment Message',
317
- locale: 'en-us'
338
+ attachmentMessage: 'Attachment Message'
318
339
  };
319
340
  await chatSDK.emailLiveChatTranscript(body);
320
341
  ```
@@ -575,82 +596,93 @@ The following steps will be required to run Omnichannel Chat SDK on React Native
575
596
  console.log("VoiceVideoCalling loaded");
576
597
  } catch (e) {
577
598
  console.log(`Failed to load VoiceVideoCalling: ${e}`);
599
+
600
+ if (e.message === 'UnsupportedPlatform') {
601
+ // Voice Video Calling feature is not supported on this platform
602
+ }
603
+
604
+ if (e.message === 'FeatureDisabled') {
605
+ // Voice Video Calling feature is disabled on admin side
606
+ }
578
607
  }
579
608
 
580
609
  await chatSDK.startChat();
581
610
 
582
611
  const chatToken: any = await chatSDK.getChatToken();
583
612
 
584
- try {
585
- await VoiceVideoCallingSDK.initialize({
586
- chatToken,
587
- selfVideoHTMLElementId: 'selfVideo', // HTML element id where video stream of the agent will be rendered
588
- remoteVideoHTMLElementId: 'remoteVideo', // HTML element id where video stream of the customer will be rendered
589
- OCClient: chatSDK.OCClient
590
- });
591
- } catch (e) {
592
- console.error("Failed to initialize VoiceVideoCalling!");
593
- }
613
+ // Initialize only if VoiceVideoCallingSDK is defined
614
+ if (VoiceVideoCallingSDK) {
615
+ try {
616
+ await VoiceVideoCallingSDK.initialize({
617
+ chatToken,
618
+ selfVideoHTMLElementId: 'selfVideo', // HTML element id where video stream of the agent will be rendered
619
+ remoteVideoHTMLElementId: 'remoteVideo', // HTML element id where video stream of the customer will be rendered
620
+ OCClient: chatSDK.OCClient
621
+ });
622
+ } catch (e) {
623
+ console.error("Failed to initialize VoiceVideoCalling!");
624
+ }
594
625
 
595
- // Triggered when there's an incoming call
596
- VoiceVideoCallingSDK.onCallAdded(() => {
597
- ...
598
- });
626
+ // Triggered when there's an incoming call
627
+ VoiceVideoCallingSDK.onCallAdded(() => {
628
+ ...
629
+ });
599
630
 
600
- // Triggered when local video stream is available (e.g.: Local video added succesfully in selfVideoHTMLElement)
601
- VoiceVideoCallingSDK.onLocalVideoStreamAdded(() => {
602
- ...
603
- });
631
+ // Triggered when local video stream is available (e.g.: Local video added succesfully in selfVideoHTMLElement)
632
+ VoiceVideoCallingSDK.onLocalVideoStreamAdded(() => {
633
+ ...
634
+ });
604
635
 
605
- // Triggered when local video stream is unavailable (e.g.: Customer turning off local video)
606
- VoiceVideoCallingSDK.onLocalVideoStreamRemoved(() => {
607
- ...
608
- });
636
+ // Triggered when local video stream is unavailable (e.g.: Customer turning off local video)
637
+ VoiceVideoCallingSDK.onLocalVideoStreamRemoved(() => {
638
+ ...
639
+ });
609
640
 
610
- // Triggered when remote video stream is available (e.g.: Remote video added succesfully in remoteVideoHTMLElement)
611
- VoiceVideoCallingSDK.onRemoteVideoStreamAdded(() => {
612
- ...
613
- });
641
+ // Triggered when remote video stream is available (e.g.: Remote video added succesfully in remoteVideoHTMLElement)
642
+ VoiceVideoCallingSDK.onRemoteVideoStreamAdded(() => {
643
+ ...
644
+ });
614
645
 
615
- // Triggered when remote video stream is unavailable (e.g.: Agent turning off remote video)
616
- VoiceVideoCallingSDK.onRemoteVideoStreamRemoved(() => {
617
- ...
618
- });
646
+ // Triggered when remote video stream is unavailable (e.g.: Agent turning off remote video)
647
+ VoiceVideoCallingSDK.onRemoteVideoStreamRemoved(() => {
648
+ ...
649
+ });
619
650
 
620
- // Triggered when current call has ended or disconnected regardless the party
621
- VoiceVideoCalling.onCallDisconnected(() => {
622
- ...
623
- });
651
+ // Triggered when current call has ended or disconnected regardless the party
652
+ VoiceVideoCalling.onCallDisconnected(() => {
653
+ ...
654
+ });
624
655
 
625
- // Check if microphone is muted
626
- const isMicrophoneMuted = VoiceVideoCallingSDK.isMicrophoneMuted();
656
+ // Check if microphone is muted
657
+ const isMicrophoneMuted = VoiceVideoCallingSDK.isMicrophoneMuted();
627
658
 
628
- // Check if remote video is available
629
- const isRemoteVideoEnabled = VoiceVideoCallingSDK.isRemoteVideoEnabled();
659
+ // Check if remote video is available
660
+ const isRemoteVideoEnabled = VoiceVideoCallingSDK.isRemoteVideoEnabled();
630
661
 
631
- // Check if local video is available
632
- const isLocalVideoEnabled = VoiceVideoCallingSDK.isLocalVideoEnabled();
662
+ // Check if local video is available
663
+ const isLocalVideoEnabled = VoiceVideoCallingSDK.isLocalVideoEnabled();
633
664
 
634
- // Accepts incoming call
635
- const acceptCallConfig = {
636
- withVideo: true // Accept call with/without video stream
637
- };
638
- await VoiceVideoCallingSDK.acceptCall(acceptCallConfig);
665
+ // Accepts incoming call
666
+ const acceptCallConfig = {
667
+ withVideo: true // Accept call with/without video stream
668
+ };
669
+ await VoiceVideoCallingSDK.acceptCall(acceptCallConfig);
639
670
 
640
- // Rejects incoming call
641
- await VoiceVideoCallingSDK.rejectCall();
671
+ // Rejects incoming call
672
+ await VoiceVideoCallingSDK.rejectCall();
642
673
 
643
- // Ends/Stops current call
644
- await VoiceVideoCallingSDK.stopCall();
674
+ // Ends/Stops current call
675
+ await VoiceVideoCallingSDK.stopCall();
645
676
 
646
- // Mute/Unmute current call
647
- await VoiceVideoCallingSDK.toggleMute()
677
+ // Mute/Unmute current call
678
+ await VoiceVideoCallingSDK.toggleMute()
648
679
 
649
- // Display/Hide local video of current call
650
- await VoiceVideoCallingSDK.toggleLocalVideo()
680
+ // Display/Hide local video of current call
681
+ await VoiceVideoCallingSDK.toggleLocalVideo()
651
682
 
652
- // Clean up VoiceVideoCallingSDK (e.g.: Usually called when customer ends chat session)
653
- VoiceVideoCallingSDK.close();
683
+ // Clean up VoiceVideoCallingSDK (e.g.: Usually called when customer ends chat session)
684
+ VoiceVideoCallingSDK.close();
685
+ }
654
686
  ```
655
687
 
656
688
  ## Feature Comparisons
@@ -1,5 +1,6 @@
1
1
  import ACSClient from "./core/messaging/ACSClient";
2
2
  import { ParticipantsRemovedEvent } from '@azure/communication-signaling';
3
+ import ChatAdapterOptionalParams from "./core/messaging/ChatAdapterOptionalParams";
3
4
  import ChatConfig from "./core/ChatConfig";
4
5
  import ChatReconnectContext from "./core/ChatReconnectContext";
5
6
  import ChatReconnectOptionalParams from "./core/ChatReconnectOptionalParams";
@@ -20,10 +21,10 @@ import LiveWorkItemDetails from "./core/LiveWorkItemDetails";
20
21
  import OmnichannelConfig from "./core/OmnichannelConfig";
21
22
  import OmnichannelMessage from "./core/messaging/OmnichannelMessage";
22
23
  import OnNewMessageOptionalParams from "./core/messaging/OnNewMessageOptionalParams";
23
- import PostChatContext from "./core/PostChatContext";
24
24
  import StartChatOptionalParams from "./core/StartChatOptionalParams";
25
25
  declare class OmnichannelChatSDK {
26
26
  private debug;
27
+ runtimeId: string;
27
28
  OCSDKProvider: unknown;
28
29
  IC3SDKProvider: unknown;
29
30
  OCClient: any;
@@ -33,6 +34,7 @@ declare class OmnichannelChatSDK {
33
34
  omnichannelConfig: OmnichannelConfig;
34
35
  chatSDKConfig: ChatSDKConfig;
35
36
  isInitialized: boolean;
37
+ localeId: string;
36
38
  requestId: string;
37
39
  private chatToken;
38
40
  private liveChatConfig;
@@ -49,6 +51,7 @@ declare class OmnichannelChatSDK {
49
51
  private ocSdkLogger;
50
52
  private acsClientLogger;
51
53
  private acsAdapterLogger;
54
+ private callingSdkLogger;
52
55
  private isPersistentChat;
53
56
  private isChatReconnect;
54
57
  private reconnectId;
@@ -80,15 +83,14 @@ declare class OmnichannelChatSDK {
80
83
  downloadFileAttachment(fileMetadata: FileMetadata | IFileMetadata): Promise<Blob>;
81
84
  emailLiveChatTranscript(body: ChatTranscriptBody): Promise<any>;
82
85
  getLiveChatTranscript(): Promise<any>;
83
- createChatAdapter(protocol?: string | null): Promise<unknown>;
86
+ createChatAdapter(optionalParams?: ChatAdapterOptionalParams): Promise<unknown>;
84
87
  getVoiceVideoCalling(params?: any): Promise<any>;
85
88
  getPostChatSurveyContext(): Promise<any>;
86
- initializePostChatRenderer(): Promise<void>;
87
- renderPostChatSurvey(containerId: string, postChatContext: PostChatContext): Promise<void>;
88
89
  private getIC3Client;
89
90
  private getChatConfig;
90
91
  private resolveIC3ClientUrl;
91
92
  private resolveChatAdapterUrl;
92
93
  private updateChatToken;
94
+ private setAuthTokenProvider;
93
95
  }
94
96
  export default OmnichannelChatSDK;