How do I hangup or disconnect internal SIP call without Busy

I have added extensions to my dialplan that users may dial to trigger changes in Asterisk functionality (night mode, call forwarding, etc). The dialplan rules for these extensions modify Asterisk DB values, and then hang up. The problem I am having is that the caller hears a fast busy signal after the function completes. Right now I am calling the following application at the end of the function:

exten => 9999,1,NoOp(Toggle function)
<<< do a bunch of stuff >>>
exten => 9999,n,Hangup(16)

This results in Asterisk sending a “SIP/2.0 603 Declined” to the phone. Is there a way to make the call end normally so they don’t get the fast busy? Or is there a better way to change internal states in Asterisk from a SIP phone?

Answer the call.