> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes. # FunctionResult > Fluent interface for returning responses and actions from SWAIG tool functions. [tool]: /docs/server-sdks/reference/typescript/agents/agent-base#tool [define-tool]: /docs/server-sdks/reference/typescript/agents/agent-base/define-tool [agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base [swaig-function]: /docs/swml/reference/calling/ai/swaig/functions [swml-swaig-functions-reference]: /docs/swml/reference/calling/ai/swaig/functions [setresponse]: /docs/server-sdks/reference/typescript/agents/function-result/set-response [setpostprocess]: /docs/server-sdks/reference/typescript/agents/function-result/set-post-process [addaction]: /docs/server-sdks/reference/typescript/agents/function-result/add-action [addactions]: /docs/server-sdks/reference/typescript/agents/function-result/add-actions [todict]: /docs/server-sdks/reference/typescript/agents/function-result/to-dict [connect]: /docs/server-sdks/reference/typescript/agents/function-result/connect [hangup]: /docs/server-sdks/reference/typescript/agents/function-result/hangup [hold]: /docs/server-sdks/reference/typescript/agents/function-result/hold [swmltransfer]: /docs/server-sdks/reference/typescript/agents/function-result/swml-transfer [say]: /docs/server-sdks/reference/typescript/agents/function-result/say [waitforuser]: /docs/server-sdks/reference/typescript/agents/function-result/wait-for-user [stop]: /docs/server-sdks/reference/typescript/agents/function-result/stop [playbackgroundfile]: /docs/server-sdks/reference/typescript/agents/function-result/play-background-file [stopbackgroundfile]: /docs/server-sdks/reference/typescript/agents/function-result/stop-background-file [recordcall]: /docs/server-sdks/reference/typescript/agents/function-result/record-call [stoprecordcall]: /docs/server-sdks/reference/typescript/agents/function-result/stop-record-call [tap]: /docs/server-sdks/reference/typescript/agents/function-result/tap [stoptap]: /docs/server-sdks/reference/typescript/agents/function-result/stop-tap [updateglobaldata]: /docs/server-sdks/reference/typescript/agents/function-result/update-global-data [removeglobaldata]: /docs/server-sdks/reference/typescript/agents/function-result/remove-global-data [setmetadata]: /docs/server-sdks/reference/typescript/agents/function-result/set-metadata [removemetadata]: /docs/server-sdks/reference/typescript/agents/function-result/remove-metadata [swmlchangestep]: /docs/server-sdks/reference/typescript/agents/function-result/swml-change-step [swmlchangecontext]: /docs/server-sdks/reference/typescript/agents/function-result/swml-change-context [switchcontext]: /docs/server-sdks/reference/typescript/agents/function-result/switch-context [swmluserevent]: /docs/server-sdks/reference/typescript/agents/function-result/swml-user-event [simulateuserinput]: /docs/server-sdks/reference/typescript/agents/function-result/simulate-user-input [togglefunctions]: /docs/server-sdks/reference/typescript/agents/function-result/toggle-functions [enablefunctionsontimeout]: /docs/server-sdks/reference/typescript/agents/function-result/enable-functions-on-timeout [adddynamichints]: /docs/server-sdks/reference/typescript/agents/function-result/add-dynamic-hints [cleardynamichints]: /docs/server-sdks/reference/typescript/agents/function-result/clear-dynamic-hints [setendofspeechtimeout]: /docs/server-sdks/reference/typescript/agents/function-result/set-end-of-speech-timeout [setspeecheventtimeout]: /docs/server-sdks/reference/typescript/agents/function-result/set-speech-event-timeout [updatesettings]: /docs/server-sdks/reference/typescript/agents/function-result/update-settings [enableextensivedata]: /docs/server-sdks/reference/typescript/agents/function-result/enable-extensive-data [replaceinhistory]: /docs/server-sdks/reference/typescript/agents/function-result/replace-in-history [sendsms]: /docs/server-sdks/reference/typescript/agents/function-result/send-sms [pay]: /docs/server-sdks/reference/typescript/agents/function-result/pay [createpaymentprompt]: /docs/server-sdks/reference/typescript/agents/function-result/create-payment-prompt [createpaymentaction]: /docs/server-sdks/reference/typescript/agents/function-result/create-payment-action [createpaymentparameter]: /docs/server-sdks/reference/typescript/agents/function-result/create-payment-parameter [siprefer]: /docs/server-sdks/reference/typescript/agents/function-result/sip-refer [joinroom]: /docs/server-sdks/reference/typescript/agents/function-result/join-room [joinconference]: /docs/server-sdks/reference/typescript/agents/function-result/join-conference [executeswml]: /docs/server-sdks/reference/typescript/agents/function-result/execute-swml [executerpc]: /docs/server-sdks/reference/typescript/agents/function-result/execute-rpc [rpcdial]: /docs/server-sdks/reference/typescript/agents/function-result/rpc-dial [rpcaimessage]: /docs/server-sdks/reference/typescript/agents/function-result/rpc-ai-message [rpcaiunhold]: /docs/server-sdks/reference/typescript/agents/function-result/rpc-ai-unhold `FunctionResult` is the return type for all SWAIG tool functions. It wraps a response message (text for the AI to speak) and an ordered list of actions (transfers, SMS, data updates, context switches, and more). Every method returns `this`, so you can chain calls into a single fluent expression. Returned from functions defined with [`defineTool()`][define-tool] on [`AgentBase`][agentbase]. > **Info** > > FunctionResult builds the response payload for a [SWAIG function][swaig-function]. > See the [SWML SWAIG functions reference][swml-swaig-functions-reference] for the > full response format specification. ## **Properties** **`response`** `string` — default: '' Text the AI speaks back to the caller after the function executes. --- **`action`** `Record[]` — default: \[] Ordered list of action objects to execute. Actions run sequentially in the order they were added. --- **`postProcess`** `boolean` — default: false When `true`, the AI speaks the response and takes one more conversational turn with the user before executing actions. When `false` (default), actions execute immediately after the response. --- ## **Example** ```typescript {10} import { AgentBase, FunctionResult } from '@signalwire/sdk'; const agent = new AgentBase({ name: 'my-agent', route: '/agent' }); agent.setPromptText('You are a helpful assistant.'); agent.defineTool({ name: 'transfer_to_billing', description: 'Transfer the caller to billing', handler: (args, rawData) => { return new FunctionResult( "I'll transfer you to billing. Anything else first?", true // postProcess ) .updateGlobalData({ transferred: true }) .sendSms({ toNumber: '+15551234567', fromNumber: '+15559876543', body: 'You are being transferred to billing.', }) .connect('+15551234567', true); }, }); agent.run(); ``` ## **Fluent Chaining Pattern** Every method on `FunctionResult` returns `this`, so you build complex responses in a single expression. Actions execute in the order they are added. > **Warning** > > Terminal actions like `connect(destination, true)` and `hangup()` end the call flow. > Place them **last** in the chain so that preceding actions (data updates, SMS, etc.) > have a chance to execute. ```typescript {12} import { AgentBase, FunctionResult } from '@signalwire/sdk'; const agent = new AgentBase({ name: 'my-agent', route: '/agent' }); agent.setPromptText('You are a helpful assistant.'); agent.defineTool({ name: 'transfer_now', description: 'Transfer the caller', handler: (args, rawData) => { // Data update + SMS execute before the terminal transfer return new FunctionResult('Transferring you now.') .updateGlobalData({ transferred: true }) .sendSms({ toNumber: '+15551234567', fromNumber: '+15559876543', body: 'Your call is being transferred.', }) .connect('+15551234567', true); // terminal — goes last }, }); agent.run(); ``` ## **Methods** ### Core #### [setResponse](/docs/server-sdks/reference/typescript/agents/function-result/set-response) Set or replace the response text on a FunctionResult. #### [setPostProcess](/docs/server-sdks/reference/typescript/agents/function-result/set-post-process) Enable or disable post-processing on a FunctionResult. #### [addAction](/docs/server-sdks/reference/typescript/agents/function-result/add-action) Append a raw action to the FunctionResult action list. #### [addActions](/docs/server-sdks/reference/typescript/agents/function-result/add-actions) Append multiple raw actions to the FunctionResult action list. #### [toDict](/docs/server-sdks/reference/typescript/agents/function-result/to-dict) Serialize a FunctionResult to the SWAIG response format. ### Call Control #### [connect](/docs/server-sdks/reference/typescript/agents/function-result/connect) Transfer or connect the call to another destination. #### [hangup](/docs/server-sdks/reference/typescript/agents/function-result/hangup) End the call immediately. #### [hold](/docs/server-sdks/reference/typescript/agents/function-result/hold) Put the call on hold with an optional timeout. #### [swmlTransfer](/docs/server-sdks/reference/typescript/agents/function-result/swml-transfer) Transfer the call to a SWML endpoint with a return message. ### Speech #### [say](/docs/server-sdks/reference/typescript/agents/function-result/say) Make the AI agent speak specific text immediately. #### [waitForUser](/docs/server-sdks/reference/typescript/agents/function-result/wait-for-user) Control how the agent pauses and waits for user input. #### [stop](/docs/server-sdks/reference/typescript/agents/function-result/stop) Stop the agent execution immediately. ### Media #### [playBackgroundFile](/docs/server-sdks/reference/typescript/agents/function-result/play-background-file) Play an audio or video file in the background during a call. #### [stopBackgroundFile](/docs/server-sdks/reference/typescript/agents/function-result/stop-background-file) Stop the currently playing background audio file. #### [recordCall](/docs/server-sdks/reference/typescript/agents/function-result/record-call) Start recording the call in the background. #### [stopRecordCall](/docs/server-sdks/reference/typescript/agents/function-result/stop-record-call) Stop an active background call recording. #### [tap](/docs/server-sdks/reference/typescript/agents/function-result/tap) Stream call audio to an external endpoint via WebSocket or RTP. #### [stopTap](/docs/server-sdks/reference/typescript/agents/function-result/stop-tap) Stop an active media tap stream. ### Data #### [updateGlobalData](/docs/server-sdks/reference/typescript/agents/function-result/update-global-data) Set or update key-value pairs in the global session data. #### [removeGlobalData](/docs/server-sdks/reference/typescript/agents/function-result/remove-global-data) Remove one or more keys from the global session data. #### [setMetadata](/docs/server-sdks/reference/typescript/agents/function-result/set-metadata) Set function-scoped metadata key-value pairs. #### [removeMetadata](/docs/server-sdks/reference/typescript/agents/function-result/remove-metadata) Remove one or more keys from the current function's metadata store. ### Context Navigation #### [swmlChangeStep](/docs/server-sdks/reference/typescript/agents/function-result/swml-change-step) Transition to a different step within the current conversation context. #### [swmlChangeContext](/docs/server-sdks/reference/typescript/agents/function-result/swml-change-context) Switch to a different conversation context. #### [switchContext](/docs/server-sdks/reference/typescript/agents/function-result/switch-context) Perform an advanced context switch with prompt replacement and history control. ### Events #### [swmlUserEvent](/docs/server-sdks/reference/typescript/agents/function-result/swml-user-event) Send a custom user event through SWML for real-time UI updates. #### [simulateUserInput](/docs/server-sdks/reference/typescript/agents/function-result/simulate-user-input) Inject text as simulated user speech input. ### Functions #### [toggleFunctions](/docs/server-sdks/reference/typescript/agents/function-result/toggle-functions) Enable or disable specific SWAIG functions at runtime. #### [enableFunctionsOnTimeout](/docs/server-sdks/reference/typescript/agents/function-result/enable-functions-on-timeout) Allow SWAIG function calls when a speaker timeout occurs. ### Hints #### [addDynamicHints](/docs/server-sdks/reference/typescript/agents/function-result/add-dynamic-hints) Add speech recognition hints dynamically during a call. #### [clearDynamicHints](/docs/server-sdks/reference/typescript/agents/function-result/clear-dynamic-hints) Remove all dynamically added speech recognition hints. ### Settings #### [setEndOfSpeechTimeout](/docs/server-sdks/reference/typescript/agents/function-result/set-end-of-speech-timeout) Adjust the end-of-speech silence timeout for speech recognition. #### [setSpeechEventTimeout](/docs/server-sdks/reference/typescript/agents/function-result/set-speech-event-timeout) Adjust the speech event timeout for noisy environments. #### [updateSettings](/docs/server-sdks/reference/typescript/agents/function-result/update-settings) Update AI runtime settings dynamically during a call. #### [enableExtensiveData](/docs/server-sdks/reference/typescript/agents/function-result/enable-extensive-data) Send full data to the LLM for the current turn only. #### [replaceInHistory](/docs/server-sdks/reference/typescript/agents/function-result/replace-in-history) Control how this function call appears in the AI's conversation history. ### SMS #### [sendSms](/docs/server-sdks/reference/typescript/agents/function-result/send-sms) Send an SMS or MMS message from a tool function. ### Payment #### [pay](/docs/server-sdks/reference/typescript/agents/function-result/pay) Collect and process a credit card payment during a call. #### [createPaymentPrompt](/docs/server-sdks/reference/typescript/agents/function-result/create-payment-prompt) Build a payment prompt object for use with pay(). #### [createPaymentAction](/docs/server-sdks/reference/typescript/agents/function-result/create-payment-action) Build a single action entry for a payment prompt. #### [createPaymentParameter](/docs/server-sdks/reference/typescript/agents/function-result/create-payment-parameter) Build a parameter entry for the pay() method. ### SIP #### [sipRefer](/docs/server-sdks/reference/typescript/agents/function-result/sip-refer) Send a SIP REFER message to transfer the call in a SIP environment. ### Rooms and Conferences #### [joinRoom](/docs/server-sdks/reference/typescript/agents/function-result/join-room) Join a SignalWire room for multi-party communication. #### [joinConference](/docs/server-sdks/reference/typescript/agents/function-result/join-conference) Join an ad-hoc audio conference with extensive configuration options. ### SWML and RPC #### [executeSwml](/docs/server-sdks/reference/typescript/agents/function-result/execute-swml) Execute a raw SWML document as an action. #### [executeRpc](/docs/server-sdks/reference/typescript/agents/function-result/execute-rpc) Execute a generic RPC method on a call. #### [rpcDial](/docs/server-sdks/reference/typescript/agents/function-result/rpc-dial) Dial out to a phone number with a destination SWML URL via RPC. #### [rpcAiMessage](/docs/server-sdks/reference/typescript/agents/function-result/rpc-ai-message) Inject a message into the AI agent running on another call. #### [rpcAiUnhold](/docs/server-sdks/reference/typescript/agents/function-result/rpc-ai-unhold) Release another call from hold via RPC. > Fluent interface for returning responses and actions from SWAIG tool functions. ## Docs - [addAction](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/add-action.md): Append a raw action to the FunctionResult action list. - [addActions](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/add-actions.md): Append multiple raw actions to the FunctionResult action list. - [addDynamicHints](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/add-dynamic-hints.md): Add speech recognition hints dynamically during a call. - [clearDynamicHints](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/clear-dynamic-hints.md): Remove all dynamically added speech recognition hints. - [connect](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/connect.md): Transfer or connect the call to another destination. - [createPaymentAction](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/create-payment-action.md): Build a single action entry for a payment prompt. - [createPaymentParameter](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/create-payment-parameter.md): Build a parameter entry for the pay() method. - [createPaymentPrompt](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/create-payment-prompt.md): Build a payment prompt object for use with pay(). - [enableExtensiveData](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/enable-extensive-data.md): Send full data to the LLM for the current turn only. - [enableFunctionsOnTimeout](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/enable-functions-on-timeout.md): Allow SWAIG function calls when a speaker timeout occurs. - [executeRpc](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/execute-rpc.md): Execute a generic RPC method on a call. - [executeSwml](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/execute-swml.md): Execute a raw SWML document as an action. - [hangup](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/hangup.md): End the call immediately. - [hold](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/hold.md): Put the call on hold with an optional timeout. - [joinConference](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/join-conference.md): Join an ad-hoc audio conference with extensive configuration options. - [joinRoom](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/join-room.md): Join a SignalWire room for multi-party communication. - [pay](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/pay.md): Collect and process a credit card payment during a call. - [playBackgroundFile](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/play-background-file.md): Play an audio file in the background during a call. - [recordCall](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/record-call.md): Start recording the call in the background. - [removeGlobalData](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/remove-global-data.md): Remove one or more keys from the global session data. - [removeMetadata](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/remove-metadata.md): Remove one or more keys from the current function's metadata store. - [replaceInHistory](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/replace-in-history.md): Control how this function call appears in the AI's conversation history. - [rpcAiMessage](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/rpc-ai-message.md): Inject a message into the AI agent running on another call. - [rpcAiUnhold](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/rpc-ai-unhold.md): Release another call from hold via RPC. - [rpcDial](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/rpc-dial.md): Dial out to a phone number with a destination SWML URL via RPC. - [say](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/say.md): Make the AI agent speak specific text immediately. - [sendSms](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/send-sms.md): Send an SMS or MMS message from a tool function. - [setEndOfSpeechTimeout](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/set-end-of-speech-timeout.md): Adjust the end-of-speech silence timeout for speech recognition. - [setMetadata](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/set-metadata.md): Set function-scoped metadata key-value pairs. - [setPostProcess](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/set-post-process.md): Enable or disable post-processing on a FunctionResult. - [setResponse](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/set-response.md): Set or replace the response text on a FunctionResult. - [setSpeechEventTimeout](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/set-speech-event-timeout.md): Adjust the speech event timeout for noisy environments. - [simulateUserInput](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/simulate-user-input.md): Inject text as simulated user speech input. - [sipRefer](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/sip-refer.md): Send a SIP REFER message to transfer the call in a SIP environment. - [stop](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/stop.md): Stop the agent execution immediately. - [stopBackgroundFile](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/stop-background-file.md): Stop the currently playing background audio file. - [stopRecordCall](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/stop-record-call.md): Stop an active background call recording. - [stopTap](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/stop-tap.md): Stop an active media tap stream. - [switchContext](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/switch-context.md): Perform an advanced context switch with prompt replacement and history control. - [swmlChangeContext](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/swml-change-context.md): Switch to a different conversation context. - [swmlChangeStep](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/swml-change-step.md): Transition to a different step within the current conversation context. - [swmlTransfer](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/swml-transfer.md): Transfer the call to a SWML endpoint with a custom AI response. - [swmlUserEvent](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/swml-user-event.md): Send a custom user event through SWML for real-time UI updates. - [tap](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/tap.md): Stream call audio to an external endpoint via WebSocket or RTP. - [toDict](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/to-dict.md): Serialize a FunctionResult to the SWAIG response format. - [toggleFunctions](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/toggle-functions.md): Enable or disable specific SWAIG functions at runtime. - [updateGlobalData](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/update-global-data.md): Set or update key-value pairs in the global session data. - [updateSettings](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/update-settings.md): Update AI runtime settings dynamically during a call. - [waitForUser](https://signalwire.com/docs/server-sdks/reference/typescript/agents/function-result/wait-for-user.md): Control how the agent pauses and waits for user input.