Skip to content

integrations/voice/twilio/dist

Interfaces

ParseTwilioVoiceWebhookInput

Extends

Properties

authToken?
optional authToken?: string;
Inherited from

ParseTwilioVoiceWebhookOptions.authToken

publicUrl?
optional publicUrl?: string;
Inherited from

ParseTwilioVoiceWebhookOptions.publicUrl

request
request: Request;
requireSignature?
optional requireSignature?: boolean;
Inherited from

ParseTwilioVoiceWebhookOptions.requireSignature


ParseTwilioVoiceWebhookOptions

Extended by

Properties

authToken?
optional authToken?: string;
publicUrl?
optional publicUrl?: string;
requireSignature?
optional requireSignature?: boolean;

TwilioAccountContextResource

Methods

fetch()
fetch(): Promise<TwilioAccountResource>;
Returns

Promise\<TwilioAccountResource>


TwilioAccountResource

Indexable

[key: string]: unknown

Properties

friendly_name?
optional friendly_name?: string;
friendlyName?
optional friendlyName?: string;
sid
sid: string;
status?
optional status?: string;

TwilioCallableVoiceCallsResource()

TwilioCallableVoiceCallsResource(sid): TwilioCallContextResource;

Parameters

Parameter Type
sid string

Returns

TwilioCallContextResource

Methods

create()
create(input): Promise<TwilioCallResource>;
Parameters
Parameter Type
input unknown
Returns

Promise\<TwilioCallResource>

get()?
optional get(sid): TwilioCallContextResource;
Parameters
Parameter Type
sid string
Returns

TwilioCallContextResource


TwilioCallContextResource

Methods

fetch()
fetch(): Promise<TwilioCallResource>;
Returns

Promise\<TwilioCallResource>

update()
update(input): Promise<TwilioCallResource>;
Parameters
Parameter Type
input { }
Returns

Promise\<TwilioCallResource>


TwilioCallEndInput

Properties

status?
optional status?: TwilioCallUpdateStatus;
statusCallback?
optional statusCallback?: string;
statusCallbackMethod?
optional statusCallbackMethod?: "GET" | "POST";

TwilioCallRedirectInput

Properties

fallbackMethod?
optional fallbackMethod?: "GET" | "POST";
fallbackUrl?
optional fallbackUrl?: string;
method?
optional method?: "GET" | "POST";
statusCallback?
optional statusCallback?: string;
statusCallbackMethod?
optional statusCallbackMethod?: "GET" | "POST";
twiml?
optional twiml?: string;
url?
optional url?: string;

TwilioCallResource

Indexable

[key: string]: unknown

Properties

account_sid?
optional account_sid?: string;
accountSid?
optional accountSid?: string;
direction?
optional direction?: string;
from?
optional from?: string;
sid
sid: string;
status?
optional status?: string;
to?
optional to?: string;

TwilioCallUpdateInput

Properties

fallbackMethod?
optional fallbackMethod?: "GET" | "POST";
fallbackUrl?
optional fallbackUrl?: string;
method?
optional method?: "GET" | "POST";
status?
optional status?: TwilioCallUpdateStatus;
statusCallback?
optional statusCallback?: string;
statusCallbackMethod?
optional statusCallbackMethod?: "GET" | "POST";
timeLimitSeconds?
optional timeLimitSeconds?: number;
twiml?
optional twiml?: string;
url?
optional url?: string;

TwilioGettableVoiceCallsResource

Methods

create()
create(input): Promise<TwilioCallResource>;
Parameters
Parameter Type
input unknown
Returns

Promise\<TwilioCallResource>

get()
get(sid): TwilioCallContextResource;
Parameters
Parameter Type
sid string
Returns

TwilioCallContextResource


TwilioMediaStreamTwiMLOptions

Properties

customParameters?
optional customParameters?: Record<string, string>;
mode?
optional mode?: "start" | "connect";
name?
optional name?: string;
statusCallback?
optional statusCallback?: string;
track?
optional track?: "inbound_track" | "outbound_track" | "both_tracks";
websocketUrl
websocketUrl: string;

TwilioOutboundCallInput

Properties

applicationSid?
optional applicationSid?: string;
from
from: string;
machineDetection?
optional machineDetection?: "Enable" | "DetectMessageEnd";
metadata?
optional metadata?: Record<string, string>;
method?
optional method?: "GET" | "POST";
sendDigits?
optional sendDigits?: string;
statusCallback?
optional statusCallback?: string;
statusCallbackEvent?
optional statusCallbackEvent?: TwilioCallStatusCallbackEvent[];
statusCallbackMethod?
optional statusCallbackMethod?: "GET" | "POST";
timeoutSeconds?
optional timeoutSeconds?: number;
to
to: string;
twiml?
optional twiml?: string;
url?
optional url?: string;

TwilioVoiceCallsResource()

TwilioVoiceCallsResource(sid): TwilioCallContextResource;

Parameters

Parameter Type
sid string

Returns

TwilioCallContextResource

Methods

create()
create(input): Promise<TwilioCallResource>;
Parameters
Parameter Type
input unknown
Returns

Promise\<TwilioCallResource>

get()
get(sid): TwilioCallContextResource;
Parameters
Parameter Type
sid string
Returns

TwilioCallContextResource


TwilioVoiceClient

Methods

createOutboundCall()
createOutboundCall(input): Promise<TwilioCallResource>;
Parameters
Parameter Type
input TwilioOutboundCallInput
Returns

Promise\<TwilioCallResource>

endCall()
endCall(callSid, input?): Promise<TwilioCallResource>;
Parameters
Parameter Type
callSid string
input? TwilioCallEndInput
Returns

Promise\<TwilioCallResource>

fetchAccount()
fetchAccount(): Promise<TwilioAccountResource>;
Returns

Promise\<TwilioAccountResource>

fetchCall()
fetchCall(callSid): Promise<TwilioCallResource>;
Parameters
Parameter Type
callSid string
Returns

Promise\<TwilioCallResource>

getRawClient()
getRawClient(): Promise<TwilioVoiceRawClient>;
Returns

Promise\<TwilioVoiceRawClient>

getSdkClient()
getSdkClient(): Promise<TwilioVoiceRawClient>;
Returns

Promise\<TwilioVoiceRawClient>

Deprecated

Use getRawClient.

redirectCall()
redirectCall(callSid, input): Promise<TwilioCallResource>;
Parameters
Parameter Type
callSid string
input TwilioCallRedirectInput
Returns

Promise\<TwilioCallResource>

updateCall()
updateCall(callSid, input): Promise<TwilioCallResource>;
Parameters
Parameter Type
callSid string
input TwilioCallUpdateInput
Returns

Promise\<TwilioCallResource>


TwilioVoiceClientOptions

Extended by

Properties

accountSid
accountSid: string;
apiKeySecret?
optional apiKeySecret?: string;
apiKeySid?
optional apiKeySid?: string;
authToken?
optional authToken?: string;
rawClient?
optional rawClient?: TwilioVoiceRawClient;
sdkClient?
optional sdkClient?: TwilioVoiceRawClient;
Deprecated

Use rawClient.


TwilioVoiceIntegrationOptions

Extends

Properties

accountSid
accountSid: string;
Inherited from

TwilioVoiceClientOptions.accountSid

apiKeySecret?
optional apiKeySecret?: string;
Inherited from

TwilioVoiceClientOptions.apiKeySecret

apiKeySid?
optional apiKeySid?: string;
Inherited from

TwilioVoiceClientOptions.apiKeySid

authToken?
optional authToken?: string;
Inherited from

TwilioVoiceClientOptions.authToken

publicUrl?
optional publicUrl?: string;
rawClient?
optional rawClient?: TwilioVoiceRawClient;
Inherited from

TwilioVoiceClientOptions.rawClient

requireSignature?
optional requireSignature?: boolean;
sdkClient?
optional sdkClient?: TwilioVoiceRawClient;
Deprecated

Use rawClient.

Inherited from

TwilioVoiceClientOptions.sdkClient

voiceClient?
optional voiceClient?: TwilioVoiceClient;
webhookAuthToken?
optional webhookAuthToken?: string;

TwilioVoiceRawClient

Properties

api
api: {
  accounts: TwilioAccountContextResource;
};
accounts()
accounts(accountSid): TwilioAccountContextResource;
Parameters
Parameter Type
accountSid string
Returns

TwilioAccountContextResource

calls
calls: TwilioVoiceCallsResource;

TwilioVoiceWebhook

Properties

accountSid?
optional accountSid?: string;
callSid?
optional callSid?: string;
callStatus?
optional callStatus?: TwilioCallStatus;
direction?
optional direction?: string;
from?
optional from?: string;
raw
raw: Record<string, string>;
to?
optional to?: string;

Type Aliases

TwilioCallStatus

type TwilioCallStatus =
  | "queued"
  | "initiated"
  | "ringing"
  | "in-progress"
  | "completed"
  | "busy"
  | "failed"
  | "no-answer"
  | "canceled";

TwilioCallStatusCallbackEvent

type TwilioCallStatusCallbackEvent = "initiated" | "ringing" | "answered" | "completed";

TwilioCallUpdateStatus

type TwilioCallUpdateStatus = "canceled" | "completed";

TwilioVoiceSdkCallCreateOptions

type TwilioVoiceSdkCallCreateOptions = Parameters<TwilioSdkCalls["create"]>[0];

TwilioVoiceSdkCallUpdateOptions

type TwilioVoiceSdkCallUpdateOptions = NonNullable<Parameters<TwilioSdkCallContext["update"]>[0]>;

TwilioVoiceSdkClient

type TwilioVoiceSdkClient = TwilioVoiceRawClient;

Variables

createTwilioIntegration

const createTwilioIntegration: typeof createTwilioVoiceIntegration;

createTwilioIntegrationOperationHandlers

const createTwilioIntegrationOperationHandlers: typeof createTwilioVoiceOperationHandlers;

twilioVoiceIntegration

const twilioVoiceIntegration: {
  bindingReport: OperationBindingReport;
  client: TwilioVoiceClient;
  getRawClient: () => Promise<TwilioVoiceRawClient>;
  getSdkClient: () => Promise<TwilioVoiceRawClient>;
  manifest: {
     capabilities: {
        audiences?: ("customer-facing" | "mixed" | "internal-support")[];
        capability: string;
        changesWorkflow?: boolean;
        description?: string;
        exposesSensitiveData?: boolean;
        extension?: boolean;
        label?: string;
        metadata?: Record<string, unknown>;
        providerObjects?: {
           description?: string;
           kind: string;
           label?: string;
           metadata?: Record<string, unknown>;
           schemaName?: string;
        }[];
        requiresCredential?: boolean;
        sideEffect?: boolean;
     }[];
     category: string;
     channelAudiences: ("customer-facing" | "mixed" | "internal-support")[];
     coverage: {
        evidence: {
           label: string;
           url?: string;
        }[];
        notes: string[];
        scope:   | "provider-api-subset"
           | "support-workflow-subset"
           | "connector-required"
           | "local-protocol"
           | "full-provider-api";
     };
     credentialRequirements: {
        description?: string;
        id: string;
        label?: string;
        metadata?: Record<string, unknown>;
        required: boolean;
        scopes: string[];
     }[];
     directions: (
        | "inbound-only"
        | "outbound-only"
        | "bidirectional"
        | "receive-only"
       | "send-only")[];
     id: string;
     limitations: string[];
     maintainers: {
        name: string;
        type: "official" | "community" | "unknown" | "partner";
        url?: string;
     }[];
     metadata?: Record<string, unknown>;
     name: string;
     operations: {
        alias: string;
        audience?: "customer-facing" | "mixed" | "internal-support";
        audiences?: ("customer-facing" | "mixed" | "internal-support")[];
        capability: string;
        changesWorkflow?: boolean;
        description?: string;
        exposesSensitiveData?: boolean;
        extension: boolean;
        externallyVisible?: boolean;
        inputSchema?: unknown;
        inputSchemaName?: string;
        inputSchemaRef?: string;
        label?: string;
        metadata?: Record<string, unknown>;
        outputSchema?: unknown;
        outputSchemaName?: string;
        outputSchemaRef?: string;
        providerObject?: string;
        providerObjects?: {
           description?: string;
           kind: string;
           label?: string;
           metadata?: Record<string, unknown>;
           schemaName?: string;
        }[];
        providerOperation?: string;
        requiredPolicyIds?: string[];
        requiresApproval?: boolean;
        requiresCredential?: boolean;
        sideEffect?: boolean;
     }[];
     packageName: string;
     privacyNotes: string[];
     provider: string;
     trustLevel: "official" | "community" | "verified" | "experimental";
   } & {
     capabilities: readonly [{
        audiences: readonly ["customer-facing"];
        capability: "receive";
        description: "Accepts and parses Twilio Voice webhooks for SDK-user-owned Cognidesk voice handling.";
        exposesSensitiveData: true;
        label: "Receive voice webhooks";
        providerObjects: readonly [{
           kind: "twilioCall";
           label: "Twilio Call";
        }];
        requiresCredential: true;
      }, {
        audiences: readonly ["customer-facing"];
        capability: "send";
        description: "Creates outbound calls through the Twilio helper library.";
        exposesSensitiveData: true;
        label: "Create outbound calls";
        providerObjects: readonly [{
           kind: "twilioCall";
           label: "Twilio Call";
        }];
        requiresCredential: true;
        sideEffect: true;
      }, {
        audiences: readonly ["customer-facing", "internal-support"];
        capability: "media";
        description: "Builds TwiML for Cognidesk-owned voice websocket media streams while preserving Twilio track constraints.";
        label: "Media Stream TwiML";
        providerObjects: readonly [{
           kind: "twilioMediaStream";
           label: "Twilio Media Stream";
        }];
        requiresCredential: false;
      }, {
        audiences: readonly ["internal-support"];
        capability: "transfer";
        changesWorkflow: true;
        description: "Redirects or ends active Twilio calls through the Call resource.";
        label: "Redirect or end calls";
        providerObjects: readonly [{
           kind: "twilioCall";
           label: "Twilio Call";
        }];
        requiresCredential: true;
        sideEffect: true;
      }, {
        audiences: readonly ["internal-support"];
        capability: "twilio.webhook-signature";
        description: "Validates X-Twilio-Signature for form-encoded Twilio Voice webhooks.";
        exposesSensitiveData: true;
        extension: true;
        label: "Validate Twilio webhooks";
        providerObjects: readonly [{
           kind: "twilioWebhook";
           label: "Twilio Webhook";
        }];
        requiresCredential: true;
     }];
     category: "voice";
     channelAudiences: readonly ["customer-facing", "mixed"];
     coverage: {
        evidence: readonly [{
           label: "Twilio Node helper library";
           url: "https://www.npmjs.com/package/twilio";
         }, {
           label: "Twilio Programmable Voice API";
           url: "https://www.twilio.com/docs/voice/api";
         }, {
           label: "Twilio Call Resource";
           url: "https://www.twilio.com/docs/voice/api/call-resource";
         }, {
           label: "Twilio webhook security";
           url: "https://www.twilio.com/docs/usage/webhooks/webhooks-security";
        }];
        notes: readonly ["Implements normalized call-control, TwiML media stream, webhook, readiness, and raw Twilio helper-client access with the official Twilio Node helper library.", "Twilio Voice and Twilio SMS are separate Cognidesk category packages even though they use the same upstream helper library.", "Conferences, queues, recordings, transcription lifecycle, SIP trunks, Voice Insights, and ConversationRelay remain available only through raw Twilio client access or future normalized operations."];
        scope: "provider-api-subset";
     };
     credentialRequirements: readonly [{
        description: "Server-side Twilio Account SID used by the helper library.";
        id: "twilio-account";
        label: "Twilio Account SID";
        metadata: {
           scopeKind: "provider-permission";
        };
        required: true;
      }, {
        description: "Twilio Auth Token or API key credentials used for Voice REST calls.";
        id: "twilio-rest-api-credentials";
        label: "Twilio REST API credentials";
        metadata: {
           scopeKind: "provider-permission";
        };
        required: true;
      }, {
        description: "Primary Twilio Auth Token used to validate X-Twilio-Signature webhook requests.";
        id: "twilio-webhook-auth-token";
        label: "Twilio webhook Auth Token";
        metadata: {
           scopeKind: "provider-permission";
        };
        required: false;
     }];
     directions: readonly ["inbound-only", "outbound-only", "bidirectional"];
     id: "voice.twilio";
     limitations: readonly ["Live call readiness depends on the SDK user's Twilio account, voice-capable numbers, regions, webhooks, and account permissions."];
     maintainers: readonly [{
        name: "Cognidesk";
        type: "official";
     }];
     metadata: {
        implementation: {
           sdkPackage: "twilio";
           strategy: "official-sdk";
           verifiedAt: "2026-06-21";
           verifiedVersion: "6.0.2";
        };
        rawClient: {
           coverage: "upstream-sdk";
           export: "getRawClient";
        };
        sdkClient: {
           coverage: "deprecated-raw-client-alias";
           export: "getSdkClient";
        };
     };
     name: "Twilio Programmable Voice";
     operations: readonly [{
        alias: "voice.call.answer";
        audiences: readonly ["customer-facing"];
        capability: "receive";
        exposesSensitiveData: true;
        label: "Receive voice webhook";
        providerObject: "twilioCall";
        providerOperation: "twilio.validateRequest";
      }, {
        alias: "voice.call.start";
        audiences: readonly ["customer-facing"];
        capability: "send";
        exposesSensitiveData: true;
        externallyVisible: true;
        label: "Create outbound call";
        providerObject: "twilioCall";
        providerOperation: "calls.create";
        requiresApproval: true;
        sideEffect: true;
      }, {
        alias: "voice.call.redirect";
        audiences: readonly ["internal-support"];
        capability: "transfer";
        changesWorkflow: true;
        label: "Redirect call";
        providerObject: "twilioCall";
        providerOperation: "calls(sid).update";
        sideEffect: true;
     }];
     packageName: "@cognidesk/integration-voice-twilio";
     privacyNotes: readonly ["Phone numbers, call metadata, webhook parameters, and Media Stream audio metadata are exchanged with Twilio.", "Twilio credentials stay server-side and are never issued to browsers by this package."];
     provider: "twilio";
     trustLevel: "official";
  };
  metadata?: Record<string, unknown>;
  operationAliases: ("voice.call.answer" | "voice.call.start" | "voice.call.redirect")[];
  operations: {
     voice.call.answer: (input) => Promise<TwilioVoiceWebhook>;
     voice.call.redirect: (input) => Promise<TwilioCallResource>;
     voice.call.start: (input) => Promise<TwilioCallResource>;
  };
  getOperationHandler: {
     voice.call.answer: (input) => Promise<TwilioVoiceWebhook>;
     voice.call.redirect: (input) => Promise<TwilioCallResource>;
     voice.call.start: (input) => Promise<TwilioCallResource>;
  }[Alias];
  requireOperationHandler: {
     voice.call.answer: (input) => Promise<TwilioVoiceWebhook>;
     voice.call.redirect: (input) => Promise<TwilioCallResource>;
     voice.call.start: (input) => Promise<TwilioCallResource>;
  }[Alias];
  run: Promise<Awaited<ReturnType<{
     voice.call.answer: (input) => Promise<TwilioVoiceWebhook>;
     voice.call.redirect: (input) => Promise<TwilioCallResource>;
     voice.call.start: (input) => Promise<TwilioCallResource>;
  }[Alias]>>>;
};

Type Declaration

Name Type
bindingReport OperationBindingReport
client TwilioVoiceClient
getRawClient() () => Promise\<TwilioVoiceRawClient>
getSdkClient() () => Promise\<TwilioVoiceRawClient>
manifest { capabilities: { audiences?: ("customer-facing" | "mixed" | "internal-support")[]; capability: string; changesWorkflow?: boolean; description?: string; exposesSensitiveData?: boolean; extension?: boolean; label?: string; metadata?: Record\<string, unknown>; providerObjects?: { description?: string; kind: string; label?: string; metadata?: Record\<string, unknown>; schemaName?: string; }[]; requiresCredential?: boolean; sideEffect?: boolean; }[]; category: string; channelAudiences: ("customer-facing" | "mixed" | "internal-support")[]; coverage: { evidence: { label: string; url?: string; }[]; notes: string[]; scope: | "provider-api-subset" | "support-workflow-subset" | "connector-required" | "local-protocol" | "full-provider-api"; }; credentialRequirements: { description?: string; id: string; label?: string; metadata?: Record\<string, unknown>; required: boolean; scopes: string[]; }[]; directions: ( | "inbound-only" | "outbound-only" | "bidirectional" | "receive-only" | "send-only")[]; id: string; limitations: string[]; maintainers: { name: string; type: "official" | "community" | "unknown" | "partner"; url?: string; }[]; metadata?: Record\<string, unknown>; name: string; operations: { alias: string; audience?: "customer-facing" | "mixed" | "internal-support"; audiences?: ("customer-facing" | "mixed" | "internal-support")[]; capability: string; changesWorkflow?: boolean; description?: string; exposesSensitiveData?: boolean; extension: boolean; externallyVisible?: boolean; inputSchema?: unknown; inputSchemaName?: string; inputSchemaRef?: string; label?: string; metadata?: Record\<string, unknown>; outputSchema?: unknown; outputSchemaName?: string; outputSchemaRef?: string; providerObject?: string; providerObjects?: { description?: string; kind: string; label?: string; metadata?: Record\<string, unknown>; schemaName?: string; }[]; providerOperation?: string; requiredPolicyIds?: string[]; requiresApproval?: boolean; requiresCredential?: boolean; sideEffect?: boolean; }[]; packageName: string; privacyNotes: string[]; provider: string; trustLevel: "official" | "community" | "verified" | "experimental"; } & { capabilities: readonly [{ audiences: readonly ["customer-facing"]; capability: "receive"; description: "Accepts and parses Twilio Voice webhooks for SDK-user-owned Cognidesk voice handling."; exposesSensitiveData: true; label: "Receive voice webhooks"; providerObjects: readonly [{ kind: "twilioCall"; label: "Twilio Call"; }]; requiresCredential: true; }, { audiences: readonly ["customer-facing"]; capability: "send"; description: "Creates outbound calls through the Twilio helper library."; exposesSensitiveData: true; label: "Create outbound calls"; providerObjects: readonly [{ kind: "twilioCall"; label: "Twilio Call"; }]; requiresCredential: true; sideEffect: true; }, { audiences: readonly ["customer-facing", "internal-support"]; capability: "media"; description: "Builds TwiML for Cognidesk-owned voice websocket media streams while preserving Twilio track constraints."; label: "Media Stream TwiML"; providerObjects: readonly [{ kind: "twilioMediaStream"; label: "Twilio Media Stream"; }]; requiresCredential: false; }, { audiences: readonly ["internal-support"]; capability: "transfer"; changesWorkflow: true; description: "Redirects or ends active Twilio calls through the Call resource."; label: "Redirect or end calls"; providerObjects: readonly [{ kind: "twilioCall"; label: "Twilio Call"; }]; requiresCredential: true; sideEffect: true; }, { audiences: readonly ["internal-support"]; capability: "twilio.webhook-signature"; description: "Validates X-Twilio-Signature for form-encoded Twilio Voice webhooks."; exposesSensitiveData: true; extension: true; label: "Validate Twilio webhooks"; providerObjects: readonly [{ kind: "twilioWebhook"; label: "Twilio Webhook"; }]; requiresCredential: true; }]; category: "voice"; channelAudiences: readonly ["customer-facing", "mixed"]; coverage: { evidence: readonly [{ label: "Twilio Node helper library"; url: "https://www.npmjs.com/package/twilio"; }, { label: "Twilio Programmable Voice API"; url: "https://www.twilio.com/docs/voice/api"; }, { label: "Twilio Call Resource"; url: "https://www.twilio.com/docs/voice/api/call-resource"; }, { label: "Twilio webhook security"; url: "https://www.twilio.com/docs/usage/webhooks/webhooks-security"; }]; notes: readonly ["Implements normalized call-control, TwiML media stream, webhook, readiness, and raw Twilio helper-client access with the official Twilio Node helper library.", "Twilio Voice and Twilio SMS are separate Cognidesk category packages even though they use the same upstream helper library.", "Conferences, queues, recordings, transcription lifecycle, SIP trunks, Voice Insights, and ConversationRelay remain available only through raw Twilio client access or future normalized operations."]; scope: "provider-api-subset"; }; credentialRequirements: readonly [{ description: "Server-side Twilio Account SID used by the helper library."; id: "twilio-account"; label: "Twilio Account SID"; metadata: { scopeKind: "provider-permission"; }; required: true; }, { description: "Twilio Auth Token or API key credentials used for Voice REST calls."; id: "twilio-rest-api-credentials"; label: "Twilio REST API credentials"; metadata: { scopeKind: "provider-permission"; }; required: true; }, { description: "Primary Twilio Auth Token used to validate X-Twilio-Signature webhook requests."; id: "twilio-webhook-auth-token"; label: "Twilio webhook Auth Token"; metadata: { scopeKind: "provider-permission"; }; required: false; }]; directions: readonly ["inbound-only", "outbound-only", "bidirectional"]; id: "voice.twilio"; limitations: readonly ["Live call readiness depends on the SDK user's Twilio account, voice-capable numbers, regions, webhooks, and account permissions."]; maintainers: readonly [{ name: "Cognidesk"; type: "official"; }]; metadata: { implementation: { sdkPackage: "twilio"; strategy: "official-sdk"; verifiedAt: "2026-06-21"; verifiedVersion: "6.0.2"; }; rawClient: { coverage: "upstream-sdk"; export: "getRawClient"; }; sdkClient: { coverage: "deprecated-raw-client-alias"; export: "getSdkClient"; }; }; name: "Twilio Programmable Voice"; operations: readonly [{ alias: "voice.call.answer"; audiences: readonly ["customer-facing"]; capability: "receive"; exposesSensitiveData: true; label: "Receive voice webhook"; providerObject: "twilioCall"; providerOperation: "twilio.validateRequest"; }, { alias: "voice.call.start"; audiences: readonly ["customer-facing"]; capability: "send"; exposesSensitiveData: true; externallyVisible: true; label: "Create outbound call"; providerObject: "twilioCall"; providerOperation: "calls.create"; requiresApproval: true; sideEffect: true; }, { alias: "voice.call.redirect"; audiences: readonly ["internal-support"]; capability: "transfer"; changesWorkflow: true; label: "Redirect call"; providerObject: "twilioCall"; providerOperation: "calls(sid).update"; sideEffect: true; }]; packageName: "@cognidesk/integration-voice-twilio"; privacyNotes: readonly ["Phone numbers, call metadata, webhook parameters, and Media Stream audio metadata are exchanged with Twilio.", "Twilio credentials stay server-side and are never issued to browsers by this package."]; provider: "twilio"; trustLevel: "official"; }
metadata? Record\<string, unknown>
operationAliases ("voice.call.answer" | "voice.call.start" | "voice.call.redirect")[]
operations { voice.call.answer: (input) => Promise\<TwilioVoiceWebhook>; voice.call.redirect: (input) => Promise\<TwilioCallResource>; voice.call.start: (input) => Promise\<TwilioCallResource>; }
operations.voice.call.answer() (input) => Promise\<TwilioVoiceWebhook>
operations.voice.call.redirect() (input) => Promise\<TwilioCallResource>
operations.voice.call.start() (input) => Promise\<TwilioCallResource>
getOperationHandler() (alias) => { voice.call.answer: (input) => Promise\<TwilioVoiceWebhook>; voice.call.redirect: (input) => Promise\<TwilioCallResource>; voice.call.start: (input) => Promise\<TwilioCallResource>; }[Alias]
requireOperationHandler() (alias) => { voice.call.answer: (input) => Promise\<TwilioVoiceWebhook>; voice.call.redirect: (input) => Promise\<TwilioCallResource>; voice.call.start: (input) => Promise\<TwilioCallResource>; }[Alias]
run() ( alias, input, context?) => Promise\<Awaited\<ReturnType\<{ voice.call.answer: (input) => Promise\<TwilioVoiceWebhook>; voice.call.redirect: (input) => Promise\<TwilioCallResource>; voice.call.start: (input) => Promise\<TwilioCallResource>; }[Alias]>>>

Functions

createTwilioMediaStreamTwiML()

function createTwilioMediaStreamTwiML(options): string;

Parameters

Parameter Type
options TwilioMediaStreamTwiMLOptions

Returns

string


createTwilioVoiceClient()

function createTwilioVoiceClient(options): TwilioVoiceClient;

Parameters

Parameter Type
options TwilioVoiceClientOptions

Returns

TwilioVoiceClient


createTwilioVoiceIntegration()

function createTwilioVoiceIntegration(options): {
  bindingReport: OperationBindingReport;
  client: TwilioVoiceClient;
  getRawClient: () => Promise<TwilioVoiceRawClient>;
  getSdkClient: () => Promise<TwilioVoiceRawClient>;
  manifest: {
     capabilities: {
        audiences?: ("customer-facing" | "internal-support" | "mixed")[];
        capability: string;
        changesWorkflow?: boolean;
        description?: string;
        exposesSensitiveData?: boolean;
        extension?: boolean;
        label?: string;
        metadata?: Record<string, unknown>;
        providerObjects?: {
           description?: string;
           kind: string;
           label?: string;
           metadata?: Record<string, unknown>;
           schemaName?: string;
        }[];
        requiresCredential?: boolean;
        sideEffect?: boolean;
     }[];
     category: string;
     channelAudiences: ("customer-facing" | "internal-support" | "mixed")[];
     coverage: {
        evidence: {
           label: string;
           url?: string;
        }[];
        notes: string[];
        scope:   | "support-workflow-subset"
           | "provider-api-subset"
           | "connector-required"
           | "local-protocol"
           | "full-provider-api";
     };
     credentialRequirements: {
        description?: string;
        id: string;
        label?: string;
        metadata?: Record<string, unknown>;
        required: boolean;
        scopes: string[];
     }[];
     directions: (
        | "receive-only"
        | "send-only"
        | "inbound-only"
        | "outbound-only"
       | "bidirectional")[];
     id: string;
     limitations: string[];
     maintainers: {
        name: string;
        type: "community" | "official" | "unknown" | "partner";
        url?: string;
     }[];
     metadata?: Record<string, unknown>;
     name: string;
     operations: {
        alias: string;
        audience?: "customer-facing" | "internal-support" | "mixed";
        audiences?: ("customer-facing" | "internal-support" | "mixed")[];
        capability: string;
        changesWorkflow?: boolean;
        description?: string;
        exposesSensitiveData?: boolean;
        extension: boolean;
        externallyVisible?: boolean;
        inputSchema?: unknown;
        inputSchemaName?: string;
        inputSchemaRef?: string;
        label?: string;
        metadata?: Record<string, unknown>;
        outputSchema?: unknown;
        outputSchemaName?: string;
        outputSchemaRef?: string;
        providerObject?: string;
        providerObjects?: {
           description?: string;
           kind: string;
           label?: string;
           metadata?: Record<string, unknown>;
           schemaName?: string;
        }[];
        providerOperation?: string;
        requiredPolicyIds?: string[];
        requiresApproval?: boolean;
        requiresCredential?: boolean;
        sideEffect?: boolean;
     }[];
     packageName: string;
     privacyNotes: string[];
     provider: string;
     trustLevel: "community" | "official" | "verified" | "experimental";
   } & {
     capabilities: readonly [{
        audiences: readonly ["customer-facing"];
        capability: "receive";
        description: "Accepts and parses Twilio Voice webhooks for SDK-user-owned Cognidesk voice handling.";
        exposesSensitiveData: true;
        label: "Receive voice webhooks";
        providerObjects: readonly [{
           kind: "twilioCall";
           label: "Twilio Call";
        }];
        requiresCredential: true;
      }, {
        audiences: readonly ["customer-facing"];
        capability: "send";
        description: "Creates outbound calls through the Twilio helper library.";
        exposesSensitiveData: true;
        label: "Create outbound calls";
        providerObjects: readonly [{
           kind: "twilioCall";
           label: "Twilio Call";
        }];
        requiresCredential: true;
        sideEffect: true;
      }, {
        audiences: readonly ["customer-facing", "internal-support"];
        capability: "media";
        description: "Builds TwiML for Cognidesk-owned voice websocket media streams while preserving Twilio track constraints.";
        label: "Media Stream TwiML";
        providerObjects: readonly [{
           kind: "twilioMediaStream";
           label: "Twilio Media Stream";
        }];
        requiresCredential: false;
      }, {
        audiences: readonly ["internal-support"];
        capability: "transfer";
        changesWorkflow: true;
        description: "Redirects or ends active Twilio calls through the Call resource.";
        label: "Redirect or end calls";
        providerObjects: readonly [{
           kind: "twilioCall";
           label: "Twilio Call";
        }];
        requiresCredential: true;
        sideEffect: true;
      }, {
        audiences: readonly ["internal-support"];
        capability: "twilio.webhook-signature";
        description: "Validates X-Twilio-Signature for form-encoded Twilio Voice webhooks.";
        exposesSensitiveData: true;
        extension: true;
        label: "Validate Twilio webhooks";
        providerObjects: readonly [{
           kind: "twilioWebhook";
           label: "Twilio Webhook";
        }];
        requiresCredential: true;
     }];
     category: "voice";
     channelAudiences: readonly ["customer-facing", "mixed"];
     coverage: {
        evidence: readonly [{
           label: "Twilio Node helper library";
           url: "https://www.npmjs.com/package/twilio";
         }, {
           label: "Twilio Programmable Voice API";
           url: "https://www.twilio.com/docs/voice/api";
         }, {
           label: "Twilio Call Resource";
           url: "https://www.twilio.com/docs/voice/api/call-resource";
         }, {
           label: "Twilio webhook security";
           url: "https://www.twilio.com/docs/usage/webhooks/webhooks-security";
        }];
        notes: readonly ["Implements normalized call-control, TwiML media stream, webhook, readiness, and raw Twilio helper-client access with the official Twilio Node helper library.", "Twilio Voice and Twilio SMS are separate Cognidesk category packages even though they use the same upstream helper library.", "Conferences, queues, recordings, transcription lifecycle, SIP trunks, Voice Insights, and ConversationRelay remain available only through raw Twilio client access or future normalized operations."];
        scope: "provider-api-subset";
     };
     credentialRequirements: readonly [{
        description: "Server-side Twilio Account SID used by the helper library.";
        id: "twilio-account";
        label: "Twilio Account SID";
        metadata: {
           scopeKind: "provider-permission";
        };
        required: true;
      }, {
        description: "Twilio Auth Token or API key credentials used for Voice REST calls.";
        id: "twilio-rest-api-credentials";
        label: "Twilio REST API credentials";
        metadata: {
           scopeKind: "provider-permission";
        };
        required: true;
      }, {
        description: "Primary Twilio Auth Token used to validate X-Twilio-Signature webhook requests.";
        id: "twilio-webhook-auth-token";
        label: "Twilio webhook Auth Token";
        metadata: {
           scopeKind: "provider-permission";
        };
        required: false;
     }];
     directions: readonly ["inbound-only", "outbound-only", "bidirectional"];
     id: "voice.twilio";
     limitations: readonly ["Live call readiness depends on the SDK user's Twilio account, voice-capable numbers, regions, webhooks, and account permissions."];
     maintainers: readonly [{
        name: "Cognidesk";
        type: "official";
     }];
     metadata: {
        implementation: {
           sdkPackage: "twilio";
           strategy: "official-sdk";
           verifiedAt: "2026-06-21";
           verifiedVersion: "6.0.2";
        };
        rawClient: {
           coverage: "upstream-sdk";
           export: "getRawClient";
        };
        sdkClient: {
           coverage: "deprecated-raw-client-alias";
           export: "getSdkClient";
        };
     };
     name: "Twilio Programmable Voice";
     operations: readonly [{
        alias: "voice.call.answer";
        audiences: readonly ["customer-facing"];
        capability: "receive";
        exposesSensitiveData: true;
        label: "Receive voice webhook";
        providerObject: "twilioCall";
        providerOperation: "twilio.validateRequest";
      }, {
        alias: "voice.call.start";
        audiences: readonly ["customer-facing"];
        capability: "send";
        exposesSensitiveData: true;
        externallyVisible: true;
        label: "Create outbound call";
        providerObject: "twilioCall";
        providerOperation: "calls.create";
        requiresApproval: true;
        sideEffect: true;
      }, {
        alias: "voice.call.redirect";
        audiences: readonly ["internal-support"];
        capability: "transfer";
        changesWorkflow: true;
        label: "Redirect call";
        providerObject: "twilioCall";
        providerOperation: "calls(sid).update";
        sideEffect: true;
     }];
     packageName: "@cognidesk/integration-voice-twilio";
     privacyNotes: readonly ["Phone numbers, call metadata, webhook parameters, and Media Stream audio metadata are exchanged with Twilio.", "Twilio credentials stay server-side and are never issued to browsers by this package."];
     provider: "twilio";
     trustLevel: "official";
  };
  metadata?: Record<string, unknown>;
  operationAliases: ("voice.call.start" | "voice.call.answer" | "voice.call.redirect")[];
  operations: {
     voice.call.answer: (input) => Promise<TwilioVoiceWebhook>;
     voice.call.redirect: (input) => Promise<TwilioCallResource>;
     voice.call.start: (input) => Promise<TwilioCallResource>;
  };
  getOperationHandler: {
     voice.call.answer: (input) => Promise<TwilioVoiceWebhook>;
     voice.call.redirect: (input) => Promise<TwilioCallResource>;
     voice.call.start: (input) => Promise<TwilioCallResource>;
  }[Alias];
  requireOperationHandler: {
     voice.call.answer: (input) => Promise<TwilioVoiceWebhook>;
     voice.call.redirect: (input) => Promise<TwilioCallResource>;
     voice.call.start: (input) => Promise<TwilioCallResource>;
  }[Alias];
  run: Promise<Awaited<ReturnType<{
     voice.call.answer: (input) => Promise<TwilioVoiceWebhook>;
     voice.call.redirect: (input) => Promise<TwilioCallResource>;
     voice.call.start: (input) => Promise<TwilioCallResource>;
  }[Alias]>>>;
};

Parameters

Parameter Type
options TwilioVoiceIntegrationOptions

Returns

{
  bindingReport: OperationBindingReport;
  client: TwilioVoiceClient;
  getRawClient: () => Promise<TwilioVoiceRawClient>;
  getSdkClient: () => Promise<TwilioVoiceRawClient>;
  manifest: {
     capabilities: {
        audiences?: ("customer-facing" | "internal-support" | "mixed")[];
        capability: string;
        changesWorkflow?: boolean;
        description?: string;
        exposesSensitiveData?: boolean;
        extension?: boolean;
        label?: string;
        metadata?: Record<string, unknown>;
        providerObjects?: {
           description?: string;
           kind: string;
           label?: string;
           metadata?: Record<string, unknown>;
           schemaName?: string;
        }[];
        requiresCredential?: boolean;
        sideEffect?: boolean;
     }[];
     category: string;
     channelAudiences: ("customer-facing" | "internal-support" | "mixed")[];
     coverage: {
        evidence: {
           label: string;
           url?: string;
        }[];
        notes: string[];
        scope:   | "support-workflow-subset"
           | "provider-api-subset"
           | "connector-required"
           | "local-protocol"
           | "full-provider-api";
     };
     credentialRequirements: {
        description?: string;
        id: string;
        label?: string;
        metadata?: Record<string, unknown>;
        required: boolean;
        scopes: string[];
     }[];
     directions: (
        | "receive-only"
        | "send-only"
        | "inbound-only"
        | "outbound-only"
       | "bidirectional")[];
     id: string;
     limitations: string[];
     maintainers: {
        name: string;
        type: "community" | "official" | "unknown" | "partner";
        url?: string;
     }[];
     metadata?: Record<string, unknown>;
     name: string;
     operations: {
        alias: string;
        audience?: "customer-facing" | "internal-support" | "mixed";
        audiences?: ("customer-facing" | "internal-support" | "mixed")[];
        capability: string;
        changesWorkflow?: boolean;
        description?: string;
        exposesSensitiveData?: boolean;
        extension: boolean;
        externallyVisible?: boolean;
        inputSchema?: unknown;
        inputSchemaName?: string;
        inputSchemaRef?: string;
        label?: string;
        metadata?: Record<string, unknown>;
        outputSchema?: unknown;
        outputSchemaName?: string;
        outputSchemaRef?: string;
        providerObject?: string;
        providerObjects?: {
           description?: string;
           kind: string;
           label?: string;
           metadata?: Record<string, unknown>;
           schemaName?: string;
        }[];
        providerOperation?: string;
        requiredPolicyIds?: string[];
        requiresApproval?: boolean;
        requiresCredential?: boolean;
        sideEffect?: boolean;
     }[];
     packageName: string;
     privacyNotes: string[];
     provider: string;
     trustLevel: "community" | "official" | "verified" | "experimental";
   } & {
     capabilities: readonly [{
        audiences: readonly ["customer-facing"];
        capability: "receive";
        description: "Accepts and parses Twilio Voice webhooks for SDK-user-owned Cognidesk voice handling.";
        exposesSensitiveData: true;
        label: "Receive voice webhooks";
        providerObjects: readonly [{
           kind: "twilioCall";
           label: "Twilio Call";
        }];
        requiresCredential: true;
      }, {
        audiences: readonly ["customer-facing"];
        capability: "send";
        description: "Creates outbound calls through the Twilio helper library.";
        exposesSensitiveData: true;
        label: "Create outbound calls";
        providerObjects: readonly [{
           kind: "twilioCall";
           label: "Twilio Call";
        }];
        requiresCredential: true;
        sideEffect: true;
      }, {
        audiences: readonly ["customer-facing", "internal-support"];
        capability: "media";
        description: "Builds TwiML for Cognidesk-owned voice websocket media streams while preserving Twilio track constraints.";
        label: "Media Stream TwiML";
        providerObjects: readonly [{
           kind: "twilioMediaStream";
           label: "Twilio Media Stream";
        }];
        requiresCredential: false;
      }, {
        audiences: readonly ["internal-support"];
        capability: "transfer";
        changesWorkflow: true;
        description: "Redirects or ends active Twilio calls through the Call resource.";
        label: "Redirect or end calls";
        providerObjects: readonly [{
           kind: "twilioCall";
           label: "Twilio Call";
        }];
        requiresCredential: true;
        sideEffect: true;
      }, {
        audiences: readonly ["internal-support"];
        capability: "twilio.webhook-signature";
        description: "Validates X-Twilio-Signature for form-encoded Twilio Voice webhooks.";
        exposesSensitiveData: true;
        extension: true;
        label: "Validate Twilio webhooks";
        providerObjects: readonly [{
           kind: "twilioWebhook";
           label: "Twilio Webhook";
        }];
        requiresCredential: true;
     }];
     category: "voice";
     channelAudiences: readonly ["customer-facing", "mixed"];
     coverage: {
        evidence: readonly [{
           label: "Twilio Node helper library";
           url: "https://www.npmjs.com/package/twilio";
         }, {
           label: "Twilio Programmable Voice API";
           url: "https://www.twilio.com/docs/voice/api";
         }, {
           label: "Twilio Call Resource";
           url: "https://www.twilio.com/docs/voice/api/call-resource";
         }, {
           label: "Twilio webhook security";
           url: "https://www.twilio.com/docs/usage/webhooks/webhooks-security";
        }];
        notes: readonly ["Implements normalized call-control, TwiML media stream, webhook, readiness, and raw Twilio helper-client access with the official Twilio Node helper library.", "Twilio Voice and Twilio SMS are separate Cognidesk category packages even though they use the same upstream helper library.", "Conferences, queues, recordings, transcription lifecycle, SIP trunks, Voice Insights, and ConversationRelay remain available only through raw Twilio client access or future normalized operations."];
        scope: "provider-api-subset";
     };
     credentialRequirements: readonly [{
        description: "Server-side Twilio Account SID used by the helper library.";
        id: "twilio-account";
        label: "Twilio Account SID";
        metadata: {
           scopeKind: "provider-permission";
        };
        required: true;
      }, {
        description: "Twilio Auth Token or API key credentials used for Voice REST calls.";
        id: "twilio-rest-api-credentials";
        label: "Twilio REST API credentials";
        metadata: {
           scopeKind: "provider-permission";
        };
        required: true;
      }, {
        description: "Primary Twilio Auth Token used to validate X-Twilio-Signature webhook requests.";
        id: "twilio-webhook-auth-token";
        label: "Twilio webhook Auth Token";
        metadata: {
           scopeKind: "provider-permission";
        };
        required: false;
     }];
     directions: readonly ["inbound-only", "outbound-only", "bidirectional"];
     id: "voice.twilio";
     limitations: readonly ["Live call readiness depends on the SDK user's Twilio account, voice-capable numbers, regions, webhooks, and account permissions."];
     maintainers: readonly [{
        name: "Cognidesk";
        type: "official";
     }];
     metadata: {
        implementation: {
           sdkPackage: "twilio";
           strategy: "official-sdk";
           verifiedAt: "2026-06-21";
           verifiedVersion: "6.0.2";
        };
        rawClient: {
           coverage: "upstream-sdk";
           export: "getRawClient";
        };
        sdkClient: {
           coverage: "deprecated-raw-client-alias";
           export: "getSdkClient";
        };
     };
     name: "Twilio Programmable Voice";
     operations: readonly [{
        alias: "voice.call.answer";
        audiences: readonly ["customer-facing"];
        capability: "receive";
        exposesSensitiveData: true;
        label: "Receive voice webhook";
        providerObject: "twilioCall";
        providerOperation: "twilio.validateRequest";
      }, {
        alias: "voice.call.start";
        audiences: readonly ["customer-facing"];
        capability: "send";
        exposesSensitiveData: true;
        externallyVisible: true;
        label: "Create outbound call";
        providerObject: "twilioCall";
        providerOperation: "calls.create";
        requiresApproval: true;
        sideEffect: true;
      }, {
        alias: "voice.call.redirect";
        audiences: readonly ["internal-support"];
        capability: "transfer";
        changesWorkflow: true;
        label: "Redirect call";
        providerObject: "twilioCall";
        providerOperation: "calls(sid).update";
        sideEffect: true;
     }];
     packageName: "@cognidesk/integration-voice-twilio";
     privacyNotes: readonly ["Phone numbers, call metadata, webhook parameters, and Media Stream audio metadata are exchanged with Twilio.", "Twilio credentials stay server-side and are never issued to browsers by this package."];
     provider: "twilio";
     trustLevel: "official";
  };
  metadata?: Record<string, unknown>;
  operationAliases: ("voice.call.start" | "voice.call.answer" | "voice.call.redirect")[];
  operations: {
     voice.call.answer: (input) => Promise<TwilioVoiceWebhook>;
     voice.call.redirect: (input) => Promise<TwilioCallResource>;
     voice.call.start: (input) => Promise<TwilioCallResource>;
  };
  getOperationHandler: {
     voice.call.answer: (input) => Promise<TwilioVoiceWebhook>;
     voice.call.redirect: (input) => Promise<TwilioCallResource>;
     voice.call.start: (input) => Promise<TwilioCallResource>;
  }[Alias];
  requireOperationHandler: {
     voice.call.answer: (input) => Promise<TwilioVoiceWebhook>;
     voice.call.redirect: (input) => Promise<TwilioCallResource>;
     voice.call.start: (input) => Promise<TwilioCallResource>;
  }[Alias];
  run: Promise<Awaited<ReturnType<{
     voice.call.answer: (input) => Promise<TwilioVoiceWebhook>;
     voice.call.redirect: (input) => Promise<TwilioCallResource>;
     voice.call.start: (input) => Promise<TwilioCallResource>;
  }[Alias]>>>;
}
Name Type
bindingReport OperationBindingReport
client TwilioVoiceClient
getRawClient() () => Promise\<TwilioVoiceRawClient>
getSdkClient() () => Promise\<TwilioVoiceRawClient>
manifest { capabilities: { audiences?: ("customer-facing" | "internal-support" | "mixed")[]; capability: string; changesWorkflow?: boolean; description?: string; exposesSensitiveData?: boolean; extension?: boolean; label?: string; metadata?: Record\<string, unknown>; providerObjects?: { description?: string; kind: string; label?: string; metadata?: Record\<string, unknown>; schemaName?: string; }[]; requiresCredential?: boolean; sideEffect?: boolean; }[]; category: string; channelAudiences: ("customer-facing" | "internal-support" | "mixed")[]; coverage: { evidence: { label: string; url?: string; }[]; notes: string[]; scope: | "support-workflow-subset" | "provider-api-subset" | "connector-required" | "local-protocol" | "full-provider-api"; }; credentialRequirements: { description?: string; id: string; label?: string; metadata?: Record\<string, unknown>; required: boolean; scopes: string[]; }[]; directions: ( | "receive-only" | "send-only" | "inbound-only" | "outbound-only" | "bidirectional")[]; id: string; limitations: string[]; maintainers: { name: string; type: "community" | "official" | "unknown" | "partner"; url?: string; }[]; metadata?: Record\<string, unknown>; name: string; operations: { alias: string; audience?: "customer-facing" | "internal-support" | "mixed"; audiences?: ("customer-facing" | "internal-support" | "mixed")[]; capability: string; changesWorkflow?: boolean; description?: string; exposesSensitiveData?: boolean; extension: boolean; externallyVisible?: boolean; inputSchema?: unknown; inputSchemaName?: string; inputSchemaRef?: string; label?: string; metadata?: Record\<string, unknown>; outputSchema?: unknown; outputSchemaName?: string; outputSchemaRef?: string; providerObject?: string; providerObjects?: { description?: string; kind: string; label?: string; metadata?: Record\<string, unknown>; schemaName?: string; }[]; providerOperation?: string; requiredPolicyIds?: string[]; requiresApproval?: boolean; requiresCredential?: boolean; sideEffect?: boolean; }[]; packageName: string; privacyNotes: string[]; provider: string; trustLevel: "community" | "official" | "verified" | "experimental"; } & { capabilities: readonly [{ audiences: readonly ["customer-facing"]; capability: "receive"; description: "Accepts and parses Twilio Voice webhooks for SDK-user-owned Cognidesk voice handling."; exposesSensitiveData: true; label: "Receive voice webhooks"; providerObjects: readonly [{ kind: "twilioCall"; label: "Twilio Call"; }]; requiresCredential: true; }, { audiences: readonly ["customer-facing"]; capability: "send"; description: "Creates outbound calls through the Twilio helper library."; exposesSensitiveData: true; label: "Create outbound calls"; providerObjects: readonly [{ kind: "twilioCall"; label: "Twilio Call"; }]; requiresCredential: true; sideEffect: true; }, { audiences: readonly ["customer-facing", "internal-support"]; capability: "media"; description: "Builds TwiML for Cognidesk-owned voice websocket media streams while preserving Twilio track constraints."; label: "Media Stream TwiML"; providerObjects: readonly [{ kind: "twilioMediaStream"; label: "Twilio Media Stream"; }]; requiresCredential: false; }, { audiences: readonly ["internal-support"]; capability: "transfer"; changesWorkflow: true; description: "Redirects or ends active Twilio calls through the Call resource."; label: "Redirect or end calls"; providerObjects: readonly [{ kind: "twilioCall"; label: "Twilio Call"; }]; requiresCredential: true; sideEffect: true; }, { audiences: readonly ["internal-support"]; capability: "twilio.webhook-signature"; description: "Validates X-Twilio-Signature for form-encoded Twilio Voice webhooks."; exposesSensitiveData: true; extension: true; label: "Validate Twilio webhooks"; providerObjects: readonly [{ kind: "twilioWebhook"; label: "Twilio Webhook"; }]; requiresCredential: true; }]; category: "voice"; channelAudiences: readonly ["customer-facing", "mixed"]; coverage: { evidence: readonly [{ label: "Twilio Node helper library"; url: "https://www.npmjs.com/package/twilio"; }, { label: "Twilio Programmable Voice API"; url: "https://www.twilio.com/docs/voice/api"; }, { label: "Twilio Call Resource"; url: "https://www.twilio.com/docs/voice/api/call-resource"; }, { label: "Twilio webhook security"; url: "https://www.twilio.com/docs/usage/webhooks/webhooks-security"; }]; notes: readonly ["Implements normalized call-control, TwiML media stream, webhook, readiness, and raw Twilio helper-client access with the official Twilio Node helper library.", "Twilio Voice and Twilio SMS are separate Cognidesk category packages even though they use the same upstream helper library.", "Conferences, queues, recordings, transcription lifecycle, SIP trunks, Voice Insights, and ConversationRelay remain available only through raw Twilio client access or future normalized operations."]; scope: "provider-api-subset"; }; credentialRequirements: readonly [{ description: "Server-side Twilio Account SID used by the helper library."; id: "twilio-account"; label: "Twilio Account SID"; metadata: { scopeKind: "provider-permission"; }; required: true; }, { description: "Twilio Auth Token or API key credentials used for Voice REST calls."; id: "twilio-rest-api-credentials"; label: "Twilio REST API credentials"; metadata: { scopeKind: "provider-permission"; }; required: true; }, { description: "Primary Twilio Auth Token used to validate X-Twilio-Signature webhook requests."; id: "twilio-webhook-auth-token"; label: "Twilio webhook Auth Token"; metadata: { scopeKind: "provider-permission"; }; required: false; }]; directions: readonly ["inbound-only", "outbound-only", "bidirectional"]; id: "voice.twilio"; limitations: readonly ["Live call readiness depends on the SDK user's Twilio account, voice-capable numbers, regions, webhooks, and account permissions."]; maintainers: readonly [{ name: "Cognidesk"; type: "official"; }]; metadata: { implementation: { sdkPackage: "twilio"; strategy: "official-sdk"; verifiedAt: "2026-06-21"; verifiedVersion: "6.0.2"; }; rawClient: { coverage: "upstream-sdk"; export: "getRawClient"; }; sdkClient: { coverage: "deprecated-raw-client-alias"; export: "getSdkClient"; }; }; name: "Twilio Programmable Voice"; operations: readonly [{ alias: "voice.call.answer"; audiences: readonly ["customer-facing"]; capability: "receive"; exposesSensitiveData: true; label: "Receive voice webhook"; providerObject: "twilioCall"; providerOperation: "twilio.validateRequest"; }, { alias: "voice.call.start"; audiences: readonly ["customer-facing"]; capability: "send"; exposesSensitiveData: true; externallyVisible: true; label: "Create outbound call"; providerObject: "twilioCall"; providerOperation: "calls.create"; requiresApproval: true; sideEffect: true; }, { alias: "voice.call.redirect"; audiences: readonly ["internal-support"]; capability: "transfer"; changesWorkflow: true; label: "Redirect call"; providerObject: "twilioCall"; providerOperation: "calls(sid).update"; sideEffect: true; }]; packageName: "@cognidesk/integration-voice-twilio"; privacyNotes: readonly ["Phone numbers, call metadata, webhook parameters, and Media Stream audio metadata are exchanged with Twilio.", "Twilio credentials stay server-side and are never issued to browsers by this package."]; provider: "twilio"; trustLevel: "official"; }
metadata? Record\<string, unknown>
operationAliases ("voice.call.start" | "voice.call.answer" | "voice.call.redirect")[]
operations { voice.call.answer: (input) => Promise\<TwilioVoiceWebhook>; voice.call.redirect: (input) => Promise\<TwilioCallResource>; voice.call.start: (input) => Promise\<TwilioCallResource>; }
operations.voice.call.answer() (input) => Promise\<TwilioVoiceWebhook>
operations.voice.call.redirect() (input) => Promise\<TwilioCallResource>
operations.voice.call.start() (input) => Promise\<TwilioCallResource>
getOperationHandler() (alias) => { voice.call.answer: (input) => Promise\<TwilioVoiceWebhook>; voice.call.redirect: (input) => Promise\<TwilioCallResource>; voice.call.start: (input) => Promise\<TwilioCallResource>; }[Alias]
requireOperationHandler() (alias) => { voice.call.answer: (input) => Promise\<TwilioVoiceWebhook>; voice.call.redirect: (input) => Promise\<TwilioCallResource>; voice.call.start: (input) => Promise\<TwilioCallResource>; }[Alias]
run() ( alias, input, context?) => Promise\<Awaited\<ReturnType\<{ voice.call.answer: (input) => Promise\<TwilioVoiceWebhook>; voice.call.redirect: (input) => Promise\<TwilioCallResource>; voice.call.start: (input) => Promise\<TwilioCallResource>; }[Alias]>>>

createTwilioVoiceOperationHandlers()

function createTwilioVoiceOperationHandlers(options): {
  voice.call.answer: (input) => Promise<TwilioVoiceWebhook>;
  voice.call.redirect: (input) => Promise<TwilioCallResource>;
  voice.call.start: (input) => Promise<TwilioCallResource>;
};

Parameters

Parameter Type
options TwilioVoiceIntegrationOptions

Returns

{
  voice.call.answer: (input) => Promise<TwilioVoiceWebhook>;
  voice.call.redirect: (input) => Promise<TwilioCallResource>;
  voice.call.start: (input) => Promise<TwilioCallResource>;
}
Name Type
voice.call.answer() (input) => Promise\<TwilioVoiceWebhook>
voice.call.redirect() (input) => Promise\<TwilioCallResource>
voice.call.start() (input) => Promise\<TwilioCallResource>

parseTwilioVoiceWebhook()

function parseTwilioVoiceWebhook(request, options?): Promise<TwilioVoiceWebhook>;

Parameters

Parameter Type
request Request
options? ParseTwilioVoiceWebhookOptions

Returns

Promise\<TwilioVoiceWebhook>


twilioVoiceCredentialStatuses()

function twilioVoiceCredentialStatuses(input): {
  expiresAt?: string;
  message?: string;
  providerPackageId?: string;
  requirementId: string;
  scopes?: string[];
  state:   | "required"
     | "configured"
     | "permission-blocked"
     | "not-required"
     | "missing"
     | "expired"
     | "insufficient-scope"
     | "unavailable";
}[];

Parameters

Parameter Type
input { accountSid?: string; apiKeySecret?: string; apiKeySid?: string; authToken?: string; webhookAuthToken?: string; }
input.accountSid? string
input.apiKeySecret? string
input.apiKeySid? string
input.authToken? string
input.webhookAuthToken? string

Returns

{ expiresAt?: string; message?: string; providerPackageId?: string; requirementId: string; scopes?: string[]; state: | "required" | "configured" | "permission-blocked" | "not-required" | "missing" | "expired" | "insufficient-scope" | "unavailable"; }[]


validateTwilioRequestSignature()

function validateTwilioRequestSignature(input): boolean;

Parameters

Parameter Type
input { authToken: string; params: Record\<string, string>; signature: string; url: string; }
input.authToken string
input.params Record\<string, string>
input.signature string
input.url string

Returns

boolean

References

twilioVoiceProviderManifest

Re-exports twilioVoiceProviderManifest