Tools reference

This article provides the complete reference for all 12 built-in NAF tools. Each tool is documented with its purpose, activation conditions, conversation history requirements, conflict policies, and the execution flow that handles it. For an explanation of how tools are compiled, detected, and executed, see The Supervisor and Tool Caller system.

Tool definition structure

Every tool follows the same definition schema in get_naf_defined_tools.nsl:

{
  "tool_name": {
    "description": "What the tool does",
    "conditions": {
      "condition_name": {
        "type": "boolean",
        "description": "Natural language description of when this is true"
      }
    },
    "useConversationHistory": true,
    "conflictPolicy": {
      "tag": "group_tag"
    },
    "action": {
      "type": "send_event",
      "options": {}
    }
  }
}
FieldDescription
conditionsAll conditions must evaluate to true for the tool to be called. Conditions are evaluated by an LLM against the conversation context.
useConversationHistoryWhen true, the LLM receives the full conversation history during condition evaluation. When false, only the <LatestConvoAgentAnswer> is analyzed.
conflictPolicy.tagTools sharing the same tag are mutually exclusive — only one per tag can execute per turn.
action.typeThe execution method: send_event (fire a system event to a handler flow) or send_webhook (HTTP request).

Booking tools

check_availability_tool

PropertyValue
PurposeSearch for available reservation slots.
Activation attributeproject_attributes_setting_booking_check_availability_enabled = "True"
Conversation historyfalse
Conflict tagavailability
Execution flowCACheckingAvailabilityFlow

Conditions:

ConditionDescription
agentPromisedThe agent clearly states they are going to search for available slots or look up new availability exactly in their latest message.

create_booking_tool

PropertyValue
PurposeCreate a reservation in the booking system.
Activation attributeproject_attributes_setting_booking_enabled = "True"
Conversation historyfalse
Conflict tagNone
Execution flowCABookingManagementFlow

Conditions:

ConditionDescription
agentPromisedThe agent clearly states that they are going to submit a booking or make a reservation right now. The latest answer should contain phrases like: "I'm submitting your booking now...", "I will make your reservation now...", "I will submit your booking in a moment..."

search_booking_tool

PropertyValue
PurposeSearch the user's existing bookings created via the agent.
Activation attributeproject_attributes_setting_booking_enabled = "True"
Conversation historyfalse
Conflict tagNone
Execution flowCASearchBookingFlow

Conditions:

ConditionDescription
agentPromisedThe agent clearly states they are going to check the user's existing reservations right now. The latest answer should contain phrases like: "Give me a moment to search your previous bookings...", "Let me search your bookings..."

cancel_booking_tool

PropertyValue
PurposeCancel an existing reservation in the booking system.
Activation attributeproject_attributes_setting_booking_cancellation_enabled = "True" AND project_attributes_setting_booking_cancellation_type is endpoint or project
Conversation historytrue
Conflict tagNone
Execution flowCABookingManagementFlow

Conditions:

ConditionDescription
agentPromisedThe agent clearly states they are going to cancel an existing booking right now. Phrases like: "Give me a moment to cancel your booking...", "Let me cancel your booking..."
bookingExistDuring the conversation, the agent actually checked existing user bookings and found the exact one it is going to cancel.

send_manage_booking_url_tool

PropertyValue
PurposeSend an SMS with a URL for the user to manage their previously made booking.
Activation attributeEnabled as fallback when cancel_booking_tool is not available (booking cancellation disabled or type is default).
Conversation historytrue
Conflict tagsms
Execution flowCAActionSendSMSInformationFlow

Conditions:

ConditionDescription
agentPromisedThe latest answer includes a clear statement that the agent is going to send an SMS with a link for the user to manage a specific existing booking. For example: "I will send you an SMS with the link to cancel this booking."
bookingExistThe agent has already checked the user's existing bookings and identified the exact booking for which the manage-link SMS will be sent.

Communication tools

send_email_tool

PropertyValue
PurposeSend an email to the user.
Activation attributeproject_attributes_setting_email_send_information_enabled = "True"
Conversation historyfalse
Conflict tagNone
Execution flowCAActionSendEmailInformationFlow

Conditions:

ConditionDescription
agentPromisedThe agent clearly states they are going to send an email. The latest answer must contain the explicit keyword "email". Phrases like: "I will send you an email shortly...", "I'm sending an email...", "Let me try sending it (email) again..."

send_sms_tool

PropertyValue
PurposeSend an SMS to the user.
Activation attributeproject_attributes_setting_sms_send_information_enabled = "True"
Conversation historytrue (conditional)
Conflict tagsms
Execution flowCAActionSendSMSInformationFlow

Conditions:

ConditionDescription
agentPromisedThe agent clearly states they are going to send an SMS. The latest answer must contain the explicit keywords "SMS" or "text message". Phrases like: "I will send you an SMS shortly...", "I'm sending a text message..."
notRelatedToExistingBooking(Conditional) The SMS is not related to cancelling or managing an existing reservation. If it is, send_manage_booking_url_tool should be used instead.

Call management tools

transfer_call_tool

PropertyValue
PurposeTransfer the call to a human representative.
Activation attributeproject_attributes_setting_transfer_call_enabled = "True"
Channel restrictionPhone only (not available on chat or web channels)
Conversation historyfalse
Conflict tagNone
Execution flowCAActionCallTransferFlow

Conditions:

ConditionDescription
agentPromisedThe agent clearly states that right now they are going to connect, transfer, forward, or put the user through. Phrases like: "I will connect you with a manager right away...", "I am transferring you to...", "I will put you through to..."

::: 🗒️ NOTE The transfer_call_tool supports an additional statement via the project_attributes_setting_transfer_call_additional_statement attribute. This allows adding custom conditions to the transfer behavior. :::


end_conversation_tool

PropertyValue
PurposeEnd the conversation from the agent side as concluded and finished.
Activation attributeAlways available (no attribute gate)
Conversation historytrue
Conflict tagNone
Execution flowCAEndSessionFlow

This is the most complex tool. Its conditions evaluate the full conversation to determine if the session should end:

Conditions:

ConditionDescription
mutualGoodbyeThe agent and user said goodbye to each other. The dialogue contains explicit farewell phrases from both sides, OR the user expresses intent to end ("Thank you", "No, thank you") and the agent acknowledges it ("You're welcome", "Have a great day"), OR the user is an automated voicemail system and the agent has finished leaving a message.
noMoreQuestionsThe agent and user have no outstanding questions or unresolved topics, and both parties are ready to conclude. In voicemail scenarios, a callback request is considered a closing instruction, not an unresolved topic.
agentFarewellThe latest answer includes a clear farewell or closing phrase ("Goodbye", "Have a great day", "You're welcome, take care") and does not introduce any new questions, requests, or topics.
explicitConversationEndIn some cases the agent explicitly says they are going to end the conversation right now.

::: ❗❗ IMPORTANT The end_conversation_tool requires useConversationHistory: true because it must evaluate the full conversation to determine whether both parties have exchanged farewells and all topics are resolved. This is the only tool where the full conversation context is essential for every evaluation. :::

Calendar tools

create_meeting_tool

PropertyValue
PurposeCreate a meeting in the calendar or integration.
Activation attributeproject_attributes_setting_calendar_event_integration = "google_integration"
Conversation historyfalse
Conflict tagNone
Execution flowCAScheduleFlow

Conditions:

ConditionDescription
agentPromisedThe agent clearly states they are going to create a meeting right now. Phrases like: "Give me a moment, I will set up the meeting...", "I will create a meeting right now...", "I will send the calendar invite right now..."

::: 🗒️ NOTE The setup phrase for meeting creation can be customized via project_attributes_setting_meeting_setup_phrase. The default is "I will set up an appointment request." :::

Validation tools

check_zip_code_served_tool

PropertyValue
PurposeVerify if the user's provided ZIP code is served by the business.
Activation attributeproject_attributes_setting_products_and_services_background_check_location_enabled = "True"
Conversation historyfalse
Conflict tagNone
Execution flowVia system event

Conditions:

ConditionDescription
agentPromisedThe agent states they are going to check or double-check if the user's ZIP code is served. The agent asks the user to wait while they check.

check_product_or_service_availability

PropertyValue
PurposeVerify if a requested service or product is served/sold by the business.
Activation attributeproject_attributes_setting_products_and_services_background_check_availability_enabled = "True"
Conversation historyfalse
Conflict tagavailability
Execution flowVia system event

Conditions:

ConditionDescription
agentPromisedThe agent states they are going to check or double-check if the user's requested product or service is available.
productOrServiceProvidedThe user inquired about a specific product or service they want to purchase.
notTimeAvailabilityRequestThis tool must not be called if the agent checks availability in terms of open time slots — only about the product or service itself.

Conflict policies summary

TagTools in groupResolution
smssend_sms_tool, send_manage_booking_url_toolLLM ranks which SMS-related action is most relevant based on conversation context.
availabilitycheck_availability_tool, check_product_or_service_availabilityLLM determines whether the agent is checking time-slot availability or product/service availability.

When two or more tools from the same conflict group are selected in the same turn, the rerank_conflict skill evaluates the full conversation context and selects the single most relevant tool.

Tool execution flows

Each tool maps to a ConvoAgent flow that handles the actual execution:

ToolExecution flowDescription
check_availability_toolCACheckingAvailabilityFlowChecks booking system for available slots and stores results in persona attributes.
create_booking_toolCABookingManagementFlowSubmits a booking to the booking system.
search_booking_toolCASearchBookingFlowSearches for existing user bookings.
cancel_booking_toolCABookingManagementFlowCancels an existing booking.
send_manage_booking_url_toolCAActionSendSMSInformationFlowSends SMS with booking management URL.
send_email_toolCAActionSendEmailInformationFlowComposes and sends email via EmailWorker agent.
send_sms_toolCAActionSendSMSInformationFlowComposes and sends SMS via SmsWorker agent.
transfer_call_toolCAActionCallTransferFlowInitiates call transfer to human representative.
end_conversation_toolCAEndSessionFlowTerminates the conversation session.
create_meeting_toolCAScheduleFlowCreates calendar event via Google Calendar integration.
check_zip_code_served_toolVia system eventValidates ZIP code against service area.
check_product_or_service_availabilityVia system eventValidates product/service availability.

Conversation history requirements summary

Requires full historyTools
truecancel_booking_tool, send_manage_booking_url_tool, send_sms_tool (conditional), end_conversation_tool
falsecheck_availability_tool, create_booking_tool, search_booking_tool, send_email_tool, transfer_call_tool, create_meeting_tool, check_zip_code_served_tool, check_product_or_service_availability

Tools that require conversation history need the full context to evaluate multi-turn conditions (e.g., verifying that a booking was previously searched before allowing cancellation). Tools without this requirement can be evaluated solely from the latest agent answer, which is faster and more efficient.


Changelog

Tools reference: initial publication

Published complete reference for all 12 built-in NAF tools with conditions, activation attributes, conflict policies, execution flows, and conversation history requirements.