The NAF contains a tools system that automatically triggers backend actions based on agent commitments. After each conversational turn, an LLM analyzes the agent's latest message against a set of available tools and determines which tools need to be called immediately to fulfill the agent's promises.
How It Works
The Problem: Conversational agents can make promises to users, but without an execution layer, these remain unfulfilled commitments.
The Solution: After each agent turn, the system:
Examines the latest agent message
Evaluates it against all available tool conditions
Triggers any tools whose conditions are met
Executes the promised actions automatically
Available Tools
check_availability_tool
Purpose: Search for available reservation slots.
Conditions: agentPromised: The agent clearly states they are going to search for available slots or look up new availability exactly in their latest message (enclosed in <LatestConvoAgentAnswer>)
create_booking_tool
Purpose: Create a reservation in the booking system.
Conditions: agentPromised: The agent clearly states that they are going to submit a booking or make a reservation right now. So their <LatestConvoAgentAnswer> should contain something like: "I'm submitting your booking now...", "I will make your reservation now...", "I will submit your booking in a moment...", etc.
search_booking_tool
Purpose: Search the user's bookings created via the agent.
Conditions: agentPromised: The agent clearly states that they are going to check user's existing reservations right now. So their <LatestConvoAgentAnswer> should contain something like: "Give me a moment to search your previous bookings, I will get back to you shortly..." or "Let me search your bookings...", etc.
cancel_booking_tool
Purpose: Cancel an existing reservation in the booking system.
Conditions:
agentPromised: The agent clearly states that they are going to cancel an existing booking right now. So their<LatestConvoAgentAnswer>should contain something like: "Give me a moment to cancel your booking..." or "Let me cancel your booking...", etc.bookingExist: During the conversation the agent actually checked existing user's bookings and found the exact one it is going to cancel now.
send_manage_booking_url_tool
Purpose: Send an SMS URL to the user with the link to manage their previously made booking.
Conditions:
agentPromised:<LatestConvoAgentAnswer>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 right now. For example: "I will send you an SMS with the link to cancel this booking.", "I will send you an SMS with the link to manage this booking."bookingExist: The agent has already checked the user's existing bookings and identified the exact booking for which the manage-link SMS will be sent.
create_meeting_tool
Purpose: Create a meeting in the calendar or in the integration.
Conditions: agentPromised: The agent clearly states that they are going to create a meeting right now. So their <LatestConvoAgentAnswer> should contain something like: "Give me a moment, I will set up the meeting...", "I will create a meeting right now..." or "I will send the calendar invite right now...", etc.
transfer_call_tool
Purpose: Transfer the call to a human representative.
Conditions: agentPromised: The agent clearly states that right now they are going to exactly connect, transfer, forward, or put you through or they are connecting, forwarding, transferring the call. So their <LatestConvoAgentAnswer> should contain something like: "I will connect you with a manager right away...", "I will connect you with a co-worker right away...", "I will transfer you to our voicemail...", "I am transferring you to...", "I will put you through to...", etc.
end_conversation_tool
Purpose: End the conversation from the agent side as concluded and finished.
Conditions:
mutualGoodbye: The agent and the User said goodbye to each other based on<Conversation>, the dialogue contains explicit farewell phrases from both sides OR the user expresses an intention to end the conversation (e.g., "Thank you", "No, thank you") and the agent acknowledges it (e.g., "You're welcome, feel free to reach out", "Have a great day") OR the User is an automated voicemail system and the Agent has finished leaving a message.noMoreQuestions: The agent and the user have no outstanding questions or unresolved topics, and both parties are ready to conclude the conversation. Note: In voicemail scenarios, a request for a callback (e.g., "Please call me back") is considered a closing instruction, not an unresolved topic.agentFarewell:<LatestConvoAgentAnswer>includes a clear farewell or closing phrase (e.g., "Goodbye", "Have a great day", "You're welcome, take care") and does not introduce any new questions, requests (except for final closing instructions like "please call back"), or topics.explicitConversationEnd: In some cases the agent explicitly says that they are going to end the conversation right now.
send_email_tool
Purpose: Send an email to the User.
Conditions: agentPromised: The agent clearly states that they are going to send an email. So their <LatestConvoAgentAnswer> should contain the explicit keyword "email", e.g.: "I will send you an email shortly...", "Give me a moment, I will send you an email...", "I will send an email with the appointment request details.", "I'm sending an email...", "Let me try sending it (considering email) again...", "I will resend an email...", etc.
send_sms_tool
Purpose: Send an SMS to the User.
Conditions:
agentPromised: The agent clearly states that they are going to send an SMS. So their<LatestConvoAgentAnswer>should contain the explicit keywords "SMS" or "text message", e.g.: "I will send you an SMS / text message shortly...", "Give me a moment, I will send you an SMS / text message...", "I will send an SMS / text message with the appointment request details.", "I'm sending a text message / SMS...", "Let me try sending it (considering SMS or text message) again...", "I will resend an SMS / text message...", etc.notRelatedToExistingBooking(conditional): The SMS the agent wants to send is not related to cancelling / managing of existing reservation. Otherwise, this tool should not be used as such case is handled separately.
check_zip_code_served_tool
Purpose: Double check if user's provided zip code is served by the business.
Conditions: agentPromised: The agent states that they are going to check / double-check if user's zip code is served. The agent asks to wait while the agent checks.
check_product_or_service_availability
Purpose: Double check if requested service or product is served/sold by the business.
Conditions:
agentPromised: The agent states that they are going to check / double-check if user's requested product or service is available. The agent asks for wait while the agent checks.productOrServiceProvided: The user inquired about some product or service they want to purchase.notTimeAvailabilityRequest: This tool must not be called if the agent checks availability in terms of open time slots, only about the product or service itself.
