diff --git a/src/enhancers/exportDLJSInterface.ts b/src/enhancers/exportDLJSInterface.ts index 9a828a8..27db375 100644 --- a/src/enhancers/exportDLJSInterface.ts +++ b/src/enhancers/exportDLJSInterface.ts @@ -96,8 +96,7 @@ export default function exportDLJSInterface( { progress: ({ id }: { id?: string }) => id && observer.next(id) }); - await adapter.ingress({...activity, id: uniqueId()}); - + //await adapter.ingress({...activity, id: uniqueId()}); //No need to call ingress as IC3 is providing echo back. If we need this for DL, a new class for IC3 should be created observer.complete(); })(); }); diff --git a/src/ic3/enhancers/egress/createEgressMessageActivityMiddleware.ts b/src/ic3/enhancers/egress/createEgressMessageActivityMiddleware.ts index 6a2478a..4bdd1aa 100644 --- a/src/ic3/enhancers/egress/createEgressMessageActivityMiddleware.ts +++ b/src/ic3/enhancers/egress/createEgressMessageActivityMiddleware.ts @@ -5,8 +5,6 @@ import { IC3AdapterState, StateKey } from '../../../types/ic3/IC3AdapterState'; import { ActivityType } from '../../../types/DirectLineTypes'; import { EgressMiddleware } from '../../../applyEgressMiddleware'; import { IC3DirectLineActivity } from '../../../types/ic3/IC3DirectLineActivity'; -import { sendingActivityMap } from '../../utils/helper' -import uniqueId from '../../utils/uniqueId'; export default function createEgressMessageActivityMiddleware(): EgressMiddleware< IC3DirectLineActivity, @@ -16,8 +14,6 @@ export default function createEgressMessageActivityMiddleware(): EgressMiddlewar if (activity.type !== ActivityType.Message) { return next(activity); } - activity.text = activity.text; - activity.id = uniqueId(); //added unique id: const conversation: Microsoft.CRM.Omnichannel.IC3Client.Model.IConversation = getState(StateKey.Conversation); @@ -28,6 +24,8 @@ export default function createEgressMessageActivityMiddleware(): EgressMiddlewar const { channelData, from, text, timestamp, value } = activity; const deliveryMode = channelData.deliveryMode || Microsoft.CRM.Omnichannel.IC3Client.Model.DeliveryMode.Bridged; let uniqueClientMessageId = Date.now().toString(); + (activity as any).clientmessageid = uniqueClientMessageId; + // If the text is null, we check if the value object is available. // Assign text to be the value string. // If text is still falsy, we set to empty string to avoid breaking IC3 SDK. @@ -49,7 +47,11 @@ export default function createEgressMessageActivityMiddleware(): EgressMiddlewar tags: channelData.tags, clientmessageid: uniqueClientMessageId }; - sendingActivityMap.set(uniqueClientMessageId, activity); + + // attach client activity id tag + if(activity.channelData && activity.channelData.clientActivityID){ + message.tags.push("client_activity_id:" + activity.channelData.clientActivityID); + } if (channelData.uploadedFileMetadata) { await conversation.sendFileMessage( diff --git a/src/ic3/enhancers/egress/createEgressTypingActivityMiddleware.ts b/src/ic3/enhancers/egress/createEgressTypingActivityMiddleware.ts index e125666..c7c48bd 100644 --- a/src/ic3/enhancers/egress/createEgressTypingActivityMiddleware.ts +++ b/src/ic3/enhancers/egress/createEgressTypingActivityMiddleware.ts @@ -1,8 +1,9 @@ /// +import { IC3AdapterState, StateKey } from '../../../types/ic3/IC3AdapterState'; + import { ActivityType } from '../../../types/DirectLineTypes'; import { EgressMiddleware } from '../../../applyEgressMiddleware'; -import { IC3AdapterState, StateKey } from '../../../types/ic3/IC3AdapterState'; import { IC3DirectLineActivity } from '../../../types/ic3/IC3DirectLineActivity'; import { MessageTag } from '../../../types/ic3/MessageTag'; diff --git a/src/ic3/enhancers/ingress/createPatchFromRoleAndNameMiddleware.ts b/src/ic3/enhancers/ingress/createPatchFromRoleAndNameMiddleware.ts index 59dd2a5..79d912e 100644 --- a/src/ic3/enhancers/ingress/createPatchFromRoleAndNameMiddleware.ts +++ b/src/ic3/enhancers/ingress/createPatchFromRoleAndNameMiddleware.ts @@ -20,13 +20,15 @@ export default function createPatchFromRoleAndNameMiddleware(): IngressMiddlewar // TODO: Why use "id.includes" instead of string equal? const patchedRole = role === Role.Channel ? role : id.includes(userId) ? Role.User : Role.Bot; - return next({ + //Taking out for easier debugging + let patchedActivity = { ...activity, from: { id, role: patchedRole, name: (patchedRole === Role.User && getState(StateKey.UserDisplayName)) || name } - }); + } + return next(patchedActivity); }; } diff --git a/src/ic3/enhancers/ingress/mappers/createUserMessageToDirectLineActivityMapper.ts b/src/ic3/enhancers/ingress/mappers/createUserMessageToDirectLineActivityMapper.ts index 0fc9d1e..bc9e0a1 100644 --- a/src/ic3/enhancers/ingress/mappers/createUserMessageToDirectLineActivityMapper.ts +++ b/src/ic3/enhancers/ingress/mappers/createUserMessageToDirectLineActivityMapper.ts @@ -85,13 +85,19 @@ export default function createUserMessageToDirectLineActivityMapper({ id, name }, - id: uniqueId(), + id: message.clientmessageid ? message.clientmessageid : uniqueId(), suggestedActions, text: content, timestamp: timestamp.toISOString(), type: ActivityType.Message }; + if(message.tags){ + let clientActivityTags = message.tags.filter(tag => tag.indexOf("client_activity_id:") !== -1); + if(clientActivityTags[0]){ + activity.channelData.clientActivityID = clientActivityTags[0].replace("client_activity_id:", ""); + } + } return activity; }; } diff --git a/src/ic3/enhancers/ingress/subscribeNewMessageAndThreadUpdate.ts b/src/ic3/enhancers/ingress/subscribeNewMessageAndThreadUpdate.ts index 7f0557a..fee121f 100644 --- a/src/ic3/enhancers/ingress/subscribeNewMessageAndThreadUpdate.ts +++ b/src/ic3/enhancers/ingress/subscribeNewMessageAndThreadUpdate.ts @@ -11,7 +11,6 @@ import { compose } from 'redux'; import createThreadToDirectLineActivityMapper from './mappers/createThreadToDirectLineActivityMapper'; import createTypingMessageToDirectLineActivityMapper from './mappers/createTypingMessageToDirectLineActivityMapper'; import createUserMessageToDirectLineActivityMapper from './mappers/createUserMessageToDirectLineActivityMapper'; -import { sendingActivityMap } from '../../utils/helper'; export default function createSubscribeNewMessageAndThreadUpdateEnhancer(): AdapterEnhancer< IC3DirectLineActivity, @@ -46,13 +45,6 @@ export default function createSubscribeNewMessageAndThreadUpdateEnhancer(): Adap conversation.registerOnNewMessage(async message => { let activity: any = await convertMessage(message); - if(activity && sendingActivityMap.get(message.clientmessageid)){ - activity = sendingActivityMap.get(message.clientmessageid); - if(message.timestamp){ - activity.timestamp = message.timestamp.toISOString(); - } - sendingActivityMap.delete(message.clientmessageid); - } !unsubscribed && next(activity); }); diff --git a/src/ic3/utils/helper.ts b/src/ic3/utils/helper.ts deleted file mode 100644 index 359a5bf..0000000 --- a/src/ic3/utils/helper.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const sendingActivityMap = new Map(); //add clean logic when go over the size -