Uso di Twilio per le funzionalità voce, VoIP e SMS in AzureUsing Twilio for Voice, VoIP, and SMS Messaging in Azure

In questa guida viene illustrato come sviluppare app che comunicano con Twilio e Node.js in Azure.This guide demonstrates how to build apps that communicate with Twilio and node.js on Azure.

Informazioni su TwilioWhat is Twilio?

Twilio è una piattaforma API che consente agli sviluppatori di abilitare facilmente l'invio e la ricezione di chiamate telefoniche o SMS, nonché di incorporare funzionalità VoIP all'interno di applicazioni mobili native e basate su browser.Twilio is an API platform that makes it easy for developers to make and receive phone calls, send and receive text messages, and embed VoIP calling into browser-based and native mobile applications. Prima di entrare nel dettaglio, verrà illustrato brevemente il funzionamento della piattaforma.Let's briefly go over how this works before diving in.

Ricevere chiamate e SMSReceiving Calls and Text Messages

Twilio consente agli sviluppatori di acquistare numeri di telefono programmabili che è possibile usare per inviare e ricevere chiamate ed SMS.Twilio allows developers to purchase programmable phone numbers which can be used to both send and receive calls and text messages. Quando un numero Twilio riceve una chiamata o un SMS in ingresso, invia all'applicazione Web una richiesta HTTP di tipo POST o GET, in cui vengono chieste istruzioni per la gestione della chiamata o del messaggio.When a Twilio number receives an inbound call or text, Twilio will send your web application an HTTP POST or GET request, asking you for instructions on how to handle the call or text. Il server dell'utente risponderà alla richiesta HTTP di Twilio con TwiML, un semplice set di tag XML che contengono istruzioni per la gestione di una chiamata o un SMS.Your server will respond to Twilio's HTTP request with TwiML, a simple set of XML tags that contain instructions on how to handle a call or text. Più avanti verranno illustrati esempi del linguaggio TwiML.We will see examples of TwiML in just a moment.

Effettuare chiamate e inviare SMSMaking Calls and Sending Text Messages

Inviando richieste HTTP all'API del servizio Web Twilio, gli sviluppatori possono inviare SMS o avviare chiamate in uscita.By making HTTP requests to the Twilio web service API, developers can send text messages or initiate outbound phone calls. Per le chiamate in uscita, lo sviluppatore deve inoltre specificare un URL che restituisca le istruzioni TwiML per la gestione della chiamata in uscita dopo la connessione.For outbound calls, the developer must also specify a URL that returns TwiML instructions for how to handle the outbound call once it is connected.

Incorporare funzionalità VoIP nel codice dell'interfaccia utente (JavaScript, iOS o Android)Embedding VoIP Capabilities in UI code (JavaScript, iOS, or Android)

Twilio offre un SDK lato client che consente di trasformare qualsiasi Web browser desktop, app per iOS o app per Android in un telefono VoIP.Twilio provides a client-side SDK which can turn any desktop web browser, iOS app, or Android app into a VoIP phone. In questo articolo verrà illustrato l'utilizzo delle funzionalità VoIP nel browser.In this article, we will focus on how to use VoIP calling in the browser. Oltre a Twilio JavaScript SDK in esecuzione nel browser, è necessario usare un'applicazione lato server (in questo caso un'applicazione Node.js) per inviare un "token Capability" al client JavaScript.In addition to the Twilio JavaScript SDK running in the browser, a server-side application (our node.js application) must be used to issue a "capability token" to the JavaScript client. Per altre informazioni sull'uso di VoIP con Node.js, vedere il blog per sviluppatori di Twilio.You can read more about using VoIP with node.js on the Twilio dev blog.

Iscriversi a Twilio (sconto Microsoft)Sign Up For Twilio (Microsoft Discount)

Prima di usare i servizi Twilio, è necessario iscriversi per creare un account.Before using Twilio services, you must first sign up for an account. Per i clienti di Microsoft Azure è disponibile uno sconto speciale effettuando l'iscrizione qui.Microsoft Azure customers receive a special discount - be sure to sign up here!

Creare e distribuire un sito Web Node.js in AzureCreate and Deploy a node.js Azure Website

Si procederà ora alla creazione di un sito Web Node.js eseguito in Azure.Next, you will need to create a node.js website running on Azure. La documentazione ufficiale per eseguire la procedura è disponibile qui.The official documentation for doing this is located here. A livello generale, la procedura è la seguente:At a high level, you will be doing the following:

  • Creazione di un account Azure, se non già disponibileSigning up for an Azure account, if you don't have one already
  • Creazione di un nuovo sito Web tramite la console di amministrazione di AzureUsing the Azure admin console to create a new website
  • Aggiunta del supporto per il controllo del codice sorgente (si presuppone che sia stato usato git)Adding source control support (we will assume you used git)
  • Creazione di un file server.js con una semplice applicazione Web Node.jsCreating a file server.js with a simple node.js web application
  • Distribuzione dell'applicazione in AzureDeploying this simple application to Azure

Configurare il modulo TwilioConfigure the Twilio Module

Si inizierà a scrivere una semplice applicazione Node.js che usa l'API Twilio.Next, we will begin to write a simple node.js application which makes use of the Twilio API. Prima di iniziare, è necessario configurare le credenziali dell'account Twilio.Before we begin, we need to configure our Twilio account credentials.

Configurare le credenziali Twilio in variabili di ambiente di sistemaConfiguring Twilio Credentials in System Environment Variables

Per effettuare richieste autenticate nel back-end Twilio sono necessari il SID e il token di autorizzazione dell'account, che hanno lo stesso utilizzo del nome utente e della password impostate per l'account Twilio.In order to make authenticated requests against the Twilio back end, we need our account SID and auth token, which function as the username and password set for our Twilio account. Il modo più sicuro per configurare il SID e il token per l'utilizzo con il modulo Node in Azure consiste nell'usare variabili di ambiente di sistema, configurandole direttamente nella console di amministrazione di Azure.The most secure way to configure these for use with the node module in Azure is via system environment variables, which you can set directly in the Azure admin console.

Selezionare il sito Web Node.js e fare clic sul collegamento "CONFIGURE".Select your node.js website, and click the "CONFIGURE" link. Scorrendo verso il basso verrà visualizzata un'area in cui è possibile impostare le proprietà di configurazione per l'applicazione.If you scroll down a bit, you will see an area where you can set configuration properties for your application. Immettere le credenziali dell'account Twilio (disponibili nella console di Twilio) come illustrato, denominandole rispettivamente TWILIO_ACCOUNT_SID e TWILIO_AUTH_TOKEN:Enter your Twilio account credentials (found on your Twilio Console) as shown - make sure to name them TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN, respectively:

Console di amministrazione di Azure

Dopo aver configurato le variabili, riavviare l'applicazione nella console di Azure.Once you have configured these variables, restart your application in the Azure console.

Dichiarare il modulo Twilio in package.jsonDeclaring the Twilio module in package.json

Verrà ora creato un file package.json per gestire le dipendenze del modulo Node tramite npm.Next, we need to create a package.json to manage our node module dependencies via npm. Allo stesso livello del file server.js creato nell'esercitazione su Azure e Node.js, creare un file denominato package.json.At the same level as the server.js file you created in the Azure/node.js tutorial, create a file named package.json. All'interno del file inserire il codice seguente:Inside this file, place the following:

{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node server"
  },
  "dependencies": {
    "body-parser": "^1.16.1",
    "ejs": "^2.5.5",
    "errorhandler": "^1.5.0",
    "express": "^4.14.1",
    "morgan": "^1.8.1",
    "twilio": "^2.11.1"
  }
}

Questo codice dichiara il modulo Twilio come dipendenza, così come il noto framework Web Express e il motore di rendering dei modelli EJS.This declares the twilio module as a dependency, as well as the popular Express web framework and the EJS template engine. A questo punto, è possibile iniziare a scrivere il codice.Okay, now we're all set - let's write some code!

Effettuare una chiamata in uscitaMake an Outbound Call

Verrà ora creato un modulo molto semplice per l'esecuzione di una chiamata verso un numero scelto.Let's create a simple form that will place a call to a number we choose. Aprire server.js e immettere il codice seguente.Open up server.js, and enter the following code. Si noti che nel punto in cui nel codice è scritto "CHANGE_ME" è necessario inserire il nome del proprio sito Web di Azure:Note where it says "CHANGE_ME" - put the name of your azure website there:

// Module dependencies
const express = require('express');
const path = require('path');
const http = require('http');
const twilio = require('twilio');
const logger = require('morgan');
const bodyParser = require('body-parser');
const errorHandler = require('errorhandler');
const accountSid = process.env.TWILIO_ACCOUNT_SID;
const authToken = process.env.TWILIO_AUTH_TOKEN;
// Create Express web application
const app = express();

// Express configuration
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(logger('tiny'));
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.use(express.static(path.join(__dirname, 'public')));

if (app.get('env') !== 'production') {
  app.use(errorHandler());
}

// Render an HTML user interface for the application's home page
app.get('/', (request, response) => response.render('index'));

// Handle the form POST to place a call
app.post('/call', (request, response) => {
  var client = twilio(accountSid, authToken);

  client.makeCall({
    // make a call to this number
    to:request.body.number,

    // Change to a Twilio number you bought - see:
    // https://www.twilio.com/console/phone-numbers/incoming
    from:'+15558675309',

    // A URL in our app which generates TwiML
    // Change "CHANGE_ME" to your app's name
    url:'https://CHANGE_ME.azurewebsites.net/outbound_call'
  }, () => {
      // Go back to the home page
      response.redirect('/');
  });
});

// Generate TwiML to handle an outbound call
app.post('/outbound_call', (request, response) => {
  var twiml = new twilio.TwimlResponse();

  // Say a message to the call's receiver
  twiml.say('hello - thanks for checking out Twilio and Azure', {
      voice:'woman'
  });

  response.set('Content-Type', 'text/xml');
  response.send(twiml.toString());
});

// Start server
app.listen(app.get('port'), function(){
  console.log(`Express server listening on port ${app.get('port')}`);
});

Creare quindi una directory denominata views, all'interno della quale creare un file denominato index.ejs con il contenuto seguente:Next, create a directory called views - inside this directory, create a file named index.ejs with the following contents:

<!DOCTYPE html>
<html>
<head>
  <title>Twilio Test</title>
  <style>
    input { height:20px; width:300px; font-size:18px; margin:5px; padding:5px; }
  </style>
</head>
<body>
  <h1>Twilio Test</h1>
  <form action="/call" method="POST">
      <input placeholder="Enter a phone number" name="number"/>
      <br/>
      <input type="submit" value="Call the number above"/>
  </form>
</body>
</html>

Distribuire ora il sito Web in Azure e aprire la Home page.Now, deploy your website to Azure and open your home. Dovrebbe essere possibile immettere il proprio numero di telefono nel campo di testo e ricevere una chiamata dal numero Twilio.You should be able to enter your phone number in the text field, and receive a call from your Twilio number!

Inviare un messaggio SMSSend an SMS Message

Verranno ora create un'interfaccia utente e la logica di gestione dei moduli per l'invio di un SMS.Now, let's set up a user interface and form handling logic to send a text message. Aprire il file server.js e aggiungere il codice seguente dopo l'ultima chiamata a app.post:Open up server.js, and add the following code after the last call to app.post:

app.post('/sms', (request, response) => {
  const client = twilio(accountSid, authToken);

  client.sendSms({
      // send a text to this number
      to:request.body.number,

      // A Twilio number you bought - see:
      // https://www.twilio.com/console/phone-numbers/incoming
      from:'+15558675309',

      // The body of the text message
      body: request.body.message

  }, () => {
      // Go back to the home page
      response.redirect('/');
  });
});

In views/index.ejs aggiungere un altro modulo sotto il primo per inviare un numero e un messaggio di testo:In views/index.ejs, add another form under the first one to submit a number and a text message:

<form action="/sms" method="POST">
  <input placeholder="Enter a phone number" name="number"/>
  <br/>
  <input placeholder="Enter a message to send" name="message"/>
  <br/>
  <input type="submit" value="Send text to the number above"/>
</form>

Ridistribuire l'applicazione in Azure. Dovrebbe essere possibile inviare il modulo e inviare un SMS (a se stessi o a un amico).Re-deploy your application to Azure, and you should now be able to submit that form and send yourself (or any of your closest friends) a text message!

Passaggi successiviNext Steps

In questa esercitazione si sono apprese le nozioni di base sull'utilizzo di Node.js e Twilio per creare applicazioni di comunicazione.You have now learned the basics of using node.js and Twilio to build apps that communicate. Questi esempi, tuttavia, offrono solo un'idea delle possibilità offerte da Twilio e Node.js.But these examples barely scratch the surface of what's possible with Twilio and node.js. Per altre informazioni sull'uso di Twilio con Node.js, vedere le risorse seguenti:For more information using Twilio with node.js, check out the following resources:

A questo punto, non resta che sperimentare tutte le possibilità offerte dall'uso di Node.js e Twilio in Azure.We hope you love hacking node.js and Twilio on Azure!