{"id":198,"date":"2016-07-04T10:32:52","date_gmt":"2016-07-04T10:32:52","guid":{"rendered":"http:\/\/symbioticindia.in\/docu\/?p=198"},"modified":"2016-07-04T10:32:52","modified_gmt":"2016-07-04T10:32:52","slug":"pbx-cheat-sheet","status":"publish","type":"post","link":"http:\/\/symbioticindia.in\/docu\/2016\/07\/04\/pbx-cheat-sheet\/","title":{"rendered":"PBX Cheat Sheet"},"content":{"rendered":"<p><em>Notes on FreePBX, IncrediblePBX, and the like.<\/em><\/p>\n<h1 id=\"installation\">Installation<\/h1>\n<h2 id=\"copy-the-iso-to-the-sdhc-card\">Copy the ISO to the SDHC card<\/h2>\n<ul>\n<li>Download IncrediblePBX for Pi. See <a href=\"http:\/\/nerdvittles.com\/?p=3026\">http:\/\/nerdvittles.com\/?p=3026<\/a><\/li>\n<li>Unpack the tarball.<\/li>\n<li>Put the SDHC card in the card reader (assumes Linux).<\/li>\n<li>Run the <code>make-sdhc<\/code> script that came out of the tarball.<\/li>\n<\/ul>\n<h2 id=\"put-the-pi-on-the-network\">Put the Pi on the network<\/h2>\n<p>For security reasons, do <em>not<\/em> put the Pi outside your firewall!<\/p>\n<h2 id=\"boot-the-pi\">Boot the Pi.<\/h2>\n<p>Put the SDHC card in the Pi, attach the HDMI port to a monitor, and boot.<\/p>\n<h2 id=\"initial-configuration\">Initial configuration<\/h2>\n<ul>\n<li>Log in as <code>root<\/code>. Initial password is <code>raspberry<\/code>.<\/li>\n<li>Allow IncrediblePBX to update itself.<\/li>\n<li>At the bash prompt, run <code>raspi-config<\/code>.<\/li>\n<li>If the SD card has more than 4Gb, choose the menu item to expand the file<br \/>\nsystem. (The ISO is only 4Gb, and Linux will only see that much, unless<br \/>\nyou expand the file system.)<\/li>\n<li>Possibly select the overclock option, as well.<\/li>\n<li>Enable the SSH daemon.<\/li>\n<li>Reboot.<\/li>\n<\/ul>\n<p>In a terminal window on another machine, <code>ssh<\/code> into the PBX machine.<\/p>\n<h2 id=\"configure-mysql\">Configure MySQL<\/h2>\n<p>The docs I\u2019ve seen don\u2019t say what the IncrediblePBX distribution uses for<br \/>\nthe MySQL root password, and it\u2019s useful to be able to get into MySQL. Set<br \/>\nthe root password as follows:<\/p>\n<pre><code># \/etc\/init.d\/mysql stop\r\n# mysqld_safe --skip-grant-tables &amp;\r\n# mysql -u root\r\nmysql&gt; use mysql;\r\nmysql&gt; update user set password=PASSWORD(\"NEW-PASSWORD\") where user='root';\r\nmysql&gt; flush privileges;\r\nmysql&gt; quit\r\n# \/etc\/init.d\/mysql restart\r\n# mysql -u root -p\r\n<\/code><\/pre>\n<h2 id=\"change-the-host-name\">Change the host name<\/h2>\n<p>Edit <code>\/etc\/hostname<\/code> to reflect your desired host name. Then, run:<\/p>\n<pre><code># hostname $(cat \/etc\/hostname)\r\n<\/code><\/pre>\n<h2 id=\"install-and-configure-postfix\">Install and configure postfix<\/h2>\n<p>This is only necessary if you prefer <em>postfix<\/em> to the default <em>exim<\/em>.<\/p>\n<pre><code># apt-get install postfix\r\n<\/code><\/pre>\n<p>A smart host relay is sufficient. Having a configured mail server allows<br \/>\nthe PBX to email voice mail audio files.<\/p>\n<h3 id=\"using-gmail-as-a-relay\">Using Gmail as a relay<\/h3>\n<p>First, you\u2019ll need TLS support, which requires installing some supplementary<br \/>\npackages.<\/p>\n<pre><code># apt-get install libsasl2-modules\r\n<\/code><\/pre>\n<p>Next, add the following to <code>\/etc\/postfix\/main.cf<\/code><\/p>\n<pre><code># Use Gmail as smart relay. See\r\n# http:\/\/mhawthorne.net\/posts\/postfix-configuring-gmail-as-relay.html and\r\n# http:\/\/anothersysadmin.wordpress.com\/2009\/02\/06\/postfix-as-relay-to-a-smtp-requiring-authentication\/\r\nrelayhost = [smtp.gmail.com]:587\r\nsmtp_sasl_auth_enable = yes\r\nsmtp_sasl_password_maps = hash:\/etc\/postfix\/sasl_password\r\nsmtp_sasl_security_options = noanonymous\r\n\r\nsmtp_use_tls = yes\r\nsmtp_tls_security_level = secure\r\nsmtp_tls_mandatory_protocols = TLSv1\r\nsmtp_tls_mandatory_ciphers = high\r\nsmtp_tls_secure_cert_match = nexthop\r\nsmtp_tls_CAfile = \/etc\/ssl\/certs\/ca-certificates.crt\r\n<\/code><\/pre>\n<p>Change <code>masquerade_domains<\/code> appropriately, as well.<\/p>\n<p>Finally, you have to add authentication parameters. Create<br \/>\n<code>\/etc\/postfix\/sasl_password<\/code> with the following contents:<\/p>\n<pre><code>[smtp.gmail.com]:587 gmailuser:gmailpassword\r\n<\/code><\/pre>\n<p>Replace <code>gmailuser<\/code> with your Gmail login. If you use a Google Apps<br \/>\ndomain account, use your domain email address as the user.<\/p>\n<p>Then, run these commands:<\/p>\n<pre><code># cd \/etc\/postfix\r\n# postmap sasl_password\r\n# chown postfix sasl_password*\r\n<\/code><\/pre>\n<h2 id=\"adjust-your-routers-firewall\">Adjust your router\u2019s firewall<\/h2>\n<p>With your Pi behind your firewall, you\u2019ll have to open some ports. Configure<br \/>\nyour firewall to pass UDP ports 5060, 5061, and 10,000 through 20,000 to and<br \/>\nfrom the Pi. If you\u2019re using a Linux-based <em>iptables<\/em> firewall, the following<br \/>\nrules should do the trick<\/p>\n<pre><code>EXT_IF=...   # The external, Internet visible interface (e.g., eth0)\r\nPBX=...      # The internal IP address of your Raspberry Pi PBX machine\r\n\r\niptables -t nat -A PREROUTING -i $EXT_IF -p udp -m udp \\\r\n         -dport 10000:20000 -j DNAT --to-destination $PBX\r\niptables -t nat -A PREROUTING -i $EXT_IF -p udp -m udp \\\r\n         -dport 5060:5061 -j DNAT --to-destination $PBX\r\n<\/code><\/pre>\n<h2 id=\"configure-the-pbx\">Configure the PBX<\/h2>\n<ul>\n<li>Connect to the web server on the Pi.<\/li>\n<li>Select the administration logo.<\/li>\n<li>Log in as <code>admin<\/code>, with password <code>admin<\/code>.<\/li>\n<li>Change the password, under the Admin &gt; Administrators menu.<\/li>\n<li>Under the Settings menu, select Asterisk Settings.<\/li>\n<li>Set the NAT configuration.<\/li>\n<\/ul>\n<h1 id=\"configuring-trunks\">Configuring Trunks<\/h1>\n<h2 id=\"google-voice\">Google Voice<\/h2>\n<p>Log into your Google Voice account. In <em>Settings<\/em>, set:<\/p>\n<ul>\n<li><strong>Call Screening<\/strong> \u2013 <em>off<\/em><\/li>\n<li><strong>Caller ID (incoming)<\/strong> \u2013 <em>Display caller\u2019s number<\/em><\/li>\n<li><strong>Do Not Disturb<\/strong> \u2013 <em>off<\/em><\/li>\n<li><strong>Missed Calls<\/strong> \u2013 both options should be <em>unchecked<\/em><\/li>\n<li><strong>Call Options (Enable Recording)<\/strong> \u2013 <em>off<\/em><\/li>\n<li><strong>Global Spam Filtering<\/strong> \u2013 <em>on<\/em><\/li>\n<\/ul>\n<p><em>NOTE<\/em> Disable 2-factor authentication on the account, or the PBX won\u2019t be<br \/>\nable to log in.<\/p>\n<p>Next, set up a trunk in the PBX. Under <em>Connectivity<\/em>, select<br \/>\n<em>Google Voice (Motif)<\/em>. Create a new Google Voice trunk:<\/p>\n<table>\n<thead>\n<tr>\n<th>Typical Settings<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Google Voice Username<\/td>\n<td><em>google username<\/em> (see Note 1)<\/td>\n<\/tr>\n<tr>\n<td>Google Voice Password<\/td>\n<td><em>password<\/em><\/td>\n<\/tr>\n<tr>\n<td>Google Voice Phone Number<\/td>\n<td><em>phone number<\/em> (see Note 2)<\/td>\n<\/tr>\n<tr>\n<td>Edit Trunk<\/td>\n<td>checked<\/td>\n<\/tr>\n<tr>\n<td>Edit Outbound Routes<\/td>\n<td>checked<\/td>\n<\/tr>\n<tr>\n<td>Send Unanswered Calls to Google Voicemail<\/td>\n<td>_un_checked<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Leave all other settings alone.<\/p>\n<p><strong>Note 1<\/strong>: If you\u2019re using a regular Gmail account with Google voice, your<br \/>\nusername should be <em>only<\/em> your username, with no \u201c@gmail.com\u201d. If you\u2019re using<br \/>\na hosted Google Apps account, specify the username <em>and<\/em> the domain name.<\/p>\n<p><strong>Note 2<\/strong>: Specify the number without spaces or hyphens.<\/p>\n<p>You\u2019ll need to set an appropriate inbound route. (See below.) You can also<br \/>\nuse Google Voice as your outbound route.<\/p>\n<h2 id=\"vitelity\">Vitelity<\/h2>\n<h3 id=\"sample-trunk-configurations-using-a-subaccount\">Sample trunk configurations, using a subaccount<\/h3>\n<h4 id=\"outbound\">Outbound<\/h4>\n<p>Set <strong>Maximum Channels<\/strong> to 2.<\/p>\n<p>Set the <strong>Outbound Caller ID<\/strong> to the number for the DID you\u2019re using<br \/>\nfor outbound calls.<\/p>\n<p>Set the trunk name under <strong>Outgoing Settings<\/strong> (e.g., <code>vitel-out<\/code>).<\/p>\n<p>Set <strong>PEER Details<\/strong> under <strong>Outgoing Settings<\/strong> to something like the<br \/>\nfollowing. Replace the username and secret to correspond to the Vitelity<br \/>\nsubaccount.<\/p>\n<pre><code>type=friend\r\ndtmfmode=auto\r\nusername=subaccount_user\r\nsecret=subaccount_password\r\nfromuser=subaccount_user\r\ntrustrpid=yes\r\nsendrpid=yes\r\ncontext=from-trunk\r\ncanreinvite=no\r\nnat=yes\r\nhost=outbound.vitelity.net\r\n<\/code><\/pre>\n<h4 id=\"inbound\">Inbound<\/h4>\n<p>Set the trunk name under <strong>Incoming Settings<\/strong> (e.g., <code>vitel-in<\/code>).<\/p>\n<p>Set <strong>USER Details<\/strong> under <strong>Incoming Settings<\/strong> to something like the<br \/>\nfollowing. Replace the username and secret with the credentials of the<br \/>\nVitelity subaccount you\u2019re using.<\/p>\n<pre><code>type=friend\r\ndtmfmode=auto\r\nusername=subaccount_user\r\nsecret=subaccount_password\r\ncontext=from-trunk\r\ninsecure=port,invite\r\ncanreinvite=no\r\nnat=yes\r\nhost=inbound29.vitelity.net\r\n<\/code><\/pre>\n<p>Set the <strong>Register String<\/strong>. Again, replace the username and secret with<br \/>\nthe credentials of the Vitelity subaccount you\u2019re using.<\/p>\n<pre><code>subaccount_user:subaccount_password@inbound29.vitelity.net:5060\r\n<\/code><\/pre>\n<p>If inbound calls aren\u2019t working, be sure to set the provider route for the<br \/>\nDID(s) appropriately, via the DIDs page on the Vitelity customer portal.<\/p>\n<h1 id=\"configuring-routes\">Configuring routes<\/h1>\n<p>Configure your trunks. (See above)<\/p>\n<h3 id=\"inbound-route\">Inbound route<\/h3>\n<p>Define a new incoming route and set the <strong>DID Number<\/strong> field to the number<br \/>\nassociated with the trunk. You must ensure that the trunk passes the associated<br \/>\nDID number, or routing won\u2019t work.<\/p>\n<p>Be sure to define a destination (e.g., a ring group or extension.)<\/p>\n<p><strong>Google Voice Note<\/strong>: If you want to route from a Google Voice trunk, just<br \/>\ncreate a new route and put the Google Voice number in the <strong>DID Number<\/strong><br \/>\nfield.<\/p>\n<h3 id=\"outbound-route\">Outbound route<\/h3>\n<p>Define the route as normal, but be sure to use dial patterns so that outbound<br \/>\ncalls match the route.<\/p>\n<h4 id=\"configuration-for-a-single-default-outbound-route\">Configuration for a single default outbound route<\/h4>\n<table>\n<thead>\n<tr>\n<th>Route Settings<\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Route Name<\/td>\n<td><em>routename<\/em><\/td>\n<\/tr>\n<tr>\n<td>Route CID<\/td>\n<td><em>CID<\/em><\/td>\n<\/tr>\n<tr>\n<td>Route Password<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Route Type<\/td>\n<td>[ ] Emergency [ ] Intra-Company<\/td>\n<\/tr>\n<tr>\n<td>Music On Hold?<\/td>\n<td>[default]<\/td>\n<\/tr>\n<tr>\n<td>Time Group<\/td>\n<td>[\u2013Permanent Route\u2013]<\/td>\n<\/tr>\n<tr>\n<td>Route Position<\/td>\n<td>[\u2013No Change\u2013]<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>Additional Settings<\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Call Recording<\/td>\n<td>[Allow ]<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong>Dial Patterns that will use this Route<\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<tbody>\n<tr>\n<td>(\u2026\u2026.) + [\u2026\u2026..] | [1NXXNXXXXXX] \/ \u2026..]<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>(\u2026\u2026.) + [\u2026\u2026..] | [N11\u2026\u2026..] \/ \u2026..]<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>(\u2026\u2026.) + [\u2026\u2026..] | [NXXNXXXXXX.] \/ \u2026..]<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>(\u2026\u2026.) + [\u2026\u2026..] | [NXXXXXX\u2026.] \/ \u2026..]<\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>(Dots in the above indicate blanks.)<\/p>\n<h2 id=\"forwarding-to-an-external-number-after-so-many-rings\">Forwarding to an external number after so many rings<\/h2>\n<p>Two simple solutions:<\/p>\n<h3 id=\"follow-me\">Follow Me<\/h3>\n<ol>\n<li>Applications &gt; Follow Me<\/li>\n<li>Select the extension.<\/li>\n<li>Select <em>hunt<\/em> as the Ring Strategy.<\/li>\n<li>Add the number, with a trailing #, to the Follow-Me List.<\/li>\n<li>Optional: Adjust the ring time.<\/li>\n<\/ol>\n<p><strong>Note<\/strong>: If the target of an inbound route is a ring group, rather than an<br \/>\nextension, you must include a \u201c#\u201d on the end of the extension in the ring<br \/>\ngroup to force Follow Me behavior.<\/p>\n<h3 id=\"chained-ring-groups\">Chained ring groups<\/h3>\n<ol>\n<li>Put the external number in its own ring group (e.g., ring group #601).<\/li>\n<li>Set the \u201cDestination if no answer\u201d to \u201cVoicemail\u201d.<\/li>\n<li>Put the main extension in different ring group (e.g., ring group #600),<br \/>\nand point the inbound route at this ring group.<\/li>\n<li>In this primary ring group (#600), set the ring time appropriately.<\/li>\n<li>Set the \u201cDestination if no answer\u201d to go to the second ring group.<\/li>\n<\/ol>\n<h3 id=\"ensuring-that-the-original-caller-id-follows-a-forwarded-call\">Ensuring that the original caller ID follows a forwarded call<\/h3>\n<p>Go into Advanced Settings and change <strong>SIP trustrpid<\/strong> and <strong>SIP sendrpid<\/strong> to<br \/>\n<code>yes<\/code>.<\/p>\n<p>Also, make <em>sure<\/em> you don\u2019t have the Outbound CID set on the primary<br \/>\nextension.<\/p>\n<p><strong>NOTE<\/strong>: This strategy may not work. The DID provider may not honor the PBX\u2019s<br \/>\nattempt to pass along the original caller ID. (Mine doesn\u2019t; I always see the<br \/>\ncaller ID of the PBX\u2019s outbound trunk.)<\/p>\n<p>In that case, one solution is to modify the second ring group (#601, in the<br \/>\nexample above) so that \u201cConfirm Calls\u201d is checked. When the call is<br \/>\nforwarded, the PBX (which knows the original caller ID) will play a short<br \/>\nmessage (\u201cpress 1 to accept the call, 2 to reject it, 3 to listen to the<br \/>\ncaller ID information\u201d). This approach provides a way to allow the callee<br \/>\nto get the caller ID information, even though it\u2019s not passed along by the<br \/>\ntelco. <strong>Be sure to configure enough ring time on the second ring group to<br \/>\npermit the callee to listen to the message!<\/strong><\/p>\n<h2 id=\"ensuring-that-an-extension-only-uses-specific-outbound-routes\">Ensuring that an extension only uses specific outbound routes<\/h2>\n<p>This is useful if you have, say, a home line and an office line on the<br \/>\nsame PBX, and you want to ensure that each one uses a specific outbound route.<\/p>\n<p>Solutions proposed on the web include:<\/p>\n<ol>\n<li>Using the complicated, and unsupported, Custom Contexts module.<br \/>\n<strong>This is a potentially dangerous module that can totally bork your PBX.<\/strong><\/li>\n<li>Using something called Extension Routing, by SchmoozeCom; getting it<br \/>\nrequires a complicated registration procedure at SchmoozeCom, one that<br \/>\ndoesn\u2019t appear to work with Incredible PBX.<\/li>\n<li>Using a dial pattern to specify individual internal extension caller IDs<br \/>\non each outbound route.<\/li>\n<\/ol>\n<p>(I have not gotten this working yet.)<\/p>\n<h2 id=\"modifying-the-inbound-caller-id\">Modifying the inbound caller ID.<\/h2>\n<ul>\n<li>Install the Set Caller ID module. This module works as a filter.<\/li>\n<li>Create a new Set Caller ID, editing the inbound caller ID as appropriate.<\/li>\n<li>Set the new Set Caller ID\u2019s destination to be the desired extension or<br \/>\nring group. If adding a prefix (e.g., \u201cH\u201d to indicate that the call came<br \/>\ninto the home line), it\u2019s best just to modify the caller ID name.<\/li>\n<li>Go to the appropriate inbound route and set its destination to the new<br \/>\nSet Caller ID.<\/li>\n<\/ul>\n<h1 id=\"hold-music\">Hold Music<\/h1>\n<h2 id=\"converting-the-music-file\">Converting the music file<\/h2>\n<p>FreePBX works best with 8- or 16-bit monoaural, 8,000-Hz WAV files. If<br \/>\nyou\u2019re starting with an MP3, first convert it to a WAV file:<\/p>\n<pre><code>$ lame --decode mymusic.mp3 mymusic.wav\r\n<\/code><\/pre>\n<p>Then, use <code>sox<\/code> to convert it to the correct format:<\/p>\n<pre><code>$ sox mymusic.wav -r 8000 -s -b 8 -c 1 mymusic2.wav\r\n<\/code><\/pre>\n<h2 id=\"installing-the-music-file\">Installing the music file<\/h2>\n<p>FreePBX support hold music categories. While the <em>Settings &gt; Music On Hold<\/em><br \/>\nscreen supports uploading files and creating new categories, it doesn\u2019t always<br \/>\nwork. It\u2019s easier to do the whole thing from the command line.<\/p>\n<ul>\n<li>Copy your converted WAV file(s) to the PBX machine.<\/li>\n<li>SSH into the PBX.<\/li>\n<li><code>cd<\/code> to <code>\/var\/lib\/asterisk\/moh<\/code><\/li>\n<li>If you want the new music to be in the <code>Default<\/code> category, copy the WAV<br \/>\nfiles to that directory. Otherwise, create a subdirectory for the new<br \/>\ncategory (e.g., <code>mkdir Classical<\/code> for a \u201cClassical\u201d category), and copy<br \/>\nthe WAV files into that directory.<\/li>\n<li>Restart the PBX via: <code>amportal restart<\/code><\/li>\n<li>Log into the PBX web portal, go to <em>Settings &gt; Music On Hold<\/em>, and verify<br \/>\nthat (a) the new category is there and (b) the files you copied are listed.<\/li>\n<\/ul>\n<h2 id=\"using-the-new-category\">Using the new category<\/h2>\n<p>The on-hold music category is specified in the Inbound Routes configuration.<\/p>\n<h1 id=\"misc-admin\">Misc. Admin<\/h1>\n<h2 id=\"restarting-asterisk\">Restarting Asterisk<\/h2>\n<pre><code># amportal restart\r\n<\/code><\/pre>\n<h2 id=\"changing-the-log-level\">Changing the log level<\/h2>\n<p><strong>First, ensure that the FreePBX Asterisk Logfiles module is installed.<\/strong><\/p>\n<ul>\n<li>Within the FreePBX web UI, go to Admin &gt; Module Admin<\/li>\n<li>Click the Check Online button<\/li>\n<li>Location the Asterisk Logfiles module and install it, if it isn\u2019t<br \/>\nalready installed.<\/li>\n<\/ul>\n<p><strong>Next, adjust the logging.<\/strong><\/p>\n<ul>\n<li>Go to Settings &gt; Asterisk Logfile Settings<\/li>\n<\/ul>\n<h2 id=\"backups\">Backups<\/h2>\n<p>Needless to say, it\u2019s a <em>really good idea<\/em> to backup your PBX. It\u2019s<br \/>\npossible to screw things up beyond the point of recovery (especially using<br \/>\nexperimental modules like Custom Contexts).<\/p>\n<p>To schedule a routine backup, ensure that the Backup and Restore module is<br \/>\ninstalled. (By default, it should be.) Then, go to Admin &gt; Backup. The<br \/>\n\u201cFull Backup\u201d template is a reasonable place to start.<\/p>\n<p>Backups are written to <code>\/var\/spool\/asterisk\/backup<\/code>. Copying this directory<br \/>\noff to another machine is also a wise idea.<\/p>\n<h1 id=\"troubleshooting\">Troubleshooting<\/h1>\n<h2 id=\"cant-access-voicemail\">Can\u2019t access voicemail<\/h2>\n<h3 id=\"password-not-accepted\">Password not accepted<\/h3>\n<p>You enter the password on the phone handset, but it isn\u2019t accepted. Common<br \/>\nproblem: The phone isn\u2019t a SIP phone, and you\u2019re using an adapter, but the<br \/>\nadapter\u2019s DTMF method isn\u2019t set to \u201cSIP INFO\u201d for that extension. Set the<br \/>\nDTMF method to \u201cSIP INFO\u201d and try again.<\/p>\n<h1 id=\"feature-codes\">Feature Codes<\/h1>\n<p>These are the default settings. To change them, use the web admin UI and<br \/>\ngo to <em>Admin | Feature Codes<\/em>.<\/p>\n<table>\n<thead>\n<tr>\n<th>Feature<\/th>\n<th>Code<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong><em>Blacklist<\/em><\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Blacklist a number<\/td>\n<td>*30<\/td>\n<\/tr>\n<tr>\n<td>Blacklist the last caller<\/td>\n<td>*32<\/td>\n<\/tr>\n<tr>\n<td>Remove a number from the blacklist<\/td>\n<td>*31<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong><em>Call Forward<\/em><\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Call Forward All Activate<\/td>\n<td>*72<\/td>\n<\/tr>\n<tr>\n<td>Call Forward All Deactivate<\/td>\n<td>*73<\/td>\n<\/tr>\n<tr>\n<td>Call Forward All Prompting Activate<\/td>\n<td>*720<\/td>\n<\/tr>\n<tr>\n<td>Call Forward All Prompting Deactivate<\/td>\n<td>*74<\/td>\n<\/tr>\n<tr>\n<td>Call Forward Busy Activate<\/td>\n<td>*90<\/td>\n<\/tr>\n<tr>\n<td>Call Forward Busy Deactivate<\/td>\n<td>*91<\/td>\n<\/tr>\n<tr>\n<td>Call Forward Busy Prompting Activate<\/td>\n<td>*900<\/td>\n<\/tr>\n<tr>\n<td>Call Forward Busy Prompting Deactivate<\/td>\n<td>*92<\/td>\n<\/tr>\n<tr>\n<td>Call Forward No Answer\/Unavailable Activate<\/td>\n<td>*52<\/td>\n<\/tr>\n<tr>\n<td>Call Forward No Answer\/Unavailable Deactivate<\/td>\n<td>*53<\/td>\n<\/tr>\n<tr>\n<td>Call Forward No Answer\/Unavailable Prompting Activate<\/td>\n<td>*520<\/td>\n<\/tr>\n<tr>\n<td>Call Forward Toggle<\/td>\n<td>*740<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong><em>Call Waiting<\/em><\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Call Waiting &#8211; Activate<\/td>\n<td>*70<\/td>\n<\/tr>\n<tr>\n<td>Call Waiting &#8211; Deactivate<\/td>\n<td>*71<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong><em>Conferences<\/em><\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Conference Status<\/td>\n<td>*87<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong><em>Core<\/em><\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Asterisk General Call Pickup<\/td>\n<td>*8<\/td>\n<\/tr>\n<tr>\n<td>ChanSpy<\/td>\n<td>555<\/td>\n<\/tr>\n<tr>\n<td>Directed Call Pickup<\/td>\n<td>**<\/td>\n<\/tr>\n<tr>\n<td>In-Call Asterisk Attended Transfer<\/td>\n<td>*2<\/td>\n<\/tr>\n<tr>\n<td>In-Call Asterisk Blind Transfer<\/td>\n<td>##<\/td>\n<\/tr>\n<tr>\n<td>In-Call Asterisk Disconnect Code<\/td>\n<td>**<\/td>\n<\/tr>\n<tr>\n<td>In-Call Asterisk Toggle Call Recording<\/td>\n<td>*1<\/td>\n<\/tr>\n<tr>\n<td>Simulate Incoming Call<\/td>\n<td>7777<\/td>\n<\/tr>\n<tr>\n<td>User Logoff<\/td>\n<td>*12<\/td>\n<\/tr>\n<tr>\n<td>User Logon<\/td>\n<td>*11<\/td>\n<\/tr>\n<tr>\n<td>ZapBarge<\/td>\n<td>888<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong><em>Do-Not-Disturb (DND)<\/em><\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>DND Activate<\/td>\n<td>*78<\/td>\n<\/tr>\n<tr>\n<td>DND Deactivate<\/td>\n<td>*79<\/td>\n<\/tr>\n<tr>\n<td>DND Toggle<\/td>\n<td>*76<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong><em>Fax Configuration<\/em><\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Dial System FAX<\/td>\n<td>666<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong><em>Follow Me<\/em><\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Findme Follow Toggle<\/td>\n<td>*21<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong><em>Wake Up Calls<\/em><\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Wake Up Calls<\/td>\n<td>*68<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong><em>Info Services<\/em><\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Call Trace<\/td>\n<td>*69<\/td>\n<\/tr>\n<tr>\n<td>Echo Test<\/td>\n<td>*43<\/td>\n<\/tr>\n<tr>\n<td>Speak Your Exten Number<\/td>\n<td>*65<\/td>\n<\/tr>\n<tr>\n<td>Speaking Clock<\/td>\n<td>*60<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong><em>Misc Applications<\/em><\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Apps IVR Demo<\/td>\n<td>3366<\/td>\n<\/tr>\n<tr>\n<td>Time of Day<\/td>\n<td>*61<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong><em>Parking Lot<\/em><\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Pickup ParkedCall Prefix<\/td>\n<td>*85<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong><em>Recordings<\/em><\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Check Recording<\/td>\n<td>*99<\/td>\n<\/tr>\n<tr>\n<td>Save Recording<\/td>\n<td>*77<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong><em>Time Conditions<\/em><\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>All: Time Condition Override<\/td>\n<td>*27<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><strong><em>Voicemail<\/em><\/strong><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Dial Voicemail<\/td>\n<td>*98<\/td>\n<\/tr>\n<tr>\n<td>Direct Dial Prefix<\/td>\n<td>*<\/td>\n<\/tr>\n<tr>\n<td>My Voicemail<\/td>\n<td>*97<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h1 id=\"references\">References<\/h1>\n<ul>\n<li><em>A Newcomer\u2019s Guide to PBX in a Flash<\/em>: <a href=\"http:\/\/nerdvittles.com\/?p=755\">http:\/\/nerdvittles.com\/?p=755<\/a><\/li>\n<li>Incredible PBX Quick Start Guide: <a href=\"http:\/\/nerdvittles.com\/?p=3026\">http:\/\/nerdvittles.com\/?p=3026<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Notes on FreePBX, IncrediblePBX, and the like. Installation Copy the ISO to the SDHC card Download IncrediblePBX for Pi. See http:\/\/nerdvittles.com\/?p=3026 Unpack the tarball. Put the SDHC card in the card reader (assumes Linux). Run the make-sdhc script that came out of the tarball. Put the Pi on the network For security reasons, do not ..<\/p>\n<div class=\"clear-fix\"><\/div>\n<p><a href=\"http:\/\/symbioticindia.in\/docu\/2016\/07\/04\/pbx-cheat-sheet\/\" title=\"read more...\">Read more<\/a><\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-198","post","type-post","status-publish","format-standard","hentry","category-asterisk"],"_links":{"self":[{"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/posts\/198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/comments?post=198"}],"version-history":[{"count":1,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/posts\/198\/revisions"}],"predecessor-version":[{"id":199,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/posts\/198\/revisions\/199"}],"wp:attachment":[{"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/media?parent=198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/categories?post=198"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/tags?post=198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}