You can pass any data layer values in to Adobe Target via custom parameters (name/value pairs) as part of the implementation - either via the code or Tag Management (like DTM)
Check out this help page: Passing Parameters to a Global mbox
Possible problem you may have with DTM.
You can set it up in the DTM interface so that it passes parameters from the datalayer through DTM to the mbox. However, there can be a problem that causes the mbox parameter to be empty. The problem with most implementations, is that Target loads at the top of the page before the datalayer loads. Which means that when Target loads, the datalayer isn't yet available. So even though you did it correctly in DTM, you will get an empty value. I have written more on that here. http://www.modus73.com/method/problem-mboxes-datalayers.
So it can be done through DTM and a datalayer, but you must make sure that your datalayer loads before Target.
The best way to do it is as Jason mentioned and linked to above. You can pass parameters to Target through a function called targetPageParams. This is setup as part of your implementation and is done server side, so its not actually done through a datalayer.
Thanks LJ and Jason. That's very very helpful.
I also wanted to know if I can import some user level / account level data in target to create a custom segment. To elaborate the scenario,
I pass the user account numbers to mbox and some of these user account tried to make payment on the site but failed due to some issues with their accounts. When these customers comes back to the site next time, I would like to give them some personalized message regarding their last failed payment. The messages would be different to these customers depending on their issue related to their account. So I would need to create segment in Target using some specific account numbers gathered from a SQL database. So is it possible to import some user specific data to target to create segment in target and then show personalised message when this segment condition is met? Hope this makes sense but pls let me know if any further clarification necessary. Appreciate the help.
Personally, I don't' think that I would send something as specific as an account number to target. The reason being, you might have millions of users and account numbers and this could be very cumbersome to manage. And Target won't be good at managing something so specific. You could create an audience and within the audience list each account number. Each line/return is considered an or statement, but again this isn't a good practice and is difficult to manage with something that could have lots of rows.
Target doesn't have a way to hit a database and look up an account number or import data.
Instead, I would create groups that you want to target, and then send the group as an mbox parameter like we mentioned above, and not something as specific as the account number. So when the user attempts to make a payment and fails, on the fail page, you would add an mbox parameter and make the value a group. Something like payment=expired credit card. Or payment=insufficient funds. Then you can set up an audience to target all of the people to fit that group.
One other thing. I try not to expose personal or possibly embarrassing info directly in code. So in this case, instead of payment=insufficient funds, I would make up internal codes that my team understood internally. Something like payment=145.
You're Welcome. Feel free to reach out with any other questions that you may have.