diff --git a/docs/About-the-Project/Supported-Platforms.md b/docs/About-the-Project/Supported-Platforms.md
index d47429a1fc..2224630276 100644
--- a/docs/About-the-Project/Supported-Platforms.md
+++ b/docs/About-the-Project/Supported-Platforms.md
@@ -5,7 +5,9 @@ pageid: 42566067
The Asterisk software can be installed on a wide range of platforms including various Linux distributions. As a project, however, we are only able to test and support a subset of them. The Asterisk project supports 32-bit and 64-bit x86 platforms using non-end of life CentOS, RHEL, Fedora, Ubuntu, and Debian Linux distributions. Support for other platforms and Linux distributions is best effort and is provided by the community. Any changes to allow such platforms must not hinder or break the project supported Linux distributions.
-!!! warning
- Note that due to changes and improvements in compilers it is possible for Linux distribution upgrades to result in old versions of Asterisk no longer building. If this occurs it is recommended to upgrade to the latest supported version of Asterisk.
-
-[//]: # (end-warning)
+/// warning
+Note that due to changes and improvements in compilers it is possible
+for Linux distribution upgrades to result in old versions of Asterisk
+no longer building. If this occurs it is recommended to upgrade to the
+latest supported version of Asterisk.
+///
\ No newline at end of file
diff --git a/docs/Asterisk-Community/Asterisk-Issue-Guidelines.md b/docs/Asterisk-Community/Asterisk-Issue-Guidelines.md
index 6b29400f26..7daf5d2807 100644
--- a/docs/Asterisk-Community/Asterisk-Issue-Guidelines.md
+++ b/docs/Asterisk-Community/Asterisk-Issue-Guidelines.md
@@ -24,10 +24,14 @@ See the [How to request a feature section](#how-to-request-a-feature-or-improvem
Please head to the Commercial category at . If what you want is a specific feature or bug fixed, you may want to consider [requesting a bug bounty](/Development/Asterisk-Bug-Bounties).
* and...
-!!! warning
- Security vulnerability issues must NEVER be reported as regular bugs in the issue tracker. Instead they must be reported at [Security Vulnerabilities](https://github.com/asterisk/asterisk/security/advisories/new). You can reach this page by navigating to and clicking the "Security" tab at the top of the page.
-
-[//]: # (end-warning)
+/// danger
+Security vulnerability issues must **never** be reported as regular bugs
+in the issue tracker. Instead they must be reported as
+[Security Vulnerabilities](https://github.com/asterisk/asterisk/security/advisories/new).
+You can reach this page by navigating to
+[the main Asterisk repository on GitHub](https://github.com/asterisk/asterisk)
+and clicking the "Security and quality" tab at the top of the page.
+///
#### Why should you read this?
@@ -36,11 +40,7 @@ The steps here will help you provide all the information the Asterisk team needs
Bug Reporting Check List
------------------------
-!!! warning
- Before filing a bug report...
- Your issue may not be a bug or could have been fixed already. Run through the check list below to verify you have done your due diligence.
-
-[//]: # (end-warning)
+Your issue may not be a bug or could have been fixed already. Run through the check list below to verify you have done your due diligence.
* **Are** **you reporting a suspected security vulnerability?**
* **Are you are on a supported version of Asterisk?**
@@ -49,7 +49,7 @@ Bug Reporting Check List
* **Have you asked for help in the community? (mailing lists, IRC, forums)**
You can locate all these services here:
* **Have you searched the Asterisk documentation in case this behavior is expected?**
-Search the [Asterisk wiki](//) for the problem or messages you are experiencing.
+Search [the documentation](/) for the problem or messages you are experiencing.
* **Have you searched the Asterisk bug tracker to see if an issue is already filed for this potential bug?**
Search the [Asterisk Issue Tracker on GitHub](https://github.com/asterisk/asterisk/issues) for the issue you are seeing. You can search for issues by selecting **Issues -> Search for Issues** in the top menu bar.
* **Can you reproduce the problem?**
diff --git a/docs/Configuration/Applications/Asterisk-Queues/Building-Queues.md b/docs/Configuration/Applications/Asterisk-Queues/Building-Queues.md
index c788e05baf..094b158d15 100644
--- a/docs/Configuration/Applications/Asterisk-Queues/Building-Queues.md
+++ b/docs/Configuration/Applications/Asterisk-Queues/Building-Queues.md
@@ -9,10 +9,10 @@ Building Queues
Written by: Leif Madsen
Initial version: 2010-01-14
-!!! note
- Note that this documentation is based on Asterisk 1.6.2, and this is just one approach to creating queues and the dialplan logic. You may create a better way, and in that case, I would encourage you to submit it to the Asterisk issue tracker at for inclusion in Asterisk.
-
-[//]: # (end-note)
+/// note
+Note that this documentation is based on Asterisk 1.6.2, and this is
+just *one* approach to creating queues and the dialplan logic.
+///
In this article, we'll look at setting up a pair of queues in Asterisk called 'sales' and 'support'. These queues can be logged into by queue members, and those members will also have the ability to pause and unpause themselves.
diff --git a/docs/Configuration/Applications/Voicemail/Message-Waiting-Indication.md b/docs/Configuration/Applications/Voicemail/Message-Waiting-Indication.md
index d0e0e42352..a8660dc87d 100644
--- a/docs/Configuration/Applications/Voicemail/Message-Waiting-Indication.md
+++ b/docs/Configuration/Applications/Voicemail/Message-Waiting-Indication.md
@@ -37,10 +37,12 @@ Depending on your Asterisk version and configuration, there are a few different
2. **res_external_mwi**: A module providing an API for other systems to communicate MWI state to Asterisk
3. **chan_pjsip**: Setting `incoming_mwi_mailbox` on an endpoint
-!!! note ** **res_pjsip
- : The functionality for outbound SIP subscription is not available in res_pjsip yet. Internal infrastructure is built that would allow it, so if this is something you want to work on, please contact the [Asterisk development community](http://www.asterisk.org/community/discuss).
-
-[//]: # (end-note)
+/// note | Outbound SIP subscriptions in res_pjsip
+The functionality for outbound SIP subscription is not available in
+res_pjsip yet. Internal infrastructure is built that would allow it,
+so if this is something you want to work on, please contact the
+[Asterisk development community](http://www.asterisk.org/community/discuss).
+///
Outbound MWI subscription with chan_sip
----------------------------------------
@@ -81,10 +83,10 @@ External sources can use the API provided by res_external_mwi to communicate MWI
[Asterisk 12 Configuration_res_mwi_external](/Latest_API/API_Documentation/Module_Configuration/res_mwi_external)
-!!! warning
- res_external_mwi.so is mutually exclusive with app_voicemail.so. You'll have to load only the one you want to use.
-
-[//]: # (end-warning)
+/// warning
+`res_external_mwi.so` is mutually exclusive with
+`app_voicemail.so`. You'll have to load only the one you want to use.
+///
chan_pjsip
-----------
diff --git a/docs/Configuration/Applications/Voicemail/index.md b/docs/Configuration/Applications/Voicemail/index.md
index b5ffe21c35..478595f4f1 100644
--- a/docs/Configuration/Applications/Voicemail/index.md
+++ b/docs/Configuration/Applications/Voicemail/index.md
@@ -17,7 +17,8 @@ The **[VoiceMailMain()](/Latest_API/API_Documentation/Dialplan_Applications/Voic
1. **Mailbox** - This parameter specifies the mailbox to log into. It should be a mailbox number and a voice mail context, concatenated with an at-sign (@), like 6001@default. If the voice mail context is omitted, it will default to the default voice mail context. If the mailbox number is omitted, the system will prompt the caller for the mailbox number.
2. **Options** - One or more options for controlling the voicemail system. The most popular option is the s option, which skips asking for the PIN number
-!!! warning Direct Access to Voicemail
- Please exercise extreme caution when using the s option! With this option set, anyone which has access to this extension can retrieve voicemail messages without entering the mailbox passcode.
-
-[//]: # (end-warning)
+/// warning | Direct Access to Voicemail
+Please exercise extreme caution when using the `s` option! With this
+option set, anyone which has access to this extension can retrieve
+voicemail messages without entering the mailbox passcode.
+///
diff --git a/docs/Configuration/Channel-Drivers/.pages b/docs/Configuration/Channel-Drivers/.pages
index 61bc2568d0..d562ca89ca 100644
--- a/docs/Configuration/Channel-Drivers/.pages
+++ b/docs/Configuration/Channel-Drivers/.pages
@@ -2,7 +2,7 @@ nav:
- index.md
- SIP
- DAHDI.md
- - Inter-Asterisk-eXchange-protocol-version-2-IAX2
+ - IAX2: Inter-Asterisk-eXchange-protocol-version-2-IAX2
- Local-Channel
- AudioSocket.md
- WebSocket.md
diff --git a/docs/Configuration/Channel-Drivers/DAHDI.md b/docs/Configuration/Channel-Drivers/DAHDI.md
index bb8e75b00b..f68684b5e5 100644
--- a/docs/Configuration/Channel-Drivers/DAHDI.md
+++ b/docs/Configuration/Channel-Drivers/DAHDI.md
@@ -3,22 +3,15 @@ title: DAHDI
pageid: 28314858
---
-!!! warning
- Under Construction
-
-[//]: # (end-warning)
-
-!!! note ** Top-level page for DAHDI **channel driver
- information
-
- What are the software and hardware requirements for chan_dahdi?
-
- How do I configure it?
-
- What are some examples of Analog and PRI configurations?
-
- Links to use:
-
-[DAHDI](/Configuration/Channel-Drivers/DAHDI)
-
-[//]: # (end-note)
+/// warning | Under Construction
+This is intended as the top-level page for DAHDI channel driver
+information but it has not been written yet. Some ideas for the topics
+that may be useful here are:
+
+- What are the software and hardware requirements for chan_dahdi?
+- How do I configure it?
+- What are some examples of Analog and PRI configurations?
+
+If you would like to help write this section, please consider
+[contributing to the documentation](/Contributing-to-the-Documentation/).
+///
\ No newline at end of file
diff --git a/docs/Configuration/Channel-Drivers/IP-Quality-of-Service.md b/docs/Configuration/Channel-Drivers/IP-Quality-of-Service.md
index 0c2fc2f50b..bffabd83a0 100644
--- a/docs/Configuration/Channel-Drivers/IP-Quality-of-Service.md
+++ b/docs/Configuration/Channel-Drivers/IP-Quality-of-Service.md
@@ -16,17 +16,17 @@ vconfig set_egress_map [vlan-device] [skb-priority] [vlan-qos]
The table below shows all VoIP channel drivers and other Asterisk modules that support QoS settings for network traffic. It also shows the type(s) of traffic for which each module can support setting QoS settings:
-| | Signaling | Audio | Video | Text |
-| --- | --- | --- | --- | --- |
-| chan_sip | + | + | + | + |
-| chan_skinny | + | + | + | |
-| chan_mgcp | + | + | | |
-| chan_unistm | + | + | | |
-| chan_h323 | | + | | |
-| chan_iax2 | + | | | |
-| chan_pjsip | + | + | + | |
-| DUNDI | + (tos setting) | | | |
-| IAXProv | + (tos setting) | | | |
+| | Signaling | Audio | Video | Text |
+|-------------|:---------------:|:-----:|:-----:|:----:|
+| chan_sip | ✔️ | ✔️ | ✔️ | ✔️ |
+| chan_skinny | ✔️ | ✔️ | ✔️ | |
+| chan_mgcp | ✔️ | ✔️ | | |
+| chan_unistm | ✔️ | ✔️ | | |
+| chan_h323 | | ✔️ | | |
+| chan_iax2 | ✔️ | | | |
+| chan_pjsip | ✔️ | ✔️ | ✔️ | |
+| DUNDI | ✔️ (tos setting) | | | |
+| IAXProv | ✔️ (tos setting) | | | |
### IP TOS values
@@ -96,10 +96,10 @@ In chan_pjsip, there are three parameters that control the TOS settings: a **tos
Similarly, there are there parameters that control the 802.1p CoS settings: a **cos** option for a **type=transport** that controls the 802.1p value for SIP signaling packets, a**cos_audio** option for a **type=endpoint** that controls the 802.1p value of RTP audio packets, and a **cos_video** option for a **type=endpoint** that controls the 802.1p value for video packets.
-!!! tip ** Changes to a chan_pjsip **type=transport
- require an Asterisk restart to be affected. They are not affected by simply reloading Asterisk.
-
-[//]: # (end-tip)
+/// tip
+Changes to a chan_pjsip `type=transport` require an Asterisk restart
+to take effect. They are not affected by simply reloading Asterisk.
+///
### Other RTP channels
diff --git a/docs/Configuration/Channel-Drivers/Inter-Asterisk-eXchange-protocol-version-2-IAX2/IAX2-Configuration/Configuring-chan_iax2-for-IPv6.md b/docs/Configuration/Channel-Drivers/Inter-Asterisk-eXchange-protocol-version-2-IAX2/IAX2-Configuration/Configuring-chan_iax2-for-IPv6.md
index 380064d7bb..c23ed5a75f 100644
--- a/docs/Configuration/Channel-Drivers/Inter-Asterisk-eXchange-protocol-version-2-IAX2/IAX2-Configuration/Configuring-chan_iax2-for-IPv6.md
+++ b/docs/Configuration/Channel-Drivers/Inter-Asterisk-eXchange-protocol-version-2-IAX2/IAX2-Configuration/Configuring-chan_iax2-for-IPv6.md
@@ -26,7 +26,8 @@ bindaddr=[2001:db8::1]:4569
You can specify 'bindaddr' more than once to bind to multiple addresses, but the first will be the default. IPv6 addresses are accepted.
-!!! tip
- For details IAX configuration examples see the iax.conf.sample file that comes with the source.
-
-[//]: # (end-tip)
+/// tip
+For detailed IAX configuration examples see
+[the iax.conf.sample file](https://github.com/asterisk/asterisk/blob/master/configs/samples/iax.conf.sample)
+that comes with the source.
+///
diff --git a/docs/Configuration/Channel-Drivers/Motif/Calling-using-Google.md b/docs/Configuration/Channel-Drivers/Motif/Calling-using-Google.md
index 9ef11365ba..5bc68ce70a 100644
--- a/docs/Configuration/Channel-Drivers/Motif/Calling-using-Google.md
+++ b/docs/Configuration/Channel-Drivers/Motif/Calling-using-Google.md
@@ -149,38 +149,45 @@ exten => s,1,NoOp()
same => n,Dial(SIP/malcolm,20)
```
-!!! note
- Did you know that the Google Chat client does this same thing; it waits, and then sends a DTMF 1. Really.
-
-[//]: # (end-note)
+/// note | Did you know?
+Did you know that the Google Chat client does this same thing; it
+waits, and then sends a DTMF 1. Really.
+///
This example uses the "s" unmatched extension, because we're only configuring one client connection in this example.
-In this example, we're Waiting 1 second, answering the call, sending the DTMF "1" back to Google, and **then** dialing the call.
+In this example, we're waiting 1 second, answering the call, sending the DTMF "1" back to Google, and **then** dialing the call.
-!!! tip Using Google's voicemail** Another method for accomplishing the sending of the DTMF event is to use Dial option "D." The D option tells Asterisk to send a specified DTMF string after the called party has answered. DTMF events specified before a colon are sent to the **called** party. DTMF events specified after a colon are sent to the **calling
- party.
+/// tip | Using Google's voicemail
+Another method for accomplishing the sending of the DTMF event is to
+use Dial option "D." The D option tells Asterisk to send a specified
+DTMF string after the called party has answered. DTMF events specified
+before a colon are sent to the **called** party. DTMF events specified
+after a colon are sent to the **calling** party.
- In this example then, one does not need to actually answer the call first, though one should still wait at least a second for things, like STUN setup, to finish. This means that if the called party doesn't answer, Google will resort to sending the call to one's Google Voice voicemail box, instead of leaving it at Asterisk.
-[//]: # (end-tip)
+In this example then, one does not need to actually answer the call
+first, though one should still wait at least a second for things, like
+STUN setup, to finish. This means that if the called party doesn't
+answer, Google will resort to sending the call to one's Google Voice
+voicemail box, instead of leaving it at Asterisk.
```
exten => s,1,Dial(SIP/malcolm,20,D(:1))
-
----
```
+///
-!!! tip Filtering Caller ID
- The inbound CallerID from Google is going to look a bit nasty, e.g.:
-[//]: # (end-tip)
+/// tip | Filtering Caller ID
+The inbound CallerID from Google is going to look a bit nasty, e.g.:
```
+15555551212@voice.google.com/srvres-MTAuMjE4LjIuMTk3Ojk4MzM=
+```
----
-
-Your VoIP client (SIPDroid) might not like this, so let's simplify that Caller ID a bit, and make it more presentable for your phone's display. Here's the example that we'll step through:
+Your VoIP client (SIPDroid) might not like this, so let's simplify
+that Caller ID a bit, and make it more presentable for your phone's
+display. Here's the example that we'll step through:
+```
exten => s,1,NoOp()
same => n,Set(crazygooglecid=${CALLERID(name)})
same => n,Set(stripcrazysuffix=${CUT(crazygooglecid,@,1)})
@@ -188,7 +195,13 @@ exten => s,1,NoOp()
same => n,Dial(SIP/malcolm,20,D(:1))
```
-First, we set a variable called **crazygooglecid** to be equal to the name field of the CALLERID function. Next, we use the CUT function to grab everything that's before the @ symbol, and save it in a new variable called **stripcrazysuffix.** We'll set this new variable to the CALLERID that we're going to use for our Dial. Finally, we'll actually Dial our internal destination.
+First, we set a variable called `crazygooglecid` to be equal to the
+name field of the CALLERID function. Next, we use the CUT function to
+grab everything that's before the @ symbol, and save it in a new
+variable called `stripcrazysuffix`. We'll set this new variable to
+the CALLERID that we're going to use for our Dial. Finally, we'll
+actually Dial our internal destination.
+///
### Outgoing calls
diff --git a/docs/Configuration/Channel-Drivers/Motif/index.md b/docs/Configuration/Channel-Drivers/Motif/index.md
index adad297f5c..7e101f299a 100644
--- a/docs/Configuration/Channel-Drivers/Motif/index.md
+++ b/docs/Configuration/Channel-Drivers/Motif/index.md
@@ -3,12 +3,12 @@ title: Overview
pageid: 27200344
---
-!!! warning
- Under Construction
-
-[//]: # (end-warning)
-
-!!! note
- Page for information on the Motif channel driver, describing configuration, pointing to any resources and a top-level page for any examples or tutorials such as calling with Google Voice.
-
-[//]: # (end-note)
+/// warning | Under Construction
+This page is intended to include information on the Motif channel
+driver, such as describing configuration, pointing to any resources
+and a top-level page for any examples or tutorials such as calling
+with Google Voice.
+
+If you would like to help write this section, please consider
+[contributing to the documentation](/Contributing-to-the-Documentation/).
+///
diff --git a/docs/Configuration/Channel-Drivers/SIP/.pages b/docs/Configuration/Channel-Drivers/SIP/.pages
new file mode 100644
index 0000000000..e5c5da85a3
--- /dev/null
+++ b/docs/Configuration/Channel-Drivers/SIP/.pages
@@ -0,0 +1,4 @@
+nav:
+ - Concepts
+ - Configuring res_pjsip: Configuring-res_pjsip
+ - Configuring chan_sip: Configuring-chan_sip
diff --git a/docs/Configuration/Channel-Drivers/SIP/Concepts/SIP-Direct-Media-Reinvite-Glare-Avoidance/index.md b/docs/Configuration/Channel-Drivers/SIP/Concepts/SIP-Direct-Media-Reinvite-Glare-Avoidance/index.md
index 9807f11ba1..29d5095a87 100644
--- a/docs/Configuration/Channel-Drivers/SIP/Concepts/SIP-Direct-Media-Reinvite-Glare-Avoidance/index.md
+++ b/docs/Configuration/Channel-Drivers/SIP/Concepts/SIP-Direct-Media-Reinvite-Glare-Avoidance/index.md
@@ -1,9 +1,9 @@
# SIP Direct Media Reinvite Glare Avoidance
-!!! note
- While this page has not yet been updated for chan_pjsip, the
- concepts are the same.
-[//]: # (end-note)
+/// note | What about chan_pjsip?
+While this page has not yet been updated for chan_pjsip, the concepts
+are the same.
+///
## Overview
diff --git a/docs/Configuration/Channel-Drivers/SIP/Configuring-chan_sip/Configuring-chan_sip-for-IPv6.md b/docs/Configuration/Channel-Drivers/SIP/Configuring-chan_sip/Configuring-chan_sip-for-IPv6.md
index 0ccafacd14..06f1989c89 100644
--- a/docs/Configuration/Channel-Drivers/SIP/Configuring-chan_sip/Configuring-chan_sip-for-IPv6.md
+++ b/docs/Configuration/Channel-Drivers/SIP/Configuring-chan_sip/Configuring-chan_sip-for-IPv6.md
@@ -32,12 +32,14 @@ You can specify a port number by wrapping the address in square brackets and usi
bindaddr=[::]:5062
```
-!!! tip
- You can choose independently for UDP, TCP, and TLS, by specifying different values for "udpbindaddr", "tcpbindaddr", and "tlsbindaddr".
-
- Note that using bindaddr=:: will show only a single IPv6 socket in netstat. IPv4 is supported at the same time using IPv4-mapped IPv6 addresses.)
-
-[//]: # (end-tip)
+/// tip
+You can choose independently for UDP, TCP, and TLS, by specifying
+different values for `udpbindaddr`, `tcpbindaddr`, and `tlsbindaddr`.
+
+Note that using `bindaddr=::` will show only a single IPv6 socket in
+netstat. IPv4 is supported at the same time using IPv4-mapped IPv6
+addresses.
+///
Other Options
=============
diff --git a/docs/Configuration/Channel-Drivers/SIP/Configuring-chan_sip/index.md b/docs/Configuration/Channel-Drivers/SIP/Configuring-chan_sip/index.md
index 0bee9103e4..3edc93d5ae 100644
--- a/docs/Configuration/Channel-Drivers/SIP/Configuring-chan_sip/index.md
+++ b/docs/Configuration/Channel-Drivers/SIP/Configuring-chan_sip/index.md
@@ -6,27 +6,25 @@ pageid: 28934283
Note about chan_pjsip
======================
-!!! warning PJSIP is the Standard SIP Driver
- It is not recommended for new installations to use chan_sip.
+/// warning | PJSIP is the Standard SIP Driver
+It is not recommended for new installations to use chan_sip.
- * chan_sip has been officially removed in Asterisk 21 – Releasing 2023
- * chan_sip was deprecated in Asterisk 17 – Released: October 2019
- * Beginning with Asterisk 13.8.0, a stable version of pjproject is included in Asterisk's ./third-party directory and is enabled with the `--with-pjproject-bundled` option to `./configure`.
- * Beginning with Asterisk 15.0.0, it is enabled by default but can be disabled with the `--without-pjproject-bundled` option to `./configure`.
+* chan_sip has been officially removed in Asterisk 21 – Releasing 2023
+* chan_sip was deprecated in Asterisk 17 – Released: October 2019
+* Beginning with Asterisk 13.8.0, a stable version of pjproject is included in Asterisk's ./third-party directory and is enabled with the `--with-pjproject-bundled` option to `./configure`.
+* Beginning with Asterisk 15.0.0, it is enabled by default but can be disabled with the `--without-pjproject-bundled` option to `./configure`.
- See: [PJSIP-pjproject](/Getting-Started/Installing-Asterisk/Installing-Asterisk-From-Source/Prerequisites/PJSIP-pjproject)
+See: [PJSIP-pjproject](/Getting-Started/Installing-Asterisk/Installing-Asterisk-From-Source/Prerequisites/PJSIP-pjproject)
- See: [Configuring res_pjsip](/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip)
+See: [Configuring res_pjsip](/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip)
- See: [Migrating from chan_sip to res_pjsip](/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Migrating-from-chan_sip-to-res_pjsip)
-
-[//]: # (end-warning)
+See: [Migrating from chan_sip to res_pjsip](/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Migrating-from-chan_sip-to-res_pjsip)
+///
Configuring chan_sip
=====================
There is documentation that resides in the **sip.conf.sample** file included with the source.
-\* Please be advised that limited support will be available on the mailing list, IRC, and bug tracker for issues with chan_sip
-
+* Please be advised that limited support will be available on the mailing list, IRC, and bug tracker for issues with chan_sip
* Further development and bug fixes for chan_sip are not likely
diff --git a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Asterisk-PJSIP-Troubleshooting-Guide.md b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Asterisk-PJSIP-Troubleshooting-Guide.md
index dda12dd0d9..f4743c9451 100644
--- a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Asterisk-PJSIP-Troubleshooting-Guide.md
+++ b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Asterisk-PJSIP-Troubleshooting-Guide.md
@@ -3,10 +3,12 @@ title: Asterisk PJSIP Troubleshooting Guide
pageid: 30278355
---
-!!! warning
- This page is currently under construction. Please refrain from commenting until this warning is removed.
+/// warning | Under Construction
+This page is currently under construction.
-[//]: # (end-warning)
+If you would like to help write this content, please consider
+[contributing to the documentation](/Contributing-to-the-Documentation/).
+///
Overview
========
diff --git a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Configuring-Outbound-Registrations.md b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Configuring-Outbound-Registrations.md
index b7e3d7e241..45ae060b58 100644
--- a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Configuring-Outbound-Registrations.md
+++ b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Configuring-Outbound-Registrations.md
@@ -3,10 +3,12 @@ title: Configuring Outbound Registrations
pageid: 30278351
---
-!!! warning
- This page is under construction. Please refrain from commenting here until this warning is removed.
+/// warning | Under Construction
+This page is currently under construction.
-[//]: # (end-warning)
+If you would like to help write this content, please consider
+[contributing to the documentation](/Contributing-to-the-Documentation/).
+///
Overview
========
@@ -54,19 +56,19 @@ Let's go over how the options were applied to this REGISTER:
An English translation of the above REGISTER is "Tell the server at sip:registrar@example.com that when SIP traffic arrives addressed to sip:client@example.com, the traffic should be sent to sip:inbound-calls@10.24.20.249." Note in this example that 10.24.20.249 is the IP address of the Asterisk server that sent the outbound REGISTER request.
-!!! tip
- The transport type, e.g. tcp, for the registration can be specified by appending the details to the client_uri and/or server_uri parameters, e.g.:
-[//]: # (end-tip)
+/// tip
+The transport type, e.g. `tcp`, for the registration can be specified
+by appending the details to the `client_uri` and/or `server_uri`
+parameters, e.g.:
```
[my_provider]
type = registration
server_uri = sip:registrar@example.com\;transport=tcp
client_uri = sip:client@example.com\;transport=tcp
-contact_user = inbound-calls
-
----
+contact_user = inbound-calls
```
+///
Outbound registrations and endpoints
====================================
@@ -106,10 +108,11 @@ type = aor
contact = sip:my_provider@example.com
```
-!!! warning
- Let me reiterate that this is the **bare minimum**. If you want calls to and from the provider to actually work correctly, you will want to set a context, codecs, authentication, etc. on the endpoint.
-
-[//]: # (end-warning)
+/// warning
+Let me reiterate that this is the **bare minimum**. If you want calls
+to and from the provider to actually work correctly, you will want to
+set a context, codecs, authentication, etc. on the endpoint.
+///
Authentication
==============
@@ -284,10 +287,10 @@ Manually Unregistering
The AMI and CLI provide ways for you to manually unregister if you want. The CLI provides the `pjsip send unregister ` command. AMI provides the `PJSIPUnregister` command to do the same thing.
-!!! note
- After manually unregistering, the specified outbound registration will continue to reregister based on its last registration expiration.
-
-[//]: # (end-note)
+/// note
+After manually unregistering, the specified outbound registration will
+continue to reregister based on its last registration expiration.
+///
Realtime
========
diff --git a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Configuring-res_pjsip-for-Presence-Subscriptions.md b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Configuring-res_pjsip-for-Presence-Subscriptions.md
index d90dd48341..2172e0352b 100644
--- a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Configuring-res_pjsip-for-Presence-Subscriptions.md
+++ b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Configuring-res_pjsip-for-Presence-Subscriptions.md
@@ -3,10 +3,12 @@ title: Configuring res_pjsip for Presence Subscriptions
pageid: 29392974
---
-!!! warning
- Under Construction - This page is a stub!
+/// warning | Under Construction
+This page is just a stub.
-[//]: # (end-warning)
+If you would like to help write this content, please consider
+[contributing to the documentation](/Contributing-to-the-Documentation/).
+///
Capabilities
============
diff --git a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Exchanging-Device-and-Mailbox-State-Using-PJSIP.md b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Exchanging-Device-and-Mailbox-State-Using-PJSIP.md
index cc021baf6e..b36137bf49 100644
--- a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Exchanging-Device-and-Mailbox-State-Using-PJSIP.md
+++ b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Exchanging-Device-and-Mailbox-State-Using-PJSIP.md
@@ -123,10 +123,11 @@ mailbox_state_filter=^1000
This builds upon the initial configuration for instance #2 but adds filtering of received events. Only device state events relating to PJSIP endpoints will be accepted. As well only mailbox state events for mailboxes starting with 1000 will be accepted.
-!!! note
- This configuration is not ideal as the publishing instance (instance #1) will still send state changes for devices and mailboxes that instance #2 does not care about, thus wasting bandwidth.
-
-[//]: # (end-note)
+/// note
+This configuration is not ideal as the publishing instance (instance
+#1) will still send state changes for devices and mailboxes that
+instance #2 does not care about, thus wasting bandwidth.
+///
Fresh Startup
-------------
diff --git a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Migrating-from-chan_sip-to-res_pjsip.md b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Migrating-from-chan_sip-to-res_pjsip.md
index 31d1ff3ba4..b3ed29788c 100644
--- a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Migrating-from-chan_sip-to-res_pjsip.md
+++ b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Migrating-from-chan_sip-to-res_pjsip.md
@@ -44,10 +44,13 @@ Side by Side Examples of sip.conf and pjsip.conf Configuration
These examples contain only the configuration required for sip.conf/pjsip.conf as the configuration for other files should be the same, excepting the Dial statements in your extensions.conf. Dialing with PJSIP is discussed in [Dialing PJSIP Channels](/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/Dialing-PJSIP-Channels).
-!!! note
- It is important to know that PJSIP syntax and configuration format is stricter than the older chan_sip driver. When in doubt, try to follow the documentation exactly, avoid extra spaces or strange capitalization. Always check your logs for warnings or errors if you suspect something is wrong.
-
-[//]: # (end-note)
+/// note
+It is important to know that PJSIP syntax and configuration format is
+stricter than the older chan_sip driver. When in doubt, try to follow
+the documentation exactly, avoid extra spaces or strange
+capitalization. Always check your logs for warnings or errors if you
+suspect something is wrong.
+///
Example Endpoint Configuration
------------------------------
diff --git a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/PJSIP-Configuration-Sections-and-Relationships.md b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/PJSIP-Configuration-Sections-and-Relationships.md
index b5fcd69981..0284d31f9a 100644
--- a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/PJSIP-Configuration-Sections-and-Relationships.md
+++ b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/PJSIP-Configuration-Sections-and-Relationships.md
@@ -30,8 +30,12 @@ Reference documentation for all configuration parameters:
The same documentation is available at the Asterisk CLI as well. You can use `config show help ` to get help on a particular option. That help will typically describe the default value for an option as well.
-/// tip|Defaults
-For many config options, it's very helpful to understand their default behavior. For example, for the endpoint section "transport=" option, if no value is assigned then Asterisk will \*DEFAULT\* to the first configured transport in pjsip.conf which is valid for the URI we are trying to contact.
+/// tip | Defaults
+For many config options, it's very helpful to understand their default
+behavior. For example, for the endpoint section "transport=" option,
+if no value is assigned then Asterisk will \*DEFAULT\* to the first
+configured transport in pjsip.conf which is valid for the URI we are
+trying to contact.
///
## Object Names
@@ -83,8 +87,9 @@ You can set up multiple transport sections and other sections (such as endpoints
* They cannot share the same IP+port or IP+protocol combination. That is, each transport that binds to the same IP as another must use a different port or protocol.
* PJSIP does not allow multiple TCP or TLS transports of the same IP version (IPv4 or IPv6).
-/// info|Reloading Config
-Configuration for transport type sections can't be reloaded during run-time unless their `allow_reload` option is set to `yes`
+/// note | Reloading Config
+Configuration for transport type sections can't be reloaded during
+run-time unless their `allow_reload` option is set to `yes`
///
EXAMPLE BASIC CONFIGURATION
diff --git a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/PJSIP-Transport-Selection.md b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/PJSIP-Transport-Selection.md
index 897bf0c136..b8dc29ebe1 100644
--- a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/PJSIP-Transport-Selection.md
+++ b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/PJSIP-Transport-Selection.md
@@ -39,10 +39,11 @@ The provided transport is used.
The provided transport is instructed to establish a new connection to the resolved IP address and port.
-!!! info ""
- If an existing connection exists to the IP address and port using the specific transport type then it is reused and a new one is not established.
-
-[//]: # (end-info)
+/// note
+If an existing connection exists to the IP address and port using the
+specific transport type then it is reused and a new one is not
+established.
+///
### 4. Multihomed Transport Selection (Connection-less protocols)
@@ -213,10 +214,12 @@ protocol=tcp
bind=[2001:470:e20f:42::42]
```
-!!! warning
- It might be tempting to use a wildcard IPv6 address to bind a single transport to allow both IPv6 and IPv4. In this configuration IPv6 mapped IPv4 addresses will be used which is unsupported by PJSIP. This will cause a SIP message parsing failure.
-
-[//]: # (end-warning)
+/// warning
+It might be tempting to use a wildcard IPv6 address to bind a single
+transport to allow both IPv6 and IPv4. In this configuration IPv6
+mapped IPv4 addresses will be used which is unsupported by PJSIP. This
+will cause a SIP message parsing failure.
+///
Common Issues
=============
diff --git a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/res_pjsip-Configuration-Examples.md b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/res_pjsip-Configuration-Examples.md
index 1f448867e4..0f44cfc67d 100644
--- a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/res_pjsip-Configuration-Examples.md
+++ b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/res_pjsip-Configuration-Examples.md
@@ -96,9 +96,10 @@ match=sip.example.com
* We use an identify object to map all traffic from the provider's IP as traffic to that endpoint since the user portion of their From: header may vary with each call.
* This example assumes that [sip.example.com](http://sip.example.com) resolves to 203.0.113.1
-!!! tip
- You can specify the transport type by appending it to the server_uri and client_uri parameters. e.g.:
-[//]: # (end-tip)
+/// tip
+The transport type, e.g. `tcp`, for the registration can be specified
+by appending the details to the `client_uri` and/or `server_uri`
+parameters, e.g.:
```
[mytrunk]
@@ -106,10 +107,9 @@ type=registration
outbound_auth=mytrunk
server_uri=sip:sip.example.com\;transport=tcp
client_uri=sip:1234567890@sip.example.com\;transport=tcp
-retry_interval=60
-
----
+retry_interval=60
```
+///
Multiple endpoints with phones registering to Asterisk, using templates
-----------------------------------------------------------------------
diff --git a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/res_pjsip-Remote-Attended-Transfers.md b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/res_pjsip-Remote-Attended-Transfers.md
index 9ca8096198..a96a09713f 100644
--- a/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/res_pjsip-Remote-Attended-Transfers.md
+++ b/docs/Configuration/Channel-Drivers/SIP/Configuring-res_pjsip/res_pjsip-Remote-Attended-Transfers.md
@@ -79,17 +79,22 @@ Now that the theory has been presented, you'll need to write your `external_repl
If you do want to write an `external_replaces` extension, the first thing you want to do is determine if you want to perform the remote attended transfer. `SIPREFERTOHDR`, and values provided by the `CHANNEL()` dialplan function can help you to decide if you want to allow the transfer. For instance, you might use `CHANNEL(endpoint)` to see which PJSIP endpoint is performing the transfer, and you can inspect `SIPREFERTOHDR` to determine if the transfer is destined for a trusted domain.
-!!! note
- Asterisk dialplan contains functions for manipulating strings. A function [Asterisk 13 Function_PJSIP_PARSE_URI](/Latest_API/API_Documentation/Dialplan_Functions/PJSIP_PARSE_URI) exists for parsing a URI within the dialplan.
-
-[//]: # (end-note)
+/// note
+Asterisk dialplan contains functions for manipulating strings. A
+function
+[PJSIP_PARSE_URI](/Latest_API/API_Documentation/Dialplan_Functions/PJSIP_PARSE_URI)
+exists for parsing a URI within the dialplan.
+///
If you decide not to perform the transfer, the simplest thing to do is to call the `Hangup()` application.
-!!! note
- Calling `Hangup()` in this situation can have different effects depending on what type of phone Bob is using. Asterisk updates the phone with a notification that the attended transfer failed. It is up to the phone to decide if it wants to try to reinvite itself back into the original conversation with Alice or simply hang up.
-
-[//]: # (end-note)
+/// note
+Calling `Hangup()` in this situation can have different effects
+depending on what type of phone Bob is using. Asterisk updates the
+phone with a notification that the attended transfer failed. It is up
+to the phone to decide if it wants to try to reinvite itself back into
+the original conversation with Alice or simply hang up.
+///
If you decide to perform the transfer, the most straightforward way to do this is with the `Dial()` application. Here is an example of how one might complete the transfer
diff --git a/docs/Configuration/Channel-Drivers/SIP/index.md b/docs/Configuration/Channel-Drivers/SIP/index.md
index 7987417c29..ee79789a17 100644
--- a/docs/Configuration/Channel-Drivers/SIP/index.md
+++ b/docs/Configuration/Channel-Drivers/SIP/index.md
@@ -3,12 +3,11 @@ title: Overview
pageid: 28314848
---
-!!! warning
- Under Construction
-
-[//]: # (end-warning)
-
-!!! note
- Section to hold information on configuring the SIP channel drivers, chan_sip and chan_pjsip
-
-[//]: # (end-note)
+/// warning | Under Construction
+If you would like to help write this section, please consider
+[contributing to the documentation](/Contributing-to-the-Documentation/).
+///
+
+This section contains information on configuring the SIP channel
+drivers, [chan_sip](Configuring-chan_sip/) and
+[chan_pjsip](Configuring-res_pjsip/).
diff --git a/docs/Configuration/Channel-Drivers/index.md b/docs/Configuration/Channel-Drivers/index.md
index c19827b21b..99cc80185a 100644
--- a/docs/Configuration/Channel-Drivers/index.md
+++ b/docs/Configuration/Channel-Drivers/index.md
@@ -4,5 +4,3 @@ pageid: 4817130
---
All about Asterisk and its Channel Drivers
-
-Topics
diff --git a/docs/Configuration/Core-Configuration/Asterisk-Main-Configuration-File.md b/docs/Configuration/Core-Configuration/Asterisk-Main-Configuration-File.md
index 189144c717..e10f77ef89 100644
--- a/docs/Configuration/Core-Configuration/Asterisk-Main-Configuration-File.md
+++ b/docs/Configuration/Core-Configuration/Asterisk-Main-Configuration-File.md
@@ -8,7 +8,7 @@ The asterisk.conf file
asterisk.conf is used to configure the locations of directories and files used by Asterisk, as well as options relevant to the core of Asterisk.
-[Link to the asterisk.conf.sample](https://github.com/asterisk/asterisk/blob/master/configs/samples/asterisk.conf.sample) file in the Asterisk GitHub repo. The information below could become out of date, so always check the relevant sample file in our repo.
+The information below could become out of date, so always check [the relevant sample file](https://github.com/asterisk/asterisk/blob/master/configs/samples/asterisk.conf.sample) in our GitHub repository.
asterisk.conf has two primary contexts, shown below with some descriptions about their content.
@@ -22,6 +22,7 @@ Directories Context
```
[directories](!)
+astcachedir => /var/cache/asterisk
astetcdir => /etc/asterisk
astmoddir => /usr/lib/asterisk/modules
astvarlibdir => /var/lib/asterisk
@@ -42,115 +43,114 @@ Options Context
Some additional annotation for each configuration option is included inline.
-!!! note
- TODO: Match this up with what is current in the sample, and update both.
-
-[//]: # (end-note)
+/// note
+TODO: Match this up with what is current in the sample, and update both.
+///
```
- [options]
-;Under "options" you can enter configuration options
-;that you also can set with command line options
-; Verbosity level for logging (-v) verbose = 0
-; Debug: "No" or value (1-4)
-debug = 3
+ [options]
+;Under "options" you can enter configuration options
+;that you also can set with command line options
+; Verbosity level for logging (-v) verbose = 0
+; Debug: "No" or value (1-4)
+debug = 3
-; Background execution disabled (-f)
-nofork=yes | no
+; Background execution disabled (-f)
+nofork=yes | no
-; Always background, even with -v or -d (-F)
-alwaysfork=yes | no
+; Always background, even with -v or -d (-F)
+alwaysfork=yes | no
-; Console mode (-c)
-console= yes | no
+; Console mode (-c)
+console= yes | no
-; Execute with high priority (-p)
-highpriority = yes | no
+; Execute with high priority (-p)
+highpriority = yes | no
-; Initialize crypto at startup (-i)
-initcrypto = yes | no
+; Initialize crypto at startup (-i)
+initcrypto = yes | no
-; Disable ANSI colors (-n)
-nocolor = yes | no
+; Disable ANSI colors (-n)
+nocolor = yes | no
-; Dump core on failure (-g)
-dumpcore = yes | no
+; Dump core on failure (-g)
+dumpcore = yes | no
-; Run quietly (-q)
-quiet = yes | no
+; Run quietly (-q)
+quiet = yes | no
-; Force timestamping in CLI verbose output (-T)
-timestamp = yes | no
+; Force timestamping in CLI verbose output (-T)
+timestamp = yes | no
-; User to run asterisk as (-U) NOTE: will require changes to
-; directory and device permissions
-runuser = asterisk
+; User to run asterisk as (-U) NOTE: will require changes to
+; directory and device permissions
+runuser = asterisk
-; Group to run asterisk as (-G)
-rungroup = asterisk
+; Group to run asterisk as (-G)
+rungroup = asterisk
-; Enable internal timing support (-I)
-internal_timing = yes | no
+; Enable internal timing support (-I)
+internal_timing = yes | no
-; Language Options
-documentation_language = en | es | ru
+; Language Options
+documentation_language = en | es | ru
-; These options have no command line equivalent
+; These options have no command line equivalent
-; Cache record() files in another directory until completion
-cache_record_files = yes | no
-record_cache_dir =
+; Cache record() files in another directory until completion
+cache_record_files = yes | no
+record_cache_dir =
-; Build transcode paths via SLINEAR
-transcode_via_sln = yes | no
+; Build transcode paths via SLINEAR
+transcode_via_sln = yes | no
-; send SLINEAR silence while channel is being recorded
-transmit_silence_during_record = yes | no
+; send SLINEAR silence while channel is being recorded
+transmit_silence_during_record = yes | no
-; The maximum load average we accept calls for
-maxload = 1.0
+; The maximum load average we accept calls for
+maxload = 1.0
-; The maximum number of concurrent calls you want to allow
-maxcalls = 255
+; The maximum number of concurrent calls you want to allow
+maxcalls = 255
-; Stop accepting calls when free memory falls below this amount specified in MB
-minmemfree = 256
+; Stop accepting calls when free memory falls below this amount specified in MB
+minmemfree = 256
-; Allow #exec entries in configuration files
-execincludes = yes | no
+; Allow #exec entries in configuration files
+execincludes = yes | no
-; Don't over-inform the Asterisk sysadm, he's a guru
-dontwarn = yes | no
+; Don't over-inform the Asterisk sysadm, he's a guru
+dontwarn = yes | no
-; System name. Used to prefix CDR uniqueid and to fill \${SYSTEMNAME}
-systemname =
+; System name. Used to prefix CDR uniqueid and to fill \${SYSTEMNAME}
+systemname =
-; Should language code be last component of sound file name or first?
-; when off, sound files are searched as //
-; when on, sound files are search as //
-; (only affects relative paths for sound files)
-languageprefix = yes | no
+; Should language code be last component of sound file name or first?
+; when off, sound files are searched as //
+; when on, sound files are search as //
+; (only affects relative paths for sound files)
+languageprefix = yes | no
-; Locking mode for voicemail
-; - lockfile: default, for normal use
-; - flock: for where the lockfile locking method doesn't work
-; eh. on SMB/CIFS mounts
-lockmode = lockfile | flock
+; Locking mode for voicemail
+; - lockfile: default, for normal use
+; - flock: for where the lockfile locking method doesn't work
+; eh. on SMB/CIFS mounts
+lockmode = lockfile | flock
-; Entity ID. This is in the form of a MAC address. It should be universally
-; unique. It must be unique between servers communicating with a protocol
-; that uses this value. The only thing that uses this currently is DUNDi,
-; but other things will use it in the future.
-; entityid=00:11:22:33:44:55
+; Entity ID. This is in the form of a MAC address. It should be universally
+; unique. It must be unique between servers communicating with a protocol
+; that uses this value. The only thing that uses this currently is DUNDi,
+; but other things will use it in the future.
+; entityid=00:11:22:33:44:55
[files]
-; Changing the following lines may compromise your security
+; Changing the following lines may compromise your security
; Asterisk.ctl is the pipe that is used to connect the remote CLI
-; (asterisk -r) to Asterisk. Changing these settings change the
-; permissions and ownership of this file.
-; The file is created when Asterisk starts, in the "astrundir" above.
-;astctlpermissions = 0660
-;astctlowner = root
-;astctlgroup = asterisk
+; (asterisk -r) to Asterisk. Changing these settings change the
+; permissions and ownership of this file.
+; The file is created when Asterisk starts, in the "astrundir" above.
+;astctlpermissions = 0660
+;astctlowner = root
+;astctlgroup = asterisk
;astctl = asterisk.ctl
```
diff --git a/docs/Configuration/Core-Configuration/Named-ACLs.md b/docs/Configuration/Core-Configuration/Named-ACLs.md
index 6648df89ad..09d4877c39 100644
--- a/docs/Configuration/Core-Configuration/Named-ACLs.md
+++ b/docs/Configuration/Core-Configuration/Named-ACLs.md
@@ -117,15 +117,19 @@ CREATE TABLE acltable (rule TEXT, sense TEXT, rule_order NUMERIC, name TEXT);
COMMIT;
```
-!!! note
- These scripts were generated by pgadmin III and SQLite Database Browser. They might not necessarily apply for your own setup.
-
-[//]: # (end-note)
-
-!!! note
- Since ACLs are obtained by consumer modules when they are loaded, an ACL updated in an ARA backend will not be propagated automatically to consumers using static configuration. Consumer modules also using ARA for their configuration (such as SIP/IAX2 peers) will similarly be up to date if and only if they have built the peer in question since the changes to the realtime ACL have taken place.
-
-[//]: # (end-note)
+/// note
+These scripts were generated by pgadmin III and SQLite Database
+Browser. They might not necessarily apply for your own setup.
+///
+
+/// note
+Since ACLs are obtained by consumer modules when they are loaded, an
+ACL updated in an ARA backend will not be propagated automatically to
+consumers using static configuration. Consumer modules also using ARA
+for their configuration (such as SIP/IAX2 peers) will similarly be up
+to date if and only if they have built the peer in question since the
+changes to the realtime ACL have taken place.
+///
Named ACL Consumers
-------------------
@@ -171,16 +175,16 @@ acl=named_acl_1,named_acl_2
Similarly, a SIP or IAX2 peer defined in ARA can include an '*acl*' column and list the Named ACLs to apply in that column.
-!!! note NOTE
- Named ACLs can also be defined using multiple instances of the *acl* keyword. This is discouraged, however, as the order in which ACLs are applied can be less obvious then the comma delineated list format.
-[//]: # (end-note)
+/// note
+Named ACLs can also be defined using multiple instances of the `acl`
+keyword. This is discouraged, however, as the order in which ACLs are
+applied can be less obvious then the comma-delimited list format:
```
acl=named_acl_1
acl=named_acl_2
-
----
```
+///
### ACL Rule Application
@@ -193,7 +197,8 @@ ACL information is static once a consumer module references that information. He
The Named ACL component supports module reloads, in the same way as other Asterisk components. When the Named ACL component is reloaded, it will issue a request to all consumers of Named ACLs. Those consumer modules will also be automatically reloaded.
-!!! warning XXXXNXING
- This implies that reloading the Named ACL component will force a reload of manager, chan_sip, etc. Only reload the Named ACL component if you want all consumers of that information to be reloaded as well.
-
-[//]: # (end-warning)
+/// warning
+This implies that reloading the Named ACL component will force a
+reload of manager, chan_sip, etc. Only reload the Named ACL component
+if you want all consumers of that information to be reloaded as well.
+///
diff --git a/docs/Configuration/Dialplan/Asterisk-Extension-Language-AEL/AEL-Example-Usages/AEL-Conditionals.md b/docs/Configuration/Dialplan/Asterisk-Extension-Language-AEL/AEL-Example-Usages/AEL-Conditionals.md
index a9b24ba223..ce4924eb5b 100644
--- a/docs/Configuration/Dialplan/Asterisk-Extension-Language-AEL/AEL-Example-Usages/AEL-Conditionals.md
+++ b/docs/Configuration/Dialplan/Asterisk-Extension-Language-AEL/AEL-Example-Usages/AEL-Conditionals.md
@@ -7,89 +7,97 @@ AEL supports if and switch statements, like AEL, but adds ifTime, and random. Un
```
context conditional {
- _8XXX => {
- Dial(SIP/${EXTEN});
- if ("${DIALSTATUS}" = "BUSY")
- {
- NoOp(yessir);
- Voicemail(${EXTEN},b);
- }
- else
- Voicemail(${EXTEN},u);
- ifTime (14:00-23:59|sat-sun|*|*)
- Voicemail(${EXTEN},b);
- else
- {
- Voicemail(${EXTEN},u);
- NoOp(hi, there!);
- }
- random(51) NoOp(This should appear 51% of the time);
- random( 60 )
- {
- NoOp( This should appear 60% of the time );
- }
- else
- {
- random(75)
- {
- NoOp( This should appear 30% of the time! );
- }
- else
- {
- NoOp( This should appear 10% of the time! );
- }
- }
- }
- _777X => {
- switch (${EXTEN}) {
- case 7771:
- NoOp(You called 7771!);
- break;
- case 7772:
- NoOp(You called 7772!);
- break;
- case 7773:
- NoOp(You called 7773!);
- // fall thru-
- pattern 777[4-9]:
- NoOp(You called 777 something!);
- default: NoOp(In the default clause!);
- }
- }
+ _8XXX => {
+ Dial(SIP/${EXTEN});
+ if ("${DIALSTATUS}" = "BUSY")
+ {
+ NoOp(yessir);
+ Voicemail(${EXTEN},b);
+ }
+ else
+ Voicemail(${EXTEN},u);
+
+ ifTime (14:00-23:59|sat-sun|*|*)
+ Voicemail(${EXTEN},b);
+ else
+ {
+ Voicemail(${EXTEN},u);
+ NoOp(hi, there!);
+ }
+
+ random(51) NoOp(This should appear 51% of the time);
+
+ random(60)
+ {
+ NoOp(This should appear 60% of the time);
+ }
+ else
+ {
+ random(75)
+ {
+ NoOp(This should appear 30% of the time!);
+ }
+ else
+ {
+ NoOp( This should appear 10% of the time! );
+ }
+ }
+ }
+
+ _777X => {
+ switch (${EXTEN}) {
+ case 7771:
+ NoOp(You called 7771!);
+ break;
+ case 7772:
+ NoOp(You called 7772!);
+ break;
+ case 7773:
+ NoOp(You called 7773!);
+ // fall thru-
+ pattern 777[4-9]:
+ NoOp(You called 777 something!);
+ default: NoOp(In the default clause!);
+ }
+ }
}
```
-!!! note
- The conditional expression in if() statements (the "${DIALSTATUS}" = "BUSY" above) is wrapped by the compiler in $[] for evaluation.
-
-[//]: # (end-note)
-
-!!! note
- Neither the switch nor case values are wrapped in $[ ]; they can be constants, or ${var} type references only.
-
-[//]: # (end-note)
-
-!!! note
- AEL generates each case as a separate extension. case clauses with no terminating 'break', or 'goto', have a goto inserted, to the next clause, which creates a 'fall thru' effect.
-
-[//]: # (end-note)
-
-!!! note
- AEL introduces the ifTime keyword/statement, which works just like the if() statement, but the expression is a time value, exactly like that used by the application GotoIfTime(). See Asterisk cmd GotoIfTime
-
-[//]: # (end-note)
-
-!!! note
- The pattern statement makes sure the new extension that is created has an '_' preceding it to make sure asterisk recognizes the extension name as a pattern.
-
-[//]: # (end-note)
-
-!!! note
- Every character enclosed by the switch expression's parenthesis are included verbatim in the labels generated. So watch out for spaces!
-
-[//]: # (end-note)
-
-!!! note
- NEW: Previous to version 0.13, the random statement used the "Random()" application, which has been deprecated. It now uses the RAND() function instead, in the GotoIf application.
-
-[//]: # (end-note)
+/// note
+The conditional expression in if() statements (the "${DIALSTATUS}" =
+"BUSY" above) is wrapped by the compiler in $[] for evaluation.
+///
+
+/// note
+Neither the switch nor case values are wrapped in $[ ]; they can be
+constants, or ${var} type references only.
+///
+
+/// note
+AEL generates each case as a separate extension. case clauses with no
+terminating 'break', or 'goto', have a goto inserted, to the next
+clause, which creates a 'fall thru' effect.
+///
+
+/// note
+AEL introduces the ifTime keyword/statement, which works just like the
+if() statement, but the expression is a time value, exactly like that
+used by the application GotoIfTime(). See Asterisk cmd GotoIfTime
+///
+
+/// note
+The pattern statement makes sure the new extension that is created has
+an '_' preceding it to make sure asterisk recognizes the extension
+name as a pattern.
+///
+
+/// note
+Every character enclosed by the switch expression's parenthesis are
+included verbatim in the labels generated. So watch out for spaces!
+///
+
+/// note
+NEW: Previous to version 0.13, the random statement used the
+"Random()" application, which has been deprecated. It now uses the
+RAND() function instead, in the GotoIf application.
+///
diff --git a/docs/Configuration/Dialplan/Include-Statements/Include-Statements-Basics.md b/docs/Configuration/Dialplan/Include-Statements/Include-Statements-Basics.md
index f12223a4a9..82d743b1cd 100644
--- a/docs/Configuration/Dialplan/Include-Statements/Include-Statements-Basics.md
+++ b/docs/Configuration/Dialplan/Include-Statements/Include-Statements-Basics.md
@@ -26,16 +26,20 @@ exten => 6500,1,Answer(500)
same => n,VoiceMailMain(@vm-demo)
```
-!!! tip Location of Include Statements** Please note that in the example above, we placed the include statement before extensions **6001** and **6002
- . It could have just as well come after.
+/// tip | Location of Include Statements
+Please note that in the example above, we placed the include statement
+before extensions **6001** and **6002**. It could have just as well
+come after.
+///
-[//]: # (end-tip)
+/// warning | Be careful with overlapping patterns/extensions
+Because Asterisk doesn't stop processing the dialplan after the first
+matching extension is found, always ensure that you don't have
+overlapping patterns or duplicate extensions among included contexts,
+or else you'll get an unexpected behavior.
+///
-!!! warning Be careful with overlapping patterns/extensions
- Because Asterisk doesn't stop processing the dialplan after the first matching extension is found, always ensure that you don't have overlapping patterns or duplicate extensions among included contexts, or else you'll get an unexpected behavior.
-[//]: # (end-warning)
-
-How calling 6001 may go wrong
+How calling 6001 may go wrong
```
[users]
@@ -58,7 +62,5 @@ exten => 6500,1,Answer(500)
[catchall]
exten => _.,1,NoOp();
exten => _.,2,NoOp();
-exten => _.,3,NoOp(); ; <- Priority 3 ends up being here, which is NOT what you want
-
----
+exten => _.,3,NoOp(); ; <- Priority 3 ends up being here, which is NOT what you want
```
diff --git a/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Advanced-pbx_lua-Topics.md b/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Advanced-pbx_lua-Topics.md
index 31839bbfdf..bc488e6ce6 100644
--- a/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Advanced-pbx_lua-Topics.md
+++ b/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Advanced-pbx_lua-Topics.md
@@ -12,9 +12,9 @@ The `extensions.lua` file is loaded into memory once when the pbx_lua module is
---
-This is probably a bad idea.
+This is probably a bad idea.
-```
+```lua title="extensions.lua"
-- my fancy extensions.lua
extensions = {}
@@ -24,9 +24,9 @@ extensions.default = {}
data = query_webservice_for_extensions_list("site1")
for _, e in ipairs(data) do
- extensions.default[e.exten] = function()
- app.dial("SIP/" .. e.sip_peer, e.dial_timeout)
- end
+ extensions.default[e.exten] = function()
+ app.dial("SIP/" .. e.sip_peer, e.dial_timeout)
+ end
end
```
@@ -35,23 +35,23 @@ The `extensions` Table
The `extensions` table is a standard lua table and can be defined however you like. The pbx_lua module loads and sorts the table when it is needed. The keys in the table are context names and each value is another lua table containing extensions. Each key in the context table is an extension name and each value is an extension function.
-```
+```lua title="extensions.lua"
extensions = {
- context_table = {
- extension1 = function()
- end;
- extension2 = function()
- end;
- };
+ context_table = {
+ extension1 = function()
+ end,
+ extension2 = function()
+ end
+ }
}
```
Where did the priorities go?
----------------------------
-There are no priorities. Asterisk uses priorities to define the order in which dialplan operations occur. The pbx_lua module uses functions to define extensions and execution occurs within the lua interpreter, priorities don't make sense in this context. To Asterisk, each pbx_lua extension appears as an extension with one priority. Lua extensions can be referenced using the context name, extension, and priority 1, e.g. `Goto(default,1234,1)`. You would only reference extensions this way from outside of pbx_lua (i.e. from `extensions.conf` or `extensions.ael`). From with in pbx_lua you can just execute that extension's function.
+There are no priorities. Asterisk uses priorities to define the order in which dialplan operations occur. The pbx_lua module uses functions to define extensions and execution occurs within the lua interpreter, priorities don't make sense in this context. To Asterisk, each pbx_lua extension appears as an extension with one priority. Lua extensions can be referenced using the context name, extension, and priority 1, e.g. `Goto(default,1234,1)`. You would only reference extensions this way from outside of pbx_lua (i.e. from `extensions.conf` or `extensions.ael`). From with in pbx_lua you can just execute that extension's function.
-```
+```lua title="extensions.lua"
extensions.default["1234"]("default", "1234")
```
@@ -69,9 +69,9 @@ Apps, Functions, and Variables
---
-channel variable: var is the placeholder object
+channel variable: var is the placeholder object
-```
+```lua title="extensions.lua"
var = channel.my_variable
var:set("my value")
value = var:get("my value")
@@ -79,9 +79,9 @@ value = var:get("my value")
---
-dialplan function: fax_modems is the placeholder object
+dialplan function: fax_modems is the placeholder object
-```
+```lua title="extensions.lua"
fax_modems = channel.FAXOPT("module")
-- the function arguments are stored in the placeholder
@@ -92,9 +92,9 @@ value = fax_modems:get()
---
-dialplan application: dial is the placeholder object
+dialplan application: dial is the placeholder object
-```
+```lua title="extensions.lua"
dial = app.dial
-- the only thing we can do with it is execute it
diff --git a/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Dialplan-to-Lua-Reference.md b/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Dialplan-to-Lua-Reference.md
index c315e235a0..61ba432998 100644
--- a/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Dialplan-to-Lua-Reference.md
+++ b/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Dialplan-to-Lua-Reference.md
@@ -10,42 +10,30 @@ Extension Patterns
Extension pattern matching syntax on logic works the same for `extensions.conf` and `extensions.lua`.
-
-extensions.conf
----------------
-
-```
+```title="extensions.conf"
[users]
exten => _1XX,1,Dial(SIP/${EXTEN})
exten => _2XX,1,Voicemail(${EXTEN:1})
```
-
-extensions.lua
---------------
-
-```
+```lua title="extensions.lua"
extensions = {}
extensions.users = {}
extensions.users["_1XX"] = function(c, e)
- app.dial("SIP/" .. e)
+ app.dial("SIP/" .. e)
end
extensions.users["_2XX"] = function(c, e)
- app.voicemail("1" .. e:sub(2))
+ app.voicemail("1" .. e:sub(2))
end
```
Context Includes
----------------
-
-extensions.conf
----------------
-
-```
+```title="extensions.conf"
[users]
exten => 100,1,Noop
exten => 100,n,Dial("SIP/100")
@@ -59,38 +47,28 @@ include => demo
include => users
```
-
-extensions.lua
---------------
-
-```
+```lua title="extensions.lua"
extensions = {
- users = {
- [100] = function()
- app.dial("SIP/100")
- end;
- };
-
- demo = {
- ["s"] = function()
- app.playback(demo-congrats)
- end;
- };
-
- default = {
- include = {"demo", "users"};
- };
+ users = {
+ [100] = function()
+ app.dial("SIP/100")
+ end
+ },
+ demo = {
+ ["s"] = function()
+ app.playback(demo - congrats)
+ end
+ },
+ default = {
+ include = {"demo", "users"}
+ }
}
```
Loops
-----
-
-extensions.conf
----------------
-
-```
+```title="extensions.conf"
exten => 100,1,Noop
exten => 100,n,Set(i=0)
exten => 100,n,While($[i < 10])
@@ -98,34 +76,22 @@ exten => 100,n,Verbose(i = ${i})
exten => 100,n,EndWhile
```
-
-extensions.lua
---------------
-
-```
+```lua title="extensions.lua"
i = 0
while i < 10 do
- app.verbose("i = " .. i)
+ app.verbose("i = " .. i)
end
```
Variables
---------
-
-extensions.conf
----------------
-
-```
+```title="extensions.conf"
exten => 100,1,Set(my_variable=my_value)
exten => 100,n,Verbose(my_variable = ${my_variable})
```
-
-extensions.lua
---------------
-
-```
+```lua title="extensions.lua"
channel.my_variable = "my_value"
app.verbose("my_variable = " .. channel.my_variable:get())
```
@@ -133,19 +99,11 @@ app.verbose("my_variable = " .. channel.my_variable:get())
Applications
------------
-
-extensions.conf
----------------
-
-```
+```title="extensions.conf"
exten => 100,1,Dial("SIP/100",,m)
```
-
-extensions.lua
---------------
-
-```
+```lua title="extensions.lua"
app.dial("SIP/100", nil, "m")
```
@@ -154,11 +112,7 @@ Macros/GoSub
*Macros can be defined in pbx_lua by naming a context 'macro-\*' just as in `extensions.conf`, but generally where you would use macros or gosub in `extensions.conf` you would simply use a function in lua.*
-
-extensions.conf
----------------
-
-```
+```title="extensions.conf"
[macro-dial]
exten => s,1,Noop
exten => s,n,Dial(${ARG1})
@@ -167,20 +121,16 @@ exten => s,n,Dial(${ARG1})
exten => 100,1,Macro(dial,SIP/100)
```
-
-extensions.lua
---------------
-
-```
+```lua title="extensions.lua"
extensions = {}
extensions.default = {}
function dial(resource)
- app.dial(resource)
+ app.dial(resource)
end
extensions.default[100] = function()
- dial("SIP/100")
+ dial("SIP/100")
end
```
@@ -189,11 +139,7 @@ Goto
*While `Goto` is an extenstions.conf staple, it should generally be avoided in pbx_lua in favor of functions.*
-
-extensions.conf
----------------
-
-```
+```title="extensions.conf"
[default]
exten => 100,1,Goto(102,1)
@@ -201,37 +147,36 @@ exten => 102,1,Playback("demo-thanks")
exten => 102,n,Hangup
```
-
-extensions.lua
---------------
-
-```
+```lua title="extensions.lua"
extensions = {}
extensions.default = {}
function do_hangup()
- app.playback("demo-thanks")
- app.hangup()
+ app.playback("demo-thanks")
+ app.hangup()
end
extensions.default[100] = function()
- do_hangup()
+ do_hangup()
end
```
-!!! info ""
- The `app.goto()` function will not work as expected in pbx_lua in Asterisk 1.8. If you must use `app.goto()` you must manually return control back to asterisk using `return` from the dialplan extension function, otherwise execution will continue after the call to `app.goto()`. Calls to `app.goto()` should work as expected in Asterisk 10 but still should not be necessary in most cases.
-[//]: # (end-info)
+/// note | `app.goto()` under Asterisk 1.8
+The `app.goto()` function will not work as expected in pbx_lua in
+Asterisk 1.8. If you must use `app.goto()` you must manually return
+control back to asterisk using `return` from the dialplan extension
+function, otherwise execution will continue after the call to
+`app.goto()`. Calls to `app.goto()` should work as expected in
+Asterisk 10 but still should not be necessary in most cases.
+///
-In Asterisk 1.8, use return
+In Asterisk 1.8, use return:
-```
+```lua title="extensions.lua"
function extension_function(c, e)
- return app.goto("default", "100", 1)
+ return app.goto("default", "100", 1)
- -- without that 'return' the rest of the function would execute normally
- app.verbose("Did you forget to use 'return'?")
+ -- without that 'return' the rest of the function would execute normally
+ app.verbose("Did you forget to use 'return'?")
end
-
----
```
diff --git a/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Interacting-with-Asterisk-from-Lua-apps-variables-and-functions.md b/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Interacting-with-Asterisk-from-Lua-apps-variables-and-functions.md
index 967096400c..9d319ddadb 100644
--- a/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Interacting-with-Asterisk-from-Lua-apps-variables-and-functions.md
+++ b/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Interacting-with-Asterisk-from-Lua-apps-variables-and-functions.md
@@ -5,30 +5,32 @@ pageid: 16548029
Interaction with is done through a series of predefined objects provided by pbx_lua. The `app` table is used to access dialplan applications. Any asterisk application can be accessed and executed as if it were a function attached to the `app` table. Dialplan variables and functions are accessed and executed via the `channel` table.
-!!! note Naming Conflicts Between Lua and Asterisk
- Asterisk applications, variables or functions whose names conflict with Lua reserved words or contain special characters must be referenced using the `[]` operator. For example, Lua 5.2 introduced the `goto` control statement which conflicts with the Asterisk `goto` dialplan application. So...
+/// note | Naming Conflicts Between Lua and Asterisk
+Asterisk applications, variables or functions whose names conflict
+with Lua reserved words or contain special characters must be
+referenced using the `[]` operator. For example, Lua 5.2 introduced
+the `goto` control statement which conflicts with the Asterisk `goto`
+dialplan application. So...
-[//]: # (end-note)
+//// warning
+The following will cause pbx_lua.so to fail to load with Lua 5.2 or later because `goto` is a reserved word.
-!!! warning
- The following will cause pbx_lua.so to fail to load with Lua 5.2 or later because `goto` is a reserved word.
-
-```
-app.goto("default", 1000, 1)
+```lua
+app.goto("default", 1000, 1)
```
+////
+//// tip
+The following will work with all Lua versions...
-!!! tip
- The following will work with all Lua versions...
-```
+```lua
app["goto"] ("default", 1000, 1)
```
+////
+///
## Dialplan Applications
----
-extensions.lua
-
-```
+```lua
app.playback("please-hold")
app.dial("SIP/100", nil, "m")
```
@@ -37,74 +39,75 @@ Any dialplan application can be executed using the `app` table. Application name
## Channel Variables
-### Set a Variable
+### Set a Variable
-```
+```lua
channel.my_variable = "my_value"
```
After this the channel variable `${my_variable`} contains the value "my_value".
-### Read a Variable
+### Read a Variable
-```
+```lua
value = channel.my_variable:get()
```
Any channel variable can be read and set using the `channel` table. Local and global lua variables can be used as they normally would and are completely unrelated to channel variables.
-!!! warning
- The following construct will NOT work.
-[//]: # (end-warning)
+/// warning
+The following construct will **not** work.
-```
+```lua
value = channel.my_variable -- does not work as expected (value:get() could be used to get the value after this line)
```
+///
-!!! tip
- If the variable name is an Lua reserved word or contains characters that Lua considers special use the `[]` operator to access them.
-[//]: # (end-tip)
+/// tip
+If the variable name is an Lua reserved word or contains characters
+that Lua considers special use the `[]` operator to access them.
-```
+```lua
channel["my_variable"] = "my_value"
value = channel["my_variable"]:get()
```
+///
## Dialplan Functions
-### Write a Dialplan Function
+### Write a Dialplan Function
-```
+```lua
channel.FAXOPT("modems"):set("v17,v27,v29")
```
-### Read a Dialplan Function
+### Read a Dialplan Function
-```
+```lua
value = channel.FAXOPT("modems"):get()
```
Note the use of the `:` operator with the `get()` and `set()` methods.
-!!! tip
- If the function name is an Lua reserved word or contains characters that Lua considers special use the `[]` operator to access them.
-[//]: # (end-tip)
+/// tip
+If the function name is an Lua reserved word or contains characters
+that Lua considers special use the `[]` operator to access them.
-```
+```lua
channel["FAXOPT(modems)"] = "v17,v27,v29"
value = channel["FAXOPT(modems)"]:get()
```
+///
-!!! warning
- The following constructs will NOT work.
-[//]: # (end-warning)
+/// warning
+The following constructs will **not** work.
-```
+```lua
channel.FAXOPT("modems") = "v17,v27,v29" -- syntax error
value = channel.FAXOPT("modems") -- does not work as expected (value:get() could be used to get the value after this line)
```
+///
-!!! info ""
- Dialplan function names are case sensitive.
-
-[//]: # (end-info)
+/// tip | Case Sensitivity
+Dialplan function names are case sensitive.
+///
diff --git a/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Lua-Dialplan-Examples.md b/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Lua-Dialplan-Examples.md
index aa683c272b..69a33d676f 100644
--- a/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Lua-Dialplan-Examples.md
+++ b/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Lua-Dialplan-Examples.md
@@ -10,21 +10,17 @@ Less Clutter
Instead of defining every extension inline, you can use this method to create a neater `extensions.lua` file. Since the extensions table and each context are both normal lua tables, you can treat them as such and build them piece by piece.
----
-
-extensions.lua
-
-```
+```lua title="extensions.lua"
-- this function serves as an extension function directly
function call_user(c, user)
- app.dial("SIP/" .. user, 60)
+ app.dial("SIP/" .. user, 60)
end
-- this function returns an extension function
function call_sales_queue(queue)
- return function(c, e)
- app.queue(queue)
- end
+ return function(c, e)
+ app.queue(queue)
+ end
end
e = {}
@@ -48,49 +44,45 @@ Less Clutter v2
In this example, we use a fancy function to register extensions.
----
-
-extensions.lua
-
-```
+```lua title="extensions.lua"
function register(context, extension, func)
- if not extensions then
- extensions = {}
- end
+ if not extensions then
+ extensions = {}
+ end
- if not extensions[context] then
- extensions[context] = {}
- end
+ if not extensions[context] then
+ extensions[context] = {}
+ end
- extensions[context][extension] = func
+ extensions[context][extension] = func
end
function include(context, included_context)
- if not extensions then
- extensions = {}
- end
+ if not extensions then
+ extensions = {}
+ end
- if not extensions[context] then
- extensions[context] = {}
- end
+ if not extensions[context] then
+ extensions[context] = {}
+ end
- if not extensions[context].include then
- extensions[context].include = {}
- end
+ if not extensions[context].include then
+ extensions[context].include = {}
+ end
- table.insert(extensions[context].include, included_context)
+ table.insert(extensions[context].include, included_context)
end
-- this function serves as an extension function directly
function call_user(c, user)
- app.dial("SIP/" .. user, 60)
+ app.dial("SIP/" .. user, 60)
end
-- this function returns an extension function
function call_sales_queue(queue)
- return function(c, e)
- app.queue(queue)
- end
+ return function(c, e)
+ app.queue(queue)
+ end
end
include("default", "users")
@@ -101,7 +93,11 @@ register("users", "101", call_user)
register("sales", "5000", call_sales_queue("sales1"))
register("sales", "6000", call_sales_queue("sales2"))
-register("sales", "7000", function()
- app.queue("sales3")
-end)
+register(
+ "sales",
+ "7000",
+ function()
+ app.queue("sales3")
+ end
+)
```
diff --git a/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Lua-Dialplan-Hints.md b/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Lua-Dialplan-Hints.md
index f76ad70c6f..2b59607e54 100644
--- a/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Lua-Dialplan-Hints.md
+++ b/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Lua-Dialplan-Hints.md
@@ -5,23 +5,17 @@ pageid: 16548017
In Asterisk 10 dialplan hints can be specified in `extensions.lua` in a manner similar to the way extensions are specified.
----
-
-extensions.lua
-
-```
+```lua title="extensions.lua"
hints = {
- default = {
- ["100"] = "SIP/100";
- };
-
- office = {
- ["500"] = "SIP/500";
- };
-
- home = {
- ["200"] = "SIP/200";
- ["201"] = "SIP/201";
- };
+ default = {
+ ["100"] = "SIP/100"
+ },
+ office = {
+ ["500"] = "SIP/500"
+ },
+ home = {
+ ["200"] = "SIP/200",
+ ["201"] = "SIP/201"
+ }
}
```
diff --git a/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Lua-Dialplan-Tips-and-Tricks.md b/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Lua-Dialplan-Tips-and-Tricks.md
index 0d3d8cef58..9a7abab926 100644
--- a/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Lua-Dialplan-Tips-and-Tricks.md
+++ b/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/Lua-Dialplan-Tips-and-Tricks.md
@@ -8,7 +8,7 @@ Long Running Operations (Autoservcie)
Before starting long running operations, an autoservice should be started using the `autoservice_start()` function. An autoservice will ensure that the user hears a continuous stream of audio while your lua code works in the background. This autoservice will automatically be stopped before executing applications and dialplan functions and will be restarted afterwards. The autoservice can be stopped using autoservice_stop() and the autoservice_status() function will return `true` if an autoservice is currently running.
-```
+```lua title="extensions.lua"
app.startmusiconhold()
autoservice_start()
@@ -18,28 +18,23 @@ autoservice_stop()
app.stopmusiconhold()
```
-!!! info ""
- In Asterisk 10 an autoservice is automatically started for you by default.
-
-[//]: # (end-info)
+/// note
+In Asterisk 10 an autoservice is automatically started for you by default.
+///
Defining Extensions Dynamically
-------------------------------
Since extensions are functions in pbx_lua, any function can be used, including closures. A function can be defined that returns extension functions and used to populate the extensions table.
----
-
-extensions.lua
-
-```
+```lua title="extensions.lua"
extensions = {}
extensions.default = {}
function sip_exten(e)
- return function()
- app.dial("SIP/" .. e)
- end
+ return function()
+ app.dial("SIP/" .. e)
+ end
end
extensions.default[100] = sip_exten(100)
@@ -51,11 +46,9 @@ Creating Custom Aliases for Built-in Constructs
If you don't like the `app` table being named 'app' or if you think typing 'channel' to access the `channel` table is too much work, you can rename them.
----
-
-I prefer less typing
+```lua title="extensions.lua"
+-- I prefer less typing
-```
function my_exten(context, extensions)
c = channel
a = app
@@ -70,18 +63,18 @@ Re-purposing The `print` Function
Lua has a built in "print" function that outputs things to stdout, but for Asterisk, we would rather have the output go in the verbose log. To do so, we could rewrite the `print` function as follows.
-```
+```lua title="extensions.lua"
function print(...)
- local msg = ""
- for i=1,select('#', ...) do
- if i == 1 then
- msg = msg .. tostring(select(i, ...))
- else
- msg = msg .. "\t" .. tostring(select(i, ...))
- end
- end
-
- app.verbose(msg)
+ local msg = ""
+ for i = 1, select("#", ...) do
+ if i == 1 then
+ msg = msg .. tostring(select(i, ...))
+ else
+ msg = msg .. "\t" .. tostring(select(i, ...))
+ end
+ end
+
+ app.verbose(msg)
end
```
@@ -102,7 +95,7 @@ The `luac` program can be used to compile your `extensions.lua` file into lua by
---
-Assume you name your extensions.lua file extensions.lua.lua
+Assume you name your extensions.lua file extensions.lua.lua
```
luac -o extensions.lua extensions.lua.lua
diff --git a/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/index.md b/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/index.md
index 89743e943c..1fb93455fa 100644
--- a/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/index.md
+++ b/docs/Configuration/Dialplan/Lua-Dialplan-Configuration/index.md
@@ -5,10 +5,14 @@ pageid: 16548006
Asterisk supports the ability to write dialplan instructions in the [Lua](http://lua.org) programming language. This method can be used as an alternative to or in combination with [extensions.conf](/Configuration/Dialplan) and/or [AEL](/Configuration/Dialplan/Asterisk-Extension-Language-AEL). PBX lua allows users to use the full power of lua to develop telephony applications using Asterisk. Lua dialplan configuration is done in the `extensions.lua` file.
-!!! info "Dependencies"
- To use pbx_lua, the lua development libraries must be installed before Asterisk is configured and built. You can get these libraries directly from , but it is easier to install them using your distribution's package management tool. The package is probably named liblua5.1-dev, liblua-dev, or lua-devel depending on your linux distribution.
-
-[//]: # (end-info)
+/// note | Build Dependencies
+To use pbx_lua, the lua development libraries must be installed before
+Asterisk is configured and built. You can get these libraries directly
+from , but it is easier to install them using your
+distribution's package management tool. The package is probably named
+liblua5.1-dev, liblua-dev, or lua-devel depending on your linux
+distribution.
+///
PBX Lua Basics
--------------
@@ -19,19 +23,17 @@ Each extension is a lua function that is executed when a channel lands on that e
---
-extensions.lua
-
-```
+```lua title="extensions.lua"
extensions = {
- default = {
- ["100"] = function(context, extension)
- app.playback("please-hold")
- app.dial("SIP/100", 60)
- end;
-
- ["101"] = function(c, e)
- app.dial("SIP/101", 60)
- end;
+ default = {
+ ["100"] = function(context, extension)
+ app.playback("please-hold")
+ app.dial("SIP/100", 60)
+ end,
+ ["101"] = function(c, e)
+ app.dial("SIP/101", 60)
+ end
+ }
}
```
@@ -43,7 +45,7 @@ The `extensions.lua` file can be reloaded by reloading the pbx_lua module.
If there are errors in the file, the errors will be reported and the existing extensions.lua file will remain in use. Channels that existed before the reload command was issued will also continue to use the existing extensions.lua file.
-!!! info ""
- Runtime errors are logged and the channel on which the error occurred is hung up.
-
-[//]: # (end-info)
+/// note | Runtime Errors
+Runtime errors are logged and the channel on which the error occurred
+is hung up.
+///
diff --git a/docs/Configuration/Dialplan/Special-Dialplan-Extensions.md b/docs/Configuration/Dialplan/Special-Dialplan-Extensions.md
index f6b1a54fe3..0ab2666031 100644
--- a/docs/Configuration/Dialplan/Special-Dialplan-Extensions.md
+++ b/docs/Configuration/Dialplan/Special-Dialplan-Extensions.md
@@ -8,10 +8,14 @@ Special Asterisk Dialplan Extensions
Here we'll list all of the special built-in dialplan extensions and their usage.
-!!! info ""
- Other than special extensions, there is a special context "default" that is used when either a) an extension context is deleted while an extension is in use, or b) a specific starting extension handler has not been defined (unless overridden by the low level channel interface).
-
-[//]: # (end-info)
+/// note
+Other than special extensions, there is a special context `default`
+that is used when either:
+
+1. an extension context is deleted while an extension is in use
+2. a specific starting extension handler has not been defined (unless
+ overridden by the low level channel interface).
+///
a: Assistant extension
----------------------
diff --git a/docs/Configuration/Dialplan/Subroutines/Hangup-Handlers.md b/docs/Configuration/Dialplan/Subroutines/Hangup-Handlers.md
index 951e27ba1d..1bcb8eb8f4 100644
--- a/docs/Configuration/Dialplan/Subroutines/Hangup-Handlers.md
+++ b/docs/Configuration/Dialplan/Subroutines/Hangup-Handlers.md
@@ -3,29 +3,34 @@ title: Hangup Handlers
pageid: 20189328
---
-!!! info "** Hangup Handlers were added in **Asterisk 11"
- ---
-
- Overview
- --------
-
- Hangup handlers are subroutines attached to a channel that will execute when that channel hangs up. Unlike the traditional [h extension](/Deployment/Basic-PBX-Functionality/Auto-attendant-and-IVR-Menus/Handling-Special-Extensions), hangup handlers follow the channel. Thus hangup handlers are always run when a channel is hung up, regardless of where in the dialplan a channel is executing.
-
- Multiple hangup handlers can be attached to a single channel. If multiple hangup handlers are attached to a channel, the hangup handlers will be executed in the order of most recently added first.
-[//]: # (end-info)
-
-**Information: NOTES** * Please note that when the hangup handlers execute in relation to the h extension is not defined. They could execute before or after the h extension.
-* Call transfers, call pickup, and call parking can result in channels on both sides of a bridge containing hangup handlers.
-* Hangup handlers can be attached to any call leg using [pre-dial handlers](/Configuration/Dialplan/Subroutines/Pre-Dial-Handlers).
-
----
-
-!!! warning WARNINGS
- * As hangup handlers are subroutines, they must be terminated with a call to [Return](/Latest_API/API_Documentation/Dialplan_Applications/Return).
- * Adding a hangup handler in the h extension or during a hangup handler execution is undefined behaviour.
- * As always, hangup handlers, like the h extension, need to execute quickly because they are in the hangup sequence path of the call leg. Specific channel driver protocols like ISDN and SIP may not be able to handle excessive delays completing the hangup sequence.
-
-[//]: # (end-warning)
+/// note | Hangup Handlers were added in **Asterisk 11**
+///
+
+Hangup handlers are subroutines attached to a channel that will execute when that channel hangs up. Unlike the traditional [h extension](/Deployment/Basic-PBX-Functionality/Auto-attendant-and-IVR-Menus/Handling-Special-Extensions), hangup handlers follow the channel. Thus hangup handlers are always run when a channel is hung up, regardless of where in the dialplan a channel is executing.
+
+Multiple hangup handlers can be attached to a single channel. If multiple hangup handlers are attached to a channel, the hangup handlers will be executed in the order of most recently added first.
+
+/// note | Notes
+* Please note that when the hangup handlers execute in relation to the
+ `h` extension is not defined. They could execute before or after the
+ `h` extension.
+* Call transfers, call pickup, and call parking can result in channels
+ on both sides of a bridge containing hangup handlers.
+* Hangup handlers can be attached to any call leg using [pre-dial
+ handlers](/Configuration/Dialplan/Subroutines/Pre-Dial-Handlers).
+///
+
+/// warning | Warnings
+* As hangup handlers are subroutines, they must be terminated with a
+ call to
+ [`Return`](/Latest_API/API_Documentation/Dialplan_Applications/Return).
+* Adding a hangup handler in the `h` extension or during a hangup
+ handler execution is undefined behaviour.
+* As always, hangup handlers, like the `h` extension, need to execute
+ quickly because they are in the hangup sequence path of the call
+ leg. Specific channel driver protocols like ISDN and SIP may not be
+ able to handle excessive delays completing the hangup sequence.
+///
Dialplan Applications and Functions
-----------------------------------
@@ -127,7 +132,7 @@ CLI Commands
---
-Single channel
+Single channel
```
core show hanguphandlers
@@ -135,18 +140,18 @@ core show hanguphandlers
---
-Output
+Output
```
-Channel Handler
-
-
-
+Channel Handler
+
+
+
```
---
-All channels
+All channels
```
core show hanguphandlers all
@@ -154,14 +159,14 @@ core show hanguphandlers all
---
-Output
+Output
```
-Channel Handler
-
-
-
-
-
-
+Channel Handler
+
+
+
+
+
+
```
diff --git a/docs/Configuration/Dialplan/Subroutines/Macros.md b/docs/Configuration/Dialplan/Subroutines/Macros.md
index 9bf892811f..e182bfd07c 100644
--- a/docs/Configuration/Dialplan/Subroutines/Macros.md
+++ b/docs/Configuration/Dialplan/Subroutines/Macros.md
@@ -6,10 +6,13 @@ pageid: 31097216
Overview
========
-!!! warning
- Macros are very similar in function to the [Gosub](/Configuration/Dialplan/Subroutines/Gosub) application **which deprecates Macro**. This information is here for historical purposes and you should really use Gosub wherever you would have previously used Macro.
-
-[//]: # (end-warning)
+/// warning
+Macros are very similar in function to the
+[Gosub](/Configuration/Dialplan/Subroutines/Gosub) application **which
+deprecates Macro**. This information is here for historical purposes
+and you should really use Gosub wherever you would have previously
+used Macro.
+///
Macro is a dialplan application that facilitates code-reuse within the dialplan. That is, a macro, once defined can be called from almost anywhere else within the dialplan using the Macro application or else via flags and arguments for other applications that allow calling macros.
diff --git a/docs/Configuration/Dialplan/Subroutines/Party-ID-Interception-Macros-and-Routines.md b/docs/Configuration/Dialplan/Subroutines/Party-ID-Interception-Macros-and-Routines.md
index f0585d10ff..fe48d3e512 100644
--- a/docs/Configuration/Dialplan/Subroutines/Party-ID-Interception-Macros-and-Routines.md
+++ b/docs/Configuration/Dialplan/Subroutines/Party-ID-Interception-Macros-and-Routines.md
@@ -5,10 +5,13 @@ pageid: 31097220
## Interception routines
-!!! note
- As Interception routines are implemented internally using the [Gosub](/Latest_API/API_Documentation/Dialplan_Applications/Gosub) application, all routines should end with an explicit call to the [Return](/Latest_API/API_Documentation/Dialplan_Applications/Return) application.
-
-[//]: # (end-note)
+/// note
+As Interception routines are implemented internally using the
+[Gosub](/Latest_API/API_Documentation/Dialplan_Applications/Gosub)
+application, all routines should end with an explicit call to the
+[Return](/Latest_API/API_Documentation/Dialplan_Applications/Return)
+application.
+///
The interception routines give the administrator an opportunity to alter [connected line and redirecting information](/Configuration/Functions/Manipulating-Party-ID-Information) before the channel driver is given the information. If the routine does not change a value then that is what is going to be passed to the channel driver.
@@ -16,24 +19,25 @@ The tag string available in CALLERID, CONNECTEDLINE, and REDIRECTING is useful f
The 'i' option of the CONNECTEDLINE dialplan function should always be used in the CONNECTED_LINE interception routines. The interception routine always passes the connected line information on to the channel driver when the routine returns. Similarly, the 'i' option of the REDIRECTING dialplan function should always be used in the REDIRECTING interception routines.
-!!! info ""
- Note that Interception routines do not attempt to draw a distinction between caller/callee. As it turned out, it was not a good thing to distinguish since transfers make a mockery of caller/callee.
-
-[//]: # (end-info)
+/// note | Note that Interception routines do not attempt to draw a distinction between caller/callee. As it turned out, it was not a good thing to distinguish since transfers make a mockery of caller/callee.
+///
-* ${REDIRECTING_SEND_SUB}
-* ${REDIRECTING_SEND_SUB_ARGS}
-* ${CONNECTED_LINE_SEND_SUB}
+* `${REDIRECTING_SEND_SUB}`
+* `${REDIRECTING_SEND_SUB_ARGS}`
+* `${CONNECTED_LINE_SEND_SUB}`
Subroutine to call before sending a connected line update to the party.
-* ${CONNECTED_LINE_SEND_SUB_ARGS}
+* `${CONNECTED_LINE_SEND_SUB_ARGS}`
Arguments to pass to ${CONNECTED_LINE_SEND_SUB}.
## Interception macros
-!!! warning WARNING
- Interception macros have been deprecated in Asterisk 11 due to deprecation of [Macro](/Latest_API/API_Documentation/Dialplan_Applications/Macro). Users of the interception functionality should plan to migrate to [Interception routines](#interception-routines).
-
-[//]: # (end-warning)
+/// warning
+Interception macros have been deprecated in Asterisk 11 due to
+deprecation of
+[Macro](/Latest_API/API_Documentation/Dialplan_Applications/Macro). Users
+of the interception functionality should plan to migrate to
+[Interception routines](#interception-routines).
+///
The interception macros give the administrator an opportunity to alter [connected line and redirecting information](/Configuration/Functions/Manipulating-Party-ID-Information) before the channel driver is given the information. If the macro does not change a value then that is what is going to be passed to the channel driver.
@@ -41,17 +45,17 @@ The tag string available in CALLERID, CONNECTEDLINE, and REDIRECTING is useful f
The 'i' option of the CONNECTEDLINE dialplan function should always be used in the CONNECTED_LINE interception macros. The interception macro always passes the connected line information on to the channel driver when the macro exits. Similarly, the 'i' option of the REDIRECTING dialplan function should always be used in the REDIRECTING interception macros.
-* ${REDIRECTING_CALLEE_SEND_MACRO}
-* ${REDIRECTING_CALLEE_SEND_MACRO_ARGS}
-* ${REDIRECTING_CALLER_SEND_MACRO}
+* `${REDIRECTING_CALLEE_SEND_MACRO}`
+* `${REDIRECTING_CALLEE_SEND_MACRO_ARGS}`
+* `${REDIRECTING_CALLER_SEND_MACRO}`
Macro to call before sending a redirecting update to the caller.
-* ${REDIRECTING_CALLER_SEND_MACRO_ARGS}
+* `${REDIRECTING_CALLER_SEND_MACRO_ARGS}`
Arguments to pass to ${REDIRECTING_CALLER_SEND_MACRO}.
-* ${CONNECTED_LINE_CALLEE_SEND_MACRO}
+* `${CONNECTED_LINE_CALLEE_SEND_MACRO}`
Macro to call before sending a connected line update to the callee.
-* ${CONNECTED_LINE_CALLEE_SEND_MACRO_ARGS}
+* `${CONNECTED_LINE_CALLEE_SEND_MACRO_ARGS}`
Arguments to pass to ${CONNECTED_LINE_CALLEE_SEND_MACRO}.
-* ${CONNECTED_LINE_CALLER_SEND_MACRO}
+* `${CONNECTED_LINE_CALLER_SEND_MACRO}`
Macro to call before sending a connected line update to the caller.
-* ${CONNECTED_LINE_CALLER_SEND_MACRO_ARGS}
+* `${CONNECTED_LINE_CALLER_SEND_MACRO_ARGS}`
Arguments to pass to ${CONNECTED_LINE_CALLER_SEND_MACRO}.
diff --git a/docs/Configuration/Dialplan/Subroutines/Pre-Dial-Handlers.md b/docs/Configuration/Dialplan/Subroutines/Pre-Dial-Handlers.md
index ee087d9dec..85418d9d7b 100644
--- a/docs/Configuration/Dialplan/Subroutines/Pre-Dial-Handlers.md
+++ b/docs/Configuration/Dialplan/Subroutines/Pre-Dial-Handlers.md
@@ -3,27 +3,30 @@ title: Pre-Dial Handlers
pageid: 20189344
---
-!!! info "** Pre-Dial Handlers were added in **Asterisk 11"
- ---
+/// note | Pre-Dial Handlers were added in **Asterisk 11**
+///
- Overview
- --------
+Pre-dial handlers allow you to execute a dialplan subroutine on a channel before a call is placed but after the application performing a dial action is invoked. This means that the handlers are executed after the creation of the caller/callee channels, but before any actions have been taken to actually dial the callee channels. You can execute a dialplan subroutine on the caller channel and on each callee channel dialed.
- Pre-dial handlers allow you to execute a dialplan subroutine on a channel before a call is placed but after the application performing a dial action is invoked. This means that the handlers are executed after the creation of the caller/callee channels, but before any actions have been taken to actually dial the callee channels. You can execute a dialplan subroutine on the caller channel and on each callee channel dialed.
+There are two ways in which a pre-dial handler can be invoked:
- There are two ways in which a pre-dial handler can be invoked:
+* The '**B**' option in an application executes a dialplan subroutine on the caller channel before any callee channels are created.
+* The '**b**' option in an application executes a dialplan subroutine on each callee channel after it is created but before the call is placed to the end-device.
- * The '**B**' option in an application executes a dialplan subroutine on the caller channel before any callee channels are created.
- * The '**b**' option in an application executes a dialplan subroutine on each callee channel after it is created but before the call is placed to the end-device.
+Pre-dial handlers are supported in the [Dial](/Latest_API/API_Documentation/Dialplan_Applications/Dial) application and the [FollowMe](/Latest_API/API_Documentation/Dialplan_Applications/FollowMe) application.
- Pre-dial handlers are supported in the [Dial](/Latest_API/API_Documentation/Dialplan_Applications/Dial) application and the [FollowMe](/Latest_API/API_Documentation/Dialplan_Applications/FollowMe) application.
-[//]: # (end-info)
+/// warning
+* As pre-dial handlers are implemented using
+ [Gosub](/Latest_API/API_Documentation/Dialplan_Applications/Gosub)
+ subroutines, they must be terminated with a call to
+ [Return](/Latest_API/API_Documentation/Dialplan_Applications/Return).
-**WARNING!: WARNINGS**
-* As pre-dial handlers are implemented using [Gosub](/Latest_API/API_Documentation/Dialplan_Applications/Gosub) subroutines, they must be terminated with a call to [Return](/Latest_API/API_Documentation/Dialplan_Applications/Return).
-* Taking actions in pre-dial handlers that would put the caller/callee channels into other applications will result in undefined behaviour. Pre-dial handlers should be short routines that do not impact the state that the dialing application assumes the channel will be in.
-
----
+* Taking actions in pre-dial handlers that would put the caller/callee
+ channels into other applications will result in undefined
+ behaviour. Pre-dial handlers should be short routines that do not
+ impact the state that the dialing application assumes the channel
+ will be in.
+///
Syntax
------
@@ -35,10 +38,8 @@ b([[context^]exten^]priority[(arg1[^...][^argN])])
B([[context^]exten^]priority[(arg1[^...][^argN])])
```
-!!! info ""
- If context or exten are not supplied then the current values from the caller channel are used.
-
-[//]: # (end-info)
+/// note | If context or exten are not supplied then the current values from the caller channel are used.
+///
Examples
--------
diff --git a/docs/Configuration/Dialplan/Switch-Statements.md b/docs/Configuration/Dialplan/Switch-Statements.md
index 3368dbf4b2..ebead35a19 100644
--- a/docs/Configuration/Dialplan/Switch-Statements.md
+++ b/docs/Configuration/Dialplan/Switch-Statements.md
@@ -8,10 +8,11 @@ Dialplan Switch Statements
The **switch** statement permits a server to share the dialplan with another server. To understand when a switch would be searched for dialplan extensions you should read the [Contexts, Extensions, and Priorities](/Configuration/Dialplan/Contexts-Extensions-and-Priorities) section as it covers Dialplan search order.
-!!! warning
- Use with care: Reciprocal switch statements are not allowed (e.g. both A -> B and B -> A), and the switched server need to be on-line or else dialing can be severely delayed.
-
-[//]: # (end-warning)
+/// warning
+Use with care: Reciprocal switch statements are not allowed (e.g. both
+`A → B` and `B → A`), and the switched server needs to be online or else
+dialing can be delayed.
+///
Basic switch statement
----------------------
diff --git a/docs/Configuration/Features/Built-in-Dynamic-Features.md b/docs/Configuration/Features/Built-in-Dynamic-Features.md
index 2961ecb05d..33c7092417 100644
--- a/docs/Configuration/Features/Built-in-Dynamic-Features.md
+++ b/docs/Configuration/Features/Built-in-Dynamic-Features.md
@@ -5,27 +5,20 @@ pageid: 21463260
The [FEATURE](/Latest_API/API_Documentation/Dialplan_Functions/FEATURE) and [FEATUREMAP](/Latest_API/API_Documentation/Dialplan_Functions/FEATUREMAP) dialplan functions allow you to set some features.conf options on a per channel basis.
-!!! info "** To see what options are currently supported, look at the FEATURE and FEATUREMAP function descriptions. **These functions were added in Asterisk 11."
- At this time the functions do not work with custom features. Those are set with a channel variable as described in the [Custom Dynamic Features](/Configuration/Features/Custom-Dynamic-Features) section.
+/// note
+To see what options are currently supported, look at the FEATURE and FEATUREMAP function descriptions. **These functions were added in Asterisk 11.**
-[//]: # (end-info)
+At this time the functions do not work with custom features. Those are set with a channel variable as described in the [Custom Dynamic Features](/Configuration/Features/Custom-Dynamic-Features) section.
+///
----
-
-Set the parking time of this channel to be 100 seconds if it is parked.
-
-```
+```plain title="Set the parking time of this channel to be 100 seconds if it is parked"
exten => s,1,Set(FEATURE(parkingtime)=100)
-same => n,Dial(SIP/100)
-same => n,Hangup()
+ same => n,Dial(SIP/100)
+ same => n,Hangup()
```
----
-
-Set the DTMF sequence for attended transfer on this channel to \*9.
-
-```
+```plain title="Set the DTMF sequence for attended transfer on this channel to *9"
exten => s,1,Set(FEATUREMAP(atxfer)=*9)
-same => n,Dial(SIP/100,,T)
-same => n,Hangup()
+ same => n,Dial(SIP/100,,T)
+ same => n,Hangup()
```
diff --git a/docs/Configuration/Features/Call-Parking.md b/docs/Configuration/Features/Call-Parking.md
index aa5b86d74c..f65fc34414 100644
--- a/docs/Configuration/Features/Call-Parking.md
+++ b/docs/Configuration/Features/Call-Parking.md
@@ -17,10 +17,13 @@ In a nutshell, Asterisk 12 relocated its support for call parking from the Aster
Before we move any further, there is one more rather important detail to address regarding configuration for `res_parking`:
-!!! note
- `res_parking` uses the configuration framework. If an invalid configuration is supplied, `res_parking` will fail to load or fail to reload. Previously, invalid configurations would generally be accepted, with certain errors resulting in individually disabled parking lots.
-
-[//]: # (end-note)
+/// note
+`res_parking` uses the configuration framework. If an invalid
+configuration is supplied, `res_parking` will fail to load or fail to
+reload. Previously, invalid configurations would generally be
+accepted, with certain errors resulting in individually disabled
+parking lots.
+///
Now that we've covered all of that, let's look at some examples of how all this works.
@@ -84,7 +87,9 @@ parkcall => #72 ; Parks the call (one-step parking). For this example, a call wi
; K - Allow the calling party to enable parking of the call.
; k - Allow the called party to enable parking of the call.
```
+
---
+
extensions.conf
```
diff --git a/docs/Configuration/Features/Call-Pickup.md b/docs/Configuration/Features/Call-Pickup.md
index 8e385825a5..039d10a8cb 100644
--- a/docs/Configuration/Features/Call-Pickup.md
+++ b/docs/Configuration/Features/Call-Pickup.md
@@ -3,10 +3,9 @@ title: Call Pickup
pageid: 21463197
---
-!!! info ""
- Call pickup support added in Asterisk 11
-
-[//]: # (end-info)
+/// note | Call Pickup Support
+Call pickup support was added in Asterisk 11
+///
Overview
========
@@ -52,13 +51,14 @@ The CHANNEL(namedcallgroup) option specifies which named pickup groups that this
same => n,Set(CHANNEL(namedcallgroup)=engineering,sales)
```
-!!! note
- For this option to be effective, you must set it on the outgoing channel. There are a couple of ways:
-
- * You can use the setvar option available with several channel driver configuration files to set the pickup groups.
- * You can use a pre-dial handler.
+/// note
+For this option to be effective, you must set it on the outgoing
+channel. There are a couple of ways:
-[//]: # (end-note)
+* You can use the `setvar` (or `set_var`) option available with
+ several channel driver configuration files to set the pickup groups.
+* You can use a pre-dial handler.
+///
### pickupgroup/namedpickupgroup
@@ -74,12 +74,13 @@ The CHANNEL(namedpickupgroup) option specifies which named pickup groups this ch
same => n,Set(CHANNEL(namedpickupgroup)=engineering,sales)
```
-!!! note
- For this option to be effective, you must set it on the channel before executing the Pickup application or calling the pickupexten.
-
- * You can use the setvar option available with several channel driver configuration files to set the pickup groups.
+/// note
+For this option to be effective, you must set it on the channel before
+executing the Pickup application or calling the pickupexten.
-[//]: # (end-note)
+You can use the `setvar` (or `set_var`) option available with several
+channel driver configuration files to set the pickup groups.
+///
Configuration Options
---------------------
@@ -88,10 +89,9 @@ The pickupexten request method selects calls using the numeric and named call gr
Calls picked up using pickupexten can hear an optional sound file for success and failure.
-!!! note
- The current channel drivers that support calling the pickupexten to pickup a call are: chan_dahdi/analog, chan_mgcp, chan_misdn, chan_sip, chan_unistim and chan_pjsip.
-
-[//]: # (end-note)
+/// note
+The current channel drivers that support calling the pickupexten to pickup a call are: chan_dahdi/analog, chan_mgcp, chan_misdn, chan_sip, chan_unistim and chan_pjsip.
+///
---
@@ -187,9 +187,10 @@ named_call_group=engineering,sales,netgroup,protgroup
named_pickup_group=sales
```
-!!! note
- You can use named pickup groups in parallel with numeric pickup groups. For example, the named pickup group '4' is not the same as the numeric pickup group '4'.
-
- Named pickup groups are new with Asterisk 11.
+/// note
+You can use named pickup groups in parallel with numeric pickup
+groups. For example, the named pickup group '4' is not the same as the
+numeric pickup group '4'.
-[//]: # (end-note)
+Named pickup groups are new with Asterisk 11.
+///
diff --git a/docs/Configuration/Features/Custom-Dynamic-Features.md b/docs/Configuration/Features/Custom-Dynamic-Features.md
index af646b08c2..61939b1a0e 100644
--- a/docs/Configuration/Features/Custom-Dynamic-Features.md
+++ b/docs/Configuration/Features/Custom-Dynamic-Features.md
@@ -51,7 +51,7 @@ Here we have defined a few custom features to give you an idea of how the config
features.conf
```
- [applicationmap]
+[applicationmap]
playmonkeys => #9,peer,Playback,tt-monkeys
retrieveinfo => #8,peer,Set(ARRAY(CDR(mark),CDR(name))=${ODBC_FOO(${CALLERID(num)})})
pauseMonitor => #1,self/callee,Pausemonitor
@@ -79,10 +79,12 @@ Example Usage:
extensions.conf
```
- Set(__DYNAMIC_FEATURES=playmonkeys#pauseMonitor#unpauseMonitor)
+Set(__DYNAMIC_FEATURES=playmonkeys#pauseMonitor#unpauseMonitor)
```
-!!! tip Tip: Variable Inheritance
- The [two leading underscores](/Configuration/Dialplan/Variables/Channel-Variables/Variable-Inheritance) allow these feature settings to be set on the outbound channels, as well. Otherwise, only the original channel will have access to these features.
-
-[//]: # (end-tip)
+/// tip | Variable Inheritance
+The [two leading underscores](/Configuration/Dialplan/Variables/Channel-Variables/Variable-Inheritance)
+allow these feature settings to be set on the outbound channels, as
+well. Otherwise, only the original channel will have access to these
+features.
+///
diff --git a/docs/Configuration/Features/Feature-Code-Call-Transfers.md b/docs/Configuration/Features/Feature-Code-Call-Transfers.md
index 6cfbd4135f..a2ca2e02f5 100644
--- a/docs/Configuration/Features/Feature-Code-Call-Transfers.md
+++ b/docs/Configuration/Features/Feature-Code-Call-Transfers.md
@@ -64,10 +64,12 @@ exten = 102,1,Dial(PJSIP/BOB,30,T)
Asterisk should be restarted or relevant modules should be reloaded for changes to take effect.
-!!! tip
- The same arguments ("t" and "T") work for the [Queue](/Latest_API/API_Documentation/Dialplan_Applications/Queue) and [Dial](/Latest_API/API_Documentation/Dialplan_Applications/Dial) applications!
-
-[//]: # (end-tip)
+/// tip
+The same arguments (`t` and `T`) work for the
+[Queue](/Latest_API/API_Documentation/Dialplan_Applications/Queue) and
+[Dial](/Latest_API/API_Documentation/Dialplan_Applications/Dial)
+applications.
+///
Feature codes for attended transfer control
-------------------------------------------
diff --git a/docs/Configuration/Features/One-Touch-Features.md b/docs/Configuration/Features/One-Touch-Features.md
index 183d93619a..9fc60134cf 100644
--- a/docs/Configuration/Features/One-Touch-Features.md
+++ b/docs/Configuration/Features/One-Touch-Features.md
@@ -32,7 +32,7 @@ The options are configured in features.conf in the featuremap section. They use
features.conf
```
- [featuremap]
+[featuremap]
automon = *1
automixmon = *3
disconnect = *0
@@ -46,24 +46,24 @@ Dialplan application options
For each feature there are a pair of options that can be set in the [Dial](/Latest_API/API_Documentation/Dialplan_Applications/Dial) or [Queue](/Latest_API/API_Documentation/Dialplan_Applications/Queue) applications. The two options enable the feature on either the calling party channel or the called party channel.
-!!! note
- If neither option of a pair are set then you will not be able to use the related feature on the channel.
-
-[//]: # (end-note)
+/// note
+If neither option of the pair are set then you will not be able to use
+the related feature on the channel.
+///
**automon**
-* W - Allow the calling party to enable recording of the call.
-* w - Allow the called party to enable recording of the call.
+* `W` - Allow the calling party to enable recording of the call.
+* `w` - Allow the called party to enable recording of the call.
**automixmon**
-* X - Allow the calling party to enable recording of the call.
-* x - Allow the called party to enable recording of the call.
+* `X` - Allow the calling party to enable recording of the call.
+* `x` - Allow the called party to enable recording of the call.
**disconnect**
-* H - Allow the calling party to hang up the channel.
+* `H` - Allow the calling party to hang up the channel.
* `h` - Allow the called party to hang up the channel.
**parkcall**
diff --git a/docs/Configuration/Features/index.md b/docs/Configuration/Features/index.md
index 8939c968ca..c0e4271e5c 100644
--- a/docs/Configuration/Features/index.md
+++ b/docs/Configuration/Features/index.md
@@ -7,10 +7,11 @@ The [Asterisk core](/Configuration/Core-Configuration) provides a set of feature
Features are configured in features.conf and most require additional configuration via arguments or options to applications that invoke channel creation.
-!!! tip
- Versions of Asterisk older than 12 included parking configuration inside features.conf. In Asterisk 12 parking configuration was moved out into res_parking.conf.
-
-[//]: # (end-tip)
+/// tip
+Versions of Asterisk older than 12 included parking configuration
+inside `features.conf`. In Asterisk 12 parking configuration was moved
+out into `res_parking.conf`.
+///
The core features discussed in this section are:
diff --git a/docs/Configuration/Functions/Asterisk-Dialplan-Function-Examples.md b/docs/Configuration/Functions/Asterisk-Dialplan-Function-Examples.md
index ecd3c72093..f7f62744e7 100644
--- a/docs/Configuration/Functions/Asterisk-Dialplan-Function-Examples.md
+++ b/docs/Configuration/Functions/Asterisk-Dialplan-Function-Examples.md
@@ -3,11 +3,6 @@ title: Asterisk Dialplan Function Examples
pageid: 36215464
---
-!!! warning
- UNDER CONSTRUCTION
-
-[//]: # (end-warning)
-
Function Examples
=================
diff --git a/docs/Configuration/Functions/Manipulating-Party-ID-Information.md b/docs/Configuration/Functions/Manipulating-Party-ID-Information.md
index 3ad2fb86a1..b6bfe58b82 100644
--- a/docs/Configuration/Functions/Manipulating-Party-ID-Information.md
+++ b/docs/Configuration/Functions/Manipulating-Party-ID-Information.md
@@ -34,10 +34,13 @@ The CALLERID information is passed during the initial call setup. However, depen
The CONNECTEDLINE function does the opposite of the CALLERID function. CONNECTEDLINE can be used to set up connected line information to be sent when the call is answered. You can use it to send new connected line information to the remote party on the channel when a call is transferred. The CONNECTEDLINE information is passed when the call is answered and when the call is transferred.
-!!! note
- It is up to the channel technology to determine when to act upon connected line updates before the call is answered. ISDN will just store the updated information until the call is answered. SIP could immediately update the caller with a provisional response or wait for some other event to notify the caller.
-
-[//]: # (end-note)
+/// note
+It is up to the channel technology to determine when to act upon
+connected line updates before the call is answered. ISDN will just
+store the updated information until the call is answered. SIP could
+immediately update the caller with a provisional response or wait for
+some other event to notify the caller.
+///
Since the connected line information can be sent while a call is connected, you may need to prevent the channel driver from acting on a **partial** update. The 'i' option is used to inhibit the channel driver from sending the changed information immediately.
@@ -161,10 +164,10 @@ Party ID propagation
For normal operations where Party A calls Party B this is what the relationship between CALLERID/CONNECTEDLINE information looks like:
```
- Channel A Channel B
- Incoming channel --- bridge --- Outgoing channel
+ Channel A Channel B
+ Incoming channel --- bridge --- Outgoing channel
Party A ___ CALLERID() -------------------> CONNECTEDLINE() ___ Party B
- CONNECTEDLINE() <-------------- CALLERID()
+ CONNECTEDLINE() <-------------- CALLERID()
```
The CALLERID() information is the party identification of the remote party. For Channel A that is Party A. For Channel B that is Party B.
@@ -174,7 +177,7 @@ The CONNECTEDLINE() information is the party identification of the party connect
Local channels behave in a similar way because there is an implicit two party bridge between the channels. For normal call setups, Local;1 is an outgoing channel and Local;2 is an incoming channel.
```
-Local;1 Local;2
+Local;1 Local;2
Outgoing channel --- Incoming channel
CONNECTEDLINE() ---> CALLERID()
CALLERID() <-------- CONNECTEDLINE()
@@ -183,10 +186,10 @@ CALLERID() <-------- CONNECTEDLINE()
A normal call where Party A calls Party B with a local channel in the chain.
```
- Channel A Local;1 Local;2 Channel B
- Incoming channel --- bridge --- Outgoing channel --- Incoming channel --- bridge --- Outgoing channel
+ Channel A Local;1 Local;2 Channel B
+ Incoming channel --- bridge --- Outgoing channel --- Incoming channel --- bridge --- Outgoing channel
Party A ___ CALLERID() -------------------> CONNECTEDLINE() ---> CALLERID() -------------------> CONNECTEDLINE() ___ Party B
- CONNECTEDLINE() <-------------- CALLERID() <-------- CONNECTEDLINE() <-------------- CALLERID()
+ CONNECTEDLINE() <-------------- CALLERID() <-------- CONNECTEDLINE() <-------------- CALLERID()
```
Originated calls make the incoming and outgoing labels a bit confusing because both channels start off as outgoing. Once the originated channel answers it becomes an "incoming" channel to run dialplan. A better way is to just distinguish which channel is running dialplan. For consistency, I'll continue using the incoming and outgoing labels.
@@ -194,19 +197,19 @@ Originated calls make the incoming and outgoing labels a bit confusing because b
An example of originating a normal channel (Channel A) to a dialplan exten.
```
- Channel A Channel B
- Incoming channel --- bridge --- Outgoing channel
+ Channel A Channel B
+ Incoming channel --- bridge --- Outgoing channel
Party A ___ CALLERID() -------------------> CONNECTEDLINE() ___ Party B
- CONNECTEDLINE() <-------------- CALLERID()
+ CONNECTEDLINE() <-------------- CALLERID()
```
An example of originating a local channel (which will always be a Local;1) to a dialplan exten.
```
- Channel A Local;2 Local;1 Channel B
- Outgoing channel --- bridge --- Incoming channel --- Incoming channel --- bridge --- Outgoing channel
+ Channel A Local;2 Local;1 Channel B
+ Outgoing channel --- bridge --- Incoming channel --- Incoming channel --- bridge --- Outgoing channel
Party A ___ CALLERID() -------------------> CONNECTEDLINE() ---> CALLERID() -------------------> CONNECTEDLINE() ___ Party B
- CONNECTEDLINE() <-------------- CALLERID() <-------- CONNECTEDLINE() <-------------- CALLERID()
+ CONNECTEDLINE() <-------------- CALLERID() <-------- CONNECTEDLINE() <-------------- CALLERID()
```
Ideas for usage
diff --git a/docs/Configuration/Functions/index.md b/docs/Configuration/Functions/index.md
index dfcbaaa07e..849f9a40d0 100644
--- a/docs/Configuration/Functions/index.md
+++ b/docs/Configuration/Functions/index.md
@@ -3,11 +3,6 @@ title: Overview
pageid: 27200281
---
-!!! warning
- Under Construction
-
-[//]: # (end-warning)
-
Asterisk Dialplan Functions
===========================
@@ -53,7 +48,7 @@ same => n,Set(CHANNEL(tonezone)=de)
A function's value can be referenced almost anywhere in dialplan where you can use an expression or reference a variable. The value can be referenced by encapsulating the call with curly braces and a leading dollar sign.
-```bash title=" " linenums="1"
+```
${FUNCTION(argument)}
```
diff --git a/docs/Configuration/Interfaces/Asterisk-Call-Files.md b/docs/Configuration/Interfaces/Asterisk-Call-Files.md
index 6dcfe71332..74fb1e97f4 100644
--- a/docs/Configuration/Interfaces/Asterisk-Call-Files.md
+++ b/docs/Configuration/Interfaces/Asterisk-Call-Files.md
@@ -16,13 +16,21 @@ With call files you submit this information simply by creating a file with the r
The `pbx_spool.so` module watches the spooling directly, either using an event notification system supplied by the operating system such as `[inotify](http://en.wikipedia.org/wiki/Inotify)` or `[kqueue](http://en.wikipedia.org/wiki/Kqueue)`, or by polling the directory each second when one of those notification systems is unavailable. When a new file appears, Asterisk initiates a new call based on the file's contents.
-!!! warning "Creating Files in the Spool Directory"
- Do **not** write or create the call file directly in the `outgoing` directory, but always create the file in another directory of the same filesystem and then move the file to the `outgoing` directory, or Asterisk may read a partial file.
-[//]: # (end-warning)
-
-!!! note "NFS Considerations"
- By default, Asterisk will prefer to use `inotify` or `kqueue` where available. When the spooling directory is on a remote server and is mounted via NFS, the `inotify` method will fail to work. You can force Asterisk to use the older polling method by passing the `--without-inotify` flag to `configure` during compilation (e.g. `./configure --without-inotify`).
-[//]: # (end-note)
+/// warning | Creating Files in the Spool Directory
+Do **not** write or create the call file directly in the `outgoing`
+directory, but always create the file in another directory of the same
+filesystem and then move the file to the `outgoing` directory, or
+Asterisk may read a partial file.
+///
+
+/// note | NFS Considerations
+By default, Asterisk will prefer to use `inotify` or `kqueue` where
+available. When the spooling directory is on a remote server and is
+mounted via NFS, the `inotify` method will fail to work. You can force
+Asterisk to use the older polling method by passing the
+`--without-inotify` flag to `configure` during compilation
+(e.g. `./configure --without-inotify`).
+///
## Call File Syntax
diff --git a/docs/Configuration/Interfaces/Asterisk-Gateway-Interface-AGI.md b/docs/Configuration/Interfaces/Asterisk-Gateway-Interface-AGI.md
index 6c334c1412..0329f7d78d 100644
--- a/docs/Configuration/Interfaces/Asterisk-Gateway-Interface-AGI.md
+++ b/docs/Configuration/Interfaces/Asterisk-Gateway-Interface-AGI.md
@@ -1,35 +1,36 @@
---
-title: Asterisk Gateway Interface (AGI)
pageid: 32375589
---
-!!! warning
- This page is under construction!
+# Asterisk Gateway Interface (AGI)
-[//]: # (end-warning)
+/// warning | Under Construction
+If you would like to help write this section, please consider
+[contributing to the documentation](/Contributing-to-the-Documentation/).
+///
-Overview
-========
+AGI is analogous to CGI in Apache. AGI provides an interface between
+the Asterisk dialplan and an external program that wants to manipulate
+a channel in the dialplan. In general, the interface is synchronous -
+actions taken on a channel from an AGI block and do not return until
+the action is completed.
- AGI is analogous to CGI in Apache. AGI provides an interface between the Asterisk dialplan and an external program that wants to manipulate a channel in the dialplan. In general, the interface is synchronous - actions taken on a channel from an AGI block and do not return until the action is completed.
+## AGI Libraries and Frameworks
-AGI Libraries and Frameworks
-============================
-
-| Name | Language | Website | Protocols |
-| --- | --- | --- | --- |
-| Adhearsion | Ruby | | AMI/FastAGI |
-| Asterisk-Java | Java | | AMI/FastAGI |
-| PAGI | PHP | | AGI |
-| PHPAGI | PHP | | AGI |
-| Panoramisk | Python+AsyncIO | | AMI/FastAGI |
-| Pyst2 | Python | | AMI/AGI |
-| StarPy | Python+Twisted | | AMI/FastAGI |
-| Nanoagi | C++ | | AGI |
-| AsterNET | .NET (C#/VB.net) | | AMI/FastAGI |
-| Ding-dong | node.js | | AGI |
-| astive | Java | | FastAGI |
-| FastAGI-Go | Go | | FastAGI |
-| astgo | Go | | AMI/AGI/FastAGI |
-| Asterisk::AGI | Perl | | AGI |
-| lua-agi | Lua | | AGI |
+| Name | Language | Website | Protocols |
+|---------------|------------------|--------------------------------------------|-----------------|
+| Adhearsion | Ruby | | AMI/FastAGI |
+| Asterisk-Java | Java | | AMI/FastAGI |
+| PAGI | PHP | | AGI |
+| PHPAGI | PHP | | AGI |
+| Panoramisk | Python+AsyncIO | | AMI/FastAGI |
+| Pyst2 | Python | | AMI/AGI |
+| StarPy | Python+Twisted | | AMI/FastAGI |
+| Nanoagi | C++ | | AGI |
+| AsterNET | .NET (C#/VB.net) | | AMI/FastAGI |
+| Ding-dong | node.js | | AGI |
+| astive | Java | | FastAGI |
+| FastAGI-Go | Go | | FastAGI |
+| astgo | Go | | AMI/AGI/FastAGI |
+| Asterisk::AGI | Perl | | AGI |
+| lua-agi | Lua | | AGI |
diff --git a/docs/Configuration/Interfaces/Asterisk-Manager-Interface-AMI/AMI-Libraries-and-Frameworks.md b/docs/Configuration/Interfaces/Asterisk-Manager-Interface-AMI/AMI-Libraries-and-Frameworks.md
index 85e3cc18d4..6285b65d4c 100644
--- a/docs/Configuration/Interfaces/Asterisk-Manager-Interface-AMI/AMI-Libraries-and-Frameworks.md
+++ b/docs/Configuration/Interfaces/Asterisk-Manager-Interface-AMI/AMI-Libraries-and-Frameworks.md
@@ -1,27 +1,28 @@
---
-title: AMI Libraries and Frameworks
pageid: 32375585
---
-!!! warning
- This page is under construction!
+# AMI Libraries and Frameworks
-[//]: # (end-warning)
+/// warning | Under Construction
+If you would like to help write this section, please consider
+[contributing to the documentation](/Contributing-to-the-Documentation/).
+///
-| Name | Language | Website | Protocols |
-| --- | --- | --- | --- |
-| Asterisk-Java | Java | | AMI/FastAGI |
-| StarPy | Python+Twisted | | AMI/FastAGI |
-| Panoramisk | Python+AsyncIO | | AMI/FastAGI |
-| PAMI | PHP | | AMI |
-| Pyst2 | Python | | AMI/AGI |
-| Adhearsion | Ruby | | AMI/FastAGI |
-| node-asterisk | Node.js | | AMI |
-| AMI-IO | Node.js | | AMI |
-| NodeJS-AsteriskManager | Node.js | | AMI |
-| Nami | Node.js | | AMI |
-| AsterNET | .NET | | AMI/FastAGI |
-| AmiClient | .NET | | AMI |
-| CAMI | C | | AMI |
-| Asterisk to Go | Go | | AMI |
-| Bami | Bash | | AMI |
+| Name | Language | Website | Protocols |
+|------------------------|----------------|--------------------------------------------------------|-------------|
+| Asterisk-Java | Java | | AMI/FastAGI |
+| StarPy | Python+Twisted | | AMI/FastAGI |
+| Panoramisk | Python+AsyncIO | | AMI/FastAGI |
+| PAMI | PHP | | AMI |
+| Pyst2 | Python | | AMI/AGI |
+| Adhearsion | Ruby | | AMI/FastAGI |
+| node-asterisk | Node.js | | AMI |
+| AMI-IO | Node.js | | AMI |
+| NodeJS-AsteriskManager | Node.js | | AMI |
+| Nami | Node.js | | AMI |
+| AsterNET | .NET | | AMI/FastAGI |
+| AmiClient | .NET | | AMI |
+| CAMI | C | | AMI |
+| Asterisk to Go | Go | | AMI |
+| Bami | Bash | | AMI |
diff --git a/docs/Configuration/Interfaces/Asterisk-Manager-Interface-AMI/AMI-v2-Specification/index.md b/docs/Configuration/Interfaces/Asterisk-Manager-Interface-AMI/AMI-v2-Specification/index.md
index cd524dc609..b77dba8fac 100644
--- a/docs/Configuration/Interfaces/Asterisk-Manager-Interface-AMI/AMI-v2-Specification/index.md
+++ b/docs/Configuration/Interfaces/Asterisk-Manager-Interface-AMI/AMI-v2-Specification/index.md
@@ -53,8 +53,12 @@ Clients wishing to use AMI act as clients and connect to Asterisk's AMI server o
More information on the various ways a client can be configured can be seen in AMI Configuration.
-/// note|Nomenclature
-Sometimes, the term **command** may be used instead of the term **action**. With respect to AMI actions, command is synonymous with action, and the two can be treated the same. For the sake of consistency, we've attempted to use the term **action** where possible.
+/// note | Nomenclature
+Sometimes, the term **command** may be used instead of the term
+**action**. With respect to AMI actions, command is synonymous with
+action, and the two can be treated the same. For the sake of
+consistency, we've attempted to use the term **action** where
+possible.
///
Historically, AMI has existed in Asterisk as its own core component `manager`. AMI events were raised throughout Asterisk encoded in an AMI specific format, and AMI actions were processed and passed to the functions that implemented the logic. In Asterisk 12, AMI has been refactored to sit on top of Stasis, a generic, protocol independent message bus internal to Asterisk. From the perspective of clients wishing to communicate with Asterisk over AMI very little has changed; internally, the Stasis representation affords a much higher degree of flexibility with how messages move through Asterisk. It also provides a degree of uniformity for information that is propagated to interested parties.
@@ -430,8 +434,9 @@ For each channel variable that is changed, a **VarSet** event is sent to the cli
DTMF is indicated via a **DTMFBegin**/**DTMFEnd** events. A **DTMFEnd** event MUST convey the duration of the DTMF tone in milliseconds.
-/// warning|Behavior Change
-The combination of **DTMFBegin**/**DTMFEnd** events replaces the removed **DTMF** event.
+/// warning | Behavior Change
+The combination of **DTMFBegin**/**DTMFEnd** events replaces the
+removed **DTMF** event.
///
#### Dialplan Execution
diff --git a/docs/Configuration/Interfaces/Asterisk-Manager-Interface-AMI/Asynchronous-Javascript-Asterisk-Manager-AJAM/Allow-Manager-Access-via-HTTP.md b/docs/Configuration/Interfaces/Asterisk-Manager-Interface-AMI/Asynchronous-Javascript-Asterisk-Manager-AJAM/Allow-Manager-Access-via-HTTP.md
index 16efa31a0c..983286affc 100644
--- a/docs/Configuration/Interfaces/Asterisk-Manager-Interface-AMI/Asynchronous-Javascript-Asterisk-Manager-AJAM/Allow-Manager-Access-via-HTTP.md
+++ b/docs/Configuration/Interfaces/Asterisk-Manager-Interface-AMI/Asynchronous-Javascript-Asterisk-Manager-AJAM/Allow-Manager-Access-via-HTTP.md
@@ -1,31 +1,30 @@
---
-title: Allow Manager Access via HTTP
pageid: 4817260
---
-!!! warning
- AJAM is not supported and may have issues and may be removed in the future. Do not use it if at all possible. Use standard TCP based AMI instead.
+# Allow Manager Access via HTTP
-[//]: # (end-warning)
+/// warning | Unsupported
+AJAM is not supported and may have issues and may be removed in the
+future. Do not use it if at all possible. Use standard TCP based AMI
+instead.
+///
-Configuring manager.conf
-------------------------
+## Configuring manager.conf
1. Make sure you have both "enabled = yes" and "webenabled = yes" set in /etc/asterisk/manager.conf
2. You may also use "httptimeout" to set a default timeout for HTTP connections.
3. Make sure you have a manager username/secret
-Usage of AMI over HTTP
-----------------------
+## Usage of AMI over HTTP
Once those configurations are complete you can reload or restart Asterisk and you should be able to point your web browser to specific URI's which will allow you to access various web functions. A complete list can be found by typing "http show status" at the Asterisk CLI.
### Examples:
-!!! info ""
- Be sure the syntax for the URLs below is followed precisely
-
-[//]: # (end-info)
+/// note
+Be sure the syntax for the URLs below is followed precisely
+///
* http://localhost:8088/manager?action=login&username=foo&secret=bar
@@ -45,6 +44,5 @@ If you have enabled static content support and have done a make install, Asteris
A sample library (astman.js) is included to help ease the creation of manager HTML interfaces.
-!!! note ** For the demo, there is no need for **any external web server.
-
-[//]: # (end-note)
+/// tip | For the demo, there is no need for **any external web server.**
+///
diff --git a/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Asterisk-Configuration-for-ARI.md b/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Asterisk-Configuration-for-ARI.md
index 9984c9219a..07bff602ec 100644
--- a/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Asterisk-Configuration-for-ARI.md
+++ b/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Asterisk-Configuration-for-ARI.md
@@ -8,10 +8,11 @@ Overview
ARI has a number of parts to it - the HTTP server in Asterisk servicing requests, the dialplan application handing control of channels over to a connected client, and the websocket sharing state in Asterisk with the external application. This page provides the configuration files in Asterisk that can be altered to suit deployment considerations.
-!!! tip
- This page does not include all of the configuration options available to a system administrator. It does cover some of the basics that you might be interested in when setting up your Asterisk system for ARI.
-
-[//]: # (end-tip)
+/// tip
+This page does not include all of the configuration options available
+to a system administrator. It does cover some of the basics that you
+might be interested in when setting up your Asterisk system for ARI.
+///
Asterisk Configuration Options for ARI
======================================
@@ -22,60 +23,55 @@ HTTP Server
The HTTP server in Asterisk is configured via `http.conf`. Note that this does not describe all of the options available via `http.conf` - rather, it lists the most useful ones for ARI.
-| Section | Parameter | Type | Default | Description |
-| --- | --- | --- | --- | --- |
-| `general` | | | | |
-| | `enabled` | Boolean | False | Enable the HTTP server. **The HTTP server in Asterisk is disabled by default**. Unless it is enabled, ARI will not function! |
-| | `bindaddr` | IP Address | | The IP address to bind the HTTP server to. This can either be an explicit local address, or `0.0.0.0` to bind to all available interfaces. |
-| | `bindport` | Port | 8088 | The port to bind the HTTP server to. Client making HTTP requests should specify 8088 as the port to send the request to. |
-| | `prefix` | String | | A prefix to require for all requests. If specified, requests must begin with the specified prefix. |
-| | `tlsenable` | Boolean | False | Enable HTTPS |
-| | `tlsbindaddr` | IP Address/Port | | The IP address and port to bind the HTTPS server to. This should be an IP address and port, e.g., `0.0.0.0:8089` |
-| | `tlscertfile` | Path | | The full path to the certificate file to use. Asterisk only supports the `.pem` format. |
-| | `tlsprivatekey` | Path | | The full path to the private key file. Asterisk only supports the `.pem` format. If this is not specified, the certificate specified in `tlscertfile` will be searched for the private key. |
+| Section | Parameter | Type | Default | Description |
+|-----------|-----------------|-----------------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `general` | | | | |
+| | `enabled` | Boolean | False | Enable the HTTP server. **The HTTP server in Asterisk is disabled by default**. Unless it is enabled, ARI will not function! |
+| | `bindaddr` | IP Address | | The IP address to bind the HTTP server to. This can either be an explicit local address, or `0.0.0.0` to bind to all available interfaces. |
+| | `bindport` | Port | 8088 | The port to bind the HTTP server to. Client making HTTP requests should specify 8088 as the port to send the request to. |
+| | `prefix` | String | | A prefix to require for all requests. If specified, requests must begin with the specified prefix. |
+| | `tlsenable` | Boolean | False | Enable HTTPS |
+| | `tlsbindaddr` | IP Address/Port | | The IP address and port to bind the HTTPS server to. This should be an IP address and port, e.g., `0.0.0.0:8089` |
+| | `tlscertfile` | Path | | The full path to the certificate file to use. Asterisk only supports the `.pem` format. |
+| | `tlsprivatekey` | Path | | The full path to the private key file. Asterisk only supports the `.pem` format. If this is not specified, the certificate specified in `tlscertfile` will be searched for the private key. |
### Example http.conf
----
-
-http.conf
-
-```text
+```text title="http.conf"
[general]
enabled = yes
bindaddr = 0.0.0.0
bindport = 8088
```
-!!! note Use TLS!** It is **highly
- recommended that you encrypt your HTTP signalling with TLS, and use secure WebSockets (WSS) for your events. This requires configuring the TLS information in `http.conf`, and establishing secure websocket/secure HTTP connections from your ARI application.
-
-[//]: # (end-note)
+/// attention | Use TLS
+It is **highly recommended** that you encrypt your HTTP signalling
+with TLS, and use secure WebSockets (WSS) for your events. This
+requires configuring the TLS information in `http.conf`, and
+establishing secure websocket/secure HTTP connections from your ARI
+application.
+///
ARI Configuration
-----------------
ARI users and properties are configured via `ari.conf`. Note that all options may not be listed here; this listing includes the most useful ones for configuring users in ARI. For a full description, see the [ARI configuration](/Latest_API/API_Documentation/Module_Configuration/res_ari) documentation.
-| Section | Parameter | Type | Default | Description |
-| --- | --- | --- | --- | --- |
-| `general` | | | | |
-| | `enabled` | Boolean | Yes | Enable/disable ARI. |
-| | `pretty` | Boolean | No | Format JSON responses and events in a human readable form. This makes the output easier to read, at the cost of some additional bytes. |
-| | `allowed_origins` | String | | A comma separated list of allowed origins for [Cross-Origin Resource Sharing](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing). |
-| [user_name] | | | | |
-| | `type` | String | | Must be `user`. Specifies that this configuration section defines a user for ARI. |
-| | `read_only` | Boolean | No | Whether or not the user can issue requests that alter the Asterisk system. If set to Yes, then only `GET` and `OPTIONS` HTTP requests will be serviced. |
-| | `password_format` | String | plain | Can be either `plain` or `crypt`. When the password is plain, Asterisk will expect the user's password to be in plain text in the `password` field. When set to `crypt`, Asterisk will use `crypt(3)` to decrypt the password. A crypted password can be generated using `mkpasswd -m sha-512`. |
-| | `password` | String | | The password for the user. |
+| Section | Parameter | Type | Default | Description |
+|-------------|-------------------|---------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `general` | | | | |
+| | `enabled` | Boolean | Yes | Enable/disable ARI. |
+| | `pretty` | Boolean | No | Format JSON responses and events in a human readable form. This makes the output easier to read, at the cost of some additional bytes. |
+| | `allowed_origins` | String | | A comma separated list of allowed origins for [Cross-Origin Resource Sharing](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing). |
+| [user_name] | | | | |
+| | `type` | String | | Must be `user`. Specifies that this configuration section defines a user for ARI. |
+| | `read_only` | Boolean | No | Whether or not the user can issue requests that alter the Asterisk system. If set to Yes, then only `GET` and `OPTIONS` HTTP requests will be serviced. |
+| | `password_format` | String | plain | Can be either `plain` or `crypt`. When the password is plain, Asterisk will expect the user's password to be in plain text in the `password` field. When set to `crypt`, Asterisk will use `crypt(3)` to decrypt the password. A crypted password can be generated using `mkpasswd -m sha-512`. |
+| | `password` | String | | The password for the user. |
### Example ari.conf
----
-
-ari.conf
-
-```text
+```text title="ari.conf"
[general]
enabled = yes
pretty = yes
@@ -111,11 +107,7 @@ To hand a channel over to ARI, Asterisk uses a dialplan application called [Stas
This snippet of dialplan, taken from `extensions.conf`, illustrates two ARI applications. The first hands a channel over to an ARI application "Intro-IVR" without any additional parameters; the second hands a channel over to an ARI application "Super-Conference" with a parameter that specifies a conference room to enter.
----
-
-extensions.conf
-
-```
+```text title="extensions.conf"
[default]
exten => ivr,1,NoOp()
@@ -129,9 +121,14 @@ exten => conference,1,NoOp()
When a channel enters into a Stasis application, Asterisk will check to see if a WebSocket connection has been established for that application. If so, the channel is handed over to ARI for control, a subscription for the channel is made for the WebSocket, and a [StasisStart](/Latest_API/API_Documentation/Asterisk_REST_Interface/Asterisk_REST_Data_Models/#stasisstart) event is sent to the WebSocket notifying it that a channel has entered into its application.
-!!! note A WebSocket connection is necessary!
- If you have not connected a WebSocket to Asterisk for a particular application, when a channel enters into Stasis for that application, Asterisk will immediately eject the channel from the application and return back to the dialplan. This is to prevent channels from entering into an application before something is ready to handle them.
-
- Note that if a connection is broken, Asterisk will know that a connection previously existed and will allow channels to enter (although you may got warned that events are about to get missed...)
-
-[//]: # (end-note)
+/// note | A WebSocket connection is necessary!
+If you have not connected a WebSocket to Asterisk for a particular
+application, when a channel enters into Stasis for that application,
+Asterisk will immediately eject the channel from the application and
+return back to the dialplan. This is to prevent channels from entering
+into an application before something is ready to handle them.
+
+Note that if a connection is broken, Asterisk will know that a
+connection previously existed and will allow channels to enter
+(although you may got warned that events are about to get missed...)
+///
diff --git a/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Bridges/ARI-and-Bridges-Holding-Bridges.md b/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Bridges/ARI-and-Bridges-Holding-Bridges.md
index 618ca8e17e..e3e81fe1b2 100644
--- a/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Bridges/ARI-and-Bridges-Holding-Bridges.md
+++ b/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Bridges/ARI-and-Bridges-Holding-Bridges.md
@@ -30,12 +30,21 @@ To add a channel as an announcer to a holding bridge, you must specify a role of
POST /bridges/{bridge_id}/addChannel?channel=56789&role=announcer
```
-!!! tip When is an Announcer channel useful?
- If you want to simply play back a media file to all participants in a holding bridge, e.g., "your call is important to us, please keep waiting", you can simply initiate a `/play` operation on the holding bridge itself. That will perform a playback to all participants in the same fashion as an announcer channel.
-
- An announcer channel is particularly useful when there is someone actually on the other end of the channel, as opposed to a pre-recorded message. For example, you may have a call queue supervisor who wants to let everyone who is waiting for an agent that response times are especially long, but to hold on for a bit longer. Jumping into the holding bridge as an announcer adds a small bit of humanity to the dreaded call queue experience!
-
-[//]: # (end-tip)
+/// tip | When is an Announcer channel useful?
+If you want to simply play back a media file to all participants in a
+holding bridge, e.g., "your call is important to us, please keep
+waiting", you can simply initiate a `/play` operation on the holding
+bridge itself. That will perform a playback to all participants in the
+same fashion as an announcer channel.
+
+An announcer channel is particularly useful when there is someone
+actually on the other end of the channel, as opposed to a pre-recorded
+message. For example, you may have a call queue supervisor who wants
+to let everyone who is waiting for an agent that response times are
+especially long, but to hold on for a bit longer. Jumping into the
+holding bridge as an announcer adds a small bit of humanity to the
+dreaded call queue experience!
+///
### Music on hold, media playback, recording, and other such things
diff --git a/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Bridges/index.md b/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Bridges/index.md
index df0978ec93..70054ff151 100644
--- a/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Bridges/index.md
+++ b/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Bridges/index.md
@@ -8,10 +8,10 @@ Asterisk Bridges
In Asterisk, bridges can be thought of as a container for channels that form paths of communication between the channels contained within them. They can be used to pass media back and forth between the channels, as well as to play media to the various channels in a variety of ways.
-!!! tip More Information
- For more information on bridges in Asterisk, see [Bridges](/Fundamentals/Key-Concepts/Bridges).
-
-[//]: # (end-tip)
+/// tip | More Information
+For more information on bridges in Asterisk, see
+[Bridges](/Fundamentals/Key-Concepts/Bridges).
+///
Bridges in a Stasis Application
===============================
@@ -68,12 +68,12 @@ For our Python examples, we will rely primarily on the [ari-py](https://github.c
2. The username of the ARI user account to connect as. In this case, we're specifying it as `asterisk`.
3. The password for the ARI user account. In this case, that's asterisk.
-!!! tip
- Modify the connection credentials as appropriate for your server, although many examples will use these credentials.
-
- **Please don't use these credentials in production systems!**
+/// warning
+Modify the connection credentials as appropriate for your server,
+although many examples will use these credentials.
-[//]: # (end-tip)
+**Please don't use these credentials in production systems!**
+///
```python
#!/usr/bin/env python
@@ -201,12 +201,12 @@ For our JavaScript examples, we will rely primarily on the Node.js [ari-client](
3. The password for the ARI user account. In this case, that's asterisk.
4. A callback that will be called with an error if one occurred, followed by an instance of an ARI client.
-!!! tip
- Modify the connection credentials as appropriate for your server, although many examples will use these credentials.
-
- **Please don't use these credentials in production systems!**
+/// warning
+Modify the connection credentials as appropriate for your server,
+although many examples will use these credentials.
-[//]: # (end-tip)
+**Please don't use these credentials in production systems!**
+///
```javascript
/*jshint node:true */
diff --git a/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Channels/ARI-and-Channels-Handling-DTMF.md b/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Channels/ARI-and-Channels-Handling-DTMF.md
index 3dfacdaca9..6b3702b569 100644
--- a/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Channels/ARI-and-Channels-Handling-DTMF.md
+++ b/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Channels/ARI-and-Channels-Handling-DTMF.md
@@ -13,14 +13,14 @@ This example mimics the [automated attendant/IVR dialplan example](/Deployment/B
* If the user presses an invalid digit, a prompt informing the user that the digit was invalid is played to the user and the menu restarted.
* If the user fails to press anything within some period of time, a prompt asking the user if they are still present is played to the user and the menu restarted.
-!!! tip
- For this example, you will need the following:
-
- 1. The **extra** sound package from Asterisk. You can install this using the `menuselect` tool.
- 2. If using the Python example, `ari-py` version 0.1.3 or later.
- 3. If using the JavaScript example, ari-client version 0.1.4 or later.
-
-[//]: # (end-tip)
+/// tip
+For this example, you will need the following:
+
+1. The **extra** sound package from Asterisk. You can install this
+ using the `menuselect` tool.
+2. If using the Python example, `ari-py` version 0.1.3 or later.
+3. If using the JavaScript example, ari-client version 0.1.4 or later.
+///
### Dialplan
diff --git a/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Channels/ARI-and-Channels-Manipulating-Channel-State.md b/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Channels/ARI-and-Channels-Manipulating-Channel-State.md
index 96c6246dec..9a613fabe9 100644
--- a/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Channels/ARI-and-Channels-Manipulating-Channel-State.md
+++ b/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Channels/ARI-and-Channels-Manipulating-Channel-State.md
@@ -8,10 +8,13 @@ While there are many states a channel can be in, the following are the most comm
* **Ringing** - the device is ringing. Media may or may not be able to flow from Asterisk to the device.
* **Up** - the device has been answered. When in the up state, media can flow bidirectionally between Asterisk and the device.
-!!! note More Channel States
- Certain channel technologies, such as DAHDI analog channels, may have additional channel states (such as "Pre-ring" or "Dialing Offhook"). When handling channel state, consult the [Channel data model](/Latest_API/API_Documentation/Asterisk_REST_Interface/Asterisk_REST_Data_Models/#channel) for all possible values.
-
-[//]: # (end-note)
+/// note | More Channel States
+Certain channel technologies, such as DAHDI analog channels, may have
+additional channel states (such as "Pre-ring" or "Dialing
+Offhook"). When handling channel state, consult the
+[Channel data model](/Latest_API/API_Documentation/Asterisk_REST_Interface/Asterisk_REST_Data_Models/#channel)
+for all possible values.
+///
## Indicating Ringing
diff --git a/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Channels/index.md b/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Channels/index.md
index 80df2c5637..33d100e7e9 100644
--- a/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Channels/index.md
+++ b/docs/Configuration/Interfaces/Asterisk-REST-Interface-ARI/Introduction-to-ARI-and-Channels/index.md
@@ -72,12 +72,12 @@ For our Python examples, we will rely primarily on the [ari-py](https://github.c
2. The username of the ARI user account to connect as. In this case, we're specifying it as `asterisk`.
3. The password for the ARI user account. In this case, that's asterisk.
-!!! tip
- Modify the connection credentials as appropriate for your server, although many examples will use these credentials.
+/// warning
+Modify the connection credentials as appropriate for your server,
+although many examples will use these credentials.
- **Please don't use these credentials in production systems!**
-
-[//]: # (end-tip)
+**Please don't use these credentials in production systems!**
+///
```python
#!/usr/bin/env python
@@ -209,12 +209,12 @@ For our JavaScript examples, we will rely primarily on the Node.js [ari-client](
3. The password for the ARI user account. In this case, that's asterisk.
4. A callback that will be called with an error if one occurred, followed by an instance of an ARI client.
-!!! tip
- Modify the connection credentials as appropriate for your server, although many examples will use these credentials.
-
- **Please don't use these credentials in production systems!**
+/// warning
+Modify the connection credentials as appropriate for your server,
+although many examples will use these credentials.
-[//]: # (end-tip)
+**Please don't use these credentials in production systems!**
+///
```javascript
/*jshint node:true */
diff --git a/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/LDAP-Realtime-Driver.md b/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/LDAP-Realtime-Driver.md
index 100a352f94..bf9d90b74e 100644
--- a/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/LDAP-Realtime-Driver.md
+++ b/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/LDAP-Realtime-Driver.md
@@ -11,10 +11,10 @@ With this driver Asterisk, using the [Realtime Database Configuration](/Fundamen
See [configs/res_ldap.conf.sample](https://raw.githubusercontent.com/asterisk/asterisk/master/configs/samples/res_ldap.conf.sample) for a configuration file sample.
See contrib/scripts for the LDAP [schema](https://raw.githubusercontent.com/asterisk/asterisk/master/contrib/scripts/asterisk.ldap-schema) and [ldif](https://raw.githubusercontent.com/asterisk/asterisk/master/contrib/scripts/asterisk.ldif) files needed for the LDAP server.
-!!! note
- To use static realtime with certain core configuration files the realtime backend you wish to use must be preloaded in `modules.conf`.
-
-[//]: # (end-note)
+/// note
+To use static realtime with certain core configuration files the
+realtime backend you wish to use must be preloaded in `modules.conf`.
+///
From within your Asterisk source directory:
@@ -33,10 +33,10 @@ sipusers = ldap,"ou=sip,dc=example,dc=domain",sip
extensions = ldap,"ou=extensions,dc=example,dc=domain",extensions
```
-!!! note
- You'll want to reference the Asterisk res_ldap.conf file which holds the LDAP mapping configuration when building your own record schema.
-
-[//]: # (end-note)
+/// note
+You'll want to reference the Asterisk res_ldap.conf file which holds
+the LDAP mapping configuration when building your own record schema.
+///
**Basic** sip users record layout which will need to be saved to a file (we'll use 'createduser.ldif' here as an example). This example record is for sip user '1000'. This example record is for sip user '1000'.
diff --git a/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/ODBC/Getting-Asterisk-Connected-to-MySQL-via-ODBC.md b/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/ODBC/Getting-Asterisk-Connected-to-MySQL-via-ODBC.md
index 8d0ea4f235..676ffb1787 100644
--- a/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/ODBC/Getting-Asterisk-Connected-to-MySQL-via-ODBC.md
+++ b/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/ODBC/Getting-Asterisk-Connected-to-MySQL-via-ODBC.md
@@ -55,10 +55,11 @@ After each of the CREATE and GRANT commands you should see output indicating tha
## Install ODBC and the MariaDB ODBC connector
-!!! warning
- It is not recommended to use the MySQL ODBC connector due to crash issues experienced by users. These have not been experienced when using the MariaDB ODBC connector.
-
-[//]: # (end-warning)
+/// warning
+It is not recommended to use the MySQL ODBC connector due to crash
+issues experienced by users. These have not been experienced when
+using the MariaDB ODBC connector.
+///
Be sure you have followed the previous sections as we presume you already have MySQL installed on your CentOS server along with a database and user for Asterisk configured. The database name should be 'asterisk' and the username should be 'asterisk'.
@@ -118,10 +119,11 @@ Port = 3306
Socket = /var/lib/mysql/mysql.sock
```
-!!! note
- You may want to verify that mysql.sock is actually in the location specific here. It will differ on some systems depending on your configuration.
-
-[//]: # (end-note)
+/// tip
+You may want to verify that mysql.sock is actually in the location
+specific here. It will differ on some systems depending on your
+configuration.
+///
## Test the ODBC Data Source Name connection
@@ -135,10 +137,10 @@ So, for our purposes you would enter:
# isql -v asterisk-connector asterisk replace_with_strong_password
```
-!!! tip
- It is important to use the -v flag so that if isql runs into a problem you will be alerted of any diagnostics or errors available.
-
-[//]: # (end-tip)
+/// note
+It is important to use the `-v` flag so that if isql runs into a
+problem you will be alerted of any diagnostics or errors available.
+///
At this point you should get an SQL prompt. Run the following command:
diff --git a/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/ODBC/index.md b/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/ODBC/index.md
index 19d894819b..be920bd380 100644
--- a/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/ODBC/index.md
+++ b/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/ODBC/index.md
@@ -3,12 +3,11 @@ title: Overview
pageid: 28314864
---
-!!! warning
- Under Construction
-
-[//]: # (end-warning)
-
-!!! note
- Top-level page for everything about configuring ODBC connectivity, res_odbc, func_odbc, etc
-
-[//]: # (end-note)
+/// warning | Under Construction
+This page is under construction. It is intended as a top-level page
+for everything about configuring ODBC connectivity, res_odbc,
+func_odbc, etc.
+
+If you would like to help write this section, please consider
+[contributing to the documentation](/Contributing-to-the-Documentation/).
+///
diff --git a/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/cURL.md b/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/cURL.md
index 8253bd9801..470fc90a45 100644
--- a/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/cURL.md
+++ b/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/cURL.md
@@ -3,10 +3,13 @@ title: cURL
pageid: 28314908
---
-!!! note
- This page is under construction and may be incomplete or missing information in some areas. If you have questions, please wait until this notice is removed before asking, since it is possible your question will be answered by the time this page is completed.
+/// warning | Under Construction
+This page is under construction and may be incomplete or missing
+information in some areas.
-[//]: # (end-note)
+If you would like to help write this section, please consider
+[contributing to the documentation](/Contributing-to-the-Documentation/).
+///
Asterisk's ability to retrieve and store data to realtime backends is most commonly associated with relational databases. One of the lesser-known realtime backends available in Asterisk is [cURL](http://curl.haxx.se/). Using this realtime backend makes Asterisk use HTTP GET and POST requests in order to retrieve data from and store data to an HTTP server.
diff --git a/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/index.md b/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/index.md
index 2fc9d6737c..d0f55f8f16 100644
--- a/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/index.md
+++ b/docs/Configuration/Interfaces/Back-end-Database-and-Realtime-Connectivity/index.md
@@ -3,12 +3,11 @@ title: Overview
pageid: 28314861
---
-!!! warning
- Under Construction
-
-[//]: # (end-warning)
-
-!!! note
- Top-level page for configuration pages about ODBC modules, native database connectors and modules used for realtime.
-
-[//]: # (end-note)
+/// warning | Under Construction
+This page is under construction. It is intended as a top-level page
+for configuration pages about ODBC modules, native database connectors
+and modules used for realtime.
+
+If you would like to help write this section, please consider
+[contributing to the documentation](/Contributing-to-the-Documentation/).
+///
diff --git a/docs/Configuration/Reporting/Call-Detail-Records-CDR/CDR-Specification.md b/docs/Configuration/Reporting/Call-Detail-Records-CDR/CDR-Specification.md
index dc27973cc3..7a83b4f565 100644
--- a/docs/Configuration/Reporting/Call-Detail-Records-CDR/CDR-Specification.md
+++ b/docs/Configuration/Reporting/Call-Detail-Records-CDR/CDR-Specification.md
@@ -33,14 +33,14 @@ It is known that the behavior of CDRs will not allow all applications to capture
## Terminology
-| Term | Definition |
-| --- | --- |
-| CDR | Call Detail Record. The thing that this document is attempting to describe. |
-| CEL | Channel Event Logging. An alternative way to get billing information from Asterisk, that is significantly more flexible and powerful than CDRs but requires the billing logic to be completely implemented by the user. |
-| Party A | A CDR always involves two parties. One party is always chosen as the 'owner' of the CDR. The CDR reflects the view of the call from that party. |
-| Party B | A CDR always involves two parties. Party B is the target of the call. |
-| Stasis | Stasis is the internal message bus in Asterisk that conveys state to the CDR engine. |
-| Unanswered | A CDR is unanswered if its disposition indicates neither ANSWERED or CONGESTION. |
+| Term | Definition |
+|------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| CDR | Call Detail Record. The thing that this document is attempting to describe. |
+| CEL | Channel Event Logging. An alternative way to get billing information from Asterisk, that is significantly more flexible and powerful than CDRs but requires the billing logic to be completely implemented by the user. |
+| Party A | A CDR always involves two parties. One party is always chosen as the 'owner' of the CDR. The CDR reflects the view of the call from that party. |
+| Party B | A CDR always involves two parties. Party B is the target of the call. |
+| Stasis | Stasis is the internal message bus in Asterisk that conveys state to the CDR engine. |
+| Unanswered | A CDR is unanswered if its disposition indicates neither ANSWERED or CONGESTION. |
## CDR Overview
@@ -115,11 +115,12 @@ If a channel is bridged with another channel, the following procedure is perform
+ If the channel entering the bridge is the Party B, the other channel has a CDR with a Party B, and this channel is not that CDR's Party B, then the existing CDR is finalized and a new CDR is created for that other channel with this channel as the Party B.
* If a third party joins the bridge with Party A and Party B, the process [Choosing the Party A channel](#choosing-the-party-a-channel) is repeated for each pairing of channels. Thus, in a three-way call there will be three CDR records; in a four-way call there will be six records, etc.
-!!! tip
- This feels complex, but there's really two rules going on here:
+/// tip
+This feels complex, but there's really two rules going on here:
- 1. Keep using the existing CDR for a channel as long as possible
- 2. Make CDRs for all pairings of channels in a bridge
+1. Keep using the existing CDR for a channel as long as possible
+2. Make CDRs for all pairings of channels in a bridge
+///
##### Finalization
@@ -160,29 +161,29 @@ Note that dialed channels automatically receive the `linkedid` of the calling ch
### Standard Fields
-| Field | Type | Description | Access |
-| --- | --- | --- | --- |
-| accountcode | String (80) | An account code associated with the Party A channel | r/w |
-| src | String (80) | The Caller ID Number | r |
-| dst | String (80) | The destination extension | r |
-| dcontext | String (80) | The destination context | r |
-| clid | String (80) | The Caller ID with text | r |
-| channel | String (80) | The name of the Party A channel | r |
-| dstchannel | String (80) | The name of the Party B channel | r |
-| lastapp | String (80) | The last application the Party A channel executed | r |
-| lastdata | String (80) | The application data for the last application the Party A channel executed | r |
-| start | Date/time | The time the CDR was created | r |
-| answer | Date/time | The time when Party A was answered, or when the bridge between Party A and Party B was created | r |
-| end | Date/time | The time when the CDR was finished. This occurs when either party hangs up, or when the bridge between the parties is broken | r |
-| duration | Integer | The time in seconds from start until end | r |
-| billsec | Integer | The time in seconds from answer until end | r |
-| disposition | Enum | The final known disposition of the CDR record. See [CDR dispositions](#dispositions) for possible values | r |
-| amaflags | Enum | A flag specified on the Party A channel. See AMA records for possible values | r/w |
-| userfield | String (255) | A user defined field set on the channels. If set on both the Party A and Party B channel, the userfields of both are concatenated and separated by a `;` | r/w |
-| uniqueid | String (152) | A unique identifier for the Party A channel | r |
-| linkedid | String (152) | A unique identifier that unites multiple CDR records. See [linkedid propagation](#linkedid-propagation) for more details | r |
-| peeraccount | String (80) | The account code of the Party B channel | r/w |
-| sequence | Integer | A numeric value that, combined with uniqueid and linkedid, can be used to uniquely identify a single CDR record | r |
+| Field | Type | Description | Access |
+|-------------|--------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|--------|
+| accountcode | String (80) | An account code associated with the Party A channel | r/w |
+| src | String (80) | The Caller ID Number | r |
+| dst | String (80) | The destination extension | r |
+| dcontext | String (80) | The destination context | r |
+| clid | String (80) | The Caller ID with text | r |
+| channel | String (80) | The name of the Party A channel | r |
+| dstchannel | String (80) | The name of the Party B channel | r |
+| lastapp | String (80) | The last application the Party A channel executed | r |
+| lastdata | String (80) | The application data for the last application the Party A channel executed | r |
+| start | Date/time | The time the CDR was created | r |
+| answer | Date/time | The time when Party A was answered, or when the bridge between Party A and Party B was created | r |
+| end | Date/time | The time when the CDR was finished. This occurs when either party hangs up, or when the bridge between the parties is broken | r |
+| duration | Integer | The time in seconds from start until end | r |
+| billsec | Integer | The time in seconds from answer until end | r |
+| disposition | Enum | The final known disposition of the CDR record. See [CDR dispositions](#dispositions) for possible values | r |
+| amaflags | Enum | A flag specified on the Party A channel. See AMA records for possible values | r/w |
+| userfield | String (255) | A user defined field set on the channels. If set on both the Party A and Party B channel, the userfields of both are concatenated and separated by a `;` | r/w |
+| uniqueid | String (152) | A unique identifier for the Party A channel | r |
+| linkedid | String (152) | A unique identifier that unites multiple CDR records. See [linkedid propagation](#linkedid-propagation) for more details | r |
+| peeraccount | String (80) | The account code of the Party B channel | r/w |
+| sequence | Integer | A numeric value that, combined with uniqueid and linkedid, can be used to uniquely identify a single CDR record | r |
Any of the values may be accessed using the [CDR function](/Latest_API/API_Documentation/Dialplan_Functions/CDR). Any value that is read/write may be modified using this same function. CDR field values cannot be modified once the CDR is finalized.
@@ -190,13 +191,13 @@ Any of the values may be accessed using the [CDR function](/Latest_API/API_Docum
Dispositions represent the final state of the call from the perspective of Party A.
-| Value | Description | [Hangup Cause Mapping](/Configuration/Miscellaneous/Hangup-Cause-Mappings) | Dial Status Mapping |
-| --- | --- | --- | --- |
-| NO ANSWER | The channel was never answered. This is the default disposition for an unanswered channel. | Any not explicitly listed | CANCEL NOANSWER |
-| CONGESTION | The channel dialed something that was congested. | `AST_CAUSE_CONGESTION` | CONGESTION |
-| FAILED | The channel attempted to dial but the call failed. NOTE: The `congestion` setting in `cdr.conf` can result in the `AST_CAUSE_CONGESTION` hang up cause or the CONGESTION dial status to map to this disposition.| `AST_CAUSE_CONGESTION` `AST_CAUSE_NO_ROUTE_DESTINATION` `AST_CAUSE_UNREGISTERED` | CONGESTION FAILED |
-| BUSY | The channel attempted to dial but the remote party was busy. | `AST_CAUSE_BUSY` | BUSY |
-| ANSWERED | The channel was answered. When the channel is answered, the hangup cause no longer changes the disposition. | Any not explicitly listed | ANSWER |
+| Value | Description | [Hangup Cause Mapping](/Configuration/Miscellaneous/Hangup-Cause-Mappings) | Dial Status Mapping |
+|------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|-----------------------|
+| NO ANSWER | The channel was never answered. This is the default disposition for an unanswered channel. | Any not explicitly listed | CANCEL NOANSWER |
+| CONGESTION | The channel dialed something that was congested. | `AST_CAUSE_CONGESTION` | CONGESTION |
+| FAILED | The channel attempted to dial but the call failed. NOTE: The `congestion` setting in `cdr.conf` can result in the `AST_CAUSE_CONGESTION` hang up cause or the CONGESTION dial status to map to this disposition. | `AST_CAUSE_CONGESTION` `AST_CAUSE_NO_ROUTE_DESTINATION` `AST_CAUSE_UNREGISTERED` | CONGESTION FAILED |
+| BUSY | The channel attempted to dial but the remote party was busy. | `AST_CAUSE_BUSY` | BUSY |
+| ANSWERED | The channel was answered. When the channel is answered, the hangup cause no longer changes the disposition. | Any not explicitly listed | ANSWER |
#### AMA Flags
@@ -216,37 +217,46 @@ User defined CDR fields are created using the [CDR function](/Latest_API/API_Doc
## Scenarios
-!!! note "Scenario Caveats"
- The following scenarios show examples of CDRs created in common use cases. If a particular scenario is not shown below, the CDRs created during the scenario should still match the behavior described previously. Some applications, however, may have undefined behavior as their use is not common or the mechanism by which they manipulate channels does not allow for the capturing of the channel state.
+/// note | Scenario Caveats
+The following scenarios show examples of CDRs created in common use
+cases. If a particular scenario is not shown below, the CDRs created
+during the scenario should still match the behavior described
+previously. Some applications, however, may have undefined behavior as
+their use is not common or the mechanism by which they manipulate
+channels does not allow for the capturing of the channel state.
- Undefined behavior means that the behavior of CDRs in those cases is unsupported and will not be addressed as a bug.
+Undefined behavior means that the behavior of CDRs in those cases is
+unsupported and will not be addressed as a bug.
+///
### Unanswered "Inbound" Call
-!!! tip
- Unanswered calls may not always be logged to CDR backends if the configuration has explicitly disabled unanswered calls.
+/// tip
+Unanswered calls may not always be logged to CDR backends if the
+configuration has explicitly disabled unanswered calls.
+///
Alice calls into Asterisk at extension 500 using a SIP phone and, during dialplan execution of a NoOp(), hangs up.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 500 | default | SIP/alice-00000000 | | NoOp | | 2013-03-04 13:11:18 | | 2013-03-04 13:11:20 | 2 | 0 | NO ANSWER | DOCUMENTATION | 100 | | Asterisk-01-1362424276.2 | | 34 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|-----|----------|--------------------|------------|---------|----------|---------------------|--------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 500 | default | SIP/alice-00000000 | | NoOp | | 2013-03-04 13:11:18 | | 2013-03-04 13:11:20 | 2 | 0 | NO ANSWER | DOCUMENTATION | 100 | | Asterisk-01-1362424276.2 | | 34 | Asterisk-01-1362424276.2 |
### Unanswered "Outbound" Call
Asterisk creates a call file to dial Alice and playback tt-monkeys to her. Alice, anticipating the screeching of howler monkeys, never picks up the phone.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| | | s | default | SIP/alice-00000000 | | AppDial | SIP/Alice | 2013-03-04 13:11:18 | | 2013-03-04 13:11:20 | 2 | 0 | NO ANSWER | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 4 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|------|-----|-----|----------|--------------------|------------|---------|-----------|---------------------|--------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| | | s | default | SIP/alice-00000000 | | AppDial | SIP/Alice | 2013-03-04 13:11:18 | | 2013-03-04 13:11:20 | 2 | 0 | NO ANSWER | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 4 | Asterisk-01-1362424276.2 |
### Single Party
Alice calls into Asterisk's VoiceMailMain application. This implicitly Answers the channel. She checks her voicemail for awhile, then hangs up.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 8500 | default | SIP/alice-00000000 | | Hangup | | 2013-03-04 13:11:18 | 2013-03-04 13:11:20 | 2013-03-04 13:12:18 | 60 | 58 | ANSWERED | DOCUMENTATION | 100 | | Asterisk-01-1362424276.2 | | 112 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|------|----------|--------------------|------------|---------|----------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 8500 | default | SIP/alice-00000000 | | Hangup | | 2013-03-04 13:11:18 | 2013-03-04 13:11:20 | 2013-03-04 13:12:18 | 60 | 58 | ANSWERED | DOCUMENTATION | 100 | | Asterisk-01-1362424276.2 | | 112 | Asterisk-01-1362424276.2 |
### Basic Two Party Calls
@@ -256,26 +266,26 @@ Two party calls can be initiated in a variety of ways. Several of the more commo
Alice calls into Asterisk, which dials Bob. Bob Answers, and a bridge is formed between Alice and Bob. Alice and Bob talk for awhile, then Bob hangs up. This breaks the bridge between Alice and Bob, and Alice is hung up on as well.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:26 | 2013-03-04 13:13:18 | 120 | 112 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 12 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|-----|----------|--------------------|------------------|---------|-------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:26 | 2013-03-04 13:13:18 | 120 | 112 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 12 | Asterisk-01-1362424276.2 |
#### Unanswered Dial
Alice calls into Asterisk, which dials Bob. Bob refuses to pick up his phone, and the call eventually times out.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,10,Tt | 2013-03-04 13:11:18 | | 2013-03-04 13:11:28 | 10 | 0 | NO ANSWER | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 1 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|-----|----------|--------------------|------------------|---------|---------------|---------------------|--------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,10,Tt | 2013-03-04 13:11:18 | | 2013-03-04 13:11:28 | 10 | 0 | NO ANSWER | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 1 | Asterisk-01-1362424276.2 |
#### Parallel Dial
Alice calls into Asterisk, which dials Bob's SIP desk phone as well as his IAX2 soft phone. Both ring for awhile, and Bob eventually presses the Answer button on his IAX2 soft phone.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob&IAX2/bob,,Tt | 2013-03-04 13:11:18 | | 2013-03-04 13:11:28 | 10 | 0 | NO ANSWER | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 12 | Asterisk-01-1362424276.2 |
-| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | IAX2/bob-00000000 | Dial | SIP/bob&IAX2/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:12:28 | 70 | 60 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 13 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|-----|----------|--------------------|-------------------|---------|----------------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob&IAX2/bob,,Tt | 2013-03-04 13:11:18 | | 2013-03-04 13:11:28 | 10 | 0 | NO ANSWER | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 12 | Asterisk-01-1362424276.2 |
+| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | IAX2/bob-00000000 | Dial | SIP/bob&IAX2/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:12:28 | 70 | 60 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 13 | Asterisk-01-1362424276.2 |
#### Call Forward
@@ -289,88 +299,103 @@ Transfers create multiple CDRs. In general, a CDR is created for each path of co
Alice calls into Asterisk, which dials Bob's SIP phone. Bob answers, and Alice and Bob talk for awhile. Eventually, Bob decides to send Alice off to Charlie, and he blind transfers Alice to Charlie's extension. Asterisk dials Charlie's SIP phone, and Charlie answers. Alice and Charlie talk for awhile until Alice decides to hang up.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:11:48 | 30 | 20 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
-| "Alice <100>" | 100 | 300 | default | SIP/alice-00000000 | SIP/charlie-00000002 | Dial | SIP/charlie,,Tt | 2013-03-04 13:11:48 | 2013-03-04 13:11:53 | 2013-03-04 13:12:53 | 65 | 60 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 102 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|-----|----------|--------------------|----------------------|---------|-----------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:11:48 | 30 | 20 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
+| "Alice <100>" | 100 | 300 | default | SIP/alice-00000000 | SIP/charlie-00000002 | Dial | SIP/charlie,,Tt | 2013-03-04 13:11:48 | 2013-03-04 13:11:53 | 2013-03-04 13:12:53 | 65 | 60 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 102 | Asterisk-01-1362424276.2 |
#### Core Attended Transfer to Channel
Alice calls into Asterisk, which dials Bob's SIP phone. Bob answers, and Alice and Bob talk for awhile. Eventually, Bob decides to send Alice off to Charlie, and he initiates an attended transfer. Alice is put on hold, and Bob dials Charlie's extension. Asterisk dials Charlie's SIP phone, and Charlie answers. Bob and Charlie talk for a bit, and Charlie agrees to talk to Alice. Bob completes the attended transfer, Alice is taken off hold, and Alice and Charlie are bridged. Alice talks to Charlie for awhile, then hangs up.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:12:18 | 60 | 50 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
-| "Bob <200>" | 200 | 300 | default | SIP/bob-00000001 | SIP/charlie-00000002 | Dial | SIP/charlie,,Tt | 2013-03-04 13:11:48 | 2013-03-04 13:11:53 | 2013-03-04 13:12:18 | 30 | 26 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424280.1 | | 102 | Asterisk-01-1362424276.2 |
-| "Alice <100>" | 100 | 300 | default | SIP/alice-00000000 | SIP/charlie-00000002 | Dial | SIP/bob,,Tt | 2013-03-04 13:12:18 | 2013-03-04 13:12:18 | 2013-03-04 13:12:53 | 45 | 45 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 103 | Asterisk-01-1362424276.2 |
-
-!!! note
- In the example above, note the following:
-
- * Hold time is not reflected in CDRs.
- * When Bob dials Charlie, he becomes the Party A channel. However, the `linkedid` from Alice 'wins', and so the CDR reflects the `linkedid` from Alice's CDR.
- * Alice and Charlie are bridged automatically by the attended transfer, so their start and answer times are identical.
- * The billsec/duration of Alice and Charlie are reflective of their portion of the call, and do not include the times from Alice and Bob.
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|-----|----------|--------------------|----------------------|---------|-----------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:12:18 | 60 | 50 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
+| "Bob <200>" | 200 | 300 | default | SIP/bob-00000001 | SIP/charlie-00000002 | Dial | SIP/charlie,,Tt | 2013-03-04 13:11:48 | 2013-03-04 13:11:53 | 2013-03-04 13:12:18 | 30 | 26 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424280.1 | | 102 | Asterisk-01-1362424276.2 |
+| "Alice <100>" | 100 | 300 | default | SIP/alice-00000000 | SIP/charlie-00000002 | Dial | SIP/bob,,Tt | 2013-03-04 13:12:18 | 2013-03-04 13:12:18 | 2013-03-04 13:12:53 | 45 | 45 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 103 | Asterisk-01-1362424276.2 |
+
+/// note
+In the example above, note the following:
+
+* Hold time is not reflected in CDRs.
+* When Bob dials Charlie, he becomes the Party A channel. However, the
+ `linkedid` from Alice 'wins', and so the CDR reflects the `linkedid`
+ from Alice's CDR.
+* Alice and Charlie are bridged automatically by the attended
+ transfer, so their start and answer times are identical.
+* The billsec/duration of Alice and Charlie are reflective of their
+ portion of the call, and do not include the times from Alice and
+ Bob.
+///
#### Core Attended Transfer to Application
Alice calls into Asterisk, which dials Bob's SIP phone. Bob answers, and Alice and Bob talk for awhile. Eventually, Bob decides to send Alice off into Charlie's voicemail mailbox, and he initiates an attended transfer. Alice is put on hold, and Bob dials an extension that calls into VoiceMail. Bob enters in the Charlie's voicemail mailbox number, then completes the attended transfer to put Alice into the voicemail mailbox. Alice records some voicemail, then hangs up.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:12:18 | 60 | 50 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
-| "Bob <200>" | 200 | 8500 | default | SIP/bob-00000001 | | VoiceMail | 300 | 2013-03-04 13:11:48 | 2013-03-04 13:11:49 | 2013-03-04 13:12:18 | 30 | 29 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424280.1 | | 102 | Asterisk-01-1362424276.2 |
-| "Alice <100>" | 100 | 8500 | default | SIP/alice-00000000 | | VoiceMail | 300 | 2013-03-04 13:12:18 | 2013-03-04 13:12:18 | 2013-03-04 13:13:18 | 60 | 60 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 103 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|------|----------|--------------------|------------------|-----------|-------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:12:18 | 60 | 50 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
+| "Bob <200>" | 200 | 8500 | default | SIP/bob-00000001 | | VoiceMail | 300 | 2013-03-04 13:11:48 | 2013-03-04 13:11:49 | 2013-03-04 13:12:18 | 30 | 29 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424280.1 | | 102 | Asterisk-01-1362424276.2 |
+| "Alice <100>" | 100 | 8500 | default | SIP/alice-00000000 | | VoiceMail | 300 | 2013-03-04 13:12:18 | 2013-03-04 13:12:18 | 2013-03-04 13:13:18 | 60 | 60 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 103 | Asterisk-01-1362424276.2 |
#### SIP Protocol Attended Transfer
In a SIP protocol attended transfer, two independent channels make up the transferer. As the two channels are independent of each other, correlation of the two channels cannot be done by `linkedid` / `uniqueid` / `sequence` numbers. The records generally have to be correlated using other properties, such as the prefix of the channel names and/or the `accountcode` settings.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-04-13:12:08 | 50 | 40 | ANSWERED | DOCUMENTATION | Alice | Bob | Asterisk-01-13624276.2 | | 101 | Asterisk-01-13624276.2 |
-| "Bob <200>" | 200 | 300 | default | SIP/bob-00000002 | SIP/charlie-00000003 | Dial | SIP/charlie,,Tt | 2013-03-04 13:11:48 | 2013-03-04 13:11:58 | 2013-03-04 13:12:08 | 20 | 10 | ANSWERED | DOCUMENTATION | Bob | Charlie | Asterisk-01-136242428.3 | | 102 | Asterisk-01-136242428.3 |
-| "Alice <100>" | 100 | 300 | default | SIP/alice-00000000 | SIP/charlie-00000003 | Dial | SIP/bob,,Tt | 2013-03-04 13:12:08 | 2013-03-04 13:12:08 | 2013-03-04 13:13:08 | 60 | 60 | ANSWERED | DOCUMENTATION | Alice | Charlie | Asterisk-01-13624276.2 | | 103 | Asterisk-01-13624276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|-----|----------|--------------------|----------------------|---------|-----------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|-------------------------|-----------|----------|-------------------------|
+| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-04-13:12:08 | 50 | 40 | ANSWERED | DOCUMENTATION | Alice | Bob | Asterisk-01-13624276.2 | | 101 | Asterisk-01-13624276.2 |
+| "Bob <200>" | 200 | 300 | default | SIP/bob-00000002 | SIP/charlie-00000003 | Dial | SIP/charlie,,Tt | 2013-03-04 13:11:48 | 2013-03-04 13:11:58 | 2013-03-04 13:12:08 | 20 | 10 | ANSWERED | DOCUMENTATION | Bob | Charlie | Asterisk-01-136242428.3 | | 102 | Asterisk-01-136242428.3 |
+| "Alice <100>" | 100 | 300 | default | SIP/alice-00000000 | SIP/charlie-00000003 | Dial | SIP/bob,,Tt | 2013-03-04 13:12:08 | 2013-03-04 13:12:08 | 2013-03-04 13:13:08 | 60 | 60 | ANSWERED | DOCUMENTATION | Alice | Charlie | Asterisk-01-13624276.2 | | 103 | Asterisk-01-13624276.2 |
#### Blonde Transfer
Alice calls into Asterisk, which dials Bob's SIP phone. Bob answers, and Alice and Bob talk for awhile. Eventually, Bob decides to send Alice off to Charlie, and he initiates an attended transfer. Alice is put on hold, and Bob dials Charlie's extension. Asterisk dials Charlie's SIP phone, but before Charlie answers Bob hangs up. Asterisk recognizes that this is a blonde transfer, takes Alice off hold, and ties Charlie's ringing phone to Alice. Charlie answers, Alice talks to Charlie for awhile, then hangs up.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:12:18 | 60 | 50 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
-| "Bob <200>" | 200 | 300 | default | SIP/bob-00000001 | SIP/charlie-00000002 | Dial | SIP/charlie,,Tt | 2013-03-04 13:11:48 | | 2013-03-04 13:11:50 | 2 | 0 | NO ANSWER | DOCUMENTATION | | | Asterisk-01-1362424280.1 | | 102 | Asterisk-01-1362424276.2 |
-| "Alice <100>" | 100 | 300 | default | SIP/alice-00000000 | SIP/charlie-00000002 | Dial | SIP/charlie,,Tt | 2013-03-04 13:11:50 | 2013-03-04 13:11:55 | 2013-03-04 13:12:30 | 40 | 35 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 103 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|-----|----------|--------------------|----------------------|---------|-----------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:12:18 | 60 | 50 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
+| "Bob <200>" | 200 | 300 | default | SIP/bob-00000001 | SIP/charlie-00000002 | Dial | SIP/charlie,,Tt | 2013-03-04 13:11:48 | | 2013-03-04 13:11:50 | 2 | 0 | NO ANSWER | DOCUMENTATION | | | Asterisk-01-1362424280.1 | | 102 | Asterisk-01-1362424276.2 |
+| "Alice <100>" | 100 | 300 | default | SIP/alice-00000000 | SIP/charlie-00000002 | Dial | SIP/charlie,,Tt | 2013-03-04 13:11:50 | 2013-03-04 13:11:55 | 2013-03-04 13:12:30 | 40 | 35 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 103 | Asterisk-01-1362424276.2 |
#### Three Way Call
Alice calls into Asterisk, which dials Bob's SIP phone. Bob answers, and Alice and Bob talk for awhile. Eventually, Bob decides to bring Charlie into the mix. He puts Alice on hold and dials Charlie's extension. Asterisk dials Charlie's SIP phone, and Charlie answers. Bob and Charlie talk for awhile, and Bob then finishes the three-way call by finalizing the attempt. Alice is taken off hold, and Alice, Bob, and Charlie can all talk. Eventually, Bob hangs up, and all parties are ejected and hung up on.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:13:18 | 120 | 110 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
-| "Bob <200>" | 200 | 300 | default | SIP/bob-00000001 | SIP/charlie-00000002 | Dial | SIP/charlie,,Tt | 2013-03-04 13:11:48 | 2013-03-04 13:11:53 | 2013-03-04 13:12:08 | 20 | 15 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424280.1 | | 102 | Asterisk-01-1362424276.2 |
-| "Alice <100>" | 100 | 300 | default | SIP/alice-00000000 | SIP/charlie-00000002 | Dial | SIP/bob,,Tt | 2013-03-04 13:12:08 | 2013-03-04 13:12:08 | 2013-03-04 13:13:18 | 70 | 70 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 103 | Asterisk-01-1362424276.2 |
-| "Bob <200>" | 200 | 300 | default | SIP/bob-00000001 | SIP/charlie-00000002 | Dial | SIP/charlie,,Tt | 2013-03-04 13:12:08 | 2013-03-04 13:12:08 | 2013-03-04 13:13:18 | 70 | 70 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424280.1 | | 104 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|-----|----------|--------------------|----------------------|---------|-----------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:13:18 | 120 | 110 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
+| "Bob <200>" | 200 | 300 | default | SIP/bob-00000001 | SIP/charlie-00000002 | Dial | SIP/charlie,,Tt | 2013-03-04 13:11:48 | 2013-03-04 13:11:53 | 2013-03-04 13:12:08 | 20 | 15 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424280.1 | | 102 | Asterisk-01-1362424276.2 |
+| "Alice <100>" | 100 | 300 | default | SIP/alice-00000000 | SIP/charlie-00000002 | Dial | SIP/bob,,Tt | 2013-03-04 13:12:08 | 2013-03-04 13:12:08 | 2013-03-04 13:13:18 | 70 | 70 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 103 | Asterisk-01-1362424276.2 |
+| "Bob <200>" | 200 | 300 | default | SIP/bob-00000001 | SIP/charlie-00000002 | Dial | SIP/charlie,,Tt | 2013-03-04 13:12:08 | 2013-03-04 13:12:08 | 2013-03-04 13:13:18 | 70 | 70 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424280.1 | | 104 | Asterisk-01-1362424276.2 |
-!!! note
- In the example above, note the following:
+/// note
+In the example above, note the following:
- * The consultation between Bob and Charlie is treated as a separate conversation from the conversation between all three parties. Thus, there are two CDRs between Bob and Charlie.
- * Because the path of communication never was broken between Alice and Bob (despite Alice being put on hold), there is only one CDR for Alice to Bob.
+* The consultation between Bob and Charlie is treated as a separate
+ conversation from the conversation between all three parties. Thus,
+ there are two CDRs between Bob and Charlie.
+* Because the path of communication never was broken between Alice and
+ Bob (despite Alice being put on hold), there is only one CDR for
+ Alice to Bob.
+///
#### SIP Attended Transfer
Alice calls into Asterisk, which dials Bob's SIP phone. Bob answers, and Alice and Bob talk for awhile. Eventually, Alice decides to transfer Bob to Charlie, and performs an attended transfer using her SIP phone. Bob is put on hold. Alice and Charlie talk for awhile, and then Alice finishes the attended transfer. Bob is taken off hold, and bridged with Charlie. Alice is hung up.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:12:18 | 60 | 50 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
-| "Bob <200>" | 200 | 300 | default | SIP/bob-00000002 | SIP/charlie-00000003 | Dial | SIP/charlie | 2013-03-04 13:11:48 | 2013-03-04 13:11:53 | 2013-03-04 13:12:08 | 20 | 15 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424280.1 | | 102 | Asterisk-01-1362424276.2 |
-| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/charlie-00000003 | Dial | SIP/bob | 2013-03-04 13:12:18 | 2013-03-04 13:12:18 | 2013-03-04 13:12:28 | 10 | 10 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 103 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|-----|----------|--------------------|----------------------|---------|-------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:12:18 | 60 | 50 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
+| "Bob <200>" | 200 | 300 | default | SIP/bob-00000002 | SIP/charlie-00000003 | Dial | SIP/charlie | 2013-03-04 13:11:48 | 2013-03-04 13:11:53 | 2013-03-04 13:12:08 | 20 | 15 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424280.1 | | 102 | Asterisk-01-1362424276.2 |
+| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/charlie-00000003 | Dial | SIP/bob | 2013-03-04 13:12:18 | 2013-03-04 13:12:18 | 2013-03-04 13:12:28 | 10 | 10 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 103 | Asterisk-01-1362424276.2 |
-!!! note
- The important point to note here is that a SIP attended transfer uses two channels to communicate with Bob - `SIP/bob-00000001` and `SIP/bob-00000002`. The CDR records are associated by virtue of the `linkedid` field.
+/// note
+The important point to note here is that a SIP attended transfer uses
+two channels to communicate with Bob - `SIP/bob-00000001` and
+`SIP/bob-00000002`. The CDR records are associated by virtue of the
+`linkedid` field.
+///
### Local Channels
@@ -387,27 +412,35 @@ Each situation and how it appears in CDRs is explored further below.
An external application [Originates](/Latest_API/API_Documentation/AMI_Actions/Originate) a Local channel. The first half of the Local channel Dials Alice over a SIP channel. The second half of the Local channel is placed into her VoiceMail account. Alice listens to her VoiceMail through the Local channel, then hangs up.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "" | dial\_alice | 100 | default | Local/dial\_alice@default-00000001;1 | SIP/alice-00000002 | Dial | SIP/alice,,tT | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:12:18 | 60 | 50 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424290.1 | | 101 | Asterisk-01-1362424290.1 |
-| "" | voicemail | | default | Local/dial\_alice@default-00000001;2 | | VoiceMailMain | 100 | 2013-03-04 13:11:28 | 2013-03-04 13:11:28 | 2013-03-04 13:12:18 | 50 | 50 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424290.1 | | 102 | Asterisk-01-1362424290.1 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|------|-------------|-----|----------|--------------------------------------|--------------------|---------------|---------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "" | dial\_alice | 100 | default | Local/dial\_alice@default-00000001;1 | SIP/alice-00000002 | Dial | SIP/alice,,tT | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:12:18 | 60 | 50 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424290.1 | | 101 | Asterisk-01-1362424290.1 |
+| "" | voicemail | | default | Local/dial\_alice@default-00000001;2 | | VoiceMailMain | 100 | 2013-03-04 13:11:28 | 2013-03-04 13:11:28 | 2013-03-04 13:12:18 | 50 | 50 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424290.1 | | 102 | Asterisk-01-1362424290.1 |
##### Local channel between bridges
An external application [Originates](/Latest_API/API_Documentation/AMI_Actions/Originate) a Local channel. The first half of the Local channel Dials Alice over a SIP channel; Alice answers. This triggers the second half of the Local channel, which Dials Bob. Bob Answers, and Alice and Bob talk. Alice hangs up, the Local channels are hung up, and Bob is hung up on.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "" | dial\_alice | 100 | default | Local/dial\_alice@default-00000001;1 | SIP/alice-00000002 | Dial | SIP/alice,,tT | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:12:18 | 60 | 50 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424290.1 | | 101 | Asterisk-01-1362424290.1 |
-| "" | dial\_bob | 200 | default | Local/dial\_alice@default-00000001;2 | SIP/bob-00000003 | Dial | SIP/bob,,tT | 2013-03-04 13:11:28 | 2013-03-04 13:11:38 | 2013-03-04 13:12:18 | 50 | 40 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424290.1 | | 102 | Asterisk-01-1362424290.1 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|------|-------------|-----|----------|--------------------------------------|--------------------|---------|---------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "" | dial\_alice | 100 | default | Local/dial\_alice@default-00000001;1 | SIP/alice-00000002 | Dial | SIP/alice,,tT | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:12:18 | 60 | 50 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424290.1 | | 101 | Asterisk-01-1362424290.1 |
+| "" | dial\_bob | 200 | default | Local/dial\_alice@default-00000001;2 | SIP/bob-00000003 | Dial | SIP/bob,,tT | 2013-03-04 13:11:28 | 2013-03-04 13:11:38 | 2013-03-04 13:12:18 | 50 | 40 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424290.1 | | 102 | Asterisk-01-1362424290.1 |
#### Local Channel Optimization
When a Local channel optimization occurs, the CDR records associated with the Local channel are finalized. New CDR records are generated for the channels in the merged bridge, per the rules outlined in [CDR Bridging](#bridging). That is, new CDRs are generated from each pair of channels that result from the merging of the bridges.
-!!! warning
- CDR properties set on optimized Local channels are **not** propagated to other channels. Setting CDR information on optimizing Local channels will cause that information to be lost.
- In prior versions of Asterisk it was sometimes necessary to set CDR information on Local channels - with the addition of [Pre-Dial handlers](/Configuration/Dialplan/Subroutines/Pre-Dial-Handlers), it is always possible to set CDR information on the appropriate channel at the time of creation.
+/// warning
+CDR properties set on optimized Local channels are **not** propagated
+to other channels. Setting CDR information on optimizing Local
+channels will cause that information to be lost.
+
+In prior versions of Asterisk it was sometimes necessary to set CDR
+information on Local channels - with the addition of
+[Pre-Dial handlers](/Configuration/Dialplan/Subroutines/Pre-Dial-Handlers),
+it is always possible to set CDR information on the appropriate
+channel at the time of creation.
+///
### Call Hold
@@ -419,11 +452,11 @@ Call Park is different from Call Hold. Whereas Call Hold is a change of media st
Alice calls into Asterisk and Bob answers. Alice says she wants to talk to Charlie, but Bob isn't sure Charlie wants to talk to Alice so he blind transfers her into Park. Alice sits, waiting in her parking slot, listening to serenading robots while Bob asks if Charlie wants to talk to Alice. Charlie says sure, so he picks Alice up out of Park and they talk for awhile before Alice hangs up.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:11:38 | 20 | 10 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
-| "Alice <100>" | 100 | 700 | default | SIP/alice-00000000 | | Park | 60000,default,200,1 | 2013-03-04 13:11:38 | 2013-03-04 13:11:38 | 2013-03-04 13:12:38 | 60 | 60 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 102 | Asterisk-01-1362424276.2 |
-| "Alice <100>" | 100 | 300 | default | SIP/alice-00000000 | SIP/charlie-00000002 | Park | 60000,default,200,1 | 2013-03-04 13:12:38 | 2013-03-04 13:12:38 | 2013-03-04 13:13:38 | 60 | 60 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 103 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|-----|----------|--------------------|----------------------|---------|---------------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:11:38 | 20 | 10 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
+| "Alice <100>" | 100 | 700 | default | SIP/alice-00000000 | | Park | 60000,default,200,1 | 2013-03-04 13:11:38 | 2013-03-04 13:11:38 | 2013-03-04 13:12:38 | 60 | 60 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 102 | Asterisk-01-1362424276.2 |
+| "Alice <100>" | 100 | 300 | default | SIP/alice-00000000 | SIP/charlie-00000002 | Park | 60000,default,200,1 | 2013-03-04 13:12:38 | 2013-03-04 13:12:38 | 2013-03-04 13:13:38 | 60 | 60 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 103 | Asterisk-01-1362424276.2 |
### Call Queues
@@ -431,29 +464,29 @@ Alice calls into Asterisk and Bob answers. Alice says she wants to talk to Charl
Alice calls into Asterisk and enters [Queue](/Latest_API/API_Documentation/Dialplan_Applications/Queue) without being Answered. She waits in the queue for a period of time. At some point in time, she enters into the head of the queue and the queue performs a ring-all on the members of the queue. There are two queue members - Bob and Charlie. Bob is out to lunch, so his queue member is paused and it returns a Busy indication. Charlie, on the other hand, is not busy and answers. Alice and Charlie talk for awhile, and eventually Alice hangs up.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 800 | default | SIP/alice-00000000 | SIP/bob-00000001 | Queue | complaints | 2013-03-04 13:11:18 | | 2013-03-04 13:14:18 | 180 | 0 | BUSY | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
-| "Alice <100>" | 100 | 800 | default | SIP/alice-00000000 | SIP/charlie-00000002 | Queue | complaints | 2013-03-04 13:11:18 | 2013-03-04 13:12:18 | 2013-03-04 13:14:18 | 180 | 120 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 102 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|-----|----------|--------------------|----------------------|---------|------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 800 | default | SIP/alice-00000000 | SIP/bob-00000001 | Queue | complaints | 2013-03-04 13:11:18 | | 2013-03-04 13:14:18 | 180 | 0 | BUSY | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
+| "Alice <100>" | 100 | 800 | default | SIP/alice-00000000 | SIP/charlie-00000002 | Queue | complaints | 2013-03-04 13:11:18 | 2013-03-04 13:12:18 | 2013-03-04 13:14:18 | 180 | 120 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 102 | Asterisk-01-1362424276.2 |
#### Call Queue - Example 2
Alice calls into Asterisk and enters Queue without being Answered. She waits in the queue for a period of time. At some point in time, she enters into the head of the queue and the queue performs a round-robin strategy ring on the members of the queue. Bob is rung first, but being lazy, he ignores his phone. After some time of ringing, it times out and goes on to Charlie. When Charlie's SIP phone rings, he immediately answers. Alice and Charlie talk for some period of time, and eventually Alice hangs up.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 800 | default | SIP/alice-00000000 | SIP/bob-00000001 | Queue | complaints | 2013-03-04 13:11:18 | | 2013-03-04 13:14:18 | 180 | 0 | NO ANSWER | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
-| "Alice <100>" | 100 | 800 | default | SIP/alice-00000000 | SIP/charlie-00000002 | Queue | complaints | 2013-03-04 13:11:18 | 2013-03-04 13:12:38 | 2013-03-04 13:14:18 | 180 | 100 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 102 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|-----|----------|--------------------|----------------------|---------|------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 800 | default | SIP/alice-00000000 | SIP/bob-00000001 | Queue | complaints | 2013-03-04 13:11:18 | | 2013-03-04 13:14:18 | 180 | 0 | NO ANSWER | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 101 | Asterisk-01-1362424276.2 |
+| "Alice <100>" | 100 | 800 | default | SIP/alice-00000000 | SIP/charlie-00000002 | Queue | complaints | 2013-03-04 13:11:18 | 2013-03-04 13:12:38 | 2013-03-04 13:14:18 | 180 | 100 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 102 | Asterisk-01-1362424276.2 |
### Conference Call
Alice calls into Asterisk and joins a ConfBridge conference. Bob does a bit later as well. Finally, Charlie joins the Conference. After talking for awhile, Bob realizes he's late for lunch and hangs up. Alice and Charlie talk for a bit longer, then finally Alice hangs up. Charlie stays in the conference for another second before he hangs up as well.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 1000 | default | SIP/alice-00000000 | SIP/bob-00000001 | ConfBridge | 1000,public\_bridge,public\_user,public\_menu | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:14:18 | 180 | 170 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 1 | Asterisk-01-1362424276.2 |
-| "Bob <200>" | 200 | 1000 | default | SIP/bob-00000001 | SIP/charlie-00000002 | ConfBridge | 1000,public\_bridge,public\_user,public\_menu | 2013-03-04 13:11:28 | 2013-03-04 13:12:18 | 2013-03-04 13:14:18 | 170 | 120 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424280.1 | | 2 | Asterisk-01-1362424276.2 |
-| "Alice <100>" | 100 | 1000 | default | SIP/alice-00000000 | SIP/charlie-00000002 | ConfBridge | 1000,public\_bridge,public\_user,public\_menu | 2013-03-04 13:11:18 | 2013-03-04 13:12:18 | 2013-03-04 13:15:18 | 240 | 180 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 3 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|------|----------|--------------------|----------------------|------------|-----------------------------------------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 1000 | default | SIP/alice-00000000 | SIP/bob-00000001 | ConfBridge | 1000,public\_bridge,public\_user,public\_menu | 2013-03-04 13:11:18 | 2013-03-04 13:11:28 | 2013-03-04 13:14:18 | 180 | 170 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 1 | Asterisk-01-1362424276.2 |
+| "Bob <200>" | 200 | 1000 | default | SIP/bob-00000001 | SIP/charlie-00000002 | ConfBridge | 1000,public\_bridge,public\_user,public\_menu | 2013-03-04 13:11:28 | 2013-03-04 13:12:18 | 2013-03-04 13:14:18 | 170 | 120 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424280.1 | | 2 | Asterisk-01-1362424276.2 |
+| "Alice <100>" | 100 | 1000 | default | SIP/alice-00000000 | SIP/charlie-00000002 | ConfBridge | 1000,public\_bridge,public\_user,public\_menu | 2013-03-04 13:11:18 | 2013-03-04 13:12:18 | 2013-03-04 13:15:18 | 240 | 180 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 3 | Asterisk-01-1362424276.2 |
### A Complex Example
@@ -461,56 +494,78 @@ Alice calls into Asterisk and Dials Bob. Bob answers, and he and Alice talk for
* Alice calls into Asterisk and Dials Bob. Bob and Alice talk for awhile.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:00:00 | 2013-03-04 13:00:05 | 2013-03-04 13:01:00 | 60 | 55 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 1 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|-----|----------|--------------------|------------------|---------|-------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 200 | default | SIP/alice-00000000 | SIP/bob-00000001 | Dial | SIP/bob,,Tt | 2013-03-04 13:00:00 | 2013-03-04 13:00:05 | 2013-03-04 13:01:00 | 60 | 55 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 1 | Asterisk-01-1362424276.2 |
* Bob realizes Alice wants to talk to Sales, so he blind transfers her off to the Sales Queue. Alice enters into the Sales Queue, where she waits for a bit while agents David and Frank are dialed using Local channels to SIP devices. Alice is eventually Answered by David, a sales agent.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 700 | default | SIP/alice-00000000 | Local/member1@default-00000001;1 | Queue | sales | 2013-03-04 13:01:00 | | 2013-03-04 13:02:00 | 60 | 0 | NO ANSWER | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 2 | Asterisk-01-1362424276.2 |
-| | 700 | member1 | default | Local/member1@default-00000001;2 | SIP/frank-00000002 | Dial | SIP/frank | 2013-03-04 13:01:50 | | 2013-03-04 13:02:00 | 10 | 0 | NO ANSWER | DOCUMENTATION | | | Asterisk-01-1362424280.1 | | 3 | Asterisk-01-1362424276.2 |
-| "Alice <100>" | 100 | 700 | default | SIP/alice-00000000 | Local/member2@default-00000002;1 | Queue | sales | 2013-03-04 13:01:00 | 2013-03-04 13:02:00 | 2013-03-04 13:05:00 | 240 | 180 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 4 | Asterisk-01-1362424276.2 |
-| | 700 | member2 | default | Local/member2@default-00000002;2 | SIP/david-00000003 | Dial | SIP/david | 2013-03-04 13:02:00 | 2013-03-04 13:02:05 | 2013-03-04 13:06:00 | 240 | 235 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424280.3 | | 5 | Asterisk-01-1362424276.2 |
-
-!!! note
- Note that with non-optimizing Local channels, the duration of the Alice to the Local channel (which in turns passes media to/from David) may not reflect the length of time that the Local channel to David is in the bridge. As we'll see, additional channels joining the bridge will change that CDR's durations.
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|---------|----------|----------------------------------|----------------------------------|---------|-----------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 700 | default | SIP/alice-00000000 | Local/member1@default-00000001;1 | Queue | sales | 2013-03-04 13:01:00 | | 2013-03-04 13:02:00 | 60 | 0 | NO ANSWER | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 2 | Asterisk-01-1362424276.2 |
+| | 700 | member1 | default | Local/member1@default-00000001;2 | SIP/frank-00000002 | Dial | SIP/frank | 2013-03-04 13:01:50 | | 2013-03-04 13:02:00 | 10 | 0 | NO ANSWER | DOCUMENTATION | | | Asterisk-01-1362424280.1 | | 3 | Asterisk-01-1362424276.2 |
+| "Alice <100>" | 100 | 700 | default | SIP/alice-00000000 | Local/member2@default-00000002;1 | Queue | sales | 2013-03-04 13:01:00 | 2013-03-04 13:02:00 | 2013-03-04 13:05:00 | 240 | 180 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 4 | Asterisk-01-1362424276.2 |
+| | 700 | member2 | default | Local/member2@default-00000002;2 | SIP/david-00000003 | Dial | SIP/david | 2013-03-04 13:02:00 | 2013-03-04 13:02:05 | 2013-03-04 13:06:00 | 240 | 235 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424280.3 | | 5 | Asterisk-01-1362424276.2 |
+
+/// note
+Note that with non-optimizing Local channels, the duration of the
+Alice to the Local channel (which in turns passes media to/from David)
+may not reflect the length of time that the Local channel to David is
+in the bridge. As we'll see, additional channels joining the bridge
+will change that CDR's durations.
+///
* Meanwhile, Bob calls Charlie.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Bob <200>" | 200 | 300 | default | SIP/bob-00000004 | SIP/charlie-00000005 | Dial | SIP/charlie,,Tt | 2013-03-04 13:01:10 | 2013-03-04 13:01:20 | 2013-03-04 13:03:20 | 130 | 120 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424277.1 | | 6 | Asterisk-01-1362424277.1 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|-------------|-----|-----|----------|------------------|----------------------|---------|-----------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Bob <200>" | 200 | 300 | default | SIP/bob-00000004 | SIP/charlie-00000005 | Dial | SIP/charlie,,Tt | 2013-03-04 13:01:10 | 2013-03-04 13:01:20 | 2013-03-04 13:03:20 | 130 | 120 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424277.1 | | 6 | Asterisk-01-1362424277.1 |
* David and Alice talk for a bit, but David isn't able to sell her on their new fantastic product, so he puts Alice on hold for a bit and calls Ellen from engineering. Ellen agrees to be on the call, and Alice, David, and Ellen are put into a three-way call.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "David <900>" | 900 | 901 | default | SIP/david-00000003 | SIP/ellen-00000006 | Dial | SIP/ellen,,Tt | 2013-03-04 13:02:30 | 2013-03-04 13:02:40 | 2013-03-04 13:03:00 | 30 | 20 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424300.1 | | 7 | Asterisk-01-1362424276.2 |
-| "Alice <100>" | 100 | 700 | default | SIP/alice-00000000 | SIP/ellen-00000006 | Queue | sales | 2013-03-04 13:03:00 | 2013-03-04 13:03:00 | 2013-03-04 13:05:00 | 120 | 120 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 8 | Asterisk-01-1362424276.2 |
-| | 700 | member2 | default | Local/member2@default-00000002;2 | SIP/ellen-00000006 | Dial | SIP/david | 2013-03-04 13:03:00 | 2013-03-04 13:03:00 | 2013-03-04 13:05:00 | 120 | 120 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424280.3 | | 9 | Asterisk-01-1362424276.2 |
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|---------------|-----|---------|----------|----------------------------------|--------------------|---------|---------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "David <900>" | 900 | 901 | default | SIP/david-00000003 | SIP/ellen-00000006 | Dial | SIP/ellen,,Tt | 2013-03-04 13:02:30 | 2013-03-04 13:02:40 | 2013-03-04 13:03:00 | 30 | 20 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424300.1 | | 7 | Asterisk-01-1362424276.2 |
+| "Alice <100>" | 100 | 700 | default | SIP/alice-00000000 | SIP/ellen-00000006 | Queue | sales | 2013-03-04 13:03:00 | 2013-03-04 13:03:00 | 2013-03-04 13:05:00 | 120 | 120 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 8 | Asterisk-01-1362424276.2 |
+| | 700 | member2 | default | Local/member2@default-00000002;2 | SIP/ellen-00000006 | Dial | SIP/david | 2013-03-04 13:03:00 | 2013-03-04 13:03:00 | 2013-03-04 13:05:00 | 120 | 120 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424280.3 | | 9 | Asterisk-01-1362424276.2 |
-!!! note
- During the consultation period, David's SIP channel directly Dials Ellen's SIP device. However, when Ellen joins the bridge with David, it is the Local channel to David that is in the bridge, not David's SIP channel. Thus, the CDR reflects the Local channel to Ellen's SIP channel.
+/// note
+During the consultation period, David's SIP channel directly Dials
+Ellen's SIP device. However, when Ellen joins the bridge with David,
+it is the Local channel to David that is in the bridge, not David's
+SIP channel. Thus, the CDR reflects the Local channel to Ellen's SIP
+channel.
+///
* Around this time, Charlie decides that he should talk to Alice as well. He transfers himself to the Sales bridge, hanging up on Bob in the process. This turns the Sales bridge into a four-way call. The four parties talk for awhile, and eventually Alice is sold on the new whiz-bang product, so she hangs up. Ellen realizes she isn't need any more either, and hangs up as well. Charlie and David talk about the weather for awhile, and then Charlie hangs up, hanging up David as well.
-| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| "Alice <100>" | 100 | 700 | default | SIP/alice-00000000 | SIP/charlie-00000005 | Queue | sales | 2013-03-04 13:03:20 | 2013-03-04 13:03:20 | 2013-03-04 13:05:00 | 100 | 100 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 10 | Asterisk-01-1362424276.2 |
-| "Charlie <300>" | 300 | 701 | default | SIP/charlie-00000005 | Local/member2@default-00000002;2 | Bridge | SIP/alice-00000000 | 2013-03-04 13:03:20 | 2013-03-04 13:03:20 | 2013-03-04 13:06:00 | 160 | 160 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424278.1 | | 11 | Asterisk-01-1362424276.2 |
-| "Charlie <300>" | 300 | 701 | default | SIP/charlie-00000005 | SIP/ellen-00000006 | Bridge | SIP/alice-00000000 | 2013-03-04 13:03:20 | 2013-03-4 13:03:20 | 2013-03-04 13:05:05 | 105 | 105 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424278.1 | | 12 | Asterisk-01-1362424276.2 |
-
-!!! note
- Because Charlie's channel is older then either the Local channel to David's SIP channel or Ellen's SIP channel, Charlie is chosen as Party A for those CDRs. Alice, on the other hand, is older than Charlie, so she is Party A for that CDR. Because Alice is the oldest channel, her `linkedid` is propagated to all CDRs in the bridge. However, the CDR between Charlie and Bob is not affected, as Bob is the Party A in that CDR and the CDR would already have been dispatched by the time Charlie joined this bridge.
+| clid | src | dst | dcontext | channel | dstchannel | lastapp | lastdata | start | answer | end | duration | billsec | disposition | amaflags | accountcode | peeraccount | uniqueid | userfield | sequence | linkedid |
+|-----------------|-----|-----|----------|----------------------|----------------------------------|---------|--------------------|---------------------|---------------------|---------------------|----------|---------|-------------|---------------|-------------|-------------|--------------------------|-----------|----------|--------------------------|
+| "Alice <100>" | 100 | 700 | default | SIP/alice-00000000 | SIP/charlie-00000005 | Queue | sales | 2013-03-04 13:03:20 | 2013-03-04 13:03:20 | 2013-03-04 13:05:00 | 100 | 100 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424276.2 | | 10 | Asterisk-01-1362424276.2 |
+| "Charlie <300>" | 300 | 701 | default | SIP/charlie-00000005 | Local/member2@default-00000002;2 | Bridge | SIP/alice-00000000 | 2013-03-04 13:03:20 | 2013-03-04 13:03:20 | 2013-03-04 13:06:00 | 160 | 160 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424278.1 | | 11 | Asterisk-01-1362424276.2 |
+| "Charlie <300>" | 300 | 701 | default | SIP/charlie-00000005 | SIP/ellen-00000006 | Bridge | SIP/alice-00000000 | 2013-03-04 13:03:20 | 2013-03-4 13:03:20 | 2013-03-04 13:05:05 | 105 | 105 | ANSWERED | DOCUMENTATION | | | Asterisk-01-1362424278.1 | | 12 | Asterisk-01-1362424276.2 |
+
+/// note
+Because Charlie's channel is older then either the Local channel to
+David's SIP channel or Ellen's SIP channel, Charlie is chosen as Party
+A for those CDRs. Alice, on the other hand, is older than Charlie, so
+she is Party A for that CDR. Because Alice is the oldest channel, her
+`linkedid` is propagated to all CDRs in the bridge. However, the CDR
+between Charlie and Bob is not affected, as Bob is the Party A in that
+CDR and the CDR would already have been dispatched by the time Charlie
+joined this bridge.
+///
## Asterisk CDR APIs
The following details high level APIs that Asterisk provides for manipulating CDRs.
-!!! note
- These still describe applications/functions available in Asterisk 11. When documentation has been updated for these applications/functions for Asterisk 12, the links will be updated appropriately.
+/// note
+These still describe applications/functions available in
+Asterisk 11. When documentation has been updated for these
+applications/functions for Asterisk 12, the links will be updated
+appropriately.
+///
### Applications
@@ -518,8 +573,11 @@ The following details high level APIs that Asterisk provides for manipulating CD
When this application is executed on a channel, the channel is no longer considered for CDRs. Any previous CDRs involving the channel will continue to be updated.
-!!! warning
- This application is deprecated. It is now recommended to use the [CDR_PROP](/Latest_API/API_Documentation/Dialplan_Functions/CDR_PROP) function instead.
+/// warning
+This application is deprecated. It is now recommended to use the
+[CDR_PROP](/Latest_API/API_Documentation/Dialplan_Functions/CDR_PROP)
+function instead.
+///
#### [ForkCDR](/Latest_API/API_Documentation/Dialplan_Applications/ForkCDR)
@@ -563,16 +621,16 @@ The following parameters can be configured for the CDR engine. Additional CDR ba
The following settings must appear in the context `general`.
-| Name | Type | Description |
-| --- | --- | --- |
-| enable | Boolean | Enable/disable the CDR engine |
-| batch | Boolean | Dispatch CDRs in batches. |
-| unanswered | Boolean | Dispatch unanswered CDRs. See the definition of Unanswered in [Terminology](#terminology) for more information. |
-| congestion | Boolean | Treat congestion calls as failed calls |
-| endbeforehexten | Boolean | Finalize CDRs before the `h` extension or hangup handlers are executed |
-| initiatedseconds | Boolean | Count microseconds for the purposes of the `billsec` field |
-| size | Integer | The number of records to buffer before initiating a batch |
-| time | Integer | The time, in seconds, before initiating a batch |
-| scheduleronly | Boolean | Deprecated. See `usethreadpool` instead. |
-| usethreadpool | Boolean | For any CDRs that are dispatched, use a thread pool thread to perform the dispatching. This prevents the CDR taskprocessor thread from being blocked by any CDR backends. |
-| safeshutdown | Boolean | Block Asterisk shutdown on dispatching of CDRs |
+| Name | Type | Description |
+|------------------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| enable | Boolean | Enable/disable the CDR engine |
+| batch | Boolean | Dispatch CDRs in batches. |
+| unanswered | Boolean | Dispatch unanswered CDRs. See the definition of Unanswered in [Terminology](#terminology) for more information. |
+| congestion | Boolean | Treat congestion calls as failed calls |
+| endbeforehexten | Boolean | Finalize CDRs before the `h` extension or hangup handlers are executed |
+| initiatedseconds | Boolean | Count microseconds for the purposes of the `billsec` field |
+| size | Integer | The number of records to buffer before initiating a batch |
+| time | Integer | The time, in seconds, before initiating a batch |
+| scheduleronly | Boolean | Deprecated. See `usethreadpool` instead. |
+| usethreadpool | Boolean | For any CDRs that are dispatched, use a thread pool thread to perform the dispatching. This prevents the CDR taskprocessor thread from being blocked by any CDR backends. |
+| safeshutdown | Boolean | Block Asterisk shutdown on dispatching of CDRs |
diff --git a/docs/Configuration/Reporting/Call-Detail-Records-CDR/CDR-Storage-Backends/RADIUS-CDR-Backend.md b/docs/Configuration/Reporting/Call-Detail-Records-CDR/CDR-Storage-Backends/RADIUS-CDR-Backend.md
index 18f95eafb3..690f917043 100644
--- a/docs/Configuration/Reporting/Call-Detail-Records-CDR/CDR-Storage-Backends/RADIUS-CDR-Backend.md
+++ b/docs/Configuration/Reporting/Call-Detail-Records-CDR/CDR-Storage-Backends/RADIUS-CDR-Backend.md
@@ -13,58 +13,58 @@ pageid: 5242929
##### Download the sources
-From
+From
##### Untar the source tarball:
```
-root@localhost:/usr/local/src# tar xvfz radiusclient-ng-0.5.2.tar.gz
+user@localhost:/usr/local/src$ tar xvfz radiusclient-ng-0.5.2.tar.gz
```
##### Compile and install the library:
```
-root@localhost:/usr/local/src# cd radiusclient-ng-0.5.2
-root@localhost:/usr/local/src/radiusclient-ng-0.5.2#./configure
-root@localhost:/usr/local/src/radiusclient-ng-0.5.2# make
-root@localhost:/usr/local/src/radiusclient-ng-0.5.2# make install
+user@localhost:/usr/local/src$ cd radiusclient-ng-0.5.2
+user@localhost:/usr/local/src/radiusclient-ng-0.5.2$./configure
+user@localhost:/usr/local/src/radiusclient-ng-0.5.2$ make
+user@localhost:/usr/local/src/radiusclient-ng-0.5.2$ sudo make install
```
##### Configuration of the Radiusclient library
-By default all the configuration files of the radiusclient library will be in /usr/local/etc/radiusclient-ng directory.
+By default all the configuration files of the radiusclient library will be in /usr/local/etc/radiusclient-ng directory.
-File "radiusclient.conf" Open the file and find lines containing the following:
+File "radiusclient.conf" Open the file and find lines containing the following:
```
-authserver localhost
+authserver localhost
```
-This is the hostname or IP address of the RADIUS server used for authentication. You will have to change this unless the server is running on the same host as your Asterisk PBX.
+This is the hostname or IP address of the RADIUS server used for authentication. You will have to change this unless the server is running on the same host as your Asterisk PBX.
```
-acctserver localhost
+acctserver localhost
```
-This is the hostname or IP address of the RADIUS server used for accounting. You will have to change this unless the server is running on the same host as your Asterisk PBX.
+This is the hostname or IP address of the RADIUS server used for accounting. You will have to change this unless the server is running on the same host as your Asterisk PBX.
##### File "servers"
-RADIUS protocol uses simple access control mechanism based on shared secrets that allows RADIUS servers to limit access from RADIUS clients.
+RADIUS protocol uses simple access control mechanism based on shared secrets that allows RADIUS servers to limit access from RADIUS clients.
-A RADIUS server is configured with a secret string and only RADIUS clients that have the same secret will be accepted.
+A RADIUS server is configured with a secret string and only RADIUS clients that have the same secret will be accepted.
-You need to configure a shared secret for each server you have configured in radiusclient.conf file in the previous step. The shared secrets are stored in /usr/local/etc/radiusclient-ng/servers file.
+You need to configure a shared secret for each server you have configured in radiusclient.conf file in the previous step. The shared secrets are stored in /usr/local/etc/radiusclient-ng/servers file.
-Each line contains hostname of a RADIUS server and shared secret used in communication with that server. The two values are separated by white spaces. Configure shared secrets for every RADIUS server you are going to use.
+Each line contains hostname of a RADIUS server and shared secret used in communication with that server. The two values are separated by white spaces. Configure shared secrets for every RADIUS server you are going to use.
```
-File "dictionary"
+File "dictionary"
```
-Asterisk uses some attributes that are not included in the dictionary of radiusclient library, therefore it is necessary to add them. A file called dictionary.digium (kept in the contrib dir) was created to list all new attributes used by Asterisk. Add to the end of the main dictionary
+Asterisk uses some attributes that are not included in the dictionary of radiusclient library, therefore it is necessary to add them. A file called dictionary.digium (kept in the contrib dir) was created to list all new attributes used by Asterisk. Add to the end of the main dictionary
-file /usr/local/etc/radiusclient-ng/dictionary the line:
+file /usr/local/etc/radiusclient-ng/dictionary the line:
```bash title=" " linenums="1"
$INCLUDE /path/to/dictionary.digium
@@ -74,49 +74,48 @@ $INCLUDE /path/to/dictionary.digium
##### Download sources tarball from:
-
+
##### Untar, configure, build, and install the server:
```
-root@localhost:/usr/local/src# tar xvfz freeradius-1.1.1.tar.gz
-root@localhost:/usr/local/src# cd freeradius-1.1.1
-root@localhost"/usr/local/src/freeradius-1.1.1# ./configure
-root@localhost"/usr/local/src/freeradius-1.1.1# make
-root@localhost"/usr/local/src/freeradius-1.1.1# make install
+user@localhost:/usr/local/src$ tar xvfz freeradius-1.1.1.tar.gz
+user@localhost:/usr/local/src$ cd freeradius-1.1.1
+user@localhost:/usr/local/src/freeradius-1.1.1$ ./configure
+user@localhost:/usr/local/src/freeradius-1.1.1$ make
+user@localhost:/usr/local/src/freeradius-1.1.1$ sudo make install
```
All the configuration files of FreeRADIUS server will be in /usr/local/etc/raddb directory.
##### Configuration of the FreeRADIUS Server
-There are several files that have to be modified to configure the RADIUS server. These are presented next.
+There are several files that have to be modified to configure the RADIUS server. These are presented next.
##### File "clients.conf"
-File /usr/local/etc/raddb/clients.conf contains description of RADIUS clients that are allowed to use the server. For each of the clients you need to specify its hostname or IP address and also a shared secret. The shared secret must be the same string you configured in radiusclient library.
+File /usr/local/etc/raddb/clients.conf contains description of RADIUS clients that are allowed to use the server. For each of the clients you need to specify its hostname or IP address and also a shared secret. The shared secret must be the same string you configured in radiusclient library.
-Example:
+Example:
```
-client myhost { secret = mysecret shortname = foo }
+client myhost { secret = mysecret shortname = foo }
```
-This fragment allows access from RADIUS clients on "myhost" if they use "mysecret" as the shared secret. The file already contains an entry for localhost (127.0.0.1), so if you are running the RADIUS server on the same host as your Asterisk server, then modify the existing entry instead, replacing the default password.
+This fragment allows access from RADIUS clients on "myhost" if they use "mysecret" as the shared secret. The file already contains an entry for localhost (127.0.0.1), so if you are running the RADIUS server on the same host as your Asterisk server, then modify the existing entry instead, replacing the default password.
##### File "dictionary"
-!!! note
- As of version 1.1.2, the dictionary.digium file ships with FreeRADIUS.
+/// note
+As of version 1.1.2, the dictionary.digium file ships with FreeRADIUS.
+///
-[//]: # (end-note)
+The following procedure brings the dictionary.digium file to previous versions of FreeRADIUS.
-The following procedure brings the dictionary.digium file to previous versions of FreeRADIUS.
-
-File /usr/local/etc/raddb/dictionary contains the dictionary of FreeRADIUS server. You have to add the same dictionary file (dictionary.digium), which you added to the dictionary of radiusclient-ng library. You can include it into the main file, adding the following line at the end of file /usr/local/etc/raddb/dictionary:
+File /usr/local/etc/raddb/dictionary contains the dictionary of FreeRADIUS server. You have to add the same dictionary file (dictionary.digium), which you added to the dictionary of radiusclient-ng library. You can include it into the main file, adding the following line at the end of file /usr/local/etc/raddb/dictionary:
```bash title=" " linenums="1"
-$INCLUDE /path/to/dictionary.digium
+$INCLUDE /path/to/dictionary.digium
```
That will include the same new attribute definitions that are used in radiusclient-ng library so the client and server will understand each other.
@@ -125,13 +124,13 @@ That will include the same new attribute definitions that are used in radiusclie
##### Compilation and installation:
-The module will be compiled as long as the radiusclient-ng library has been detected on your system.
+The module will be compiled as long as the radiusclient-ng library has been detected on your system.
-By default FreeRADIUS server will log all accounting requests into /usr/local/var/log/radius/radacct directory in form of plain text files. The server will create one file for each hostname in the directory. The following example shows how the log files look like.
+By default FreeRADIUS server will log all accounting requests into /usr/local/var/log/radius/radacct directory in form of plain text files. The server will create one file for each hostname in the directory. The following example shows how the log files look like.
-Asterisk now generates Call Detail Records. See /include/asterisk/cdr.h for all the fields which are recorded. By default, records in comma separated values will be created in /var/log/asterisk/cdr-csv.
+Asterisk now generates Call Detail Records. See /include/asterisk/cdr.h for all the fields which are recorded. By default, records in comma separated values will be created in /var/log/asterisk/cdr-csv.
-The configuration file for cdr_radius.so module is /etc/asterisk/cdr.conf
+The configuration file for cdr_radius.so module is /etc/asterisk/cdr.conf
This is where you can set CDR related parameters as well as the path to the radiusclient-ng library configuration file.
diff --git a/docs/Configuration/Reporting/Channel-Event-Logging-CEL/CEL-Applications-and-Functions.md b/docs/Configuration/Reporting/Channel-Event-Logging-CEL/CEL-Applications-and-Functions.md
index eaf2e12a73..bd3ae49897 100644
--- a/docs/Configuration/Reporting/Channel-Event-Logging-CEL/CEL-Applications-and-Functions.md
+++ b/docs/Configuration/Reporting/Channel-Event-Logging-CEL/CEL-Applications-and-Functions.md
@@ -10,10 +10,11 @@ The [CELGenUserEvent](/Latest_API/API_Documentation/Dialplan_Applications/CELGen
The event triggered is the **`USER_DEFINED`** event as listed in the [Asterisk CEL Specification](../CEL-Specification). The **`eventtype`** and **`userdeftype`** fields will be populated with data passed through the respective arguments provided to the CELGenUserEvent application.
-!!! warning
- Please note that there is no restrictions on the name supplied. If it happens to match a standard CEL event name, it will look like that event was generated. This could be a blessing or a curse!
-
-[//]: # (end-warning)
+/// warning
+Please note that there are no restrictions on the name supplied. If it
+happens to match a standard CEL event name, it will look like that
+event was generated. This could be a blessing or a curse!
+///
Functions
=========
diff --git a/docs/Configuration/Reporting/Channel-Event-Logging-CEL/CEL-Configuration-Examples/MSSQL-CEL-Backend.md b/docs/Configuration/Reporting/Channel-Event-Logging-CEL/CEL-Configuration-Examples/MSSQL-CEL-Backend.md
index 2558182edc..e1ada4afc6 100644
--- a/docs/Configuration/Reporting/Channel-Event-Logging-CEL/CEL-Configuration-Examples/MSSQL-CEL-Backend.md
+++ b/docs/Configuration/Reporting/Channel-Event-Logging-CEL/CEL-Configuration-Examples/MSSQL-CEL-Backend.md
@@ -3,42 +3,41 @@ title: MSSQL CEL Backend
pageid: 5242952
---
-## Overview
+## Overview
-Asterisk can currently store Channel Events into an MSSQL database in two different ways: cel_odbc or cel_tds
+Asterisk can currently store Channel Events into an MSSQL database in two different ways: cel_odbc or cel_tds
Channel Event Records can be stored using unixODBC (which requires the FreeTDS package) cel_odbc or directly by using just the FreeTDS package cel_tds.
-The following provide some examples known to get asterisk working with mssql.
+The following provide some examples known to get asterisk working with mssql.
-!!! note
- Only choose one db connector.
-
-[//]: # (end-note)
+/// note
+Only choose one db connector.
+///
## ODBC using cel_odbc
### Compile, configure, and install the latest unixODBC package:
```
-tar -zxvf unixODBC-2.2.9.tar.gz && cd unixODBC-2.2.9 && ./configure --sysconfdir=/etc --prefix=/usr --disable-gui && make && make install
+tar -zxvf unixODBC-2.2.9.tar.gz && cd unixODBC-2.2.9 && ./configure --sysconfdir=/etc --prefix=/usr --disable-gui && make && make install
```
### Compile, configure, and install the latest FreeTDS package:
```
-tar -zxvf freetds-0.62.4.tar.gz && cd freetds-0.62.4 && ./configure --prefix=/usr --with-tdsver=7.0 \ --with-unixodbc=/usr/lib && make && make install
+tar -zxvf freetds-0.62.4.tar.gz && cd freetds-0.62.4 && ./configure --prefix=/usr --with-tdsver=7.0 \ --with-unixodbc=/usr/lib && make && make install
```
### Compile, or recompile, asterisk so that it will now add support for cel_odbc.
```
-make clean && ./configure --with-odbc && make update && make && make install
+make clean && ./configure --with-odbc && make update && make && make install
```
### Setup odbc configuration files.
-These are working examples from my system. You will need to modify for your setup. You are not required to store usernames or passwords here.
+These are working examples from my system. You will need to modify for your setup. You are not required to store usernames or passwords here.
/etc/odbcinst.ini
@@ -60,25 +59,27 @@ server = 192.168.1.25
port = 1433
database = voipdb
tds_version = 7.0
-language = us_english
+language = us_english
```
-!!! warning
- Only install one database connector. Do not confuse asterisk by using both ODBC (cel_odbc) and FreeTDS (cel_tds). This command will erase the contents of cel_tds.conf
-[//]: # (end-warning)
+/// warning
+Only install one database connector. Do not confuse asterisk by using
+both ODBC (cel_odbc) and FreeTDS (cel_tds). This command will erase
+the contents of cel_tds.conf
```
-[ -f /etc/asterisk/cel_tds.conf ] > /etc/asterisk/cel_tds.conf
+[ -f /etc/asterisk/cel_tds.conf ] > /etc/asterisk/cel_tds.conf
```
+///
-!!! note
- unixODBC requires the freeTDS package, but asterisk does not call freeTDS directly.
-
-[//]: # (end-note)
+/// note
+unixODBC requires the freeTDS package, but asterisk does not call
+freeTDS directly.
+///
### Now set up cel_odbc configuration files.
-These are working samples from my system. You will need to modify for your setup. Define your usernames and passwords here, secure file as well.
+These are working samples from my system. You will need to modify for your setup. Define your usernames and passwords here, secure file as well.
/etc/asterisk/cel_odbc.conf
@@ -87,30 +88,30 @@ These are working samples from my system. You will need to modify for your setup
dsn=MSSQL-asterisk
username=voipdbuser
password=voipdbpass
-loguniqueid=yes
+loguniqueid=yes
```
### And finally, create the 'cel' table in your mssql database.
```
CREATE TABLE cel (
- [eventtype] [varchar] (30) NOT NULL ,
- [eventtime] [datetime] NOT NULL ,
- [cidname] [varchar] (80) NOT NULL ,
- [cidnum] [varchar] (80) NOT NULL ,
- [cidani] [varchar] (80) NOT NULL ,
- [cidrdnis] [varchar] (80) NOT NULL ,
- [ciddnid] [varchar] (80) NOT NULL ,
+ [eventtype] [varchar] (30) NOT NULL ,
+ [eventtime] [datetime] NOT NULL ,
+ [cidname] [varchar] (80) NOT NULL ,
+ [cidnum] [varchar] (80) NOT NULL ,
+ [cidani] [varchar] (80) NOT NULL ,
+ [cidrdnis] [varchar] (80) NOT NULL ,
+ [ciddnid] [varchar] (80) NOT NULL ,
[exten] [varchar] (80) NOT NULL ,
- [context] [varchar] (80) NOT NULL ,
+ [context] [varchar] (80) NOT NULL ,
[channame] [varchar] (80) NOT NULL ,
[appname] [varchar] (80) NOT NULL ,
[appdata] [varchar] (80) NOT NULL ,
- [amaflags] [int] NOT NULL ,
- [accountcode] [varchar] (20) NOT NULL ,
- [uniqueid] [varchar] (32) NOT NULL ,
+ [amaflags] [int] NOT NULL ,
+ [accountcode] [varchar] (20) NOT NULL ,
+ [uniqueid] [varchar] (32) NOT NULL ,
[peer] [varchar] (80) NOT NULL ,
- [userfield] [varchar] (255) NOT NULL
+ [userfield] [varchar] (255) NOT NULL
) ;
```
@@ -121,60 +122,62 @@ Start asterisk in verbose mode, you should see that asterisk logs a connection t
### Compile, configure, and install the latest FreeTDS package:
```
-tar -zxvf freetds-0.62.4.tar.gz && cd freetds-0.62.4 && ./configure --prefix=/usr --with-tdsver=7.0 make && make install
+tar -zxvf freetds-0.62.4.tar.gz && cd freetds-0.62.4 && ./configure --prefix=/usr --with-tdsver=7.0 make && make install
```
### Compile, or recompile, asterisk so that it will now add support for cel_tds.
```
-make clean && ./configure --with-tds && make update && make && make install
+make clean && ./configure --with-tds && make update && make && make install
```
-!!! warning
- Only install one database connector. Do not confuse asterisk by using both ODBC (cel_odbc) and FreeTDS (cel_tds). This command will erase the contents of cel_odbc.conf
-[//]: # (end-warning)
+/// warning
+Only install one database connector. Do not confuse asterisk by using
+both ODBC (cel_odbc) and FreeTDS (cel_tds). This command will erase
+the contents of cel_odbc.conf
```
-[ -f /etc/asterisk/cel_odbc.conf ] > /etc/asterisk/cel_odbc.conf
+[ -f /etc/asterisk/cel_odbc.conf ] > /etc/asterisk/cel_odbc.conf
```
+///
### Set up cel_tds configuration files.
-These are working samples from my system. You will need to modify for your setup. Define your usernames and passwords here, secure file as well.
+These are working samples from my system. You will need to modify for your setup. Define your usernames and passwords here, secure file as well.
/etc/asterisk/cel_tds.conf
```
[global]
hostname=192.168.1.25
-port=1433
-dbname=voipdb
-user=voipdbuser
-password=voipdpass
+port=1433
+dbname=voipdb
+user=voipdbuser
+password=voipdpass
charset=BIG5
```
### And finally, create the 'cel' table in your mssql database.
```
-CREATE TABLE cel (
- [eventtype] [varchar] (30) NULL ,
- [eventtime] [datetime] NULL ,
- [cidname] [varchar] (80) NULL ,
- [cidnum] [varchar] (80) NULL ,
- [cidani] [varchar] (80) NULL ,
- [cidrdnis] [varchar] (80) NULL ,
- [ciddnid] [varchar] (80) NULL ,
- [exten] [varchar] (80) NULL ,
- [context] [varchar] (80) NULL ,
- [channame] [varchar] (80) NULL ,
- [appname] [varchar] (80) NULL ,
- [appdata] [varchar] (80) NULL ,
- [amaflags] [varchar] (16) NULL ,
- [accountcode] [varchar] (20) NULL ,
- [uniqueid] [varchar] (32) NULL ,
- [userfield] [varchar] (255) NULL ,
- [peer] [varchar] (80) NULL
+CREATE TABLE cel (
+ [eventtype] [varchar] (30) NULL,
+ [eventtime] [datetime] NULL,
+ [cidname] [varchar] (80) NULL,
+ [cidnum] [varchar] (80) NULL,
+ [cidani] [varchar] (80) NULL,
+ [cidrdnis] [varchar] (80) NULL,
+ [ciddnid] [varchar] (80) NULL,
+ [exten] [varchar] (80) NULL,
+ [context] [varchar] (80) NULL,
+ [channame] [varchar] (80) NULL,
+ [appname] [varchar] (80) NULL,
+ [appdata] [varchar] (80) NULL,
+ [amaflags] [varchar] (16) NULL,
+ [accountcode] [varchar] (20) NULL,
+ [uniqueid] [varchar] (32) NULL,
+ [userfield] [varchar] (255) NULL,
+ [peer] [varchar] (80) NULL
) ;
```
diff --git a/docs/Configuration/Reporting/Channel-Event-Logging-CEL/CEL-Configuration-Examples/RADIUS-CEL-Backend.md b/docs/Configuration/Reporting/Channel-Event-Logging-CEL/CEL-Configuration-Examples/RADIUS-CEL-Backend.md
index d079ff9112..f62a0ce2c4 100644
--- a/docs/Configuration/Reporting/Channel-Event-Logging-CEL/CEL-Configuration-Examples/RADIUS-CEL-Backend.md
+++ b/docs/Configuration/Reporting/Channel-Event-Logging-CEL/CEL-Configuration-Examples/RADIUS-CEL-Backend.md
@@ -13,58 +13,58 @@ pageid: 5242961
##### Download the sources
-From
+From
##### Untar the source tarball:
```
-root@localhost:/usr/local/src# tar xvfz radiusclient-ng-0.5.2.tar.gz
+user@localhost:/usr/local/src$ tar xvfz radiusclient-ng-0.5.2.tar.gz
```
##### Compile and install the library:
```
-root@localhost:/usr/local/src# cd radiusclient-ng-0.5.2
-root@localhost:/usr/local/src/radiusclient-ng-0.5.2#./configure
-root@localhost:/usr/local/src/radiusclient-ng-0.5.2# make
-root@localhost:/usr/local/src/radiusclient-ng-0.5.2# make install
+user@localhost:/usr/local/src$ cd radiusclient-ng-0.5.2
+user@localhost:/usr/local/src/radiusclient-ng-0.5.2$./configure
+user@localhost:/usr/local/src/radiusclient-ng-0.5.2$ make
+user@localhost:/usr/local/src/radiusclient-ng-0.5.2$ sudo make install
```
##### Configuration of the Radiusclient library
-By default all the configuration files of the radiusclient library will be in /usr/local/etc/radiusclient-ng directory.
+By default all the configuration files of the radiusclient library will be in /usr/local/etc/radiusclient-ng directory.
-File "radiusclient.conf" Open the file and find lines containing the following:
+File "radiusclient.conf" Open the file and find lines containing the following:
```
-authserver localhost
+authserver localhost
```
-This is the hostname or IP address of the RADIUS server used for authentication. You will have to change this unless the server is running on the same host as your Asterisk PBX.
+This is the hostname or IP address of the RADIUS server used for authentication. You will have to change this unless the server is running on the same host as your Asterisk PBX.
```
-acctserver localhost
+acctserver localhost
```
-This is the hostname or IP address of the RADIUS server used for accounting. You will have to change this unless the server is running on the same host as your Asterisk PBX.
+This is the hostname or IP address of the RADIUS server used for accounting. You will have to change this unless the server is running on the same host as your Asterisk PBX.
##### File "servers"
-RADIUS protocol uses simple access control mechanism based on shared secrets that allows RADIUS servers to limit access from RADIUS clients.
+RADIUS protocol uses simple access control mechanism based on shared secrets that allows RADIUS servers to limit access from RADIUS clients.
-A RADIUS server is configured with a secret string and only RADIUS clients that have the same secret will be accepted.
+A RADIUS server is configured with a secret string and only RADIUS clients that have the same secret will be accepted.
-You need to configure a shared secret for each server you have configured in radiusclient.conf file in the previous step. The shared secrets are stored in /usr/local/etc/radiusclient-ng/servers file.
+You need to configure a shared secret for each server you have configured in radiusclient.conf file in the previous step. The shared secrets are stored in /usr/local/etc/radiusclient-ng/servers file.
-Each line contains hostname of a RADIUS server and shared secret used in communication with that server. The two values are separated by white spaces. Configure shared secrets for every RADIUS server you are going to use.
+Each line contains hostname of a RADIUS server and shared secret used in communication with that server. The two values are separated by white spaces. Configure shared secrets for every RADIUS server you are going to use.
```
-File "dictionary"
+File "dictionary"
```
-Asterisk uses some attributes that are not included in the dictionary of radiusclient library, therefore it is necessary to add them. A file called dictionary.digium (kept in the contrib dir) was created to list all new attributes used by Asterisk. Add to the end of the main dictionary
+Asterisk uses some attributes that are not included in the dictionary of radiusclient library, therefore it is necessary to add them. A file called dictionary.digium (kept in the contrib dir) was created to list all new attributes used by Asterisk. Add to the end of the main dictionary
-file /usr/local/etc/radiusclient-ng/dictionary the line:
+file /usr/local/etc/radiusclient-ng/dictionary the line:
```bash title=" " linenums="1"
$INCLUDE /path/to/dictionary.digium
@@ -74,49 +74,48 @@ $INCLUDE /path/to/dictionary.digium
##### Download sources tarball from:
-
+
##### Untar, configure, build, and install the server:
```
-root@localhost:/usr/local/src# tar xvfz freeradius-1.1.1.tar.gz
-root@localhost:/usr/local/src# cd freeradius-1.1.1
-root@localhost"/usr/local/src/freeradius-1.1.1# ./configure
-root@localhost"/usr/local/src/freeradius-1.1.1# make
-root@localhost"/usr/local/src/freeradius-1.1.1# make install
+user@localhost:/usr/local/src$ tar xvfz freeradius-1.1.1.tar.gz
+user@localhost:/usr/local/src$ cd freeradius-1.1.1
+user@localhost:/usr/local/src/freeradius-1.1.1$ ./configure
+user@localhost:/usr/local/src/freeradius-1.1.1$ make
+user@localhost:/usr/local/src/freeradius-1.1.1$ sudo make install
```
All the configuration files of FreeRADIUS server will be in /usr/local/etc/raddb directory.
##### Configuration of the FreeRADIUS Server
-There are several files that have to be modified to configure the RADIUS server. These are presented next.
+There are several files that have to be modified to configure the RADIUS server. These are presented next.
##### File "clients.conf"
-File /usr/local/etc/raddb/clients.conf contains description of RADIUS clients that are allowed to use the server. For each of the clients you need to specify its hostname or IP address and also a shared secret. The shared secret must be the same string you configured in radiusclient library.
+File /usr/local/etc/raddb/clients.conf contains description of RADIUS clients that are allowed to use the server. For each of the clients you need to specify its hostname or IP address and also a shared secret. The shared secret must be the same string you configured in radiusclient library.
-Example:
+Example:
```
-client myhost { secret = mysecret shortname = foo }
+client myhost { secret = mysecret shortname = foo }
```
-This fragment allows access from RADIUS clients on "myhost" if they use "mysecret" as the shared secret. The file already contains an entry for localhost (127.0.0.1), so if you are running the RADIUS server on the same host as your Asterisk server, then modify the existing entry instead, replacing the default password.
+This fragment allows access from RADIUS clients on "myhost" if they use "mysecret" as the shared secret. The file already contains an entry for localhost (127.0.0.1), so if you are running the RADIUS server on the same host as your Asterisk server, then modify the existing entry instead, replacing the default password.
##### File "dictionary"
-!!! note
- As of version 1.1.2, the dictionary.digium file ships with FreeRADIUS.
+/// note
+As of version 1.1.2, the dictionary.digium file ships with FreeRADIUS.
+///
-[//]: # (end-note)
+The following procedure brings the dictionary.digium file to previous versions of FreeRADIUS.
-The following procedure brings the dictionary.digium file to previous versions of FreeRADIUS.
-
-File /usr/local/etc/raddb/dictionary contains the dictionary of FreeRADIUS server. You have to add the same dictionary file (dictionary.digium), which you added to the dictionary of radiusclient-ng library. You can include it into the main file, adding the following line at the end of file /usr/local/etc/raddb/dictionary:
+File /usr/local/etc/raddb/dictionary contains the dictionary of FreeRADIUS server. You have to add the same dictionary file (dictionary.digium), which you added to the dictionary of radiusclient-ng library. You can include it into the main file, adding the following line at the end of file /usr/local/etc/raddb/dictionary:
```bash title=" " linenums="1"
-$INCLUDE /path/to/dictionary.digium
+$INCLUDE /path/to/dictionary.digium
```
That will include the same new attribute definitions that are used in radiusclient-ng library so the client and server will understand each other.
@@ -125,13 +124,13 @@ That will include the same new attribute definitions that are used in radiusclie
##### Compilation and installation:
-The module will be compiled as long as the radiusclient-ng library has been detected on your system.
+The module will be compiled as long as the radiusclient-ng library has been detected on your system.
-By default FreeRADIUS server will log all accounting requests into /usr/local/var/log/radius/radacct directory in form of plain text files. The server will create one file for each hostname in the directory. The following example shows how the log files look like.
+By default FreeRADIUS server will log all accounting requests into /usr/local/var/log/radius/radacct directory in form of plain text files. The server will create one file for each hostname in the directory. The following example shows how the log files look like.
-Asterisk now generates Call Detail Records. See /include/asterisk/cel.h for all the fields which are recorded. By default, records in comma separated values will be created in /var/log/asterisk/cel-csv.
+Asterisk now generates Call Detail Records. See /include/asterisk/cel.h for all the fields which are recorded. By default, records in comma separated values will be created in /var/log/asterisk/cel-csv.
-The configuration file for cel_radius.so module is :
+The configuration file for cel_radius.so module is /etc/asterisk/cel.conf
This is where you can set CDR related parameters as well as the path to the radiusclient-ng library configuration file.
diff --git a/docs/Configuration/WebRTC/WebRTC-tutorial-using-SIPML5.md b/docs/Configuration/WebRTC/WebRTC-tutorial-using-SIPML5.md
index c922969fb6..0781294907 100644
--- a/docs/Configuration/WebRTC/WebRTC-tutorial-using-SIPML5.md
+++ b/docs/Configuration/WebRTC/WebRTC-tutorial-using-SIPML5.md
@@ -1,12 +1,12 @@
---
-title: WebRTC tutorial using SIPML5
+title: WebRTC tutorial using sipML5
pageid: 27200129
---
Tutorial Overview
=================
-This tutorial demonstrates basic WebRTC support and functionality within Asterisk. Asterisk will be configured to support a remote WebRTC client, the [sipml5](https://www.doubango.org/sipml5/) client, for the purposes of making calls to/from Asterisk within a web browser. You must be running a recent (as of September 2018) version of a Mozilla or Chromium based web browser.
+This tutorial demonstrates basic WebRTC support and functionality within Asterisk. Asterisk will be configured to support a remote WebRTC client, the [sipML5](https://www.doubango.org/sipml5/) client, for the purposes of making calls to/from Asterisk within a web browser. You must be running a recent (as of September 2018) version of a Mozilla or Chromium based web browser.
Set up Asterisk
==============
@@ -15,7 +15,7 @@ Follow the instructions at [Configuring Asterisk for WebRTC Clients](/Configurat
Configure Asterisk Dialplan
-We'll make a simple dialplan for receiving a test call from the sipml5 client.
+We'll make a simple dialplan for receiving a test call from the sipML5 client.
---
@@ -37,17 +37,17 @@ When using WSS as a transport, Chrome and Firefox will not allow you, by default
Or, for Firefox and Chrome, you can open a separate browser tab and point it to Asterisk's HTTPs server's TLS port and WS path, e.g. `https://pbx.example.com:8089/ws`, and you can manually confirm the security exception.
-Configure SIPML5
+Configure sipML5
================
-!!! info ""
- SIPML5 is a useful client for testing Asterisk. Many real-world users explore other options that may include rolling your own client.
+/// note
+sipML5 is a useful client for testing Asterisk. Many real-world users
+explore other options that may include rolling your own client.
+///
-[//]: # (end-info)
-
-Next, visit - you'll be redirected to
-
-Once there, click the "Enjoy our live demo" link to be directed to the sipml5 client.
+Next, visit [the sipML5 homepage](https://www.doubango.org/sipml5/)
+and click the "Enjoy our live demo" link to be directed to the sipML5
+client.
In the Registration box, use configuration similar to the following:
@@ -95,7 +95,7 @@ Then, you can LogOut and Login and see something like:
Make a test call
----------------
-In the sipml5 Call control box input **200**. Then press the Call button. You'll see a drop-down:
+In the sipML5 Call control box input **200**. Then press the Call button. You'll see a drop-down:

diff --git a/docs/Contributing-to-the-Documentation.md b/docs/Contributing-to-the-Documentation.md
index 1981c28baa..cd0a665daf 100644
--- a/docs/Contributing-to-the-Documentation.md
+++ b/docs/Contributing-to-the-Documentation.md
@@ -374,22 +374,6 @@ Pay attention
///
///
-/// danger | Danger! (this is a *real* admonition, not an example)
-Most of the pages that were converted from the old Confluence wiki use the `!!!` admonition style. For example:
-
-```
-!!! tip
- The `-R` option will also attach a remote console - however, it will attempt to automatically
- reconnect to Asterisk if for some reason the connection is broken. This is particularly useful
- if your remote console restarts Asterisk.
-
-[//]: # (end-tip)
-```
-
-That style is only supported for backwards compatibility and must not be used in new content. If you are editing a page with old style admonitions, you MUST convert them ALL to the new style. Mixing old and new styles will most probably cause the page not to be rendered correctly.
-
-///
-
#### Details
"details" is a special type of admonition whose content is initially collapsed.
diff --git a/docs/Deployment/Basic-PBX-Functionality/Auto-attendant-and-IVR-Menus/Creating-a-Simple-IVR-Menu.md b/docs/Deployment/Basic-PBX-Functionality/Auto-attendant-and-IVR-Menus/Creating-a-Simple-IVR-Menu.md
index 165eb5bf9d..e4273f1f1a 100644
--- a/docs/Deployment/Basic-PBX-Functionality/Auto-attendant-and-IVR-Menus/Creating-a-Simple-IVR-Menu.md
+++ b/docs/Deployment/Basic-PBX-Functionality/Auto-attendant-and-IVR-Menus/Creating-a-Simple-IVR-Menu.md
@@ -5,10 +5,12 @@ pageid: 4817383
Let's go ahead and apply what we've learned about the various dialplan applications by building a very simple auto-attendant menu. It is common practice to create an auto-attendant or IVR menu in a new context, so that it remains independant of the other extensions in the dialplan. Please add the following to your dialplan (the **extensions.conf** file) to create a new **demo-menu** context. In this new context, we'll create a simple menu that prompts you to enter one or two, and then it will read back what you're entered.
-!!! info "Sample Sound Prompts"
- Please note that the example below (and many of the other examples in this guide) use sound prompts that are part of the *extra* sounds packages. If you didn't install the extra sounds earlier, now might be a good time to do that.
-
-[//]: # (end-info)
+/// tip | Sample Sound Prompts
+Please note that the example below (and many of the other examples in
+this guide) use sound prompts that are part of the *extra* sounds
+packages. If you didn't install the extra sounds earlier, now might be
+a good time to do that.
+///
```
[demo-menu]
diff --git a/docs/Deployment/Basic-PBX-Functionality/Making-a-Phone-Call.md b/docs/Deployment/Basic-PBX-Functionality/Making-a-Phone-Call.md
index 094a1f1bc6..1271989357 100644
--- a/docs/Deployment/Basic-PBX-Functionality/Making-a-Phone-Call.md
+++ b/docs/Deployment/Basic-PBX-Functionality/Making-a-Phone-Call.md
@@ -18,17 +18,23 @@ As you can see, Alice called extension **6002** in the [from-internal] context,
At this point, you have a very basic PBX. It has two extensions which can dial each other, but that's all. Before we move on, however, let's review a few basic troubleshooting steps that will help you be more successful as you learn about Asterisk.
-!!! tip
- ##### Basic PBX Troubleshooting
-
- The most important troubleshooting step is to set your verbosity level to three (or higher), and watch the command-line interface for errors or warnings as calls are placed.
-
- To ensure that your SIP phones are registered, type **sip show peers**(chan_sip), or **pjsip show endpoints**(chan_pjsip) at the Asterisk CLI.
-
- To see which context your SIP phones will send calls to, type **sip show users**(chan_sip) or **pjsip show endpoint **(chan_pjsip).
-
- To ensure that you've created the extensions correctly in the **[from-internal]** context in the dialplan, type **dialplan show from-internal**.
-
- To see which extension will be executed when you dial extension **6002**, type **dialplan show 6002@from-internal**.
-
-[//]: # (end-tip)
+/// tip | Basic PBX Troubleshooting
+The most important troubleshooting step is to set your verbosity level
+to three (or higher), and watch the command-line interface for errors
+or warnings as calls are placed.
+
+To ensure that your SIP phones are registered, type `sip show peers`
+(for `chan_sip`), or `pjsip show endpoints` (for `chan_pjsip`) at the
+Asterisk CLI.
+
+To see which context your SIP phones will send calls to, type `sip
+show users` (for `chan_sip`) or `pjsip show endpoint `
+(for `chan_pjsip`).
+
+To ensure that you've created the extensions correctly in the
+`[from-internal]` context in the dialplan, type `dialplan show
+from-internal`.
+
+To see which extension will be executed when you dial extension
+`6002`, type `dialplan show 6002@from-internal`.
+///
diff --git a/docs/Deployment/Basic-PBX-Functionality/Registering-Phones-to-Asterisk.md b/docs/Deployment/Basic-PBX-Functionality/Registering-Phones-to-Asterisk.md
index 76d2c600bc..81b661f7a3 100644
--- a/docs/Deployment/Basic-PBX-Functionality/Registering-Phones-to-Asterisk.md
+++ b/docs/Deployment/Basic-PBX-Functionality/Registering-Phones-to-Asterisk.md
@@ -26,17 +26,17 @@ In the example above, you can see that Alice's phone has not registered, but Bob
For chan_pjsip you can use **pjsip show endpoints**.
-!!! tip
- Debugging SIP Registrations
-
- If you're having trouble getting a phone to register to Asterisk, make sure you watch the Asterisk CLI with the verbosity level set to at least three while you reboot the phone. You'll likely see error messages indicating what the problem is, like in this example:
-[//]: # (end-tip)
+/// tip | Debugging SIP Registrations
+If you're having trouble getting a phone to register to Asterisk, make
+sure you watch the Asterisk CLI with the verbosity level set to at
+least three while you reboot the phone. You'll likely see error
+messages indicating what the problem is, like in this example:
```
-NOTICE[22214]: chan_sip.c:20824 handle_request_register: Registration from '"Alice"
-' failed for '192.168.5.103' - Wrong password
-
----
-
-As you can see, Asterisk has detected that the password entered into the phone doesn't match the secret setting in the [demo-alice] section of sip.conf.
+NOTICE[22214]: chan_sip.c:20824 handle_request_register: Registration from '"Alice" ' failed for '192.168.5.103' - Wrong password
```
+
+As you can see, Asterisk has detected that the password entered into
+the phone doesn't match the `secret` setting in the `[demo-alice]`
+section of `sip.conf`.
+///
diff --git a/docs/Deployment/Deployment-In-Your-Network.md b/docs/Deployment/Deployment-In-Your-Network.md
index 52cca48980..73b85e75eb 100644
--- a/docs/Deployment/Deployment-In-Your-Network.md
+++ b/docs/Deployment/Deployment-In-Your-Network.md
@@ -3,12 +3,10 @@ title: Deployment In Your Network
pageid: 27200289
---
-!!! warning
- Under Construction
+/// warning | Under Construction
+Top-level page for pages on dealing with NAT, Firewalling and more in
+relation to Asterisk.
-[//]: # (end-warning)
-
-!!! note
- Top-level page for pages on dealing with NAT, Firewalling and more in relation to Asterisk.
-
-[//]: # (end-note)
+If you would like to help write this section, please consider
+[contributing to the documentation](/Contributing-to-the-Documentation/).
+///
diff --git a/docs/Deployment/Emergency-Calling.md b/docs/Deployment/Emergency-Calling.md
index e824358940..3d45e766c0 100644
--- a/docs/Deployment/Emergency-Calling.md
+++ b/docs/Deployment/Emergency-Calling.md
@@ -3,12 +3,10 @@ title: Emergency Calling
pageid: 27200305
---
-!!! warning
- Under Construction
+/// warning | Under Construction
+Top-level page for resources, tutorials or ideas regarding emergency
+dialing and calling, E-911, etc.
-[//]: # (end-warning)
-
-!!! note
- Top-level page for resources, tutorials or ideas regarding emergency dialing and calling, E-911, etc.
-
-[//]: # (end-note)
+If you would like to help write this section, please consider
+[contributing to the documentation](/Contributing-to-the-Documentation/).
+///
diff --git a/docs/Deployment/Enhanced-Messaging/Conference-Bridge-Messaging.md b/docs/Deployment/Enhanced-Messaging/Conference-Bridge-Messaging.md
index 9b2d935640..0d5a094795 100644
--- a/docs/Deployment/Enhanced-Messaging/Conference-Bridge-Messaging.md
+++ b/docs/Deployment/Enhanced-Messaging/Conference-Bridge-Messaging.md
@@ -138,10 +138,15 @@ enable_events=yes ; If enabled, recipients who joined the bridge via a channel d
Of course, your configuration will be different but those are the parameters that need to be set.
-!!! warning
- If a user connects to the bridge via a DAHDI channel or some other non-SIP based channel, they may receive messages in another format, like SMS, which is probably not a good idea. To prevent this, you may want to use two different user profiles, one with events enabled and one without. You could then do some simple dialplan logic to look at the incoming channel technology and call ConfBridge() with the appropriate user profile.
-
-[//]: # (end-warning)
+/// warning
+If a user connects to the bridge via a DAHDI channel or some other
+non-SIP based channel, they may receive messages in another format,
+like SMS, which is probably not a good idea. To prevent this, you may
+want to use two different user profiles, one with events enabled and
+one without. You could then do some simple dialplan logic to look at
+the incoming channel technology and call ConfBridge() with the
+appropriate user profile.
+///
In the browser
--------------
diff --git a/docs/Deployment/Geolocation/index.md b/docs/Deployment/Geolocation/index.md
index 02183137bc..6cb55d1856 100644
--- a/docs/Deployment/Geolocation/index.md
+++ b/docs/Deployment/Geolocation/index.md
@@ -5,12 +5,17 @@ pageid: 49153258
# Geolocation
-!!! warning
- Before you go off on a geolocation configuration spree, you'll need to understand a few things about Geolocation itself. First, i's not a single specification and second, it's been around a while. The first references I could find date back to 2002. Since then there have been innumerable changes including IETF drafts that expired 15 years ago that are still being returned by Google searches.
-
- With that in mind, please do your own research and coordinate closely with your partners to validate your configuration.
-
-[//]: # (end-warning)
+/// warning
+Before you go off on a geolocation configuration spree, you'll need to
+understand a few things about Geolocation itself. First, it's not a
+single specification and, second, it's been around a while. The first
+references I could find date back to 2002. Since then there have been
+innumerable changes including IETF drafts that expired 15 years ago
+that are still being returned by Google searches.
+
+With that in mind, please do your own research and coordinate closely
+with your partners to validate your configuration.
+///
As it applies to Asterisk, Geolocation is the process of...
diff --git a/docs/Deployment/Important-Security-Considerations/Dialplan-Security.md b/docs/Deployment/Important-Security-Considerations/Dialplan-Security.md
index e0fb3ab05e..fb45ba10cd 100644
--- a/docs/Deployment/Important-Security-Considerations/Dialplan-Security.md
+++ b/docs/Deployment/Important-Security-Considerations/Dialplan-Security.md
@@ -2,9 +2,8 @@
First and foremost remember this:
-!!! danger "Extension Isolation"
-
- Use the extension contexts to isolate outgoing or toll services from any incoming connections.
+/// tip | Use the extension contexts to isolate outgoing or toll services from any incoming connections.
+///
You should consider that if any channel, incoming line, etc. can enter
an extension context that it has the capability of accessing any
@@ -37,8 +36,8 @@ include => default
exten => 6123,1,Dial(DAHDI/1)
```
-!!! tip "Remove Demo Contexts"
-
- Do not forget to take the `demo` context out of your default
- context. There isn't really a security reason, it just will keep
- people from wanting to play with your Asterisk setup remotely.
+/// danger | Remove Demo Contexts
+Do not forget to take the `demo` context out of your default
+context. There isn't really a security reason, it just will keep
+people from wanting to play with your Asterisk setup remotely.
+///
diff --git a/docs/Deployment/Important-Security-Considerations/index.md b/docs/Deployment/Important-Security-Considerations/index.md
index 5e896045b5..fd52c69a8c 100644
--- a/docs/Deployment/Important-Security-Considerations/index.md
+++ b/docs/Deployment/Important-Security-Considerations/index.md
@@ -5,12 +5,12 @@ that are pertinent to Asterisk. Just because you're already familiar
with securing your Linux machine, doesn't mean you can skip this
section.
-!!! danger
-
- Please read the following important security related
- information. Improper configuration of Asterisk could allow
- unauthorized use of your facilities, potentially incurring
- substantial charges.
+/// danger
+Please read the following important security related
+information. Improper configuration of Asterisk could allow
+unauthorized use of your facilities, potentially incurring substantial
+charges.
+///
Asterisk security involves both network security (encryption,
authentication) as well as dialplan security (authorization - who can
diff --git a/docs/Deployment/Internationalization-and-Localization/index.md b/docs/Deployment/Internationalization-and-Localization/index.md
index 5f24e88cbd..2c2f3f10c5 100644
--- a/docs/Deployment/Internationalization-and-Localization/index.md
+++ b/docs/Deployment/Internationalization-and-Localization/index.md
@@ -3,12 +3,11 @@ title: Overview
pageid: 27200307
---
-!!! warning
- Under Construction
-
-[//]: # (end-warning)
-
-!!! note
- Top-level page for pages discussing Asterisk's capabilities for adapting to various language environments for text, sound prompts and more.
-
-[//]: # (end-note)
+/// warning | Under Construction
+Top-level page for pages discussing Asterisk's capabilities for
+adapting to various language environments for text, sound prompts and
+more.
+
+If you would like to help write this section, please consider
+[contributing to the documentation](/Contributing-to-the-Documentation/).
+///
diff --git a/docs/Deployment/PSTN-Connectivity/Signaling-System-Number-7.md b/docs/Deployment/PSTN-Connectivity/Signaling-System-Number-7.md
index c62baf91c3..96c58d8e9d 100644
--- a/docs/Deployment/PSTN-Connectivity/Signaling-System-Number-7.md
+++ b/docs/Deployment/PSTN-Connectivity/Signaling-System-Number-7.md
@@ -3,10 +3,9 @@ title: Signaling System Number 7
pageid: 4260059
---
-!!! warning
- The LibSS7 project is not actively developed or maintained.
-
-[//]: # (end-warning)
+/// warning
+The LibSS7 project is not actively developed or maintained.
+///
### Where to get LibSS7?
@@ -38,33 +37,37 @@ In order to use libss7, you must get at least the following versions of DAHDI an
You must then do a `make; make install` in each of the directories that you installed in the given order (DAHDI first, libss7 second, and Asterisk last).
-!!! note
- In order to check out the code, you must have the subversion client installed. This is how to check them out from the public subversion server.
+/// note
+In order to check out the code, you must have the subversion client
+installed. This is how to check them out from the public subversion
+server.
- These are the commands you would type to install them:
-[//]: # (end-note)
+These are the commands you would type to install them:
```
-`svn co http://svn.digium.com/svn/dahdi/linux/trunk dahdi-trunk`
-`cd dahdi-trunk`
-`make; make install`
-
-`svn co http://svn.digium.com/svn/dahdi/tools/trunk dahdi-tools`
-`cd dahdi-tools`
-`./configure; make; make install`
-
-`svn co http://svn.digium.com/svn/libss7/trunk libss7-trunk`
-`cd libss7-trunk`
-`make; make install`
-
-`svn co http://svn.digium.com/svn/asterisk/trunk asterisk-trunk`
-`cd asterisk-trunk`
-`./configure; make; make install;`
-
----
+user@host:~$ svn co http://svn.digium.com/svn/dahdi/linux/trunk dahdi-trunk
+user@host:~$ cd dahdi-trunk
+user@host:~/dahdi-trunk$ make; sudo make install
+user@host:~/dahdi-trunk$ cd ..
+
+user@host:~$ svn co http://svn.digium.com/svn/dahdi/tools/trunk dahdi-tools
+user@host:~$ cd dahdi-tools
+user@host:~/dahdi-tools$ ./configure; make; sudo make install
+user@host:~/dahdi-tools$ cd ..
+
+user@host:~$ svn co http://svn.digium.com/svn/libss7/trunk libss7-trunk
+user@host:~$ cd libss7-trunk
+user@host:~/libss7-trunk$ make; make sudo install
+user@host:~/libss7-trunk$ cd ..
+
+user@host:~$ svn co http://svn.digium.com/svn/asterisk/trunk asterisk-trunk
+user@host:~$ cd asterisk-trunk
+user@host:~/asterisk-trunk$ ./configure; make; sudo make install
+user@host:~/asterisk-trunk$ cd ..
+```
This should build DAHDI, libss7, and Asterisk with SS7 support.
-```
+///
In the past, there was a special asterisk-ss7 branch to use which contained the SS7 code. That code has been merged back into the trunk version of Asterisk, and the old asterisk-ss7 branch has been deprecated and removed. If you are still using the asterisk-ss7 branch, it will not work against the current version of libss7, and you should switch to asterisk-trunk instead.
diff --git a/docs/Deployment/Phone-Provisioning-in-Asterisk/Creating-Phone-Profiles.md b/docs/Deployment/Phone-Provisioning-in-Asterisk/Creating-Phone-Profiles.md
index 2412080c4e..fca92664f3 100644
--- a/docs/Deployment/Phone-Provisioning-in-Asterisk/Creating-Phone-Profiles.md
+++ b/docs/Deployment/Phone-Provisioning-in-Asterisk/Creating-Phone-Profiles.md
@@ -6,29 +6,35 @@ pageid: 5243051
A phone profile is basically a list of files that a particular group of phones needs to function. For most phone types there are files that are identical for all phones (firmware, for instance) as well as a configuration file that is specific to individual phones. res_phoneprov breaks these two groups of files into static files and dynamic files, respectively. A sample profile:
```
-[polycom]
-staticdir => configs/
-mime_type => text/xml
-setvar => CUSTOM_CONFIG=/var/lib/asterisk/phoneprov/configs/custom.cfg
-static_file => bootrom.ld,application/octet-stream
-static_file => bootrom.ver,plain/text
-static_file => sip.ld,application/octet-stream
-static_file => sip.ver,plain/text
-static_file => sip.cfg
-static_file => custom.cfg
-${TOLOWER(${MAC})}.cfg => 000000000000.cfg
+[polycom]
+staticdir => configs/
+mime_type => text/xml
+setvar => CUSTOM_CONFIG=/var/lib/asterisk/phoneprov/configs/custom.cfg
+static_file => bootrom.ld,application/octet-stream
+static_file => bootrom.ver,plain/text
+static_file => sip.ld,application/octet-stream
+static_file => sip.ver,plain/text
+static_file => sip.cfg
+static_file => custom.cfg
+${TOLOWER(${MAC})}.cfg => 000000000000.cfg
${TOLOWER(${MAC})}-phone.cfg => 000000000000-phone.cfg config/
-${TOLOWER(${MAC})} => polycom.xml
+${TOLOWER(${MAC})} => polycom.xml
${TOLOWER(${MAC})}-directory.xml => 000000000000-directory.xml
```
-A static_file is set by specifying the file name, relative to AST_DATA_DIR/phoneprov. The mime-type of the file can optionally be specified after a comma. If staticdir is set, all static files will be relative to the subdirectory of AST_DATA_DIR/phoneprov specified.
+A static_file is set by specifying the file name, relative to AST_DATA_DIR/phoneprov. The mime-type of the file can optionally be specified after a comma. If staticdir is set, all static files will be relative to the subdirectory of AST_DATA_DIR/phoneprov specified.
-Since phone-specific config files generally have file names based on phone-specifc data, dynamic filenames in res_phoneprov can be defined with Asterisk dialplan function and variable substitution. In the above example, ${TOLOWER(${MAC})}.cfg = 000000000000.cfg would define a relative URI to be served that matches the format of MACADDRESS.cfg, all lower case. A request for that file would then point to the template found at AST_DATA_DIR/phoneprov/000000000000.cfg. The template can be followed by a comma and mime-type. Notice that the dynamic filename (URI) can contain contain directories. Since these files are dynamically generated, the config file itself does not reside on the filesystem-only the template. To view the generated config file, open it in a web browser. If the config file is XML, Firefox should display it. Some browsers will require viewing the source of the page requested.
+Since phone-specific config files generally have file names based on phone-specifc data, dynamic filenames in res_phoneprov can be defined with Asterisk dialplan function and variable substitution. In the above example, ${TOLOWER(${MAC})}.cfg = 000000000000.cfg would define a relative URI to be served that matches the format of MACADDRESS.cfg, all lower case. A request for that file would then point to the template found at AST_DATA_DIR/phoneprov/000000000000.cfg. The template can be followed by a comma and mime-type. Notice that the dynamic filename (URI) can contain contain directories. Since these files are dynamically generated, the config file itself does not reside on the filesystem-only the template. To view the generated config file, open it in a web browser. If the config file is XML, Firefox should display it. Some browsers will require viewing the source of the page requested.
-A default mime-type for the profile can be defined by setting mime-type. If a custom variable is required for a template, it can be specified with setvar. Variable substitution on this value is done while building the route list, so ${USERNAME} would expand to the username of the users.conf user that registers the dynamic filename.
+A default mime-type for the profile can be defined by setting mime-type. If a custom variable is required for a template, it can be specified with setvar. Variable substitution on this value is done while building the route list, so ${USERNAME} would expand to the username of the users.conf user that registers the dynamic filename.
-!!! note
- Any dialplan function that is used for generation of dynamic file names MUST be loaded before res_phoneprov. Add "preload = modulename.so" to modules.conf for required functions. In the example above, "preload = func_strings.so" would be required.
+/// note
+Any dialplan function that is used for generation of dynamic file
+names *must* be loaded before `res_phoneprov`. Add a `preload`
+statement to `modules.conf` for required any functions. For the
+example above, you would add:
-[//]: # (end-note)
+```text title="modules.conf"
+preload = func_strings.so
+```
+///
diff --git a/docs/Deployment/Reference-Use-Cases-for-Asterisk/Super-Awesome-Company.md b/docs/Deployment/Reference-Use-Cases-for-Asterisk/Super-Awesome-Company.md
index 2ebac03187..bd889468f1 100644
--- a/docs/Deployment/Reference-Use-Cases-for-Asterisk/Super-Awesome-Company.md
+++ b/docs/Deployment/Reference-Use-Cases-for-Asterisk/Super-Awesome-Company.md
@@ -67,10 +67,10 @@ SAC, located in the ghost town of Waldo, Alabama, is fortunate to have access to
WaldoCom, as a traditional communications provider will allow SAC to purchase telephone service. But, because the calling plans across the WaldoCom telephone network must be paid in Confederate dollars, SAC has instead decided to contract with Digium, Inc. for voice services. Digium provides inbound and outbound calling over the Internet as a "SIP Trunk" using SAC's existing Internet connectivity.
-!!! note
- WaldoCom has ceased trading in Bitcoin after having been accused by the FBI of running the Silk Road as the Dread Pirate Roberts.
-
-[//]: # (end-note)
+/// note
+WaldoCom has ceased trading in Bitcoin after having been accused by
+the FBI of running the Silk Road as the Dread Pirate Roberts.
+///
SAC has purchased a well-loved Linksys WRT54G, aka "Old Unreliable," from the now defunct Waldo Happy Hands Club. They intend to use it to terminate the Ethernet connectivity from WaldoCom. WaldoCom provides a single IPv4 address across the link - 203.0.113.1. The Linksys will provide NAT translation from the Internet to the internal SAC campus network. Within the SAC network, the 10.0.0.0/8 address space will be used.
diff --git a/docs/Deployment/Secure-Calling/Secure-Calling-Tutorial/Installing-Blink-SIP-client.md b/docs/Deployment/Secure-Calling/Secure-Calling-Tutorial/Installing-Blink-SIP-client.md
index e95aacb64e..78e04545c4 100644
--- a/docs/Deployment/Secure-Calling/Secure-Calling-Tutorial/Installing-Blink-SIP-client.md
+++ b/docs/Deployment/Secure-Calling/Secure-Calling-Tutorial/Installing-Blink-SIP-client.md
@@ -57,7 +57,7 @@ using set_wakeup_fd
```
2. Blink should launch and show up within your graphical desktop.
-!!! note
- Blink doesn't appear to support call forwarding or call transfers, so don't expect to do anything too fancy!
-
-[//]: # (end-note)
+/// note
+Blink doesn't appear to support call forwarding or call transfers, so
+don't expect to do anything too fancy!
+///
diff --git a/docs/Deployment/Secure-Calling/Secure-Calling-Tutorial/index.md b/docs/Deployment/Secure-Calling/Secure-Calling-Tutorial/index.md
index ef8f60770f..f3ac7c76cd 100644
--- a/docs/Deployment/Secure-Calling/Secure-Calling-Tutorial/index.md
+++ b/docs/Deployment/Secure-Calling/Secure-Calling-Tutorial/index.md
@@ -6,10 +6,10 @@ pageid: 8127019
Overview
========
-!!! note
- This tutorial makes use of SRTP and TLS. SRTP support was added in Asterisk 1.8, TLS was added in 1.6.
-
-[//]: # (end-note)
+/// note
+This tutorial makes use of SRTP and TLS. SRTP support was added in
+Asterisk 1.8, TLS was added in 1.6.
+///
So you'd like to make some secure calls.
@@ -82,15 +82,14 @@ tmp.cfg
Next, copy the malcolm.pem and ca.crt files to the computer running the Blink soft client.
-!!! tip .p12 Client Certificates
- If your client requires a .p12 certificate file instead, you can generate that using openssl like:
-[//]: # (end-tip)
+/// tip | `.p12` Client Certificates
+If your client requires a `.p12` certificate file instead, you can
+generate that using OpenSSL like:
```
-# openssl pkcs12 -export -out MySuperClientCert.p12 -inkey ca.key -in ca.crt -certfile asterisk.crt
-
----
+openssl pkcs12 -export -out MySuperClientCert.p12 -inkey ca.key -in ca.crt -certfile asterisk.crt
```
+///
Asterisk chan_pjsip configuration
----------------------------------
diff --git a/docs/Development/Asterisk-Bug-Bounties.md b/docs/Development/Asterisk-Bug-Bounties.md
index 61d2f31f64..ede077cb77 100644
--- a/docs/Development/Asterisk-Bug-Bounties.md
+++ b/docs/Development/Asterisk-Bug-Bounties.md
@@ -22,14 +22,17 @@ If an Asterisk issue is present for the new feature or bug fix on the [Asterisk
It is the case that some corporate users of Asterisk will pay you hard cash for your work on developing patches and bug fixes. Often, there are reasons that a firm can't or won't fix/patch Asterisk internally, and wants to outsource that work to the larger Asterisk community. The Asterisk community wins whenever a bounty bug is resolved because everyone benefits from that work. The company sponsoring the bounty wins, because their specific problem is fixed. And, of course, the programmer wins because they're paid.
-!!! warning
- Bounty arrangements are made between the sponsor and the programmer, and are NOT via Digium or any other third-party middleman. Payment terms, guarantees, etc. etc. are the problem of the two parties (programmer and bounty sponsor) and the bugtracker simply permits an open forum for discussion of the problems and for the bounty.
-
-[//]: # (end-warning)
+/// warning
+Bounty arrangements are made between the sponsor and the programmer,
+and are *not* via Sangoma or any other third-party middleman. Payment
+terms, guarantees, etc. etc. are the problem of the two parties
+(programmer and bounty sponsor) and the bugtracker simply permits an
+open forum for discussion of the problems and for the bounty.
+///
### But what about ... ?
-If the author has signed a contributor license agreement, and the patch is in the bugtracker, it's considered fair game to be included in the version of Asterisk that Digium maintains. These patches follow the same licensing rules as everything else for Asterisk that is submitted to the bug tracker.
+If the author has signed a contributor license agreement, and the patch is in the bugtracker, it's considered fair game to be included in the version of Asterisk that Sangoma maintains. These patches follow the same licensing rules as everything else for Asterisk that is submitted to the bug tracker.
If there are multiple resolutions to a bounty, it is the sponsor's sole discretion to award the payment or not. All bug reports that are bounty oriented will be public and GPL, and we will actively discourage/delete non-GPL arrangements that are based on bug reports in the open-community bugtracker (i.e.: you will incur the wrath of the bug marshal posse.)
diff --git a/docs/Development/Asterisk-Open-Source-Maintainers.md b/docs/Development/Asterisk-Open-Source-Maintainers.md
index ffd2c97c9e..3ca48ab04f 100644
--- a/docs/Development/Asterisk-Open-Source-Maintainers.md
+++ b/docs/Development/Asterisk-Open-Source-Maintainers.md
@@ -9,7 +9,7 @@ Sangoma Core Asterisk Team
Sangoma employs a team of software development and technical professionals who work with the Asterisk open source project on a daily or weekly basis. Many of these individuals work on code all over the project but tend to stick to [core support](/Asterisk-Community/Asterisk-Module-Support-States) areas of the project. This team also maintains the documentation included with Asterisk and on the wiki. Any given day you can find many of these folks in the [Asterisk IRC chat rooms](/Asterisk-Community/IRC).
| Name | IRC/Forum/List name |
-| -------------------------------------------------------------- | ------------------- |
+|----------------------------------------------------------------|---------------------|
| :material-github: [Joshua Colp](https://github.com/jcolp) | jcolp, file |
| :material-github: [George Joseph](https://github.com/gtjoseph) | gjoseph |
| :material-github: [Ben Ford](https://github.com/bkford) | bford |
@@ -22,12 +22,15 @@ Volunteer Maintainers for Extended Support Modules
There's no question that Asterisk is a huge project that interacts with a wide variety of devices over numerous protocols. As such, a number of Asterisk modules (typically labelled as [extended](/Asterisk-Community/Asterisk-Module-Support-States)) are primarily supported by the open source community. A number of caring, dedicated community members have volunteered to be the lead developer responsible for handling issues filed against these modules. Issues reported on the issue tracker against these areas will (most likely) be assigned to these individuals for handling.
-!!! note
- If you'd like to act as the primary maintainer in an area of Asterisk development that is currently marked as "extended" and is not listed below, please contact the [asterisk-dev mailing list](/Asterisk-Community/Mailing-Lists).
-[//]: # (end-note)
+/// note
+If you'd like to act as the primary maintainer in an area of Asterisk
+development that is currently marked as "extended" and is not listed
+below, please contact the
+[asterisk-dev mailing list](/Asterisk-Community/Mailing-Lists).
+///
| Module | Related File(s) | Issue Owner |
-| ----------------------------- | ---------------------- | ------------------------------------------------------------------------------------ |
+|-------------------------------|------------------------|--------------------------------------------------------------------------------------|
| Open Objective H.323 Protocol | chan_ooh323 | Alexandr Anikin (may213) |
| Unified Networks IP Stimulus | chan_unistim | Igor Goncharovsky (igorg) |
| Cisco SCCP | chan_skinny | Damien Wedhorn (wedhorn) |
diff --git a/docs/Development/Debugging/CLI-commands-useful-for-debugging.md b/docs/Development/Debugging/CLI-commands-useful-for-debugging.md
index 4842b1c0c0..13416807cd 100644
--- a/docs/Development/Debugging/CLI-commands-useful-for-debugging.md
+++ b/docs/Development/Debugging/CLI-commands-useful-for-debugging.md
@@ -7,10 +7,10 @@ Example output on this page is from Asterisk 11.
### core show locks
-!!! warning Warning!
- Compiling with DEBUG_THREADS can reduce the performance of Asterisk. Primarily in terms of CPU consumption.
-
-[//]: # (end-warning)
+/// warning
+Compiling with `DEBUG_THREADS` can reduce the performance of
+Asterisk. Primarily in terms of CPU consumption.
+///
This command is not available until you compile with [DEBUG_THREADS](/Getting-Started/Installing-Asterisk/Installing-Asterisk-From-Source/Using-Menuselect-to-Select-Asterisk-Options) and it is generally preferred that you also compile with [BETTER_BACKTRACES](/Getting-Started/Installing-Asterisk/Installing-Asterisk-From-Source/Using-Menuselect-to-Select-Asterisk-Options) to get the most useful output.
diff --git a/docs/Development/Debugging/Getting-a-Backtrace-Asterisk-versions-13.14.0-and-14.3.0.md b/docs/Development/Debugging/Getting-a-Backtrace-Asterisk-versions-13.14.0-and-14.3.0.md
index d05d0673c7..287d91d159 100644
--- a/docs/Development/Debugging/Getting-a-Backtrace-Asterisk-versions-13.14.0-and-14.3.0.md
+++ b/docs/Development/Debugging/Getting-a-Backtrace-Asterisk-versions-13.14.0-and-14.3.0.md
@@ -30,17 +30,19 @@ The interesting information is located in the last column.
Second, your copy of Asterisk must have been built without optimization or the backtrace will be (nearly) unusable. This can be done by selecting the 'DONT_OPTIMIZE' option in the Compiler Flags submenu in the 'make menuselect' tree before building Asterisk.
-!!! note
- | Using BETTER_BACKTRACES |
- | --- |
- | As of Asterisk versions 1.4.40, 1.6.2.17, and 1.8.3, the option BETTER_BACKTRACES which uses libbfd, will provide better symbol information within both the Asterisk binary, as well as loaded modules, to assist when using inline backtraces to track down problems. **It is recommended that you enable both DONT_OPTIMIZE and BETTER_BACKTRACES** |
-
-[//]: # (end-note)
-
-!!! tip
- libbfd is included in the binutils-devel package on CentOS / RHEL, or the binutils-dev package on Debian / Ubuntu.
-
-[//]: # (end-tip)
+/// note | Using `BETTER_BACKTRACES`
+As of Asterisk versions 1.4.40, 1.6.2.17, and 1.8.3, the option
+`BETTER_BACKTRACES` which uses libbfd, will provide better symbol
+information within both the Asterisk binary, as well as loaded
+modules, to assist when using inline backtraces to track down
+problems. **It is recommended that you enable both `DONT_OPTIMIZE` and
+`BETTER_BACKTRACES`
+///
+
+/// tip
+libbfd is included in the binutils-devel package on CentOS / RHEL, or
+the binutils-dev package on Debian / Ubuntu.
+///
Running a production server with DONT_OPTIMIZE is generally safe. You'll notice the binary files may be a bit larger, but in terms of Asterisk performance, impact should be negligible.
@@ -55,10 +57,11 @@ There are two kind of backtraces (aka 'bt') which are useful: bt and bt full.
Now that we've verified the core file has been written to disk, the final part is to extract 'bt' from the core file. Core files are pretty big, don't be scared, it's normal.
-!!! note
- Don't attach core files on the bug tracker as they are only useful on the machine they were generated on. We only need the output of the 'bt' and 'bt full.'
-
-[//]: # (end-note)
+/// note
+Don't attach core files on the bug tracker as they are only useful on
+the machine they were generated on. We only need the output of the
+`bt` and `bt full`.
+///
For extraction, we use a really nice tool, called gdb. To verify that you have gdb installed on your system:
@@ -75,16 +78,17 @@ This GDB was configured as "i486-linux-gnu"...
If you don't have gdb installed, go install gdb. You should be able to install using something like: apt-get install gdb **or** yum install gdb
-!!! tip
- Just run the following command to get the output into the backtrace.txt file, ready for uploading to the issue tracker. Be sure to change the name of the core file to your actual core dump file:
-
-[//]: # (end-tip)
+/// tip
+Just run the following command to get the output into the
+`backtrace.txt` file, ready for uploading to the issue tracker. Be sure
+to change the name of the core file to your actual core dump file:
```bash title=" " linenums="1"
# gdb -se "asterisk" -ex "bt full" -ex "thread apply all bt" --batch -c core > /tmp/backtrace.txt
```
+///
-Now load the core file in gdb with the following command. This will also save the output of gdb to the /tmp/backtract.txt file.
+Now load the core file in gdb with the following command. This will also save the output of gdb to the `/tmp/backtrace.txt` file.
```bash title=" " linenums="1"
# gdb -se "asterisk" -c core | tee /tmp/backtrace.txt
@@ -206,10 +210,12 @@ Getting Information For A Deadlock
Whenever collecting information about a deadlock it is useful to have additional information about the threads involved. We can generate this information by attaching to a running Asterisk process and gathering that information. Follow the two steps below to collect debug that will be useful to Asterisk developers.
-!!! note ** In the Compiler Flags menu of menuselect and you should enable **DEBUG_THREADS**, **DONT_OPTIMIZE** and **BETTER_BACKTRACES
- . Then, you need to recompile, re-install, and restart Asterisk before following the steps below.
-
-[//]: # (end-note)
+/// note
+In the Compiler Flags menu of menuselect and you should enable
+`DEBUG_THREADS`, `DONT_OPTIMIZE` and `BETTER_BACKTRACES`. Then, you
+need to recompile, re-install, and restart Asterisk before following
+the steps below.
+///
**Use GDB to collect a backtrace:** You can easily attach to a running Asterisk process, gather the output required and then detach from the process all in a single step. Since this gathers information from the running Asterisk process, you want to make sure you run this command immediately before or after gathering the output of '[core show locks](/Development/Debugging/CLI-commands-useful-for-debugging)'. Execute the following command and upload the resulting backtrace-threads.txt file to the Asterisk issue tracker:
@@ -261,16 +267,13 @@ If you think there is a memory corruption issue then you'll want to run valgrind
Uploading Your Information To The Issue Tracker
-----------------------------------------------
-You're now ready to upload your files to the Asterisk issue tracker (located at ).
-
-!!! note
- Please ATTACH your output! DO NOT paste it as a note!
-
- The menu item is located on the JIRA issue report under: ( More > Attach Files )
+You're now ready to upload your files to the [Asterisk issue tracker](https://github.com/asterisk/asterisk/issues).
-[//]: # (end-note)
+/// note
+Please *attach* your output as a file. Do not paste it as a comment.
+///
Questions?
==========
-If you have questions or comments regarding this documentation, feel free to pass by the #asterisk-bugs channel on irc.freenode.net.
+If you have questions or comments regarding this documentation, feel free to pass by the #asterisk-dev channel on [Libera Chat](https://libera.chat/).
diff --git a/docs/Development/Debugging/MALLOC_DEBUG-Compiler-Flag.md b/docs/Development/Debugging/MALLOC_DEBUG-Compiler-Flag.md
index f527a53e8c..ad45005f05 100644
--- a/docs/Development/Debugging/MALLOC_DEBUG-Compiler-Flag.md
+++ b/docs/Development/Debugging/MALLOC_DEBUG-Compiler-Flag.md
@@ -3,20 +3,21 @@ title: MALLOC_DEBUG Compiler Flag
pageid: 28315432
---
-MALLOC_DEBUG enhancements can be used as a poor-man's Valgrind if Valgrind performance makes the PC unusable due to resource consumption.
+`MALLOC_DEBUG` enhancements can be used as a poor man's Valgrind if Valgrind performance makes the PC unusable due to resource consumption.
-!!! warning
- Don't attempt to use Asterisk compiled with MALLOC_DEBUG and run Valgrind at the same time, as they will compete and render the findings invalid for either tool.
+/// warning
+Don't attempt to use Asterisk compiled with `MALLOC_DEBUG` and run
+Valgrind at the same time, as they will compete and render the
+findings invalid for either tool.
+///
-[//]: # (end-warning)
+## Gathering output
-Gathering output
-----------------
-
-!!! info ""
- For this output to be useful make sure to upgrade Asterisk versions 1.8.20, 11.2.0 or above as they include important enhancements to MALLOC_DEBUG
-
-[//]: # (end-info)
+/// note
+For this output to be useful make sure to upgrade Asterisk versions
+1.8.20, 11.2.0 or above as they include important enhancements to
+`MALLOC_DEBUG`.
+///
1. Run [menuselect](/Getting-Started/Installing-Asterisk/Installing-Asterisk-From-Source/Using-Menuselect-to-Select-Asterisk-Options) and in the Compiler Options, enable MALLOC_DEBUG. A bug marshal may also ask you to enable additional compiler flags depending upon the nature of the issue.
2. Rebuild and install Asterisk
@@ -24,59 +25,52 @@ Gathering output
4. Collect the /var/log/asterisk/mmlog (which will be generated only if you successfully compiled with the MALLOC_DEBUG flag)
5. Attach the mmlog file as mmlog.txt to the issue in our [issue tracker](/Asterisk-Community/Asterisk-Issue-Guidelines).
-Commands provided
------------------
+## Commands provided
Compiling with this flag results in several commands being made available for memory debugging. Below are the usage and summaries from "core show help" for each command in Asterisk 12.
-* memory show summary
-
-Click to show usage...
+### `memory show summary`
```
Usage: memory show summary []
- Summarizes heap memory allocations by file, or optionally
- by line, if a file is specified.
+ Summarizes heap memory allocations by file, or optionally
+ by line, if a file is specified.
```
-* memory show allocations
-Click to show usage...
+### `memory show allocations`
```
Usage: memory show allocations [|anomalies]
- Dumps a list of segments of allocated memory.
- Defaults to listing all memory allocations.
- - Restricts output to memory allocated by the file.
- anomalies - Only check for fence violations.
+ Dumps a list of segments of allocated memory.
+ Defaults to listing all memory allocations.
+ - Restricts output to memory allocated by the file.
+ anomalies - Only check for fence violations.
```
-* memory atexit list
-Click to show usage...
+### `memory atexit list`
```
Usage: memory atexit list {on|off}
- Enable dumping a list of still allocated memory segments at exit.
+ Enable dumping a list of still allocated memory segments at exit.
```
-* memory atexit summary
-Click to show usage...
+### `memory atexit summary`
```
Usage: memory atexit summary {off|byline|byfunc|byfile}
- Summary of still allocated memory segments at exit options.
- off - Disable at exit summary.
- byline - Enable at exit summary by file line number.
- byfunc - Enable at exit summary by function name.
- byfile - Enable at exit summary by file.
- Note: byline, byfunc, and byfile are cumulative enables.
+ Summary of still allocated memory segments at exit options.
+ off - Disable at exit summary.
+ byline - Enable at exit summary by file line number.
+ byfunc - Enable at exit summary by function name.
+ byfile - Enable at exit summary by file.
+ Note: byline, byfunc, and byfile are cumulative enables.
```
-* memory backtrace
-Click to show usage...
+### `memory backtrace`
```
Usage: memory backtrace {on|off}
- Enable dumping an allocation backtrace with memory diagnostics.
- Note that saving the backtrace data for each allocation
- can be CPU intensive.
+ Enable dumping an allocation backtrace with memory diagnostics.
+ Note that saving the backtrace data for each allocation
+ can be CPU intensive.
```
diff --git a/docs/Development/Debugging/Memory-Leak-Debugging.md b/docs/Development/Debugging/Memory-Leak-Debugging.md
index f0376509fa..04f020e2ad 100644
--- a/docs/Development/Debugging/Memory-Leak-Debugging.md
+++ b/docs/Development/Debugging/Memory-Leak-Debugging.md
@@ -7,10 +7,10 @@ If Asterisk is crashing due to potential memory corruption then head to the [Get
If Asterisk developers suspect that you have a memory leak then you will be asked to follow the instructions below.
-!!! tip
- Follow the instructions here and all linked instructions closely to speed up the debugging process.
-
-[//]: # (end-tip)
+/// tip
+Follow the instructions here and all linked instructions closely to
+speed up the debugging process.
+///
1. Verify the Description field of your issue report contains details about the environment in which the issue occurs.
1. Basic information - Linux environment, Asterisk version, modifications in use, third-party modules, etc.
diff --git a/docs/Development/Debugging/Reference-Count-Debugging.md b/docs/Development/Debugging/Reference-Count-Debugging.md
index 727b1731d3..c3db34fa83 100644
--- a/docs/Development/Debugging/Reference-Count-Debugging.md
+++ b/docs/Development/Debugging/Reference-Count-Debugging.md
@@ -18,10 +18,10 @@ In such cases, its often very useful to determine what in Asterisk manipulated t
In all cases, when providing the **refs** file to Asterisk developers for debugging purposes you should also be providing them with instructional steps, including configuration, that allows them to reproduce the issue consistently. See the [Asterisk Issue Guidelines](/Asterisk-Community/Asterisk-Issue-Guidelines) for more details on submitting an issue.
-!!! note
- These instructions apply to Asterisk versions 11.10.0, 13.0.0 or greater.
-
-[//]: # (end-note)
+/// note
+These instructions apply to Asterisk versions 11.10.0, 13.0.0 or
+greater.
+///
Enabling Reference Count Logs in Asterisk 14+
=============================================
diff --git a/docs/Development/Policies-and-Procedures/C-API-Deprecation.md b/docs/Development/Policies-and-Procedures/C-API-Deprecation.md
index a45570ba8d..c3018e2536 100644
--- a/docs/Development/Policies-and-Procedures/C-API-Deprecation.md
+++ b/docs/Development/Policies-and-Procedures/C-API-Deprecation.md
@@ -17,10 +17,12 @@ Asterisk follows a 2 year C API deprecation process. A C API is initially marked
Marking A C API As Deprecated For Standard Release
==================================================
-!!! note
- Reminder: C API deprecation practices within the tree are only eligible to be done in master when the next release is a standard release. No C API deprecation can be done during the development of a long term supported release.
-
-[//]: # (end-note)
+/// note | Reminder
+C API deprecation practices within the tree are only eligible to be
+done in master when the next release is a standard release. No C API
+deprecation can be done during the development of a long term
+supported release.
+///
#### The following instructions are for the master branch in which the C API is to be deprecated.
@@ -36,10 +38,11 @@ Marking A C API As Deprecated For Standard Release
Removing A C API
================
-!!! note
- Reminder: C API removal is only eligible to be done in master when the next release is a standard release. No C API removal can be done during the development of a long term supported release.
-
-[//]: # (end-note)
+/// note | Reminder
+C API removal is only eligible to be done in master when the next
+release is a standard release. No C API removal can be done during the
+development of a long term supported release.
+///
1. Only remove a C API if it has not been reverted from being deprecated.
2. Create a new issue in the [Asterisk project issue tracker](https://github.com/asterisk/asterisk/issues/) using the "Deprecation" issue type. Ensure the issue summary is descriptive as it will go into release notes.
diff --git a/docs/Development/Policies-and-Procedures/Module-Deprecation.md b/docs/Development/Policies-and-Procedures/Module-Deprecation.md
index a774546a62..44f383f9fe 100644
--- a/docs/Development/Policies-and-Procedures/Module-Deprecation.md
+++ b/docs/Development/Policies-and-Procedures/Module-Deprecation.md
@@ -27,10 +27,12 @@ During the time at which the module is deprecated in both a standard and long te
Marking A Module As Deprecated For Standard Release
===================================================
-!!! note
- Reminder: Module deprecation practices within the tree are only eligible to be done in master when the next release is a standard release. No module deprecation can be done during the development of a long term supported release.
-
-[//]: # (end-note)
+/// note | Reminder
+Module deprecation practices within the tree are only eligible to be
+done in master when the next release is a standard release. No module
+deprecation can be done during the development of a long term
+supported release.
+///
#### The following instructions are for the master branch in which the module is to be deprecated.
@@ -50,10 +52,12 @@ Marking A Module As Deprecated For Standard Release
#### The following instructions are for the previous still supported branches to notify users that a module will be deprecated in an upcoming version.
-!!! info ""
- Setting these values in the MODULEINFO XML will cause Asterisk to output a warning at startup with the information to inform the user that in a future new version of Asterisk deprecation and then removal will occur.
-
-[//]: # (end-info)
+/// note
+Setting these values in the `MODULEINFO` XML will cause Asterisk to
+output a warning at startup with the information to inform the user
+that in a future new version of Asterisk deprecation and then removal
+will occur.
+///
1. Obtain the Asterisk source code from [GitHub](https://github.com/asterisk/asterisk). Since you'll need to put your patch up for review, make an account in GitHub as well, following the instructions on [Code Contribution](/Development/Policies-and-Procedures/Code-Contribution).
2. Create a new Git branch for your deprecation notice change.
@@ -64,10 +68,10 @@ Marking A Module As Deprecated For Standard Release
7. Submit the patch to Gerrit.
8. Cherry pick the change to other appropriate branches.
-!!! note
- A single commit can be used to update multiple modules, but each module will need its own JIRA issue.
-
-[//]: # (end-note)
+/// note
+A single commit can be used to update multiple modules, but each
+module will need its own JIRA issue.
+///
Recording A Module For Future Deprecation
=========================================
@@ -80,10 +84,11 @@ During development of a long term supported release modules are not eligible to
Removing A Module
=================
-!!! note
- Reminder: Module removal is only eligible to be done in master when the next release is a standard release. No module removal can be done during the development of a long term supported release.
-
-[//]: # (end-note)
+/// note | Reminder
+Module removal is only eligible to be done in master when the next
+release is a standard release. No module removal can be done during
+the development of a long term supported release.
+///
1. Only remove a module if it has not been reverted from being deprecated.
2. Create a new issue in the [Asterisk project issue tracker](https://github.com/asterisk/asterisk/issues/) using the "Deprecation" issue type. Ensure the issue summary is descriptive as it will go into release notes.
diff --git a/docs/Development/Policies-and-Procedures/New-Features-and-Improvements.md b/docs/Development/Policies-and-Procedures/New-Features-and-Improvements.md
index 0aa85278f6..b049088d2c 100644
--- a/docs/Development/Policies-and-Procedures/New-Features-and-Improvements.md
+++ b/docs/Development/Policies-and-Procedures/New-Features-and-Improvements.md
@@ -24,10 +24,15 @@ Decision Not To Accept A New Feature Or Improvement
While we understand that contributors prefer that new features and improvements they create become part of Asterisk, it is not always possible for the Asterisk project to accept them. This may be because the feature or improvement is extremely specialized, or because it would see little to no use by others. Having a specialized or limited use feature or improvement in Asterisk makes the project responsible for all aspects of the feature or improvement and will consume time that would be otherwise used on non-specialized or widely used capabilities. Therefore, the Asterisk project may choose not to accept a new feature or improvement. Such decisions are not taken lightly and are done in consultation with the asterisk-dev mailing list.
-!!! note
- If a new feature or improvement patch is submitted for review on Gerrit without prior discussion, and a reviewer voices an opinion not to allow the new feature or improvement, or desires more discussion about it then the review may be suspended (given a -2), and the submitter will be required to create a new post to initiate further discussion on the asterisk-dev mailing list about the change, and why it should be allowed in.
-
-[//]: # (end-note)
+/// note
+If a new feature or improvement patch is submitted for review on
+Gerrit without prior discussion, and a reviewer voices an opinion not
+to allow the new feature or improvement, or desires more discussion
+about it then the review may be suspended (given a -2), and the
+submitter will be required to create a new post to initiate further
+discussion on the asterisk-dev mailing list about the change, and why
+it should be allowed in.
+///
If the discussion concludes in acceptance, then the new feature or improvement, even if specialized or of limited use, will be accepted. If the discussion concludes in the new feature or improvement not being accepted then as a courtesy a JIRA issue can remain open for the new feature or improvement with patch attached to allow others to download and use it. If the JIRA issue sees comments indicating it has become a widely used feature or improvement the decision can be revisited by posting to the asterisk-dev mailing list. If you have ideas for module additions that might make Asterisk more useful for a smaller subset of the user base, consider creating a GitHub repository of your own that builds those modules out-of-tree (as opposed to a fork of Asterisk). If your changes become popular we can consider including them in the base Asterisk distribution at a later date when contributed using the normal contribution method.
diff --git a/docs/Development/Policies-and-Procedures/Software-Configuration-Management-Policies.md b/docs/Development/Policies-and-Procedures/Software-Configuration-Management-Policies.md
index 6dc019ce45..97e0c03d86 100644
--- a/docs/Development/Policies-and-Procedures/Software-Configuration-Management-Policies.md
+++ b/docs/Development/Policies-and-Procedures/Software-Configuration-Management-Policies.md
@@ -9,11 +9,12 @@ Development in the Asterisk project follows the **Mainline** branching model of
See [Asterisk Versions](/About-the-Project/Asterisk-Versions) for the approximate dates when a given version's development is started; when beta releases are created and announced; and when a major version branch is made and the first feature release made from that branch.
-!!! info "** For an excellent article on Software Configuration Management branching schemes and a description of the **Mainline"
- branching model, see [Branching Strategies by Stephen Vance](http://www.vance.com/steve/perforce/Branching_Strategies.html)
-
-[//]: # (end-info)
-
+/// note
+For an excellent article on Software Configuration Management
+branching schemes and a description of the "Mainline" branching
+model, see
+[Branching Strategies by Stephen Vance](https://www.vance.com/steve/perforce/Branching_Strategies.html)
+///
## Major Version Branch Types
@@ -57,10 +58,9 @@ When a security vulnerability is reported against the Asterisk project (typicall
### Bug Fixes
-!!! info
- See [Code Contribution](/Development/Policies-and-Procedures/Code-Contribution)
-
-[//]: # (end-tip)
+/// note
+See [Code Contribution](/Development/Policies-and-Procedures/Code-Contribution)
+///
### New Features
@@ -73,10 +73,11 @@ New features should follow the same procedure as bug fixes however they are, sub
* Any new feature proposed for an existing release branch must have suitable test coverage using either the Asterisk Test Suite, the Asterisk Unit Test Framework, or both.
-!!! tip
- Tests are always good and encouraged, especially for new features. Having tests is a mandatory requirement for new features in release branches to minimize the risk of regression.
-
-[//]: # (end-tip)
+/// tip
+Tests are always good and encouraged, especially for new
+features. Having tests is a mandatory requirement for new features in
+release branches to minimize the risk of regression.
+///
* The new feature or improvement must be backwards compatible with the previous releases in those major versions. That is, users upgrading from one point release to the next should **not** be aware of any new feature or improvement unless they want to use said feature. Some things that should **not** be changed naturally follow from this:
+ APIs that follow semantic versioning should not receive a major version increase.
@@ -104,10 +105,13 @@ A breaking change is any that invalidates a previous configuration or changes th
* CLI Commands and Responses
* CDR/CEL behavior
-!!! warning
- Within a major version branch, there are times when a breaking change must be introduced - usually to fix a serious, critical bug within that branch. Or because we switched source control systems. When this occurs, the UPGRADE text file delivered with Asterisk will be updated noting the change.
-
-[//]: # (end-warning)
+/// warning
+Within a major version branch, there are times when a breaking change
+must be introduced - usually to fix a serious, critical bug within
+that branch. Or because we switched source control systems. When this
+occurs, the UPGRADE text file delivered with Asterisk will be updated
+noting the change.
+///
The following items **can be changed** between minor versions in a major version branch:
@@ -124,7 +128,8 @@ Asterisk uses three digits in its version number sequence:
* **Minor** - denotes a release version. These increase sequentially for each release.
* **Patch** - denotes that the release was either a security release made from the previous release, or a release made to fix regressions or serious bugs detected in the release.
-!!! note
- Over the years, the Asterisk version numbers have changed. A lot. For anyone who has ever had to write a script that parses Asterisk version numbers, we apologize. We'll try hard not to change it again.
-
-[//]: # (end-note)
+/// note
+Over the years, the Asterisk version numbers have changed. A lot. For
+anyone who has ever had to write a script that parses Asterisk version
+numbers, we apologize. We'll try hard not to change it again.
+///
diff --git a/docs/Development/Reference-Information/Asterisk-Framework-and-API-Examples/Asterisk-Channel-Data-Stores.md b/docs/Development/Reference-Information/Asterisk-Framework-and-API-Examples/Asterisk-Channel-Data-Stores.md
index c01604efac..bfdeb4ac41 100644
--- a/docs/Development/Reference-Information/Asterisk-Framework-and-API-Examples/Asterisk-Channel-Data-Stores.md
+++ b/docs/Development/Reference-Information/Asterisk-Framework-and-API-Examples/Asterisk-Channel-Data-Stores.md
@@ -14,7 +14,7 @@ If the data store is not freed by said application though, a callback to a destr
##### A datastore info structure
-```
+```c
static const struct example_datastore {
.type = "example",
.destroy = callback_destroy
@@ -39,7 +39,7 @@ This is a needed structure that contains information about a datastore, it's use
Full Example:
-```
+```c
void callback_destroy(void *data)
{
ast_free(data);
@@ -51,11 +51,11 @@ datastore->data = mysillydata;
ast_channel_datastore_add(chan, datastore);
```
-!!! note
- NOTE
- Because you're passing a pointer to a function in your module, you'll want to include this in your use count. When allocated increment, when destroyed decrement.
-
-[//]: # (end-note)
+/// note
+Because you're passing a pointer to a function in your module, you'll
+want to include this in your use count. When allocated increment, when
+destroyed decrement.
+///
##### How do you remove a data store?
diff --git a/docs/Development/Reference-Information/Asterisk-Framework-and-API-Examples/Create-a-new-resource-with-ARI.md b/docs/Development/Reference-Information/Asterisk-Framework-and-API-Examples/Create-a-new-resource-with-ARI.md
index f569f2b494..50e7cb6b2a 100644
--- a/docs/Development/Reference-Information/Asterisk-Framework-and-API-Examples/Create-a-new-resource-with-ARI.md
+++ b/docs/Development/Reference-Information/Asterisk-Framework-and-API-Examples/Create-a-new-resource-with-ARI.md
@@ -13,48 +13,55 @@ In the Asterisk source tree, the Swagger API declarations are stored in `./rest-
These API declarations are documented using [Swagger](https://developers.helloreverb.com/swagger/). Details on documenting the API declarations can be found [on the Swagger wiki](https://github.com/wordnik/swagger-core/wiki/API-Declaration).
```json title="fizzbuzz.json" linenums="1"
-true{
- "_copyright": "Copyright (C) 2013, Digium, Inc.",
- "_author": "David M. Lee, II ",
- "_svn_revision": "$Revision$",
- "apiVersion": "0.0.1",
- "swaggerVersion": "1.1",
- "basePath": "http://localhost:8088/stasis",
- "resourcePath": "/api-docs/fizzbuzz.{format}",
- "apis": [
- {
- "path": "/fizzbuzz",
- "description": "The FizzBuzz test. See http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html.",
- "operations": [
- {
- "httpMethod": "GET",
- "summary": "Returns an array of numbers from 1 to 100. But for multiples of three return \"Fizz\" instead of the number and for the multiples of five return \"Buzz\". For numbers which are multiples of both three and five return \"FizzBuzz\".",
- "nickname": "fizzbuzz",
- "responseClass": "object",
- "parameters": [
- {
- "name": "max",
- "description": "Set the max number to fizzbuzz up to",
- "paramType": "query",
- "required": false,
- "dataType": "long"
- }
- ]
- }
- ]
- }
- ],
- "models": {
- "FizzBuzz": {
- "id": "FizzBuzz",
- "description": "List of ints, with Fizz and Buzz mixed in",
- "properties": {
- "fizzbuzz": {
- "type": "List[object]"
- }
- }
- }
- }
+{
+ "_copyright": "Copyright (C) 2013, Digium, Inc.",
+ "_author": "David M. Lee, II ",
+ "_svn_revision": "$Revision$",
+ "apiVersion": "0.0.1",
+ "swaggerVersion": "1.1",
+ "basePath": "http://localhost:8088/stasis",
+ "resourcePath": "/api-docs/fizzbuzz.{format}",
+ "apis":
+ [
+ {
+ "path": "/fizzbuzz",
+ "description": "The FizzBuzz test. See http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html.",
+ "operations":
+ [
+ {
+ "httpMethod": "GET",
+ "summary": "Returns an array of numbers from 1 to 100. But for multiples of three return \"Fizz\" instead of the number and for the multiples of five return \"Buzz\". For numbers which are multiples of both three and five return \"FizzBuzz\".",
+ "nickname": "fizzbuzz",
+ "responseClass": "object",
+ "parameters":
+ [
+ {
+ "name": "max",
+ "description": "Set the max number to fizzbuzz up to",
+ "paramType": "query",
+ "required": false,
+ "dataType": "long"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "models":
+ {
+ "FizzBuzz":
+ {
+ "id": "FizzBuzz",
+ "description": "List of ints, with Fizz and Buzz mixed in",
+ "properties":
+ {
+ "fizzbuzz":
+ {
+ "type": "List[object]"
+ }
+ }
+ }
+ }
}
```
@@ -63,25 +70,16 @@ Add it to `resources.json`
The master list of resources served by Asterisk is kept in `rest-api/resources.json`. Simply add your resource to the end of the list.
----
-
-resources.json.diff
-
-```
-diffIndex: rest-api/resources.json
-===================================================================
---- rest-api/resources.json (revision 401118)
-+++ rest-api/resources.json (working copy)
-@@ -41,6 +41,10 @@
- {
- "path": "/api-docs/applications.{format}",
- "description": "Stasis application resources"
-+ },
-+ {
-+ "path": "/api-docs/fizzbuzz.{format}",
-+ "description": "FizzBuzz example"
- }
- ]
+```diff
+ {
+ "path": "/api-docs/applications.{format}",
+ "description": "Stasis application resources"
++ },
++ {
++ "path": "/api-docs/fizzbuzz.{format}",
++ "description": "FizzBuzz example"
+ }
+ ]
}
```
@@ -90,15 +88,16 @@ Generate the code
The API declarations are used to generate much of the boilerplate code in Asterisk for routing RESTful API invocations. This code is generated using `make ari-stubs`.
-!!! note
- The code generator requires [Pystache](https://pypi.python.org/pypi/pystache), which can be installed using `pip install pystache`.
-
-[//]: # (end-note)
+/// note
+The code generator requires
+[Pystache](https://pypi.python.org/pypi/pystache), which can be
+installed using `pip install pystache`.
+///
```bash title=" " linenums="1"
$ make ari-stubs
/usr/bin/python rest-api-templates/make_ari_stubs.py \
- rest-api/resources.json .
+ rest-api/resources.json .
Writing ./doc/rest-api/Asterisk 12 Fizzbuzz REST API.wiki
Writing ./res/res_ari_fizzbuzz.c
Writing ./res/ari/resource_fizzbuzz.h
@@ -113,42 +112,38 @@ As you can see, a number of files are generated. Most of the files are always re
The parameters described in your API declaration are parsed into an `args` structure for use in your implementation. The `response` struct is to be filled in with the HTTP response.
----
-
-resource_fizzbuzz.c
-
-```cpp
+```cpp title="resource_fizzbuzz.c"
void ast_ari_fizzbuzz(struct ast_variable *headers,
- struct ast_fizzbuzz_args *args,
- struct ast_ari_response *response)
+ struct ast_fizzbuzz_args *args,
+ struct ast_ari_response *response)
{
- RAII_VAR(struct ast_json *, json, NULL, ast_json_unref);
- struct ast_json *fb;
- int i;
- int max = 100;
- if (args->max) {
- max = args->max;
- }
- json = ast_json_pack("{s: []}", "fizzbuzz");
- fb = ast_json_object_get(json, "fizzbuzz");
- /* This is what one would call "business logic", and doesn't belong in
- * the ARI layer. But this is just a silly example.
- */
- for (i = 1; i <= max; ++i) {
- if (i % 15 == 0) {
- ast_json_array_append(fb,
- ast_json_string_create("FizzBuzz"));
- } else if (i % 5 == 0) {
- ast_json_array_append(fb,
- ast_json_string_create("Buzz"));
- } else if (i % 3 == 0) {
- ast_json_array_append(fb,
- ast_json_string_create("Fizz"));
- } else {
- ast_json_array_append(fb, ast_json_integer_create(i));
- }
- }
- ast_ari_response_ok(response, json);
+ RAII_VAR(struct ast_json *, json, NULL, ast_json_unref);
+ struct ast_json *fb;
+ int i;
+ int max = 100;
+ if (args->max) {
+ max = args->max;
+ }
+ json = ast_json_pack("{s: []}", "fizzbuzz");
+ fb = ast_json_object_get(json, "fizzbuzz");
+ /* This is what one would call "business logic", and doesn't belong in
+ * the ARI layer. But this is just a silly example.
+ */
+ for (i = 1; i <= max; ++i) {
+ if (i % 15 == 0) {
+ ast_json_array_append(fb,
+ ast_json_string_create("FizzBuzz"));
+ } else if (i % 5 == 0) {
+ ast_json_array_append(fb,
+ ast_json_string_create("Buzz"));
+ } else if (i % 3 == 0) {
+ ast_json_array_append(fb,
+ ast_json_string_create("Fizz"));
+ } else {
+ ast_json_array_append(fb, ast_json_integer_create(i));
+ }
+ }
+ ast_ari_response_ok(response, json);
}
```
diff --git a/docs/Development/Reference-Information/Asterisk-Framework-and-API-Examples/Using-the-Configuration-Framework.md b/docs/Development/Reference-Information/Asterisk-Framework-and-API-Examples/Using-the-Configuration-Framework.md
index 8a437f2263..6c4b4488e3 100644
--- a/docs/Development/Reference-Information/Asterisk-Framework-and-API-Examples/Using-the-Configuration-Framework.md
+++ b/docs/Development/Reference-Information/Asterisk-Framework-and-API-Examples/Using-the-Configuration-Framework.md
@@ -7,11 +7,9 @@ pageid: 21463337
This wiki page describes using parts of the new Configuration Framework introduced in Asterisk 11, and the motivation behind its creation.
-!!! info ""
- NOTE
- All source code in this article is for demonstration purposes only.
-
-[//]: # (end-info)
+/// note
+All source code in this article is for demonstration purposes only.
+///
## Configuration Loading Overview
@@ -25,11 +23,12 @@ The act of loading and parsing configuration information from either source typi
As we'll see, while performing these operations there are some common pitfalls that many modules in Asterisk fall into.
-!!! info ""
- NOTE
- We'll disregard configuration information retrieved from an Asterisk Realtime Architecture (ARA) backend, and instead assume that the configuration information is read from static Asterisk configuration files. ARA is complex enough to deserve its own set of pages.
-
-[//]: # (end-info)
+/// note
+We'll disregard configuration information retrieved from an Asterisk
+Realtime Architecture (ARA) backend, and instead assume that the
+configuration information is read from static Asterisk configuration
+files. ARA is complex enough to deserve its own set of pages.
+///
Traditional Configuration Loading in Asterisk
=============================================
@@ -63,8 +62,7 @@ my_module Resource Management
A `my_module` that uses these values may look something like the following. We'll start with the basic structure, and then explore the actual loading and parsing of the configuration.
-```
-Cmy_module
+```c title="my_module"
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision: XXXXXX $")
@@ -147,8 +145,7 @@ That's fairly simple. So, what do we have?
So, let's see what `load_configuration` might look like.
-```
-Cmy_module - load_configuration
+```c title="my_module - load_configuration"
/*!
* \internal \brief Load the configuration information
* \param reload If non-zero, this is a reload operation; otherwise, it is an initial module load
@@ -278,8 +275,7 @@ In more complex modules where the configuration information is stored on the hea
We could, of course, put some locking in to help. What would that look like?
-```
-Cmy_module with Locking
+```c title="my_module with Locking"
/*! \brief An integer value, ranging from -32 to 3 */
static int global_foo;
@@ -411,8 +407,7 @@ my_module using the Configuration Framework
All configuration information is stored in a reference counted object using Asterisk's `astobj2` API. That object can be replaced in a thread-safe manner with a new configuration information object, as we'll see later. Since the object is reference counted, as long as a consumer of the configuration information holds a reference to that object, it will continue to use the configuration information it started with, even if the configuration information is reloaded.
-```
-Cmy_module's In-Memory Configuration Object
+```c title="my_module's In-Memory Configuration Object"
#define DEFAULT_FOOBAR "True"
#define MIN_FOO -32
@@ -465,8 +460,7 @@ So now we have a mapping of our module configuration, and the in-memory represen
Well, as we mentioned previously, the configuration objects are going to be `ao2` objects, using the `astobj2` API. Let's define the constructor and destructor functions for the `module_config` `ao2` object.
-```
-Cmodule_config Constructor/Destructor
+```c title="module_config Constructor/Destructor"
static void *module_config_alloc(void);
static void module_config_destructor(void *obj);
@@ -498,8 +492,7 @@ Note that as part of creating the `module_config` object, we also create the gen
Now, we can associate our general configuration mapping object `general_option` with a configuration file that will provide the data.
-```
-CTying the Mapping Object to a Config File
+```c title="Tying the Mapping Object to a Config File"
/*! \brief A configuration file that will be processed for the modul */
static struct aco_file module_conf = {
.filename = "my_module.conf", /*!< The name of the config fil */
@@ -526,8 +519,7 @@ We're finally ready to start doing some loading! But wait... where's the applica
Rather than have a separate function that provides the application logic with the parsing, we instead tell the Configuration Framework how to extract each configuration value out of the configuration file, and what logic we want applied to it. We do all of this when we first load the module, as shown below.
-```
-CLoading my_module Using the Configuration Framework
+```c title="Loading my_module Using the Configuration Framework"
/*! \internal \brief load handler
* \retval AST_MODULE_LOAD_SUCCESS on success
* \retval AST_MODULE_LOAD_DECLINE on failure
@@ -580,8 +572,7 @@ Recall that `foo` has to be an integer between `-32` and `32`, and that `foobar`
Now how would we use our in-memory object? And what about reloads?
-```
-CReloads and Using the Configuration Information
+```c title="Reloads and Using the Configuration Information"
/*! \internal \brief Log the current module value */
static void log_module_values(void)
{
@@ -625,9 +616,7 @@ The `unload` handler is shown below with the complete `my_module` source code.
Complete my_module
-------------------
-```
-Cmy_module.c
-
+```c title="my_module.c"
#include "asterisk.h"
ASTERISK_FILE_VERSION(__FILE__, "$Revision: XXXXXX $")
diff --git a/docs/Development/Reference-Information/Other-Reference-Information/Confbridge-state-changes.md b/docs/Development/Reference-Information/Other-Reference-Information/Confbridge-state-changes.md
index 4ae9396b20..2898605077 100644
--- a/docs/Development/Reference-Information/Other-Reference-Information/Confbridge-state-changes.md
+++ b/docs/Development/Reference-Information/Other-Reference-Information/Confbridge-state-changes.md
@@ -3,10 +3,11 @@ title: Confbridge state changes
pageid: 21463456
---
-!!! note
- This page discusses confbridge state information for internal development use. This is unrelated to the device, extension or presence state concepts at the user level.
-
-[//]: # (end-note)
+/// note
+This page discusses confbridge state information for internal
+development use. This is unrelated to the device, extension or
+presence state concepts at the user level.
+///
Intro
=====
diff --git a/docs/Development/Reference-Information/Other-Reference-Information/Locking-in-Asterisk.md b/docs/Development/Reference-Information/Other-Reference-Information/Locking-in-Asterisk.md
index 21c9073b05..2d25204a2b 100644
--- a/docs/Development/Reference-Information/Other-Reference-Information/Locking-in-Asterisk.md
+++ b/docs/Development/Reference-Information/Other-Reference-Information/Locking-in-Asterisk.md
@@ -146,10 +146,16 @@ With everything else, there is a locking order established. In this case the cha
So, never use deadlock avoidance unless you have to grab two channel locks at the same time, otherwise it is not necessary. I know the code has misuses of deadlock avoidance all over the place, ignore them. They will go away in time.
-!!! note
- As a side note, if you ever find yourself in the position where you are designing a program and think using deadlock avoidance is a quick solution for a concurrency problem you run into, it is not. Running into a deadlock almost certainly means your design is flawed. I'd go as far as to say if you ever find yourself designing a system with multiple locks held at the same time, your design is flawed. Seriously, anyone who reads this remember this, and say it to yourself every time you create a new mutex.
-
-[//]: # (end-note)
+/// note
+As a side note, if you ever find yourself in the position where you
+are designing a program and think using deadlock avoidance is a quick
+solution for a concurrency problem you run into, it is not. Running
+into a deadlock almost certainly means your design is flawed. I'd go
+as far as to say if you ever find yourself designing a system with
+multiple locks held at the same time, your design is
+flawed. Seriously, anyone who reads this remember this, and say it to
+yourself every time you create a new mutex.
+///
##### Do not sleep while holding a lock
diff --git a/docs/Development/Reference-Information/Other-Reference-Information/Unique-Call-ID-Logging-in-Asterisk-12-and-beyond.md b/docs/Development/Reference-Information/Other-Reference-Information/Unique-Call-ID-Logging-in-Asterisk-12-and-beyond.md
index edf9eb5a15..fbbecf4039 100644
--- a/docs/Development/Reference-Information/Other-Reference-Information/Unique-Call-ID-Logging-in-Asterisk-12-and-beyond.md
+++ b/docs/Development/Reference-Information/Other-Reference-Information/Unique-Call-ID-Logging-in-Asterisk-12-and-beyond.md
@@ -3,10 +3,10 @@ title: Unique Call-ID Logging in Asterisk 12 and beyond
pageid: 29396023
---
-!!! note
- This is an Asterisk-specific concept. Not to be confused with Caller-ID or a SIP 'Call-ID' field.
-
-[//]: # (end-note)
+/// note
+This is an Asterisk-specific concept. Not to be confused with
+Caller-ID or a SIP 'Call-ID' field.
+///
What is a call?
===============
diff --git a/docs/Development/Reference-Information/Other-Reference-Information/Upgrading-pjproject-Bundled.md b/docs/Development/Reference-Information/Other-Reference-Information/Upgrading-pjproject-Bundled.md
index cec2d881a7..db034e907d 100644
--- a/docs/Development/Reference-Information/Other-Reference-Information/Upgrading-pjproject-Bundled.md
+++ b/docs/Development/Reference-Information/Other-Reference-Information/Upgrading-pjproject-Bundled.md
@@ -11,24 +11,25 @@ Currently we keep a copy of any third party "bundled" software on github for use
Either fork and clone a copy of that repository, or clone it directly and check out a new branch for the new files you are about to add. Create a new directory beneath the appropriate project directory named for the version number being upgraded to. Next download the new version of the software you are upgrading to as a tarball into this directory.
-!!! info "pjproject"
- The latest release for pjproject can be found either on their websites [downloads page](https://www.pjsip.org/download.htm), or directly from their [github repository](https://github.com/pjsip/pjproject/releases).
-
-[//]: # (end-info)
+/// note | pjproject
+The latest release for pjproject can be found either on their websites
+[downloads page](https://www.pjsip.org/download.htm), or directly from
+their
+[GitHub repository](https://github.com/pjsip/pjproject/releases).
+///
The build process for bundled software currently expects tarballs compressed using bz2. So if the software you are downloading is not compressed as such (\*.tar.bz2 format) you'll need to convert it first. Once you have the tarball you'll either need to also get the associated MD5 checksum for it, or create one for it. Create a file called MD5SUM.TXT and add the checksum(s) to it (see examples from previous upgrades in the [third party mirror](https://github.com/asterisk/third-party)).
-!!! note
- The md5 file format must be unix. If using vim, you can check this by opening the file and typing:
-[//]: # (end-note)
+/// note
+The md5 file format must be unix. If using vim, you can check this by
+opening the file and typing:
```
-:set ff?
-
----
+:set ff?
+```
If you don't see fileformat=unix, you will need to convert formats.
-```
+///
Lastly add the \*.tar.bz2 tarball and checksum file to your repository, push the changes, and then create a pull request on github.
@@ -67,10 +68,11 @@ PJPROJECT_VERSION = 2.10
Now remove any patches found beneath the ./third-party/{project}/patches directory that have been added since the last version, **and** are now included in this new version. Again, only remove those patches that are currently included in the new version of the released software being upgraded to.
-!!! info ""
- Hint: patch files starting with '0000' (all zeros) are ones that are always carried over, and shouldn't require removing unless they have been contributed and accepted upstream.
-
-[//]: # (end-info)
+/// note | Hint
+Patch files starting with '0000' (all zeros) are ones that are always
+carried over, and shouldn't require removing unless they have been
+contributed and accepted upstream.
+///
To know which patches need to be removed either visit the project's website, and find the change log of issues/patches included, or probably better for each patch check the actual git log of the new software and ensure the patch has been included.
diff --git a/docs/Development/Reference-Information/The-Federated-Asterisk-Construct.md b/docs/Development/Reference-Information/The-Federated-Asterisk-Construct.md
index 2e3173480a..a8e500e62f 100644
--- a/docs/Development/Reference-Information/The-Federated-Asterisk-Construct.md
+++ b/docs/Development/Reference-Information/The-Federated-Asterisk-Construct.md
@@ -3,10 +3,12 @@ title: The Federated Asterisk Construct
pageid: 30279846
---
-!!! info "Disclaimer"
- This page contains many of the ideas that I've been discussing with unknown user. Bear in mind that currently, much is missing here, so don't expect any actions items to spring from this page in the near future.
-
-[//]: # (end-info)
+/// note | Disclaimer
+This page contains many of the ideas that I've been discussing with
+Matt Jordan. Bear in mind that currently, much is missing here, so
+don't expect any actions items to spring from this page in the near
+future.
+///
Overview
========
@@ -16,7 +18,7 @@ The following set of wiki pages are meant to serve as an idea discussion pad, to
* Rely on existing Asterisk Standard/LTS distribution for the construct.
* Avoid paradigm changes as much as possible. Introduction of new ones is ok, as long as they don't clash with the old.
* Asterisk should be regarded as a building block, not the actual core federation tool.
-* Federation should utilize existing componets (realtime, sqlite, ARI, Stasis, etc) as much as possible
+* Federation should utilize existing components (realtime, sqlite, ARI, Stasis, etc) as much as possible
What a Federated Asterisk really is?
====================================
@@ -27,6 +29,7 @@ Building a large Asterisk system had been known to be somewhat of a shifting tar
* Provide a means to seamlessly migrate users across the platform, without any need for prior knowledge of the users location
* Provide a means to seamlessly federate multiple Asterisk versions - or in the future, other technologies as well
* Provide a highly robust provisioning mechanism, to allow users be provisioned without geographical or client restrictions
+
Different approaches to federating Asterisk
===========================================
@@ -41,20 +44,14 @@ This approach dictates the following paradigm:
* The data store provides a means of replicating information from one Asterisk server in the federation to the other, without requiring the service logic to interfere
* Routing decision are based upon local decisions, with full federation visibility
-| Pros | Cons |
-| --- | --- |
-| * Fairly simple to implement using legacy Asterisk versions
-* Does not require any changes to the Asterisk core
-* Can be implemented using Asterisk + AGI/FastAGI + AMI
-* Scales at reasonable ease
-* Well known maintenance and operational paradigms
-* Based on bullet proof, battle tested technologies
- | * Complex to maintain and support when the system scales beyond a certain
-* Contains too many moving parts (Data Store, AGI Server, AMI Server, etc)
-* Relies mostly on hacking the solution, rather than an architectural approachto doing things
-* Requires in-depth understanding of the surrounding tools (Redis, Memcache,MySQL, Python, etc)
-* **Cool factor: low and boring!**
- |
+| Pros | Cons |
+|-----------------------------------------------------------|-----------------------------------------------------------------------------------------------|
+| Fairly simple to implement using legacy Asterisk versions | Complex to maintain and support when the system scales beyond a certain |
+| Does not require any changes to the Asterisk core | Contains too many moving parts (Data Store, AGI Server, AMI Server, etc) |
+| Can be implemented using Asterisk + AGI/FastAGI + AMI | Relies mostly on hacking the solution, rather than an architectural approachto doing things |
+| Scales at reasonable ease | Requires in-depth understanding of the surrounding tools (Redis, Memcache,MySQL, Python, etc) |
+| Well known maintenance and operational paradigms | **Cool factor: low and boring!** |
+| Based on bullet proof, battle tested technologies | |
Partial Data Distribution with Full Service Distribution
--------------------------------------------------------
@@ -68,20 +65,14 @@ This approach dictates the following paradigm:
* Data is no longer replicated from one server to the other, information that is required at the federation level is stored in the centralized data store
* Routing decision are based upon local and centralized querying
-| Pros | Cons |
-| --- | --- |
-| * Fairly simple to implement using legacy Asterisk versions
-* Does not require any changes to the Asterisk core
-* Can be implemented using Asterisk + AGI/FastAGI + AMI
-* Scales at reasonable ease
-* Well known maintenance and operational paradigms
-* Based on bullet proof, battle tested technologies
- | * Provides simpler means for managing the system, however, when scaling beyondthe 20 server mark will require significant management skills
-* Contains too many moving parts (Data Store, AGI Server, AMI Server, etc)
-* We still rely on IT hacking, rather than an architecture. While the centralized datastore provides some architectural support, we're still miles away from it.
-* Requires in-depth understanding of the surrounding tools (Redis, Memcache,MySQL, Python, etc)
-* **Cool factor: medium and gets boring after a few days**
- |
+| Pros | Cons |
+|-----------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| Fairly simple to implement using legacy Asterisk versions | Provides simpler means for managing the system, however, when scaling beyondthe 20 server mark will require significant management skills |
+| Does not require any changes to the Asterisk core | Contains too many moving parts (Data Store, AGI Server, AMI Server, etc) |
+| Can be implemented using Asterisk + AGI/FastAGI + AMI | We still rely on IT hacking, rather than an architecture. While the centralized datastore provides some architectural support, we're still miles away from it. |
+| Scales at reasonable ease | Requires in-depth understanding of the surrounding tools (Redis, Memcache,MySQL, Python, etc) |
+| Well known maintenance and operational paradigms | **Cool factor: medium and gets boring after a few days** |
+| Based on bullet proof, battle tested technologies | |
Partial Data Distribution with Centralized Service Distribution
---------------------------------------------------------------
@@ -95,25 +86,19 @@ Partial Data Distribution with Centralized Service Distribution
* ~~Data is no longer replicated from one server to the other, information that is required at the federation level is stored in the centralized data store~~
* ~~Routing decision are based upon local and centralized querying~~
-| ~~Pros~~ | ~~Cons~~ |
-| --- | --- |
-| * ~~Fairly simple to implement using legacy Asterisk versions~~
-* ~~Does not require any changes to the Asterisk core~~
-* ~~Can be implemented using Asterisk + AGI/FastAGI + AMI~~
-* ~~Scales at reasonable ease~~
-* ~~Well known maintenance and operational paradigms~~
-* ~~Based on bullet proof, battle tested technologies~~
- | * ~~Provides simpler means for managing the system, however, when scaling beyond~~~~the 20 server mark will require significant management skills~~
-* ~~Contains too many moving parts (Data Store, AGI Server, AMI Server, etc)~~
-* ~~We still rely on IT hacking, rather than an architecture. While the centralized datastore provides some architectural support, we're still miles away from it.~~
-* ~~Requires in-depth understanding of the surrounding tools (Redis, Memcache,~~~~MySQL, Python, etc)~~
-* ~~**Cool factor: medium and gets boring after a few days**~~
- |
+| ~~Pros~~ | ~~Cons~~ |
+|---------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| ~~Fairly simple to implement using legacy Asterisk versions~~ | ~~Provides simpler means for managing the system, however, when scaling beyond~~~~the 20 server mark will require significant management skills~~ |
+| ~~Does not require any changes to the Asterisk core~~ | ~~Contains too many moving parts (Data Store, AGI Server, AMI Server, etc)~~ |
+| ~~Can be implemented using Asterisk + AGI/FastAGI + AMI~~ | ~~We still rely on IT hacking, rather than an architecture. While the centralized datastore provides some architectural support, we're still miles away from it.~~ |
+| ~~Scales at reasonable ease~~ | ~~Requires in-depth understanding of the surrounding tools (Redis, Memcache,~~~~MySQL, Python, etc)~~ |
+| ~~Well known maintenance and operational paradigms~~ | ~~**Cool factor: medium and gets boring after a few days**~~ |
+| ~~Based on bullet proof, battle tested technologies~~ | |
Contributors
============
-| Name | E-mail Address |
-| --- | --- |
-| unknown user | [mjordan@digium.com](mailto:mjordan@digium.com) |
+| Name | E-mail Address |
+|-----------------|-----------------------------------------------------------|
+| Matt Jordan | [mjordan@digium.com](mailto:mjordan@digium.com) |
| Nir Simionovich | [nirs@greenfieldtech.net](mailto:nirs@greenfieldtech.net) |
diff --git a/docs/Development/Roadmap/Asterisk-10-Projects/Codecs-and-Audio-Formats/16kHz-Speexmov b/docs/Development/Roadmap/Asterisk-10-Projects/Codecs-and-Audio-Formats/16kHz-Speexmov
deleted file mode 100644
index ab60535bf1..0000000000
Binary files a/docs/Development/Roadmap/Asterisk-10-Projects/Codecs-and-Audio-Formats/16kHz-Speexmov and /dev/null differ
diff --git a/docs/Development/Roadmap/Asterisk-10-Projects/Codecs-and-Audio-Formats/32kHz-Speexmov b/docs/Development/Roadmap/Asterisk-10-Projects/Codecs-and-Audio-Formats/32kHz-Speexmov
deleted file mode 100644
index a0efd4bc9e..0000000000
Binary files a/docs/Development/Roadmap/Asterisk-10-Projects/Codecs-and-Audio-Formats/32kHz-Speexmov and /dev/null differ
diff --git a/docs/Development/Roadmap/Asterisk-10-Projects/Codecs-and-Audio-Formats/8kHz-Speexmov b/docs/Development/Roadmap/Asterisk-10-Projects/Codecs-and-Audio-Formats/8kHz-Speexmov
deleted file mode 100644
index 634f1b4c58..0000000000
Binary files a/docs/Development/Roadmap/Asterisk-10-Projects/Codecs-and-Audio-Formats/8kHz-Speexmov and /dev/null differ
diff --git a/docs/Development/Roadmap/Asterisk-10-Projects/Codecs-and-Audio-Formats/index.md b/docs/Development/Roadmap/Asterisk-10-Projects/Codecs-and-Audio-Formats/index.md
index 21ca402b47..e8380cf8e6 100644
--- a/docs/Development/Roadmap/Asterisk-10-Projects/Codecs-and-Audio-Formats/index.md
+++ b/docs/Development/Roadmap/Asterisk-10-Projects/Codecs-and-Audio-Formats/index.md
@@ -7,24 +7,27 @@ Overview
As a part of the project for Asterisk 10, changes have been made to Asterisk to increase the number of codecs it's capable of supporting, to handle codecs with custom formats, and to support audio sampling rates greater than 16kHz. This has resulted in several practical changes to Asterisk that will benefit its users.
-SIP Only
-Note that the additional codecs discussed here are available for use in Asterisk's SIP channel driver, only. Asterisk 10 does not make them available for IAX2, MGCP, SSCP, H.323, UniSTIM, etc.
+/// note | SIP Only
+Note that the additional codecs discussed here are available for use
+in Asterisk's SIP channel driver, only. Asterisk 10 does not make them
+available for IAX2, MGCP, SSCP, H.323, UniSTIM, etc.
+///
#### Expanded Signed Linear Support
Versions of Asterisk prior to 10 supported 16-bit Signed Linear sampled at 8kHz and at 16kHz (versions 1.6.0 - 1.8). New to Asterisk 10 is support for a much wider range of sampling rates. Asterisk can resample between any of these sampling rates and can read/write raw 16-bit signed linear audio files from/to disk. The complete list of supported sampling rates and file format extensions is:
-| Sampling Rate | Asterisk File format |
-| --- | --- |
-| 8kHz | .sln |
-| 12kHz | .sln12 |
-| 16kHz | .sln16 |
-| 24kHz | .sln24 |
-| 32kHz | .sln32 |
-| 44.1kHz | .sln44 |
-| 48kHz | .sln48 |
-| 96kHz | .sln96 |
-| 192kHz | .sln192 |
+| Sampling Rate | Asterisk File format |
+|---------------|----------------------|
+| 8kHz | .sln |
+| 12kHz | .sln12 |
+| 16kHz | .sln16 |
+| 24kHz | .sln24 |
+| 32kHz | .sln32 |
+| 44.1kHz | .sln44 |
+| 48kHz | .sln48 |
+| 96kHz | .sln96 |
+| 192kHz | .sln192 |
Asterisk 10 removes the format\_sln16 file format in favor of expanded support in the main format\_sln file format for all sampling rates. So, users who notice the absence of format\_sln16 from their Asterisk 10 builds should not panic.
@@ -32,8 +35,10 @@ Users can create 16-bit Signed Linear files of varying sampling rates from WAV f
* SOX example
+```
sox input.wav -t raw -b 16 -r 32000 output.sln
mv output.sln output.sln32
+```
In this example, an input WAV file has been converted to Signed Linear at a depth of 16-bits and at a rate of 32kHz. The resulting output.sln file is then renamed output.sln32 so that it can be processed correctly by Asterisk.
@@ -45,6 +50,7 @@ Asterisk versions prior to 1.8 supported 8kHz Speex. Asterisk 1.8 supports 8 and
sip.conf
+```
[mypeer]
type=peer
secret=mysupersecret!!!
@@ -68,14 +74,15 @@ host=dynamic
context=fancycalls
disallow=all
allow=speex32
+```
In this example, we have created three SIP peers for 3 different devices. The first, mypeer, supports only the 8kHz sampling of Speex; the second, mypeer2, supports only the 16kHz sampling of Speex; and the third, mypeer3, supports the new 32kHz sampling of Speex.
For comparison, here are some Speex samples, saved as WAV files in .mov containers, for ease-of-playback.
-| | | |
-| --- | --- | --- |
-| 8kHz 20100 | 16kHz 20100 | 32kHz 20100 |
+| | | |
+|------------|-------------|-------------|
+| [8kHz 20100](8kHz-Speex.mov) | [16kHz 20100](16kHz-Speex.mov) | [32kHz 20100](32kHz-Speex.mov) |
#### CELT Pass-through Support
@@ -83,14 +90,15 @@ Asterisk 10 adds pass-through support for the CELT codec. CELT provides low-dela
Because the CELT codec is being folded, along with SILK, into a future codec called OPUS, and because the CELT bitstream isn't finalized, we have chosen not to add transcoding support for CELT as this time. CELT is configured in codecs.conf with the following parameters.
-| Option | Values | Description |
-| --- | --- | --- |
-| type | celt | Sets the CELT codec as the type of codec being configured |
-| samprate | 32000, 441000, 48000 | Defines the sampling rate in Hz to be used for the defined codec |
-| framesize | factors of 2 | Represents the duration of each frame in samples. Defaults to 480 and should only be defined if a client does not use the default size. This option allows the codec to split 20ms frames into multiple frames in an anticipatory way. Thus, with 20ms frames at 48kHz are 960 samples, the packet is large. So setting framesize to 480, 20ms frames are transmitted in two 480 sample packets. |
+| Option | Values | Description |
+|-----------|----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| type | celt | Sets the CELT codec as the type of codec being configured |
+| samprate | 32000, 441000, 48000 | Defines the sampling rate in Hz to be used for the defined codec |
+| framesize | factors of 2 | Represents the duration of each frame in samples. Defaults to 480 and should only be defined if a client does not use the default size. This option allows the codec to split 20ms frames into multiple frames in an anticipatory way. Thus, with 20ms frames at 48kHz are 960 samples, the packet is large. So setting framesize to 480, 20ms frames are transmitted in two 480 sample packets. |
##### CELT codecs.conf example
+```
[celt32]
type=celt
samprate=32000
@@ -102,6 +110,7 @@ samprate=44100
[celt48]
type=celt
samprate=48000
+```
In this example, three different CELT codecs are created: one for 32kHz mode, one for 44kHz mode, and another for 48kHz mode.
@@ -109,7 +118,9 @@ These codecs cannot be dynamically changed while Asterisk is running. In order t
To make sure a codec or format is set up correctly, you can execute:
+```
core show codecs
+```
from the Asterisk CLI
@@ -117,6 +128,7 @@ from the Asterisk CLI
Corresponding SIP peer entries to use the CELT codec would look like:
+```
[myceltpeer1]
type=peer
secret=passwordisstillaterriblepassword
@@ -140,6 +152,7 @@ host=dynamic
context=fancycalls
disallow=all
allow=celt48
+```
In this case, we have defined 3 peers, each with a different CELT sampling rate. Thus, you'd probably want to set at least two of them to the same CELT rate, so they could call each other.
@@ -151,17 +164,18 @@ Asterisk 10 provides full support for Skype's SILK codec. SILK is an extremely f
SILK is configured in codecs.conf with the following parameters
-| Option | Values | Description |
-| --- | --- | --- |
-| type | silk | Sets the SILK codec as the type of codec being configured |
-| samprate | 8000, 12000, 16000, 24000 | Defines the sampling rate in Hz to be used for the defined codec |
-| fec | true, false | Sets the use of Forward Error Correction by the codec. Off by default. |
-| packetloss\_percentage | Integer as a percent | Defines the estimated packetloss in the uplink direction. This parameter affects the amount of redundancy built into SILK when fec is enabled. The larger the amount, the higher the consumed bandwidth. Default is 0. 10 is recommended when fec is enabled |
-| maxbitrate | 8kHz: 5000-20000, 12kHz: 7000-25000, 16kHz: 8000-30000, 24kHz: 20000-40000 | Defines, in bps and per the sampling rate being used, the maximum bitrate that will be consumed by the codec |
-| dtx | true, false | Defines whether encoding is done in discontinuous transmission mode. If enabled, bandwidth will be reduced during periods of silence, but additional CPU complexity will be required. Off by default |
+| Option | Values | Description |
+|------------------------|----------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| type | silk | Sets the SILK codec as the type of codec being configured |
+| samprate | 8000, 12000, 16000, 24000 | Defines the sampling rate in Hz to be used for the defined codec |
+| fec | true, false | Sets the use of Forward Error Correction by the codec. Off by default. |
+| packetloss\_percentage | Integer as a percent | Defines the estimated packetloss in the uplink direction. This parameter affects the amount of redundancy built into SILK when fec is enabled. The larger the amount, the higher the consumed bandwidth. Default is 0. 10 is recommended when fec is enabled |
+| maxbitrate | 8kHz: 5000-20000, 12kHz: 7000-25000, 16kHz: 8000-30000, 24kHz: 20000-40000 | Defines, in bps and per the sampling rate being used, the maximum bitrate that will be consumed by the codec |
+| dtx | true, false | Defines whether encoding is done in discontinuous transmission mode. If enabled, bandwidth will be reduced during periods of silence, but additional CPU complexity will be required. Off by default |
##### SILK codecs.conf example
+```
[silk8]
type=silk
samprate=8000
@@ -193,6 +207,7 @@ fec=true
packetloss\_percentage=10
maxbitrate=40000
dtx=false
+```
In this example, four different SILK codecs are created: one each for 8 (silk8), 12 (silk12), 16 (silk16), and 24kHz (silk24).
@@ -200,7 +215,9 @@ These codecs cannot be dynamically changed while Asterisk is running. In order t
To make sure a codec or format is set up correctly, you can execute:
+```
core show codecs
+```
from the Asterisk CLI
@@ -208,6 +225,7 @@ from the Asterisk CLI
Corresponding SIP peer entries to use the SILK codec would look like:
+```
[mysilkpeer1]
type=peer
secret=thanksdigium
@@ -239,6 +257,7 @@ host=dynamic
context=fancycalls
disallow=all
allow=silk24
+```
In this case, we have defined 4 peers, each with a different SILK codec.
diff --git a/docs/Development/Roadmap/Asterisk-11-Projects/AMI-Event-Documentation.md b/docs/Development/Roadmap/Asterisk-11-Projects/AMI-Event-Documentation.md
index 94d17240a0..2967b04c34 100644
--- a/docs/Development/Roadmap/Asterisk-11-Projects/AMI-Event-Documentation.md
+++ b/docs/Development/Roadmap/Asterisk-11-Projects/AMI-Event-Documentation.md
@@ -17,10 +17,10 @@ Not all AMI events are documented in Asterisk 11, and the list of events availab
Building AMI Event Documentation
================================
-!!! note
- Building AMI Event documentation for Asterisk requires both libxml and python.
-
-[//]: # (end-note)
+/// note
+Building AMI Event documentation for Asterisk requires both libxml and
+python.
+///
Because AMI event documentation is handled in a slightly different fashion, a new build option 'make full' is required to generate the documentation from the Asterisk source.
@@ -30,10 +30,12 @@ Because AMI event documentation is handled in a slightly different fashion, a ne
# make install
```
-!!! note
- Because AMI event documentation must be pulled from a variety of locations in the Asterisk source, the time to generate AMI event documentation is noticeably longer then the time to generate other Asterisk documentation.
-
-[//]: # (end-note)
+/// note
+Because AMI event documentation must be pulled from a variety of
+locations in the Asterisk source, the time to generate AMI event
+documentation is noticeably longer then the time to generate other
+Asterisk documentation.
+///
CLI Commands
============
@@ -108,10 +110,9 @@ SubEvent
*CLI>
```
-!!! note
- The output shown above is subject to change
-
-[//]: # (end-note)
+/// note
+The output shown above is subject to change
+///
Writing AMI Event Documentation
===============================
diff --git a/docs/Development/Roadmap/Asterisk-11-Projects/Configuration-parsing-with-the-Config-Options-API.md b/docs/Development/Roadmap/Asterisk-11-Projects/Configuration-parsing-with-the-Config-Options-API.md
index 1282a35d2b..e063d9bcc3 100644
--- a/docs/Development/Roadmap/Asterisk-11-Projects/Configuration-parsing-with-the-Config-Options-API.md
+++ b/docs/Development/Roadmap/Asterisk-11-Projects/Configuration-parsing-with-the-Config-Options-API.md
@@ -44,14 +44,12 @@ custom option handler - A module-specific option handler for custom options.
1. Define an ao2_global_obj hold global the active config snapshot object.
-```
-C
+```c
static AO2_GLOBAL_OBJ_STATIC(globals);
```
2. Define a structure to contain any global settings or containers used for configurable items as well as an ao2 allocator and destructor function for it.
-```
-C
+```c
struct my_config {
struct my_global_cfg *global;
struct ao2_container *items;
@@ -84,8 +82,7 @@ error:
```
3. Define config types to map config categories to the appropriate internal types
-```
-C
+```c
static struct aco_type general_options = {
.type = ACO_GLOBAL,
.category_allow = ACO_WHITELIST,
@@ -104,8 +101,7 @@ static struct aco_type private_options = {
```
4. Create an aco_file for any config files that will be processed. Set the filename and aco_types that are valid for the file.
-```
-C
+```c
struct aco_file my_conf = {
.filename = "my.conf",
.types = ACO_TYPES(&general_option, &private_options),
@@ -113,16 +109,14 @@ struct aco_file my_conf = {
```
5. Define module-level configuration parsing options in a config info struct
-```
-C
+```c
CONFIG_INFO_STANDARD(cfg_info, globals, my_config_alloc,
.files = ACO_FILES(&my_conf),
);
```
6. Initialize the aco_info and register default and custom options with the config info struct
-```
-C
+```c
static int load_module(void)
{
...
@@ -136,8 +130,7 @@ static int load_module(void)
```
7. Process the config via aco_process_config(), passing in whether or not this is a reload or not.
-```
-C
+```c
aco_process_config(&cfg_info, 0);
```
@@ -145,8 +138,7 @@ aco_process_config(&cfg_info, 0);
A completely consistent snapshot of config data can be accessed via
-```
-C
+```c
void some_func_that_accesses_config_data(void)
{
RAII_VAR(struct my_config *, cfg, ao2_global_obj_ref(globals), ao2_cleanup);
@@ -161,7 +153,15 @@ void some_func_that_accesses_config_data(void)
}
```
-!!! info ""
- It is important to note that upon reload, items are completely rebuilt. If a configured item (like a SIP peer) needs to maintain state information between reloads, it is important that it be stored in an object separate from the item in an ao2 object. The item can store a pointer to this state information. When allocating a new item that requires this state information, do a search for the item in the active config and store a reference to to its state in the newly allocated item. If no item is found, allocate a new state object and store that reference in the item. See skel_level_alloc and skel_find_or_create_state in apps/app_skel.c for an example.
-
-[//]: # (end-info)
+/// note
+It is important to note that upon reload, items are completely
+rebuilt. If a configured item (like a SIP peer) needs to maintain
+state information between reloads, it is important that it be stored
+in an object separate from the item in an ao2 object. The item can
+store a pointer to this state information. When allocating a new item
+that requires this state information, do a search for the item in the
+active config and store a reference to to its state in the newly
+allocated item. If no item is found, allocate a new state object and
+store that reference in the item. See skel_level_alloc and
+skel_find_or_create_state in apps/app_skel.c for an example.
+///
diff --git a/docs/Development/Roadmap/Asterisk-12-Projects/Asterisk-12-API-Improvements/Stasis-Message-Bus/Using-the-Stasis-Message-Bus/Stasis-Subscriber-Shutdown-Problem.md b/docs/Development/Roadmap/Asterisk-12-Projects/Asterisk-12-API-Improvements/Stasis-Message-Bus/Using-the-Stasis-Message-Bus/Stasis-Subscriber-Shutdown-Problem.md
index b2e0fa689b..ab08287ac4 100644
--- a/docs/Development/Roadmap/Asterisk-12-Projects/Asterisk-12-API-Improvements/Stasis-Message-Bus/Using-the-Stasis-Message-Bus/Stasis-Subscriber-Shutdown-Problem.md
+++ b/docs/Development/Roadmap/Asterisk-12-Projects/Asterisk-12-API-Improvements/Stasis-Message-Bus/Using-the-Stasis-Message-Bus/Stasis-Subscriber-Shutdown-Problem.md
@@ -21,7 +21,7 @@ The first time we wrote subscription code, it looked like this:
Bad code we all wrote at first
-```
+```c
struct ast_foo {
/* foo's stuff */
/*! Very important subscription */
@@ -65,7 +65,7 @@ Okay, you notice the problem, and it's an easy fix. The subscription should have
Bad code we all wrote second
-```
+```c
struct ast_foo {
/* foo's stuff */
/*! Very important subscription */
@@ -115,7 +115,7 @@ Now we've seen it all. We've learned our lessons. Now we can properly code up ho
Good code we finally wrote there at the end
-```
+```c
struct ast_foo {
/* foo's stuff */
/*! Very important subscription */
diff --git a/docs/Development/Roadmap/Asterisk-12-Projects/Asterisk-12-Bridging-Project/Asterisk-12-Bridging-API.md b/docs/Development/Roadmap/Asterisk-12-Projects/Asterisk-12-Bridging-Project/Asterisk-12-Bridging-API.md
index bbdf01f85a..7159bee498 100644
--- a/docs/Development/Roadmap/Asterisk-12-Projects/Asterisk-12-Bridging-Project/Asterisk-12-Bridging-API.md
+++ b/docs/Development/Roadmap/Asterisk-12-Projects/Asterisk-12-Bridging-Project/Asterisk-12-Bridging-API.md
@@ -3,10 +3,13 @@ title: Asterisk 12 Bridging API
pageid: 22088074
---
-!!! warning READ THIS
- The API described below is a work in progress. Certain aspects, such as the semantics of what happens to a channel when it is ejected from a bridge and needs to execute a new location in the dialplan, are still being worked out. Treat the documentation here as a working reference, rather than a contractual guarantee.
-
-[//]: # (end-warning)
+/// warning | READ THIS
+The API described below is a work in progress. Certain aspects, such
+as the semantics of what happens to a channel when it is ejected from
+a bridge and needs to execute a new location in the dialplan, are
+still being worked out. Treat the documentation here as a working
+reference, rather than a contractual guarantee.
+///
[Bridging Framework](http://svn.asterisk.org/svn/asterisk/team/group/bridge_construction/include/asterisk/bridging.h)
=====================================================================================================================
@@ -658,10 +661,10 @@ int ast_bridge_unsuspend(struct ast_bridge *bridge, struct ast_channel *chan);
Change the state of a bridged channel.
-!!! warning WARNING
- You shouldn't use this unless you are implementing a bridging feature hook.
-
-[//]: # (end-warning)
+/// warning
+You shouldn't use this unless you are implementing a bridging feature
+hook.
+///
```
/*!
diff --git a/docs/Development/Roadmap/Asterisk-12-Projects/Asterisk-12-Bridging-Project/Asterisk-12-Bridging-Use-Cases.md b/docs/Development/Roadmap/Asterisk-12-Projects/Asterisk-12-Bridging-Project/Asterisk-12-Bridging-Use-Cases.md
index d1c8c82f19..4b3e4c60c0 100644
--- a/docs/Development/Roadmap/Asterisk-12-Projects/Asterisk-12-Bridging-Project/Asterisk-12-Bridging-Use-Cases.md
+++ b/docs/Development/Roadmap/Asterisk-12-Projects/Asterisk-12-Bridging-Project/Asterisk-12-Bridging-Use-Cases.md
@@ -5,10 +5,11 @@ pageid: 22088050
The following are use cases for Bridging in Asterisk. These are written at a very high level, so details regarding the specific mechanism that causes a Bridge to be created may be implied.
-!!! note Note
- Unless otherwise specified, it is assumed that all channels are hung up, resources disposed of, and the bridge destroyed at the end of any use case.
-
-[//]: # (end-note)
+/// note
+Unless otherwise specified, it is assumed that all channels are hung
+up, resources disposed of, and the bridge destroyed at the end of any
+use case.
+///
Two Party Bridging
==================
@@ -93,12 +94,19 @@ Mid-Call Events
DTMF Features
=============
-!!! note Note
- 1. For each DTMF initiated feature, it should be assumed that unless otherwise specified, the option only has an effect on the specified party. Thus, if a feature applies to the caller, the callee should **not** be able to use the feature.
- 2. If the feature can be initiated by one party, then a configuration item exists to have it initiated by the other party as well. For example, if a caller can initiate a feature because of a configuration parameter, then another configuration parameter exists that lets the callee initiate the same feature.
- 3. DTMF features are not specific to two-party calls, unless otherwise noted.
-
-[//]: # (end-note)
+/// note
+1. For each DTMF initiated feature, it should be assumed that unless
+ otherwise specified, the option only has an effect on the specified
+ party. Thus, if a feature applies to the caller, the callee should
+ **not** be able to use the feature.
+2. If the feature can be initiated by one party, then a configuration
+ item exists to have it initiated by the other party as well. For
+ example, if a caller can initiate a feature because of a
+ configuration parameter, then another configuration parameter
+ exists that lets the callee initiate the same feature.
+3. DTMF features are not specific to two-party calls, unless otherwise
+ noted.
+///
DTMF Disconnect
---------------
diff --git a/docs/Development/Roadmap/Asterisk-12-Projects/Asterisk-12-Bridging-Project/index.md b/docs/Development/Roadmap/Asterisk-12-Projects/Asterisk-12-Bridging-Project/index.md
index 16695d69d3..69152d5194 100644
--- a/docs/Development/Roadmap/Asterisk-12-Projects/Asterisk-12-Bridging-Project/index.md
+++ b/docs/Development/Roadmap/Asterisk-12-Projects/Asterisk-12-Bridging-Project/index.md
@@ -3,10 +3,11 @@ title: Overview
pageid: 22088024
---
-!!! note
- This page is a living document; expect missing and incomplete information. Still, feel free to discuss on [asterisk-dev](http://lists.digium.com/mailman/listinfo/asterisk-dev).
-
-[//]: # (end-note)
+/// note
+This page is a living document; expect missing and incomplete
+information. Still, feel free to discuss on
+[asterisk-dev](http://lists.digium.com/mailman/listinfo/asterisk-dev).
+///
Project Overview
================
@@ -48,10 +49,9 @@ So, Masquerades are bad. But why are they used everywhere?
Why Bridging Uses Masquerades and what We can do about it
---------------------------------------------------------
-!!! tip Channel Farm
- "All channels are created equal, but some channels are created more equal than others."
-
-[//]: # (end-tip)
+/// tip | Channel Farm
+"All channels are created equal, but some channels are created more equal than others."
+///
Not all channels get an execution thread (`pbx_thread`) in Asterisk. In general, an inbound channel get's a thread; outbound channels do not. As a result, a two-party bridge that is created between the two channels uses the inbound channel's `pbx_thread` to service frames between the two channels. Regardless of the two-party bridge type in play, this is how it works in Asterisk.
@@ -63,10 +63,9 @@ You can see what happened next: everything started to use Masquerades to get aro
Then, along came [ConfBridge](/Configuration/Applications/Conferencing-Applications/ConfBridge).
-!!! note We All Do
- Ignore MeetMe.
-
-[//]: # (end-note)
+/// note | We All Do
+Ignore MeetMe.
+///
ConfBridge used a brand spiffy "new" (as in Asterisk 1.6 timeframe) Bridging API developed by Joshua Colp. A bridge becomes a first class object, and no longer a state that two channels happen to find themselves in. Channels owned by a bridge object are each given a thread. Even more interesting, the Bridging API provided an abstraction above how the media of the channels in the bridge was mixed. ConfBridge, for example, used the softmix bridging technology, suitable for multiple channels in a bridge. However, there are other bridging technologies - some optimized for managing two channels (or sets of two channels). Others - such as bridging technologies developed for special purpose applications - are possible. The Bridging API itself provides safe mechanisms to move channels between bridges, merge bridges, and generally do things without the need for masquerades.
@@ -84,12 +83,15 @@ But, a wholesale migration to the Bridging API let's us:
* Switch between two and multi-party bridging seamlessly
* Present a sane model of the bridging world to the APIs
-!!! tip A word of advice
- If you're familiar with the bridging code in `features.c`, you probably have a good idea of how big a task this work is. When you do away with the bridging loop, lots of things break, and they aren't all obvious. CDRs break. CEL breaks. Queue Logs probably break. AMI is wonky. DTMF handling has to be tweaked significantly. Lots change.
+/// tip | A word of advice
+If you're familiar with the bridging code in `features.c`, you
+probably have a good idea of how big a task this work is. When you do
+away with the bridging loop, lots of things break, and they aren't all
+obvious. CDRs break. CEL breaks. Queue Logs probably break. AMI is
+wonky. DTMF handling has to be tweaked significantly. Lots change.
- This is scary, but it's time.
-
-[//]: # (end-tip)
+This is scary, but it's time.
+///
Requirements and Specification
==============================
@@ -290,10 +292,9 @@ Problem is worse for ConfBridge. You cannot swap a channel into that bridge beca
To eliminate the masquerade here it is likely that every application needs to become a mini channel driver attaching to a mini bridge associated with every channel. A radical rethink would be necessary for PBX and bridges.
-!!! note
- We'd really like to do that, but won't have time.
-
-[//]: # (end-note)
+/// note
+We'd really like to do that, but won't have time.
+///
#### int ast_bridge_park(struct ast_bridge \*parking_bridge, struct ast_bridge_channel \*chan, struct ast_bridge_channel \*swap);
@@ -548,10 +549,11 @@ channel private
* The bridge tech needs to change to a normal bridge type.
* The bridge can have a timeout to connect.
-!!! note
- We are, unfortunately, punting on the Early Media Bridge Technology. Not because it isn't awesome or the right way to do it, but because app_dial and app_queue are a bitch to refactor.
-
-[//]: # (end-note)
+/// note
+We are, unfortunately, punting on the Early Media Bridge
+Technology. Not because it isn't awesome or the right way to do it,
+but because app_dial and app_queue are a bitch to refactor.
+///
##### Parking bridge tech:
@@ -654,10 +656,9 @@ channel private
* while the pickup channel is coming into the bridge. Otherwise we would
* wind up with a three or more party bridge.
-!!! note
- This won't be how this works. It's still going to be a masquerade.
-
-[//]: # (end-note)
+/// note
+This won't be how this works. It's still going to be a masquerade.
+///
##### Local channel optimization:
@@ -737,17 +738,20 @@ These only represent different ways of erecting bridges between parties. They do
Call pickup occurs entirely before a bridge is formed, therefore it does not belong in a suite of bridge tests.
-!!! note Note
- This may actually change, if channels are placed into a new bridge technology that performs early media playback ("Early Bridge"). This would be advantageous as the channel picking up the call would simply join the bridge with the channel in early media, and the bridge technology would swap from the Early Bridge technology to a compatible Two-Party bridge technology.
-
- If that occurs, this test plan will be updated.
-
-[//]: # (end-note)
+/// note
+This may actually change, if channels are placed into a new bridge
+technology that performs early media playback ("Early Bridge"). This
+would be advantageous as the channel picking up the call would simply
+join the bridge with the channel in early media, and the bridge
+technology would swap from the Early Bridge technology to a compatible
+Two-Party bridge technology.
-!!! note Note #2
- Most likely, call pickup will not have an early bridge
+If that occurs, this test plan will be updated.
+///
-[//]: # (end-note)
+/// note | Note #2
+Most likely, call pickup will not have an early bridge
+///
### Invoking bridges from multiple applications
@@ -799,17 +803,13 @@ High Level Bridging construction tasks:
* Implement early bridging. I'm now thinking that the early media bridge will turn into just enhancing the dialing API because of the way Page works. Dial/Queue/FollowMe would need to be converted to use the dialing API.
-!!! note
- Punt.
-
-[//]: # (end-note)
+/// note | Punt
+///
* Dial/Queue/FollowMe/Pickup updated to use early bridging.
-!!! note
- Punt.
-
-[//]: # (end-note)
+/// note | Punt
+///
* Get DTMF transfer features on par with current functionality. DTMF attended transfer will need a manager thread to handle operations after Party B hangs up and before Party C answers. Bonus is that the new bridging API allows threeway conferences. Since features.conf is being gutted should we eliminate it in favor of new config files?
diff --git a/docs/Development/Roadmap/Asterisk-12-Projects/Data-Access-Layer-Design.md b/docs/Development/Roadmap/Asterisk-12-Projects/Data-Access-Layer-Design.md
index 8f0fb1e385..40d3d01689 100644
--- a/docs/Development/Roadmap/Asterisk-12-Projects/Data-Access-Layer-Design.md
+++ b/docs/Development/Roadmap/Asterisk-12-Projects/Data-Access-Layer-Design.md
@@ -67,10 +67,12 @@ The ast_dal_retrieve_multiple API call will return a container of all objects fo
Objects returned are always copies and can be modified.
-!!! note
- After examining the usage of configuration and persistent objects within Asterisk the vast majority is simply retrieval, with no creation/deletion/updating. This makes me think that the behavior of returning a copy should be available as a flag.
-
-[//]: # (end-note)
+/// note
+After examining the usage of configuration and persistent objects
+within Asterisk the vast majority is simply retrieval, with no
+creation/deletion/updating. This makes me think that the behavior of
+returning a copy should be available as a flag.
+///
Search criteria allows specifying the specific unique identifier for an object OR specific fields with expected values. The search criteria gets passed to the underlying providers so they have the most information available to efficiently retrieve the object.
diff --git a/docs/Development/Roadmap/Asterisk-12-Projects/New-SIP-channel-driver/Asterisk-12-chan_pjsip-CLI-Specification.md b/docs/Development/Roadmap/Asterisk-12-Projects/New-SIP-channel-driver/Asterisk-12-chan_pjsip-CLI-Specification.md
index a7d28c3c39..2e3e1474ea 100644
--- a/docs/Development/Roadmap/Asterisk-12-Projects/New-SIP-channel-driver/Asterisk-12-chan_pjsip-CLI-Specification.md
+++ b/docs/Development/Roadmap/Asterisk-12-Projects/New-SIP-channel-driver/Asterisk-12-chan_pjsip-CLI-Specification.md
@@ -3,10 +3,8 @@ title: Asterisk 12 chan_pjsip CLI Specification
pageid: 26478200
---
-!!! warning
- This is a draft under construction.
-
-[//]: # (end-warning)
+/// warning | This is a draft under construction.
+///
Asterisk 12 chan_pjsip CLI Specification
=========================================
@@ -20,8 +18,8 @@ These are guidelines meant to help readability of the output.
* 1 blank line before output and after output to separate the output from the prompt (output must begin and end with newlines)
* 2 spaces before each line of output to separate the output from the left side of terminal
* For tabulated content there should be 2 spaces between the longest lines in each column.
-* For