My method for launching the Uber from within my app is working. It takes me to the "setPickup" page, it shows the start/pickup address but its not showing the dropoff/destination even though I am providing it.
Because my GPS is on, though, I don't know if the pickup is correct because its accepting my pickup parameters being passed to it or if its simply using my device's GPS.
Here is my call to the Uber app:
uber://?action=setPickup&client_id=MY_CLIENT_ID&pickup[latitude]=27.875107pickup[longitude]=-82.489036&dropoff[latitude]=27.9425974&dropoff[longitude]=-82.45189249999999&product_id=37a94557-682f-4562-ba62-2448f80d3ddd
I am able to select different types of uber via the passed parameters, UberX, UberSelect, etc...thus it all appears to be working except for the dropoff portion. The uber app shows the pickup, but just says "Destination" looking for an address to be entered.
NEW ISSUE:
Well, its almost working, I am testing this across New York city as NY has more Uber pickup services than any other city (I am aware of). When I get the products info I am using that to pass to the deeplink. As best as I can tell I am specifically calling for uberX yet its defaulting to uberPool.
I tested further...it isn't uberX specific. Its happening ONLY on the first uber app launch, no matter what product is selected - every time it defaults to uberPool. If I back out of uberApp back into my own, and click uberX or any other uber Service - it then takes me to the appropriate service screen.
If I close my app, restart and load uber services - the issue repeats. First time default to uberPool, then all subsequent ride selections open the uber app and take me to the correct service that was selected from within my app.
Whats up this...please don't tell me its an uber feature? :-(
0:
{capacity: 2, product_id: "929fcc19-8cb4-4007-a54f-3ab34473700f", price_details: null,…}
capacity:2
description:"Share the ride, share the cost"
display_name:"uberPOOL"
image:"http://d1a3f4spazzrp4.cloudfront.net/car-types/mono/mono-uberpool.png"
price_details:null
product_id:"929fcc19-8cb4-4007-a54f-3ab34473700f"
shared:true
short_description:"uberPOOL"
1:
{capacity: 4, product_id: "b8e5c464-5de2-4539-a35a-986d6e58f186",…}
capacity:4
description:"The low cost Uber"
display_name:"uberX"
image:"http://d1a3f4spazzrp4.cloudfront.net/car-types/mono/mono-uberx.png"
price_details:{service_fees: [], cost_per_minute: 0.35, distance_unit: "mile", minimum: 8, cost_per_distance: 1.75,…}
product_id:"b8e5c464-5de2-4539-a35a-986d6e58f186"
shared:false
short_description:"uberX"
And my deeplink call:
uber://?action=setPickup&client_id=MY_CLINET_ID&product_id=b8e5c464-5de2-4539-a35a-986d6e58f186&pickup[latitude]=40.759078&pickup[longitude]=-73.986201&pickup[formattted_address]=205%20W%2046th%20St,%20New%20York,%20NY%2010036,%20USA&pickup[nickname]=New%20York%20Marriott%20Marquis&dropoff[latitude]=40.7118011&dropoff[longitude]=-74.01311959999998&dropoff[formatted_address]=World%20Trade%20Center,%20New%20York,%20NY,%20USA&dropoff[nickname]=World%20Trade%20Center
In order to set a dropoff destination, you must also specify either a dropoff nickname or formatted address. The parameters are dropoff[nickname] and dropoff[formatted_address], respectively.
See this Github issue for some more context: https://github.com/uber/rides-ios-sdk/issues/1
Related
I am using Zoom’s “Create a Meeting” API to create a zoom session and get the session’s start_url (https://marketplace.zoom.us/docs/api-reference/zoom-api/methods#operation/meetingCreate).
When I use the start_url for the first time, I’m able to get into the zoom session fine. But say I decide to end the meeting and rejoin, I get the error:
you cannot start the meeting because it is hosted by another user zoom.
If I try rejoining using the join_url, I get the error this meeting ID is not valid.
This is an issue because a user should be able to start a meeting, leave, and then restart the meeting if desired. This is an even bigger issues for recurring meetings because all the meetings have the same start_url and the start_url is only working once.
I also tried getting the start_url dynamically each time by calling the “Get a Meeting” API (https://marketplace.zoom.us/docs/api-reference/zoom-api/methods#operation/meeting). Similar to above, I am able to successfully get the start_url and start the meeting the first time. The second time onwards, I get the error: { code: 3001, message: ‘Meeting does not exist: 82749987484.’ }
How do I successfully handle starting a zoom meeting, ending the meeting, and then restarting the meeting again?
I'm building a chatbot on Telegram with Watson Assistant and Node RED. I need to take a date and time from the user for booking an appointment, so I used a slot that require the insertion of the two information. Using the trial chatbot offered by Watson, I have no problem with slot; but using Node RED, I can't go beyond entering the date. Through the debug, I saw that after entering the date, then after running the first slot, this error is returned "msg.payload.content is empty". Moreover, going to see the body of the output message returned by the assistant, the msg.payload.output.generic field is empty. On the other hand, it should contain the response of the assistant who requests, after having entered the date, also to insert the time. It seems that the bot is stuck on entering the date, but in reality I don't think so, because in the trial chatbot, it works perfectly.
What could be the problem?
Neither the Assistant V1 nor the V2 set or look at msg.payload.content. On input they look at msg.payload and on exit they assign the response from Watson Assistant to msg.payload.
If you are getting a "msg.payload.content" is empty error, then that will be happening somewhere in your flow. Most likely at the end where you are trying to process the response. If msg.payload.content is empty then the assistant dialog is not returning any output. This is strange as it should be returning the prompt for the currently empty slot.
What does msg.payload look like?
Are you using the V1 or the V2 node, and which version of node-red-node-watson nodes are you using? You can tell, by going to the palette.
Both V1 and V2 nodes, however, have been tested with slots, and the response does end up on msg.payload.content. Current released version of node-red-node-watson is 0.9.0.
I am making an app that predicts clothes the user is wearing. It uses the Visual Recognition tool, too, and for Conversation and VR to be communicating, I attach the intent 'suggestClothing' or 'clothResult' to the cloth items it found. I use an entity for Conversation to recognize the cloth items and respond accordingly.
The flow should be as follows:
User: how do I look?
-classifies clothes-
App to conversation: clothSuggest blackJacket
Conversation to user: "You picked the black jacket! Try out the green shirt with this outfit and show me how you look."
-classifies clothes-
App to conversation: clothResult blackJacket greenShirt
Conversation to user: "You look great in that outfit!"
All nodes have multiple responses as all clothes are in pairs. Either the user is wearing one or the other, and Conversation will then always suggest it's match.
Conversation flow looks like this
I also attempted this. Here sq123 is suggestClothing (first intent) and cq123 is clothResult:
This works fine in 'Try it out', too, but in the app, it immediately exits the branch on 'clothResult item1 item2' and matches with other conditions in the app.
What's the best way to optimize my flow to make it work in the app?
A typical reason why it works in "Try it out" and not in the app is that the context object is not returned properly.
When the app invokes the message method of the Watson Assistant API, a context object is passed. The calls are stateless and everything needed for Watson Assistant to continue a dialog is included in the context object. Thus, when your app retrieves the results from the message API, it needs to save the context and pass it back to Watson Assistant the next time the message method is invoked again (for that session and user).
I have absolutelly the same question as dan here - Facebook conversion pixel with "server to server" option . There was written, that there was no way, but it was 2013, so I hope something changed.
So, is there any way to call facebook pixel events (e.g. CompleteRegistration) from server side now?
I can describe situation in more details. Imagine, that user visits our site, where fb pixel tracks 'PageView' of course. When user passes form and sends his phone number, we call 'Lead' event. But then we need to track one more event, when our manager successfully confirmes this user! Of course, it happens on other computer and so on, so there is no idea, how to "connect" to base user.
I've seen a lot of documentation departments like this, but I can't fully understand even if it's possible or not.
Logically, we need to generate specific id for user (or it can be phone number really), when 'Lead' event is called. Then, we should use this id to 'CompleteRegistration' for that user. But I can't understand, how to do it technically.
It would be gratefull, if somebody could explain it.
P.S. As I understand, it is fully available in API for mobile apps. Is it ok idea to use it for our situation, if there is no other solution?
Use Offline Conversions to record events that happen after a user has left your website. Logging these conversions, technically, is very easy. Setting everything up takes a little effort
tldr; check the code below
Follow setup steps in the FB docs (Setup steps 1-5) which are:
Setup facebook Business Manager account
Add a new app to Business Manager account
Create an Ad account, if you don't already have one
Create a System User for the ad account
After the setup, follow Upload Event Data steps on the same page, steps 1-3 to create an offline event set and associate it with your ad. These can be carried out in the Graph API Explorer by following the links in the examples. These can be done programmatically, but is out of the scope of making the event calls from the server for one campaign.
Once you have created the event set, then you can upload your CompleteRegistration events!
You will need to make a multipart form data request to FB, the data key will be an array of your conversion events. As #Cbroe mentioned, you must hash your match keys (the data you have available about your user to match them with a FB user) before sending to FB. The more match keys you are able to provide, the better chance at matching your user. So if you can get their email and phone at the same time, you're much more likely to match your user.
Here's an example of the call to FB using node.js:
var request = require('request')
// The access token you generated for your system user
var access_token = 'your_access_token'
// The ID of the conversion set you created
var conversionId = 'your_conversion_set_id'
var options = {
url: 'https://graph.facebook.com/v2.12/' + conversionId + '/events',
formData: {
access_token: access_token,
upload_tag: 'registrations', //optional
data: [{
match_keys: {
"phone": ["<HASH>", "<HASH>"]
},
currency: "USD",
event_name: "CompleteRegistration",
event_time: 1456870902,
custom_data: { // optional
event_source: "manager approved"
},
}]
}
}
request(options, function(err, result) {
// error handle and check for success
})
Offline Conversion Docs
Facebook has now a Server-Side API: https://developers.facebook.com/docs/marketing-api/server-side-api/get-started
Implementing this is similar to implementing the offline events outlined in the accepted answer.
Keep in mind that it will always be cumbersome to track and connect events from the browser and from your server. You need to share a unique user id between the browser and server, so that Facebook (or any other analytics provider) will know that the event belongs to the same user.
Tools like mixpanel.com and amplitude.com may be more tailored to your needs, but will get very expensive once you move out of the free tier (100+ EUR at mixpanel, 1000+ EUR at Amplitude, monthly). Those tools are tailored towards company success, whereas Facebook is tailored towards selling and measuring Facebook ads.
I'm trying to implement the new analytics for a Facebook game (using HTML/Javascript and Flash on Canvas, so there is no mobile version), but it seems that the documentation is incomplete. It says that there are 14 predefined events:
"Events are one of 14 predefined events such as 'added to cart' in a
commerce app or 'level achieved' in a game"
Source: https://developers.facebook.com/docs/reference/javascript/FB.AppEvents.LogEvent
"The fourteen pre-defined events are: App Launch, Complete
Registration, Content View, Search, Rating, Tutorial Completed, Add to
Cart, Add to Wishlist, Initiated Checkout, Add Payment Info, Purchase,
Level Achieved, Achievement Unlocked, Spent Credits."
Source: https://developers.facebook.com/docs/app-events/faq
However, on the reference page where all the events should be listed, the list is only 12 items long, and there is no "App launch" event:
https://developers.facebook.com/docs/reference/javascript/FB.AppEvents.LogEvent#events
Now, there are some sample event lists for some games, but they are very basic and they don't include the actual code: https://developers.facebook.com/docs/app-events/best-practices#casual
which recommends to use these events:
App Install
App Launch
Completed Registration
Completed Tutorial
Level Achieved
Achievement Unlocked
(...)
Here is what I have so far:
FB.AppEvents.activateApp()
But is this event the equivalent of App Install or App Launch?
Also, should I send this before the user accepts to share his basic info or after? I'm having so many questions because it's not clear what activateApp() does...
Here is some code for sending some other events that could be useful:
FB.AppEvents.logEvent(FB.AppEvents.EventNames.COMPLETED_REGISTRATION);
FB.AppEvents.logEvent(FB.AppEvents.EventNames.COMPLETED_TUTORIAL);
var params = {};
params[FB.AppEvents.ParameterNames.LEVEL] = '12'; //player level
FB.AppEvents.logEvent(
FB.AppEvents.EventNames.ACHIEVED_LEVEL,
null, // numeric value for this event - in this case, none
params
);
I still have more questions: how can I properly send the game version number (maybe with activateApp?) so I can create segments and cohorts later? Some example codes would be really appreciated!
Thanks in advance!
FB.AppEvents.activateApp() provides install and launch event functionality, which is why those two events are not enumerated as options in https://developers.facebook.com/docs/reference/javascript/FB.AppEvents.LogEvent#events. Activate app doesn't take a parameter. You might want to look at using a custom event to satisfy your use case.