How to enable changing an IVR menu (or other System Recording) from an extension or remote location

The normal method for creating an IVR menu recording, or other custom system recording is to use the System Recordings feature in FreePBX. But starting in FreePBX 2.5, you also have the ability to allow any system recording that you have created (that is, one NOT created using built-in recordings) to be changed by dialing a feature code. Once you have created or uploaded a System Recording, you should be able to find it listed in the right-hand menu on the System Recordings page. Click on that link, and it will take you to the "Edit Recording" page for that particular recording. On that page, you should see a "Link to Feature Code" checkbox. Checking that box will allow the system recording to be changed from an extension by dialing the Optional Feature Code shown to the right of the checkbox. If you don't like the Optional Feature Code assigned by default, you can change it using the Feature Code Admin feature.

If you check the box, you should also consider setting a Feature Code Password so that no one can change the recording without knowing the password.

That is all you need to do allow a system recording to be changed from any of your extensions. But if you want to be able to call in from outside to change the recording, simply create a new Misc Destination and select the feature code from the dropdown (it will begin with "Edit Recording:"). You can then use that Misc Destination as a "hidden" option (one that's not announced to callers) from your main IVR menu (or another IVR menu), or you could even make it the destination for one of your DID's.

Note that whenever you change a system recording in this manner, the previous recording is irretrievably lost (other than by retrieving it from a system backup - you do have backups, don't you)? So if you have a professionally produced IVR recording, but want to give someone the ability to remotely change it in an emergency, make sure you back up the recording somewhere else on the system. The original can be found in the /var/lib/asterisk/sounds/custom directory, and you can either make a backup copy to another directory, or you can make a copy with a different filename in the same directory. You will then either have to restore the original recording manually once the emergency has passed (by copying the backup copy over the changed recording), or you could set up a cron job to copy the save original recording over the (possibly) changed recording at a specific time every day, or if you are creative you could even use a bit of dialplan code in /etc/asterisk/extensions_custom.conf to restore the original recording, then use the Custom Destinations module (under the "Tools" tab) to assign it a feature code if desired.

Credit to user "SkykingOH" in this thread for pointing out the "Link to Feature Code" functionality in FreePBX 2.5 and above:
http://www.freepbx.org/forum/freepbx/users/handling-of-the-ivr-voice-rec...