How do I enable Google Transaction API in Orbita?
When you submit an Action to Google for alpha testing, Google verifies if all the transactions in the Action, both monetary and non-monetary, are done through Google Transaction API and rejects the Action if not using the API. Orbita has integrated the Google Transaction API so that all the transactions will be dealt with the Google Transaction API.
Instructions
The Transaction API should be enabled for your Action and the intent should contain an Event for transaction decision making.
For example, you might want to create a slot reservation flow for a restaurant.
Enable Transactions in Action
Follow these steps to enable transactions in the Action
Login to https://console.actions.google.com/ and select a project.
In the project screen:
Make sure you have chosen the correct project.
Select the “Deploy” tab.
Select “Directory Information” from the side menu.
Scroll down and expand the “Additional Information.
Scroll down to the “Transactions” section and check the appropriate checkbox that suits your use case.
Scroll to the top of the screen and click Save.
Note: To successfully save the changes on this page, you must fill all the mandatory fields. If the mandatory fields are incomplete, you will see a warning message as shown below.
Sample Flow
In the below example, SlotReservation intent is used to invoke the reservation flow.
The Transaction API Input structure Function node will construct the input for the API.
ReservationDone intent will be triggered by an event that the API would call.
The final response upon successful completion of the flow should be given in the Say node.
Intent and Event
You must create an intent to connect it with the event that the Transaction API calls.
In the above sample flow, the Intent ReservationDone is created to tag the transaction event.
Tag the event actions_intent_TRANSACTION_DECISION to this intent.
Utterances are not required for this intent as the event will have its default utterances.
Function node
The function node contains the below code.
var json = {
"systemIntent" : {
"intent" : "actions.intent.TRANSACTION_DECISION",
"data" : {
"@type" : "type.googleapis.com/google.actions.transactions.v3.TransactionDecisionValueSpec",
"orderOptions" : { "requestDeliveryAddress": false },
"order" : {
"merchantOrderId" : "" + Math.floor(Math.random() * 200000) + Date.now(),
"userVisibleOrderId" : "" + Math.floor(Math.random() * 200000) + Date.now()+1,
"transactionMerchant" : {
"id" : "" + Math.floor(Math.random() * 200000) + Date.now()+2,
"name" : "Merchant"
},
"contents" : {
"lineItems" : [{
"id" : "" + Math.floor(Math.random() * 200000) + Date.now()+3,
"name" : "Slot Reservation",
"description" : "Reserve a slot in a restaurant",
"reservation" : {
"status" : "PENDING",
"userVisibleStatusLabel" : "Reservation is pending.",
"type" : "RESTAURANT",
"reservationTime" : { "timeIso8601" : "2019-08-31T01:30:15.01Z " },
"userAcceptableTimeRange" : { "timeIso8601" : "2019-08-31T01:30:15.01Z" },
"staffFacilitators" : [{ "name" : "La Richi" }],
"location" : {
"zipCode" : "20001",
"city" : "NewYork",
"postalAddress" : {
"regionCode" : "US",
"postalCode" : "20001",
"administrativeArea" : "CA",
"locality" : "NewYork",
"addressLines" : [ "222, Wellignton Street" ]
}
}
}
}]
},
"buyerInfo" : {
"email" : "La_richi@gmail.com",
"firstName" : "John",
"lastName" : "Smith",
"displayName" : "John"
},
}
}
}
}
msg.alexaResponse.response.payload.google.systemIntent = json.systemIntent;
delete msg.alexaResponse.response.payload.google.noInputPrompts;
delete msg.alexaResponse.response.payload.google.isSsml;
delete msg.alexaResponse.response.payload.google.richResponse;
return msg;