Voice AI - Meeting booking agent

Written By William Bowen

Last updated 7 days ago

Intro

Use cases

Screenshots

Code

Example
{ "$schema": "https://web-api.clerk.chat/pipeline-schema", "name": "Voice template - Meeting booking", "nodes": [ { "type": "template", "name": "Node #1", "triggeredBy": [ "unreadMessage.fromAny" ], "responseType": "user_message", "staticId": 14, "nodeConfig": { "template": "One of our team will reach out to confirm this! Please standby." } }, { "type": "template", "name": "Send message", "triggeredBy": [ "unreadMessage.fromAny" ], "responseType": "user_message", "staticId": 13, "nodeConfig": { "template": "Appointment type: {{appointment-type}} \n\nName: {{name}} \n\nEmail: {{email}} \n\nProposed date and time: {{available-times}}" } }, { "type": "tool_runner", "name": "Conclude", "triggeredBy": [ "unreadMessage.fromAny" ], "responseType": "json", "staticId": 12, "nodeConfig": { "type": "voice_call", "config": {}, "enabledTools": [ "say" ], "tools": { "say": { "paramValues": { "text": { "type": "fixed", "value": "Thanks for the info! I am sending this to the team to check and will get back over SMS to confirm this appointment. Have a nice day!" }, "shouldLoop": { "type": "fixed", "value": true }, "allowInterruptions": { "type": "fixed", "value": true }, "disableRepeatOnSilence": { "type": "fixed", "value": true } } } } } }, { "type": "voice_bot", "name": "Date and time", "triggeredBy": [ "unreadMessage.fromAny" ], "responseType": "json", "staticId": null, "nodeConfig": { "actionType": "prompt", "prompt": "Your job is to ask the customer what date and time they would be free for the appointment.\n\nThe appointment time has to be inside business hours", "responseSchema": { "type": "object", "required": [ "available-times" ], "properties": { "available-times": { "type": "string", "description": "Date and time the customer says they are free" } } }, "responseToolName": "available-times", "responseToolDescription": "Date and time the customer says they are free", "allowInterruptions": true, "disableRepeatOnSilence": false, "shouldLoop": true, "ivr": { "name": null, "description": null, "canNavigateToNode": false, "canNavigateFromNode": false } } }, { "type": "tool_runner", "name": "Intro", "triggeredBy": [ "unreadMessage.fromAny" ], "responseType": "json", "staticId": 11, "nodeConfig": { "type": "voice_call", "config": {}, "enabledTools": [ "say" ], "tools": { "say": { "paramValues": { "text": { "type": "fixed", "value": "Hi! Thanks for calling booking agent. " }, "shouldLoop": { "type": "fixed", "value": false }, "allowInterruptions": { "type": "fixed", "value": true }, "disableRepeatOnSilence": { "type": "fixed", "value": true } } } } } }, { "type": "voice_bot", "name": "Name and email", "triggeredBy": [ "unreadMessage.fromAny" ], "responseType": "json", "staticId": null, "nodeConfig": { "actionType": "prompt", "prompt": "Your job is to ask the customer for their full name and email address, conversationally. \n\nYour output should be maximum 35 words.", "responseSchema": { "type": "object", "required": [ "name", "email" ], "properties": { "name": { "type": "string", "description": "The customer's full name" }, "email": { "type": "string", "description": "The customer's email address" } } }, "responseToolName": "customer-info", "responseToolDescription": "Submits the customer's name and email address", "allowInterruptions": true, "disableRepeatOnSilence": false, "shouldLoop": true, "ivr": { "name": null, "description": null, "canNavigateToNode": false, "canNavigateFromNode": false } } }, { "type": "voice_bot", "name": "Appointment type", "triggeredBy": [ "unreadMessage.fromAny" ], "responseType": "json", "staticId": null, "nodeConfig": { "actionType": "prompt", "prompt": "You are a receptionist. Your job is to greet the user and find out what type of appointment they want. \n\nYour output should be maximum 30 words.", "responseSchema": { "type": "object", "required": [ "appointment-type" ], "properties": { "appointment-type": { "type": "string", "description": "They type of appointment the customer wants?" } } }, "responseToolName": "appointment-type", "responseToolDescription": "What type of appointment does the customer want?", "allowInterruptions": true, "disableRepeatOnSilence": false, "shouldLoop": true, "ivr": { "name": null, "description": null, "canNavigateToNode": false, "canNavigateFromNode": false } } }, { "type": "trigger", "name": "Call Started", "triggeredBy": [ "callStarted" ], "responseType": "json", "staticId": null } ], "edges": [ { "name": null, "sourceNode": "Send message", "destinationNode": "Node #1", "sourceVariables": null, "filters": [] }, { "name": null, "sourceNode": "Conclude", "destinationNode": "Send message", "sourceVariables": null, "filters": [] }, { "name": null, "sourceNode": "Date and time", "destinationNode": "Conclude", "sourceVariables": null, "filters": [] }, { "name": null, "sourceNode": "Name and email", "destinationNode": "Date and time", "sourceVariables": null, "filters": [] }, { "name": null, "sourceNode": "Appointment type", "destinationNode": "Name and email", "sourceVariables": null, "filters": [] }, { "name": null, "sourceNode": "Intro", "destinationNode": "Appointment type", "sourceVariables": null, "filters": [] }, { "name": null, "sourceNode": "Call Started", "destinationNode": "Intro", "sourceVariables": null, "filters": [] } ] }