@framers/agentos-ext-voice-twilio 0.1.4 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +90 -0
- package/dist/index.d.ts +15 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -41
- package/dist/index.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +3 -3
package/README.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Twilio voice calls
|
|
2
|
+
|
|
3
|
+
This pack gives an agent a voice call provider and a call management tool interface using the `twilio` SDK, Twilio REST API and TwiML. The provider creates calls, generates speech instructions and parses call status webhooks.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @framers/agentos-ext-voice-twilio
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Peer dependency: `@framers/agentos`, at the minimum version declared by this package.
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { AgentOS } from '@framers/agentos';
|
|
17
|
+
|
|
18
|
+
const agentos = await AgentOS.create({
|
|
19
|
+
extensionManifest: {
|
|
20
|
+
packs: [
|
|
21
|
+
{
|
|
22
|
+
package: '@framers/agentos-ext-voice-twilio',
|
|
23
|
+
options: {
|
|
24
|
+
accountSid: process.env.TWILIO_ACCOUNT_SID,
|
|
25
|
+
authToken: process.env.TWILIO_AUTH_TOKEN,
|
|
26
|
+
fromNumber: process.env.TWILIO_FROM_NUMBER,
|
|
27
|
+
webhookBaseUrl: process.env.TWILIO_WEBHOOK_BASE_URL,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Configuration
|
|
36
|
+
|
|
37
|
+
Credentials resolve from direct options, then `options.secrets`, then the selected environment variable. A custom environment name replaces the default name; caller number resolution then checks its fallback.
|
|
38
|
+
|
|
39
|
+
| Option | Secret id | Environment variable | Required | Default |
|
|
40
|
+
| --- | --- | --- | --- | --- |
|
|
41
|
+
| `accountSid` | `twilio.accountSid` | Name in `accountSidEnv`, otherwise `TWILIO_ACCOUNT_SID` | Yes | Empty string, then throws |
|
|
42
|
+
| `authToken` | `twilio.authToken` | Name in `authTokenEnv`, otherwise `TWILIO_AUTH_TOKEN` | Yes | Empty string, then throws |
|
|
43
|
+
| `fromNumber` | `twilio.fromNumber` | Name in `fromNumberEnv`, otherwise `TWILIO_FROM_NUMBER`; then `TWILIO_PHONE_NUMBER` | No | Empty string |
|
|
44
|
+
| `webhookBaseUrl` | None | `TWILIO_WEBHOOK_BASE_URL` | No | `undefined` |
|
|
45
|
+
| `accountSidEnv` | None | None | No | `TWILIO_ACCOUNT_SID` selected by resolver |
|
|
46
|
+
| `authTokenEnv` | None | None | No | `TWILIO_AUTH_TOKEN` selected by resolver |
|
|
47
|
+
| `fromNumberEnv` | None | None | No | `TWILIO_FROM_NUMBER` selected by resolver |
|
|
48
|
+
| `priority` | None | None | No | `50` |
|
|
49
|
+
| `secrets` | Map containing the secret ids above | None | No | `undefined` |
|
|
50
|
+
| `callManager` | None | None | No | Exposed pack-owned manager |
|
|
51
|
+
|
|
52
|
+
## Tools
|
|
53
|
+
|
|
54
|
+
| Tool | What it does |
|
|
55
|
+
| --- | --- |
|
|
56
|
+
| `twilioVoiceCall` | Makes or manages Twilio phone calls through a handler, including outbound calls, speech, ending calls and status queries. |
|
|
57
|
+
|
|
58
|
+
### `twilioVoiceCall` parameters
|
|
59
|
+
|
|
60
|
+
| Parameter | Type | Required | Description |
|
|
61
|
+
| --- | --- | --- | --- |
|
|
62
|
+
| `action` | `string`, enum: `initiate_call`, `speak`, `end_call`, `get_status` | Yes | The action to perform |
|
|
63
|
+
| `toNumber` | `string` | No | E.164 phone number to call (e.g., +15551234567). Required for `initiate_call`. |
|
|
64
|
+
| `message` | `string` | No | Text to speak. Used for `initiate_call` (notify mode) and `speak` action. |
|
|
65
|
+
| `callId` | `string` | No | Call ID. Required for `speak`, `end_call`, and `get_status` actions. |
|
|
66
|
+
| `mode` | `string`, enum: `notify`, `conversation` | No | Call mode. "`notify`" speaks a message and hangs up; "`conversation`" enables bidirectional audio. Defaults to "`conversation`". |
|
|
67
|
+
|
|
68
|
+
## Notes
|
|
69
|
+
|
|
70
|
+
The package requires Node.js `>=22`. Activation dynamically loads the SDK and initializes the service. Deactivation releases the SDK client. Missing account credentials throw during pack creation.
|
|
71
|
+
|
|
72
|
+
The factory registers the tool against its exposed manager binding. An injected manager is used immediately; otherwise the pack creates its own manager. The exported `VoiceCallTool` constructor still accepts a host-provided handler for separate construction.
|
|
73
|
+
|
|
74
|
+
With a configured handler, call operations have side effects. Runtime checks require `toNumber` for `initiate_call`, `callId` and `message` for `speak`, and `callId` for `end_call`. Despite its schema description, `get_status` accepts no `callId` to list active calls. The tool passes an omitted `mode` through to the handler without applying a default. Number validation checks for a string beginning with `+`.
|
|
75
|
+
|
|
76
|
+
The provider generates notify TwiML with speech followed by hangup, defaulting to `Polly.Joanna`. Its `playTts` method uses the same speech-and-hangup TwiML. Conversation TwiML connects a media stream when the caller supplies a stream URL. The service escapes XML values.
|
|
77
|
+
|
|
78
|
+
Webhook verification uses the request URL, body parameters and auth token. Missing signatures or invalid signatures are rejected. Form-encoded status callbacks map to normalized call events. The pack registers `voice-provider` named `twilio`; its files do not start webhook or media socket servers.
|
|
79
|
+
|
|
80
|
+
## Host call manager binding
|
|
81
|
+
|
|
82
|
+
Pass `options.callManager` to use a host-owned `CallManager`. The returned pack exposes `binding`, whose `manager`, `provider` and `toolHandler` identify the actual objects used by the call tool. `binding.setManager(next)` registers the provider on the replacement manager and changes subsequent tool operations. Rebind only after the host has drained or transferred its active calls; the binding does not migrate call state.
|
|
83
|
+
|
|
84
|
+
The voice-provider descriptor still contains the raw Twilio provider. Its read-only `binding` property exposes the same binding to an `ExtensionManager` registry consumer. The call tool's id, actions and public handler type remain compatible. When no manager is supplied, the pack creates and exposes its own; deactivation disposes only that original owned manager. An injected or replacement manager remains the host's responsibility. No call is placed during construction.
|
|
85
|
+
|
|
86
|
+
This binding does not change the pack's legacy carrier implementation or grant the durable carrier profile's event identity and webhook guarantees. Select the core carrier profile explicitly when those guarantees are required. The package's declared core peer floor is required for the binding API.
|
|
87
|
+
|
|
88
|
+
## License
|
|
89
|
+
|
|
90
|
+
Apache-2.0
|
package/dist/index.d.ts
CHANGED
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @module @framers/agentos-ext-voice-twilio
|
|
10
10
|
*/
|
|
11
|
-
import type
|
|
11
|
+
import { CallManager, type ExtensionContext, type ExtensionPack } from '@framers/agentos';
|
|
12
|
+
import { type VoiceProviderBinding } from '@framers/agentos/io/channels/telephony/CallManager';
|
|
12
13
|
import { TwilioVoiceService } from './TwilioVoiceService';
|
|
13
14
|
import { TwilioVoiceProvider } from './TwilioVoiceProvider';
|
|
14
15
|
import { VoiceCallTool } from './tools/voiceCall';
|
|
@@ -31,8 +32,20 @@ export interface TwilioVoiceOptions {
|
|
|
31
32
|
priority?: number;
|
|
32
33
|
/** Secrets map passed from registry. */
|
|
33
34
|
secrets?: Record<string, string>;
|
|
35
|
+
/** Host-owned manager. Omission creates a pack-owned manager exposed through binding. */
|
|
36
|
+
callManager?: CallManager;
|
|
34
37
|
}
|
|
35
|
-
|
|
38
|
+
/** A raw Twilio provider with access to the manager used by its call tool. */
|
|
39
|
+
export type BoundTwilioVoiceProvider = TwilioVoiceProvider & {
|
|
40
|
+
readonly binding: VoiceProviderBinding;
|
|
41
|
+
};
|
|
42
|
+
/** Extension pack exposing its call-tool binding without replacing provider descriptors. */
|
|
43
|
+
export interface TwilioVoicePack extends ExtensionPack {
|
|
44
|
+
/** Shared binding used by the tool and voice-provider descriptor. */
|
|
45
|
+
readonly binding: VoiceProviderBinding;
|
|
46
|
+
}
|
|
47
|
+
/** Construct a Twilio pack; no call is initiated until its tool or host requests one. */
|
|
48
|
+
export declare function createExtensionPack(context: ExtensionContext): TwilioVoicePack;
|
|
36
49
|
export { TwilioVoiceService, TwilioVoiceProvider, VoiceCallTool };
|
|
37
50
|
export type { TwilioServiceConfig } from './TwilioVoiceService';
|
|
38
51
|
export type { VoiceCallToolHandler } from './tools/voiceCall';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAqB,KAAK,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAClH,OAAO,EAAE,kBAAkB,EAA4B,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMlD,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,yFAAyF;IACzF,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,8EAA8E;AAC9E,MAAM,MAAM,wBAAwB,GAAG,mBAAmB,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAA;CAAE,CAAC;AACxG,4FAA4F;AAC5F,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;CACxC;AAoCD,yFAAyF;AACzF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CA4E9E;AAMD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,aAAa,EAAE,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,eAAe,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.VoiceCallTool = exports.TwilioVoiceProvider = exports.TwilioVoiceService = void 0;
|
|
15
15
|
exports.createExtensionPack = createExtensionPack;
|
|
16
|
+
const agentos_1 = require("@framers/agentos");
|
|
17
|
+
const CallManager_1 = require("@framers/agentos/io/channels/telephony/CallManager");
|
|
16
18
|
const TwilioVoiceService_1 = require("./TwilioVoiceService");
|
|
17
19
|
Object.defineProperty(exports, "TwilioVoiceService", { enumerable: true, get: function () { return TwilioVoiceService_1.TwilioVoiceService; } });
|
|
18
20
|
const TwilioVoiceProvider_1 = require("./TwilioVoiceProvider");
|
|
@@ -43,6 +45,7 @@ function resolveSecret(optionValue, secrets, secretKey, envVarOverride, defaultE
|
|
|
43
45
|
// ============================================================================
|
|
44
46
|
// Factory
|
|
45
47
|
// ============================================================================
|
|
48
|
+
/** Construct a Twilio pack; no call is initiated until its tool or host requests one. */
|
|
46
49
|
function createExtensionPack(context) {
|
|
47
50
|
const options = (context.options ?? {});
|
|
48
51
|
const accountSid = resolveSecret(options.accountSid, options.secrets, 'twilio.accountSid', options.accountSidEnv, 'TWILIO_ACCOUNT_SID');
|
|
@@ -62,22 +65,16 @@ function createExtensionPack(context) {
|
|
|
62
65
|
// ── Instantiate components ──
|
|
63
66
|
const service = new TwilioVoiceService_1.TwilioVoiceService(config);
|
|
64
67
|
const provider = new TwilioVoiceProvider_1.TwilioVoiceProvider(service);
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
// exported `setToolHandler()`.
|
|
69
|
-
let activeHandler = createPlaceholderHandler();
|
|
70
|
-
const voiceCallTool = new voiceCall_1.VoiceCallTool(
|
|
71
|
-
// Proxy handler so it always uses the latest activeHandler reference
|
|
72
|
-
{
|
|
73
|
-
initiateCall: (...args) => activeHandler.initiateCall(...args),
|
|
74
|
-
speakText: (...args) => activeHandler.speakText(...args),
|
|
75
|
-
hangupCall: (...args) => activeHandler.hangupCall(...args),
|
|
76
|
-
getCallStatus: (...args) => activeHandler.getCallStatus(...args),
|
|
77
|
-
getActiveCalls: () => activeHandler.getActiveCalls(),
|
|
68
|
+
const ownedManager = options.callManager ? undefined : new agentos_1.CallManager({
|
|
69
|
+
provider: { provider: 'twilio', config: { accountSid, authToken, fromNumber } },
|
|
70
|
+
webhookBaseUrl: config.webhookBaseUrl, defaultMode: 'conversation',
|
|
78
71
|
});
|
|
72
|
+
const binding = (0, CallManager_1.bindVoiceProvider)(provider, options.callManager ?? ownedManager);
|
|
73
|
+
Object.defineProperty(provider, 'binding', { value: binding, enumerable: false, writable: false });
|
|
74
|
+
const voiceCallTool = new voiceCall_1.VoiceCallTool(binding.toolHandler);
|
|
79
75
|
const priority = options.priority ?? 50;
|
|
80
76
|
return {
|
|
77
|
+
binding,
|
|
81
78
|
name: '@framers/agentos-ext-voice-twilio',
|
|
82
79
|
version: '0.1.0',
|
|
83
80
|
descriptors: [
|
|
@@ -89,38 +86,11 @@ function createExtensionPack(context) {
|
|
|
89
86
|
context.logger?.info('[TwilioVoice] Extension activated');
|
|
90
87
|
},
|
|
91
88
|
onDeactivate: async () => {
|
|
89
|
+
ownedManager?.dispose();
|
|
92
90
|
await service.shutdown();
|
|
93
91
|
context.logger?.info('[TwilioVoice] Extension deactivated');
|
|
94
92
|
},
|
|
95
93
|
};
|
|
96
94
|
}
|
|
97
|
-
// ============================================================================
|
|
98
|
-
// Placeholder Handler
|
|
99
|
-
// ============================================================================
|
|
100
|
-
/**
|
|
101
|
-
* Creates a placeholder VoiceCallToolHandler that returns sensible errors.
|
|
102
|
-
* The host application should replace this with a real handler backed by
|
|
103
|
-
* a CallManager instance via `setToolHandler()`.
|
|
104
|
-
*/
|
|
105
|
-
function createPlaceholderHandler() {
|
|
106
|
-
return {
|
|
107
|
-
async initiateCall(_toNumber, _message, _mode) {
|
|
108
|
-
throw new Error('VoiceCallToolHandler not configured. The host application must provide a handler ' +
|
|
109
|
-
'backed by a CallManager instance.');
|
|
110
|
-
},
|
|
111
|
-
speakText(_callId, _text) {
|
|
112
|
-
throw new Error('VoiceCallToolHandler not configured.');
|
|
113
|
-
},
|
|
114
|
-
async hangupCall(_callId) {
|
|
115
|
-
throw new Error('VoiceCallToolHandler not configured.');
|
|
116
|
-
},
|
|
117
|
-
getCallStatus(_callId) {
|
|
118
|
-
return undefined;
|
|
119
|
-
},
|
|
120
|
-
getActiveCalls() {
|
|
121
|
-
return [];
|
|
122
|
-
},
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
95
|
exports.default = createExtensionPack;
|
|
126
96
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,cAAc;AACd;;;;;;;;;GASG;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://agentos.sh/schemas/extension-manifest-v1.json",
|
|
3
3
|
"id": "com.framers.voice.twilio",
|
|
4
4
|
"name": "Twilio Voice Call Extension",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.2.0",
|
|
6
6
|
"description": "Twilio telephony provider for voice calls — supports outbound/inbound calls, TwiML, media streams, and bidirectional audio.",
|
|
7
7
|
"categories": ["voice", "telephony"],
|
|
8
8
|
"platforms": ["twilio"],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@framers/agentos-ext-voice-twilio",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Twilio voice call provider for AgentOS — outbound/inbound calls via Twilio REST API",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"manifest.json"
|
|
23
23
|
],
|
|
24
24
|
"peerDependencies": {
|
|
25
|
-
"@framers/agentos": ">=0.
|
|
25
|
+
"@framers/agentos": ">=0.13.104"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"twilio": "^5.0.0"
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"@types/node": "^20.0.0",
|
|
32
32
|
"typescript": "^5.0.0",
|
|
33
33
|
"vitest": "^3.2.7",
|
|
34
|
-
"@framers/agentos": "^0.13.
|
|
34
|
+
"@framers/agentos": "^0.13.134"
|
|
35
35
|
},
|
|
36
36
|
"engines": {
|
|
37
37
|
"node": ">=22"
|