A personalized email algorithm - email

I've been delving into a lot of recommendation algorithms lately (collaborative filtering mostly) and I've found quite a lot of answers on recommending an item based on either a specific user or item (which is part of what I want to do, so that works out). I also want to sent out somewhat-personalized emails, meaning given an email with a certain set of products, pick a set of users to send out the email to.
What would be the best way/algorithm to go about doing this?

For this, you simply turn around the usual collaborative filtering process: instead of recommending items to users, you recommend users to items. You are therefore guessing which users will most like a given item.
Just feed in product IDs as "user IDs", and your real user IDs as "item IDs" into a collaborative filtering system like Apache Mahout. It will recommend users ("items") that would be best for any given email ("user").
Of course you still need input data. Perhaps you have collected a past history of which users have rated or bought or viewed products. That is still your input.

Related

Facebook APIs using checkins as an entry to raffle

I've been exploring ways that it might be possible to promote the business of a friend of mine. One of these ways is by encouraging users to check in to his business, the incentive for this being that they go into the draw to win some kind of prize.
I've been trying to find if the code for this already exists but I might be looking in the wrong places. If it doesn't what would be the best way to do it using the graph APIs.
Thanks.
You can use Facebook app to check-in to your page/business.
All page check-ins can be fetched using following request by your code
https://graph.facebook.com/PAGE_ID/checkins?access_token=PAGE_ACCESS_TOKEN
If you want to get only specific time period check-ins use since and until params in query.
You have to parse the json response and store in an array and randomly select the winner.
you can contact the winner using their facebook id and send them a message.
You will have to write the code yourself, but it would essentially work like this:
Get the user to allow access to the "Raffle" application and get their email address and permissions to look at their check-ins. Email is required to contact the winner.
Use a scheduled script (cronjob) to periodically check if the user has checked-in anywhere (in particular, the business you want to promote).
Award a raffle ticket for each unique check-in within a 24 hour period.
Hold a draw between all the users who checked in on that day or week and award the prize to someone randomly.
Pretty simple flow, but complex code.

How can we send a follow up email for Wishlist?

How can we send a email to the user reminding them that some products are available in their wishlist?
I have seen this functionality on many sites and I wish someone would have Implemented it by now.
There should be a way to Do this program way.
Also There is no way available in magento to see wishlist report,like which item is most available in wishlist or top 5 wishlist products.Is there a way to Implement Both the things
Thanks in advance
Unfortunately there is no out of the box solution for both of your issues.
There does exist a $14.99 module that will give you more insight on wishlisted items and the relative customers: http://www.magentocommerce.com/magento-connect/admin-global-customer-wishlist-viewer.html
As for sending emails to those customers, this type of functionality exists in Magento Enterprise Edition. You have the ability to automatically send emails to customers with wishlisted items - unless you are willing to shell out $15,000 for the enterprise version, you are a bit out of luck here.
You can either utilize a email blast service like MailChimp which integrates directly into magento to send focused email blasts OR do some custom development work.
You can do this with MageMail. (Full disclosure: I'm the founder of MageMail).
In case you're looking to build this custom, you basically just want to pull in the wishlist_item table and join on the customer table to get the customer associated with the wishlist item.
One gotcha to keep in mind is that all of the wishlist items are included in the same wishlist, regardless of when they were added (they're not like quotes in that regard). So if you're building this custom, you'll want to make sure to build it in such a way that it will follow-up based on the date the wishlist item was added and not the date of the wishlist record itself.
I think that Enterprise has support for multiple wishlists but I haven't seen it in use much in the wild.
I think you can do exactly what you need the following way:
1. Segment your customers according to their wishlist records with Market Segmentation Suite extension. You can put users with particular wishlist item into a group or form a customer group of all users with non-empty wishlists. You can then export those segmented lists for future use.
2. Follow up your customers according to segmented lists you made with emails tailored to specific customer groups with Follow Up Email.
As for wishlist reports you can track which products have been added to customers’ wishlists, when the product has been added, how many days this item is in the wishlist with Advanced reports unit named Users Wishlists by aheadWorks.
So, these are 3 different extensions, but they definitely cope with the task you describe.

Analysis class diagram - associating classes

New user so I can't post images. Image link provided below:
http://i.stack.imgur.com/EXf0G.jpg
This is for a walk-in booking system not an online reservation system.
Normal Booking scenario:
User/Member gives information to receptionist. Users can book up to a month in-advance.
Receptionist searches user/member info. Receptionist must be logged in to search user/member or make a booking.
if details are found the booking continues as normal, if not user details are added to the users file.
Booking time/date/type is then checked for availability. If available then a booking is made.
Extra:
There are two types of staff account 'normal-user' (Receptionist) and 'admin' (Manager).
Manager can reset staff account passwords and create new staff accounts.
Manager can edit session details on the timetable (time, date, type) etc. Do i need a timetable class here??
In order to answer that, we would need a much more developed specification.
I would suggest you develop with what you have, meeting only the minimum requirements for each iteration. Then, if you find your users need a timetable of some sort, then add it at that point.
In general, don't add more complexity than you need until you know you need it. The more moving parts a system has, the harder it is to maintain and use and to put together in the first place. Get the application up and functioning and in the users' hands. Until you get real feedback from them, you are just taking stabs in the dark. Let the users' tell you what they need and want.

Keeping track of whether an email has been opened

I'm using rails 2 for this app, with ActionMailer, but this is a general question about emails.
When we send out emails, i save a record corresponding to the email in a database table. I'd like to keep track of whether people have read the emails, and am wondering the best way to do it. On initial googling, it seems like i've stumbled into an ongoing battle between spammers and email clients!
My first thought was to use the "read receipt" header, but i know that this isn't supported by a lot of clients and is therefore unreliable. After that, i read of the tactic of including an image in the mail, and of detecting that image being loaded. I was thinking that i could put a parameter with the email record's id in the image url, so that when i get a request for that image i can see if it has a (for example) email_id param and if so, mark the corresponding email as having been read.
But, then i remembered that many clients are wise to this tactic and specifically ask the viewer of the mail if they want to display images. Obviously they might say no.
Am i right in thinking that i can't pull in other resources, such as stylesheets, in my mail? Because if i can pull them in, i could do that same trick but with the stylesheet rather than an image.
Grateful for any advice, max
Externally-hosted stylesheets are generally treated the same way as images. The client will not download them without prompting the user, if that works at all with HTML-formatted emails.
One thing to consider- you're looking to determine whether the email was read, not necessarily just received, right? Format your email so that it can't be easily read without viewing the images, and include a "view in browser" link at the top. Track image and page-format views and I think you'll have a fairly reliable way to measure actual reads.
Bit late on this, but we've got a similar problem.
We're tracking the links to our site that are included within the email. We're doing this by, like you, having a DB record per email sent out. We've generated a unique hash key per email and are including that as a parameter on all the links included in the email.
We simply then have a before_filter that looks for the parameter and records the fact against the correct email record by using the unique hash to identify the correct one.
We use a unique hash key (rather than the DB's primary key) just so it is a little bit more secure / reliable.
Obviously this method only helps us track the clicks our emails have generated (and not if they've been read) but it is still useful as we can see which of ours users has clicked on which links.
We are having major problems with this as well.
We have task wek portal, where users create tasks (like paint my house) and then we invite painters to give the task creator an price on painting his house.
For that we had a very advanced email system, that sends an invitation and if they accept the invitation we send them the contact info of the task creator.
We need to be able to track if the email was opened, and then once it's opened, we know that the company got the contact info, and we can now send another email to the task creator, telling them that they can expect to be contacted by that company.
The problem is that tracking if the email was opened is not reliable at all. There are different systems for this like msgtag (which does not support a wide range of mail clients like yahoo and other major clients) and our email API client (elastic email) even offer some API call back functions to tell us if each email was opened or bounced or whatever. But again, it's not reliable. To track if it's open, elastic email just includes a 1x1 px image and track if it's opened. So if people don't click "show images in this email" it's not tracked as opened.
So basically we are down to two options.
Have vital portions of the content printed on images, that they have to view to get the info we want to track if they got (in this case contact info)
Just have a link in the email "click here to get the contact info" and then track if that is clicked.
So in conclusion, the "track if opened" is totally useless and unreliable, unless you can fully control which email clients your recipients are using and how they are using them (like if they are all your employees or something).

How do I show information to users belonging to different groups (web) in modx

I have created a website using modx evolution v1.0.2.
The website that I have developed has 12 different types of users (categorized in groups). Each user will be shown a different price depending on the group to which he belongs.
Till now I have been able to fetch the group name of current logged in user (created a snippet for that), but how can I achieve the above mentioned functionality so that each user should be able to see only the price that I have coded according to his group.
For example:
If a user is associated with the 'ocassional' group then he should be shown the price as , say, 50 bucks
and if a user is associated with the 'regular' group then he should be shown the price as, say, 40 bucks
I can easily do this by coding a single snippet for every product's variant, but there are a lot of variants (more than 100 and growing).
I have created a resource(page) for every product and it's variant. Every variant has a price. It is this price that I want to be shown according to the logged in user group membership.
I hope I am able to explain my query clearly.
Please help me do this functionality.
Thanks
I'm not really convinced that modx (as much as i love it) is a great solution for e-commerce sites.
However, the best solution might be to use the database to store the prices of variants per user group and retrieve them yourself using a snippet.