cancel
Showing results for 
Search instead for 
Did you mean: 

Content personalization

bip1989
Star Contributor
Star Contributor

Hello community

I have been assigned to look into content personalization capability in Alfresco Content Services. 

What we are looking for is that, how to personalize contents stored in repository so that users see personalized content (be it search or doclib or any allowed part in repo) based on some presonalized criteria such as Time zone, Markets, Devisions, etc. etc. 


Have you implemented this kind of functionality in Alfresco? Is there any add-on available? 

Can you advice whether it's feasible and doable or not? 

1 ACCEPTED ANSWER

abhinavmishra14
World-Class Innovator
World-Class Innovator

I have not dealt with content personalization as yours before, but based on what you have mentioned, i can think of doing following steps to achive the goal. I am not sure if this will fit exactly to your requirement and someone else may have a better solution than this. 

What is known:

1- REST APIs will be used for content requests. 

2- You know the creteria on which the content will be returned in response. Some are market, a specific city/state, zone, existing user credentials (not sure what will come in the request)

3- I am assuming editors are using share ui for adding/uploading content and metadata. 

Based on above known conditions:

1- Create a custom content model for personalized content mapping. 

For reference: https://ecmarchitect.com/alfresco-developer-series-tutorials/content/tutorial/tutorial.html#part-1-i...

2- Create aspects for mapping the personalized content metadata. 

e.g.: marketsAspect, citiesAspect, statesAspect, avaibaleZonesAsepcts etc.

For reference: https://ecmarchitect.com/alfresco-developer-series-tutorials/content/tutorial/tutorial.html#aspects

3- Create constraints mapping to the markets, cities, states, availableZones etc. and use them for the properties within aspects, so that you see a fixed list of options on share UI). 

For reference: https://ecmarchitect.com/alfresco-developer-series-tutorials/content/tutorial/tutorial.html#constrai...

4- An additional aspect for marking the start date/time and end date/time of this personalized content, so that this content can be marked archived or renewed after expiry (end date/time). 

5- Implement a behavior to apply these aspects on node/content creation (when editors upload/create content).

For reference: https://ecmarchitect.com/alfresco-developer-series-tutorials/behaviors/tutorial/tutorial.html#implem...

    Or mark these aspests as mandatory aspects so they are by default available on all the newly added content. 

     example:

 <mandatory-aspects>
     <aspect>demo:markets</aspect>
     <aspect>demo:states</aspect>
     <aspect>demo:cities</aspect>
.... an so on
  </mandatory-aspects>

    Or force the properties on share forms (e.g. <show id="demo:city" force="true"/>) for the content types so that when editors select/apply metadata, the aspect is applied automatically. 

Note- For existing content/nodes, you would have to write a cleanup script to apply these aspects (find all nodes in repository within any scope e.g. site/share files etc. and apply the aspect where these aspects are not present) if you want existing content to be used for personalization. I assume it would be. 

6- Map aspects/properties to the share form for the selected content types or based on aspects.

For reference: 

https://ecmarchitect.com/alfresco-developer-series-tutorials/content/tutorial/tutorial.html#configur...

https://docs.alfresco.com/6.2/tasks/forms-aspect-display.html (Refer point 5 in this doc.)

7- Implement a custom webscript/rest api for filtering the content and return to the web-app (as you mentioned) based on required inputs. You can call this webscript/api as a custom search api may be. Model your request and response formats for this api based on requirement. You can choose to ue json request containing all creteria or accept each creteria as param. JSON Request is preffered approach as it gives you flexibility to consume single payload and process it instead of working through n number of params. 

You can use Services such as: SearchServiceNodeServiceTaggingService, etc. depending on your response needs. 

Here is reference to full servives and apis:

https://docs.alfresco.com/5.2/concepts/dev-services.html

https://docs.alfresco.com/5.2/references/dev-extension-points-public-java-api.html

Again, this is just an idea i can think trough for your use case.

~Abhinav
(ACSCE, AWS SAA, Azure Admin)

View answer in original post

10 REPLIES 10

bip1989
Star Contributor
Star Contributor

Hello Forum,

Any pointers/suggestions/approach on the above query? 

Thank you in advance

EddieMay
World-Class Innovator
World-Class Innovator

Hi @bip1989,

There are ways of personalising the user experience - dashlets are one example, this includes a saved search dashlet.

Then there is tagging for categorising content and  Smart Folders for displaying content,and there are obviously folders and sites. There are also aspects and webscripts that could be used.

What would help is if you could give a concrete example of a requirement - how would the timezone work, for example?

HTH,

Digital Community Manager, Alfresco Software.
Problem solved? Click Accept as Solution!

bip1989
Star Contributor
Star Contributor

Hi @EddieMay  thanks for your response.

So our requirement is as follows:

We have an e-commerce application which consumes our Alfresco content via REST APIs only. 
Content editors uploads content in Alfresco and put appropriate metadata.

The content can include an ad/video commercial that shows on e-commerce web page and fetched from Alfresco. 

Right now an ad show everywhere. We want see if we can implement content personalization functionality to show based on target audience. Say a particular market, a specific city/state, zone etc. These info will come as part of REST APIs and Alfresco has to return personalized content based on these criteria. So on same page different users may see different ads. An existing customer may see ads based on their existing subscriptions and available offers based on their user account id etc.

abhinavmishra14
World-Class Innovator
World-Class Innovator

I have not dealt with content personalization as yours before, but based on what you have mentioned, i can think of doing following steps to achive the goal. I am not sure if this will fit exactly to your requirement and someone else may have a better solution than this. 

What is known:

1- REST APIs will be used for content requests. 

2- You know the creteria on which the content will be returned in response. Some are market, a specific city/state, zone, existing user credentials (not sure what will come in the request)

3- I am assuming editors are using share ui for adding/uploading content and metadata. 

Based on above known conditions:

1- Create a custom content model for personalized content mapping. 

For reference: https://ecmarchitect.com/alfresco-developer-series-tutorials/content/tutorial/tutorial.html#part-1-i...

2- Create aspects for mapping the personalized content metadata. 

e.g.: marketsAspect, citiesAspect, statesAspect, avaibaleZonesAsepcts etc.

For reference: https://ecmarchitect.com/alfresco-developer-series-tutorials/content/tutorial/tutorial.html#aspects

3- Create constraints mapping to the markets, cities, states, availableZones etc. and use them for the properties within aspects, so that you see a fixed list of options on share UI). 

For reference: https://ecmarchitect.com/alfresco-developer-series-tutorials/content/tutorial/tutorial.html#constrai...

4- An additional aspect for marking the start date/time and end date/time of this personalized content, so that this content can be marked archived or renewed after expiry (end date/time). 

5- Implement a behavior to apply these aspects on node/content creation (when editors upload/create content).

For reference: https://ecmarchitect.com/alfresco-developer-series-tutorials/behaviors/tutorial/tutorial.html#implem...

    Or mark these aspests as mandatory aspects so they are by default available on all the newly added content. 

     example:

 <mandatory-aspects>
     <aspect>demo:markets</aspect>
     <aspect>demo:states</aspect>
     <aspect>demo:cities</aspect>
.... an so on
  </mandatory-aspects>

    Or force the properties on share forms (e.g. <show id="demo:city" force="true"/>) for the content types so that when editors select/apply metadata, the aspect is applied automatically. 

Note- For existing content/nodes, you would have to write a cleanup script to apply these aspects (find all nodes in repository within any scope e.g. site/share files etc. and apply the aspect where these aspects are not present) if you want existing content to be used for personalization. I assume it would be. 

6- Map aspects/properties to the share form for the selected content types or based on aspects.

For reference: 

https://ecmarchitect.com/alfresco-developer-series-tutorials/content/tutorial/tutorial.html#configur...

https://docs.alfresco.com/6.2/tasks/forms-aspect-display.html (Refer point 5 in this doc.)

7- Implement a custom webscript/rest api for filtering the content and return to the web-app (as you mentioned) based on required inputs. You can call this webscript/api as a custom search api may be. Model your request and response formats for this api based on requirement. You can choose to ue json request containing all creteria or accept each creteria as param. JSON Request is preffered approach as it gives you flexibility to consume single payload and process it instead of working through n number of params. 

You can use Services such as: SearchServiceNodeServiceTaggingService, etc. depending on your response needs. 

Here is reference to full servives and apis:

https://docs.alfresco.com/5.2/concepts/dev-services.html

https://docs.alfresco.com/5.2/references/dev-extension-points-public-java-api.html

Again, this is just an idea i can think trough for your use case.

~Abhinav
(ACSCE, AWS SAA, Azure Admin)

Thanks @EddieMay @abhinavmishra14 for your feedback and guidance. 

we are going to start a poc soon, i will try keep these ideas you all shared in mind. 
thanks again.

EddieMay
World-Class Innovator
World-Class Innovator

Hi @bip1989,

Good luck with your POC & have a great weekend.

Keep in touch, 

Digital Community Manager, Alfresco Software.
Problem solved? Click Accept as Solution!

@bip1989 good luck. Let us know how it goes and how you implement conteng personalization, so i can also learn it.

~Abhinav
(ACSCE, AWS SAA, Azure Admin)

Thanks @EddieMay and @abhinavmishra14 i will post here

bip1989
Star Contributor
Star Contributor

Hi @EddieMay @abhinavmishra14 

started working on poc, and choose to create search api as suggested by you. I guess that was the only way we figured with limited ootb content personalization abilities out of the box. 

Having an issue with tags so i posted a question. 

thanks for support