<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://voipsupport.it/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=John</id>
	<title>voipsupport - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://voipsupport.it/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=John"/>
	<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Special:Contributions/John"/>
	<updated>2026-04-24T16:11:15Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=897</id>
		<title>Dynamic Routes</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=897"/>
		<updated>2024-05-01T15:16:25Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
The Dynamic Route module is now available in Freepbx, through the Unsupported Modules repository and can be installed directly from within Freepbx. Please use the version distributed with Freepbx. &lt;br /&gt;
The source code can be accessed at https://github.com/FreePBX-ContributedModules/dynroute&lt;br /&gt;
&lt;br /&gt;
The contents of this site have been left as a reference. The new documentation is available at https://wiki.freepbx.org/display/FPG/Dynamic+Routes+Moduletext&lt;br /&gt;
&lt;br /&gt;
==What is it?==&lt;br /&gt;
&lt;br /&gt;
Dynamic Routes is a FreePBX module. [[http://www.freepbx.org FreePBX]] is a GUI which allows administrators to configure the [http://www.asterisk.org Asterisk] communications platform without writing Asterisk dial plan code or configuration files. Dynamic Routes adds to the FreePBX functionality, by configuration of call routing based on the result of a lookup.&lt;br /&gt;
&lt;br /&gt;
Originally Dynamic Routes allowed lookups only to a MySQL database. In the latest version there are many more lookup methods. However the principle is still the same: to allow data dependent call routing.&lt;br /&gt;
&lt;br /&gt;
==What could I use it for?==&lt;br /&gt;
&lt;br /&gt;
The potential uses are many. Here are some examples:&lt;br /&gt;
* screen calls to a support hotline according to agreed support methods and service levels&lt;br /&gt;
* route calls to a dedicated agent or queue by customer category or importance&lt;br /&gt;
* play different announcements to different callers&lt;br /&gt;
* basically anything where you want the call to go to a different destination depending on some known data (like the Caller id) or data input by the customer using DTMF keypad (like contract id)&lt;br /&gt;
&lt;br /&gt;
==How do I get it?==&lt;br /&gt;
&lt;br /&gt;
The code for the project was previously hosted on github but has now been included in Freepbx contributed modules repository.  For the last version please see: [https://git.freepbx.org/projects/FPBXCN/repos/dynroute/browse Dynamic Route current version source code repository]&lt;br /&gt;
&lt;br /&gt;
For previous history of Dynamic Route source code please see: [https://github.com/johnfawcett/dynroute/ old repository]&lt;br /&gt;
&lt;br /&gt;
===FreePBX 15 support===&lt;br /&gt;
&lt;br /&gt;
The latest stable release 15.0.1 is available directly in Freepbx module admin by enabling the &amp;quot;Unsupported modules&amp;quot; repository. A bug fix and enhancement release is available (15.0.2) by temporarily enabling the &amp;quot;Edge&amp;quot; releases in Advanced Options and then upgrading Dynamic Routes. (Please note, do not upgrade the other modules that show up when in Edge mode unless you want your whole installation to move to the &amp;quot;Edge&amp;quot; version.) After upgrading to version 15.0.2, you may set Edge mode back to No.&lt;br /&gt;
&lt;br /&gt;
The following links are here for historical reasons, but should no longer be used. The preferred upgrade method is via Freepbx Module Admin.&lt;br /&gt;
&lt;br /&gt;
[https://updates.voipsupport.it/dynroute-15.0.0.tgz Dynamic Routes 15.0.0]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 15 release. Any new features will be added to this version.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 14 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/releases/download/14.0.1/dynroute-14.0.1.tgz Dynamic Routes 14.0.1]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 14 release.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 13 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/13.0.5.zip Dynamic Routes 13.0.5]&lt;br /&gt;
&lt;br /&gt;
This version has been rewritten to comply with the FreePBX 13 framework. You may use this version to upgrade from a previous 13.x version or 2.11 version. This version may not be used on previous versions of FreePBX.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 11 and 12 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/2.11.3.2.zip Dynamic Routes 2.11.3.2]&lt;br /&gt;
&lt;br /&gt;
As of 20/03/2017 this version is no longer supported. Please use a later version if possible.&lt;br /&gt;
&lt;br /&gt;
Previous versions are archived for historical reference but are no longer maintained and should not be used: [[Dynamic Routes previous versions]]&lt;br /&gt;
&lt;br /&gt;
GPG signatures for the latest versions are available here [[Dynamic Routes gpg signatures]]&lt;br /&gt;
&lt;br /&gt;
==Where can I get more information?==&lt;br /&gt;
&lt;br /&gt;
* [[Dynamic Routes Installation instructions|Installation instructions]]&lt;br /&gt;
* [[Dynamic Routes Example configuration|Example configuration]]&lt;br /&gt;
* [[Dynamic Routes Reference documentation|Reference documentation]]&lt;br /&gt;
* [[Dynamic Routes Future plans|Future plans]]&lt;br /&gt;
* [[Dynamic Routes Licence|Licence]]&lt;br /&gt;
* [[Dynamic Routes FAQ|FAQ]]&lt;br /&gt;
* [[Dynamic Routes Support|Support]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=895</id>
		<title>Dynamic Routes</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=895"/>
		<updated>2022-05-08T14:02:11Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;The Dynamic Route module is now available in Freepbx, through the Unsupported Modules repository and can be installed directly from within Freepbx. Please use the version distributed with Freepbx. The contents of this site have been left as a reference. The new documentation is available at https://wiki.freepbx.org/display/FPG/Dynamic+Routes+Module&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==What is it?==&lt;br /&gt;
&lt;br /&gt;
Dynamic Routes is a FreePBX module. [[http://www.freepbx.org FreePBX]] is a GUI which allows administrators to configure the [http://www.asterisk.org Asterisk] communications platform without writing Asterisk dial plan code or configuration files. Dynamic Routes adds to the FreePBX functionality, by configuration of call routing based on the result of a lookup.&lt;br /&gt;
&lt;br /&gt;
Originally Dynamic Routes allowed lookups only to a MySQL database. In the latest version there are many more lookup methods. However the principle is still the same: to allow data dependent call routing.&lt;br /&gt;
&lt;br /&gt;
==What could I use it for?==&lt;br /&gt;
&lt;br /&gt;
The potential uses are many. Here are some examples:&lt;br /&gt;
* screen calls to a support hotline according to agreed support methods and service levels&lt;br /&gt;
* route calls to a dedicated agent or queue by customer category or importance&lt;br /&gt;
* play different announcements to different callers&lt;br /&gt;
* basically anything where you want the call to go to a different destination depending on some known data (like the Caller id) or data input by the customer using DTMF keypad (like contract id)&lt;br /&gt;
&lt;br /&gt;
==How do I get it?==&lt;br /&gt;
&lt;br /&gt;
The code for the project was previously hosted on github but has now been included in Freepbx contributed modules repository.  For the last version please see: [https://git.freepbx.org/projects/FPBXCN/repos/dynroute/browse Dynamic Route current version source code repository]&lt;br /&gt;
&lt;br /&gt;
For previous history of Dynamic Route source code please see: [https://github.com/johnfawcett/dynroute/ old repository]&lt;br /&gt;
&lt;br /&gt;
===FreePBX 15 support===&lt;br /&gt;
&lt;br /&gt;
The latest stable release 15.0.1 is available directly in Freepbx module admin by enabling the &amp;quot;Unsupported modules&amp;quot; repository. A bug fix and enhancement release is available (15.0.2) by temporarily enabling the &amp;quot;Edge&amp;quot; releases in Advanced Options and then upgrading Dynamic Routes. (Please note, do not upgrade the other modules that show up when in Edge mode unless you want your whole installation to move to the &amp;quot;Edge&amp;quot; version.) After upgrading to version 15.0.2, you may set Edge mode back to No.&lt;br /&gt;
&lt;br /&gt;
The following links are here for historical reasons, but should no longer be used. The preferred upgrade method is via Freepbx Module Admin.&lt;br /&gt;
&lt;br /&gt;
[https://updates.voipsupport.it/dynroute-15.0.0.tgz Dynamic Routes 15.0.0]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 15 release. Any new features will be added to this version.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 14 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/releases/download/14.0.1/dynroute-14.0.1.tgz Dynamic Routes 14.0.1]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 14 release.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 13 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/13.0.5.zip Dynamic Routes 13.0.5]&lt;br /&gt;
&lt;br /&gt;
This version has been rewritten to comply with the FreePBX 13 framework. You may use this version to upgrade from a previous 13.x version or 2.11 version. This version may not be used on previous versions of FreePBX.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 11 and 12 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/2.11.3.2.zip Dynamic Routes 2.11.3.2]&lt;br /&gt;
&lt;br /&gt;
As of 20/03/2017 this version is no longer supported. Please use a later version if possible.&lt;br /&gt;
&lt;br /&gt;
Previous versions are archived for historical reference but are no longer maintained and should not be used: [[Dynamic Routes previous versions]]&lt;br /&gt;
&lt;br /&gt;
GPG signatures for the latest versions are available here [[Dynamic Routes gpg signatures]]&lt;br /&gt;
&lt;br /&gt;
==Where can I get more information?==&lt;br /&gt;
&lt;br /&gt;
* [[Dynamic Routes Installation instructions|Installation instructions]]&lt;br /&gt;
* [[Dynamic Routes Example configuration|Example configuration]]&lt;br /&gt;
* [[Dynamic Routes Reference documentation|Reference documentation]]&lt;br /&gt;
* [[Dynamic Routes Future plans|Future plans]]&lt;br /&gt;
* [[Dynamic Routes Licence|Licence]]&lt;br /&gt;
* [[Dynamic Routes FAQ|FAQ]]&lt;br /&gt;
* [[Dynamic Routes Support|Support]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_FAQ&amp;diff=894</id>
		<title>Dynamic Routes FAQ</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_FAQ&amp;diff=894"/>
		<updated>2021-01-05T11:37:25Z</updated>

		<summary type="html">&lt;p&gt;John: /* Q. What does the message &amp;gt; mean? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==General FAQ==&lt;br /&gt;
&lt;br /&gt;
===Q. What are the prerequisites for Dynamic Routes?===&lt;br /&gt;
&lt;br /&gt;
A. The Dynamic Route module itself does not introduce additional prerequisites, so if your system is set up for Asterisk and FreePBX this module can be installed without adding any additional software. However, the lookup method you choose can introduce additional prerequisites.&lt;br /&gt;
&lt;br /&gt;
If you are using Dynamic Routes to connect to a MySQL database directly (without ODBC) then an additional Asterisk module is required (app_mysql). Please note that the app_mysql is not built by default. Please see this [[How to install Asterisk app_mysql|link]] for information. Although app_mysql is still widely used, it is no longer the recommended way to connect to the MySQL database from Asterisk.&lt;br /&gt;
&lt;br /&gt;
If you are using Dynamic Routes with ODBC you will need to install the ODBC software and driver for your database and configure it. Please see this [[How to set up an Asterisk ODBC data source on Linux|link]] for information.&lt;br /&gt;
&lt;br /&gt;
===Q. Does Dynamic Routes effect performance?===&lt;br /&gt;
&lt;br /&gt;
A. For most installations that are not under heavy load, there will not be performance concerns. However in high traffic installations, the performance aspect should be considered. Of course if the mysql query is not correctly tuned, then even low traffic sites will have issues. So first of all, the query to be used should be checked on a database with similar volumes as the production environment to ensure that it completes quickly. Any tuning of the query or needed indexes should be added.&lt;br /&gt;
&lt;br /&gt;
Instead of running the query against an online database, you may also consider a batch procedure which periodically extracts the needed information, reorganized in the optimum way and then load into a table where asterisk will specifically query it.&lt;br /&gt;
&lt;br /&gt;
Performance will be enhanced by using a local database instead of a remote database. Performance is also enhanced by using a non-SSL connection to the database, but this is not advisable for a remote database due to security concerns - see below. Even for a local database there may be security concerns of using a non-SSL connection, depending on who may access the server.&lt;br /&gt;
&lt;br /&gt;
When connecting to a database Dynamic Routes can use MySQL directly (using Asterisk app_mysql) or ODBC. ODBC is now the recommended way of accessing a database from Asterisk. It is reported that the level of indirection does not introduce any noticeable performance issue.&lt;br /&gt;
&lt;br /&gt;
===Q. Does Dynamic Routes effect system availability?===&lt;br /&gt;
&lt;br /&gt;
A. With Dynamic Routes a database or a web service can be used for lookups during incoming calls. Therefore the database or web server become a necessary component for call processing. If the server is unavailable, dynamic routing will not take place. You may however define a default destination. When a lookup fails it will follow the default destination. The default destination is also used when the lookup succeeds but no match is found. Using a local database or web server reduces availability dependencies but does not remove them entirely. &lt;br /&gt;
&lt;br /&gt;
===Q. What are the security implications of using Dynamic Routes?===&lt;br /&gt;
&lt;br /&gt;
A. The asterisk mysql add-on does not support SSL encrypted connections, so information (including credentials) passed between asterisk and the database may be intercepted. That is one reason why a local database is recommended. If your installation must use a remote server, consider whether a better option, also from performance and availability perspectives, would be to periodically copy the data needed into the mysql database running on the asterisk server.&lt;br /&gt;
&lt;br /&gt;
If you must use a remote server, then it is recommended (unless you can setup a local LAN between the two servers without risk of interception) to use ODBC with SSL enabled. An alternative is to setup an encrypted tunnel using a VPN or a software like stunnel.&lt;br /&gt;
&lt;br /&gt;
In any case it is recommended that the database be separate to the ones used for FreePBX configurations and CDRs. It is also recommended that a specific user is setup in order to access the database and that it has only select permissions on the tables that are used in the query. You should avoid using tables in the query that contain sensitive data, such as passwords. Consider defining a view if you have this case, which only gives access to the relevant columns needed. On MySQL for performance reasons that impact the whole server avoid using grant statements that contain column level access.&lt;br /&gt;
&lt;br /&gt;
===Q. What does the message &amp;lt;&amp;lt;Module &amp;quot;Dynamic Routes&amp;quot; is unsigned and should be re-downloaded&amp;gt;&amp;gt; mean?===&lt;br /&gt;
&lt;br /&gt;
A. FreePBX now has a system whereby a hash of the source code is computed and signed by Sangoma. See [http://wiki.freepbx.org/display/FPG/Module+Signing this link] for more information. This functionality is extremely useful because users know that the modules are the official versions and (unless the verification code itself is tampered with) they know that the code has not been modified.&lt;br /&gt;
&lt;br /&gt;
While very useful, there are a couple of implications:&lt;br /&gt;
* Third party modules will show an unsigned module warning&lt;br /&gt;
* Locally modified modules (for example to add a bug fix or new feature while waiting for that to be included in the official version) produce a tampered module warning&lt;br /&gt;
&lt;br /&gt;
From version 15.0.1 Dynamic Routes is included in the Contributed modules repository (&amp;quot;Unsupported&amp;quot; repository in module admin). So from version 15.0.1 you may access an officially signed module and this warning will no longer be visible. &lt;br /&gt;
&lt;br /&gt;
For previous versions, they were not part of the FreePBX official releases and therefore the code is not signed by Sangoma. Although Sangoma provides for third party code signing after execution of a contract, I have not applied for code signing rights and with the inclusion of 15.0.1 in Freepbx this will no longer be necessary. If you are still using an early version, you may find the following [https://wiki.freepbx.org/display/FOP/Signing+your+own+modules link] helpful if you would like to remove the warning. It explains how to sign your own modules. It is possible to sign the module with a local key.&lt;br /&gt;
&lt;br /&gt;
==Configuration FAQ==&lt;br /&gt;
&lt;br /&gt;
===Q. How can I avoid matching short caller ids?===&lt;br /&gt;
&lt;br /&gt;
A. You can use a condition in the WHERE clause to ensure that only caller ids of sufficient length are matched. This is useful if your database contains company phone numbers with similar prefixes, but when receiving calls the caller id is set to the shorter main phone number of the company.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;select destination from callerid_table where calleridnum like &#039;%[NUMBER]&#039; and length(&#039;[NUMBER]&#039;) &amp;gt; 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Q. How can I match data in my database when sometimes the caller id arrives with an international prefix of + country codes, other times 00 country code and other times just as a national number?===&lt;br /&gt;
&lt;br /&gt;
A. You may use the MySQL TRIM function to adjust the presented caller id to match the type of data in your database. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;select destination from callerid_table where calleridnum like concat(&#039;%&#039;,TRIM(LEADING &#039;+&#039; FROM TRIM(LEADING &#039;0&#039; FROM &#039;[NUMBER]&#039;)))&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Q. Does Dynamic Route create the lookup table I will use in my query?===&lt;br /&gt;
&lt;br /&gt;
A. No. Dynamic Route creates the internal tables needed to store the configurations of the Dynamic Routes that you define. Specific Dynamic Routes may be configured to access a database table containing data that will be used in the routing decision. This data is external to Dynamic Routes and Dynamic Routes will only query this data as directed to do so by your configuration. Dynamic Routes will not create your external data tables or data. If you need an example of how to set up data tables to be queried by Dynamic Route, then please see this [[Creating_a_MySQL_table_for_use_with_Dynamic_Routes|link]] for information.&lt;br /&gt;
&lt;br /&gt;
===Q. Why don&#039;t my inbound calls get routed through Dynamic Routes?===&lt;br /&gt;
&lt;br /&gt;
A. Dynamic Routes does not automatically intervene in the call processing of your system. If you want calls to pass through Dynamic Routes you will need to configure your system to hand the calls to a specific Dynamic Route. Typically you can do this from the FreePBX &amp;quot;Connectivity&amp;quot; menu by choosing &amp;quot;Inbound Routes&amp;quot;. Choose the inbound route you  want to pass through Dynamic Route and in that route put the Dynamic Route as the destination. Call flow will then pass through the specified Dynamic Route.&lt;br /&gt;
&lt;br /&gt;
==Trouble shooting FAQ==&lt;br /&gt;
&lt;br /&gt;
===When reporting a problem what information should I provide?===&lt;br /&gt;
&lt;br /&gt;
Please see [[Dynamic Routes Support|here]]&lt;br /&gt;
&lt;br /&gt;
===Q. Why do I get strange errors when using asterisk MYSQL module?===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[2015-04-24 21:52:59] WARNING[14294][C-000020b6] pbx.c: Error in extension logic (missing &#039;}&#039;)&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] pbx.c: Can&#039;t find trailing parenthesis for function &#039;CALLERID(nu&#039;?&lt;br /&gt;
[2015-04-24 21:52:59] ERROR[14294][C-000020b6] func_callerid.c: Unknown callerid data type &#039;nu&#039;.&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:4] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Query resultid 1 select callerid_firstname from calleridlookup where owner=&#039;john&#039; and &#039;&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: aMYSQL_query: mysql_query failed. Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near &#039;&#039;&#039; at line 1&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:5] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Fetch fetchid  dynroute&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: aMYSQL_fetch: missing some arguments&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:6] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Clear &amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: Identifier 0, identifier_type 2 not found in identifier list&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: Invalid result identifier 0 passed in aMYSQL_clear&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:7] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Disconnect 1&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:8] Set(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;__DYNROUTE_TEST=&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] ast_expr2.fl: ast_yyerror():  syntax error: syntax error, unexpected &#039;=&#039;, expecting $end; Input:&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A. Do not use a semicolon at the end of the query. This syntax is not supported by asterisk MYSQL module.&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=893</id>
		<title>Dynamic Routes</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=893"/>
		<updated>2021-01-05T11:33:41Z</updated>

		<summary type="html">&lt;p&gt;John: /* FreePBX 15 support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What is it?==&lt;br /&gt;
&lt;br /&gt;
Dynamic Routes is a FreePBX module. [[http://www.freepbx.org FreePBX]] is a GUI which allows administrators to configure the [http://www.asterisk.org Asterisk] communications platform without writing Asterisk dial plan code or configuration files. Dynamic Routes adds to the FreePBX functionality, by configuration of call routing based on the result of a lookup.&lt;br /&gt;
&lt;br /&gt;
Originally Dynamic Routes allowed lookups only to a MySQL database. In the latest version there are many more lookup methods. However the principle is still the same: to allow data dependent call routing.&lt;br /&gt;
&lt;br /&gt;
==What could I use it for?==&lt;br /&gt;
&lt;br /&gt;
The potential uses are many. Here are some examples:&lt;br /&gt;
* screen calls to a support hotline according to agreed support methods and service levels&lt;br /&gt;
* route calls to a dedicated agent or queue by customer category or importance&lt;br /&gt;
* play different announcements to different callers&lt;br /&gt;
* basically anything where you want the call to go to a different destination depending on some known data (like the Caller id) or data input by the customer using DTMF keypad (like contract id)&lt;br /&gt;
&lt;br /&gt;
==How do I get it?==&lt;br /&gt;
&lt;br /&gt;
The code for the project was previously hosted on github but has now been included in Freepbx contributed modules repository.  For the last version please see: [https://git.freepbx.org/projects/FPBXCN/repos/dynroute/browse Dynamic Route current version source code repository]&lt;br /&gt;
&lt;br /&gt;
For previous history of Dynamic Route source code please see: [https://github.com/johnfawcett/dynroute/ old repository]&lt;br /&gt;
&lt;br /&gt;
===FreePBX 15 support===&lt;br /&gt;
&lt;br /&gt;
The latest stable release 15.0.1 is available directly in Freepbx module admin by enabling the &amp;quot;Unsupported modules&amp;quot; repository. A bug fix and enhancement release is available (15.0.2) by temporarily enabling the &amp;quot;Edge&amp;quot; releases in Advanced Options and then upgrading Dynamic Routes. (Please note, do not upgrade the other modules that show up when in Edge mode unless you want your whole installation to move to the &amp;quot;Edge&amp;quot; version.) After upgrading to version 15.0.2, you may set Edge mode back to No.&lt;br /&gt;
&lt;br /&gt;
The following links are here for historical reasons, but should no longer be used. The preferred upgrade method is via Freepbx Module Admin.&lt;br /&gt;
&lt;br /&gt;
[https://updates.voipsupport.it/dynroute-15.0.0.tgz Dynamic Routes 15.0.0]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 15 release. Any new features will be added to this version.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 14 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/releases/download/14.0.1/dynroute-14.0.1.tgz Dynamic Routes 14.0.1]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 14 release.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 13 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/13.0.5.zip Dynamic Routes 13.0.5]&lt;br /&gt;
&lt;br /&gt;
This version has been rewritten to comply with the FreePBX 13 framework. You may use this version to upgrade from a previous 13.x version or 2.11 version. This version may not be used on previous versions of FreePBX.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 11 and 12 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/2.11.3.2.zip Dynamic Routes 2.11.3.2]&lt;br /&gt;
&lt;br /&gt;
As of 20/03/2017 this version is no longer supported. Please use a later version if possible.&lt;br /&gt;
&lt;br /&gt;
Previous versions are archived for historical reference but are no longer maintained and should not be used: [[Dynamic Routes previous versions]]&lt;br /&gt;
&lt;br /&gt;
GPG signatures for the latest versions are available here [[Dynamic Routes gpg signatures]]&lt;br /&gt;
&lt;br /&gt;
==Where can I get more information?==&lt;br /&gt;
&lt;br /&gt;
* [[Dynamic Routes Installation instructions|Installation instructions]]&lt;br /&gt;
* [[Dynamic Routes Example configuration|Example configuration]]&lt;br /&gt;
* [[Dynamic Routes Reference documentation|Reference documentation]]&lt;br /&gt;
* [[Dynamic Routes Future plans|Future plans]]&lt;br /&gt;
* [[Dynamic Routes Licence|Licence]]&lt;br /&gt;
* [[Dynamic Routes FAQ|FAQ]]&lt;br /&gt;
* [[Dynamic Routes Support|Support]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=892</id>
		<title>Dynamic Routes</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=892"/>
		<updated>2021-01-05T11:32:43Z</updated>

		<summary type="html">&lt;p&gt;John: /* How do I get it? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What is it?==&lt;br /&gt;
&lt;br /&gt;
Dynamic Routes is a FreePBX module. [[http://www.freepbx.org FreePBX]] is a GUI which allows administrators to configure the [http://www.asterisk.org Asterisk] communications platform without writing Asterisk dial plan code or configuration files. Dynamic Routes adds to the FreePBX functionality, by configuration of call routing based on the result of a lookup.&lt;br /&gt;
&lt;br /&gt;
Originally Dynamic Routes allowed lookups only to a MySQL database. In the latest version there are many more lookup methods. However the principle is still the same: to allow data dependent call routing.&lt;br /&gt;
&lt;br /&gt;
==What could I use it for?==&lt;br /&gt;
&lt;br /&gt;
The potential uses are many. Here are some examples:&lt;br /&gt;
* screen calls to a support hotline according to agreed support methods and service levels&lt;br /&gt;
* route calls to a dedicated agent or queue by customer category or importance&lt;br /&gt;
* play different announcements to different callers&lt;br /&gt;
* basically anything where you want the call to go to a different destination depending on some known data (like the Caller id) or data input by the customer using DTMF keypad (like contract id)&lt;br /&gt;
&lt;br /&gt;
==How do I get it?==&lt;br /&gt;
&lt;br /&gt;
The code for the project was previously hosted on github but has now been included in Freepbx contributed modules repository.  For the last version please see: [https://git.freepbx.org/projects/FPBXCN/repos/dynroute/browse Dynamic Route current version source code repository]&lt;br /&gt;
&lt;br /&gt;
For previous history of Dynamic Route source code please see: [https://github.com/johnfawcett/dynroute/ old repository]&lt;br /&gt;
&lt;br /&gt;
===FreePBX 15 support===&lt;br /&gt;
&lt;br /&gt;
The latest stable release 15.0.1 is available directly in Freepbx module admin by enabling the &amp;quot;Unsupported modules&amp;quot; repository. A bug fix and enhancement release is available (15.0.2) by temporarily enabling the &amp;quot;Edge&amp;quot; releases in Advanced Options and then upgrading Dynamic Routes. (Please note, do not upgrade the other modules that show up when in Edge mode unless you want your whole installation to move to the &amp;quot;Edge&amp;quot; version.) After upgrading to version 15.0.2, you may set Edge mode back to No.&lt;br /&gt;
&lt;br /&gt;
[https://updates.voipsupport.it/dynroute-15.0.0.tgz Dynamic Routes 15.0.0]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 15 release. Any new features will be added to this version.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 14 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/releases/download/14.0.1/dynroute-14.0.1.tgz Dynamic Routes 14.0.1]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 14 release.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 13 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/13.0.5.zip Dynamic Routes 13.0.5]&lt;br /&gt;
&lt;br /&gt;
This version has been rewritten to comply with the FreePBX 13 framework. You may use this version to upgrade from a previous 13.x version or 2.11 version. This version may not be used on previous versions of FreePBX.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 11 and 12 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/2.11.3.2.zip Dynamic Routes 2.11.3.2]&lt;br /&gt;
&lt;br /&gt;
As of 20/03/2017 this version is no longer supported. Please use a later version if possible.&lt;br /&gt;
&lt;br /&gt;
Previous versions are archived for historical reference but are no longer maintained and should not be used: [[Dynamic Routes previous versions]]&lt;br /&gt;
&lt;br /&gt;
GPG signatures for the latest versions are available here [[Dynamic Routes gpg signatures]]&lt;br /&gt;
&lt;br /&gt;
==Where can I get more information?==&lt;br /&gt;
&lt;br /&gt;
* [[Dynamic Routes Installation instructions|Installation instructions]]&lt;br /&gt;
* [[Dynamic Routes Example configuration|Example configuration]]&lt;br /&gt;
* [[Dynamic Routes Reference documentation|Reference documentation]]&lt;br /&gt;
* [[Dynamic Routes Future plans|Future plans]]&lt;br /&gt;
* [[Dynamic Routes Licence|Licence]]&lt;br /&gt;
* [[Dynamic Routes FAQ|FAQ]]&lt;br /&gt;
* [[Dynamic Routes Support|Support]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=891</id>
		<title>Dynamic Routes</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=891"/>
		<updated>2021-01-05T11:29:06Z</updated>

		<summary type="html">&lt;p&gt;John: /* How do I get it? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What is it?==&lt;br /&gt;
&lt;br /&gt;
Dynamic Routes is a FreePBX module. [[http://www.freepbx.org FreePBX]] is a GUI which allows administrators to configure the [http://www.asterisk.org Asterisk] communications platform without writing Asterisk dial plan code or configuration files. Dynamic Routes adds to the FreePBX functionality, by configuration of call routing based on the result of a lookup.&lt;br /&gt;
&lt;br /&gt;
Originally Dynamic Routes allowed lookups only to a MySQL database. In the latest version there are many more lookup methods. However the principle is still the same: to allow data dependent call routing.&lt;br /&gt;
&lt;br /&gt;
==What could I use it for?==&lt;br /&gt;
&lt;br /&gt;
The potential uses are many. Here are some examples:&lt;br /&gt;
* screen calls to a support hotline according to agreed support methods and service levels&lt;br /&gt;
* route calls to a dedicated agent or queue by customer category or importance&lt;br /&gt;
* play different announcements to different callers&lt;br /&gt;
* basically anything where you want the call to go to a different destination depending on some known data (like the Caller id) or data input by the customer using DTMF keypad (like contract id)&lt;br /&gt;
&lt;br /&gt;
==How do I get it?==&lt;br /&gt;
&lt;br /&gt;
The code for the project was previously hosted on github but has now been included in Freepbx contributed modules repository.  For the last version please see: [https://git.freepbx.org/projects/FPBXCN/repos/dynroute/browse Dynamic Route current version source code repository]&lt;br /&gt;
&lt;br /&gt;
For previous history of Dynamic Route source code please see: [https://github.com/johnfawcett/dynroute/ old repository]&lt;br /&gt;
&lt;br /&gt;
===FreePBX 15 support===&lt;br /&gt;
&lt;br /&gt;
[https://updates.voipsupport.it/dynroute-15.0.0.tgz Dynamic Routes 15.0.0]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 15 release. Any new features will be added to this version.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 14 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/releases/download/14.0.1/dynroute-14.0.1.tgz Dynamic Routes 14.0.1]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 14 release.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 13 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/13.0.5.zip Dynamic Routes 13.0.5]&lt;br /&gt;
&lt;br /&gt;
This version has been rewritten to comply with the FreePBX 13 framework. You may use this version to upgrade from a previous 13.x version or 2.11 version. This version may not be used on previous versions of FreePBX.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 11 and 12 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/2.11.3.2.zip Dynamic Routes 2.11.3.2]&lt;br /&gt;
&lt;br /&gt;
As of 20/03/2017 this version is no longer supported. Please use a later version if possible.&lt;br /&gt;
&lt;br /&gt;
Previous versions are archived for historical reference but are no longer maintained and should not be used: [[Dynamic Routes previous versions]]&lt;br /&gt;
&lt;br /&gt;
GPG signatures for the latest versions are available here [[Dynamic Routes gpg signatures]]&lt;br /&gt;
&lt;br /&gt;
==Where can I get more information?==&lt;br /&gt;
&lt;br /&gt;
* [[Dynamic Routes Installation instructions|Installation instructions]]&lt;br /&gt;
* [[Dynamic Routes Example configuration|Example configuration]]&lt;br /&gt;
* [[Dynamic Routes Reference documentation|Reference documentation]]&lt;br /&gt;
* [[Dynamic Routes Future plans|Future plans]]&lt;br /&gt;
* [[Dynamic Routes Licence|Licence]]&lt;br /&gt;
* [[Dynamic Routes FAQ|FAQ]]&lt;br /&gt;
* [[Dynamic Routes Support|Support]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=890</id>
		<title>Dynamic Routes</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=890"/>
		<updated>2021-01-05T11:28:27Z</updated>

		<summary type="html">&lt;p&gt;John: /* How do I get it? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What is it?==&lt;br /&gt;
&lt;br /&gt;
Dynamic Routes is a FreePBX module. [[http://www.freepbx.org FreePBX]] is a GUI which allows administrators to configure the [http://www.asterisk.org Asterisk] communications platform without writing Asterisk dial plan code or configuration files. Dynamic Routes adds to the FreePBX functionality, by configuration of call routing based on the result of a lookup.&lt;br /&gt;
&lt;br /&gt;
Originally Dynamic Routes allowed lookups only to a MySQL database. In the latest version there are many more lookup methods. However the principle is still the same: to allow data dependent call routing.&lt;br /&gt;
&lt;br /&gt;
==What could I use it for?==&lt;br /&gt;
&lt;br /&gt;
The potential uses are many. Here are some examples:&lt;br /&gt;
* screen calls to a support hotline according to agreed support methods and service levels&lt;br /&gt;
* route calls to a dedicated agent or queue by customer category or importance&lt;br /&gt;
* play different announcements to different callers&lt;br /&gt;
* basically anything where you want the call to go to a different destination depending on some known data (like the Caller id) or data input by the customer using DTMF keypad (like contract id)&lt;br /&gt;
&lt;br /&gt;
==How do I get it?==&lt;br /&gt;
&lt;br /&gt;
The code for the project was previously hosted on github but has now been included in Freepbx contributed modules repository.  For the last version please see: [https://git.freepbx.org/projects/FPBXCN/repos/dynroute/browse Dynamic Route current version source code repository]&lt;br /&gt;
&lt;br /&gt;
Please see: [https://github.com/johnfawcett/dynroute/ for previous history of Dynamic Route source code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FreePBX 15 support===&lt;br /&gt;
&lt;br /&gt;
[https://updates.voipsupport.it/dynroute-15.0.0.tgz Dynamic Routes 15.0.0]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 15 release. Any new features will be added to this version.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 14 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/releases/download/14.0.1/dynroute-14.0.1.tgz Dynamic Routes 14.0.1]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 14 release.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 13 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/13.0.5.zip Dynamic Routes 13.0.5]&lt;br /&gt;
&lt;br /&gt;
This version has been rewritten to comply with the FreePBX 13 framework. You may use this version to upgrade from a previous 13.x version or 2.11 version. This version may not be used on previous versions of FreePBX.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 11 and 12 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/2.11.3.2.zip Dynamic Routes 2.11.3.2]&lt;br /&gt;
&lt;br /&gt;
As of 20/03/2017 this version is no longer supported. Please use a later version if possible.&lt;br /&gt;
&lt;br /&gt;
Previous versions are archived for historical reference but are no longer maintained and should not be used: [[Dynamic Routes previous versions]]&lt;br /&gt;
&lt;br /&gt;
GPG signatures for the latest versions are available here [[Dynamic Routes gpg signatures]]&lt;br /&gt;
&lt;br /&gt;
==Where can I get more information?==&lt;br /&gt;
&lt;br /&gt;
* [[Dynamic Routes Installation instructions|Installation instructions]]&lt;br /&gt;
* [[Dynamic Routes Example configuration|Example configuration]]&lt;br /&gt;
* [[Dynamic Routes Reference documentation|Reference documentation]]&lt;br /&gt;
* [[Dynamic Routes Future plans|Future plans]]&lt;br /&gt;
* [[Dynamic Routes Licence|Licence]]&lt;br /&gt;
* [[Dynamic Routes FAQ|FAQ]]&lt;br /&gt;
* [[Dynamic Routes Support|Support]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=889</id>
		<title>Dynamic Routes</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=889"/>
		<updated>2021-01-05T11:27:52Z</updated>

		<summary type="html">&lt;p&gt;John: /* How do I get it? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What is it?==&lt;br /&gt;
&lt;br /&gt;
Dynamic Routes is a FreePBX module. [[http://www.freepbx.org FreePBX]] is a GUI which allows administrators to configure the [http://www.asterisk.org Asterisk] communications platform without writing Asterisk dial plan code or configuration files. Dynamic Routes adds to the FreePBX functionality, by configuration of call routing based on the result of a lookup.&lt;br /&gt;
&lt;br /&gt;
Originally Dynamic Routes allowed lookups only to a MySQL database. In the latest version there are many more lookup methods. However the principle is still the same: to allow data dependent call routing.&lt;br /&gt;
&lt;br /&gt;
==What could I use it for?==&lt;br /&gt;
&lt;br /&gt;
The potential uses are many. Here are some examples:&lt;br /&gt;
* screen calls to a support hotline according to agreed support methods and service levels&lt;br /&gt;
* route calls to a dedicated agent or queue by customer category or importance&lt;br /&gt;
* play different announcements to different callers&lt;br /&gt;
* basically anything where you want the call to go to a different destination depending on some known data (like the Caller id) or data input by the customer using DTMF keypad (like contract id)&lt;br /&gt;
&lt;br /&gt;
==How do I get it?==&lt;br /&gt;
&lt;br /&gt;
The code for the project was previously hosted on github but has now been included in Freepbx contributed modules repository.  for the last version. The code is now hosted in the Freepbx contributed modules repository [https://git.freepbx.org/projects/FPBXCN/repos/dynroute/browse Dynamic Route current version source code repository]&lt;br /&gt;
&lt;br /&gt;
Please see: [https://github.com/johnfawcett/dynroute/ for previous history of Dynamic Route source code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FreePBX 15 support===&lt;br /&gt;
&lt;br /&gt;
[https://updates.voipsupport.it/dynroute-15.0.0.tgz Dynamic Routes 15.0.0]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 15 release. Any new features will be added to this version.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 14 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/releases/download/14.0.1/dynroute-14.0.1.tgz Dynamic Routes 14.0.1]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 14 release.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 13 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/13.0.5.zip Dynamic Routes 13.0.5]&lt;br /&gt;
&lt;br /&gt;
This version has been rewritten to comply with the FreePBX 13 framework. You may use this version to upgrade from a previous 13.x version or 2.11 version. This version may not be used on previous versions of FreePBX.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 11 and 12 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/2.11.3.2.zip Dynamic Routes 2.11.3.2]&lt;br /&gt;
&lt;br /&gt;
As of 20/03/2017 this version is no longer supported. Please use a later version if possible.&lt;br /&gt;
&lt;br /&gt;
Previous versions are archived for historical reference but are no longer maintained and should not be used: [[Dynamic Routes previous versions]]&lt;br /&gt;
&lt;br /&gt;
GPG signatures for the latest versions are available here [[Dynamic Routes gpg signatures]]&lt;br /&gt;
&lt;br /&gt;
==Where can I get more information?==&lt;br /&gt;
&lt;br /&gt;
* [[Dynamic Routes Installation instructions|Installation instructions]]&lt;br /&gt;
* [[Dynamic Routes Example configuration|Example configuration]]&lt;br /&gt;
* [[Dynamic Routes Reference documentation|Reference documentation]]&lt;br /&gt;
* [[Dynamic Routes Future plans|Future plans]]&lt;br /&gt;
* [[Dynamic Routes Licence|Licence]]&lt;br /&gt;
* [[Dynamic Routes FAQ|FAQ]]&lt;br /&gt;
* [[Dynamic Routes Support|Support]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=File:Dynroute-15.0.0.tgz.sig&amp;diff=888</id>
		<title>File:Dynroute-15.0.0.tgz.sig</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=File:Dynroute-15.0.0.tgz.sig&amp;diff=888"/>
		<updated>2020-08-31T17:37:20Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_gpg_signatures&amp;diff=887</id>
		<title>Dynamic Routes gpg signatures</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_gpg_signatures&amp;diff=887"/>
		<updated>2020-08-31T17:35:58Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Signature for 2.11.3.2&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:dynroute-2.11.3.2.zip.sig]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Signature for 13.0.5&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:dynroute-13.0.5.zip.sig]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Signature for 14.0.0&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:dynroute-14.0.0.tgz.sig]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Signature for 14.0.1&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:dynroute-14.0.1.tgz.sig]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Signature for 15.0.0&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:dynroute-15.0.0.tgz.sig]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;GPG Public Key used to sign the release packages&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:johnfawcett.gpg]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=886</id>
		<title>Dynamic Routes</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=886"/>
		<updated>2020-08-31T17:34:57Z</updated>

		<summary type="html">&lt;p&gt;John: /* How do I get it? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What is it?==&lt;br /&gt;
&lt;br /&gt;
Dynamic Routes is a FreePBX module. [[http://www.freepbx.org FreePBX]] is a GUI which allows administrators to configure the [http://www.asterisk.org Asterisk] communications platform without writing Asterisk dial plan code or configuration files. Dynamic Routes adds to the FreePBX functionality, by configuration of call routing based on the result of a lookup.&lt;br /&gt;
&lt;br /&gt;
Originally Dynamic Routes allowed lookups only to a MySQL database. In the latest version there are many more lookup methods. However the principle is still the same: to allow data dependent call routing.&lt;br /&gt;
&lt;br /&gt;
==What could I use it for?==&lt;br /&gt;
&lt;br /&gt;
The potential uses are many. Here are some examples:&lt;br /&gt;
* screen calls to a support hotline according to agreed support methods and service levels&lt;br /&gt;
* route calls to a dedicated agent or queue by customer category or importance&lt;br /&gt;
* play different announcements to different callers&lt;br /&gt;
* basically anything where you want the call to go to a different destination depending on some known data (like the Caller id) or data input by the customer using DTMF keypad (like contract id)&lt;br /&gt;
&lt;br /&gt;
==How do I get it?==&lt;br /&gt;
&lt;br /&gt;
The code for the project is hosted on github. Please see: [https://github.com/johnfawcett/dynroute/ Dynamic Route source code repository]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/blob/master/CHANGES.txt Dynamic Routes Change Log]&lt;br /&gt;
&lt;br /&gt;
===FreePBX 15 support===&lt;br /&gt;
&lt;br /&gt;
[https://updates.voipsupport.it/dynroute-15.0.0.tgz Dynamic Routes 15.0.0]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 15 release. Any new features will be added to this version.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 14 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/releases/download/14.0.1/dynroute-14.0.1.tgz Dynamic Routes 14.0.1]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 14 release.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 13 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/13.0.5.zip Dynamic Routes 13.0.5]&lt;br /&gt;
&lt;br /&gt;
This version has been rewritten to comply with the FreePBX 13 framework. You may use this version to upgrade from a previous 13.x version or 2.11 version. This version may not be used on previous versions of FreePBX.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 11 and 12 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/2.11.3.2.zip Dynamic Routes 2.11.3.2]&lt;br /&gt;
&lt;br /&gt;
As of 20/03/2017 this version is no longer supported. Please use a later version if possible.&lt;br /&gt;
&lt;br /&gt;
Previous versions are archived for historical reference but are no longer maintained and should not be used: [[Dynamic Routes previous versions]]&lt;br /&gt;
&lt;br /&gt;
GPG signatures for the latest versions are available here [[Dynamic Routes gpg signatures]]&lt;br /&gt;
&lt;br /&gt;
==Where can I get more information?==&lt;br /&gt;
&lt;br /&gt;
* [[Dynamic Routes Installation instructions|Installation instructions]]&lt;br /&gt;
* [[Dynamic Routes Example configuration|Example configuration]]&lt;br /&gt;
* [[Dynamic Routes Reference documentation|Reference documentation]]&lt;br /&gt;
* [[Dynamic Routes Future plans|Future plans]]&lt;br /&gt;
* [[Dynamic Routes Licence|Licence]]&lt;br /&gt;
* [[Dynamic Routes FAQ|FAQ]]&lt;br /&gt;
* [[Dynamic Routes Support|Support]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Voipsupport:Privacy_policy&amp;diff=883</id>
		<title>Voipsupport:Privacy policy</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Voipsupport:Privacy_policy&amp;diff=883"/>
		<updated>2019-12-07T10:42:50Z</updated>

		<summary type="html">&lt;p&gt;John: /* Data processing location */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Information that is recorded===&lt;br /&gt;
&lt;br /&gt;
When you visit this site certain information about your visit is logged: the date and time, your ip address, the pages served, the referring page, browser name and operating system and result or error code. No personally identifying information is logged.&lt;br /&gt;
&lt;br /&gt;
For more information please see [https://httpd.apache.org/docs/2.4/logs.html#accesslog combined log format].&lt;br /&gt;
&lt;br /&gt;
===Use of the information===&lt;br /&gt;
&lt;br /&gt;
The purpose of the logging is two fold:&lt;br /&gt;
* to provide the service, for example by enabling checking of logs in case of errors or problems &lt;br /&gt;
* to evaluate the use of the site by compiling statistics about number of visitors and the pages visited.&lt;br /&gt;
&lt;br /&gt;
No information is ever sold or provided externally.&lt;br /&gt;
&lt;br /&gt;
===Duration of the storage===&lt;br /&gt;
&lt;br /&gt;
Any information recorded is automatically cancelled on a rotating basis after 4 weeks.&lt;br /&gt;
&lt;br /&gt;
===Cookies===&lt;br /&gt;
&lt;br /&gt;
Cookies are used to a limited extent:&lt;br /&gt;
* for the sole purpose of providing the the web site service and&lt;br /&gt;
* are strictly necessary in order to provide the service.&lt;br /&gt;
&lt;br /&gt;
Cookies are not used to track user behaviour.&lt;br /&gt;
&lt;br /&gt;
The cookies used are:&lt;br /&gt;
* __cfduid: this is stictly necessary for the CloudFlare service, see [https://support.cloudflare.com/hc/en-us/articles/200170156-What-does-the-CloudFlare-cfduid-cookie-do- this page]. The cookie has a duration of 1 year, but you may cancel it at any time.&lt;br /&gt;
* voipsupport_session: used for the correct functioning of the Mediawiki software. The cookie has a duration limited to the length of the browsing session.&lt;br /&gt;
&lt;br /&gt;
===Data processing location===&lt;br /&gt;
&lt;br /&gt;
The web server is located within the EU. No information is stored outside the EU.  The site uses the [https://www.cloudflare.com/ CloudFlare] service in order to improve performance and security. That means that some or all the data will transit through an external server, usually nearer to your location.&lt;br /&gt;
&lt;br /&gt;
For more information about the CloudFlare policy, please see [https://blog.cloudflare.com/what-cloudflare-logs/ this link]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Voipsupport:Privacy_policy&amp;diff=882</id>
		<title>Voipsupport:Privacy policy</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Voipsupport:Privacy_policy&amp;diff=882"/>
		<updated>2019-12-07T10:42:09Z</updated>

		<summary type="html">&lt;p&gt;John: /* Information that is recorded */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Information that is recorded===&lt;br /&gt;
&lt;br /&gt;
When you visit this site certain information about your visit is logged: the date and time, your ip address, the pages served, the referring page, browser name and operating system and result or error code. No personally identifying information is logged.&lt;br /&gt;
&lt;br /&gt;
For more information please see [https://httpd.apache.org/docs/2.4/logs.html#accesslog combined log format].&lt;br /&gt;
&lt;br /&gt;
===Use of the information===&lt;br /&gt;
&lt;br /&gt;
The purpose of the logging is two fold:&lt;br /&gt;
* to provide the service, for example by enabling checking of logs in case of errors or problems &lt;br /&gt;
* to evaluate the use of the site by compiling statistics about number of visitors and the pages visited.&lt;br /&gt;
&lt;br /&gt;
No information is ever sold or provided externally.&lt;br /&gt;
&lt;br /&gt;
===Duration of the storage===&lt;br /&gt;
&lt;br /&gt;
Any information recorded is automatically cancelled on a rotating basis after 4 weeks.&lt;br /&gt;
&lt;br /&gt;
===Cookies===&lt;br /&gt;
&lt;br /&gt;
Cookies are used to a limited extent:&lt;br /&gt;
* for the sole purpose of providing the the web site service and&lt;br /&gt;
* are strictly necessary in order to provide the service.&lt;br /&gt;
&lt;br /&gt;
Cookies are not used to track user behaviour.&lt;br /&gt;
&lt;br /&gt;
The cookies used are:&lt;br /&gt;
* __cfduid: this is stictly necessary for the CloudFlare service, see [https://support.cloudflare.com/hc/en-us/articles/200170156-What-does-the-CloudFlare-cfduid-cookie-do- this page]. The cookie has a duration of 1 year, but you may cancel it at any time.&lt;br /&gt;
* voipsupport_session: used for the correct functioning of the Mediawiki software. The cookie has a duration limited to the length of the browsing session.&lt;br /&gt;
&lt;br /&gt;
===Data processing location===&lt;br /&gt;
&lt;br /&gt;
The web server is located within the EU. No information is stored outside the EU.  The site uses the [https://www.cloudflare.com/ CloudFlare] service in order to improve performance and security. That means that some data will transit through an external server, usually nearer to your location.&lt;br /&gt;
&lt;br /&gt;
For more information about the CloudFlare policy, please see [https://blog.cloudflare.com/what-cloudflare-logs/ this link]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_FAQ&amp;diff=881</id>
		<title>Dynamic Routes FAQ</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_FAQ&amp;diff=881"/>
		<updated>2019-12-07T10:29:22Z</updated>

		<summary type="html">&lt;p&gt;John: /* Q. What does the message &amp;gt; mean? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==General FAQ==&lt;br /&gt;
&lt;br /&gt;
===Q. What are the prerequisites for Dynamic Routes?===&lt;br /&gt;
&lt;br /&gt;
A. The Dynamic Route module itself does not introduce additional prerequisites, so if your system is set up for Asterisk and FreePBX this module can be installed without adding any additional software. However, the lookup method you choose can introduce additional prerequisites.&lt;br /&gt;
&lt;br /&gt;
If you are using Dynamic Routes to connect to a MySQL database directly (without ODBC) then an additional Asterisk module is required (app_mysql). Please note that the app_mysql is not built by default. Please see this [[How to install Asterisk app_mysql|link]] for information. Although app_mysql is still widely used, it is no longer the recommended way to connect to the MySQL database from Asterisk.&lt;br /&gt;
&lt;br /&gt;
If you are using Dynamic Routes with ODBC you will need to install the ODBC software and driver for your database and configure it. Please see this [[How to set up an Asterisk ODBC data source on Linux|link]] for information.&lt;br /&gt;
&lt;br /&gt;
===Q. Does Dynamic Routes effect performance?===&lt;br /&gt;
&lt;br /&gt;
A. For most installations that are not under heavy load, there will not be performance concerns. However in high traffic installations, the performance aspect should be considered. Of course if the mysql query is not correctly tuned, then even low traffic sites will have issues. So first of all, the query to be used should be checked on a database with similar volumes as the production environment to ensure that it completes quickly. Any tuning of the query or needed indexes should be added.&lt;br /&gt;
&lt;br /&gt;
Instead of running the query against an online database, you may also consider a batch procedure which periodically extracts the needed information, reorganized in the optimum way and then load into a table where asterisk will specifically query it.&lt;br /&gt;
&lt;br /&gt;
Performance will be enhanced by using a local database instead of a remote database. Performance is also enhanced by using a non-SSL connection to the database, but this is not advisable for a remote database due to security concerns - see below. Even for a local database there may be security concerns of using a non-SSL connection, depending on who may access the server.&lt;br /&gt;
&lt;br /&gt;
When connecting to a database Dynamic Routes can use MySQL directly (using Asterisk app_mysql) or ODBC. ODBC is now the recommended way of accessing a database from Asterisk. It is reported that the level of indirection does not introduce any noticeable performance issue.&lt;br /&gt;
&lt;br /&gt;
===Q. Does Dynamic Routes effect system availability?===&lt;br /&gt;
&lt;br /&gt;
A. With Dynamic Routes a database or a web service can be used for lookups during incoming calls. Therefore the database or web server become a necessary component for call processing. If the server is unavailable, dynamic routing will not take place. You may however define a default destination. When a lookup fails it will follow the default destination. The default destination is also used when the lookup succeeds but no match is found. Using a local database or web server reduces availability dependencies but does not remove them entirely. &lt;br /&gt;
&lt;br /&gt;
===Q. What are the security implications of using Dynamic Routes?===&lt;br /&gt;
&lt;br /&gt;
A. The asterisk mysql add-on does not support SSL encrypted connections, so information (including credentials) passed between asterisk and the database may be intercepted. That is one reason why a local database is recommended. If your installation must use a remote server, consider whether a better option, also from performance and availability perspectives, would be to periodically copy the data needed into the mysql database running on the asterisk server.&lt;br /&gt;
&lt;br /&gt;
If you must use a remote server, then it is recommended (unless you can setup a local LAN between the two servers without risk of interception) to use ODBC with SSL enabled. An alternative is to setup an encrypted tunnel using a VPN or a software like stunnel.&lt;br /&gt;
&lt;br /&gt;
In any case it is recommended that the database be separate to the ones used for FreePBX configurations and CDRs. It is also recommended that a specific user is setup in order to access the database and that it has only select permissions on the tables that are used in the query. You should avoid using tables in the query that contain sensitive data, such as passwords. Consider defining a view if you have this case, which only gives access to the relevant columns needed. On MySQL for performance reasons that impact the whole server avoid using grant statements that contain column level access.&lt;br /&gt;
&lt;br /&gt;
===Q. What does the message &amp;lt;&amp;lt;Module &amp;quot;Dynamic Routes&amp;quot; is unsigned and should be re-downloaded&amp;gt;&amp;gt; mean?===&lt;br /&gt;
&lt;br /&gt;
A. FreePBX now has a system whereby a hash of the source code is computed and signed by Sangoma. See [http://wiki.freepbx.org/display/FPG/Module+Signing this link] for more information. This functionality is extremely useful because users know that the modules are the official versions and (unless the verification code itself is tampered with) they know that the code has not been modified.&lt;br /&gt;
&lt;br /&gt;
While very useful, there are a couple of implications:&lt;br /&gt;
* Third party modules will show an unsigned module warning&lt;br /&gt;
* Locally modified modules (for example to add a bug fix or new feature while waiting for that to be included in the official version) produce a tampered module warning&lt;br /&gt;
&lt;br /&gt;
Dynamic Routes is not part of the FreePBX core release and therefore the code is not signed by Sangoma. Although Sangoma provides for third party code signing after execution of a contract, at this time I have not applied for code signing rights.&lt;br /&gt;
&lt;br /&gt;
You may find the following [https://wiki.freepbx.org/display/FOP/Signing+your+own+modules link] helpful if you would like to remove the warning. It explains how to sign your own modules. It is possible to sign the module with a local key.&lt;br /&gt;
&lt;br /&gt;
==Configuration FAQ==&lt;br /&gt;
&lt;br /&gt;
===Q. How can I avoid matching short caller ids?===&lt;br /&gt;
&lt;br /&gt;
A. You can use a condition in the WHERE clause to ensure that only caller ids of sufficient length are matched. This is useful if your database contains company phone numbers with similar prefixes, but when receiving calls the caller id is set to the shorter main phone number of the company.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;select destination from callerid_table where calleridnum like &#039;%[NUMBER]&#039; and length(&#039;[NUMBER]&#039;) &amp;gt; 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Q. How can I match data in my database when sometimes the caller id arrives with an international prefix of + country codes, other times 00 country code and other times just as a national number?===&lt;br /&gt;
&lt;br /&gt;
A. You may use the MySQL TRIM function to adjust the presented caller id to match the type of data in your database. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;select destination from callerid_table where calleridnum like concat(&#039;%&#039;,TRIM(LEADING &#039;+&#039; FROM TRIM(LEADING &#039;0&#039; FROM &#039;[NUMBER]&#039;)))&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Q. Does Dynamic Route create the lookup table I will use in my query?===&lt;br /&gt;
&lt;br /&gt;
A. No. Dynamic Route creates the internal tables needed to store the configurations of the Dynamic Routes that you define. Specific Dynamic Routes may be configured to access a database table containing data that will be used in the routing decision. This data is external to Dynamic Routes and Dynamic Routes will only query this data as directed to do so by your configuration. Dynamic Routes will not create your external data tables or data. If you need an example of how to set up data tables to be queried by Dynamic Route, then please see this [[Creating_a_MySQL_table_for_use_with_Dynamic_Routes|link]] for information.&lt;br /&gt;
&lt;br /&gt;
===Q. Why don&#039;t my inbound calls get routed through Dynamic Routes?===&lt;br /&gt;
&lt;br /&gt;
A. Dynamic Routes does not automatically intervene in the call processing of your system. If you want calls to pass through Dynamic Routes you will need to configure your system to hand the calls to a specific Dynamic Route. Typically you can do this from the FreePBX &amp;quot;Connectivity&amp;quot; menu by choosing &amp;quot;Inbound Routes&amp;quot;. Choose the inbound route you  want to pass through Dynamic Route and in that route put the Dynamic Route as the destination. Call flow will then pass through the specified Dynamic Route.&lt;br /&gt;
&lt;br /&gt;
==Trouble shooting FAQ==&lt;br /&gt;
&lt;br /&gt;
===When reporting a problem what information should I provide?===&lt;br /&gt;
&lt;br /&gt;
Please see [[Dynamic Routes Support|here]]&lt;br /&gt;
&lt;br /&gt;
===Q. Why do I get strange errors when using asterisk MYSQL module?===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[2015-04-24 21:52:59] WARNING[14294][C-000020b6] pbx.c: Error in extension logic (missing &#039;}&#039;)&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] pbx.c: Can&#039;t find trailing parenthesis for function &#039;CALLERID(nu&#039;?&lt;br /&gt;
[2015-04-24 21:52:59] ERROR[14294][C-000020b6] func_callerid.c: Unknown callerid data type &#039;nu&#039;.&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:4] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Query resultid 1 select callerid_firstname from calleridlookup where owner=&#039;john&#039; and &#039;&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: aMYSQL_query: mysql_query failed. Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near &#039;&#039;&#039; at line 1&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:5] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Fetch fetchid  dynroute&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: aMYSQL_fetch: missing some arguments&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:6] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Clear &amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: Identifier 0, identifier_type 2 not found in identifier list&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: Invalid result identifier 0 passed in aMYSQL_clear&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:7] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Disconnect 1&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:8] Set(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;__DYNROUTE_TEST=&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] ast_expr2.fl: ast_yyerror():  syntax error: syntax error, unexpected &#039;=&#039;, expecting $end; Input:&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A. Do not use a semicolon at the end of the query. This syntax is not supported by asterisk MYSQL module.&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_FAQ&amp;diff=880</id>
		<title>Dynamic Routes FAQ</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_FAQ&amp;diff=880"/>
		<updated>2019-12-07T10:28:25Z</updated>

		<summary type="html">&lt;p&gt;John: /* Q. What does the message &amp;gt; mean? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==General FAQ==&lt;br /&gt;
&lt;br /&gt;
===Q. What are the prerequisites for Dynamic Routes?===&lt;br /&gt;
&lt;br /&gt;
A. The Dynamic Route module itself does not introduce additional prerequisites, so if your system is set up for Asterisk and FreePBX this module can be installed without adding any additional software. However, the lookup method you choose can introduce additional prerequisites.&lt;br /&gt;
&lt;br /&gt;
If you are using Dynamic Routes to connect to a MySQL database directly (without ODBC) then an additional Asterisk module is required (app_mysql). Please note that the app_mysql is not built by default. Please see this [[How to install Asterisk app_mysql|link]] for information. Although app_mysql is still widely used, it is no longer the recommended way to connect to the MySQL database from Asterisk.&lt;br /&gt;
&lt;br /&gt;
If you are using Dynamic Routes with ODBC you will need to install the ODBC software and driver for your database and configure it. Please see this [[How to set up an Asterisk ODBC data source on Linux|link]] for information.&lt;br /&gt;
&lt;br /&gt;
===Q. Does Dynamic Routes effect performance?===&lt;br /&gt;
&lt;br /&gt;
A. For most installations that are not under heavy load, there will not be performance concerns. However in high traffic installations, the performance aspect should be considered. Of course if the mysql query is not correctly tuned, then even low traffic sites will have issues. So first of all, the query to be used should be checked on a database with similar volumes as the production environment to ensure that it completes quickly. Any tuning of the query or needed indexes should be added.&lt;br /&gt;
&lt;br /&gt;
Instead of running the query against an online database, you may also consider a batch procedure which periodically extracts the needed information, reorganized in the optimum way and then load into a table where asterisk will specifically query it.&lt;br /&gt;
&lt;br /&gt;
Performance will be enhanced by using a local database instead of a remote database. Performance is also enhanced by using a non-SSL connection to the database, but this is not advisable for a remote database due to security concerns - see below. Even for a local database there may be security concerns of using a non-SSL connection, depending on who may access the server.&lt;br /&gt;
&lt;br /&gt;
When connecting to a database Dynamic Routes can use MySQL directly (using Asterisk app_mysql) or ODBC. ODBC is now the recommended way of accessing a database from Asterisk. It is reported that the level of indirection does not introduce any noticeable performance issue.&lt;br /&gt;
&lt;br /&gt;
===Q. Does Dynamic Routes effect system availability?===&lt;br /&gt;
&lt;br /&gt;
A. With Dynamic Routes a database or a web service can be used for lookups during incoming calls. Therefore the database or web server become a necessary component for call processing. If the server is unavailable, dynamic routing will not take place. You may however define a default destination. When a lookup fails it will follow the default destination. The default destination is also used when the lookup succeeds but no match is found. Using a local database or web server reduces availability dependencies but does not remove them entirely. &lt;br /&gt;
&lt;br /&gt;
===Q. What are the security implications of using Dynamic Routes?===&lt;br /&gt;
&lt;br /&gt;
A. The asterisk mysql add-on does not support SSL encrypted connections, so information (including credentials) passed between asterisk and the database may be intercepted. That is one reason why a local database is recommended. If your installation must use a remote server, consider whether a better option, also from performance and availability perspectives, would be to periodically copy the data needed into the mysql database running on the asterisk server.&lt;br /&gt;
&lt;br /&gt;
If you must use a remote server, then it is recommended (unless you can setup a local LAN between the two servers without risk of interception) to use ODBC with SSL enabled. An alternative is to setup an encrypted tunnel using a VPN or a software like stunnel.&lt;br /&gt;
&lt;br /&gt;
In any case it is recommended that the database be separate to the ones used for FreePBX configurations and CDRs. It is also recommended that a specific user is setup in order to access the database and that it has only select permissions on the tables that are used in the query. You should avoid using tables in the query that contain sensitive data, such as passwords. Consider defining a view if you have this case, which only gives access to the relevant columns needed. On MySQL for performance reasons that impact the whole server avoid using grant statements that contain column level access.&lt;br /&gt;
&lt;br /&gt;
===Q. What does the message &amp;lt;&amp;lt;Module &amp;quot;Dynamic Routes&amp;quot; is unsigned and should be re-downloaded&amp;gt;&amp;gt; mean?===&lt;br /&gt;
&lt;br /&gt;
A. FreePBX now has a system whereby a hash of the source code is computed and signed by Sangoma. See [http://wiki.freepbx.org/display/FPG/Module+Signing this link] for more information. This functionality is extremely useful because users know that the modules are the official versions and (unless the verification code itself is tampered with) they know that the code has not been modified.&lt;br /&gt;
&lt;br /&gt;
While very useful, there are a couple of implications:&lt;br /&gt;
* Third party modules will show an unsigned module warning&lt;br /&gt;
* Locally modified modules (for example to add a bug fix or new feature while waiting for that to be included in the official version) produce a tampered module warning&lt;br /&gt;
&lt;br /&gt;
Dynamic Routes is not part of the FreePBX core release and therefore the code is not signed by Sangoma. Although Sangoma provides for third party code signing after execution of a contract, at this time I have not applied for code signing rights.&lt;br /&gt;
&lt;br /&gt;
You may find the following link helpful if you would like to remove the warning. It explains how to sign your own modules. It is possible to sign the module with a local key.&lt;br /&gt;
[https://wiki.freepbx.org/display/FOP/Signing+your+own+modules]&lt;br /&gt;
&lt;br /&gt;
==Configuration FAQ==&lt;br /&gt;
&lt;br /&gt;
===Q. How can I avoid matching short caller ids?===&lt;br /&gt;
&lt;br /&gt;
A. You can use a condition in the WHERE clause to ensure that only caller ids of sufficient length are matched. This is useful if your database contains company phone numbers with similar prefixes, but when receiving calls the caller id is set to the shorter main phone number of the company.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;select destination from callerid_table where calleridnum like &#039;%[NUMBER]&#039; and length(&#039;[NUMBER]&#039;) &amp;gt; 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Q. How can I match data in my database when sometimes the caller id arrives with an international prefix of + country codes, other times 00 country code and other times just as a national number?===&lt;br /&gt;
&lt;br /&gt;
A. You may use the MySQL TRIM function to adjust the presented caller id to match the type of data in your database. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;select destination from callerid_table where calleridnum like concat(&#039;%&#039;,TRIM(LEADING &#039;+&#039; FROM TRIM(LEADING &#039;0&#039; FROM &#039;[NUMBER]&#039;)))&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Q. Does Dynamic Route create the lookup table I will use in my query?===&lt;br /&gt;
&lt;br /&gt;
A. No. Dynamic Route creates the internal tables needed to store the configurations of the Dynamic Routes that you define. Specific Dynamic Routes may be configured to access a database table containing data that will be used in the routing decision. This data is external to Dynamic Routes and Dynamic Routes will only query this data as directed to do so by your configuration. Dynamic Routes will not create your external data tables or data. If you need an example of how to set up data tables to be queried by Dynamic Route, then please see this [[Creating_a_MySQL_table_for_use_with_Dynamic_Routes|link]] for information.&lt;br /&gt;
&lt;br /&gt;
===Q. Why don&#039;t my inbound calls get routed through Dynamic Routes?===&lt;br /&gt;
&lt;br /&gt;
A. Dynamic Routes does not automatically intervene in the call processing of your system. If you want calls to pass through Dynamic Routes you will need to configure your system to hand the calls to a specific Dynamic Route. Typically you can do this from the FreePBX &amp;quot;Connectivity&amp;quot; menu by choosing &amp;quot;Inbound Routes&amp;quot;. Choose the inbound route you  want to pass through Dynamic Route and in that route put the Dynamic Route as the destination. Call flow will then pass through the specified Dynamic Route.&lt;br /&gt;
&lt;br /&gt;
==Trouble shooting FAQ==&lt;br /&gt;
&lt;br /&gt;
===When reporting a problem what information should I provide?===&lt;br /&gt;
&lt;br /&gt;
Please see [[Dynamic Routes Support|here]]&lt;br /&gt;
&lt;br /&gt;
===Q. Why do I get strange errors when using asterisk MYSQL module?===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[2015-04-24 21:52:59] WARNING[14294][C-000020b6] pbx.c: Error in extension logic (missing &#039;}&#039;)&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] pbx.c: Can&#039;t find trailing parenthesis for function &#039;CALLERID(nu&#039;?&lt;br /&gt;
[2015-04-24 21:52:59] ERROR[14294][C-000020b6] func_callerid.c: Unknown callerid data type &#039;nu&#039;.&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:4] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Query resultid 1 select callerid_firstname from calleridlookup where owner=&#039;john&#039; and &#039;&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: aMYSQL_query: mysql_query failed. Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near &#039;&#039;&#039; at line 1&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:5] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Fetch fetchid  dynroute&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: aMYSQL_fetch: missing some arguments&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:6] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Clear &amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: Identifier 0, identifier_type 2 not found in identifier list&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: Invalid result identifier 0 passed in aMYSQL_clear&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:7] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Disconnect 1&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:8] Set(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;__DYNROUTE_TEST=&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] ast_expr2.fl: ast_yyerror():  syntax error: syntax error, unexpected &#039;=&#039;, expecting $end; Input:&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A. Do not use a semicolon at the end of the query. This syntax is not supported by asterisk MYSQL module.&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Knowledge_base&amp;diff=879</id>
		<title>Knowledge base</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Knowledge_base&amp;diff=879"/>
		<updated>2019-05-11T15:25:37Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Linux/scp missing on centos install]]&lt;br /&gt;
* [[Linux/Network does not activate on cloned centos server]]&lt;br /&gt;
* [[Linux/LVM how to increase file system size by adding physical volume]]&lt;br /&gt;
* [[Linux/LVM how to decrease file system size]]&lt;br /&gt;
* [[Linux/LVM adding a NAS partition for backups]]&lt;br /&gt;
* [[Linux/Enable EPEL for Centos]]&lt;br /&gt;
* [[Linux/Enable rpmforge repository for Centos]]&lt;br /&gt;
* [[Linux/Allow yajhfc to connect to hylafax port in passive mode - Centos - Iptables]]&lt;br /&gt;
* [[Linux/Code Signing]]&lt;br /&gt;
* [[Linux/Setup MySQL to use SSL]]&lt;br /&gt;
* [[Linux/Solr delete dovecot index]]&lt;br /&gt;
* [[Linux/Solr reindex dovecot]]&lt;br /&gt;
* [[Linux/Solr command line search]]&lt;br /&gt;
* [[Linux/VLAN on bridged network]]&lt;br /&gt;
* [[Linux/VLAN]] on main network&lt;br /&gt;
* [[Linux/Multihomed network routing]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Linux/VLAN&amp;diff=878</id>
		<title>Linux/VLAN</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Linux/VLAN&amp;diff=878"/>
		<updated>2019-05-07T23:13:29Z</updated>

		<summary type="html">&lt;p&gt;John: Created page with &amp;quot;nmcli con add type vlan con-name VLAN15 ifname VLAN15 id 15 dev enp0s25 ip4 192.168.15.30/24 gw4 192.168.15.1&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;nmcli con add type vlan con-name VLAN15 ifname VLAN15 id 15 dev enp0s25 ip4 192.168.15.30/24 gw4 192.168.15.1&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Knowledge_base&amp;diff=877</id>
		<title>Knowledge base</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Knowledge_base&amp;diff=877"/>
		<updated>2019-05-07T23:13:12Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Linux/scp missing on centos install]]&lt;br /&gt;
* [[Linux/Network does not activate on cloned centos server]]&lt;br /&gt;
* [[Linux/LVM how to increase file system size by adding physical volume]]&lt;br /&gt;
* [[Linux/LVM how to decrease file system size]]&lt;br /&gt;
* [[Linux/LVM adding a NAS partition for backups]]&lt;br /&gt;
* [[Linux/Enable EPEL for Centos]]&lt;br /&gt;
* [[Linux/Enable rpmforge repository for Centos]]&lt;br /&gt;
* [[Linux/Allow yajhfc to connect to hylafax port in passive mode - Centos - Iptables]]&lt;br /&gt;
* [[Linux/Code Signing]]&lt;br /&gt;
* [[Linux/Setup MySQL to use SSL]]&lt;br /&gt;
* [[Linux/Solr delete dovecot index]]&lt;br /&gt;
* [[Linux/Solr reindex dovecot]]&lt;br /&gt;
* [[Linux/Solr command line search]]&lt;br /&gt;
* [[Linux/VLAN on bridged network]]&lt;br /&gt;
* [[Linux/VLAN]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Linux/VLAN_on_bridged_network&amp;diff=876</id>
		<title>Linux/VLAN on bridged network</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Linux/VLAN_on_bridged_network&amp;diff=876"/>
		<updated>2019-05-07T23:11:59Z</updated>

		<summary type="html">&lt;p&gt;John: Created page with &amp;quot;nmcli con add type vlan con-name enp0s25.11 dev enp0s25 id 11 master virbr1 connection.autoconnect yes&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;nmcli con add type vlan con-name enp0s25.11 dev enp0s25 id 11 master virbr1 connection.autoconnect yes&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Knowledge_base&amp;diff=875</id>
		<title>Knowledge base</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Knowledge_base&amp;diff=875"/>
		<updated>2019-05-07T23:11:12Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Linux/scp missing on centos install]]&lt;br /&gt;
* [[Linux/Network does not activate on cloned centos server]]&lt;br /&gt;
* [[Linux/LVM how to increase file system size by adding physical volume]]&lt;br /&gt;
* [[Linux/LVM how to decrease file system size]]&lt;br /&gt;
* [[Linux/LVM adding a NAS partition for backups]]&lt;br /&gt;
* [[Linux/Enable EPEL for Centos]]&lt;br /&gt;
* [[Linux/Enable rpmforge repository for Centos]]&lt;br /&gt;
* [[Linux/Allow yajhfc to connect to hylafax port in passive mode - Centos - Iptables]]&lt;br /&gt;
* [[Linux/Code Signing]]&lt;br /&gt;
* [[Linux/Setup MySQL to use SSL]]&lt;br /&gt;
* [[Linux/Solr delete dovecot index]]&lt;br /&gt;
* [[Linux/Solr reindex dovecot]]&lt;br /&gt;
* [[Linux/Solr command line search]]&lt;br /&gt;
* [[Linux/VLAN on bridged network]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Linux/Solr_command_line_search&amp;diff=874</id>
		<title>Linux/Solr command line search</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Linux/Solr_command_line_search&amp;diff=874"/>
		<updated>2019-04-14T19:20:47Z</updated>

		<summary type="html">&lt;p&gt;John: Created page with &amp;quot;Testing from doveadm  doveadm search -u user@example.com mailbox inbox body text_to_search_for&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Testing from doveadm&lt;br /&gt;
&lt;br /&gt;
doveadm search -u user@example.com mailbox inbox body text_to_search_for&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Knowledge_base&amp;diff=873</id>
		<title>Knowledge base</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Knowledge_base&amp;diff=873"/>
		<updated>2019-04-14T19:20:00Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Linux/scp missing on centos install]]&lt;br /&gt;
* [[Linux/Network does not activate on cloned centos server]]&lt;br /&gt;
* [[Linux/LVM how to increase file system size by adding physical volume]]&lt;br /&gt;
* [[Linux/LVM how to decrease file system size]]&lt;br /&gt;
* [[Linux/LVM adding a NAS partition for backups]]&lt;br /&gt;
* [[Linux/Enable EPEL for Centos]]&lt;br /&gt;
* [[Linux/Enable rpmforge repository for Centos]]&lt;br /&gt;
* [[Linux/Allow yajhfc to connect to hylafax port in passive mode - Centos - Iptables]]&lt;br /&gt;
* [[Linux/Code Signing]]&lt;br /&gt;
* [[Linux/Setup MySQL to use SSL]]&lt;br /&gt;
* [[Linux/Solr delete dovecot index]]&lt;br /&gt;
* [[Linux/Solr reindex dovecot]]&lt;br /&gt;
* [[Linux/Solr command line search]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Linux/Solr_reindex_dovecot&amp;diff=872</id>
		<title>Linux/Solr reindex dovecot</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Linux/Solr_reindex_dovecot&amp;diff=872"/>
		<updated>2019-04-14T16:54:08Z</updated>

		<summary type="html">&lt;p&gt;John: Created page with &amp;quot;Rescan index for all users  doveadm fts rescan -A  Rescan index for specific user:  doveadm fts rescan -u user@example.com    Reindex dovecot all users  doveadm index -A &amp;quot;*&amp;quot;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Rescan index for all users&lt;br /&gt;
&lt;br /&gt;
doveadm fts rescan -A&lt;br /&gt;
&lt;br /&gt;
Rescan index for specific user:&lt;br /&gt;
&lt;br /&gt;
doveadm fts rescan -u user@example.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reindex dovecot all users&lt;br /&gt;
&lt;br /&gt;
doveadm index -A &amp;quot;*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Reindex specific user&lt;br /&gt;
&lt;br /&gt;
doveadm index -u user@example.com&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Knowledge_base&amp;diff=871</id>
		<title>Knowledge base</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Knowledge_base&amp;diff=871"/>
		<updated>2019-04-14T16:52:09Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Linux/scp missing on centos install]]&lt;br /&gt;
* [[Linux/Network does not activate on cloned centos server]]&lt;br /&gt;
* [[Linux/LVM how to increase file system size by adding physical volume]]&lt;br /&gt;
* [[Linux/LVM how to decrease file system size]]&lt;br /&gt;
* [[Linux/LVM adding a NAS partition for backups]]&lt;br /&gt;
* [[Linux/Enable EPEL for Centos]]&lt;br /&gt;
* [[Linux/Enable rpmforge repository for Centos]]&lt;br /&gt;
* [[Linux/Allow yajhfc to connect to hylafax port in passive mode - Centos - Iptables]]&lt;br /&gt;
* [[Linux/Code Signing]]&lt;br /&gt;
* [[Linux/Setup MySQL to use SSL]]&lt;br /&gt;
* [[Linux/Solr delete dovecot index]]&lt;br /&gt;
* [[Linux/Solr reindex dovecot]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Linux/Solr_delete_dovecot_index&amp;diff=870</id>
		<title>Linux/Solr delete dovecot index</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Linux/Solr_delete_dovecot_index&amp;diff=870"/>
		<updated>2019-04-14T16:51:38Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Delete a dovecot index&lt;br /&gt;
&lt;br /&gt;
curl https://user:passwordQ@solr.example.com:443/solr/dovecot/update --data &#039;&amp;lt;delete&amp;gt;&amp;lt;query&amp;gt;*:*&amp;lt;/query&amp;gt;&amp;lt;/delete&amp;gt;&#039; -H &#039;Content-type:text/xml; charset=utf-8&#039;&lt;br /&gt;
&lt;br /&gt;
Soft Commit&lt;br /&gt;
&lt;br /&gt;
curl https://user:password@solr.example.com:443/solr/dovecot/update?softCommit=true&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Linux/Solr_delete_dovecot_index&amp;diff=869</id>
		<title>Linux/Solr delete dovecot index</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Linux/Solr_delete_dovecot_index&amp;diff=869"/>
		<updated>2019-04-14T16:48:50Z</updated>

		<summary type="html">&lt;p&gt;John: Created page with &amp;quot;Delete a dovecot index  curl https://user:passwordQ@solr.site24.it:443/solr/dovecot/update --data &amp;#039;&amp;lt;delete&amp;gt;&amp;lt;query&amp;gt;*:*&amp;lt;/query&amp;gt;&amp;lt;/delete&amp;gt;&amp;#039; -H &amp;#039;Content-type:text/xml; charset=utf-8&amp;#039;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Delete a dovecot index&lt;br /&gt;
&lt;br /&gt;
curl https://user:passwordQ@solr.site24.it:443/solr/dovecot/update --data &#039;&amp;lt;delete&amp;gt;&amp;lt;query&amp;gt;*:*&amp;lt;/query&amp;gt;&amp;lt;/delete&amp;gt;&#039; -H &#039;Content-type:text/xml; charset=utf-8&#039;&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Knowledge_base&amp;diff=868</id>
		<title>Knowledge base</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Knowledge_base&amp;diff=868"/>
		<updated>2019-04-14T16:48:20Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Linux/scp missing on centos install]]&lt;br /&gt;
* [[Linux/Network does not activate on cloned centos server]]&lt;br /&gt;
* [[Linux/LVM how to increase file system size by adding physical volume]]&lt;br /&gt;
* [[Linux/LVM how to decrease file system size]]&lt;br /&gt;
* [[Linux/LVM adding a NAS partition for backups]]&lt;br /&gt;
* [[Linux/Enable EPEL for Centos]]&lt;br /&gt;
* [[Linux/Enable rpmforge repository for Centos]]&lt;br /&gt;
* [[Linux/Allow yajhfc to connect to hylafax port in passive mode - Centos - Iptables]]&lt;br /&gt;
* [[Linux/Code Signing]]&lt;br /&gt;
* [[Linux/Setup MySQL to use SSL]]&lt;br /&gt;
* [[Linux/Solr delete dovecot index]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=MediaWiki:Sidebar&amp;diff=867</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=MediaWiki:Sidebar&amp;diff=867"/>
		<updated>2019-03-16T10:11:18Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=CheckAuthLog_gpg_signatures&amp;diff=866</id>
		<title>CheckAuthLog gpg signatures</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=CheckAuthLog_gpg_signatures&amp;diff=866"/>
		<updated>2019-03-16T10:04:39Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Signature for 3.2.1&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[:File:Checkauthlog-3.2.1.tar.gz.sig]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;GPG Public Key used to sign the release packages&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[:File:johnfawcett.gpg]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=CheckAuthLog_gpg_signatures&amp;diff=865</id>
		<title>CheckAuthLog gpg signatures</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=CheckAuthLog_gpg_signatures&amp;diff=865"/>
		<updated>2019-03-16T10:03:36Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Signature for 3.2.1&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[:File:check auth log-3.2.1.tar.gz.sig]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;GPG Public Key used to sign the release packages&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[:File:johnfawcett.gpg]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=File:Checkauthlog-3.2.1.tar.gz.sig&amp;diff=864</id>
		<title>File:Checkauthlog-3.2.1.tar.gz.sig</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=File:Checkauthlog-3.2.1.tar.gz.sig&amp;diff=864"/>
		<updated>2019-03-16T10:03:05Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=CheckAuthLog_gpg_signatures&amp;diff=863</id>
		<title>CheckAuthLog gpg signatures</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=CheckAuthLog_gpg_signatures&amp;diff=863"/>
		<updated>2019-03-16T10:02:49Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Signature for 3.2.1&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[:File:check_auth_log-3.2.1.tar.gz.sig]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;GPG Public Key used to sign the release packages&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[:File:johnfawcett.gpg]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=CheckAuthLog_gpg_signatures&amp;diff=862</id>
		<title>CheckAuthLog gpg signatures</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=CheckAuthLog_gpg_signatures&amp;diff=862"/>
		<updated>2019-03-16T10:01:00Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Signature for 3.2.1&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[:File:check_auth_log-3.2.1.tgz.sig]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;GPG Public Key used to sign the release packages&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[:File:johnfawcett.gpg]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=CheckAuthLog_gpg_signatures&amp;diff=861</id>
		<title>CheckAuthLog gpg signatures</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=CheckAuthLog_gpg_signatures&amp;diff=861"/>
		<updated>2019-03-16T09:49:29Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Signature for 3.2.1&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[:File:check auth log-3.2.1.tgz.sig]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;GPG Public Key used to sign the release packages&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[:File:johnfawcett.gpg]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=CheckAuthLog&amp;diff=860</id>
		<title>CheckAuthLog</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=CheckAuthLog&amp;diff=860"/>
		<updated>2019-03-16T09:48:47Z</updated>

		<summary type="html">&lt;p&gt;John: /* How do I get it? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What is it?==&lt;br /&gt;
&lt;br /&gt;
CheckAuthLog is a security feature for email servers. It can check the log files for suspicious email sending behaviour which may be indicative of a compromised email account and block that account.&lt;br /&gt;
&lt;br /&gt;
==What could I use it for?==&lt;br /&gt;
&lt;br /&gt;
If you are running a [http://www.postfix.org Postfix] or [http://www.exim.org Exim] email server, you can use this script to enhance security of your server. Stolen email credentials are now often used to send spam. A spam outflow from your email server could cause reputation problems particularly with large email providers and RBL users. While there are many other things you can do as a first line of defence, if you have a large or variegated group of users, you may not be able to avoid the risk of email credentials being stolen.&lt;br /&gt;
&lt;br /&gt;
CheckAuthLog is not designed to completely stop spam sending or avoid all fraudulent use of an email account. However it can help stop things before they go too far out of control.&lt;br /&gt;
&lt;br /&gt;
==How do I get it?==&lt;br /&gt;
&lt;br /&gt;
The code for the project is hosted on github. Please see [https://github.com/johnfawcett/checkauthlog CheckAuthLog source code repository]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/checkauthlog/archive/V3.2.1.tar.gz CheckAuthLog 3.2.1]&lt;br /&gt;
&lt;br /&gt;
[[CheckAuthLog Change Log]]&lt;br /&gt;
&lt;br /&gt;
Previous versions are archived for historical reference but are no longer maintained and should not be used: [[CheckAuthLog previous versions]]&lt;br /&gt;
&lt;br /&gt;
GPG signatures for the latest version is available here [[CheckAuthLog gpg signatures]]&lt;br /&gt;
&lt;br /&gt;
==Where can I get more information?==&lt;br /&gt;
&lt;br /&gt;
* [[CheckAuthLog Installation instructions| Installation Instructions]]&lt;br /&gt;
* [[CheckAuthLog Licence|Licence]]&lt;br /&gt;
* [[CheckAuthLog Reference documentation|Reference documentation]]&lt;br /&gt;
* [[CheckAuthLog Future plans|Future plans]]&lt;br /&gt;
* [[CheckAuthLog FAQ|FAQ]]&lt;br /&gt;
* [[CheckAuthLog Support|Support]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=CheckAuthLog_Change_Log&amp;diff=859</id>
		<title>CheckAuthLog Change Log</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=CheckAuthLog_Change_Log&amp;diff=859"/>
		<updated>2019-03-16T09:47:52Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
2010-Oct-27 check_auth_log-1.0.1.tgz&lt;br /&gt;
&lt;br /&gt;
2010-Sep-19 check_auth_log-1.0.0.tgz&lt;br /&gt;
&lt;br /&gt;
Version 2.0.0 includes performance improvements for the log file parsing and a mechanism to avoid more than one instance running at a time. Also support is included for Exim. As I do not run Exim that code has only been lightly tested. Feedback is welcome.&lt;br /&gt;
Version 3.0.0 released 11 April 2015 contains the following main changes:&lt;br /&gt;
* Support for syslog (enabled by default)&lt;br /&gt;
* Support for log level (for syslog and for standard output)&lt;br /&gt;
* New configuration variable ignored_users to avoid listed users being subject to checks. Comma separated list of logins&lt;br /&gt;
* New configuration variable ignored_ips to avoid logging listed ips or ranges. Comma separated list of ips or cidr ranges.&lt;br /&gt;
* Ability to notify users their account has been blocked (only useful if the block does not prevent them receiving and reading email)&lt;br /&gt;
* Self checking: the script notifies you if it fails to find new log lines after a certain interval (default 1 hour) or new logins after a certain interval (default 1 day - but should be customized to what you expect)&lt;br /&gt;
* Self checking is enabled by default but can be turned off if not needed.&lt;br /&gt;
* Support for sending self check notifications to the admin via email (not really needed if you run from crontab since you receive the standard output anyway) but for some might be useful&lt;br /&gt;
* A new variable that can be used in mysql queries %l (lower case L) which matches the local part of the user name before the @&lt;br /&gt;
New command line options:&lt;br /&gt;
* -z will run the self check routines only&lt;br /&gt;
* -e xxxx@domain.com will simulate the email notification to user specified in the parameter. This can be useful for testing the email setup, without having to trigger a hit on the user or ip limits.&lt;br /&gt;
&lt;br /&gt;
A bug was found and corrected during testing of version 3 (present in previous versions). If the log file contains multiple login lines that cause the ip or message limits to be exceeded, then each single login line processed would trigger the blocking action. This can logically occur only in the same or next log file, since following the successful blocking action, no new login lines will be generated until the account is unblocked. This did not create any particular negative consequences (reblocking a blocked user), but with the email notification feature, it would have created multiple notifications. Now the script will suppress blocking action if the user was already blocked in the current or previous run.&lt;br /&gt;
&lt;br /&gt;
Some of the development in version 3 was funded by a donation.&lt;br /&gt;
&lt;br /&gt;
Versione 3.2.1 released on 16 March 2019 contains code cleanup, bug fix for an issue where the timezone of php is different to the timezone of the server logging, and improved logging which will help in the case of further issues.&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=CheckAuthLog_previous_versions&amp;diff=858</id>
		<title>CheckAuthLog previous versions</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=CheckAuthLog_previous_versions&amp;diff=858"/>
		<updated>2019-03-16T09:44:33Z</updated>

		<summary type="html">&lt;p&gt;John: /* Signed with current GPG key */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Signed with current GPG key==&lt;br /&gt;
&lt;br /&gt;
Version 3.0.0: [[File:check_auth_log-3.0.0.tgz]] GPG Signature: [[File:check_auth_log-3.0.0.tgz.sig]]&lt;br /&gt;
&lt;br /&gt;
Version 2.0.0: [[File:check_auth_log-2.0.0.tgz]] GPG Signature: [[File:check_auth_log-2.0.0.tgz.sig]]&lt;br /&gt;
&lt;br /&gt;
Version 1.0.1: [[File:check_auth_log-1.0.1.tgz]] GPG Signature: [[File:check_auth_log-1.0.1.tgz.sig]]&lt;br /&gt;
&lt;br /&gt;
GPG public key for above releases [[File:johnfawcett.gpg]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_Reference_documentation&amp;diff=857</id>
		<title>Dynamic Routes Reference documentation</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_Reference_documentation&amp;diff=857"/>
		<updated>2018-06-08T04:16:41Z</updated>

		<summary type="html">&lt;p&gt;John: /* Substitutions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dynamic Route==&lt;br /&gt;
&lt;br /&gt;
The following information documents how to fill in the fields of a Dynamic Route. This documentation refers to the V13 functionality. Not all options are available in previous versions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field name&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
| Dynamic Route Name&lt;br /&gt;
| The name of the dynamic route. This can be chosen at will. It is used to identify the route when selecting it as a destination from other applications or inbound routes. &lt;br /&gt;
|-&lt;br /&gt;
| Dynamic Route Description&lt;br /&gt;
| Optional description text for the Dynamic Route. This is for documentation purposes only&lt;br /&gt;
|-&lt;br /&gt;
| Enable DTMF Input&lt;br /&gt;
| Setting: Yes or No. Default: No. If set to yes the call waits for input on the touch tone keypad. This can be used to capture caller input (for example a customer number).&lt;br /&gt;
|-&lt;br /&gt;
| Announcement&lt;br /&gt;
| The system recording to be played back. If Enable DTMF input is set to Yes then playback takes palce before waiting for DTMF input.&lt;br /&gt;
|-&lt;br /&gt;
| Timeout&lt;br /&gt;
| Timeout in seconds to wait for DTMF input. This value is only used if Enable DTMF Input is set to Yes. If no value is given for timeout, the default for the channel is used. It is best to set an explicit value to avoid doubts. &lt;br /&gt;
|-&lt;br /&gt;
| Validation&lt;br /&gt;
| Validation rules using a Asterisk regular expression (see Asterisk [https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Function_REGEX REGEX]). For example to ensure the input is between 3 and 4 digits long you could use ^[0-9]\{3,4\}$&lt;br /&gt;
|-&lt;br /&gt;
| Invalid Retries&lt;br /&gt;
| Number of times to retry if DTMF input does not match validation rules.&lt;br /&gt;
|-&lt;br /&gt;
| Invalid Retry Recording &lt;br /&gt;
| Recording to play if DTMF input does not match validation rules.&lt;br /&gt;
|-&lt;br /&gt;
| Invalid Recording&lt;br /&gt;
| Recording to play if DTMF input does not match validation rules and Invalid Retries have been exhausted.&lt;br /&gt;
|-&lt;br /&gt;
| Invalid Destination&lt;br /&gt;
| The destination to send the call to if DTMF input does not match the validation rules and Invalid Retries ahve been exhausted. The call is sent to this destination after playing the Invalid Recording if it is defined.&lt;br /&gt;
|-&lt;br /&gt;
| Saved input varibale name&lt;br /&gt;
| Name of variable in which to save DTMF input for future use in the dial plan or further dynamic routes. This is available as [name] in the query/lookup where name is the name of the variable you specify here. To use the variable in the dial plan (e.g. custom applications) it is necessary to prefix it with DYNROUTE_ e.g. DYNROUTE_name&lt;br /&gt;
|-&lt;br /&gt;
| Saved result variable name&lt;br /&gt;
| Name of variable in which to save lookup result for future use in the dial plan or further dynamic routes. This is available as [name] in the query/lookup where name is the name of the variable you specify here. To use the variable in the dial plan (e.g. custom applications) it is necessary to prefix it with DYNROUTE_ e.g. DYNROUTE_name&lt;br /&gt;
|-&lt;br /&gt;
| Source Type&lt;br /&gt;
| The type of lookup (see under Source types below for further information&lt;br /&gt;
|-&lt;br /&gt;
| Default Destination&lt;br /&gt;
| Destination to send the call to if the lookup result does not match one of the match values in the Dynamic Route Entries section or if the lookup fails. This is optional but is strongly recommended. If there is no default destination defined, then in the case of a lookup failure or if the lookup result does not match one of the defined values, the call will be disconnected. If this is not what is required, define the default destination with the desired behaviour.&lt;br /&gt;
|-&lt;br /&gt;
| Dynamic Route Entries&lt;br /&gt;
| Zero or more entries to be matched by the lookup result. If the lookup matches, then the call is routed to the chosen destination. Each match is tried in the order given until one matches. If no match is found then the call is sent to the Default Destination. Additional rows may be added by clicking the + symbol. Entries may be deleted by cancelling the value in the Match field.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Source Type==&lt;br /&gt;
&lt;br /&gt;
The following are the currently available source types for lookups. Each source type has its own specific fields for defining the lookup parameters.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Source Type&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
| none&lt;br /&gt;
| No lookup is carried out. The call is sent to the default destination&lt;br /&gt;
|-&lt;br /&gt;
| MySQL&lt;br /&gt;
| A lookup is done to a MySQL database. The parameters used are:&lt;br /&gt;
* MySQL hostname: hostname of server&lt;br /&gt;
* MySQL database: database name&lt;br /&gt;
* MySQL username: username&lt;br /&gt;
* MySQL password: password&lt;br /&gt;
* MySQL query: the SQL to be used. It can contain substitutions as indicated in the table below. Example: select destination from callerid_table where calleridnum like &#039;%[NUMBER]&#039; &lt;br /&gt;
|-&lt;br /&gt;
| ODBC&lt;br /&gt;
|  A lookup is done to an Asterisk ODBC data source. The parameters used are:&lt;br /&gt;
* ODBC function: the Asterisk ODBC function name that has been configured&lt;br /&gt;
* ODBC query: the query. It can contain substitutions as indicated in the table below. Example: select destination from callerid_table where calleridnum like &#039;%[NUMBER]&#039; &lt;br /&gt;
For information about setting up ODBC see this [[How to set up an Asterisk ODBC data source on Linux |article]]&lt;br /&gt;
|- &lt;br /&gt;
| URL&lt;br /&gt;
| A lookup is done to a URL. The parameters used are:&lt;br /&gt;
* URL Looup: the URL to be used for the lookup. The results must be text only. HTML, XML and JSON is not supported. The URL may contains parameters and the parameter values may include the substitutions indicated in the following table. Example: &amp;lt;nowiki&amp;gt;http://localhost/test.php?param1=4&amp;amp;param2=[NUMBER]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| AGI&lt;br /&gt;
| A lookup is done by launching an Asterisk AGI script. The parameters used are:&lt;br /&gt;
* AGI Lookup: the name of the Asterisk AGI script to be launched.&lt;br /&gt;
* AGI Result Variable: the name of the variable that the script uses to communicate the result. The script should execute a SET VARIABLE command using this variable name at the end of execution in order to pass back the lookup result. An example script is given in the installation directory (test.agi).&lt;br /&gt;
|-&lt;br /&gt;
| Asterisk Variable&lt;br /&gt;
| The lookup value is read from an Asterisk Variable. The parameters used are:&lt;br /&gt;
* Asterisk Variable: the variable name from which to read the result. Example: ${xxx}. Complex expressions may also be written provided they use valid Asterisk functions, for example: ${REGEX(&amp;quot;^1.3$&amp;quot; ${DYNROUTE_dtmf})} would check that the DTMF input was in the range 1000-1999 (providing that the Saved input variable name was set to &amp;quot;dtmf&amp;quot;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Substitutions==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;In the lookup&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When defining the query field for the lookup, the following Variable Names will be substituted by the corresponding value at the time of the call routing.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable Name&lt;br /&gt;
! Substituted by &lt;br /&gt;
|-&lt;br /&gt;
| [INPUT]&lt;br /&gt;
| The DTMF input by the caller on the touchtone keypad&lt;br /&gt;
|-&lt;br /&gt;
| [NUMBER]&lt;br /&gt;
| The callerid of the incoming call&lt;br /&gt;
|-&lt;br /&gt;
| [DID]&lt;br /&gt;
| The called number&lt;br /&gt;
|-&lt;br /&gt;
| [name]&lt;br /&gt;
| Where &amp;quot;name&amp;quot; is the value of one of these two fields: Saved input varibale name or Saved result varibale name. In the case of Saved input variable name, the DTMF input is saved under this name. This is useful if you are using two levels of Dynamic Route so that you can save the DTMF from the previous Dynamic Route in a uniquely named variable and use that variable in the lookup of the second Dynamic Route. In the case of Saved result variable name, the result returned from the lookup is saved to the variable name and can be used in a later Dynamic Route.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;If you want to use a variable created outside Dynamic Routes in the lookup, then name the variable with a DYNROUTE_ prefix. Then [name] will be substituted by the value of the asterisk variable DYNROUTE_name. There is currently no way of reading an arbitrarily named asterisk variable, except for the lookup type &amp;quot;Asterisk variable&amp;quot;. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;In custom dial plan or other FreePBX modules&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable Name&lt;br /&gt;
! Substituted by &lt;br /&gt;
|-&lt;br /&gt;
| DYNROUTE_name&lt;br /&gt;
| Where &amp;quot;name&amp;quot; is the value of one of these two fields: Saved input varibale name or Saved result varibale name. In the case of Saved input variable name, the DTMF input is saved under this name. This is useful if you need to use the value in a custom dial plan application or another FreePBX module. In the case of Saved result variable name, the result returned from the lookup is saved to the variable name and can be used in a custom dial plan application or another FreePBX module. To obtain the value of the variable named name, use ${DYNROUTE_name} in the Asterisk dial plan.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Screenshot of adding a Dynamic Route==&lt;br /&gt;
&lt;br /&gt;
[[File:dynamic_route_add.png]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_Reference_documentation&amp;diff=856</id>
		<title>Dynamic Routes Reference documentation</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_Reference_documentation&amp;diff=856"/>
		<updated>2018-06-08T04:16:16Z</updated>

		<summary type="html">&lt;p&gt;John: /* Substitutions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dynamic Route==&lt;br /&gt;
&lt;br /&gt;
The following information documents how to fill in the fields of a Dynamic Route. This documentation refers to the V13 functionality. Not all options are available in previous versions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field name&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
| Dynamic Route Name&lt;br /&gt;
| The name of the dynamic route. This can be chosen at will. It is used to identify the route when selecting it as a destination from other applications or inbound routes. &lt;br /&gt;
|-&lt;br /&gt;
| Dynamic Route Description&lt;br /&gt;
| Optional description text for the Dynamic Route. This is for documentation purposes only&lt;br /&gt;
|-&lt;br /&gt;
| Enable DTMF Input&lt;br /&gt;
| Setting: Yes or No. Default: No. If set to yes the call waits for input on the touch tone keypad. This can be used to capture caller input (for example a customer number).&lt;br /&gt;
|-&lt;br /&gt;
| Announcement&lt;br /&gt;
| The system recording to be played back. If Enable DTMF input is set to Yes then playback takes palce before waiting for DTMF input.&lt;br /&gt;
|-&lt;br /&gt;
| Timeout&lt;br /&gt;
| Timeout in seconds to wait for DTMF input. This value is only used if Enable DTMF Input is set to Yes. If no value is given for timeout, the default for the channel is used. It is best to set an explicit value to avoid doubts. &lt;br /&gt;
|-&lt;br /&gt;
| Validation&lt;br /&gt;
| Validation rules using a Asterisk regular expression (see Asterisk [https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Function_REGEX REGEX]). For example to ensure the input is between 3 and 4 digits long you could use ^[0-9]\{3,4\}$&lt;br /&gt;
|-&lt;br /&gt;
| Invalid Retries&lt;br /&gt;
| Number of times to retry if DTMF input does not match validation rules.&lt;br /&gt;
|-&lt;br /&gt;
| Invalid Retry Recording &lt;br /&gt;
| Recording to play if DTMF input does not match validation rules.&lt;br /&gt;
|-&lt;br /&gt;
| Invalid Recording&lt;br /&gt;
| Recording to play if DTMF input does not match validation rules and Invalid Retries have been exhausted.&lt;br /&gt;
|-&lt;br /&gt;
| Invalid Destination&lt;br /&gt;
| The destination to send the call to if DTMF input does not match the validation rules and Invalid Retries ahve been exhausted. The call is sent to this destination after playing the Invalid Recording if it is defined.&lt;br /&gt;
|-&lt;br /&gt;
| Saved input varibale name&lt;br /&gt;
| Name of variable in which to save DTMF input for future use in the dial plan or further dynamic routes. This is available as [name] in the query/lookup where name is the name of the variable you specify here. To use the variable in the dial plan (e.g. custom applications) it is necessary to prefix it with DYNROUTE_ e.g. DYNROUTE_name&lt;br /&gt;
|-&lt;br /&gt;
| Saved result variable name&lt;br /&gt;
| Name of variable in which to save lookup result for future use in the dial plan or further dynamic routes. This is available as [name] in the query/lookup where name is the name of the variable you specify here. To use the variable in the dial plan (e.g. custom applications) it is necessary to prefix it with DYNROUTE_ e.g. DYNROUTE_name&lt;br /&gt;
|-&lt;br /&gt;
| Source Type&lt;br /&gt;
| The type of lookup (see under Source types below for further information&lt;br /&gt;
|-&lt;br /&gt;
| Default Destination&lt;br /&gt;
| Destination to send the call to if the lookup result does not match one of the match values in the Dynamic Route Entries section or if the lookup fails. This is optional but is strongly recommended. If there is no default destination defined, then in the case of a lookup failure or if the lookup result does not match one of the defined values, the call will be disconnected. If this is not what is required, define the default destination with the desired behaviour.&lt;br /&gt;
|-&lt;br /&gt;
| Dynamic Route Entries&lt;br /&gt;
| Zero or more entries to be matched by the lookup result. If the lookup matches, then the call is routed to the chosen destination. Each match is tried in the order given until one matches. If no match is found then the call is sent to the Default Destination. Additional rows may be added by clicking the + symbol. Entries may be deleted by cancelling the value in the Match field.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Source Type==&lt;br /&gt;
&lt;br /&gt;
The following are the currently available source types for lookups. Each source type has its own specific fields for defining the lookup parameters.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Source Type&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
| none&lt;br /&gt;
| No lookup is carried out. The call is sent to the default destination&lt;br /&gt;
|-&lt;br /&gt;
| MySQL&lt;br /&gt;
| A lookup is done to a MySQL database. The parameters used are:&lt;br /&gt;
* MySQL hostname: hostname of server&lt;br /&gt;
* MySQL database: database name&lt;br /&gt;
* MySQL username: username&lt;br /&gt;
* MySQL password: password&lt;br /&gt;
* MySQL query: the SQL to be used. It can contain substitutions as indicated in the table below. Example: select destination from callerid_table where calleridnum like &#039;%[NUMBER]&#039; &lt;br /&gt;
|-&lt;br /&gt;
| ODBC&lt;br /&gt;
|  A lookup is done to an Asterisk ODBC data source. The parameters used are:&lt;br /&gt;
* ODBC function: the Asterisk ODBC function name that has been configured&lt;br /&gt;
* ODBC query: the query. It can contain substitutions as indicated in the table below. Example: select destination from callerid_table where calleridnum like &#039;%[NUMBER]&#039; &lt;br /&gt;
For information about setting up ODBC see this [[How to set up an Asterisk ODBC data source on Linux |article]]&lt;br /&gt;
|- &lt;br /&gt;
| URL&lt;br /&gt;
| A lookup is done to a URL. The parameters used are:&lt;br /&gt;
* URL Looup: the URL to be used for the lookup. The results must be text only. HTML, XML and JSON is not supported. The URL may contains parameters and the parameter values may include the substitutions indicated in the following table. Example: &amp;lt;nowiki&amp;gt;http://localhost/test.php?param1=4&amp;amp;param2=[NUMBER]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| AGI&lt;br /&gt;
| A lookup is done by launching an Asterisk AGI script. The parameters used are:&lt;br /&gt;
* AGI Lookup: the name of the Asterisk AGI script to be launched.&lt;br /&gt;
* AGI Result Variable: the name of the variable that the script uses to communicate the result. The script should execute a SET VARIABLE command using this variable name at the end of execution in order to pass back the lookup result. An example script is given in the installation directory (test.agi).&lt;br /&gt;
|-&lt;br /&gt;
| Asterisk Variable&lt;br /&gt;
| The lookup value is read from an Asterisk Variable. The parameters used are:&lt;br /&gt;
* Asterisk Variable: the variable name from which to read the result. Example: ${xxx}. Complex expressions may also be written provided they use valid Asterisk functions, for example: ${REGEX(&amp;quot;^1.3$&amp;quot; ${DYNROUTE_dtmf})} would check that the DTMF input was in the range 1000-1999 (providing that the Saved input variable name was set to &amp;quot;dtmf&amp;quot;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Substitutions==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;In the lookup&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When defining the query field for the lookup, the following Variable Names will be substituted by the corresponding value at the time of the call routing.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable Name&lt;br /&gt;
! Substituted by &lt;br /&gt;
|-&lt;br /&gt;
| [INPUT]&lt;br /&gt;
| The DTMF input by the caller on the touchtone keypad&lt;br /&gt;
|-&lt;br /&gt;
| [NUMBER]&lt;br /&gt;
| The callerid of the incoming call&lt;br /&gt;
|-&lt;br /&gt;
| [DID]&lt;br /&gt;
| The called number&lt;br /&gt;
|-&lt;br /&gt;
| [name]&lt;br /&gt;
| Where &amp;quot;name&amp;quot; is the value of one of these two fields: Saved input varibale name or Saved result varibale name. In the case of Saved input variable name, the DTMF input is saved under this name. This is useful if you are using two levels of Dynamic Route so that you can save the DTMF from the previous Dynamic Route in a uniquely named variable and use that variable in the lookup of the second Dynamic Route. In the case of Saved result variable name, the result returned from the lookup is saved to the variable name and can be used in a later Dynamic Route.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;If you want to use a variable created outside Dynamic Routes in the lookup, then name the variable with a DYNROUTE_ prefix. Then [name] will be substituted by the value of the asterisk variable DYNROUTE_name. There is currently no way of reading an arbitrarily named asterisk variable, except for the lookup type &amp;quot;Asterisk variable&amp;quot;. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;In custom dial plan or other FreePBX modules&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable Name&lt;br /&gt;
! Substituted by &lt;br /&gt;
|-&lt;br /&gt;
| DYNROUTE_name&lt;br /&gt;
| Where &amp;quot;name&amp;quot; is the value of one of these two fields: Saved input varibale name or Saved result varibale name. In the case of Saved input variable name, the DTMF input is saved under this name. This is useful if you need to use the value in a custom dial plan application or another FreePBX module. In the case of Saved result variable name, the result returned from the lookup is saved to the variable name and can be used in a custom dial plan application or another FreePBX module. To refer to the variable named name, use ${DYNROUTE_name} in the Asterisk dial plan.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Screenshot of adding a Dynamic Route==&lt;br /&gt;
&lt;br /&gt;
[[File:dynamic_route_add.png]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_Reference_documentation&amp;diff=855</id>
		<title>Dynamic Routes Reference documentation</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_Reference_documentation&amp;diff=855"/>
		<updated>2018-06-08T04:15:42Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Dynamic Route==&lt;br /&gt;
&lt;br /&gt;
The following information documents how to fill in the fields of a Dynamic Route. This documentation refers to the V13 functionality. Not all options are available in previous versions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field name&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
| Dynamic Route Name&lt;br /&gt;
| The name of the dynamic route. This can be chosen at will. It is used to identify the route when selecting it as a destination from other applications or inbound routes. &lt;br /&gt;
|-&lt;br /&gt;
| Dynamic Route Description&lt;br /&gt;
| Optional description text for the Dynamic Route. This is for documentation purposes only&lt;br /&gt;
|-&lt;br /&gt;
| Enable DTMF Input&lt;br /&gt;
| Setting: Yes or No. Default: No. If set to yes the call waits for input on the touch tone keypad. This can be used to capture caller input (for example a customer number).&lt;br /&gt;
|-&lt;br /&gt;
| Announcement&lt;br /&gt;
| The system recording to be played back. If Enable DTMF input is set to Yes then playback takes palce before waiting for DTMF input.&lt;br /&gt;
|-&lt;br /&gt;
| Timeout&lt;br /&gt;
| Timeout in seconds to wait for DTMF input. This value is only used if Enable DTMF Input is set to Yes. If no value is given for timeout, the default for the channel is used. It is best to set an explicit value to avoid doubts. &lt;br /&gt;
|-&lt;br /&gt;
| Validation&lt;br /&gt;
| Validation rules using a Asterisk regular expression (see Asterisk [https://wiki.asterisk.org/wiki/display/AST/Asterisk+13+Function_REGEX REGEX]). For example to ensure the input is between 3 and 4 digits long you could use ^[0-9]\{3,4\}$&lt;br /&gt;
|-&lt;br /&gt;
| Invalid Retries&lt;br /&gt;
| Number of times to retry if DTMF input does not match validation rules.&lt;br /&gt;
|-&lt;br /&gt;
| Invalid Retry Recording &lt;br /&gt;
| Recording to play if DTMF input does not match validation rules.&lt;br /&gt;
|-&lt;br /&gt;
| Invalid Recording&lt;br /&gt;
| Recording to play if DTMF input does not match validation rules and Invalid Retries have been exhausted.&lt;br /&gt;
|-&lt;br /&gt;
| Invalid Destination&lt;br /&gt;
| The destination to send the call to if DTMF input does not match the validation rules and Invalid Retries ahve been exhausted. The call is sent to this destination after playing the Invalid Recording if it is defined.&lt;br /&gt;
|-&lt;br /&gt;
| Saved input varibale name&lt;br /&gt;
| Name of variable in which to save DTMF input for future use in the dial plan or further dynamic routes. This is available as [name] in the query/lookup where name is the name of the variable you specify here. To use the variable in the dial plan (e.g. custom applications) it is necessary to prefix it with DYNROUTE_ e.g. DYNROUTE_name&lt;br /&gt;
|-&lt;br /&gt;
| Saved result variable name&lt;br /&gt;
| Name of variable in which to save lookup result for future use in the dial plan or further dynamic routes. This is available as [name] in the query/lookup where name is the name of the variable you specify here. To use the variable in the dial plan (e.g. custom applications) it is necessary to prefix it with DYNROUTE_ e.g. DYNROUTE_name&lt;br /&gt;
|-&lt;br /&gt;
| Source Type&lt;br /&gt;
| The type of lookup (see under Source types below for further information&lt;br /&gt;
|-&lt;br /&gt;
| Default Destination&lt;br /&gt;
| Destination to send the call to if the lookup result does not match one of the match values in the Dynamic Route Entries section or if the lookup fails. This is optional but is strongly recommended. If there is no default destination defined, then in the case of a lookup failure or if the lookup result does not match one of the defined values, the call will be disconnected. If this is not what is required, define the default destination with the desired behaviour.&lt;br /&gt;
|-&lt;br /&gt;
| Dynamic Route Entries&lt;br /&gt;
| Zero or more entries to be matched by the lookup result. If the lookup matches, then the call is routed to the chosen destination. Each match is tried in the order given until one matches. If no match is found then the call is sent to the Default Destination. Additional rows may be added by clicking the + symbol. Entries may be deleted by cancelling the value in the Match field.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Source Type==&lt;br /&gt;
&lt;br /&gt;
The following are the currently available source types for lookups. Each source type has its own specific fields for defining the lookup parameters.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Source Type&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
| none&lt;br /&gt;
| No lookup is carried out. The call is sent to the default destination&lt;br /&gt;
|-&lt;br /&gt;
| MySQL&lt;br /&gt;
| A lookup is done to a MySQL database. The parameters used are:&lt;br /&gt;
* MySQL hostname: hostname of server&lt;br /&gt;
* MySQL database: database name&lt;br /&gt;
* MySQL username: username&lt;br /&gt;
* MySQL password: password&lt;br /&gt;
* MySQL query: the SQL to be used. It can contain substitutions as indicated in the table below. Example: select destination from callerid_table where calleridnum like &#039;%[NUMBER]&#039; &lt;br /&gt;
|-&lt;br /&gt;
| ODBC&lt;br /&gt;
|  A lookup is done to an Asterisk ODBC data source. The parameters used are:&lt;br /&gt;
* ODBC function: the Asterisk ODBC function name that has been configured&lt;br /&gt;
* ODBC query: the query. It can contain substitutions as indicated in the table below. Example: select destination from callerid_table where calleridnum like &#039;%[NUMBER]&#039; &lt;br /&gt;
For information about setting up ODBC see this [[How to set up an Asterisk ODBC data source on Linux |article]]&lt;br /&gt;
|- &lt;br /&gt;
| URL&lt;br /&gt;
| A lookup is done to a URL. The parameters used are:&lt;br /&gt;
* URL Looup: the URL to be used for the lookup. The results must be text only. HTML, XML and JSON is not supported. The URL may contains parameters and the parameter values may include the substitutions indicated in the following table. Example: &amp;lt;nowiki&amp;gt;http://localhost/test.php?param1=4&amp;amp;param2=[NUMBER]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| AGI&lt;br /&gt;
| A lookup is done by launching an Asterisk AGI script. The parameters used are:&lt;br /&gt;
* AGI Lookup: the name of the Asterisk AGI script to be launched.&lt;br /&gt;
* AGI Result Variable: the name of the variable that the script uses to communicate the result. The script should execute a SET VARIABLE command using this variable name at the end of execution in order to pass back the lookup result. An example script is given in the installation directory (test.agi).&lt;br /&gt;
|-&lt;br /&gt;
| Asterisk Variable&lt;br /&gt;
| The lookup value is read from an Asterisk Variable. The parameters used are:&lt;br /&gt;
* Asterisk Variable: the variable name from which to read the result. Example: ${xxx}. Complex expressions may also be written provided they use valid Asterisk functions, for example: ${REGEX(&amp;quot;^1.3$&amp;quot; ${DYNROUTE_dtmf})} would check that the DTMF input was in the range 1000-1999 (providing that the Saved input variable name was set to &amp;quot;dtmf&amp;quot;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Substitutions==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;In the lookup&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When defining the query field for the lookup, the following Variable Names will be substituted by the corresponding value at the time of the call routing.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable Name&lt;br /&gt;
! Substituted by &lt;br /&gt;
|-&lt;br /&gt;
| [INPUT]&lt;br /&gt;
| The DTMF input by the caller on the touchtone keypad&lt;br /&gt;
|-&lt;br /&gt;
| [NUMBER]&lt;br /&gt;
| The callerid of the incoming call&lt;br /&gt;
|-&lt;br /&gt;
| [DID]&lt;br /&gt;
| The called number&lt;br /&gt;
|-&lt;br /&gt;
| [name]&lt;br /&gt;
| Where &amp;quot;name&amp;quot; is the value of one of these two fields: Saved input varibale name or Saved result varibale name. In the case of Saved input variable name, the DTMF input is saved under this name. This is useful if you are using two levels of Dynamic Route so that you can save the DTMF from the previous Dynamic Route in a uniquely named variable and use that variable in the lookup of the second Dynamic Route. In the case of Saved result variable name, the result returned from the lookup is saved to the variable name and can be used in a later Dynamic Route.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;If you want to use a variable created outside Dynamic Routes in the lookup, then name the variable with a DYNROUTE_ prefix. Then [name] will be substituted by the value of the asterisk variable DYNROUTE_name. There is currently no way of reading an arbitrarily named asterisk variable, except for the lookup type &amp;quot;Asterisk variable&amp;quot;. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;In custom dial plan or other FreePBX modules&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable Name&lt;br /&gt;
! Substituted by &lt;br /&gt;
|-&lt;br /&gt;
| DYNROUTE_name&lt;br /&gt;
| Where &amp;quot;name&amp;quot; is the value of one of these two fields: Saved input varibale name or Saved result varibale name. In the case of Saved input variable name, the DTMF input is saved under this name. This is useful if you need to use the value in a custom dial plan application or another FreePBX module. In the case of Saved result variable name, the result returned from the lookup is saved to the variable name and can be used in a custom dial plan application or another FreePBX module. To refer to the variable named xxx, use ${DYNROUTE_xxx} in the Asterisk dial plan.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Screenshot of adding a Dynamic Route==&lt;br /&gt;
&lt;br /&gt;
[[File:dynamic_route_add.png]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Linux/LVM_how_to_increase_file_system_size_by_adding_physical_volume&amp;diff=854</id>
		<title>Linux/LVM how to increase file system size by adding physical volume</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Linux/LVM_how_to_increase_file_system_size_by_adding_physical_volume&amp;diff=854"/>
		<updated>2018-04-21T23:29:36Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;1. Scan for devices that can be used as physical volumes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvmdiskscan&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Create physical volume&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;pvcreate /dev/sdd1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Display physical volume&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;pvdisplay&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Display logical volume group&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vgdisplay&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Add a physical volume to a logical volume group&lt;br /&gt;
&amp;lt;pre&amp;gt;vgextend vg1 /dev/sdf1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Display all logical volumes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvdisplay&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Display a specific logical volume&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvdisplay -v /dev/myvg/homevol&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Extend logical volume by a set amount (e.g. 1GB)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvextend -L+1G /dev/myvg/homevol&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9. Extend logical volume to a set amount (e.g. 12GB)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvextend -L12G /dev/myvg/homevol&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. Extend logical volume to fill all free space on logical volume group&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvextend -l +100%FREE /dev/myvg/homevol&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
11. Resize the underlying ext4 file system to the maximum of the new logical volume&lt;br /&gt;
&amp;lt;pre&amp;gt;resize2fs /dev/myvg/homevol&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Linux/LVM_how_to_increase_file_system_size_by_adding_physical_volume&amp;diff=853</id>
		<title>Linux/LVM how to increase file system size by adding physical volume</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Linux/LVM_how_to_increase_file_system_size_by_adding_physical_volume&amp;diff=853"/>
		<updated>2018-04-21T23:28:36Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;1. Scan for devices that can be used as physical volumes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvmdiskscan&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Create physical volume&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;pvcreate /dev/sdd1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Display physical volume&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;pvdisplay&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Display logical volume group&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vgdisplay&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Add a physical volume to a logical volume group&lt;br /&gt;
&amp;lt;pre&amp;gt;vgextend vg1 /dev/sdf1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Display all logical volumes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvdisplay&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Display a specific logical volume&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvdisplay -v /dev/myvg/homevol&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Extend logical volume by a set amount (e.g. 1GB)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvextend -L+1G /dev/myvg/homevol&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9. Extend logical volume to a set amount (e.g. 12GB)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvextend -L12G /dev/myvg/homevol&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. Extend logical volume to fill all free space on logical volume group&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvextend -l +100%FREE /dev/myvg/homevol&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
11. Resize the underlying ext4 file system to the maximum of the new logical volume. Get the device name from df command&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;resize2fs /dev/myvg/homevol&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Linux/LVM_how_to_increase_file_system_size_by_adding_physical_volume&amp;diff=852</id>
		<title>Linux/LVM how to increase file system size by adding physical volume</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Linux/LVM_how_to_increase_file_system_size_by_adding_physical_volume&amp;diff=852"/>
		<updated>2018-04-21T23:26:51Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;1. Scan for devices that can be used as physical volumes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvmdiskscan&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Create physical volume&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;pvcreate /dev/sdd1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Display physical volume&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;pvdisplay&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Display logical volume group&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;vgdisplay&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
5. Add a physical volume to a logical volume group&lt;br /&gt;
&amp;lt;pre&amp;gt;vgextend vg1 /dev/sdf1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Display all logical volumes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvdisplay&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Display a specific logical volum&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvdisplay -v /dev/myvg/homevol&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Extend logical volume by a set amount (e.g. 1GB)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvextend -L+1G /dev/myvg/homevol&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
9. Extend logical volume to a set amount (e.g. 12GB)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvextend -L12G /dev/myvg/homevol&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. Extend logical volume to fill all free space on logical volume group&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lvextend -l +100%FREE /dev/myvg/testlv&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
11. Resize the underlying ext4 file system to the maximum of the new logical volume. Get the device name from df command&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;resize2fs /dev/mapper/VolGroup-lv_root&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_FAQ&amp;diff=851</id>
		<title>Dynamic Routes FAQ</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_FAQ&amp;diff=851"/>
		<updated>2018-01-21T17:36:48Z</updated>

		<summary type="html">&lt;p&gt;John: /* Q. Does Dynamic Route create the lookup table I will use in my query? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==General FAQ==&lt;br /&gt;
&lt;br /&gt;
===Q. What are the prerequisites for Dynamic Routes?===&lt;br /&gt;
&lt;br /&gt;
A. The Dynamic Route module itself does not introduce additional prerequisites, so if your system is set up for Asterisk and FreePBX this module can be installed without adding any additional software. However, the lookup method you choose can introduce additional prerequisites.&lt;br /&gt;
&lt;br /&gt;
If you are using Dynamic Routes to connect to a MySQL database directly (without ODBC) then an additional Asterisk module is required (app_mysql). Please note that the app_mysql is not built by default. Please see this [[How to install Asterisk app_mysql|link]] for information. Although app_mysql is still widely used, it is no longer the recommended way to connect to the MySQL database from Asterisk.&lt;br /&gt;
&lt;br /&gt;
If you are using Dynamic Routes with ODBC you will need to install the ODBC software and driver for your database and configure it. Please see this [[How to set up an Asterisk ODBC data source on Linux|link]] for information.&lt;br /&gt;
&lt;br /&gt;
===Q. Does Dynamic Routes effect performance?===&lt;br /&gt;
&lt;br /&gt;
A. For most installations that are not under heavy load, there will not be performance concerns. However in high traffic installations, the performance aspect should be considered. Of course if the mysql query is not correctly tuned, then even low traffic sites will have issues. So first of all, the query to be used should be checked on a database with similar volumes as the production environment to ensure that it completes quickly. Any tuning of the query or needed indexes should be added.&lt;br /&gt;
&lt;br /&gt;
Instead of running the query against an online database, you may also consider a batch procedure which periodically extracts the needed information, reorganized in the optimum way and then load into a table where asterisk will specifically query it.&lt;br /&gt;
&lt;br /&gt;
Performance will be enhanced by using a local database instead of a remote database. Performance is also enhanced by using a non-SSL connection to the database, but this is not advisable for a remote database due to security concerns - see below. Even for a local database there may be security concerns of using a non-SSL connection, depending on who may access the server.&lt;br /&gt;
&lt;br /&gt;
When connecting to a database Dynamic Routes can use MySQL directly (using Asterisk app_mysql) or ODBC. ODBC is now the recommended way of accessing a database from Asterisk. It is reported that the level of indirection does not introduce any noticeable performance issue.&lt;br /&gt;
&lt;br /&gt;
===Q. Does Dynamic Routes effect system availability?===&lt;br /&gt;
&lt;br /&gt;
A. With Dynamic Routes a database or a web service can be used for lookups during incoming calls. Therefore the database or web server become a necessary component for call processing. If the server is unavailable, dynamic routing will not take place. You may however define a default destination. When a lookup fails it will follow the default destination. The default destination is also used when the lookup succeeds but no match is found. Using a local database or web server reduces availability dependencies but does not remove them entirely. &lt;br /&gt;
&lt;br /&gt;
===Q. What are the security implications of using Dynamic Routes?===&lt;br /&gt;
&lt;br /&gt;
A. The asterisk mysql add-on does not support SSL encrypted connections, so information (including credentials) passed between asterisk and the database may be intercepted. That is one reason why a local database is recommended. If your installation must use a remote server, consider whether a better option, also from performance and availability perspectives, would be to periodically copy the data needed into the mysql database running on the asterisk server.&lt;br /&gt;
&lt;br /&gt;
If you must use a remote server, then it is recommended (unless you can setup a local LAN between the two servers without risk of interception) to use ODBC with SSL enabled. An alternative is to setup an encrypted tunnel using a VPN or a software like stunnel.&lt;br /&gt;
&lt;br /&gt;
In any case it is recommended that the database be separate to the ones used for FreePBX configurations and CDRs. It is also recommended that a specific user is setup in order to access the database and that it has only select permissions on the tables that are used in the query. You should avoid using tables in the query that contain sensitive data, such as passwords. Consider defining a view if you have this case, which only gives access to the relevant columns needed. On MySQL for performance reasons that impact the whole server avoid using grant statements that contain column level access.&lt;br /&gt;
&lt;br /&gt;
===Q. What does the message &amp;lt;&amp;lt;Module &amp;quot;Dynamic Routes&amp;quot; is unsigned and should be re-downloaded&amp;gt;&amp;gt; mean?===&lt;br /&gt;
&lt;br /&gt;
A. FreePBX now has a system whereby a hash of the source code is computed and signed by Sangoma. See [http://wiki.freepbx.org/display/FPG/Module+Signing this link] for more information. This functionality is extremely useful because users know that the modules are the official versions and (unless the verification code itself is tampered with) they know that the code has not been modified.&lt;br /&gt;
&lt;br /&gt;
While very useful, there are a couple of implications:&lt;br /&gt;
* Third party modules will show an unsigned module warning&lt;br /&gt;
* Locally modified modules (for example to add a bug fix or new feature while waiting for that to be included in the official version) produce a tampered module warning&lt;br /&gt;
&lt;br /&gt;
Dynamic Routes is not part of the FreePBX core release and therefore the code is not signed by Sangoma. Although Sangoma provides for third party code signing after execution of a contract, at this time I have not applied for code signing rights.&lt;br /&gt;
&lt;br /&gt;
==Configuration FAQ==&lt;br /&gt;
&lt;br /&gt;
===Q. How can I avoid matching short caller ids?===&lt;br /&gt;
&lt;br /&gt;
A. You can use a condition in the WHERE clause to ensure that only caller ids of sufficient length are matched. This is useful if your database contains company phone numbers with similar prefixes, but when receiving calls the caller id is set to the shorter main phone number of the company.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;select destination from callerid_table where calleridnum like &#039;%[NUMBER]&#039; and length(&#039;[NUMBER]&#039;) &amp;gt; 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Q. How can I match data in my database when sometimes the caller id arrives with an international prefix of + country codes, other times 00 country code and other times just as a national number?===&lt;br /&gt;
&lt;br /&gt;
A. You may use the MySQL TRIM function to adjust the presented caller id to match the type of data in your database. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;select destination from callerid_table where calleridnum like concat(&#039;%&#039;,TRIM(LEADING &#039;+&#039; FROM TRIM(LEADING &#039;0&#039; FROM &#039;[NUMBER]&#039;)))&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Q. Does Dynamic Route create the lookup table I will use in my query?===&lt;br /&gt;
&lt;br /&gt;
A. No. Dynamic Route creates the internal tables needed to store the configurations of the Dynamic Routes that you define. Specific Dynamic Routes may be configured to access a database table containing data that will be used in the routing decision. This data is external to Dynamic Routes and Dynamic Routes will only query this data as directed to do so by your configuration. Dynamic Routes will not create your external data tables or data. If you need an example of how to set up data tables to be queried by Dynamic Route, then please see this [[Creating_a_MySQL_table_for_use_with_Dynamic_Routes|link]] for information.&lt;br /&gt;
&lt;br /&gt;
===Q. Why don&#039;t my inbound calls get routed through Dynamic Routes?===&lt;br /&gt;
&lt;br /&gt;
A. Dynamic Routes does not automatically intervene in the call processing of your system. If you want calls to pass through Dynamic Routes you will need to configure your system to hand the calls to a specific Dynamic Route. Typically you can do this from the FreePBX &amp;quot;Connectivity&amp;quot; menu by choosing &amp;quot;Inbound Routes&amp;quot;. Choose the inbound route you  want to pass through Dynamic Route and in that route put the Dynamic Route as the destination. Call flow will then pass through the specified Dynamic Route.&lt;br /&gt;
&lt;br /&gt;
==Trouble shooting FAQ==&lt;br /&gt;
&lt;br /&gt;
===When reporting a problem what information should I provide?===&lt;br /&gt;
&lt;br /&gt;
Please see [[Dynamic Routes Support|here]]&lt;br /&gt;
&lt;br /&gt;
===Q. Why do I get strange errors when using asterisk MYSQL module?===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[2015-04-24 21:52:59] WARNING[14294][C-000020b6] pbx.c: Error in extension logic (missing &#039;}&#039;)&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] pbx.c: Can&#039;t find trailing parenthesis for function &#039;CALLERID(nu&#039;?&lt;br /&gt;
[2015-04-24 21:52:59] ERROR[14294][C-000020b6] func_callerid.c: Unknown callerid data type &#039;nu&#039;.&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:4] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Query resultid 1 select callerid_firstname from calleridlookup where owner=&#039;john&#039; and &#039;&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: aMYSQL_query: mysql_query failed. Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near &#039;&#039;&#039; at line 1&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:5] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Fetch fetchid  dynroute&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: aMYSQL_fetch: missing some arguments&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:6] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Clear &amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: Identifier 0, identifier_type 2 not found in identifier list&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: Invalid result identifier 0 passed in aMYSQL_clear&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:7] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Disconnect 1&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:8] Set(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;__DYNROUTE_TEST=&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] ast_expr2.fl: ast_yyerror():  syntax error: syntax error, unexpected &#039;=&#039;, expecting $end; Input:&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A. Do not use a semicolon at the end of the query. This syntax is not supported by asterisk MYSQL module.&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_FAQ&amp;diff=850</id>
		<title>Dynamic Routes FAQ</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_FAQ&amp;diff=850"/>
		<updated>2018-01-21T17:34:39Z</updated>

		<summary type="html">&lt;p&gt;John: /* Q. What does the message &amp;gt; mean? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==General FAQ==&lt;br /&gt;
&lt;br /&gt;
===Q. What are the prerequisites for Dynamic Routes?===&lt;br /&gt;
&lt;br /&gt;
A. The Dynamic Route module itself does not introduce additional prerequisites, so if your system is set up for Asterisk and FreePBX this module can be installed without adding any additional software. However, the lookup method you choose can introduce additional prerequisites.&lt;br /&gt;
&lt;br /&gt;
If you are using Dynamic Routes to connect to a MySQL database directly (without ODBC) then an additional Asterisk module is required (app_mysql). Please note that the app_mysql is not built by default. Please see this [[How to install Asterisk app_mysql|link]] for information. Although app_mysql is still widely used, it is no longer the recommended way to connect to the MySQL database from Asterisk.&lt;br /&gt;
&lt;br /&gt;
If you are using Dynamic Routes with ODBC you will need to install the ODBC software and driver for your database and configure it. Please see this [[How to set up an Asterisk ODBC data source on Linux|link]] for information.&lt;br /&gt;
&lt;br /&gt;
===Q. Does Dynamic Routes effect performance?===&lt;br /&gt;
&lt;br /&gt;
A. For most installations that are not under heavy load, there will not be performance concerns. However in high traffic installations, the performance aspect should be considered. Of course if the mysql query is not correctly tuned, then even low traffic sites will have issues. So first of all, the query to be used should be checked on a database with similar volumes as the production environment to ensure that it completes quickly. Any tuning of the query or needed indexes should be added.&lt;br /&gt;
&lt;br /&gt;
Instead of running the query against an online database, you may also consider a batch procedure which periodically extracts the needed information, reorganized in the optimum way and then load into a table where asterisk will specifically query it.&lt;br /&gt;
&lt;br /&gt;
Performance will be enhanced by using a local database instead of a remote database. Performance is also enhanced by using a non-SSL connection to the database, but this is not advisable for a remote database due to security concerns - see below. Even for a local database there may be security concerns of using a non-SSL connection, depending on who may access the server.&lt;br /&gt;
&lt;br /&gt;
When connecting to a database Dynamic Routes can use MySQL directly (using Asterisk app_mysql) or ODBC. ODBC is now the recommended way of accessing a database from Asterisk. It is reported that the level of indirection does not introduce any noticeable performance issue.&lt;br /&gt;
&lt;br /&gt;
===Q. Does Dynamic Routes effect system availability?===&lt;br /&gt;
&lt;br /&gt;
A. With Dynamic Routes a database or a web service can be used for lookups during incoming calls. Therefore the database or web server become a necessary component for call processing. If the server is unavailable, dynamic routing will not take place. You may however define a default destination. When a lookup fails it will follow the default destination. The default destination is also used when the lookup succeeds but no match is found. Using a local database or web server reduces availability dependencies but does not remove them entirely. &lt;br /&gt;
&lt;br /&gt;
===Q. What are the security implications of using Dynamic Routes?===&lt;br /&gt;
&lt;br /&gt;
A. The asterisk mysql add-on does not support SSL encrypted connections, so information (including credentials) passed between asterisk and the database may be intercepted. That is one reason why a local database is recommended. If your installation must use a remote server, consider whether a better option, also from performance and availability perspectives, would be to periodically copy the data needed into the mysql database running on the asterisk server.&lt;br /&gt;
&lt;br /&gt;
If you must use a remote server, then it is recommended (unless you can setup a local LAN between the two servers without risk of interception) to use ODBC with SSL enabled. An alternative is to setup an encrypted tunnel using a VPN or a software like stunnel.&lt;br /&gt;
&lt;br /&gt;
In any case it is recommended that the database be separate to the ones used for FreePBX configurations and CDRs. It is also recommended that a specific user is setup in order to access the database and that it has only select permissions on the tables that are used in the query. You should avoid using tables in the query that contain sensitive data, such as passwords. Consider defining a view if you have this case, which only gives access to the relevant columns needed. On MySQL for performance reasons that impact the whole server avoid using grant statements that contain column level access.&lt;br /&gt;
&lt;br /&gt;
===Q. What does the message &amp;lt;&amp;lt;Module &amp;quot;Dynamic Routes&amp;quot; is unsigned and should be re-downloaded&amp;gt;&amp;gt; mean?===&lt;br /&gt;
&lt;br /&gt;
A. FreePBX now has a system whereby a hash of the source code is computed and signed by Sangoma. See [http://wiki.freepbx.org/display/FPG/Module+Signing this link] for more information. This functionality is extremely useful because users know that the modules are the official versions and (unless the verification code itself is tampered with) they know that the code has not been modified.&lt;br /&gt;
&lt;br /&gt;
While very useful, there are a couple of implications:&lt;br /&gt;
* Third party modules will show an unsigned module warning&lt;br /&gt;
* Locally modified modules (for example to add a bug fix or new feature while waiting for that to be included in the official version) produce a tampered module warning&lt;br /&gt;
&lt;br /&gt;
Dynamic Routes is not part of the FreePBX core release and therefore the code is not signed by Sangoma. Although Sangoma provides for third party code signing after execution of a contract, at this time I have not applied for code signing rights.&lt;br /&gt;
&lt;br /&gt;
==Configuration FAQ==&lt;br /&gt;
&lt;br /&gt;
===Q. How can I avoid matching short caller ids?===&lt;br /&gt;
&lt;br /&gt;
A. You can use a condition in the WHERE clause to ensure that only caller ids of sufficient length are matched. This is useful if your database contains company phone numbers with similar prefixes, but when receiving calls the caller id is set to the shorter main phone number of the company.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;select destination from callerid_table where calleridnum like &#039;%[NUMBER]&#039; and length(&#039;[NUMBER]&#039;) &amp;gt; 4&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Q. How can I match data in my database when sometimes the caller id arrives with an international prefix of + country codes, other times 00 country code and other times just as a national number?===&lt;br /&gt;
&lt;br /&gt;
A. You may use the MySQL TRIM function to adjust the presented caller id to match the type of data in your database. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;select destination from callerid_table where calleridnum like concat(&#039;%&#039;,TRIM(LEADING &#039;+&#039; FROM TRIM(LEADING &#039;0&#039; FROM &#039;[NUMBER]&#039;)))&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Q. Does Dynamic Route create the lookup table I will use in my query?===&lt;br /&gt;
&lt;br /&gt;
A. No. Dynamic Route creates the internal tables needed to store the configurations of the Dynamic Routes that you define. Specific Dynamic Routes may be configured to access a database table containing data that will be used in the routing decision. This data is external to Dynamic Routes and Dynamic Routes will only query this data as directed to do so by your configuration. Dynamic Routes will not create your external data tables or data. If you need an example of how to set up data tables to be queried by Dynamic Route, then please see this [[Creating a table for use with Dynamic Routes|link]] for information.&lt;br /&gt;
&lt;br /&gt;
===Q. Why don&#039;t my inbound calls get routed through Dynamic Routes?===&lt;br /&gt;
&lt;br /&gt;
A. Dynamic Routes does not automatically intervene in the call processing of your system. If you want calls to pass through Dynamic Routes you will need to configure your system to hand the calls to a specific Dynamic Route. Typically you can do this from the FreePBX &amp;quot;Connectivity&amp;quot; menu by choosing &amp;quot;Inbound Routes&amp;quot;. Choose the inbound route you  want to pass through Dynamic Route and in that route put the Dynamic Route as the destination. Call flow will then pass through the specified Dynamic Route.&lt;br /&gt;
&lt;br /&gt;
==Trouble shooting FAQ==&lt;br /&gt;
&lt;br /&gt;
===When reporting a problem what information should I provide?===&lt;br /&gt;
&lt;br /&gt;
Please see [[Dynamic Routes Support|here]]&lt;br /&gt;
&lt;br /&gt;
===Q. Why do I get strange errors when using asterisk MYSQL module?===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[2015-04-24 21:52:59] WARNING[14294][C-000020b6] pbx.c: Error in extension logic (missing &#039;}&#039;)&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] pbx.c: Can&#039;t find trailing parenthesis for function &#039;CALLERID(nu&#039;?&lt;br /&gt;
[2015-04-24 21:52:59] ERROR[14294][C-000020b6] func_callerid.c: Unknown callerid data type &#039;nu&#039;.&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:4] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Query resultid 1 select callerid_firstname from calleridlookup where owner=&#039;john&#039; and &#039;&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: aMYSQL_query: mysql_query failed. Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near &#039;&#039;&#039; at line 1&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:5] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Fetch fetchid  dynroute&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: aMYSQL_fetch: missing some arguments&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:6] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Clear &amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: Identifier 0, identifier_type 2 not found in identifier list&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] app_mysql.c: Invalid result identifier 0 passed in aMYSQL_clear&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:7] MYSQL(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;Disconnect 1&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] VERBOSE[14294][C-000020b6] pbx.c:     -- Executing [s@dynroute-21:8] Set(&amp;quot;SIP/215-00000087&amp;quot;, &amp;quot;__DYNROUTE_TEST=&amp;quot;) in new stack&lt;br /&gt;
[2015-04-24 21:52:59] WARNING[14294][C-000020b6] ast_expr2.fl: ast_yyerror():  syntax error: syntax error, unexpected &#039;=&#039;, expecting $end; Input:&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A. Do not use a semicolon at the end of the query. This syntax is not supported by asterisk MYSQL module.&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=849</id>
		<title>Dynamic Routes</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=849"/>
		<updated>2018-01-10T21:17:07Z</updated>

		<summary type="html">&lt;p&gt;John: /* FreePBX 14 support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What is it?==&lt;br /&gt;
&lt;br /&gt;
Dynamic Routes is a FreePBX module. [[http://www.freepbx.org FreePBX]] is a GUI which allows administrators to configure the [http://www.asterisk.org Asterisk] communications platform without writing Asterisk dial plan code or configuration files. Dynamic Routes adds to the FreePBX functionality, by configuration of call routing based on the result of a lookup.&lt;br /&gt;
&lt;br /&gt;
Originally Dynamic Routes allowed lookups only to a MySQL database. In the latest version there are many more lookup methods. However the principle is still the same: to allow data dependent call routing.&lt;br /&gt;
&lt;br /&gt;
==What could I use it for?==&lt;br /&gt;
&lt;br /&gt;
The potential uses are many. Here are some examples:&lt;br /&gt;
* screen calls to a support hotline according to agreed support methods and service levels&lt;br /&gt;
* route calls to a dedicated agent or queue by customer category or importance&lt;br /&gt;
* play different announcements to different callers&lt;br /&gt;
* basically anything where you want the call to go to a different destination depending on some known data (like the Caller id) or data input by the customer using DTMF keypad (like contract id)&lt;br /&gt;
&lt;br /&gt;
==How do I get it?==&lt;br /&gt;
&lt;br /&gt;
The code for the project is hosted on github. Please see: [https://github.com/johnfawcett/dynroute/ Dynamic Route source code repository]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/blob/master/CHANGES.txt Dynamic Routes Change Log]&lt;br /&gt;
&lt;br /&gt;
===FreePBX 14 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/releases/download/14.0.1/dynroute-14.0.1.tgz Dynamic Routes 14.0.1]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 14 release. Any new features are added to this version.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 13 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/13.0.5.zip Dynamic Routes 13.0.5]&lt;br /&gt;
&lt;br /&gt;
This version has been rewritten to comply with the FreePBX 13 framework. You may use this version to upgrade from a previous 13.x version or 2.11 version. This version may not be used on previous versions of FreePBX.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 11 and 12 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/2.11.3.2.zip Dynamic Routes 2.11.3.2]&lt;br /&gt;
&lt;br /&gt;
As of 20/03/2017 this version is no longer supported. Please use a later version if possible.&lt;br /&gt;
&lt;br /&gt;
Previous versions are archived for historical reference but are no longer maintained and should not be used: [[Dynamic Routes previous versions]]&lt;br /&gt;
&lt;br /&gt;
GPG signatures for the latest versions are available here [[Dynamic Routes gpg signatures]]&lt;br /&gt;
&lt;br /&gt;
==Where can I get more information?==&lt;br /&gt;
&lt;br /&gt;
* [[Dynamic Routes Installation instructions|Installation instructions]]&lt;br /&gt;
* [[Dynamic Routes Example configuration|Example configuration]]&lt;br /&gt;
* [[Dynamic Routes Reference documentation|Reference documentation]]&lt;br /&gt;
* [[Dynamic Routes Future plans|Future plans]]&lt;br /&gt;
* [[Dynamic Routes Licence|Licence]]&lt;br /&gt;
* [[Dynamic Routes FAQ|FAQ]]&lt;br /&gt;
* [[Dynamic Routes Support|Support]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_Future_plans&amp;diff=848</id>
		<title>Dynamic Routes Future plans</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_Future_plans&amp;diff=848"/>
		<updated>2017-10-29T17:58:42Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Changes that may be addressed in a future release&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Optimize the dial plan results checking syntax (can be useful if there are a lot of matches). Currently each match is managed by a sequential IF statement. This could be done differently by going directly to the mached entry.&lt;br /&gt;
* Allow for the lookup string to contain asterisk variable substitutions. Currently [name] is substituted by the value of variable DYNROUTE_name, so it is not possible to use arbitrary asterisk variables. By introducing a new lookup type, {name} would be replaced with the value of variable name.&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=File:Dynroute-14.0.1.tgz.sig&amp;diff=847</id>
		<title>File:Dynroute-14.0.1.tgz.sig</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=File:Dynroute-14.0.1.tgz.sig&amp;diff=847"/>
		<updated>2017-10-21T12:01:26Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_gpg_signatures&amp;diff=846</id>
		<title>Dynamic Routes gpg signatures</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes_gpg_signatures&amp;diff=846"/>
		<updated>2017-10-21T12:00:04Z</updated>

		<summary type="html">&lt;p&gt;John: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Signature for 2.11.3.2&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:dynroute-2.11.3.2.zip.sig]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Signature for 13.0.5&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:dynroute-13.0.5.zip.sig]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Signature for 14.0.0&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:dynroute-14.0.0.tgz.sig]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Signature for 14.0.1&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:dynroute-14.0.1.tgz.sig]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;GPG Public Key used to sign the release packages&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:johnfawcett.gpg]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
	<entry>
		<id>https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=845</id>
		<title>Dynamic Routes</title>
		<link rel="alternate" type="text/html" href="https://voipsupport.it/wiki/index.php?title=Dynamic_Routes&amp;diff=845"/>
		<updated>2017-10-21T11:59:16Z</updated>

		<summary type="html">&lt;p&gt;John: /* How do I get it? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==What is it?==&lt;br /&gt;
&lt;br /&gt;
Dynamic Routes is a FreePBX module. [[http://www.freepbx.org FreePBX]] is a GUI which allows administrators to configure the [http://www.asterisk.org Asterisk] communications platform without writing Asterisk dial plan code or configuration files. Dynamic Routes adds to the FreePBX functionality, by configuration of call routing based on the result of a lookup.&lt;br /&gt;
&lt;br /&gt;
Originally Dynamic Routes allowed lookups only to a MySQL database. In the latest version there are many more lookup methods. However the principle is still the same: to allow data dependent call routing.&lt;br /&gt;
&lt;br /&gt;
==What could I use it for?==&lt;br /&gt;
&lt;br /&gt;
The potential uses are many. Here are some examples:&lt;br /&gt;
* screen calls to a support hotline according to agreed support methods and service levels&lt;br /&gt;
* route calls to a dedicated agent or queue by customer category or importance&lt;br /&gt;
* play different announcements to different callers&lt;br /&gt;
* basically anything where you want the call to go to a different destination depending on some known data (like the Caller id) or data input by the customer using DTMF keypad (like contract id)&lt;br /&gt;
&lt;br /&gt;
==How do I get it?==&lt;br /&gt;
&lt;br /&gt;
The code for the project is hosted on github. Please see: [https://github.com/johnfawcett/dynroute/ Dynamic Route source code repository]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/blob/master/CHANGES.txt Dynamic Routes Change Log]&lt;br /&gt;
&lt;br /&gt;
===FreePBX 14 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/releases/download/14.0.0/dynroute-14.0.1.tgz Dynamic Routes 14.0.1]&lt;br /&gt;
&lt;br /&gt;
Updated for the Freepbx 14 release. Any new features are added to this version.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 13 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/13.0.5.zip Dynamic Routes 13.0.5]&lt;br /&gt;
&lt;br /&gt;
This version has been rewritten to comply with the FreePBX 13 framework. You may use this version to upgrade from a previous 13.x version or 2.11 version. This version may not be used on previous versions of FreePBX.&lt;br /&gt;
&lt;br /&gt;
===FreePBX 11 and 12 support===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/johnfawcett/dynroute/archive/2.11.3.2.zip Dynamic Routes 2.11.3.2]&lt;br /&gt;
&lt;br /&gt;
As of 20/03/2017 this version is no longer supported. Please use a later version if possible.&lt;br /&gt;
&lt;br /&gt;
Previous versions are archived for historical reference but are no longer maintained and should not be used: [[Dynamic Routes previous versions]]&lt;br /&gt;
&lt;br /&gt;
GPG signatures for the latest versions are available here [[Dynamic Routes gpg signatures]]&lt;br /&gt;
&lt;br /&gt;
==Where can I get more information?==&lt;br /&gt;
&lt;br /&gt;
* [[Dynamic Routes Installation instructions|Installation instructions]]&lt;br /&gt;
* [[Dynamic Routes Example configuration|Example configuration]]&lt;br /&gt;
* [[Dynamic Routes Reference documentation|Reference documentation]]&lt;br /&gt;
* [[Dynamic Routes Future plans|Future plans]]&lt;br /&gt;
* [[Dynamic Routes Licence|Licence]]&lt;br /&gt;
* [[Dynamic Routes FAQ|FAQ]]&lt;br /&gt;
* [[Dynamic Routes Support|Support]]&lt;/div&gt;</summary>
		<author><name>John</name></author>
	</entry>
</feed>