Comments (3)
The Actions on Google library is focused on building and responding to Actions, and isn't intended to support responses to other platforms. Dialogflow does not appear to have a fulfillment library for Java. While you may be able to use the WebhookResponse object from this library, some additional work may need to be employed to get the response directly instead of using additional built-in methods.
from actions-on-google-java.
this is a problem for any case where there is the need to create or modify anything in the dialogflow payload. for example, if you want to modify a parameter in the query result and send the modified version back. The problem is in the following snippets:
// com/google/actions/api/impl/DialogflowResponse.kt
internal class DialogflowResponse internal constructor(
responseBuilder: ResponseBuilder) : ActionResponse {
override val webhookResponse: WebhookResponse
override val appResponse: AppResponse? = null
override val expectUserResponse: Boolean?
get() = googlePayload?.expectUserResponse
internal var conversationData: MutableMap<String, Any>? = null
internal var googlePayload: AogResponse? = null
internal var contexts: MutableList<ActionContext>? = ArrayList()
internal var sessionEntityTypes: MutableList<SessionEntityType>? = ArrayList()
internal var sessionId: String? = null
init {
conversationData = responseBuilder.conversationData
sessionId = responseBuilder.sessionId
if (responseBuilder.webhookResponse != null) {
webhookResponse = responseBuilder.webhookResponse!!
} else {
webhookResponse = WebhookResponse()
}
if (webhookResponse.fulfillmentText == null) {
webhookResponse.fulfillmentText = responseBuilder.fulfillmentText
}
googlePayload = responseBuilder.buildAogResponse()
}
mainly the last line. googlePayload is always set here no matter what. which begs the question: why is it even a nullable type?
// com/google/actions/api/impl/io/ResponseSerializer.kt
private fun serializeDialogflowResponseV2(
dialogflowResponse: DialogflowResponse): String {
val gson = GsonBuilder().create()
val googlePayload = dialogflowResponse.googlePayload
val webhookResponse = dialogflowResponse.webhookResponse
val conversationData = dialogflowResponse.conversationData
val contexts = dialogflowResponse.contexts
val sessionEntityTypes = dialogflowResponse.sessionEntityTypes
if (googlePayload != null) {
val aogPayload = DialogflowGooglePayload(googlePayload)
val map = HashMap<String, Any>()
map["google"] = aogPayload
webhookResponse.payload = map
}
as you can see here the webhookResponse.payload just gets totally overwritten.
it seems like it should either:
- allow the googlePayload to be null for dialogflow response types
- and/or merge the maps rather than just overwrite.
if that is acceptable i'm happy to make a PR. This is causing us pain atm and i would love to fix. it also doesnt quite make sense why it is built this way from my perspective.
please consider re-opening and taking a PR!
from actions-on-google-java.
If you send a PR I'll take a look. As stated, this library is not meant for developing webhooks beyond AoG, but if the change is not too expansive and well tested I think it'll be fine to merge.
from actions-on-google-java.
Related Issues (20)
- Allow deserializing a request and serializing a response using streams HOT 5
- Support noInputPrompts HOT 3
- vendored googleapis proto cause duplicate-dependency-class issues
- consider dropping JSONObject from the smarthome API surface HOT 1
- SyncResponse.Payload is missing errorCode
- Smarthome integration should expose DisconnectResponse HOT 3
- report state need a Integer value type HOT 4
- Intermittent error while while calling reportState in Java HOT 1
- Smarthome integration should allow setting arbitrary data on ExecuteResponse HOT 1
- Not able play video from hls direact link into chromecast using google smart home action
- Missing features on java AoG library
- Regarding the 'NOT_FOUND: Requested Entity was not Found' error log
- Exception when the server reports the status
- How to enrich messages with content? HOT 4
- ManagedChannelImpl was not shutdown properly HOT 3
- Support for Actions on Google Console HOT 3
- why there is no field `notificationSupportedByAgent` ? HOT 4
- German umlauts (ä, ö and ü) not properly displayed and spoken. HOT 3
- FATAL EXCEPTION: java.lang.AssertionError getResourceResolver after gradle and kotlin version updated in Android project
- Security Policy violation Binary Artifacts HOT 28
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from actions-on-google-java.