Skip to content

Commit

Permalink
Merge pull request #169 from WideChat/feat/support-multiple-sns-topic
Browse files Browse the repository at this point in the history
[FEAT] Support Multiple SNS Topic per agent/market
  • Loading branch information
ear-dev authored Sep 23, 2022
2 parents b447f82 + 69de135 commit ffe869f
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 5 deletions.
2 changes: 2 additions & 0 deletions config/Settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export enum AppSetting {
DialogflowDisableComposerOnTriggerEvent = 'dialogflow_disable_composer_on_trigger_event',
DialogflowInvalidInputEventName = 'dialogflow_invalid_input_event_name',
DialogflowConcatinateDFMessages = 'dialogflow_concatinate_df_messages',
DialogflowSNSTopicARN = 'sns_topic_arn',
}

export enum ServerSetting {
Expand Down Expand Up @@ -84,6 +85,7 @@ const agentConfigTemplate = JSON.stringify(
dialogflow_disable_composer_on_trigger_event: false,
dialogflow_invalid_input_event_name: 'invalidUserInput',
dialogflow_concatinate_df_messages: true,
sns_topic_arn: '',
},
},
],
Expand Down
7 changes: 5 additions & 2 deletions handler/OnAgentAssignedHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { getEventData } from '../lib/Analytics';
import { createMessage } from '../lib/Message';
import { sendWelcomeEventToDialogFlow } from '../lib/payloadAction';
import { assignPersistentAgentConfigToRoom } from '../lib/Persistence';
import { updateRoomCustomFields, updateRoomLogData } from '../lib/Room';
import { updateRoomCustomFields, updateRoomSNSData } from '../lib/Room';
import { agentConfigExists, getLivechatAgentConfig } from '../lib/Settings';

export class OnAgentAssignedHandler {
Expand Down Expand Up @@ -44,7 +44,10 @@ export class OnAgentAssignedHandler {
assignPersistentAgentConfigToRoom(this.read, this.persis, rid, agentConfig);

const agentId = await getLivechatAgentConfig(this.read, rid, AppSetting.DialogflowAgentId);
await updateRoomLogData(rid, { dialogflowAgentId: agentId }, this.read, this.modify);
const snsTopicARN = await getLivechatAgentConfig(this.read, rid, AppSetting.DialogflowSNSTopicARN);

await updateRoomSNSData(this.read, this.modify, rid, { dialogflowAgentId: agentId }, true);
await updateRoomSNSData(this.read, this.modify, rid, { arn: snsTopicARN });
this.modify.getAnalytics().sendEvent(getEventData(rid, EventName.CHAT_STARTED));

const sendWelcomeEvent = await getLivechatAgentConfig(this.read, rid, AppSetting.DialogflowWelcomeIntentOnStart);
Expand Down
12 changes: 9 additions & 3 deletions lib/Room.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,17 @@ export const updateRoomCustomFields = async (rid: string, data: IRoomCustomField
}
};

export const updateRoomLogData = async (rid: string, data: IRoomCustomField, read: IRead, modify: IModify): Promise<void> => {
export const updateRoomSNSData = async (read: IRead, modify: IModify, rid: string, data: Record<string, unknown>, isLog = false): Promise<void> => {
const customFields = await getRoomCustomFields(rid, read);
if (customFields) {
const logData = Object.assign((customFields.logData as object) || {}, data);
return updateRoomCustomFields(rid, { logData }, read, modify);
const snsData = Object.assign({}, (customFields.sns || {}) as Record<string, unknown>) ;
const logData = Object.assign({}, snsData.logData || {})
if (isLog) {
snsData.logData = Object.assign(logData, data);
} else {
Object.assign(snsData, data);
}
return updateRoomCustomFields(rid, { sns: snsData }, read, modify);
}
};

Expand Down

0 comments on commit ffe869f

Please sign in to comment.