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": []
}
]
}