Skip to content

Commit 5b2f977

Browse files
authored
Merge branch 'main' into august-20260623-whatsapp-messaging
2 parents 1c8b1dd + d3bacc4 commit 5b2f977

15 files changed

Lines changed: 1194 additions & 44 deletions

File tree

fern/apis/signalwire-rest/openapi.yaml

Lines changed: 683 additions & 3 deletions
Large diffs are not rendered by default.

fern/products/apis/apis.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,10 @@ navigation:
216216
- freeSwitchConnector
217217
contents: []
218218
- relayApplication
219+
- section: SIP Addresses
220+
referenced-packages:
221+
- sipAddresses
222+
contents: []
219223
- section: SIP Credentials
220224
referenced-packages:
221225
- sipCredentials

fern/products/platform/pages/platform/call-fabric/resources.mdx

Lines changed: 73 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,67 @@ x-custom:
1111
---
1212

1313

14-
Resources are the primary entities for communication within the Call Fabric ecosystem.
15-
They are the building blocks of the system, representing the various communication elements
16-
that can be used to interact with
17-
[subscribers](/docs/platform/subscribers).
14+
Resources are the core building blocks of the SignalWire ecosystem.
15+
They are container objects that represent your choice of communication entity.
16+
This can be anything from a SignalWire AI Agent or a SWML script, to a Subscriber that can be created, addressed and called within your SignalWire Space.
17+
18+
Every Resource has a **Type** and one or more **Addresses** that make it reachable, and all Resources share the same addressing and management model.
19+
No matter what Resource you need you can create, configure, and call them all in the same consistent way.
20+
21+
## Resource types
22+
23+
Call Fabric supports several Resource types. Some of the most common are:
24+
25+
<CardGroup cols={3}>
26+
<Card title="Subscribers" href="/docs/platform/subscribers">
27+
Users in your communication system, with built-in authentication and communication endpoints.
28+
</Card>
29+
<Card title="AI Agents" href="/docs/platform/ai">
30+
Conversational AI agents that can answer and place calls.
31+
</Card>
32+
<Card title="SWML Scripts" href="/docs/swml">
33+
Programmable call logic written in SWML (JSON or YAML).
34+
</Card>
35+
<Card title="cXML Scripts" href="/docs/compatibility-api/cxml">
36+
Twilio-compatible call logic for migrating existing applications.
37+
</Card>
38+
<Card title="SIP Endpoints" href="/docs/platform/voice/sip">
39+
Register SIP devices and softphones to your Space.
40+
</Card>
41+
<Card title="Video Rooms" href="/docs/platform/video">
42+
Programmable video conference rooms.
43+
</Card>
44+
</CardGroup>
45+
46+
Each of these Resource types use the same addressing and management patterns described below.
47+
48+
## Resource addresses
49+
50+
Every Resource is uniquely identified by one or more **Addresses** in the form `/context/name`.
51+
For example, an AI Agent named `Sigmond` in the public context is reachable at `/public/Sigmond`.
52+
The context is either `public` or `private`, and the name defaults to the Resource's name. Addresses are mutable, and a single Resource can have multiple addresses, including phone numbers and SIP URIs.
53+
54+
Learn more in the [Resource Addresses](/docs/platform/addresses) guide, including contexts, naming conventions, and routing options.
1855

1956
## Manage Resources
2057

2158
### With the REST API
2259

23-
Use the Resources endpoints to manage your Resources programmatically.
60+
Use the Resources endpoints to work with any Resource programmatically, regardless of type.
61+
The generic Resources endpoint lets you [list](/docs/apis/rest/resources/list-resources) all Resources,
62+
[retrieve](/docs/apis/rest/resources/get-resource) or [delete](/docs/apis/rest/resources/delete-resource) a Resource by
63+
ID, and [list a Resource's addresses](/docs/apis/rest/addresses/list-resource-addresses-client).
2464

25-
<Card title="Resources endpoints" href="/docs/apis/rest/resources/list-resources">
26-
Control Resources using the SignalWire REST API.
27-
</Card>
65+
To **create** or **update** a Resource, use the endpoint for its specific type.
66+
For example, if you wanted to create a new SWML Script you would utilize the [Create SWML Script](/docs/apis/rest/swml-scripts/create-swml-script) endpoint.
2867

2968
### In the Dashboard
3069

31-
The Dashboard is your unified command center for your SignalWire Space. Access it at `{your-space-name}.signalwire.com`.
70+
The [SignalWire Dashboard](https://my.signalwire.com/resources) can also be used as your unified command center for your SignalWire Resources.
71+
You can create, manage, edit, delete, and test your Space's Resources all from your web browser.
3272

3373
#### Create
3474

35-
<Info title="No Resources tab?">
36-
If you don't see the **My Resources** tab, your SignalWire Space is on the **Legacy Dashboard**.
37-
Refer to the [Legacy](#in-the-legacy-dashboard) section of this guide for instructions for your Dashboard and information about the migration.
38-
</Info>
39-
4075
<Steps>
4176
<Step title="Navigate to Resources">
4277
To create a Resource in your SignalWire Space, click on the **My Resources** tab in the left-hand navigation menu.
@@ -48,15 +83,8 @@ Refer to the [Legacy](#in-the-legacy-dashboard) section of this guide for instru
4883
</Step>
4984
</Steps>
5085

51-
52-
53-
54-
<Frame
55-
56-
caption="Create a new Resource from the Dashboard">
57-
86+
<Frame caption="Create a new Resource from the Dashboard">
5887
![Create a new Resource from the Dashboard.](/assets/images/dashboard/home/home-resources-marked.webp)
59-
6088
</Frame>
6189

6290
Click the **Add** button to select from the grid of available Resource types.
@@ -67,9 +95,13 @@ Click the **Add** button to select from the grid of available Resource types.
6795

6896
Alternatively, you can create new Resources from their subpages in the sidebar menu, or using the shortcuts on the Dashboard homepage.
6997

70-
After selecting a Resource,
71-
enter the details for the Resource on a new page,
72-
and select <kbd>Create</kbd> to confirm.
98+
After selecting a Resource, enter the details for the Resource on a new page, and select <kbd>Create</kbd> to confirm.
99+
100+
<Info title="No Resources tab?">
101+
If you don't see the **My Resources** tab, your SignalWire Space is on the **Legacy Dashboard**,
102+
which does not support the Resources experience. [Contact Support](https://support.signalwire.com/)
103+
to upgrade your Space to the new UI.
104+
</Info>
73105

74106
#### Modify or delete
75107

@@ -80,12 +112,19 @@ Here, by selecting the `Edit` button, you can alter the specifics of the Resourc
80112
![The list of Resources in a SignalWire Space.](/assets/images/dashboard/resources/resource-list.webp)
81113
</Frame>
82114

83-
---
84-
85-
## In the Legacy Dashboard
86-
87-
The **Resources experience** is not available in the Legacy Dashboard.
88-
89-
To upgrade your Space to the New UI, [contact Support](https://support.signalwire.com/).
90-
91-
<Markdown src="/snippets/common/dashboard/_ui-accordion.mdx" />
115+
## Next steps
116+
117+
<CardGroup cols={2}>
118+
<Card title="Subscribers" href="/docs/platform/subscribers">
119+
Manage the users in your communication system via subscribers.
120+
</Card>
121+
<Card title="Resource Addresses" href="/docs/platform/addresses">
122+
Understand contexts, naming, and how Resources are identified and called.
123+
</Card>
124+
<Card title="Resources REST API" href="/docs/apis/rest/resources/list-resources">
125+
List, retrieve, and delete Resources programmatically.
126+
</Card>
127+
<Card title="AI Agents" href="/docs/platform/ai">
128+
Build conversational AI agents as Resources.
129+
</Card>
130+
</CardGroup>

fern/products/swml/pages/reference/methods/calling/ai/ai_params/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ Configure how the AI agent processes and understands spoken input, including spe
191191
</ParamField>
192192

193193

194-
<ParamField path="params.openai_asr_engine" type="string" default="gcloud_speech_v2_async" toc={true}>
194+
<ParamField path="params.openai_asr_engine" type="string" default="deepgram:nova-3" toc={true}>
195195
The ASR (Automatic Speech Recognition) engine to use. Common values include `deepgram:nova-2`, `deepgram:nova-3`, and other supported ASR engines.
196196
</ParamField>
197197

specs/signalwire-rest/fabric-api/main.tsp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import "./freeswitch-connectors";
1313
import "./cxml-applications";
1414
import "./relay-applications";
1515
import "./resources";
16+
import "./sip-addresses";
1617
import "./sip-endpoints";
1718
import "./sip_gateways";
1819
import "./subscribers";
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
enum SipAddressEncryption {
2+
Required: "required",
3+
Optional: "optional",
4+
Forbidden: "forbidden",
5+
}
6+
7+
enum SipAddressCodec {
8+
OPUS: "OPUS",
9+
G722: "G722",
10+
PCMU: "PCMU",
11+
PCMA: "PCMA",
12+
G729: "G729",
13+
VP8: "VP8",
14+
H264: "H264",
15+
}
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import "@typespec/http";
2+
import "@typespec/openapi";
3+
import "./models/core.tsp";
4+
import "./models/requests.tsp";
5+
import "./models/responses.tsp";
6+
import "./models/errors.tsp";
7+
import "../../types";
8+
import "../tags.tsp";
9+
import "../../../_shared/alias/token-permissions.tsp";
10+
11+
using TypeSpec.Http;
12+
using TypeSpec.OpenAPI;
13+
using Types.StatusCodes;
14+
15+
@route("/sip_addresses")
16+
namespace SignalWireAPI.Fabric.SipAddresses {
17+
@tag(SIP_ADDRESSES_TAG)
18+
@friendlyName("SIP Addresses")
19+
@doc("""
20+
SIP Addresses API category. A SIP address gives you a SIP URI that other SIP devices, PBXs, or
21+
softphones can register to or dial — with its own username, codec, cipher, and encryption
22+
settings, IP authentication, and a resource that answers the calls it receives. Use this API to
23+
list, create, update, and delete SIP addresses without the dashboard.
24+
25+
This API only sees SIP addresses that belong to your project. An ID from another project, or an
26+
ID that belongs to a different kind of address (for example, a video room), returns a 404.
27+
28+
<Note>
29+
This is the public REST management API for standalone SIP addresses. It's separate from
30+
[Assign domain application handler](/docs/apis/rest/domain-applications/assign-domain-application-handler),
31+
which attaches an already-created Domain Application to a resource.
32+
</Note>
33+
""")
34+
interface SipAddresses {
35+
@operationId("list_sip_addresses")
36+
@summary("List SIP addresses")
37+
@doc("""
38+
Returns a paginated list of SIP addresses in the authenticated project.
39+
40+
${tokenPermissions<"_Calling_, _Fax_, _Messaging_, or _Video_">}
41+
""")
42+
list(...SipAddressListQuery):
43+
| SipAddressListResponse
44+
| StatusCode401
45+
| StatusCode404
46+
| SipAddressListStatusCode422
47+
| StatusCode500;
48+
49+
@operationId("get_sip_address")
50+
@summary("Get SIP address")
51+
@doc("""
52+
Returns a SIP address by ID.
53+
54+
${tokenPermissions<"_Calling_, _Fax_, _Messaging_, or _Video_">}
55+
""")
56+
read(...SipAddressPathID):
57+
| {
58+
@statusCode statusCode: 200;
59+
@body sip_address: SipAddress;
60+
}
61+
| StatusCode401
62+
| StatusCode404
63+
| StatusCode500;
64+
65+
@operationId("create_sip_address")
66+
@summary("Create SIP address")
67+
@doc("""
68+
Creates a SIP address, along with its username, encryption, codec, cipher, and IP authentication settings.
69+
70+
${tokenPermissions<"_Calling_, _Fax_, _Messaging_, or _Video_">}
71+
""")
72+
@post
73+
create(@body request: SipAddressCreateRequest):
74+
| {
75+
@statusCode statusCode: 201;
76+
@body sip_address: SipAddress;
77+
}
78+
| StatusCode401
79+
| SipAddressCreateStatusCode422
80+
| StatusCode500;
81+
82+
@operationId("update_sip_address")
83+
@summary("Update SIP address")
84+
@doc("""
85+
Updates a SIP address by ID. Partial update: any field omitted from the body keeps its current value.
86+
`calling_handler_resource_id` cannot be changed via this endpoint.
87+
88+
${tokenPermissions<"_Calling_, _Fax_, _Messaging_, or _Video_">}
89+
""")
90+
@patch
91+
update(...SipAddressPathID, @body request: SipAddressUpdateRequest):
92+
| {
93+
@statusCode statusCode: 200;
94+
@body sip_address: SipAddress;
95+
}
96+
| StatusCode400
97+
| StatusCode401
98+
| StatusCode404
99+
| SipAddressUpdateStatusCode422
100+
| StatusCode500;
101+
102+
@operationId("delete_sip_address")
103+
@summary("Delete SIP address")
104+
@doc("""
105+
Deletes a SIP address by ID, along with its SIP configuration. Calls and registrations to this
106+
address will stop working immediately.
107+
108+
${tokenPermissions<"_Calling_, _Fax_, _Messaging_, or _Video_">}
109+
""")
110+
@delete
111+
delete(...SipAddressPathID):
112+
| {
113+
@statusCode statusCode: 204;
114+
}
115+
| StatusCode401
116+
| StatusCode404
117+
| StatusCode500;
118+
}
119+
}

0 commit comments

Comments
 (0)