npm package: @sinch/functions-runtime
Description: Development runtime for Sinch Functions - serverless voice applications
Author: Sinch
Latest version: 0.4.12

# @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:

```bash
# Install the CLI
npm install -g @sinch/cli

# Create a new function (interactive)
sinch functions init
```

The interactive prompt will guide you through:

1. Selecting a runtime (Node.js, C#, etc.)
2. Choosing a template (simple-voice-ivr recommended for first project)
3. Setting up your project

Then start the local development server:

```bash
sinch functions dev
```

Your function is now running locally with hot reload!

## Deploy to Production

When you're ready to deploy:

```bash
sinch functions deploy
```

Your function will be built and deployed to the Sinch Functions platform.

## Features

### SVAML Builders

Build voice responses with a fluent API:

```typescript
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:

```typescript
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:

```typescript
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:

```typescript
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:

```typescript
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

- [Sinch Functions Documentation](https://developers.sinch.com/docs/functions)
- [Sinch Voice API](https://developers.sinch.com/docs/voice)
- [SVAML Reference](https://developers.sinch.com/docs/voice/api-reference/svaml)

## License

MIT