Ersuo creating releasing (#6)
* fixing duplicated message issue * assign unique ID for activity.id * remove extra logging * remove activity id before egress Co-authored-by: Erli Suo <ersuo@microsoft.com>
This commit is contained in:
Родитель
2af18bda22
Коммит
9a88673d8c
|
@ -96,8 +96,7 @@ export default function exportDLJSInterface<TAdapterState extends AdapterState>(
|
|||
{
|
||||
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();
|
||||
})();
|
||||
});
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
/// <reference path="../../../types/ic3/external/Model.d.ts" />
|
||||
|
||||
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';
|
||||
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
});
|
||||
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
export const sendingActivityMap = new Map<string, any>(); //add clean logic when go over the size
|
||||
|
Загрузка…
Ссылка в новой задаче