Tyler - DRB Customs

Facebook messenger chatbot

Project type
Facebook messenger chatbot for DRB Customs.
involvement
Full-stack Conversation Designer from project start to completion.
year
2021–2022
tools used
Dialogflow logoMiro logoVoiceflow logoSendgrid logoMessenger logo

The situation

DRB Customs is a tiling and flooring company in Maine. Made of a small team of contractors, they had several issues that they were facing:

  • Their work is in demand, so the volume of inquiries exceeds the capacity to take jobs.
  • Clients will often call expecting work be to done immediately when the company has several months of work fully booked.
  • There is often miscommunication on what a client needs to do to get their job ready.

Tyler helps DRB Customs mainly by:

  • Filtering job inquiries by making sure jobs are in a viable location.
  • Managing client expectations on scheduling.
  • Providing crucial information to clients when a job is undertaken (sent as a checklist).
  • Giving details on the company and sending example photos.
Introduction with D.R.Blais customs chatbot

Tyler's beginnings

The DRB chatbot project began as a side-project when the owner of DRB Customs, Denny, asked me to clean up the native chat automation on Facebook messenger. I added responses to frequently asked questions, but I realized that the potential for automation could be far greater than a simple FAQ script.

This project is personal to me because it was my first conversation design project. I started with a basic corpus and constantly updated my flows as I learned more about the field and better understood best-practices for crafting a smooth and compelling user experience.

Key flows

I refocused the conversation and identified several key user intents after user-testing and running back-to-back sample dialogue sessions in person (short conversations between two humans emulating what it would be like for a typical user to talk to the chatbot). These key flows were:

  • Schedule an estimate.
  • Company overview.
  • Send photos.
  • Material recommendations.

I also added in a small-talk section as an additional flow, for users who just wanted to say "Hi" to the chatbot.

Bot persona

A vast majority of users who talk to Tyler are clients who live in Maine, so I shaped his persona to be familiar to those from Maine. He has a professional but friendly way of speaking, and will often use Maine slang (such as wicked as a positive adjective). The goal was to emulate contractors who speak to their clients: professional, but somewhat casual and approachable. You can see more details on the bot persona worksheet above (original sheet from the Conversation Design Institute).

Prototyping and implementation

After sample dialogue testing and identifying my key intents/bot persona, I created a quick high-level flowchart on Miro and then rapidly deployed a prototype on Voiceflow.

High-level flowchart for the D.R.Blais customs chatbot
High-level flowchart. For an in-depth flowchart, see links above.

Using Voiceflow was convenient for prototyping because it is a quick and easy no-code tool for building chatbots and has a test function that you can send to potential testers. This was invaluable in getting feedback and tweaking Tyler's happy flows (the best case scenario paths).

I then used Miro to create a more in-depth flowchart, implementing lessons learned from my prototype. Finally, I used Google Dialogflow to implement my conversation. Although Dialogflow isn't as simple as no-code tools like Voiceflow or Manychat, I appreciate the control it offers over context management and back-end integrations.

Implementing functionality with webhook call fulfillment

Tyler's key functionality involves sending the user a checklist of crucial information to know before starting a job. Tyler also emails a human agent at the company with relevant data scraped throughout the conversation through Dialogflow parameters filling (email, name, project details).

I accomplished this using the Google cloud functions inline editor for Dialogflow fulfillment. Using node.js, I integrated Dialogflow with the Sendgrid Web API and mapped email sending functions to the intents where I needed Tyler to send an email.

Sample from the webhook fulfillment coding on Dialogflow

When a relevant intent is triggered, Tyler will now trigger the Sendgrid API and send an email to the user. The email is automatically populated with the relevant parameters (email, name).

A curious design consideration was that I had to have Tyler's emails sent a mailfence email account; many mail domains have started using DMARC (Domain-based Message Authentication, Reporting & Conformance). Simply put, emails sent via a third party from an email service using DMARC to another (eg. gmail to gmail) would fail to deliver. This was uncovered in user testing. Although DMARC has been successful in increasing email security, this meant that I had to create a different email account to send my Tyler emails with.

Example of when a user asks the D.R.Blais chatbot to send an email

Rounding out the conversation: error handling, floating intents, and duplicate intents

A critical part of Conversation Design is ensuring a smooth user experience, especially when users stray from a happy path.

I implemented a 3-stage error handling process for every single intent in my corpus. This was critical because some of my flows are narrow and deep, meaning that they are specific, long, multi-step processes, as opposed to an FAQ-style flow (especially the estimate flow, which requires many confirmation back-and-forth interactions).

Narrow and deep flows need a robust error handling system because it creates a very negative user experience if a user makes an error and veers 'off the track.' A generic fallback intent will not work because the bot needs to remember exactly where the user was in the conversation: otherwise, a user would have to re-do an entire flow if a single mistake is made.

To solve this, I created three custom fallback intents for each intent. Each intent 'remembers' the input and output contexts of the original intent, so the user never veers 'off track.' The first fallback intent is a simple rapid reprompt. If another error occurs, escalating detail is provided with more information and instructions on how to proceed. Finally, should a third error occur Tyler will redirect the user to speak to a real person.

Example of error handling on the D.R.Blais chatbot
This method allows the user two chances to re-enter the flow at their previous position.

Additionally, I rounded out the conversation with floating intents: questions the user may ask that aren't part of any flow (for instance, 'do you do plumbing work?' or 'how long have you been in the business?')

Throughout the conversation I also added three general types of duplicate intents:

  • Duplicate intents (variations) for key intents that a user may see multiple times, or for intents that a majority of users encounter (such as the intro and close). Variations allow a bot to feel more unique and more dynamic.
  • An redirect intent for lead intents. If I prompt the user with "What else would you like to do? Maybe I could send you some photos?" I need Tyler to enter the photo flow if a user says "sure."
  • Alternate intents for varied CTAs. For example, Tyler may prompt "Are you interested in scheduling an estimate?" but this wouldn't make sense if the user has already gone through the estimate flow. Therefore I had to create a backup prompt with a different CTA.
Duplicated intent in a flowchart ending

Final thoughts

Tyler was a challenging long-term project, especially for a one-man team, but I really liked how he turned out. I feel like my design improved over time, and I do think that there is a lot of value in iterative design in this field. It is important to test, re-test, and update. Through employing Conversation Design best-practices I know that the overall experience for the end-user is one that is natural and helpful.

Let's start a conversation.

If you have any comments, queries, or even if you simply just want to say "hi," please don't hesitate to send me a message!

With professional experience spanning three countries, I have confidence in my ability to adapt to any situation. As a life-long learner, I always strive to equip myself with new skills and knowledge to tackle whatever challenge may come.