Since the end of 2007, I've done most of my work for Power Home Remodeling Group. Creating the application that runs just about their entire business, Nitro.
Fortune Magazine just named them the #1 Best Workplace for Millennials.
Our core development team is just a few people. We want more. If you want to be challenged. Are a UX/UI person, Ruby on Rails developer, Front-End developer, even interested in technical support, let me know.
I’ve been following the development of RethinkDB since I first heard about it a few years ago. My excitement over it has only grown over time.
RethinkDB is an open source database that fits somewhere between a relational database like MySQL or PostgreSQL and newer schema-less databases like MongoDB. However, it’s got a few things I don’t think any other database has.
RethinkDB pushes results to your app in real time
Typically, you’d need a separate Publish-Subscribe system in place to do this.
With RethinkDB, you can start a query and request to get changes. Your app will automatically receive any changed data related to your query after that.
If you want something that’s closer to current Publish-Subscribe methods, RethinkDB has you covered there, too, with their repubsub library.
It’s insanely easy to cluster
This is right from their docs.
First, start RethinkDB on the first machine:
$ rethinkdb --bind all
Then start RethinkDB on the second machine:
$ rethinkdb --join IP_OF_FIRST_MACHINE:29015 --bind all
I've spent a lot of this year talking about Adhearsion and, at a functional level, how Power Home Remodeling Group integrates it into their workflow.
MojoLingo is our partner in regards to all things Adhearsion. And part of that is creating a custom chat client that does things no other chat client can do. And that's offer things specific to our business that wouldn't apply to just anyone. It's about context.
RailsConf 2015 is in Atlanta, GA. Ben Klang, from MojoLingo, will be presenting about using WebRTC to put real-time voice, video and text into your Rails application.
Previously, I mentioned that Power Home Remodeling Group makes around 48,000 calls per day. While a lot of those are no answers or answering machines we still make contact with a lot of people every day.
We record those calls.
If we don’t reach someone, we simply record whether or not we left a message on their machine, or if it was truly a no-answer.
When we do reach someone and talk to them, Adhearsion records it. We do inform the person that we are recoding the call.
When a call hangs up, our Talkbox Adhearsion application sends an API call to our main Nitro application. The path of the audio recording and the home it’s linked to are included so Nitro can put them together into that home’s overall communication history.
At PowerHRG, appointments initially made with a live person. This could be at an event, some retailer where we have an area set up, or an employee who knocks on doors.
An appointment will get scheduled for a remodeling consultant to visit the homeowner. At the same time, we’ll also get any written permission we need in order to contact the homeowner. A confirmation email is sent as an appointment reminder.
Remember, it’s not legal to call a cell phone without prior written consent. Since many people only have cell phones, we wouldn’t be able to call them otherwise.
You can review more about the rules for automating phone calls in my previous post.
Why we confirm all appointments
Life happens. We prefer to find out if the homeowner can’t make the appointment before we send somone out to see them.
In our experience, calling to confirm as close to the appointment time as we can is the most accurate way to ensure the appointment can be met.
Automating the call
Talkbox, our Adhearsion server, is constantly looking for upcoming appointments during business hours.
When it detects any unconfirmed appointments coming up within the next few hours, it will make sure we have agents signed in to take calls and then initiate calls to those homeowners.
Confirmation agents are signed in and waiting in a their own private audio conference room setup by Talkbox. This way the agent is instantly ready to talk. Otherwise, we waste time with Talkbox attempting to negotiate the call.
When the homeowner answers the phone, Talkbox bridges the call with an available agent’s conference room. The homeowner’s name and number appears on the agent’s desk phone. The agent can see instantly who they are talking with.
At the same time as the call is connected, Talkbox sends a message to Nitro to refresh the agent’s application window with the homeowner’s appointment info. This could take a few seconds so the desk phone display is useful because it’s quicker and offers confirmation that the information on the screen is the for the correct homeowner.
What happens when we can’t reach the homeowner
We obviously can’t reach the homeowner directly one hundred percent of the time.
No answer: If the call isn’t answered at all, Talkbox will re-queue the appointment to call back in another twenty minutes before calling them back. We do this until about thirty minutes past the originally scheduled appointment time.
Voicemail: Talkbox will leave an automated message asking the homeowner to call someone back to confirm their appointment. Alternate numbers will be called as with a no answer.
If we simply can’t reach the homeowner at all to confirm the appointment, we schedule a call for the next day to reschedule for another time.
How does Talkbox know it reached a person or a machine?
There are a few behaviors that can be key in an application detecting whether a live person or an answering machine is answering a call. Nothing is one hundred percent accurate.
People typically answer the phone by saying something right away. So if there’s a delay in hearing any audio at all there’s a good chance it’s an answering machine.
Most people answer the phone by saying “Hello”. Answering machines tend to respond with a sentence or two at least. So the length of the initial greeting is another indicator.
Adhearsion has answering machine detection with configurable settings to adjust for the specific needs of a business.