From a92bcdf1754c0db4bfcabd0f31814dfce7e245d5 Mon Sep 17 00:00:00 2001 From: manny-r31 Date: Tue, 23 Sep 2025 16:50:08 -0400 Subject: [PATCH 01/13] Recreated and restructured fax first steps guide. Renamed fax-1,2,3.webp files and moved to correct locations. Added images utilizing new dashboard for main guide. --- .../first-steps-with-fax/index.mdx | 176 +++++++++++++----- .../assign-resource-messaging-example.webp | Bin 0 -> 13670 bytes .../resources/fax-cxml-script-example.webp | Bin 0 -> 9874 bytes .../resources/hybrid-fax-handling-paste.webp} | Bin .../resources/hybrid-fax-handling.webp} | Bin .../dashboard/sidebar/fax-logs-example.webp | Bin 0 -> 23718 bytes .../dashboard/sidebar/hybrid-fax-logs.webp} | Bin 7 files changed, 131 insertions(+), 45 deletions(-) create mode 100644 website/images/dashboard/phone-numbers/assign-resource-messaging-example.webp create mode 100644 website/images/dashboard/resources/fax-cxml-script-example.webp rename website/{docs/main/home/calling/fax/getting-started/first-steps-with-fax/fax-2.webp => images/dashboard/resources/hybrid-fax-handling-paste.webp} (100%) rename website/{docs/main/home/calling/fax/getting-started/first-steps-with-fax/fax-1.webp => images/dashboard/resources/hybrid-fax-handling.webp} (100%) create mode 100644 website/images/dashboard/sidebar/fax-logs-example.webp rename website/{docs/main/home/calling/fax/getting-started/first-steps-with-fax/fax-3.webp => images/dashboard/sidebar/hybrid-fax-logs.webp} (100%) diff --git a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx index e57d82920..d8d3f709b 100644 --- a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx +++ b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx @@ -1,5 +1,8 @@ --- +title: First steps with fax +sidebar_label: First steps with fax slug: /fax/getting-started/first-steps-with-fax +description: Learn how to send and receive your first fax using SignalWire's APIs sidebar_position: 0 x-custom: tags: @@ -12,30 +15,75 @@ x-custom: - product:fax --- -# Sending and Receiving Fax -It's easy to start sending and receiving Fax using SignalWire's APIs! You will need at least one number to send and receive faxes, so if you don't have one already, please follow the instructions below. +import Subtitle from "@site/src/components/typography/Subtitle"; +import ResourceAdmonition from '/docs/main/_common/dashboard/_resource-admonition.mdx'; +import LegacyInstructions from '/docs/main/_common/dashboard/legacy-instructions.mdx'; +import UiAccordion from '/docs/main/_common/dashboard/_ui-accordion.mdx'; -## Obtaining and configuring a number -[Log in](https://signalwire.com/signin) to your SignalWire Space. From the Phone Numbers section, you can [buy a new phone number](/platform/phone-numbers/getting-started/buying-a-phone-number). +# First steps with fax -## Receiving your first fax -There are two parts to receiving a fax: -1. A SignalWire Phone Number; -2. The instructions to actually receive the Fax. +This guide will walk you through sending and receiving your first fax using SignalWire. You'll learn how to configure a phone number, create cXML scripts to handle faxes, and use our APIs to send faxes programmatically. + +## Prerequisites + +Before you begin, you'll need: +- A [SignalWire account](https://signalwire.com/signup) +- At least one phone number capable of receiving faxes +- Your API credentials (Space URL, Project ID, and API token) -After you have acquired a number, or in case you have one already, open its settings by clicking on "Edit Settings". Scroll down until you reach "Voice and Fax Settings", as shown in the next figure, and configure it to: -- "ACCEPT INCOMING CALLS AS" -> Fax -- "HANDLE FAXES USING" -> LaML Webhooks +## Receiving your first fax + +To receive faxes, you'll configure a phone number to handle incoming faxes using a cXML script that defines what happens when a fax arrives.
- A screenshot of the settings for a fax number. Under the Voice and Fax Settings section, a number of values are defined. 'Accept Incoming Calls As' is set to 'Fax'. 'Handle Faxes Using' is set to 'LaML Webhooks'. -
Phone Number Settings
+ ```mermaid + graph LR + Sender["Fax Sender"] + + subgraph CompanyNumbers["Your SignalWire Space"] + N1["+1 (xxx) xxxx"] + end + + subgraph XML["cXML Response"] + C["<?xml>
<Response>
<Receive action='/fax/received'/>
</Response>"] + end + + %% Positioning adjustments + Sender -- "(1) Sender transmits fax to your number" --> N1 + N1 -- "(2) SignalWire fetches the cXML script for this number" --> C + C -- "(3) The Receive verb processes and stores the fax in your SignalWire Dashboard" --> N1 + ``` +
+ How incoming faxes are processed using cXML scripts +
-### Setting up the instructions to receive faxes -#### Using cXML scripts -cXML scripts allow you to tell SignalWire how to handle calls, messages, or faxes by using instructions called Verbs. You can learn more about cXML scripts on [this article](/compatibility-api/guides/general/creating-and-using-cxml-scripts), but essentially we need to create a new Bin in the LaML section of the Dashboard with the following instructions: + + + +### Obtain a phone number + +First, you need a SignalWire phone number capable of receiving faxes. + +[Log in](https://signalwire.com/signin) to your SignalWire Space. If you don't have a number yet, navigate to the Phone Numbers section and [buy a new phone number](/platform/phone-numbers/getting-started/buying-a-phone-number). + + +### Create a cXML script + +From your [SignalWire Dashboard](https://my.signalwire.com/dashboard), create a new Resource by selecting the Script option, then choose "cXML script". + + + ![The new resource dialog showing cXML script creation.](@image/dashboard/resources/new-cxml-bin.png) + + +In the pane that appears, select the "Script Will Be Used For" dropdown, then select Faxing. + + + ![The cXML script editor showing the faxing configuration option selected.](@image/dashboard/resources/fax-cxml-script-example.webp) + + +Paste the following XML into your script: ```xml @@ -44,46 +92,54 @@ cXML scripts allow you to tell SignalWire how to handle calls, messages, or faxe ``` -Lastly, we need to connect the phone number with the instructions to receive the fax, so we copy the Bin's URL from the cXML Applications section of the Dashboard and paste it in the phone number's "WHEN A FAX COMES IN" field, like this: +Save the script, it should now be located in your Resources tab on the left sidebar under Scripts. -
- A screenshot of Voice and Fax Settings. The 'When a Fax Comes In' field is circled in red, and annotated with the instructions 'Paste the Bin URL Here'. -
Updating the Phone Number instructions.
-
+### Configure phone number to handle faxes -That's it! You can now start receiving faxes on your phone number, and they will appear under LaML -> Faxes in your Dashboard: +Navigate to the "Phone Numbers" tab on the left sidebar. From this tab, click on your newly purchased phone number, then on the "edit settings" option. In the settings page, select "Assign Resource" for the "Inbound Message Settings" option on the page. -
- A screenshot of the SignalWire Project page. The Faxes tab within the LāML section is selected, showing a log of faxes. -
Faxes Tab
-
+ + ![Phone number settings page showing the Assign Resource button for inbound messages.](@image/dashboard/phone-numbers/assign-resource-full.png) + + +Select the newly created cXML script, then click "Save" to apply the configuration. -#### Using Compatibility SDKs -If you wish to avoid using SignalWire's cXML Applications, you can use our SDKs and host the instructions yourself. Please see our [`` Verb instructions](/compatibility-api/cxml/fax/receive#receive-a-fax) for specific code examples. +### Test your setup -You'll then need to make your code accessible to SignalWire through a Webhook. We have a great [guide on how to do this using ngrok](/platform/basics/guides/technical-troubleshooting/how-to-test-webhooks-with-ngrok)! +Send a test fax to your configured phone number. Once received, it can be viewed in your dashboard under the logs sidebar option. These will be located in their own, specific "fax" logs tab: + + + ![The logs page showing various log categories including fax logs.](@image/dashboard/sidebar/fax-logs-example.webp) + + +
+ +### Alternative: Using Compatibility SDKs + +If you prefer to host the fax handling logic yourself, you can use our SDKs instead of cXML scripts. See our [`` verb documentation](/compatibility-api/cxml/fax/receive#receive-a-fax) for code examples. + +You'll need to make your code accessible to SignalWire through a webhook. We have a [guide on testing webhooks with ngrok](/platform/basics/guides/technical-troubleshooting/how-to-test-webhooks-with-ngrok) to help you get started. ## Sending your first fax -There are three parts to sending a fax: -1. A SignalWire Phone Number; -2. The destination number; -3. The publicly available media to be sent, such as a PDF file. -### Using our REST API -Using our [Send a Fax endpoint](/rest/compatibility-api/endpoints/send-fax) you can make a POST request to +A fax can be sent by utilizing either the SignalWire REST API or the Compatability SDK -`https://.signalwire.com/api/laml/2010-04-01/Accounts//Faxes` +### Using the REST API -with the following body parameters: -- `From` -- `To` -- `MediaUrl` +Send a fax by making a POST request to the [Send Fax endpoint](/rest/compatibility-api/endpoints/send-fax): -### Using Compatibility SDKs -You can send faxes using [our SDK's Send a Fax function](/compatibility-api/client-sdks/methods/faxes/send), in multiple languages: +```bash +POST https://.signalwire.com/api/laml/2010-04-01/Accounts//Faxes +``` -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +Required parameters: +- `From` - Your SignalWire phone number +- `To` - The destination fax number +- `MediaUrl` - URL to the document you want to send + +### Using the Compatibility SDK + +You can also send faxes using our [Compatibility SDK's Send a Fax function](/compatibility-api/client-sdks/methods/faxes/send): @@ -184,6 +240,36 @@ puts fax.sid + + + + + + +Follow the above guide with these changes: + +### Create a cXML Script + +Navigate to the "LaML/cXML" section of your Dashboard and create a new cXML bin. + +### Assign a phone number + +Open the settings for your phone number. Under "Voice and Fax Settings": +- Set "Accept Incoming Calls As" to "Fax" +- Set "Handle Faxes Using" to "LaML Webhooks" +- Select your cXML script from the dropdown for "When a Fax Comes In" + + + + + + + ## Next steps -Congratulations! You can now send and receive faxes using SignalWire. You are now ready to explore the advanced guides in the Fax section from the left menu. +Here are some helpful guides to continue your fax implementation: + +- [Common fax errors](/fax/getting-started/common-fax-errors) - Troubleshoot and understand common fax transmission errors +- [List faxes to CSV](/fax/getting-started/list-faxes-to-csv-in-all-languages) - Export your fax history to CSV format for reporting +- [Filter faxes by number, status, and date](/fax/getting-started/filter-faxes-by-number-status-and-date) - Query and filter your fax records + diff --git a/website/images/dashboard/phone-numbers/assign-resource-messaging-example.webp b/website/images/dashboard/phone-numbers/assign-resource-messaging-example.webp new file mode 100644 index 0000000000000000000000000000000000000000..6753cee46899213e932631ef52a6ac8754b9de78 GIT binary patch literal 13670 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 z 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 literal 0 HcmV?d00001 diff --git a/website/images/dashboard/resources/fax-cxml-script-example.webp b/website/images/dashboard/resources/fax-cxml-script-example.webp new file mode 100644 index 0000000000000000000000000000000000000000..77dc1af8678135658dc3d4c6bf3d14bcff5b6b00 GIT binary patch literal 9874 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 Llkfll00000WjbQQ literal 0 HcmV?d00001 diff --git a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/fax-3.webp b/website/images/dashboard/sidebar/hybrid-fax-logs.webp similarity index 100% rename from website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/fax-3.webp rename to website/images/dashboard/sidebar/hybrid-fax-logs.webp From eedb654f49458a8b1a58f0f6484a0f1bb728690e Mon Sep 17 00:00:00 2001 From: manny-r31 Date: Wed, 24 Sep 2025 13:24:40 -0400 Subject: [PATCH 02/13] Created tab for resource creation/assignment dedicated to SWML. Resolved formatting inconsistencies and updated cxml script example image. --- .../first-steps-with-fax/index.mdx | 75 ++++++++++++++---- .../resources/fax-cxml-script-example.webp | Bin 9874 -> 45882 bytes 2 files changed, 59 insertions(+), 16 deletions(-) diff --git a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx index d8d3f709b..a197e4ded 100644 --- a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx +++ b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx @@ -34,7 +34,7 @@ Before you begin, you'll need: ## Receiving your first fax -To receive faxes, you'll configure a phone number to handle incoming faxes using a cXML script that defines what happens when a fax arrives. +To receive faxes, you'll configure a phone number to handle incoming faxes using either a cXML or SWML script that defines what happens when a fax arrives.
```mermaid @@ -45,17 +45,17 @@ To receive faxes, you'll configure a phone number to handle incoming faxes using N1["+1 (xxx) xxxx"] end - subgraph XML["cXML Response"] - C["<?xml>
<Response>
<Receive action='/fax/received'/>
</Response>"] + subgraph Script["Script Response"] + C["cXML: <Receive/>
or
SWML: receive_fax"] end %% Positioning adjustments Sender -- "(1) Sender transmits fax to your number" --> N1 - N1 -- "(2) SignalWire fetches the cXML script for this number" --> C - C -- "(3) The Receive verb processes and stores the fax in your SignalWire Dashboard" --> N1 + N1 -- "(2) SignalWire fetches the script for this number" --> C + C -- "(3) Script processes and stores the fax in your SignalWire Dashboard" --> N1 ```
- How incoming faxes are processed using cXML scripts + How incoming faxes are processed using cXML or SWML scripts
@@ -69,7 +69,12 @@ First, you need a SignalWire phone number capable of receiving faxes. [Log in](https://signalwire.com/signin) to your SignalWire Space. If you don't have a number yet, navigate to the Phone Numbers section and [buy a new phone number](/platform/phone-numbers/getting-started/buying-a-phone-number). -### Create a cXML script +### Set up your fax handler + + + + +**Create a cXML script** From your [SignalWire Dashboard](https://my.signalwire.com/dashboard), create a new Resource by selecting the Script option, then choose "cXML script". @@ -88,22 +93,57 @@ Paste the following XML into your script: ```xml - + ``` -Save the script, it should now be located in your Resources tab on the left sidebar under Scripts. +Save the script; it should now be located in your Resources tab on the left sidebar under Scripts. -### Configure phone number to handle faxes +**Configure phone number for cXML** -Navigate to the "Phone Numbers" tab on the left sidebar. From this tab, click on your newly purchased phone number, then on the "edit settings" option. In the settings page, select "Assign Resource" for the "Inbound Message Settings" option on the page. +Navigate to the "Phone Numbers" tab on the left sidebar. From this tab, click on your newly purchased phone number, then on the "edit settings" option. In the settings page that appears, select "Assign Resource" for "Inbound Call Settings". - - ![Phone number settings page showing the Assign Resource button for inbound messages.](@image/dashboard/phone-numbers/assign-resource-full.png) + + ![Phone number settings page showing the Assign Resource button for inbound calls.](@image/dashboard/phone-numbers/assign-resource-full.png) Select the newly created cXML script, then click "Save" to apply the configuration. + + + +**Create a SWML script** + +From your [SignalWire Dashboard](https://my.signalwire.com/dashboard), create a new Resource by navigating to the resources tab, then select the "New Script" option and choose "New SWML application". + + + ![The new resource dialog showing cXML script creation.](@image/dashboard/resources/swml-resource-vid.webp) + + +Paste the following code into your script: + +```yaml andJson +version: 1.0.0 +sections: + main: + - receive_fax: {} +``` + +Save the script; it should now be located in your Resources tab on the left sidebar under Scripts. + +**Configure phone number for SWML** + +Navigate to the "Phone Numbers" tab on the left sidebar. From this tab, click on your newly purchased phone number, then on the "edit settings" option. In the settings page that appears, select "Assign Resource" for "Inbound Call Settings". + + + ![Phone number settings page showing the Assign Resource button for inbound calls.](@image/dashboard/phone-numbers/assign-resource-full.png) + + +Select the newly created SWML script, then click "Save" to apply the configuration. + + + + ### Test your setup Send a test fax to your configured phone number. Once received, it can be viewed in your dashboard under the logs sidebar option. These will be located in their own, specific "fax" logs tab: @@ -114,15 +154,18 @@ Send a test fax to your configured phone number. Once received, it can be viewed -### Alternative: Using Compatibility SDKs +### Alternative: Using Compatibility SDKs or webhooks + +If you prefer to host the fax handling logic yourself, you have two options: -If you prefer to host the fax handling logic yourself, you can use our SDKs instead of cXML scripts. See our [`` verb documentation](/compatibility-api/cxml/fax/receive#receive-a-fax) for code examples. +- **For cXML**: Use our Compatibility SDKs. See our [`` verb documentation](/compatibility-api/cxml/fax/receive#receive-a-fax) for code examples. +- **For SWML**: Configure a webhook endpoint that returns SWML. See our [SWML receive_fax documentation](/swml/methods/receive_fax) for more details. You'll need to make your code accessible to SignalWire through a webhook. We have a [guide on testing webhooks with ngrok](/platform/basics/guides/technical-troubleshooting/how-to-test-webhooks-with-ngrok) to help you get started. ## Sending your first fax -A fax can be sent by utilizing either the SignalWire REST API or the Compatability SDK +A fax can be sent by utilizing either the SignalWire REST API or the Compatibility SDK. ### Using the REST API diff --git a/website/images/dashboard/resources/fax-cxml-script-example.webp b/website/images/dashboard/resources/fax-cxml-script-example.webp index 77dc1af8678135658dc3d4c6bf3d14bcff5b6b00..306e917f0b6d6b5333112243797d7444abd732a6 100644 GIT binary patch literal 45882 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 U@n~*PA)Qj7YN!AJ0000000^<>wEzGB literal 9874 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 Date: Mon, 29 Sep 2025 16:18:50 -0400 Subject: [PATCH 03/13] Adjusted page layout. --- .../first-steps-with-fax/index.mdx | 669 +++++++++--------- 1 file changed, 351 insertions(+), 318 deletions(-) diff --git a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx index a197e4ded..400f702bb 100644 --- a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx +++ b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx @@ -1,318 +1,351 @@ ---- -title: First steps with fax -sidebar_label: First steps with fax -slug: /fax/getting-started/first-steps-with-fax -description: Learn how to send and receive your first fax using SignalWire's APIs -sidebar_position: 0 -x-custom: - tags: - - language:javascript - - language:python - - language:csharp - - language:php - - language:ruby - - sdk:compatibility - - product:fax ---- - -import Subtitle from "@site/src/components/typography/Subtitle"; -import ResourceAdmonition from '/docs/main/_common/dashboard/_resource-admonition.mdx'; -import LegacyInstructions from '/docs/main/_common/dashboard/legacy-instructions.mdx'; -import UiAccordion from '/docs/main/_common/dashboard/_ui-accordion.mdx'; - -# First steps with fax - -This guide will walk you through sending and receiving your first fax using SignalWire. You'll learn how to configure a phone number, create cXML scripts to handle faxes, and use our APIs to send faxes programmatically. - -## Prerequisites - -Before you begin, you'll need: -- A [SignalWire account](https://signalwire.com/signup) -- At least one phone number capable of receiving faxes -- Your API credentials (Space URL, Project ID, and API token) - - -## Receiving your first fax - -To receive faxes, you'll configure a phone number to handle incoming faxes using either a cXML or SWML script that defines what happens when a fax arrives. - -
- ```mermaid - graph LR - Sender["Fax Sender"] - - subgraph CompanyNumbers["Your SignalWire Space"] - N1["+1 (xxx) xxxx"] - end - - subgraph Script["Script Response"] - C["cXML: <Receive/>
or
SWML: receive_fax"] - end - - %% Positioning adjustments - Sender -- "(1) Sender transmits fax to your number" --> N1 - N1 -- "(2) SignalWire fetches the script for this number" --> C - C -- "(3) Script processes and stores the fax in your SignalWire Dashboard" --> N1 - ``` -
- How incoming faxes are processed using cXML or SWML scripts -
-
- - - - -### Obtain a phone number - -First, you need a SignalWire phone number capable of receiving faxes. - -[Log in](https://signalwire.com/signin) to your SignalWire Space. If you don't have a number yet, navigate to the Phone Numbers section and [buy a new phone number](/platform/phone-numbers/getting-started/buying-a-phone-number). - - -### Set up your fax handler - - - - -**Create a cXML script** - -From your [SignalWire Dashboard](https://my.signalwire.com/dashboard), create a new Resource by selecting the Script option, then choose "cXML script". - - - ![The new resource dialog showing cXML script creation.](@image/dashboard/resources/new-cxml-bin.png) - - -In the pane that appears, select the "Script Will Be Used For" dropdown, then select Faxing. - - - ![The cXML script editor showing the faxing configuration option selected.](@image/dashboard/resources/fax-cxml-script-example.webp) - - -Paste the following XML into your script: - -```xml - - - - -``` - -Save the script; it should now be located in your Resources tab on the left sidebar under Scripts. - -**Configure phone number for cXML** - -Navigate to the "Phone Numbers" tab on the left sidebar. From this tab, click on your newly purchased phone number, then on the "edit settings" option. In the settings page that appears, select "Assign Resource" for "Inbound Call Settings". - - - ![Phone number settings page showing the Assign Resource button for inbound calls.](@image/dashboard/phone-numbers/assign-resource-full.png) - - -Select the newly created cXML script, then click "Save" to apply the configuration. - - - - -**Create a SWML script** - -From your [SignalWire Dashboard](https://my.signalwire.com/dashboard), create a new Resource by navigating to the resources tab, then select the "New Script" option and choose "New SWML application". - - - ![The new resource dialog showing cXML script creation.](@image/dashboard/resources/swml-resource-vid.webp) - - -Paste the following code into your script: - -```yaml andJson -version: 1.0.0 -sections: - main: - - receive_fax: {} -``` - -Save the script; it should now be located in your Resources tab on the left sidebar under Scripts. - -**Configure phone number for SWML** - -Navigate to the "Phone Numbers" tab on the left sidebar. From this tab, click on your newly purchased phone number, then on the "edit settings" option. In the settings page that appears, select "Assign Resource" for "Inbound Call Settings". - - - ![Phone number settings page showing the Assign Resource button for inbound calls.](@image/dashboard/phone-numbers/assign-resource-full.png) - - -Select the newly created SWML script, then click "Save" to apply the configuration. - - - - -### Test your setup - -Send a test fax to your configured phone number. Once received, it can be viewed in your dashboard under the logs sidebar option. These will be located in their own, specific "fax" logs tab: - - - ![The logs page showing various log categories including fax logs.](@image/dashboard/sidebar/fax-logs-example.webp) - - - - -### Alternative: Using Compatibility SDKs or webhooks - -If you prefer to host the fax handling logic yourself, you have two options: - -- **For cXML**: Use our Compatibility SDKs. See our [`` verb documentation](/compatibility-api/cxml/fax/receive#receive-a-fax) for code examples. -- **For SWML**: Configure a webhook endpoint that returns SWML. See our [SWML receive_fax documentation](/swml/methods/receive_fax) for more details. - -You'll need to make your code accessible to SignalWire through a webhook. We have a [guide on testing webhooks with ngrok](/platform/basics/guides/technical-troubleshooting/how-to-test-webhooks-with-ngrok) to help you get started. - -## Sending your first fax - -A fax can be sent by utilizing either the SignalWire REST API or the Compatibility SDK. - -### Using the REST API - -Send a fax by making a POST request to the [Send Fax endpoint](/rest/compatibility-api/endpoints/send-fax): - -```bash -POST https://.signalwire.com/api/laml/2010-04-01/Accounts//Faxes -``` - -Required parameters: -- `From` - Your SignalWire phone number -- `To` - The destination fax number -- `MediaUrl` - URL to the document you want to send - -### Using the Compatibility SDK - -You can also send faxes using our [Compatibility SDK's Send a Fax function](/compatibility-api/client-sdks/methods/faxes/send): - - - - -```javascript -const { RestClient } = require('@signalwire/compatibility-api') -const client = RestClient('YourProjectID', 'YourAuthToken', { signalwireSpaceUrl: 'example.signalwire.com' }) - -client.fax.faxes.create({ - from: '+13103383454', - to: '+13104456789', - mediaUrl: 'https://example.com/fax.pdf' -}) -.then(fax => console.log(fax.sid)) -.done(); -``` - - - - -```python -from signalwire.rest import Client as signalwire_client - -client = signalwire_client("YourProjectID", "YourAuthToken", signalwire_space_url = 'example.signalwire.com') - -fax = client.fax.faxes \ - .create( - from_='+13103383454', - to='+13104456789', - media_url='https://example.com/fax.pdf' - ) - -print(fax.sid) -``` - - - - -```csharp -using System; -using System.Collections.Generic; -using Twilio; -using Twilio.Rest.Fax.V1; - -class Program -{ - static void Main(string[] args) -{ - TwilioClient.Init("YourProjectID", "YourAuthToken", new Dictionary { ["signalwireSpaceUrl"] = ".signalwire.com" }); - - var fax = FaxResource.Create( - from: "+13103383454", - to: "+13104456789", - mediaUrl: new Uri("https://example.com/fax.pdf") - ); - - Console.WriteLine(fax.Sid); -} -} -``` - - - - -```php - "example.signalwire.com")); - - $fax = $client->fax->v1->faxes - ->create("+13104456789", // to - "https://example.com/fax.pdf", // mediaUrl - array("from" => "+13103383454") - ); - - print($fax->sid); -?> -``` - - - - -```ruby -require 'signalwire/sdk' - -@client = Signalwire::REST::Client.new 'YourProjectID', 'YourAuthToken', signalwire_space_url: "example.signalwire.com" - -fax = @client.fax.faxes -.create( - from: '+13103383454', - to: '+13104456789', - media_url: 'https://example.com/fax.pdf' -) -puts fax.sid -``` - - - - - - - - - - -Follow the above guide with these changes: - -### Create a cXML Script - -Navigate to the "LaML/cXML" section of your Dashboard and create a new cXML bin. - -### Assign a phone number - -Open the settings for your phone number. Under "Voice and Fax Settings": -- Set "Accept Incoming Calls As" to "Fax" -- Set "Handle Faxes Using" to "LaML Webhooks" -- Select your cXML script from the dropdown for "When a Fax Comes In" - - - - - - - -## Next steps - -Here are some helpful guides to continue your fax implementation: - -- [Common fax errors](/fax/getting-started/common-fax-errors) - Troubleshoot and understand common fax transmission errors -- [List faxes to CSV](/fax/getting-started/list-faxes-to-csv-in-all-languages) - Export your fax history to CSV format for reporting -- [Filter faxes by number, status, and date](/fax/getting-started/filter-faxes-by-number-status-and-date) - Query and filter your fax records - +--- +title: First steps with fax +sidebar_label: First steps with fax +slug: /fax/getting-started/first-steps-with-fax +description: Learn how to send and receive your first fax using SignalWire's APIs +sidebar_position: 0 +x-custom: + tags: + - language:javascript + - language:python + - language:csharp + - language:php + - language:ruby + - sdk:compatibility + - product:fax +--- + +import Subtitle from "@site/src/components/typography/Subtitle"; +import ResourceAdmonition from "/docs/main/_common/dashboard/_resource-admonition.mdx"; +import LegacyInstructions from "/docs/main/_common/dashboard/legacy-instructions.mdx"; +import UiAccordion from "/docs/main/_common/dashboard/_ui-accordion.mdx"; + +# First steps with fax + +Learn how to send and receive your first fax using SignalWire. +You'll configure a phone number, create cXML or SWML scripts to handle faxes, and use our APIs to send faxes programmatically. + +## Prerequisites + +Before you begin, you'll need: + +- A [SignalWire account](https://signalwire.com/signup) +- At least one phone number capable of receiving faxes +- Your API credentials (Space URL, Project ID, and API token) + +## Receiving your first fax + +To receive faxes, you'll configure a phone number to handle incoming faxes using either a cXML or SWML script that defines what happens when a fax arrives. + +
+ ```mermaid + graph LR + Sender["Fax Sender"] + + subgraph CompanyNumbers["Your SignalWire Space"] + N1["+1 (xxx) xxxx"] + end + + subgraph Script["Script Response"] + C["cXML: <Receive/>
or
SWML: receive_fax"] + end + + %% Positioning adjustments + Sender -- "(1) Sender transmits fax to your number" --> N1 + N1 -- "(2) SignalWire fetches the script for this number" --> C + C -- "(3) Script processes and stores the fax in your SignalWire Dashboard" --> N1 + ``` + +
+ How incoming faxes are processed using cXML or SWML scripts +
+
+ +### Set up your fax handler with SWML + + + +#### Obtain a phone number + +First, you need a SignalWire phone number capable of receiving faxes. + +[Log in](https://signalwire.com/signin) to your SignalWire Space. +If you don't have a number yet, navigate to the Phone Numbers section and [buy a new phone number](/platform/phone-numbers/getting-started/buying-a-phone-number). + +#### Create a SWML script + +From your [SignalWire Dashboard](https://my.signalwire.com/dashboard), create a new Resource by navigating to the resources tab, then select the "New Script" option and choose "New SWML application". + + + ![The new resource dialog showing cXML script + creation.](@image/dashboard/resources/swml-resource-vid.webp) + + +Paste the following code into your script: + +```yaml andJson +version: 1.0.0 +sections: + main: + - receive_fax: {} +``` + +Save the script; it should now be located in your Resources tab on the left sidebar under Scripts. + +#### Configure phone number for SWML + +Navigate to the "Phone Numbers" tab on the left sidebar. +From this tab, click on your newly purchased phone number, then on the "edit settings" option. +In the settings page that appears, select "Assign Resource" for "Inbound Call Settings". + + + ![Phone number settings page showing the Assign Resource button for inbound + calls.](@image/dashboard/phone-numbers/assign-resource-full.png) + + +Select the newly created SWML script, then click "Save" to apply the configuration. + +#### Test your setup + +Send a test fax to your configured phone number. +Once received, it can be viewed in your dashboard under the logs sidebar option. +These will be located in their own, specific "fax" logs tab: + + + ![The logs page showing various log categories including fax + logs.](@image/dashboard/sidebar/fax-logs-example.webp) + + + + +### Set up your fax handler with cXML + + + +#### Obtain a phone number + +First, you need a SignalWire phone number capable of receiving faxes. + +[Log in](https://signalwire.com/signin) to your SignalWire Space. +If you don't have a number yet, navigate to the Phone Numbers section and [buy a new phone number](/platform/phone-numbers/getting-started/buying-a-phone-number). + +#### Create a cXML script + +From your [SignalWire Dashboard](https://my.signalwire.com/dashboard), create a new Resource by selecting the Script option, then choose "cXML script". + + + ![The new resource dialog showing cXML script + creation.](@image/dashboard/resources/new-cxml-bin.png) + + +In the pane that appears, select the "Script Will Be Used For" dropdown, then select Faxing. + + + ![The cXML script editor showing the faxing configuration option + selected.](@image/dashboard/resources/fax-cxml-script-example.webp) + + +Paste the following XML into your script: + +```xml + + + + +``` + +Save the script; it should now be located in your Resources tab on the left sidebar under Scripts. + +#### Configure phone number for cXML + +Navigate to the "Phone Numbers" tab on the left sidebar. +From this tab, click on your newly purchased phone number, then on the "edit settings" option. +In the settings page that appears, select "Assign Resource" for "Inbound Call Settings". + + + ![Phone number settings page showing the Assign Resource button for inbound + calls.](@image/dashboard/phone-numbers/assign-resource-full.png) + + +Select the newly created cXML script, then click "Save" to apply the configuration. + +#### Test your setup + +Send a test fax to your configured phone number. +Once received, it can be viewed in your dashboard under the logs sidebar option. +These will be located in their own, specific "fax" logs tab: + + + ![The logs page showing various log categories including fax + logs.](@image/dashboard/sidebar/fax-logs-example.webp) + + + + +### Alternative: Using Compatibility SDKs or webhooks + +If you prefer to host the fax handling logic yourself, you have two options: + +- **For cXML**: Use our Compatibility SDKs. See our [`` verb documentation](/compatibility-api/cxml/fax/receive#receive-a-fax) for code examples. +- **For SWML**: Configure a webhook endpoint that returns SWML. See our [SWML receive_fax documentation](/swml/methods/receive_fax) for more details. + +You'll need to make your code accessible to SignalWire through a webhook. +We have a [guide on testing webhooks with ngrok](/platform/basics/guides/technical-troubleshooting/how-to-test-webhooks-with-ngrok) to help you get started. + +## Sending your first fax + +A fax can be sent by utilizing either the SignalWire REST API or the Compatibility SDK. + +### Using the REST API + +Send a fax by making a POST request to the [Send Fax endpoint](/rest/compatibility-api/endpoints/send-fax): + +```bash +POST https://.signalwire.com/api/laml/2010-04-01/Accounts//Faxes +``` + +Required parameters: + +- `From` - Your SignalWire phone number +- `To` - The destination fax number +- `MediaUrl` - URL to the document you want to send + +### Using the Compatibility SDK + +You can also send faxes using our [Compatibility SDK's Send a Fax function](/compatibility-api/client-sdks/methods/faxes/send): + + + + +```javascript +const { RestClient } = require("@signalwire/compatibility-api"); +const client = RestClient("YourProjectID", "YourAuthToken", { + signalwireSpaceUrl: "example.signalwire.com", +}); + +client.fax.faxes + .create({ + from: "+13103383454", + to: "+13104456789", + mediaUrl: "https://example.com/fax.pdf", + }) + .then((fax) => console.log(fax.sid)) + .done(); +``` + + + + +```python +from signalwire.rest import Client as signalwire_client + +client = signalwire_client("YourProjectID", "YourAuthToken", signalwire_space_url = 'example.signalwire.com') + +fax = client.fax.faxes \ + .create( + from_='+13103383454', + to='+13104456789', + media_url='https://example.com/fax.pdf' + ) + +print(fax.sid) +``` + + + + +```csharp +using System; +using System.Collections.Generic; +using Twilio; +using Twilio.Rest.Fax.V1; + +class Program +{ + static void Main(string[] args) +{ + TwilioClient.Init("YourProjectID", "YourAuthToken", new Dictionary { ["signalwireSpaceUrl"] = ".signalwire.com" }); + + var fax = FaxResource.Create( + from: "+13103383454", + to: "+13104456789", + mediaUrl: new Uri("https://example.com/fax.pdf") + ); + + Console.WriteLine(fax.Sid); +} +} +``` + + + + +```php + "example.signalwire.com")); + + $fax = $client->fax->v1->faxes + ->create("+13104456789", // to + "https://example.com/fax.pdf", // mediaUrl + array("from" => "+13103383454") + ); + + print($fax->sid); +?> +``` + + + + +```ruby +require 'signalwire/sdk' + +@client = Signalwire::REST::Client.new 'YourProjectID', 'YourAuthToken', signalwire_space_url: "example.signalwire.com" + +fax = @client.fax.faxes +.create( + from: '+13103383454', + to: '+13104456789', + media_url: 'https://example.com/fax.pdf' +) +puts fax.sid +``` + + + + + + + + + + +Follow the above guide with these changes: + +### Create a cXML Script + +Navigate to the "LaML/cXML" section of your Dashboard and create a new cXML bin. + +### Assign a phone number + +Open the settings for your phone number. Under "Voice and Fax Settings": + +- Set "Accept Incoming Calls As" to "Fax" +- Set "Handle Faxes Using" to "LaML Webhooks" +- Select your cXML script from the dropdown for "When a Fax Comes In" + + + + + + + +## Next steps + +Here are some helpful guides to continue your fax implementation: + +- [Common fax errors](/fax/getting-started/common-fax-errors) - Troubleshoot and understand common fax transmission errors +- [List faxes to CSV](/fax/getting-started/list-faxes-to-csv-in-all-languages) - Export your fax history to CSV format for reporting +- [Filter faxes by number, status, and date](/fax/getting-started/filter-faxes-by-number-status-and-date) - Query and filter your fax records From 5c6e14f6a3bf5f0819650d17f4daea05db7cb580 Mon Sep 17 00:00:00 2001 From: manny-r31 Date: Mon, 29 Sep 2025 16:24:28 -0400 Subject: [PATCH 04/13] small wording change --- .../calling/fax/getting-started/first-steps-with-fax/index.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx index 400f702bb..6b4ad5ba0 100644 --- a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx +++ b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx @@ -194,7 +194,7 @@ We have a [guide on testing webhooks with ngrok](/platform/basics/guides/technic ## Sending your first fax -A fax can be sent by utilizing either the SignalWire REST API or the Compatibility SDK. +A fax can be sent by utilizing either the Compatibility REST API or the Compatibility SDK. ### Using the REST API From 05a30a5af5ddab06cb5d8b3db67e962cbb9bf4b8 Mon Sep 17 00:00:00 2001 From: manny-r31 Date: Mon, 6 Oct 2025 14:13:02 -0400 Subject: [PATCH 05/13] Ordered page so SWML always comes before cXML, slight wording change, added new image for inbound voice call where fax is received. --- .../first-steps-with-fax/index.mdx | 63 ++++++++++++------ .../images/dashboard/sidebar/voice-logs.webp | Bin 0 -> 14040 bytes 2 files changed, 42 insertions(+), 21 deletions(-) create mode 100644 website/images/dashboard/sidebar/voice-logs.webp diff --git a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx index 6b4ad5ba0..d3abe1b5b 100644 --- a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx +++ b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx @@ -19,11 +19,12 @@ import Subtitle from "@site/src/components/typography/Subtitle"; import ResourceAdmonition from "/docs/main/_common/dashboard/_resource-admonition.mdx"; import LegacyInstructions from "/docs/main/_common/dashboard/legacy-instructions.mdx"; import UiAccordion from "/docs/main/_common/dashboard/_ui-accordion.mdx"; +import { MdWarning, MdList, MdFilterAlt } from "react-icons/md"; # First steps with fax Learn how to send and receive your first fax using SignalWire. -You'll configure a phone number, create cXML or SWML scripts to handle faxes, and use our APIs to send faxes programmatically. +You'll configure a phone number, create SWML or cXML scripts to handle faxes, and use our APIs to send faxes programmatically. ## Prerequisites @@ -35,7 +36,7 @@ Before you begin, you'll need: ## Receiving your first fax -To receive faxes, you'll configure a phone number to handle incoming faxes using either a cXML or SWML script that defines what happens when a fax arrives. +To receive faxes, you'll configure a phone number to handle incoming faxes using either a SWML or cXML script that defines what happens when a fax arrives.
```mermaid @@ -98,7 +99,7 @@ Navigate to the "Phone Numbers" tab on the left sidebar. From this tab, click on your newly purchased phone number, then on the "edit settings" option. In the settings page that appears, select "Assign Resource" for "Inbound Call Settings". - + ![Phone number settings page showing the Assign Resource button for inbound calls.](@image/dashboard/phone-numbers/assign-resource-full.png) @@ -107,13 +108,14 @@ Select the newly created SWML script, then click "Save" to apply the configurati #### Test your setup -Send a test fax to your configured phone number. -Once received, it can be viewed in your dashboard under the logs sidebar option. -These will be located in their own, specific "fax" logs tab: +Send a test fax to your configured phone number and then open the respective call log found in the "logs" section on your left sidebar. + +Copy the link found in the "document" parameter and paste it into your browser to view your fax. + + - ![The logs page showing various log categories including fax - logs.](@image/dashboard/sidebar/fax-logs-example.webp) + ![The logs page showing voice logs where inbound faxes will be received](@image/dashboard/sidebar/voice-logs.webp) @@ -162,7 +164,7 @@ Navigate to the "Phone Numbers" tab on the left sidebar. From this tab, click on your newly purchased phone number, then on the "edit settings" option. In the settings page that appears, select "Assign Resource" for "Inbound Call Settings". - + ![Phone number settings page showing the Assign Resource button for inbound calls.](@image/dashboard/phone-numbers/assign-resource-full.png) @@ -171,27 +173,28 @@ Select the newly created cXML script, then click "Save" to apply the configurati #### Test your setup -Send a test fax to your configured phone number. -Once received, it can be viewed in your dashboard under the logs sidebar option. -These will be located in their own, specific "fax" logs tab: +Send a test fax to your configured phone number and then open the respective call log found in the "logs" section on your left sidebar. + +Copy the link found in the "document" parameter and paste it into your browser to view your fax. - ![The logs page showing various log categories including fax - logs.](@image/dashboard/sidebar/fax-logs-example.webp) + ![The logs page showing voice logs where inbound faxes will be received](@image/dashboard/sidebar/voice-logs.webp) -### Alternative: Using Compatibility SDKs or webhooks +:::info [Alternative: Using Compatibility SDKs or webhooks] If you prefer to host the fax handling logic yourself, you have two options: -- **For cXML**: Use our Compatibility SDKs. See our [`` verb documentation](/compatibility-api/cxml/fax/receive#receive-a-fax) for code examples. - **For SWML**: Configure a webhook endpoint that returns SWML. See our [SWML receive_fax documentation](/swml/methods/receive_fax) for more details. +- **For cXML**: Use our Compatibility SDKs. See our [`` verb documentation](/compatibility-api/cxml/fax/receive#receive-a-fax) for code examples. You'll need to make your code accessible to SignalWire through a webhook. We have a [guide on testing webhooks with ngrok](/platform/basics/guides/technical-troubleshooting/how-to-test-webhooks-with-ngrok) to help you get started. +::: + ## Sending your first fax A fax can be sent by utilizing either the Compatibility REST API or the Compatibility SDK. @@ -344,8 +347,26 @@ Open the settings for your phone number. Under "Voice and Fax Settings": ## Next steps -Here are some helpful guides to continue your fax implementation: - -- [Common fax errors](/fax/getting-started/common-fax-errors) - Troubleshoot and understand common fax transmission errors -- [List faxes to CSV](/fax/getting-started/list-faxes-to-csv-in-all-languages) - Export your fax history to CSV format for reporting -- [Filter faxes by number, status, and date](/fax/getting-started/filter-faxes-by-number-status-and-date) - Query and filter your fax records + + } + href="/fax/getting-started/common-fax-errors" + > + Troubleshoot and understand common fax transmission errors + + } + href="/fax/getting-started/list-faxes-to-csv-in-all-languages" + > + Export your fax history to CSV format for reporting + + } + href="/fax/getting-started/filter-faxes-by-number-status-and-date" + > + Query and filter your fax records + + diff --git a/website/images/dashboard/sidebar/voice-logs.webp b/website/images/dashboard/sidebar/voice-logs.webp new file mode 100644 index 0000000000000000000000000000000000000000..2a6b6f7aa8b5b49bd4d31b20173366f63c6be08d GIT binary patch literal 14040 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 literal 0 HcmV?d00001 From 064980d4ec8e4284beeba114cd3a31e51bb3a61b Mon Sep 17 00:00:00 2001 From: manny-r31 Date: Tue, 7 Oct 2025 11:35:37 -0400 Subject: [PATCH 06/13] Added send fax examples for SWML and REST API create a call endpoint. Slight change to mermaid, small wording changes --- .../first-steps-with-fax/index.mdx | 41 ++++++++++++++++--- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx index d3abe1b5b..6ca3a7e16 100644 --- a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx +++ b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx @@ -24,7 +24,7 @@ import { MdWarning, MdList, MdFilterAlt } from "react-icons/md"; # First steps with fax Learn how to send and receive your first fax using SignalWire. -You'll configure a phone number, create SWML or cXML scripts to handle faxes, and use our APIs to send faxes programmatically. +You'll configure a phone number, create SWML or cXML scripts to handle faxes, and use SWML or our APIs to send faxes programmatically. ## Prerequisites @@ -54,7 +54,6 @@ To receive faxes, you'll configure a phone number to handle incoming faxes using %% Positioning adjustments Sender -- "(1) Sender transmits fax to your number" --> N1 N1 -- "(2) SignalWire fetches the script for this number" --> C - C -- "(3) Script processes and stores the fax in your SignalWire Dashboard" --> N1 ```
@@ -96,6 +95,7 @@ Save the script; it should now be located in your Resources tab on the left side #### Configure phone number for SWML Navigate to the "Phone Numbers" tab on the left sidebar. + From this tab, click on your newly purchased phone number, then on the "edit settings" option. In the settings page that appears, select "Assign Resource" for "Inbound Call Settings". @@ -183,7 +183,7 @@ Copy the link found in the "document" parameter and paste it into your browser t -:::info [Alternative: Using Compatibility SDKs or webhooks] +:::info [Alternative: Using webhooks or SDKs] If you prefer to host the fax handling logic yourself, you have two options: @@ -197,11 +197,40 @@ We have a [guide on testing webhooks with ngrok](/platform/basics/guides/technic ## Sending your first fax -A fax can be sent by utilizing either the Compatibility REST API or the Compatibility SDK. +A fax can be sent by utilizing SWML, the Compatibility REST API, or the Compatibility SDK. + +### Using SWML + +SWML can be used to send a fax through the `send_fax` method. +The below example script sends a fax, then posts the result to a predetermined webhook. + + +```Yaml andJson +version: 1.0.0 +sections: + main: + - send_fax: + document: https//example.com/fax_to_send.pdf + - execute: + dest: 'https://example.com/handle_outgoing_fax_result' +``` + +### Using the SignalWire REST API + +You can also utilize SWML to send faxes via the SignalWire REST API's [Create a Call endpoint](/rest/signalwire-rest/endpoints/calling/calls-create) + +```bash +POST https://{Your_Space_Name}.signalwire.com/api/calling/calls +``` + +Required parameters: -### Using the REST API +- `from` - Your SignalWire phone number +- `to` - The destination fax number +- `url` or `swml` - the URL to handle the call or inline SWML respectively +### Using the Compatibility REST API -Send a fax by making a POST request to the [Send Fax endpoint](/rest/compatibility-api/endpoints/send-fax): +Send a fax by making a POST request to the Compatibility API's [Send Fax endpoint](/rest/compatibility-api/endpoints/send-fax): ```bash POST https://.signalwire.com/api/laml/2010-04-01/Accounts//Faxes From ebce381457670e699efa2a8a4ed019e61212beab Mon Sep 17 00:00:00 2001 From: manny-r31 Date: Tue, 7 Oct 2025 11:53:29 -0400 Subject: [PATCH 07/13] grammar adjustments --- .../fax/getting-started/first-steps-with-fax/index.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx index 6ca3a7e16..ef16d1251 100644 --- a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx +++ b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx @@ -205,12 +205,12 @@ SWML can be used to send a fax through the `send_fax` method. The below example script sends a fax, then posts the result to a predetermined webhook. -```Yaml andJson +```yaml andJson version: 1.0.0 sections: main: - send_fax: - document: https//example.com/fax_to_send.pdf + document: https://example.com/fax_to_send.pdf - execute: dest: 'https://example.com/handle_outgoing_fax_result' ``` @@ -227,7 +227,7 @@ Required parameters: - `from` - Your SignalWire phone number - `to` - The destination fax number -- `url` or `swml` - the URL to handle the call or inline SWML respectively +- `url` or `swml` - the `url` to handle the call or inline `swml` respectively ### Using the Compatibility REST API Send a fax by making a POST request to the Compatibility API's [Send Fax endpoint](/rest/compatibility-api/endpoints/send-fax): From 115abf9d5178c44764d5981e41b8cde358a1fc65 Mon Sep 17 00:00:00 2001 From: manny-r31 Date: Wed, 8 Oct 2025 10:25:23 -0400 Subject: [PATCH 08/13] Slight changes to page to test visibility of guides. --- .../first-steps-with-fax/index.mdx | 68 +++++++++++-------- 1 file changed, 41 insertions(+), 27 deletions(-) diff --git a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx index ef16d1251..65c914228 100644 --- a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx +++ b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx @@ -38,30 +38,11 @@ Before you begin, you'll need: To receive faxes, you'll configure a phone number to handle incoming faxes using either a SWML or cXML script that defines what happens when a fax arrives. -
- ```mermaid - graph LR - Sender["Fax Sender"] +Below are examples of how to set up your fax handler with SWML or cXML. - subgraph CompanyNumbers["Your SignalWire Space"] - N1["+1 (xxx) xxxx"] - end - - subgraph Script["Script Response"] - C["cXML: <Receive/>
or
SWML: receive_fax"] - end - - %% Positioning adjustments - Sender -- "(1) Sender transmits fax to your number" --> N1 - N1 -- "(2) SignalWire fetches the script for this number" --> C - ``` - -
- How incoming faxes are processed using cXML or SWML scripts -
-
+ -### Set up your fax handler with SWML + @@ -120,7 +101,9 @@ Copy the link found in the "document" parameter and paste it into your browser t -### Set up your fax handler with cXML + + + @@ -183,6 +166,10 @@ Copy the link found in the "document" parameter and paste it into your browser t + + + + :::info [Alternative: Using webhooks or SDKs] If you prefer to host the fax handling logic yourself, you have two options: @@ -223,11 +210,38 @@ You can also utilize SWML to send faxes via the SignalWire REST API's [Create a POST https://{Your_Space_Name}.signalwire.com/api/calling/calls ``` -Required parameters: +example body including required parameters: + + + -- `from` - Your SignalWire phone number -- `to` - The destination fax number -- `url` or `swml` - the `url` to handle the call or inline `swml` respectively +```json +{ + "command": "dial", + "params": { + "from": "sip:from-sip@example-112233445566.sip.signalwire.com", + "to": "sip:from-sip@example-112233445567.sip.signalwire.com", + "url": "https://example.com/swml-for-faxing" + } +} +``` + + + + +```json +{ + "command": "dial", + "params": { + "from": "sip:from-sip@example-112233445566.sip.signalwire.com", + "to": "sip:from-sip@example-112233445567.sip.signalwire.com", + "swml": "{"version":"1.0.0","sections":{"main":[{"send_fax":{"document":"https://example.com/fax_to_send.pdf"}},{"execute":{"dest":"https://example.com/handle_outgoing_fax_result"}}]}}" + } +} +``` + + + ### Using the Compatibility REST API Send a fax by making a POST request to the Compatibility API's [Send Fax endpoint](/rest/compatibility-api/endpoints/send-fax): From 772db0272f7df4708a242c8dc8d98428e2af35d7 Mon Sep 17 00:00:00 2001 From: manny-r31 Date: Wed, 8 Oct 2025 14:04:48 -0400 Subject: [PATCH 09/13] Changed accordian to tabs in receiving section, also tabbed sending section. --- .../first-steps-with-fax/index.mdx | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx index 65c914228..c3ddbd3ee 100644 --- a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx +++ b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx @@ -38,11 +38,8 @@ Before you begin, you'll need: To receive faxes, you'll configure a phone number to handle incoming faxes using either a SWML or cXML script that defines what happens when a fax arrives. -Below are examples of how to set up your fax handler with SWML or cXML. - - - - + + @@ -101,9 +98,8 @@ Copy the link found in the "document" parameter and paste it into your browser t - - - + + @@ -166,9 +162,8 @@ Copy the link found in the "document" parameter and paste it into your browser t - - - + + :::info [Alternative: Using webhooks or SDKs] @@ -184,14 +179,12 @@ We have a [guide on testing webhooks with ngrok](/platform/basics/guides/technic ## Sending your first fax -A fax can be sent by utilizing SWML, the Compatibility REST API, or the Compatibility SDK. - -### Using SWML + + SWML can be used to send a fax through the `send_fax` method. The below example script sends a fax, then posts the result to a predetermined webhook. - ```yaml andJson version: 1.0.0 sections: @@ -202,7 +195,8 @@ sections: dest: 'https://example.com/handle_outgoing_fax_result' ``` -### Using the SignalWire REST API + + You can also utilize SWML to send faxes via the SignalWire REST API's [Create a Call endpoint](/rest/signalwire-rest/endpoints/calling/calls-create) @@ -242,7 +236,9 @@ example body including required parameters: -### Using the Compatibility REST API + + + Send a fax by making a POST request to the Compatibility API's [Send Fax endpoint](/rest/compatibility-api/endpoints/send-fax): @@ -256,7 +252,8 @@ Required parameters: - `To` - The destination fax number - `MediaUrl` - URL to the document you want to send -### Using the Compatibility SDK + + You can also send faxes using our [Compatibility SDK's Send a Fax function](/compatibility-api/client-sdks/methods/faxes/send): @@ -362,6 +359,9 @@ puts fax.sid + + + From bf332cd497b34548414bbeae4e1de9a9c06989ff Mon Sep 17 00:00:00 2001 From: manny-r31 Date: Wed, 8 Oct 2025 14:14:55 -0400 Subject: [PATCH 10/13] SW REST API section changes --- .../fax/getting-started/first-steps-with-fax/index.mdx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx index c3ddbd3ee..36d3f0d3e 100644 --- a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx +++ b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx @@ -198,13 +198,10 @@ sections: -You can also utilize SWML to send faxes via the SignalWire REST API's [Create a Call endpoint](/rest/signalwire-rest/endpoints/calling/calls-create) +You can also utilize SWML to send faxes via a POST request to the SignalWire REST API [Create a Call endpoint](/rest/signalwire-rest/endpoints/calling/calls-create). -```bash -POST https://{Your_Space_Name}.signalwire.com/api/calling/calls -``` +This can be done either via a webhook hosting a SWML script or inline SWML directly in the body of the request. -example body including required parameters: From dd8ccc4582e0f1817d75c67a57dcbb85b3800523 Mon Sep 17 00:00:00 2001 From: manny-r31 Date: Wed, 8 Oct 2025 14:21:01 -0400 Subject: [PATCH 11/13] SW REST API section changes ext. --- .../fax/getting-started/first-steps-with-fax/index.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx index 36d3f0d3e..67a05e567 100644 --- a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx +++ b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx @@ -200,11 +200,11 @@ sections: You can also utilize SWML to send faxes via a POST request to the SignalWire REST API [Create a Call endpoint](/rest/signalwire-rest/endpoints/calling/calls-create). -This can be done either via a webhook hosting a SWML script or inline SWML directly in the body of the request. +This can be done either by referencing a SWML script via webhook URL or by including the SWML inline in the request body. - + ```json { @@ -218,7 +218,7 @@ This can be done either via a webhook hosting a SWML script or inline SWML direc ``` - + ```json { From fbadc7384db1072f2e4aaf781ff1bf8798ba1dd2 Mon Sep 17 00:00:00 2001 From: manny-r31 Date: Wed, 8 Oct 2025 14:57:24 -0400 Subject: [PATCH 12/13] full cURL examples in sending fax REST API sections --- .../first-steps-with-fax/index.mdx | 62 +++++++++++-------- 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx index 67a05e567..282439fe1 100644 --- a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx +++ b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx @@ -206,29 +206,38 @@ This can be done either by referencing a SWML script via webhook URL or by inclu -```json -{ - "command": "dial", - "params": { - "from": "sip:from-sip@example-112233445566.sip.signalwire.com", - "to": "sip:from-sip@example-112233445567.sip.signalwire.com", - "url": "https://example.com/swml-for-faxing" - } -} +```bash + curl -L -g 'https://{Your_Space_Name}.signalwire.com/api/calling/calls' \ + -u '{YourProjectID}:{YourAPIToken}' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + --data-raw '{ + "command": "dial", + "params": { + "from": "sip:from-sip@example-112233445566.sip.signalwire.com", + "to": "sip:from-sip@example-112233445567.sip.signalwire.com", + "url": "https://example.com/swml-for-faxing" + } + }' ``` -```json -{ - "command": "dial", - "params": { - "from": "sip:from-sip@example-112233445566.sip.signalwire.com", - "to": "sip:from-sip@example-112233445567.sip.signalwire.com", - "swml": "{"version":"1.0.0","sections":{"main":[{"send_fax":{"document":"https://example.com/fax_to_send.pdf"}},{"execute":{"dest":"https://example.com/handle_outgoing_fax_result"}}]}}" - } -} +```bash + curl -L -g 'https://{Your_Space_Name}.signalwire.com/api/calling/calls' \ + -u '{YourProjectID}:{YourAPIToken}' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + --data-raw '{ + "command": "dial", + "params": { + "from": "sip:from-sip@example-112233445566.sip.signalwire.com", + "to": "sip:from-sip@example-112233445567.sip.signalwire.com", + "swml": "{\"version\":\"1.0.0\",\"sections\":{\"main\":[{\"send_fax\":{\"document\":\"https://example.com/fax_to_send.pdf\"}},{\"execute\":{\"dest\":\"https://example.com/handle_outgoing_fax + _result\"}}]}}" + } + }' ``` @@ -237,18 +246,17 @@ This can be done either by referencing a SWML script via webhook URL or by inclu -Send a fax by making a POST request to the Compatibility API's [Send Fax endpoint](/rest/compatibility-api/endpoints/send-fax): +Send a fax by making a POST request to the Compatibility API [Send Fax endpoint](/rest/compatibility-api/endpoints/send-fax): ```bash -POST https://.signalwire.com/api/laml/2010-04-01/Accounts//Faxes + curl -L -g 'https://{YOUR_SPACE_URL}.signalwire.com/api/laml/2010-04-01/Accounts/{YourProjectID}/Faxes' \ + -u '{YourProjectID}:{YourAPIToken}' \ + -H 'Content-Type: application/x-www-form-urlencoded' \ + -H 'Accept: application/json' \ + -d 'MediaUrl=https://example.com/fax_to_send.pdf' \ + -d 'To=+1xxxxxxxxxx' \ + -d 'From=+1xxxxxxxxxx' ``` - -Required parameters: - -- `From` - Your SignalWire phone number -- `To` - The destination fax number -- `MediaUrl` - URL to the document you want to send - From 2f389d296adf031dfbc78ca9034919d0dc399f3f Mon Sep 17 00:00:00 2001 From: manny-r31 Date: Wed, 8 Oct 2025 15:06:26 -0400 Subject: [PATCH 13/13] Moved Legacy instructions to correct area, added link to dashboard api credentials page --- .../first-steps-with-fax/index.mdx | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx index 282439fe1..8ac413822 100644 --- a/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx +++ b/website/docs/main/home/calling/fax/getting-started/first-steps-with-fax/index.mdx @@ -32,7 +32,7 @@ Before you begin, you'll need: - A [SignalWire account](https://signalwire.com/signup) - At least one phone number capable of receiving faxes -- Your API credentials (Space URL, Project ID, and API token) +- Your [API credentials](https://my.signalwire.com/credentials) (Space URL, Project ID, and API token) ## Receiving your first fax @@ -177,6 +177,32 @@ We have a [guide on testing webhooks with ngrok](/platform/basics/guides/technic ::: + + + + + + +Follow the above guide with these changes: + +### Create a cXML Script + +Navigate to the "LaML/cXML" section of your Dashboard and create a new cXML bin. + +### Assign a phone number + +Open the settings for your phone number. Under "Voice and Fax Settings": + +- Set "Accept Incoming Calls As" to "Fax" +- Set "Handle Faxes Using" to "LaML Webhooks" +- Select your cXML script from the dropdown for "When a Fax Comes In" + + + + + + + ## Sending your first fax @@ -367,32 +393,6 @@ puts fax.sid - - - - - - -Follow the above guide with these changes: - -### Create a cXML Script - -Navigate to the "LaML/cXML" section of your Dashboard and create a new cXML bin. - -### Assign a phone number - -Open the settings for your phone number. Under "Voice and Fax Settings": - -- Set "Accept Incoming Calls As" to "Fax" -- Set "Handle Faxes Using" to "LaML Webhooks" -- Select your cXML script from the dropdown for "When a Fax Comes In" - - - - - - - ## Next steps