mirror of
https://github.com/jwetzell/showbridge-docs.git
synced 2026-08-31 17:59:00 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a3e1a0546c |
@@ -96,6 +96,22 @@ export default defineConfig({
|
||||
collapsed: true,
|
||||
items: [{ autogenerate: { directory: "modules/serial" } }],
|
||||
},
|
||||
{
|
||||
label: "SIP",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
label: "Call",
|
||||
collapsed: true,
|
||||
items: [{ autogenerate: { directory: "modules/sip/call" } }],
|
||||
},
|
||||
{
|
||||
label: "DTMF",
|
||||
collapsed: true,
|
||||
items: [{ autogenerate: { directory: "modules/sip/dtmf" } }],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "WebSocket",
|
||||
collapsed: true,
|
||||
@@ -248,6 +264,40 @@ export default defineConfig({
|
||||
collapsed: true,
|
||||
items: [{ autogenerate: { directory: "processors/script" } }],
|
||||
},
|
||||
{
|
||||
label: "SIP",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
label: "Response",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
label: "Audio",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
autogenerate: {
|
||||
directory: "processors/sip/response/audio",
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "DTMF",
|
||||
collapsed: true,
|
||||
items: [
|
||||
{
|
||||
autogenerate: {
|
||||
directory: "processors/sip/response/dtmf",
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
label: "String",
|
||||
collapsed: true,
|
||||
|
||||
Generated
+122
-17
@@ -1,16 +1,16 @@
|
||||
{
|
||||
"name": "@showbridge/docs",
|
||||
"version": "0.6.0",
|
||||
"version": "0.5.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@showbridge/docs",
|
||||
"version": "0.6.0",
|
||||
"version": "0.5.1",
|
||||
"devDependencies": {
|
||||
"@astrojs/check": "0.9.10",
|
||||
"@astrojs/starlight": "0.41.10",
|
||||
"astro": "7.2.9",
|
||||
"@astrojs/starlight": "0.41.9",
|
||||
"astro": "7.2.7",
|
||||
"sharp": "0.35.4",
|
||||
"typescript": "6.0.3"
|
||||
}
|
||||
@@ -617,9 +617,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/starlight": {
|
||||
"version": "0.41.10",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.41.10.tgz",
|
||||
"integrity": "sha512-xE+OO2zzJkHPzc+giuFj+1c0sYw3//goo31PEksguNTd3XpXvV7TaJ0TzQzBUSCxYtBwWjAPkJfqR2W4aMQdhQ==",
|
||||
"version": "0.41.9",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.41.9.tgz",
|
||||
"integrity": "sha512-c76+isiSQzJRRnkT7JqUqqM/2Rg+fKhtA08zRe06EJRgqsW4WEJ+MtySIOjXc59oO1aGbVZRbxiBfYp72zsVpw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -3033,9 +3033,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/astro": {
|
||||
"version": "7.2.9",
|
||||
"resolved": "https://registry.npmjs.org/astro/-/astro-7.2.9.tgz",
|
||||
"integrity": "sha512-o5nZFo/bieF6rp4x9sQSLhI7GO7Bahpld38Y4LvX27nFoxNiuttjI+Hea81w5ksORLHgdPUlQpU9obPz5QRa8g==",
|
||||
"version": "7.2.7",
|
||||
"resolved": "https://registry.npmjs.org/astro/-/astro-7.2.7.tgz",
|
||||
"integrity": "sha512-+XW7Z1x03hq/zV8tiEnvS8E7JYKo5iyYVPJFt5RhEj3dOE+zSwhVaUabcqNsEDVJcneQX2mqxo4fPgoSO+Jc2w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -3058,7 +3058,7 @@
|
||||
"dset": "^3.1.4",
|
||||
"es-module-lexer": "^2.0.0",
|
||||
"esbuild": "^0.28.0",
|
||||
"find-proc": "0.1.0",
|
||||
"find-process": "^2.1.1",
|
||||
"flattie": "^1.1.1",
|
||||
"fontace": "~0.4.1",
|
||||
"get-tsconfig": "5.0.0-beta.4",
|
||||
@@ -3106,7 +3106,7 @@
|
||||
"url": "https://opencollective.com/astrodotbuild"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"sharp": "^0.35.4"
|
||||
"sharp": "^0.34.0 || ^0.35.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@astrojs/markdown-remark": "7.2.4"
|
||||
@@ -3227,6 +3227,39 @@
|
||||
"url": "https://github.com/sponsors/wooorm"
|
||||
}
|
||||
},
|
||||
"node_modules/chalk": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
||||
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ansi-styles": "^4.1.0",
|
||||
"supports-color": "^7.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/chalk/node_modules/ansi-styles": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"color-convert": "^2.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/character-entities": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
|
||||
@@ -3353,6 +3386,26 @@
|
||||
"url": "https://github.com/sponsors/wooorm"
|
||||
}
|
||||
},
|
||||
"node_modules/color-convert": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"color-name": "~1.1.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/color-name": {
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/comma-separated-tokens": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
|
||||
@@ -4009,14 +4062,29 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/find-proc": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/find-proc/-/find-proc-0.1.0.tgz",
|
||||
"integrity": "sha512-OaOpEYv2PiQ7SQ5LIrl+deA1XaWcxEjnpM6VuWXTUvn+teIXxeFTLDmu18/zDQpFmHN4o3oDBX+BT0AGwEhemg==",
|
||||
"node_modules/find-process": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/find-process/-/find-process-2.1.1.tgz",
|
||||
"integrity": "sha512-SrQDx3QhlmHM90iqn9rdjCQcw/T+WlpOkHFsjoRgB+zTpDfltNA1VSNYeYELwhUTJy12UFxqjWhmhOrJc+o4sA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"chalk": "~4.1.2",
|
||||
"commander": "^14.0.3",
|
||||
"loglevel": "^1.9.2"
|
||||
},
|
||||
"bin": {
|
||||
"find-process": "dist/cjs/bin/find-process.js"
|
||||
}
|
||||
},
|
||||
"node_modules/find-process/node_modules/commander": {
|
||||
"version": "14.0.3",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz",
|
||||
"integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "^20.19.0 || >=22.12.0"
|
||||
"node": ">=20"
|
||||
}
|
||||
},
|
||||
"node_modules/flattie": {
|
||||
@@ -4130,6 +4198,16 @@
|
||||
"uncrypto": "^0.1.3"
|
||||
}
|
||||
},
|
||||
"node_modules/has-flag": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/hast-util-embedded": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz",
|
||||
@@ -5056,6 +5134,20 @@
|
||||
"url": "https://opencollective.com/parcel"
|
||||
}
|
||||
},
|
||||
"node_modules/loglevel": {
|
||||
"version": "1.9.2",
|
||||
"resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz",
|
||||
"integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.6.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/loglevel"
|
||||
}
|
||||
},
|
||||
"node_modules/longest-streak": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
|
||||
@@ -7371,6 +7463,19 @@
|
||||
"inline-style-parser": "0.2.7"
|
||||
}
|
||||
},
|
||||
"node_modules/supports-color": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"has-flag": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/svgo": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz",
|
||||
|
||||
+5
-5
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@showbridge/docs",
|
||||
"type": "module",
|
||||
"version": "0.6.0",
|
||||
"version": "0.5.1",
|
||||
"files": [
|
||||
"dist"
|
||||
],
|
||||
@@ -15,9 +15,9 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@astrojs/check": "0.9.10",
|
||||
"@astrojs/starlight": "0.41.10",
|
||||
"astro": "7.2.9",
|
||||
"@astrojs/starlight": "0.41.9",
|
||||
"astro": "7.2.7",
|
||||
"sharp": "0.35.4",
|
||||
"typescript": "6.0.3"
|
||||
"typescript": "7.0.2"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
title: SIP > OSC
|
||||
sidebar:
|
||||
order: 2
|
||||
---
|
||||
|
||||
import { Code } from "@astrojs/starlight/components";
|
||||
|
||||
This config starts an SIP server listening on port `5060`. Any incoming call will result in a OSC message being sent to `127.0.0.1:53000` with the address set to [fire a QLab cue](https://qlab.app/docs/v5/scripting/osc-dictionary-v5/#/cue/{cue_number}/go) with the dialed number as the cue number. This was tested with a cheap SIP gateway like [this one](https://www.grandstream.com/products/gateways-and-atas/analog-telephone-adaptors/product/ht802).
|
||||
|
||||
export const example = `
|
||||
api:
|
||||
enabled: true
|
||||
port: 8080
|
||||
modules:
|
||||
- id: sip
|
||||
type: sip.call.server
|
||||
params:
|
||||
port: 5060
|
||||
- id: udp
|
||||
type: net.udp.client
|
||||
params:
|
||||
host: 127.0.0.1
|
||||
port: 53000
|
||||
routes:
|
||||
- id: sip-to-osc
|
||||
input: sip
|
||||
processors:
|
||||
- id: create-osc-message
|
||||
type: osc.message.create
|
||||
params:
|
||||
address: "/cue/{{.Payload.To}}/go"
|
||||
- id: encode-osc-message
|
||||
type: osc.message.encode
|
||||
- id: send-osc
|
||||
type: module.output
|
||||
params:
|
||||
module: udp
|
||||
`;
|
||||
|
||||
<Code code={example} title="config.yaml" lang="yaml" />
|
||||
@@ -0,0 +1,24 @@
|
||||
---
|
||||
title: SIP Call Server
|
||||
sidebar:
|
||||
label: Server
|
||||
order: 1
|
||||
---
|
||||
import SchemaInfo from '../../../../../components/SchemaInfo.astro';
|
||||
|
||||
This module starts a [SIP](https://en.wikipedia.org/wiki/Session_Initiation_Protocol) server that listens for incoming connections and emits call events when a new call is received. This can be used with cheap SIP gateway devices to connect an analog phone line and do interesting things like [firing QLab cues with phone calls](/examples/dial-a-cue).
|
||||
|
||||
<SchemaInfo type="module" id="sip.call.server"></SchemaInfo>
|
||||
|
||||
### Example
|
||||
|
||||
Start a UDP SIP server listening on port 5060
|
||||
|
||||
```yaml
|
||||
- id: sipCallServer
|
||||
type: sip.call.server
|
||||
params:
|
||||
ip: 127.0.0.1
|
||||
port: 5060
|
||||
transport: udp
|
||||
```
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
title: SIP DTMF Server
|
||||
sidebar:
|
||||
label: Server
|
||||
order: 1
|
||||
---
|
||||
import SchemaInfo from '../../../../../components/SchemaInfo.astro';
|
||||
|
||||
This module starts a [SIP](https://en.wikipedia.org/wiki/Session_Initiation_Protocol) server that listens for incoming connections. When a call is received this module will emit events based on the touch tones (DTMF) received during the call. The event is sent out whenever the use presses the separator key defined in the params.
|
||||
|
||||
<SchemaInfo type="module" id="sip.dtmf.server"></SchemaInfo>
|
||||
|
||||
### Example
|
||||
|
||||
Start a UDP SIP server listening on port 5060 that will emit events whenever the user presses the `#` key on their phone during a call
|
||||
|
||||
```yaml
|
||||
- id: sipDTMFServer
|
||||
type: sip.dtmf.server
|
||||
params:
|
||||
ip: 127.0.0.1
|
||||
port: 5060
|
||||
transport: udp
|
||||
separator: "#"
|
||||
```
|
||||
@@ -0,0 +1,24 @@
|
||||
---
|
||||
title: Create SIP Audio Response
|
||||
sidebar:
|
||||
label: Create
|
||||
order: 1
|
||||
---
|
||||
import SchemaInfo from '../../../../../../components/SchemaInfo.astro';
|
||||
|
||||
This processor will create a SIP response message with an audio file as the payload. If this message is output to a SIP module using the [module.output](/processors/module/output) processor, then the SIP module will send the response to the caller and play the audio file included in the response.
|
||||
|
||||
<SchemaInfo type="processor" id="sip.response.audio.create"/>
|
||||
|
||||
### Example
|
||||
|
||||
This example will create a SIP response that will wait 1 second then play `response.wav` then wait another second before completing the response.
|
||||
|
||||
```yaml
|
||||
- id: create-audio-response
|
||||
type: sip.response.audio.create
|
||||
params:
|
||||
preWait: 1000
|
||||
audioFile: "response.wav"
|
||||
postWait: 1000
|
||||
```
|
||||
@@ -0,0 +1,24 @@
|
||||
---
|
||||
title: Create SIP DTMF Response
|
||||
sidebar:
|
||||
label: Create
|
||||
order: 1
|
||||
---
|
||||
import SchemaInfo from '../../../../../../components/SchemaInfo.astro';
|
||||
|
||||
This processor will create a SIP DTMF response from the provided parameters. If this message is output to a SIP module using the [module.output](/processors/module/output) processor, then the SIP module will send the response to the caller and play the DTMF tones specified.
|
||||
|
||||
<SchemaInfo type="processor" id="sip.response.dtmf.create"/>
|
||||
|
||||
### Example
|
||||
|
||||
This example will create a SIP response that will wait 1 second then play the DTMF digits "1234" then wait another second before completing the response.
|
||||
|
||||
```yaml
|
||||
- id: create-dtmf-response
|
||||
type: sip.response.dtmf.create
|
||||
params:
|
||||
preWait: 1000
|
||||
digits: "1234"
|
||||
postWait: 1000
|
||||
```
|
||||
@@ -25,6 +25,9 @@ showbridge is a kind of re-imagining of [OSCulator](https://osculator.net/) take
|
||||
- server
|
||||
- [PosiStageNet](https://posistage.net/)
|
||||
- client
|
||||
- [SIP](https://datatracker.ietf.org/doc/html/rfc3261)
|
||||
- call server
|
||||
- [DTMF](https://en.wikipedia.org/wiki/DTMF_signaling) server
|
||||
- MIDI
|
||||
- input (not included in pre-built binaries yet)
|
||||
- output (not included in pre-built binaries yet)
|
||||
|
||||
+353
-478
File diff suppressed because it is too large
Load Diff
+667
-1165
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user