Built-in Tools
Built-in Tools
Phonic provides built-in tools that work seamlessly while handling calls on Phonic’s infrastructure. The quickest way to enable one is to add its name to an agent’s or conversation’s tools array (e.g. "tools": ["keypad_input"]) — no tool creation needed. You can also create them as tool instances with your own name and description (see Creating built-in tools as instances below); both behave identically at runtime.
Keypad Input (DTMF)
keypad_input lets the agent press keypad buttons including digits (0-9) and special keys (#, *, A, B, C, D). Phonic uses out-of-band DTMF (RFC 4733) signaling with our telephony integration.
Include keypad_input in the agent’s tools list. When running a conversation via WebSocket, handle the dtmf message on your infrastructure.
Natural Conversation Ending
natural_conversation_ending lets the agent hang up. Include it in the agent’s tools list. When running via WebSocket, handle the assistant_ended_conversation message on your infrastructure.
Choose Not to Respond
choose_not_to_respond lets the agent stay silent for a turn instead of always replying — useful when the caller is thinking out loud, talking to someone else, or hasn’t finished speaking. Include it in the agent’s tools list.
Creating built-in tools as instances
Instead of attaching a built-in by its bare name, you can create it as a tool with your own name and description — in the dashboard’s Create tool menu, or via tools.create with type set to built_in_natural_conversation_ending, built_in_keypad_input, or built_in_choose_not_to_respond. This is useful when you want a custom-worded description for the model, and you attach the instance to an agent by its name just like any other tool.
These instances take no custom parameters and always run in sync mode (execution_mode is optional and defaults to "sync"). built_in_natural_conversation_ending and built_in_keypad_input accept an optional speech_before_tool_call setting — "required" (speak first), "optional" (model decides), or "suppressed" (stay silent before the call). It defaults to "required" for built_in_natural_conversation_ending and "optional" for built_in_keypad_input. built_in_choose_not_to_respond has no configuration, since staying silent is its whole purpose.