Mixpanel distinct_id using Ruby and Javascript Library - ruby-on-rails-3

I don't understand how to properly use distinct_id. I am trying to create a Mixpanel funnel using Rails. Currently I am doing this w/o using distinct_id and thus mixpanel trends are pretty accurate but funnel which depend upon unique user count doesn't appear to be working. How should I use distinct_id property to solve this problem?
I'm using BOTH the Javascript library and the Ruby library.
The funnels steps are:
1.) User invited
2.) Invited user receives invitation email and clicks invitation link
3.) Page loaded
4.) Open signup module
5.) Creates account

It would probably be easiest to send data only from Ruby (by the way, which Ruby library are you using?) since the link and account creation must be sent server-side.
You will have to choose a distinct_id that will identify a user through this entire process. The easiest way is to just use the invitee's e-mail address. This has the additional benefit of being able to track other events and "people" data with that e-mail and associate it with the right user.
The only tricky part is step 2. You will need to generate a link that looks like
http://api.mixpanel.com/track/?data=...&ip=1&redirect=http://www.your-site.com/invitation
to put inside the email as the invitation link.
See the docs for more info about the redirect parameter.

Related

How to manage in RASA an unique user_id for many channels in parallel?

I have to design an e-learning tutorbot that has multiple possible channels living in parallel:
A live chat (to support learner with FAQ when browsing the e-learning application website)
A IM chat as Telegram (for asyncronous notifications)
An email (for anything else)
...
Take a part the connectors gateway communication logics.
My problem/question is mainly about how to manage user identification.
I want that a user is identified with an unique identifier (call it conversation_id) regardless of channel.
In the mentioned scenario user has one different ID for each channel:
An account_id on the website (e.g. solyarisoftware)
A chat_id on Telegram (e.g. 1234567890)
An email_address (e.g. giorgio.robino#blabla.com)
So, how to let RASA chatbot accept requests coming from the same user (but from different channels)? In other words, how can I map multiple channel IDs into a RASA unique ID, say the conversation_id ?
At the end of the day I need to generate a lookup table that map a UUID with all channel ids. Right?
But is not clear to me what's a good (simple) user experience. At first glance seems to me that that I need a sort of login/registration flow: each time user submit a request on channel X, only for the first time, the user must identify himself somewhere (with his email/account_id?). So by example trough Telegram, when the Telegram connector server receive a /start command, the bot must ask the user email(or account_id), to be able to associate 1-to-1 the TG chat_id with that email. Not perfect in terms of security, I admit.
Any experience/idea/suggestion?
Thanks/giorgio
I don't have an hands-on experience on this but it is something I have been thinking myself for a while.
Indeed the 'merge' of the different accounts (across channels) is something that we need to maintain ourselves, making sure each channel user ID is eventually mapped to a universal user ID (lookup table makes sense to me).
Since you have a website, an email address and multiple channels I would say the assumption is that users first registered on the web site. Each user has a unique email address and obtains an account secured by username/password, as well as a unique secret token.
When chatting on browser (ie Rasa WebChat) you can initialise the plugin with custom parameters (ie userId=1 or token=X), in this case the chat session is assigned to the given user id.
When using Telegram (or other messenger application) I would (at the very first access) ask the user if he/she has already registered. If yes then I would ask the token: this can be used to perform the map and link this Telegram user to the universal user Id. Same approach for other channels.
Depending on your needs you might need to deal with anonymous access (users don't provide the token) or maybe you want to provide a different token for each channel (more secure, but requires more work and an easy way to explain this to users).
Finally something to look at (I haven't tried myself) is the possibility to provide in the web site the option to open Telegram (or others) passing an extra parameter, which would allow you to perform the mapping. I don't know if this is possible, but it would simplify this process for your end users. Or the other way around: the users in Telegram could be provided with a link which opens the website, where they can login and be recognised.

Log in with a specific username with Google API

I am developing a web app for a group, and I want to be able to let anyone in the group create an event and add it to the group's calendar through the app. I was able to get the basic functionality working using Google Calendar API v3 for Javascript -- you could fill out a form with the event's start/end times, title, information, etc, and it could insert that event into the calendar.
But the problem is with authentication. If a user is logged in to a Google account that is not given permission to create events on the calendar, they are unable to add the event (Javascript writes "Forbidden" to the console). If I log out of all Google accounts and then sign in with the account that owns the calendar, the event is created with no problems (that makes sense).
Adding every single person in the group to the edit-permissions on the calendar seems like too much of a "brute force" method.
Is there a way to always authenticate the Google account that owns the calendar? Or, better yet, is there a way just to force authentication in general, even if someone is already logged in to Google / authorized to the app? Some people in the group know the calendar login/password, so if I could always bring up a Google login screen, they could just enter the calendar account information and then add the event from there. Again, I'm using Javascript (not much documentation on this...).
Thanks!
Have a look at Service Accounts. That way the calendar is owned by the application, and so the application will always have permission to update it.
If you want to avoid authentication problem from other opened session in user browser, you have to authenticate on the calendar, using server side library.
check this link:
https://developers.google.com/google-apps/calendar/auth
it bounces you from one article to other, but at the end you should get all information.

API for "People" contact data

I'm working on a Win8 metro signup flow and would like to be able to seamlessly pull, using the user-provided phone #, a photo and display name from the built-in "People" app. I'm having trouble finding documentation/code outside of ContactPicker (which isn't what I need).
Couple questions:
Is there an API to pull contact data that would be present in the "People" app?
If so, is there a way to configure capabilities to avoid interrupting the user with a modal "Ok for app xyz to access your address book"?
Thanks.
Confirmed that there is no API to pull contacts programmatically.
You can't pull contacts without permission, it's a security feature. You CAN interrogate the contact data users pick via the Contact Picker though.
You therefore have to ask the user to pick contacts relevant to your task, call the single / multiple contact picker then once picked, you can interrogate the contacts as much as you want. They have phone numbers, emails, locations all the data you might want hanging off those.
As far as I can tell, there's no way to maintain a persistent link to them though, so store that data while you can.

Customised email alerts through MailChimp API

I am building a site that runs an automated process every 30 minutes to match up new flights with their respective user. Once this process is completed I want to email the flight details out to the respective user. However the flight info will be different for every single user with their being 0-300+ potential emails.
Is this something that the MailChimp API will allow or do? I found this page http://apidocs.mailchimp.com/api/how-to/transactional-campaigns.php which I am not sure if this effects me. Is the STS more suited to this? http://apidocs.mailchimp.com/sts/1.0/
Thanks
Alex
You should use Mandrill (which replace the STS offer). The cool thing with mandrill is that you can link it with you mailchimp account (It's a different product but it's powered by mailchimp).
Add your templates in mailchimp as usual, and hit the button "send to mandrill". Then just use the mandrill api :
http://mandrillapp.com/api/docs/messages.html#method=send-template
You could also use the feedblock option to display custom flight for each user. You just have to provide dynamic rss feed :
http://blog.mailchimp.com/new-feed-merge-tag-options/

Using Input Box to Post onto Twitter

Is it possible to post onto Twitter using the sharing URL, for example:
http://twitter.com/home?status=My Status Update
But, instead of creating a link for a user to click, I want to have an input box that will post the content of the input box as the status. So, whatever the user types into the input box would replace My Status Update.
I'm thinking there should be a way to use the form to post onto this URL hxxp://twitter.com/home?status=XXXX where XXXX is the input value. Is this possible?
UPDATE: I realize I described this wrong - it doesn't have to ACTUALLY POST the status, it can take them to Twitter, ask them to logged in (if not, skip), and then put the status update inside the Tweet Box and require the user to press Tweet to send it
Thanks!
No, Twitter require the status to be sent from it's interface.
You can provide the user an option to send status from your site only with twitter application and only after the user authorized your application to sends twits in his account.
Sadly, the solution to this may be more complicated then you think.
Twitter recently switched to full OAuth authentication to interact with their api and to post status updates etc.
In short, to do what you suggest above will require your visitors to log in.
To simplify this, on my websites I use the Official Twitter Tweet Button because I feel that my visitors will trust it the most and will enter in their username/pass without worry.
The Official Twitter Tweet Button page has a builder where you can select various options to change the look and content of the tweet itself.
Be sure to checkout the full documentation for the advanced usage examples and the full reference of properties that can be used with the javascript tweet button
p.s.
On my site I registered for an app so I could include the following js file:
<script src="http://platform.twitter.com/anywhere.js?id=MY-APP-ID&v=1"></script>
And my links look something like this:
Tweet