Here is a list of attributes for you. The specific one you're looking for may be "ContentID" or "SkuID" depending on the catalogue type. In my implementation of a content catalogue, there are a few steps in this order:
Step 1: Set and collect the data
<script src="//{MID}.collect.igodigital.com/collect.js"></script>
<script>
_etmc.push(["setOrgId", "{MID}"]);//Tracks to this MID
_etmc.push(["setUserInfo", { "email": "{USER_EMAIL_ADDRESS}" } ]);//Tracks to this user
_etmc.push(["trackPageView", { "item": "{CONTENT_ID}" }]);//Tracks page view of this product, matches the "ContentID" for content or "SkuID" for products
</script>
Step 2: Dynamically stream the item's update to your catalogue (as opposed to a batch upload of a pipe delimited file)
<script>
_etmc.push(["updateItem", {
"item_type": "content",// or "product" for a product catalogue
"item": "{CONTENT_ID}",//Matches the "ContentID" for content or "SkuID" for products
"url": "{ABSOLUTE_URL}",
"available": "{AVAILABILITY}",// Accepts "Y" or "N"
"name": "{CONTENT_NAME}",
"image_link": "{IMAGE_ABSOLUTE_URL}",
"author": "{AUTHOR}",
"release_date": "{PUBLISHED DATE}",//Should be in YYYY-MM-DD format
"abstract": "{DESCRIPTION}",
}]);
</script>
If you're wondering where I got these keywords from, you can find them in your specific catalogue's implementation by going to Admin > Implementation when viewing the Web Recommendations dashboard.
When updating items in the content catalogue via a batch file, I'm using the list of attributes as my column headers, like this:
ContentID|Link|Availability|Title|ImageLink|Author|PublicationDate|Abstract
The batch file is pipe-delimited with each item on it's own line and has the "psv" file extension, much like your example. Though make sure if a field is empty, there is still a pipe for it, like how I've omitted the "author" from this:
9999|https://example.com/9999/|Y|Foo|https://example.com/media/9999.jpg||2019-11-25|Lorem ipsum dolor sit amet.
I actually have both the batch file updating the catalogue every 24 hours as well as the dynamic streaming updates.
When it comes to scenarios, here's some documentation on which attributes are needed to drive them.
Step 3: Recommend personalized content/products to the user
<script src="https://{MID}.recs.igodigital.com/a/v2/{MID}/product/recommend.js?item={CONTENT_ID}&email={USER_EMAIL_ADDRESS}"></script>
The "item" parameter in recommend.js or recommend.json refers to the "ContentID" (in a content catalogue) or "SkuID" (in a product catalogue), the same that gets passed as "item" in the "updateItem" push. The "email" parameter refers to the "email" attribute sent in the "setUserInfo" push. Keep in mind that the email address does not have to be a valid email address. If you want to track/personalize for anonymous users, you can generate a random unique ID or GUID and pass that along instead.
So putting it all together, the final snippet might look something like this:
<script src="//1234567890.collect.igodigital.com/collect.js"></script>
<script>
_etmc.push(["setOrgId", "1234567890"]);//Tracks to this MID
_etmc.push(["setUserInfo", { "email": "somebody@example.com" } ]);//Tracks to this user
_etmc.push(["trackPageView", { "item": "9999" }]);//Tracks page view of this product, matches the "SkuID" in the product catalogue
_etmc.push(["updateItem", {
"item_type": "product",
"item": "9999",//Matches "SkuID" in the product catalogue
"url": "https://example.com/products/9999/",
"available": "Y",// Accepts "Y" or "N"
"name": "Foo",
"image_link": "https://example.com/media/9999.jpg",
"author": "Bar",
"release_date": "2019-11-25",//Should be in YYYY-MM-DD format
"abstract": "Lorem ipsum dolor sit amet.",
}]);
</script>
<script src="https://1234567890.recs.igodigital.com/a/v2/1234567890/product/recommend.js?item=9999&email=somebody@example.com"></script>
Hope this helps!
You need to have the different parameters present in your Data Layer, and fetch it from there, within Google Tag Manager. These need to be created as variables, before they can be included in the Collect Code.
The specific implementation details will differ, based on the structure of the Data Layer, so it is difficult to provide an exact specification which you can apply directly.
If you believe your Collect Code is implemented correctly in Google Tag Manager, you can verify use it Chrome Developer Tools. After opening it, go to Network tab, and put igo in the search box. This will show you any calls being made to Collect Code/Marketing Cloud. See an example of this below. This is actually from an implementation where Collect Code is implemented using Google Tag Manager:
Best Answer
The catalogue data extensions (PI_CONTENT and PI_CONTENTATTRIBS) are not dependent on the behaviour tracking, as the data is originating from the uploaded catalogue.
When trying to enable data extension integration in Einstein Web Recommendations, you might see some notifications explaining why your data is not coming into your data extensions. In my case, when a brand new catalogue is uploaded (with no other activities done), I am seeing these issues:
Please have a look at especially number 3 item. Even though you don't need recommendations, you still need to configure at least one recommendation page, for the data to flow into the data extensions.
And also, as EazyE is telling you - setUserInfo also needs to be included in the code, for IGO_PROFILES to be populated with the value from setUserInfo, mapping it to the internal GUID of Einstein Recommendations.