Programmable Voice クイックスタート for Node.js

Programmable Voiceで、 Node.js アプリケーションから音声通話の発着信ができるようになります。 やり方を見てみましょう。

はじめよう

Node.jsで通話を発信できるようになる前に、Twilioアカウントにサインアップし、音声通話を利用可能な電話番号を購入する必要があります。 電話番号の購入の際の検索時に、どのようなタイプの通信が行えるか確認できます。

音声通話の利用可能な電話番号の検索

続いて、Node.js向けのTwilioモジュールをインストールしますNodeおよびnpmがすでにインストールされたマシン上でターミナル、またはコマンドライン・インターフェイスを開き、新規のディレクトリーで下記のコマンドを実行します。

npm install twilio

電話に発信する

ここで、ぴっかぴかの新Twilio Node.jsライブラリーを使いましょう。 単一ののAPIリクエストで、先ほど購入したTwilio電話番号からテキスト・メッセージを送信できます。 "make_call.js" という名前の新規ファイルを開き、下記コードをペーストします。

通話の発信
  • Node.js
SDKバージョン:
  • 2.x
  • 3.x
// Download the Node helper library from twilio.com/docs/node/install
// These consts are your accountSid and authToken from twilio.com/user/account
const accountSid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const authToken = 'your_auth_token';
const client = require('twilio')(accountSid, authToken);

client.calls
  .create({
    url: 'http://demo.twilio.com/docs/voice.xml',
    to: '+14155551212',
    from: '+15017250604',
  })
  .then((call) => process.stdout.write(call.sid));
// Download the Node helper library from twilio.com/docs/node/install
// These vars are your accountSid and authToken from twilio.com/user/account
var accountSid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
var authToken = "your_auth_token";
var client = require('twilio')(accountSid, authToken);

client.calls.create({
    url: "http://demo.twilio.com/docs/voice.xml",
    to: "+14155551212",
    from: "+15017250604"
}, function(err, call) {
    process.stdout.write(call.sid);
});
出力を表示
  • JSON
  • XML
{
	"sid": "CAa346467ca321c71dbd5e12f627deb854",
	"date_created": "Thu, 19 Aug 2010 00:12:15 +0000",
	"date_updated": "Thu, 19 Aug 2010 00:12:15 +0000",
	"parent_call_sid": null,
	"account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
	"to": "+14155551212",
	"formatted_to": "(415) 555-1212",
	"from": "+14158675309",
	"formatted_from": "(415) 867-5309",
	"phone_number_sid": "PNd6b0e1e84f7b117332aed2fd2e5bbcab",
	"status": "queued",
	"start_time": null,
	"end_time": null,
	"duration": null,
	"price": null,
	"direction": "outbound-api",
	"answered_by": null,
	"api_version": "2010-04-01",
	"forwarded_from": null,
	"caller_name": null,
	"uri": "\/2010-04-01\/Accounts\/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\/Calls\/CAa346467ca321c71dbd5e12f627deb854.json",
	"subresource_uris": {
		"notifications": "\/2010-04-01\/Accounts\/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\/Calls\/CAa346467ca321c71dbd5e12f627deb854\/Notifications.json",
		"recordings": "\/2010-04-01\/Accounts\/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\/Calls\/CAa346467ca321c71dbd5e12f627deb854\/Recordings.json"
	}
}
<TwilioResponse>
	<Call>
		<Sid>CAa346467ca321c71dbd5e12f627deb854</Sid>
		<DateCreated>Thu, 19 Aug 2010 00:25:48 +0000</DateCreated>
		<DateUpdated>Thu, 19 Aug 2010 00:25:48 +0000</DateUpdated>
		<ParentCallSid/>
		<AccountSid>ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</AccountSid>
		<To>+14155551212</To>
		<FormattedTo>(415) 555-1212</FormattedTo>
		<From>+14158675309</From>
		<FormattedFrom>(415) 867-5309</FormattedFrom>
		<PhoneNumberSid></PhoneNumberSid>
		<Status>queued</Status>
		<StartTime/>
		<EndTime/>
		<Duration/>
		<Price/>
		<Direction>outbound-api</Direction>
		<AnsweredBy/>
		<ApiVersion>2010-04-01</ApiVersion>
		<ForwardedFrom/>
		<CallerName/>
		<Uri>/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Calls/CAa346467ca321c71dbd5e12f627deb854</Uri>
		<SubresourceUris>
			<Notifications>/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Calls/CAa346467ca321c71dbd5e12f627deb854/Notifications</Notifications>
			<Recordings>/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Calls/CAa346467ca321c71dbd5e12f627deb854/Recordings</Recordings>
		</SubresourceUris>
	</Call>
</TwilioResponse>
通話の発信

アカウントの認証情報と電話番号を、ご自身のアカウントの情報に更新します。 node make-call.js コマンドによりコードを実行します。 - ほどなくして、Twilio電話番号から通話が発信されます! このコード例でのURLパラメーターはTwiML  - TwiMLにへの通話の処理方法の指示書 - の含まれるXMLドキュメントを返します。 後々取り上げるように、TwiMLは、着信通話を処理するためにも使用されます。

音声通話の着信

Twilio電話番号に通話が着信すると、ご用意いただいたサーバーにHTTPリクエストが送信されます。 このコールバックの仕組みをWebhookと呼んでいます。 Twilioが開発中のアプリケーションにリクエストを送信すると、TwiMLという着信への応答方法を指示するXML形式でレスポンスすることが期待されます。 Expressフレームワークを使用して、Node.jsでこれを構築する方法について見ていきましょう。 "server.js" というファイルを作成、下記コードを使用して受信メッセージを処理するサーバーを作成しましょう。

SDKバージョン:
  • 2.x
  • 3.x
const http = require('http');
const twilio = require('twilio');

http.createServer((req, res) => {
  // Create TwiML response
  const twiml = new twilio.TwimlResponse();

  twiml.say('Hello from your pals at Twilio! Have fun.');

  res.writeHead(200, {'Content-Type': 'text/xml'});
  res.end(twiml.toString());
})
.listen(1337, '127.0.0.1');

console.log('TwiML server running at http://127.0.0.1:1337/');
var http = require('http'),
    twilio = require('twilio');

http.createServer(function (req, res) {
    //Create TwiML response
    var twiml = new twilio.TwimlResponse();
    twiml.say("Hello from your pals at Twilio! Have fun.");

    res.writeHead(200, {'Content-Type': 'text/xml'});
    res.end(twiml.toString());

}).listen(1337, '127.0.0.1');

console.log('TwiML servin\' server running at http://127.0.0.1:1337/');
メッセージを読み上げるTwiMLを生成する

下記コマンドでサーバーを実行します:

node server.js

ポート1337でのサーバーの起動が確認できるでしょう。 残念ながら、Twilioはあなたのコンピューターで実行されているサーバーを直接呼び出すことができません - このコードを公開サーバーにデプロイするか、外部アクセス可能なURLを提供するngrokのようなトンネルを実行する必要があります。 下記コマンドではngrokを使用し、ポート1337をインターネット上に公開します。 

ngrok http 1337

これで、新しい外部URLが手に入りました。 - 私のは https://sadfs3423.ngrok.io です。 これを、Twilioコンソールから電話番号用のWebhookとして構成します。 電話番号を選択し、"A CALL COMES IN"のポップアップを"Webhook"に変更、続いて外部URLの項目をご自身のサービスのもの、たとえば "https://sadfs3423.ngrok.io/voice" に変更します。

Twilioコンソール内の Voice Webhook

Twilio電話番号に通話を発信します - ngrokのコンソールに、HTTP POSTリクエストが確認できるはずです。 アプリケーション内実行されるよう構成されたTwiML命令、つまり<Say>タグを使用したメッセージの読み上げが聴こえるはずです。

次はどこでしょうか ?

Node.jsを使用した通話の発信の基本について理解できたところで、REST API、およびTwiMLのリファレンス・ドキュメント、あるいはNode.jsを使用した完全なサンプル・アプリケーションで取り組むチュートリアルを調べてみるのも良いかもしれません。 楽しいプログラミングを!

1 / 1
Loading Code Samples...
SDKバージョン:
  • 2.x
  • 3.x
形式:
  • JSON
  • XML
// Download the Node helper library from twilio.com/docs/node/install
// These consts are your accountSid and authToken from twilio.com/user/account
const accountSid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const authToken = 'your_auth_token';
const client = require('twilio')(accountSid, authToken);

client.calls
  .create({
    url: 'http://demo.twilio.com/docs/voice.xml',
    to: '+14155551212',
    from: '+15017250604',
  })
  .then((call) => process.stdout.write(call.sid));
// Download the Node helper library from twilio.com/docs/node/install
// These vars are your accountSid and authToken from twilio.com/user/account
var accountSid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
var authToken = "your_auth_token";
var client = require('twilio')(accountSid, authToken);

client.calls.create({
    url: "http://demo.twilio.com/docs/voice.xml",
    to: "+14155551212",
    from: "+15017250604"
}, function(err, call) {
    process.stdout.write(call.sid);
});
{
	"sid": "CAa346467ca321c71dbd5e12f627deb854",
	"date_created": "Thu, 19 Aug 2010 00:12:15 +0000",
	"date_updated": "Thu, 19 Aug 2010 00:12:15 +0000",
	"parent_call_sid": null,
	"account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
	"to": "+14155551212",
	"formatted_to": "(415) 555-1212",
	"from": "+14158675309",
	"formatted_from": "(415) 867-5309",
	"phone_number_sid": "PNd6b0e1e84f7b117332aed2fd2e5bbcab",
	"status": "queued",
	"start_time": null,
	"end_time": null,
	"duration": null,
	"price": null,
	"direction": "outbound-api",
	"answered_by": null,
	"api_version": "2010-04-01",
	"forwarded_from": null,
	"caller_name": null,
	"uri": "\/2010-04-01\/Accounts\/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\/Calls\/CAa346467ca321c71dbd5e12f627deb854.json",
	"subresource_uris": {
		"notifications": "\/2010-04-01\/Accounts\/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\/Calls\/CAa346467ca321c71dbd5e12f627deb854\/Notifications.json",
		"recordings": "\/2010-04-01\/Accounts\/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\/Calls\/CAa346467ca321c71dbd5e12f627deb854\/Recordings.json"
	}
}
<TwilioResponse>
	<Call>
		<Sid>CAa346467ca321c71dbd5e12f627deb854</Sid>
		<DateCreated>Thu, 19 Aug 2010 00:25:48 +0000</DateCreated>
		<DateUpdated>Thu, 19 Aug 2010 00:25:48 +0000</DateUpdated>
		<ParentCallSid/>
		<AccountSid>ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</AccountSid>
		<To>+14155551212</To>
		<FormattedTo>(415) 555-1212</FormattedTo>
		<From>+14158675309</From>
		<FormattedFrom>(415) 867-5309</FormattedFrom>
		<PhoneNumberSid></PhoneNumberSid>
		<Status>queued</Status>
		<StartTime/>
		<EndTime/>
		<Duration/>
		<Price/>
		<Direction>outbound-api</Direction>
		<AnsweredBy/>
		<ApiVersion>2010-04-01</ApiVersion>
		<ForwardedFrom/>
		<CallerName/>
		<Uri>/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Calls/CAa346467ca321c71dbd5e12f627deb854</Uri>
		<SubresourceUris>
			<Notifications>/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Calls/CAa346467ca321c71dbd5e12f627deb854/Notifications</Notifications>
			<Recordings>/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Calls/CAa346467ca321c71dbd5e12f627deb854/Recordings</Recordings>
		</SubresourceUris>
	</Call>
</TwilioResponse>
SDKバージョン:
  • 2.x
  • 3.x
const http = require('http');
const twilio = require('twilio');

http.createServer((req, res) => {
  // Create TwiML response
  const twiml = new twilio.TwimlResponse();

  twiml.say('Hello from your pals at Twilio! Have fun.');

  res.writeHead(200, {'Content-Type': 'text/xml'});
  res.end(twiml.toString());
})
.listen(1337, '127.0.0.1');

console.log('TwiML server running at http://127.0.0.1:1337/');
var http = require('http'),
    twilio = require('twilio');

http.createServer(function (req, res) {
    //Create TwiML response
    var twiml = new twilio.TwimlResponse();
    twiml.say("Hello from your pals at Twilio! Have fun.");

    res.writeHead(200, {'Content-Type': 'text/xml'});
    res.end(twiml.toString());

}).listen(1337, '127.0.0.1');

console.log('TwiML servin\' server running at http://127.0.0.1:1337/');