Is there a workaround for launching Google Actions for countries where Transactions API is not available - actions-on-google

Recently, one of our Actions was rejected because it allowed the user to book an appointment but did not use Transactions API. So we had a few questions regarding the review process and the policy guidelines for Actions that use Transactions API.
Is there a way (by modifying the codebase or contacting the support) using which you can launch your Action for countries where Transactions API is currently unsupported?
Can you launch different (with and without Transactions API) versions of a single Action for different countries?
If someone is offering services that require enablement of Transactions API, does it limit the location targeting to only include the countries where the API is currently supported?

Is there a way (by modifying the codebase or contacting the support)
using which you can launch your Action for countries where
Transactions API is currently unsupported?
If you are knowing where the Transactions API is supported you can select your target county while Giving it for Approval from your action console.
Can you launch different (with and without Transactions API)
versions of a single Action for different countries?
As the invocation name will be chaos You can not upload your action with different critearea with different location.
Action store is same like Play store or App store where you can upgrade your action or app but can't duplicate in same manner.
One-word names are not allowed, unless the name is unique to your brand or trademark within the target country. Instructions to request an exception for individual countries are below. Compound words broken into multiple words will
not circumvent this requirement, for example key board counts as one word.
Two-word names are not allowed if one of the words is a definite article (the), indefinite article (a or an), pronoun (like my), or preposition (for, to, or of). For example, your name should not be a bicycle, an espresso, to amuse or for fun.
If someone is offering services that require enablement of
Transactions API, does it limit the location targeting to only
include the countries where the API is currently supported?
For an alternative solution you can use web payments where you can do some payment and give callback to your server. (i think thats allowed in most countries if you have global payment options available)
Actions that enable Transactions aren't currently available on Android (Go edition) devices.

Related

Duplicate of Action on Google with a different name

Does Google allow to release to production the same Action on Google (same logic, same content) for the second time? I'd like to test discoverability of one of my actions, but I don't want to change the name of the existing one (it's got paid subscribers who got used to the old name). So launching a duplicate with a new name makes sense from my point of view, but I don't want to waste my time in case it violates Google Assistant policy.
Technically I think you might be in violation of the Repetitive Content section, which includes:
We don't allow Actions that merely provide the same experience as other Actions already on the Actions on Google platform. Actions should provide value to users through the creation of unique content or services.
Here are some examples of violations:
Creating multiple Actions with highly similar functionality, content, and user experience. If these Actions are each small in content volume, developers should consider creating a single Action that aggregates all the content.
I don't know if they'd actually catch this, however. And aggregating content wouldn't make sense in your case.
I reached out to AoG Support team and they confirmed that it would be a violation of Repetitive Content policy. Not sure how to test what invocation name works best for my app in this case...

How do I create a charge on a Stripe customer from a connected account

I'm creating a type of ride-sharing application for iOS using Swift and Firebase Functions and would like to implement the following workflow:
Passenger requests ride from specific driver
Driver has 2 options
a. Driver accepts and the passengers card is charged
b. Driver declines and thats it
I've gone through pages and pages of Stripes documentation and Github to find the best example to go off, but can't seem to find one that fits what I'm after.
You can find an example here: https://stripe.com/docs/connect/collect-then-transfer-guide
There's also https://rocketrides.io/ which is a complete example, including code, of a ride sharing app.

RESTful design for accessing the same resource in different formats from different audiences

Use case
I am building a webshop where people can register/sign in and can purchase (and afterwards manage) their SaaS licenses. For this purpose I created (among others) the following REST endpoints:
// Lists all licenses which are linked to this user
r.Get("/users/{userID}/licenses", api.LicenseSvc.HandleGetLicenses())
// List details (such as purchase date, seat information, ...) for a given licenseID
r.Get("/users/{userID}/licenses/{licenseID}", api.LicenseSvc.HandleGetLicense())
// Creates a new license for the signed in user
r.Post("/users/{userID}/licenses", api.LicenseSvc.HandleCreateLicense())
// Each license has a limited number of seats. The license manager can free up seats to make room for others
r.Delete("/users/{userID}/licenses/{licenseID}/seats/{seatID}", api.LicenseSvc.HandleDeleteSeat())
The above endpoints are only supposed to be used in the webshop/license management panel. At the same time the same service has to serve endpoints for the SaaS products which actually use the license(s) a user has created/purchased before. This SaaS product needs different endpoints such as:
An endpoint to check at startup whether a given license is valid at all
An endpoint which also gets the license by ID (see above), but it should only return a subset of the license resource (e. g. it shouldn't return the date when the license was purchased)
My question
Due to the fact that I am building one REST API which is consumed by two different "audiences" (on the one hand the license manager/customer and on the other hand the SaaS software) I feel like I am running into conflicts.
The authentication of both audiences is different, both audiences want to access the same kind of resource (e. g. a license) but the resource "format" (no customer sensitive data for the SaaS requester) should be different depending on the audience.
Should this be reflected via different REST URLs or should I handle all that logic inside of my route handlers?
Should I even create two different services serving these different audiences? Like one API for the userpanel/license management and one for the SaaS products!?
REST is not very well prepared for these multi-client scenarios. i have seen many REST apis where certain attributes of resources will only be filled under certain circumstances where i find that perfectly fine. however i have also seen many examples of multiple use cases bunched into single resource models where the swagger documentation with its limiting structure terribly fails to communicate the purpose of each field.
so: as long as the use cases do not differ too much, i would try to keep the count of endpoints low.
tip: have a look at GraphQL, it is much better equipped for handling such cases with querying only for certain sets or even only asking for certain fields, putting the client in control. however using GraphQL as the primary interface is still somewhat exotic and comes with quite substantial initial cost compared to the plentiful REST infrastructure available. still worth it.

dialogflow large number of potential parameter values

My Google Action delivers information to college students. For example: Who is the Title IX Coordinator?
To answer this question, we need to know the college the student attends. There are 2700+ colleges in the U.S. Many have the same name or similar sounding names.
So, #college-name is an entity in DialogFlow. Is there a way to import all 2700+ college names into DialogFlow as potential values for #college-name?
Also, is there a way to use a listbox with DialogFlow / Actions on Google with Google Assistant to ensure the correct college is identified?
Dialogflow has the ability to import entities from a file either in a CSV or JSON format.
There isn't a listbox visual widget, although you can use a List with similar names or Suggestion Chips to narrow down their search.
In addition to importing entity values from a file you can also push them to Dialogflow programmatically via the Dialogflow REST API. This API manages the agent itself and is thus different from the Dialogflow Webhook, which calls your fulfillment service.
The specific endpoint you would use to update entity values is projects.agent.entityTypes.entities. Dialogflow also offers SDKs for Python, Node.js and other languages. This is probably the best option if you have a large number of values, as it allows you to setup some kind of pipeline from your data source to Dialogflow and schedule it to update the entity on a regular basis (i.e. with an AWS Lambda function or a cron job that runs once a day).

IPhone - Is it possible to add a Custom Image as the data source for a Map View?

I want to have a map view that loads from an image that I provide rather than using Google maps. This is basically because the internet will not be available where this app will be used.
I have heard that this is possible since map view is a CATiledLayer, so I should be able to provide custom content, but I am struggling to find information on the topic.
Could someone point me in the right direction?
You can't and doing this would be a violation of Google Map API terms. So Apple cannot even provide you such a feature. You must revert to third-party (and often non-free) services that use other maps.
The terms are here:
Google Maps API terms
This is a relevant (for this answer) extract from the terms:
License Restrictions. Except as expressly permitted under the Terms, or unless you have received prior written authorization from Google (or, as applicable, from the provider of particular Content), Google's licenses above are subject to your adherence to all of the restrictions below. Except as explicitly permitted in Section 7, you must not (nor may you permit anyone else to):
10.1 access or use the Service or any Content through any technology or means other than those provided in the Service, or through other explicitly authorized means Google may designate;
10.2 copy, translate, modify, create a derivative work of, or publicly display any Content or any part thereof (for example, the following are prohibited: (a) creating server-side modification of map tiles; and (b) stitching multiple static map images together to display a map that is larger than permitted in the Maps API Documentation);
10.3 pre-fetch, cache, or store any Content, except that you may store limited amounts of Content for the purpose of improving the performance of your Maps API Implementation if you do so temporarily, securely, and in a manner that does not permit use of the Content outside of the Service;
10.4 charge users or any other third party any incremental fee solely for the use of the Maps API Implementation, the Service, or the Content, unless you have entered into a separate written agreement with Google or obtained Google's written permission to do so (but if you are a consultant who creates or hosts Maps API Implementations for third party customers, you may charge such customers a fee for your consulting or hosting services);
10.5 reverse engineer, decompile or otherwise attempt to extract the source code of the Service or any part thereof, unless this is expressly permitted or required by applicable law;
10.6 use the Service in a manner that gives you or any other person access to mass downloads or bulk feeds of any Content, including but not limited to numerical latitude or longitude coordinates, imagery, and visible map data;
10.7 delete, obscure, or in any manner alter any warning, notice (including but not limited to any copyright or other proprietary rights notice), or link that appears in the Service or the Content;
10.8 use the Static Maps API other than in an implementation in a web browser;
10.9 use the Service or Content with any products, systems, or applications for or in connection with:
(a) real time navigation or route guidance, including but not limited to turn-by-turn route guidance that is synchronized to the position of a user's sensor-enabled device;
(b) any systems or functions for automatic or autonomous control of vehicle behavior; or
(c) dispatch, fleet management, business asset tracking, or similar enterprise applications (the Google Maps API can be used to track assets (such as cars, buses or other vehicles) as long as the tracking application is made available to the public without charge. For example, you may offer a free, public Maps API Implementation that displays real-time public transit or other transportation status information.
After some digging I found that this was not possible using a Map View
I ended up re-implementing a map view from a UIScroll View using a tiled layer as the content view. There is a tutorial how to do this in the 2010 WWDC videos on scroll views.
I then used open maps tiles.
This wasn't easy by any means. It took about a week to implement.