Skip to content

Conversation

@ninaceban
Copy link
Contributor

Description

Related Issue

Motivation and Context

Screenshots (if appropriate):

Checklist:

  • I have signed the Adobe Open Source CLA or I'm an Adobe employee.
  • I have made any necessary test changes and all tests pass.
  • I have run the Sandbox successfully.

Copy link
Contributor

@jonsnyder jonsnyder left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My review is not complete, but I wanted to give you these comments before I start some meetings. I will schedule a check-in to go over these issues.

});
}

const ecid = decodeKndctrCookie();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are we explicitly including the ECID? The conversation backend should be able to read the ECID cookie either via the first party cookie or via the state section in the request for third-party data collection. We'd like to keep this protocol as close to Konductor as possible.

Can we also follow the established cookie protocol for the session_id cookie? i.e. conversation backend returning a session id when called without the cookie? Or does the client need to create the session id?

Copy link
Contributor Author

@ninaceban ninaceban Nov 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need the sessionId to be in queryParam for proper session stickiness.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But why are we explicitly including the ECID for the event? Is it for third party collection domains?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've added the cookie in the meta.state too, but for now our BC runtime is looking for identityMap ECID.

return consent.awaitConsent().then(() => {
return lifecycle
.onBeforeEvent({
event,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Calling onBeforeEvent here may cause problems for the other components. We need to audit each use and make sure it is appropriate. Off the top of my head I know that this will cause problems with personalization. Consider if "sendConversationEvent" is called as the first event of a page load. In this case, the personalization component would add requests for personalization to the payload, and then not request personalization in any subsequent events. We could add a flag or type parameter to the onBeforeEvent params.

Copy link
Contributor Author

@ninaceban ninaceban Nov 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jonsnyder we need onBeforeEvent to ensure we have all the right context data being added to XDM. I am not sure why there is a dependency between Personalization and Brand Concierge. As far as I can tell each component should be independent and as long as no component overrides the event details of the other component we should be good.

If there are some unintended dependencies caused by onBeforeEvent usage in Personalization component, then Personalization component should be adjusted accordingly.

As an AEP Web SDK user I would be very surprised if am invoking sendConversationEvent and this somehow affects personalization functionality. If customer needs personalization after a sendConversationEvent has been fired, he can always use sendEvent with query -> personalization.

Adding a flag seems we are trying to hide a design issue, instead of addressing the real problem.


const streamParser = createStreamParser();

streamParser(response.body, onStreamResponseCallback);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should have a discussion on the correct protocol to use. Florentine mentioned that Konductor has implemented a streaming protocol already for mobile. Perhaps we should use that? The beauty of using EventSource is that it can resume if the connection is dropped while responses are streaming. I think the best way to do it would be to trigger a LLM call on a POST event, but then have part of the handle be a url to the rest of the response that can be retrieved via an eventSource enabled URL. In this way you actually could have the brand concierge service be an upstream that starts the stream, and then your BC backend would just serve Event Source get responses.

@ninaceban
Copy link
Contributor Author

@jonsnyder @carterworks please take another look, I have addressed all feedback and added unit and functional tests. Thank you

Copy link
Contributor

@carterworks carterworks left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't have any major concerns at this point. Let's see what Jon has to say.

@jonsnyder jonsnyder merged commit 6e15d72 into main Dec 1, 2025
5 checks passed
@jonsnyder jonsnyder deleted the b-concierge branch December 1, 2025 16:14
@jonsnyder jonsnyder mentioned this pull request Dec 1, 2025
3 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants