Handle user input with ASR

A code snippet that shows how to handle a user input with Automatic Speech Recognition (ASR). The user says their input at the prompt and their input is acknowledged via a speech-to-text message.

Prerequisites

Create an Application

You can install the CLI with the following command:

npm install --location=global @vonage/cli

Before you can start working with your apps, you need to register your configuration: API Key and Secret. You can find them via the Dashboard, in API Settings. Once set, initialize your account using the following command:

vonage config:set --apiKey=XXXXXX --apiSecret=XXXXXX

As soon as the CLI is both installed and configured, use it to create a Vonage application using the following command:

vonage apps:create

The command starts an interactive prompt to ask for the application name, and the capabilities you want to enable - make sure to enable Voice.

When finished, it creates the vonage_app.json file in the current directory containing the Application ID, Application name and private key. It also creates a second file with the private key name app_name.key.

Rent a Number

You can rent a number using the Vonage CLI. The following command purchases an available number in the United States:

vonage numbers:search USvonage numbers:buy 15555555555 US

Specify an alternative two-character country code to purchase a number in another country.

Now that you have both an application and a number, you need to link them together.

Replace YOUR_VONAGE_NUMBER with the number you bought and APPLICATION_ID with your application id, then run the following command:

vonage apps:link APPLICATION_ID --number=YOUR_VONAGE_NUMBER

Example

Prerequisites

npm install express body-parser

Write the code

Add the following to asr.js:

const Express = require('express');
const bodyParser = require('body-parser');

const app = new Express();
app.use(bodyParser.json());

const onInboundCall = (request, response) => {
  const ncco = [
    {
      action: 'talk',
      text: 'Please say something',
    },
    {
      action: 'input',
      type: ['speech'],
      eventUrl: [`${request.protocol}://${request.get('host')}/webhooks/asr`],
      speech: {
        endOnSilence: 1,
        language: 'en-US',
        uuid: [request.query.uuid],
      },
    },
  ];

  response.json(ncco);
};

const onInput = (request, response) => {
  const speech = request.body?.speech?.results[0]?.text;

  const ncco = [
    {
      action: 'talk',
      text: `You said ${speech}`,
    },
  ];

  response.json(ncco);
};

app
  .get('/webhooks/answer', onInboundCall)
  .post('/webhooks/asr', onInput);

app.listen(3000);

View full source

Run your code

Save this file to your machine and run it:

node asr.js

Try it out

Call your Vonage Number. When the call is answered you will be asked to say a message. When you are finished, you will then hear your message repeated back to you via speech-to-text.

Further Reading