Google Analytics funnel ignore steps - magento

I have following problem with tracking of Magento purchase on Google Analytics (custom theme, different from default checkout process).
My goal settings are following: http://db.tt/W30D0CnL, where step 3 equals to /checkout/onepage/opc-review-placeOrderClicked
As you can see from funnel visualization ( http://db.tt/moluI29d ) after step 2 (Checkout Start) there are a lot of exits toward /checkout/onepage/opc-review-placeOrderClicked which is setted as step 3, but step 3 reporting always 0.
Is there something that I'm missing here?

I've found the problem. Apparently second point (/checkout/onepage) was fired even on the third step.
When I changed it to regex match (/checkout/onepage$) everything started to work.

Related

TWS-API and ib_insync: Order Status is not updated properly

I'm trying to place an order using the TWS-API and the python package ib_insync. However, I recognize that the order status is not updated by TWS automatically. Please consider the following snippet:
stock = Stock('BMW', 'SMART', 'EUR')
ib.qualifyContracts(stock)
order = MarketOrder("BUY", 10)
trade = ib.placeOrder(stock, order)
A look into the order status of the trade just made (i.e. with trade.log) reveals the order to remain in the submitted state. For that, see the following screenshot:
Highlighted with the red box, you see the log-command printing the order state "submitted". At that point in time, though, the order got already filled when looking into the TWS.
Interestingly, if I now run ib.sleep() (highlighted in green) and look into the order state afterwards, I can see that the order's state has changed to filled (see blue box). This behavior is what I observed several times. Only after typing ib.sleep() the order state seems to be updated in accordance to what is happening in the TWS.
Shouldn't the state of the order automatically be updated by the TWS-API, or do I really need to update the order myself by quering the state from the TWS API?
Any kind of guidance is greatly appreciated. Many thanks in advance!

Dialogflow CX - Transition to page using sentiment analysis score

Does anyone know if it’s possible to transition to a different page solely off of a sentiment analysis score ($request.sentiment.score) of the end-user’s response?
I basically want the agent to ask the end-user a question and then have the agent route the user to a page strictly using the sentiment analysis score of the user’s response and nothing more
What I tried so far:
Through the Dialogflow-CX simulator, I am trying to transition to a different page using the conditional statement $request.sentiment.score <= 0 in the route, however the agent does not transition to the next page and cannot match my input to the strictly conditional route (it just jumps to the sys.no-match-default event handler)
Here is a screenshot of the route I have set up:
As you can see, the route has no intents other than a conditional trigger that has $request.sentiment.score <= 0 as the parameter.
I simply want the agent to direct the end-user to the next page whenever it detects a message with a negative sentiment score. The next screenshot shows that the agent detects that the sentiment score is negative, however the agent does not transition to the next page.
Does anyone know what I seem to be doing wrong?
In your project, it seems you have not selected intent that's why unable to go to the next page.You can follow the below steps in Dialogflow CX Console for your requirement :
1 If you need to go to the bad_service page, then we need to give some negative words as you can see in the image below.
2 In this, if $request.sentiment.score is less than zero then only the condition will satisfy.
For example , if we give some negative words like bad service then $request.sentiment.score score is less than zero then will go to bad_service page.
3 Now select the page.
Example of working:
1 Positive Query Score:
Here the Query Score is 0.8 greater than zero,so the condition is not satisfied.
2 Negative Query Score:
Here the Query Score is -0.9 so we reached the bad_services page.
EDIT #1
You can transition to the page using the sentiment analysis score:
Step1: Add new sys.no-match-default event handler by clicking the + symbol near to Event handlers:
Step2: Select sys.no-match-default from the drop down button under Event and apply the condition to trigger in your case ( $request.sentiment.score <= 0).
Step3: Select the page you want , in your case the Negative Sentiment page.
Step 4: Add another sys.no-match-default event handler and select that.
Step 5: Apply the condition ( $request.sentiment.score >= 0) to trigger the positive not trained phrases .
Example:
Here I added two no-match-default event handlers,if the world is negative then we will come to a negative sentiment page from any page and the same for positive words.
Negative sentiment score:
It is not possible to transition to a different page using Google DialogFlow's built-in sentiment analysis functionality. The closest you can get to is using pre-trained statements

Magento CE 1.7.0.2 - Editing order not canceling original

I'm not sure exactly what change would of caused the issue where if I edit a processing order and place new one it does not cancel the original one. Looked on Google and StackOverflow for existing solution but came up empty really.
Steps to Reproduce (Scenario):
You need to edit an order because customer forgot to add an item to it so I click "Edit" on that order which is in "Processing" status
Place the order
Looking at the Sales->orders list I can see that the original order is in Processing status still IN ERROR. The new order has same order# with "-1" appended at end which is good
So, I was wondering if anyone else has experienced such an issue. It used to cancel the original order after you placed it. The warning JS message that pops up after clicking "Edit" says it would place new order and mark current as Canceled so something is wrong. Nothing seems out of the ordinary in my config.
EDIT: Guess nobody has experienced an issue such as this. I can't think of anything that would cause this. Since this post I've upgraded Magento to CE 1.7.0.2.
Thanks,
George
EDIT: Screenshot attached:
You can't cancel order that is already processing ( invoiced ) / Shipped / Complete !!
You only can cancel order in NEW State
In your case you had an invoiced order and you want to do re-order :-
Press Edit and go ahead with the new Orders ( The order will be suffixed by -1/-2 because this means this order linked/related to the previous order )
Go the original order and Refund it complete ( it will be in closed state / status )
You need to understand the work flow of the order and the operations you can take on the order in EACH STATE

Scraping Real Time Visitors from Google Analytics

I have a lot of sites and want to build a dashboard showing the number of real time visitors on each of them on a single page. (would anyone else want this?) Right now the only way to view this information is to open a new tab for each site.
Google doesn't have a real-time API, so I'm wondering if it is possible to scrape this data. Eduardo Cereto found out that Google transfers the real-time data over the realtime/bind network request. Anyone more savvy have an idea of how I should start? Here's what I'm thinking:
Figure out how to authenticate programmatically
Inspect all of the realtime/bind requests to see how they change. Does each request have a unique key? Where does that come from? Below is my breakdown of the request:
https://www.google.com/analytics/realtime/bind?VER=8
&key= [What is this? Where does it come from? 21 character lowercase alphanumeric, stays the same each request]
&ds= [What is this? Where does it come from? 21 character lowercase alphanumeric, stays the same each request]
&pageId=rt-standard%2Frt-overview
&q=t%3A0%7C%3A1%3A0%3A%2Ct%3A11%7C%3A1%3A5%3A%2Cot%3A0%3A0%3A4%2Cot%3A0%3A0%3A3%2Ct%3A7%7C%3A1%3A10%3A6%3D%3DREFERRAL%3B%2Ct%3A10%7C%3A1%3A10%3A%2Ct%3A18%7C%3A1%3A10%3A%2Ct%3A4%7C5%7C2%7C%3A1%3A10%3A2!%3Dzz%3B%2C&f
The q variable URI decodes to this (what the?):
t:0|:1:0:,t:11|:1:5:,ot:0:0:4,ot:0:0:3,t:7|:1:10:6==REFERRAL;,t:10|:1:10:,t:18|:1:10:,t:4|5|2|:1:10:2!=zz;,&f
&RID=rpc
&SID= [What is this? Where does it come from? 16 character uppercase alphanumeric, stays the same each request]
&CI=0
&AID= [What is this? Where does it come from? integer, starts at 1, increments weirdly to 150 and then 298]
&TYPE=xmlhttp
&zx= [What is this? Where does it come from? 12 character lowercase alphanumeric, changes each request]
&t=1
Inspect all of the realtime/bind responses to see how they change. How does the data come in? It looks like some altered JSON. How many times do I need to connect to get the data? Where is the active visitors on site number in there? Here is a dump of sample data:
19
[[151,["noop"]
]
]
388
[[152,["rt",[{"ot:0:0:4":{"timeUnit":"MINUTES","overTimeData":[{"values":[49,53,52,40,42,55,49,41,51,52,47,42,62,82,76,71,81,66,81,86,71,66,65,65,55,51,53,73,71,81],"name":"Total"}]},"ot:0:0:3":{"timeUnit":"SECONDS","overTimeData":[{"values":[0,1,1,1,1,0,1,0,1,1,1,0,2,0,2,2,1,0,0,0,0,0,2,1,1,2,1,2,0,5,1,0,2,1,1,1,2,0,2,1,0,5,1,1,2,0,0,0,0,0,0,0,0,0,1,1,0,3,2,0],"name":"Total"}]}}]]]
]
388
[[153,["rt",[{"ot:0:0:4":{"timeUnit":"MINUTES","overTimeData":[{"values":[52,53,52,40,42,55,49,41,51,52,47,42,62,82,76,71,81,66,81,86,71,66,65,65,55,51,53,73,71,81],"name":"Total"}]},"ot:0:0:3":{"timeUnit":"SECONDS","overTimeData":[{"values":[2,1,1,1,1,1,0,1,0,1,1,1,0,2,0,2,2,1,0,0,0,0,0,2,1,1,2,1,2,0,5,1,0,2,1,1,1,2,0,2,1,0,5,1,1,2,0,0,0,0,0,0,0,0,0,1,1,0,3,2],"name":"Total"}]}}]]]
]
388
[[154,["rt",[{"ot:0:0:4":{"timeUnit":"MINUTES","overTimeData":[{"values":[53,53,52,40,42,55,49,41,51,52,47,42,62,82,76,71,81,66,81,86,71,66,65,65,55,51,53,73,71,81],"name":"Total"}]},"ot:0:0:3":{"timeUnit":"SECONDS","overTimeData":[{"values":[0,3,1,1,1,1,1,0,1,0,1,1,1,0,2,0,2,2,1,0,0,0,0,0,2,1,1,2,1,2,0,5,1,0,2,1,1,1,2,0,2,1,0,5,1,1,2,0,0,0,0,0,0,0,0,0,1,1,0,3],"name":"Total"}]}}]]]
]
Let me know if you can help with any of the items above!
To get the same, Google has launched new Real Time API. With this API you can easily retrieve real time online visitors as well as several Google Analytics with following dimensions and metrics. https://developers.google.com/analytics/devguides/reporting/realtime/dimsmets/
This is quite similar to Google Analytics API. To start development on this,
https://developers.google.com/analytics/devguides/reporting/realtime/v3/devguide
With Google Chrome I can see the data on the Network Panel.
The request endpoint is https://www.google.com/analytics/realtime/bind
Seems like the connection stays open for 2.5 minutes, and during this time it just keeps getting more and more data.
After about 2.5 minutes the connection is closed and a new one is open.
On the Network panel you can only see the data for the connections that are terminated. So leave it open for 5 minutes or so and you can start to see the data.
I hope that can give you a place to start.
Having google in the loop seems pretty redundant. Suggest you use a common element delivered on demand from the dashboard server and include this item by absolute URL on all pages to be monitored for a given site. The script outputting the item can read the IP of the browser asking and these can all be logged into a database and filtered for uniqueness giving a real time head count.
<?php
$user_ip = $_SERVER["REMOTE_ADDR"];
/// Some MySQL to insert $user_ip to the database table for website XXX goes here
$file = 'tracking_image.gif';
$type = 'image/gif';
header('Content-Type:'.$type);
header('Content-Length: ' . filesize($file));
readfile($file);
?>
Ammendum:
A database can also add a timestamp to every row of data it stores. This can be used to further filter results and provide the number of visitors in the last hour or minute.
Client side Javascript with AJAX for fine tuning or overkill
The onblur and onfocus javascript commands can be used to tell if the the page is visible, pass the data back to the dashboard server via Ajax. http://www.thefutureoftheweb.com/demo/2007-05-16-detect-browser-window-focus/
When a visitor closes a page this can also be detected by the javascript onunload function in the body tag and Ajax can be used to send data back to the server one last time before the browser finally closes the page.
As you may also wish to collect some information about the visitor like Google analytics does this page https://panopticlick.eff.org/ has a lot of javascript that can be examined and adapted.
I needed/wanted realtime data for personal use so I reverse-engineered their system a little bit.
Instead of binding to /bind I get data from /getData (no pun intended).
At /getData the minimum request is apparently: https://www.google.com/analytics/realtime/realtime/getData?pageId&key={{propertyID}}&q=t:0|:1
Here's a short explanation of the possible query parameters and syntax, please remember that these are all guesses and I don't know all of them:
Query Syntax: pageId&key=propertyID&q=dataType:dimensions|:page|:limit:filters
Values:
pageID: Required but seems to only be used for internal analytics.
propertyID: a{{accountID}}w{{webPropertyID}}p{{profileID}}, as specified at the Documentation link below. You can also find this in the URL of all analytics pages in the UI.
dataType:
t: Current data
ot: Overtime/Past
c: Unknown, returns only a "count" value
dimensions (| separated or alone), most values are only applicable for t:
1: Country
2: City
3: Location code?
4: Latitude
5: Longitude
6: Traffic source type (Social, Referral, etc.)
7: Source
8: ?? Returns (not set)
9: Another location code? longer.
10: Page URL
11: Visitor Type (new/returning)
12: ?? Returns (not set)
13: ?? Returns (not set)
14: Medium
15: ?? Returns "1"
page:
At first this seems to work for pagination but after further analysis it looks like it's also used to specify which of the 6 pages (Overview, Locations, Traffic Sources, Content, Events and Conversions) to return data for.
For some reason 0 returns an impossibly high metrictotal
limit: Result limit per page, maximum of 50
filters:
Syntax is as specified at the Documentation 2 link below except the OR is specified using | instead of a comma.6==CUSTOM;1==United%20States
You can also combine multiple queries in one request by comma separating them (i.e. q=t:1|2|:1|:10,t:6|:1|:10).
Following the above "documentation", if you wanted to build a query that requests the page URL and city of the top 10 active visitors with a traffic source type of CUSTOM located in the US you would use this URL: https://www.google.com/analytics/realtime/realtime/getData?key={{propertyID}}&pageId&q=t:10|2|:1|:10:6==CUSTOM;1==United%20States
Documentation
Documentation 2
I hope that my answer is readable and (although it's a little late) sufficiently answers your question and helps others in the future.

Crystal Reports New Page if More than 1 Page

I've been searching everywhere for an answer to this but no luck. I've only got limited abilities in Crystal Reports. Using CR 2008.
I've got an invoice that is split into Services and Expenses. Expenses are detailed in a sub-report.
What I want to do is force a new page at a section before the Expenses sub report if the whole invoice is more than 1 page.
I'm currently doing this by a setting "New Page After" in section expert if Services are Not $0 and Expense are not $0. along the lines of New Page After: {Table.Services} <>0 and {Table.Expense}<>0
Problem is if there is only a couple of entries for services and a couple for Expenses, this may fit on one page, but since both are not $0 it will still force a new page. I can't really do it by forcing new page if there are more than 3 service entries, as 1 service entry could in theory take up the same space as 5 small service entries.
I've tried the following workaround, but still no luck.
Created a Page count formula that will only show the total page, so if it's 2 pages, then the number 2 will show.
NumberVar startNum := 0;
ToText((TotalPageCount + startNum), 0)
I then tried to conditionally force a new page using section expert with the following:
{#PageCount}>'1'
End result is that the page will break at the section even if all info will fit on 1 page.
Hope above makes sense and hoping someone may be able to help!
Thanks
Collin
Similar scenario here.
You can group your data by "Services Name"
Then edit the formula as
GroupName ({spReport_YourReport;1.Services Name})=''

Resources