@sinch/functions-runtime
v0.4.8
Published
Development runtime for Sinch Functions - serverless voice applications
Downloads
1,285
Readme
@sinch/functions-runtime
Development runtime for Sinch Functions - build serverless communication workflows with ease.
Getting Started
The easiest way to get started is using the Sinch CLI:
# Install the CLI
npm install -g @sinch/cli
# Create a new function (interactive)
sinch functions initThe interactive prompt will guide you through:
- Selecting a runtime (Node.js, C#, etc.)
- Choosing a template (simple-voice-ivr recommended for first project)
- Setting up your project
Then start the local development server:
sinch functions devYour function is now running locally with hot reload!
Deploy to Production
When you're ready to deploy:
sinch functions deployYour function will be built and deployed to the Sinch Functions platform.
Features
SVAML Builders
Build voice responses with a fluent API:
import { IceSvamlBuilder, AceSvamlBuilder, PieSvamlBuilder } from '@sinch/functions-runtime';
// ICE (Incoming Call Event) - handle incoming calls
const iceResponse = new IceSvamlBuilder()
.say('Hello, welcome!')
.connectPstn('+15551234567', {
cli: '+15559999999',
enableAce: true,
enableDice: true,
})
.build();
// ACE (Answered Call Event) - handle answered outbound calls
const aceResponse = new AceSvamlBuilder().say('The call has been answered.').continue().build();
// PIE (Prompt Input Event) - handle user input
const pieResponse = new PieSvamlBuilder()
.say('You pressed ' + selection)
.hangup()
.build();Menu Builder
Create IVR menus with validation:
import { MenuBuilder, MenuTemplates } from '@sinch/functions-runtime';
// Use pre-built templates
const businessMenu = MenuTemplates.business('Acme Corp');
const yesNoMenu = MenuTemplates.yesNo('Do you want to continue?');
// Or build custom menus
const customMenu = new MenuBuilder()
.prompt('Press 1 for English, 2 for Spanish')
.option('1', 'menu(english)')
.option('2', 'menu(spanish)')
.addSubmenu('english')
.prompt('Press 1 for sales, 2 for support')
.option('1', 'return(en-sales)')
.option('2', 'return(en-support)')
.build();Cache
Store and retrieve data across function invocations:
export async function ice(context, event) {
const cache = context.cache;
// Store data
await cache.set('call-count', 1, 3600); // TTL in seconds
// Retrieve data
const count = await cache.get('call-count');
}Configuration
Access environment variables and secrets:
import { createConfig } from '@sinch/functions-runtime';
export async function ice(context, event) {
const config = createConfig(context);
// Get variables
const companyName = config.getVariable('COMPANY_NAME', 'Default');
// Get secrets (encrypted at rest)
const apiKey = config.getSecret('API_KEY');
}Voice Callbacks
| Callback | Description | Returns |
| -------- | ------------------------------------------------------- | ------- |
| ice | Incoming Call Event - first callback for incoming calls | SVAML |
| ace | Answered Call Event - when outbound call is answered | SVAML |
| pie | Prompt Input Event - user input (DTMF/voice) | SVAML |
| dice | Disconnected Call Event - call ended | None |
| notify | Notification events | None |
TypeScript Support
Full TypeScript support with comprehensive types:
import type { FunctionContext, IceCallbackData, SvamletResponse } from '@sinch/functions-runtime';
export async function ice(
context: FunctionContext,
event: IceCallbackData
): Promise<SvamletResponse> {
// Full type safety and IntelliSense!
}Documentation
License
MIT
