Well, after some frustration, I have a chat bot working on Google Actions. But now that the frustration is over, the flood gate is open!
The first challenge; using my existing code. Safety Moments, my first skill, uses json files. I needed to upload them to a Google bucket. And then, for whatever reason, the promise loading these files took > 5s to execute (a download of a file <1K), so my conversation was over before my content loaded. There was no synchronous hack I found. Then, I figured I'd load them on invocation of the cloud function. It worked for a while, and then it just stopped working. No idea why. I received connection resets downloading the files. So second solution? Embed all the json in the webhook itself. (What is a webhook? It is the node code that fulfills the request to do something after LU digestion.)
The second challenge; competing SDKs. It looks like Dialogflow and Actions on Google were inseparable. But they are. And if you follow the code examples for Dialogflow (that I did, because it looked like a really cool tool compared to LUIS), you will discover mismatches between how Actions On Google (for assistants) implements bot behavior. So... I couldn't immediately figure out what was Dialogflow SDK (agent.add) and what was Actions SDK (conversation.ask). It manifested itself in my conversation data not persisting and me scratching my head.
The third challenge; moving targets. The Google tech is migrating from V1 to V2, and Dialogflow seems not to have caught up to Actions. Part of my confusion was out-of-the-box webhooks were V1. Dialogflow examples integrating with Actions was V1. But V2 is pretty much were all Actions documentation and examples sit. Ugh. Now I know what to look for.
What I Like
- International availability.
- Excellent TTS for female and male voice.
- Dialogflow (the tool) and how it builds intents (utterances) and actions (entities).
- You can build dev without charge.
- Events get fired when media stops playing.
What I Dislike
- You can't have a Card before a SimpleResponse. I use cards as banners.
- Cards can have one button, though the JSON supports multiple buttons. Why?
- You can't segment long conversations naturally. You have to make them turn based and granular. Not so good for my experiments.That will, in my opinion, seriously cripple enterprise capability.
- Your action will not pass certification if it does not end the dialog on a question. This forces dialogs to be very transactional.
References
Actions on Google and Dialogflow.
Useful documentation
- https://developers.google.com/actions/assistant/responses
- https://developers.google.com/actions/reference/nodejs/lib-v1-migration