During one of the Google I/O 2017 talks, Google announced a bot-building competition, Actions on Google Developer Challenge. Actions on Google are apps for Google Assistant, similar to what Alexa Skills are for Amazon Alexa.
At the time, I was building Sarah Shopper, a price tracker bot for Amazon, IKEA and some other ecommerce. It was for Messenger, but since the typical interaction with the bot is fire-and-forget, making it as an action for Google Assistant seems like a good idea. I can kill two birds with one bot, why not?
I’ve had experience building bots for Messenger and LINE, so I thought it should be a straightforward “build-submit-profit” with slight platform-specific differences. Boy was I wrong. After having had my submissions rejected for a total of 12 times over the course of few weeks, these are my lessons learned:
1. Release early, but not until it’s ready
The reason is, the review process can take literally a week. In comparison, it takes 2–3 days for Messenger and zero days for LINE.
If you have set a certain launch date (or joining a bot competition), you better release early. Make sure your bot complies to all Actions’ policies, because if it’s rejected (and it will), you’ll need to wait again.
“I don’t mind waiting for a week,” you said. Well…
2. Rejection doesn’t tell you the whole picture
If you app is rejected, the rejection email won’t list down everything that’s wrong with your app. It will mention some issues, which you will fix, that you will then resubmit, and you will get another rejection. Rinse and repeat.
The reviewers probably “stop on first error”, so the best way to avoid this is to comply to the policies to the dot. You don’t want to wait for another week, don’t you?
So you’ve made sure everything is followed, and you start porting your Messenger bot, but then you realize that…
3. Bots can only reply
Bots on LINE can push, and so does Messenger (with restrictions). On Assistant, there is no way to “return call”—you can only reply to user’s conversation. It must be within few seconds, and you can only send two chat bubbles max.
It’s kind of pointless to ask Sarah Shopper to watch certain websites but the users still need to call her from time to time. The only way to give notification is through email, but…
4. Bots are not allowed to ask users their email
If you do, your submission will be rejected. To get user’s email, use Google Login through Account Linking. Ideally, you want to defer login only when you need it (in this case, when you need the email), but…
5. At the moment, you can’t login mid-conversation
Either you require user to log in up-front (even before saying a word to your bot) or wait until the feature is implemented. I don’t have the patience to wait, so I simply require my user to log in up-front.
If only it’s that easy…
6. You need to have your own OAuth2 provider
Actions on Google uses OAuth2, and so does Google Login. Let’s connect the two! The login flow would be:
User summons your bot (“Talk to Sarah Shopper”)
Google Assistant presents login button
User logs in, which means clicking the button and choosing which Google Account to use
Your bot receives your email
Well, not quite. You need to have your own OAuth2 provider, where you can then tell your users to login to Google.
So they click login, and click another login, and… done? Well…
7. After you’re logged in, you need to call the bot again
You heard it right. I’m probably doing it wrong, but the documentation is not exactly clear.
There’s another login mechanism called Seamless/Streamlined/Quick (it has different name depending on which part of documentation you read) Account Linking, but I haven’t managed to make it work.
Alright. Account linked, email retrieved. Done? No, I still have my app rejected a few times. Apparently…
8. Bots must never “leave the mic open”
All of your bot’s final reply must either end the session (your bot stops and user returns to Assistant) or ask what the user want next. You should also provide suggestion chips (pre-canned replies that user can tap to reply). It’s like chatting with a clingy friend.
So you double-checked all conversation branches, and there’s no more open mic. Done? Well, for Sarah Shopper, you need to give her links to products you want her to watch.
9. There’s a limit on how many characters Google Assistant can accept
Amazon links can be very long (around 300 chars). A reviewer gave Sarah Shopper such link, and the chat session got abruptly terminated with a vague message, “Sarah Shopper isn’t responding right now. Try again soon.” Obviously there’s nothing I can do here, so I appealed and resubmitted.
10. Don’t get too creative with names
In-between submissions, I created another bot that uses SSML. To save money, I use one of my parked domains, syurprise.com. Yup, the word “surprise” with “y”. Don’t ask why, it was 17 years ago(!).
Apparently, one-word names are not allowed. I could have appealed, but I’ve lost my patience I just wanted it published asap. I put Syurprise Trivia instead.
I set Syurprise to be pronounced “surprise” just like Flickr is pronounced “flicker” (instead of “flick-ar”), but it was rejected because “Your name and pronunciation are too different. Your pronunciation should only differ in basic ways such as spaces, punctuation, and phonetic spelling”. I appealed. For fun, there’s an easter egg in my bot when you ask it how to pronounce its name.
11. Your bot can be published before you know it
Both Sarah Shopper and Syurprise Trivia are now published. Are they? The admin console says they’re still Publishing.
My wife can summon them from her Pixel phone. Maybe they just want to make me happy after weeks of waiting. Can you summon them?
12. Google does have free, human, support!
This last point is actually a praise. When I received the first rejection email, I almost felt hopeless (“I’m going to talk to a wall”), but they do have human support and they’re quite responsive and knowledgable.