Author: Theo Weise
Try it at chatbookings.net
Important Note: Currently, all calls are redirected to your signed-in phone number for proof of concept. When you pick up the phone, speak as the business owner.
Demo: https://www.youtube.com/watch?v=WQnK7wCGM_Y
ServiceScout places calls to businesses on your behalf. You can ask it to get you quotes, make appointments, and more.
By default, ServiceScout will search Google Places API for candidate businesses and call them to gather more information:

If you check the box "Only show results from database", ServiceScout will not place any outbound calls. It will check its internal knowledge base (from previous calls) via RAG to give you a response:

If you are using ServiceScout from https://chatbookings.net, there may be up to a 30s delay the first time you log in or initiate a call. This is because the Cloud Run services are spinning up.
- backend
- scout_agent
- agent.py -> agent runnable with
adk web - a2a.py -> a2a server
- main.py -> http server for custom setup
- agent.py -> agent runnable with
- phone_agent
- main.py -> http server for custom setup
- scout_agent
- frontend -> NextJS frontend to interact with ServiceScout
- Run
adk webfrom thebackenddirectory for a playground
- Rename
.env.exampleto.envin bothbackend/phone_agentandbackend/scout_agent - Fill in both .env files.
- In Firebase, go to auth and get a
firebase.tsfile to put in frontend/src/app. - Switch the commented lines at the top of
frontend/src/app/page.tsxif needed. - Create and activate a python virtualenv. You only need one.
- Run
./setup.shand follow the instructions. - Run these commands in separate terminals:
cd backend/scout_agent && python3 main.py
cd backend/phone_agent && python3 main.py
cd backend/scout_agent && python3 a2a.py
cd frontend && npm run dev
The following services will run: 3000: NextJS Frontend 8000: scout_agent HTTP API 8001: phone_agent HTTP API 8002: A2A server
ServiceScout is best enjoyed through the custom NextJS dashboard. You can try it at http://localhost:3000 if you followed the above steps, or at https://chatbookings.net.
InMemorySessionService is used because VertexAISessionService caused extreme latency in the live audio chat. InMemorySessionService comes with the tradeoff that sessions are not persisted when the Cloud Run container exits. It is straightforward to replace the session service in the agent's main.py.