Twilio Network Traversal Service

Twilio のネットワークトラバーサルサービスは、より信頼できるピアツーピア通信アプリケーションのデプロイに役立つ、グローバル分散型の STUN/TURN サービスです。WebRTC および VoIP のアプリケーションでこのサービスを使用すると、NAT/ファイアウォールを超えるトラバーサルやリレーを実現できるので、ユーザーは毎回接続に成功できます。

STUN/TURN、ICEがはじめての方はこちらをご覧くださいすぐに Twilio ネットワークトラバーサルサービスを使いたい場合に便利です。

WebRTC アプリケーションでのネットワークトラバーサルサービスの使用

WebRTC アプリケーションでネットワークトラバーサルサービスを使用するには、トークンをリクエストして、それを RTCPeerConnection コンストラクターに渡します。

まず、ウェブ サーバーからリクエストを送信して、ネットワークトラバーサルサービストークンを取得して、WebRTC アプリケーションに渡します。

重要:ネットワークトラバーサルサービストークンを取得するために、自分の Twilio AccountSid と AuthToken を使用する必要があります。自分の Twilio アカウントのクレデンシャルを保護するために、このリクエストは、クライアントブラウザーではなく、サーバーからのみ行う必要があります。
コードサンプルを読み込んでいます...
Language
SDKバージョン:
  • 4.x
  • 5.x
レスポンス形式:
  • JSON
  • xml
SDKバージョン:
  • 6.x
  • 7.x
SDKバージョン:
  • 2.x
  • 3.x
SDKバージョン:
  • 4.x
  • 5.x
SDKバージョン:
  • 5.x
  • 6.x
SDKバージョン:
  • 4.x
  • 5.x
形式:
  • JSON
  • XML
// 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.tokens.create({}, function(err, token) {
    process.stdout.write(token.username);
});
// Download the Node helper library from twilio.com/docs/node/install
// These are your accountSid and authToken from https://www.twilio.com/console
const accountSid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const authToken = 'your_auth_token';

const client = require('twilio')(accountSid, authToken);

client.api.accounts('ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa').tokens
  .create({})
  .then((token) => console.log(token.username));
// Download the twilio-csharp library from twilio.com/docs/csharp/install
using System;
using Twilio;
class Example 
{
  static void Main(string[] args) 
  {
    // Find your Account Sid and Auth Token at twilio.com/user/account
    string AccountSid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    string AuthToken = "your_auth_token";
    var twilio = new TwilioRestClient(AccountSid, AuthToken);

    var token = twilio.CreateToken();
    
    Console.WriteLine(token.Username);
  }
}
<?php
// Get the PHP helper library from twilio.com/docs/php/install
require_once('/path/to/twilio-php/Services/Twilio.php'); // Loads the library

// Your Account Sid and Auth Token from twilio.com/user/account
$sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
$authToken = "your_auth_token";
$client = new Services_Twilio($sid, $authToken);

$token = $client->account->tokens->create();
echo $token->username;
# Get twilio-ruby from twilio.com/docs/ruby/install
require 'rubygems'          # This line not needed for ruby > 1.8
require 'twilio-ruby'

# Get your Account Sid and Auth Token from twilio.com/user/account
account_sid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
auth_token = 'your_auth_token'
@client = Twilio::REST::Client.new account_sid, auth_token

token = @client.account.tokens.create()
puts token.username
// Download the twilio-csharp library from twilio.com/docs/libraries/csharp
using System;
using Twilio;
using Twilio.Rest.Api.V2010.Account;

public class Example
{
    public static void Main(string[] args)
    {
        // Find your Account SID and Auth Token at twilio.com/console
        const string accountSid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        const string authToken = "your_auth_token";

        TwilioClient.Init(accountSid, authToken);

        var token = TokenResource.Create();

        Console.WriteLine(token.Username);
    }
}
<?php
// NOTE: This example uses the next generation Twilio helper library - for more
// information on how to download and install this version, visit
// https://www.twilio.com/docs/libraries/php
require_once '/path/to/vendor/autoload.php';

use Twilio\Rest\Client;

// Your Account Sid and Auth Token from twilio.com/user/account
$sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
$token = "your_auth_token";

// Initialize the client
$client = new Client($sid, $token);

//Creates a token
$token = $client->tokens->create();

echo $token->username;
# Download the Python helper library from twilio.com/docs/python/install
from twilio.rest import TwilioRestClient

# Your Account Sid and Auth Token from twilio.com/user/account
account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token = "your_auth_token"
client = TwilioRestClient(account_sid, auth_token)

token = client.tokens.create()
print(token.username)
# Download the Ruby helper library from twilio.com/docs/libraries/ruby
require 'twilio-ruby'

# Get your Account Sid and Auth Token from twilio.com/user/account
account_sid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
auth_token = 'your_auth_token'

# set up a client to talk to the Twilio REST API
@client = Twilio::REST::Client.new(account_sid, auth_token)

token = @client.account.tokens.create

puts token.username
// Install the Java helper library from twilio.com/docs/java/install
import com.twilio.sdk.TwilioRestClient;
import com.twilio.sdk.TwilioRestException;
import com.twilio.sdk.resource.factory.TokenFactory;
import com.twilio.sdk.resource.instance.Token;
import com.twilio.sdk.resource.list.TokenList;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

public class Example { 

  // Find your Account Sid and Token at twilio.com/user/account
  public static final String ACCOUNT_SID = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
  public static final String AUTH_TOKEN = "your_auth_token";

  public static void main(String[] args) throws TwilioRestException {
    TwilioRestClient client = new TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN);

    TokenFactory tokenFactory = client.getAccount().getTokenFactory();
    Token token = tokenFactory.create();
    System.out.println(token.getUsername());
  }
}
# Download the Python helper library from twilio.com/docs/python/install
from twilio.rest import Client

# Your Account Sid and Auth Token from twilio.com/user/account
account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token = "your_auth_token"
client = Client(account_sid, auth_token)

token = client.tokens.create()
print(token.username)
// Install the Java helper library from twilio.com/docs/java/install
import com.twilio.Twilio;
import com.twilio.rest.api.v2010.account.Token;

public class Example {
  // Find your Account Sid and Token at twilio.com/user/account
  public static final String ACCOUNT_SID = "ACCOUNT_SID";
  public static final String AUTH_TOKEN = "AUTH_TOKEN";

  public static void main(String[] args) {
    // Initialize the client
    Twilio.init(ACCOUNT_SID, AUTH_TOKEN);

    Token token = Token.creator().create();

    System.out.println(token.getUsername());
  }
}
$ curl -XPOST https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Tokens \
    -u "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:your_auth_token"
$ curl -XPOST https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Tokens.json \
    -u "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:your_auth_token"
{
    "account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "date_created": "Mon, 17 Nov 2014 23:55:19 +0000",
    "date_updated": "Mon, 17 Nov 2014 23:55:19 +0000",
    "ice_servers": [
        {
            "url": "stun:global.stun.twilio.com:3478?transport=udp"
        },
        {
            "credential": "M87Dd74GbNfyrAydvEKiDR43go52fo6ldoJBHB6gim0=",
            "url": "turn:global.turn.twilio.com:3478?transport=udp",
            "username": "b759d275ddc641cd379f329882abe3c0618c8afdfc5e24be1b4d59482244240f"
        }
    ],
    "password": "M87Dd74GbNfyrAydvEKiDR43go52fo6ldoJBHB6gim0=",
    "registrars": null,
    "ttl": "86400",
    "username": "b759d275ddc641cd379f329882abe3c0618c8afdfc5e24be1b4d59482244240f"
}
<?xml version="1.0" encoding="UTF-8"?>
<TwilioResponse>
  <Token>
    <Username>b759d275ddc641cd379f329882abe3c0618c8afdfc5e24be1b4d59482244240f</Username>
    <Password>M87Dd74GbNfyrAydvEKiDR43go52fo6ldoJBHB6gim0=</Password>
    <AccountSid>ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</AccountSid>
    <Ttl>86400</Ttl>
    <IceServers>
      <IceServer>
        <Url>stun:global.stun.twilio.com:3478?transport=udp</Url>
      </IceServer>
      <IceServer>
        <Url>turn:global.turn.twilio.com:3478?transport=udp</Url>
        <Username>b759d275ddc641cd379f329882abe3c0618c8afdfc5e24be1b4d59482244240f</Username>
        <Credential>M87Dd74GbNfyrAydvEKiDR43go52fo6ldoJBHB6gim0=</Credential>
      </IceServer>
    </IceServers>
    <Registrars/>
    <DateCreated>Mon, 17 Nov 2014 23:42:45 +0000</DateCreated>
    <DateUpdated>Mon, 17 Nov 2014 23:42:45 +0000</DateUpdated>
  </Token>
</TwilioResponse>
NTS トークンを生成する

次に、呼び出しを設定する際、RTCPeerConnection コンストラクターに渡す RTCConfiguration オブジェクトに、次に示すように ice_servers プロパティを追加します(ここで、ICE_SERVERS は上記の応答で返された ice_servers プロパティの内容です)。

// Here's an example in javascript
myIceServers = ICE_SERVERS;
var configuration = { iceServers: myIceServers };
var pc = new RTCPeerConnection(configuration);

この後は、通常どおりに、SDP のオファー/アンサーを交換します。これで、ネットワークトラバーサルサービスを使用して、接続を設定できるようになりました。

使用しているブラウザが Trickle ICE をサポートしている場合、RTCPeerConnection の onIceCandidate イベントを処理して、接続しているピアに新しい ICE 候補を渡すこともできます。

// Here's an example in javascript
pc.onicecandidate = function (evt) {
  if (evt.candidate) {
    // send the candidate to the other party via your signaling channel
  }
};

これですべてです! さらにヘルプが必要な場合は、よくある質問を確認するか、または Twilio サポート(help@twilio.com)にご連絡ください。

VoIP クライアントでのネットワークトラバーサルサービスの使用

重要:VoIP クライアントでネットワークトラバーサルサービスを使用するには、短時間有効な新しいトークンを取得するために、24 時間ごとに少なくとも 1 回は VoIP クライアントまたは別のアプリケーションから HTTP リクエストを送信可能である必要があります。

VoIP クライアントでネットワークトラバーサルサービスを使用するには、次のことを行います。

  1. ネットワークトラバーサルサービストークンを取得します。
  2. 返されたデータから STUN URL と TURN URL、ユーザー名、およびクレデンシャルの値を取得します。
  3. 取得した値を使用して、VoIP クライアントを構成します。

ネットワークトラバーサルサービストークンの有効期間は最大で 1 日(デフォルト値)です。トークンの有効期間は、トークンをリクエストする際に Ttl パラメーターを使用して短縮できます。詳細については、ネットワークトラバーサルサービストークンを参照してください。

ヘルプが必要ですか?

誰しもが一度は考える「コーディングって難しい」。そんな時は、お問い合わせフォームから質問してください。 または、Stack Overflow でTwilioタグのついた情報から欲しいものを探してみましょう。

コードサンプルを読み込んでいます...
SDKバージョン:
  • 4.x
  • 5.x
レスポンス形式:
  • JSON
  • xml
SDKバージョン:
  • 6.x
  • 7.x
SDKバージョン:
  • 2.x
  • 3.x
SDKバージョン:
  • 4.x
  • 5.x
SDKバージョン:
  • 5.x
  • 6.x
SDKバージョン:
  • 4.x
  • 5.x
形式:
  • JSON
  • XML
// 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.tokens.create({}, function(err, token) {
    process.stdout.write(token.username);
});
// Download the Node helper library from twilio.com/docs/node/install
// These are your accountSid and authToken from https://www.twilio.com/console
const accountSid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const authToken = 'your_auth_token';

const client = require('twilio')(accountSid, authToken);

client.api.accounts('ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa').tokens
  .create({})
  .then((token) => console.log(token.username));
// Download the twilio-csharp library from twilio.com/docs/csharp/install
using System;
using Twilio;
class Example 
{
  static void Main(string[] args) 
  {
    // Find your Account Sid and Auth Token at twilio.com/user/account
    string AccountSid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    string AuthToken = "your_auth_token";
    var twilio = new TwilioRestClient(AccountSid, AuthToken);

    var token = twilio.CreateToken();
    
    Console.WriteLine(token.Username);
  }
}
<?php
// Get the PHP helper library from twilio.com/docs/php/install
require_once('/path/to/twilio-php/Services/Twilio.php'); // Loads the library

// Your Account Sid and Auth Token from twilio.com/user/account
$sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
$authToken = "your_auth_token";
$client = new Services_Twilio($sid, $authToken);

$token = $client->account->tokens->create();
echo $token->username;
# Get twilio-ruby from twilio.com/docs/ruby/install
require 'rubygems'          # This line not needed for ruby > 1.8
require 'twilio-ruby'

# Get your Account Sid and Auth Token from twilio.com/user/account
account_sid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
auth_token = 'your_auth_token'
@client = Twilio::REST::Client.new account_sid, auth_token

token = @client.account.tokens.create()
puts token.username
// Download the twilio-csharp library from twilio.com/docs/libraries/csharp
using System;
using Twilio;
using Twilio.Rest.Api.V2010.Account;

public class Example
{
    public static void Main(string[] args)
    {
        // Find your Account SID and Auth Token at twilio.com/console
        const string accountSid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        const string authToken = "your_auth_token";

        TwilioClient.Init(accountSid, authToken);

        var token = TokenResource.Create();

        Console.WriteLine(token.Username);
    }
}
<?php
// NOTE: This example uses the next generation Twilio helper library - for more
// information on how to download and install this version, visit
// https://www.twilio.com/docs/libraries/php
require_once '/path/to/vendor/autoload.php';

use Twilio\Rest\Client;

// Your Account Sid and Auth Token from twilio.com/user/account
$sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
$token = "your_auth_token";

// Initialize the client
$client = new Client($sid, $token);

//Creates a token
$token = $client->tokens->create();

echo $token->username;
# Download the Python helper library from twilio.com/docs/python/install
from twilio.rest import TwilioRestClient

# Your Account Sid and Auth Token from twilio.com/user/account
account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token = "your_auth_token"
client = TwilioRestClient(account_sid, auth_token)

token = client.tokens.create()
print(token.username)
# Download the Ruby helper library from twilio.com/docs/libraries/ruby
require 'twilio-ruby'

# Get your Account Sid and Auth Token from twilio.com/user/account
account_sid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
auth_token = 'your_auth_token'

# set up a client to talk to the Twilio REST API
@client = Twilio::REST::Client.new(account_sid, auth_token)

token = @client.account.tokens.create

puts token.username
// Install the Java helper library from twilio.com/docs/java/install
import com.twilio.sdk.TwilioRestClient;
import com.twilio.sdk.TwilioRestException;
import com.twilio.sdk.resource.factory.TokenFactory;
import com.twilio.sdk.resource.instance.Token;
import com.twilio.sdk.resource.list.TokenList;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

public class Example { 

  // Find your Account Sid and Token at twilio.com/user/account
  public static final String ACCOUNT_SID = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
  public static final String AUTH_TOKEN = "your_auth_token";

  public static void main(String[] args) throws TwilioRestException {
    TwilioRestClient client = new TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN);

    TokenFactory tokenFactory = client.getAccount().getTokenFactory();
    Token token = tokenFactory.create();
    System.out.println(token.getUsername());
  }
}
# Download the Python helper library from twilio.com/docs/python/install
from twilio.rest import Client

# Your Account Sid and Auth Token from twilio.com/user/account
account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token = "your_auth_token"
client = Client(account_sid, auth_token)

token = client.tokens.create()
print(token.username)
// Install the Java helper library from twilio.com/docs/java/install
import com.twilio.Twilio;
import com.twilio.rest.api.v2010.account.Token;

public class Example {
  // Find your Account Sid and Token at twilio.com/user/account
  public static final String ACCOUNT_SID = "ACCOUNT_SID";
  public static final String AUTH_TOKEN = "AUTH_TOKEN";

  public static void main(String[] args) {
    // Initialize the client
    Twilio.init(ACCOUNT_SID, AUTH_TOKEN);

    Token token = Token.creator().create();

    System.out.println(token.getUsername());
  }
}
$ curl -XPOST https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Tokens \
    -u "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:your_auth_token"
$ curl -XPOST https://api.twilio.com/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Tokens.json \
    -u "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:your_auth_token"
{
    "account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "date_created": "Mon, 17 Nov 2014 23:55:19 +0000",
    "date_updated": "Mon, 17 Nov 2014 23:55:19 +0000",
    "ice_servers": [
        {
            "url": "stun:global.stun.twilio.com:3478?transport=udp"
        },
        {
            "credential": "M87Dd74GbNfyrAydvEKiDR43go52fo6ldoJBHB6gim0=",
            "url": "turn:global.turn.twilio.com:3478?transport=udp",
            "username": "b759d275ddc641cd379f329882abe3c0618c8afdfc5e24be1b4d59482244240f"
        }
    ],
    "password": "M87Dd74GbNfyrAydvEKiDR43go52fo6ldoJBHB6gim0=",
    "registrars": null,
    "ttl": "86400",
    "username": "b759d275ddc641cd379f329882abe3c0618c8afdfc5e24be1b4d59482244240f"
}
<?xml version="1.0" encoding="UTF-8"?>
<TwilioResponse>
  <Token>
    <Username>b759d275ddc641cd379f329882abe3c0618c8afdfc5e24be1b4d59482244240f</Username>
    <Password>M87Dd74GbNfyrAydvEKiDR43go52fo6ldoJBHB6gim0=</Password>
    <AccountSid>ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</AccountSid>
    <Ttl>86400</Ttl>
    <IceServers>
      <IceServer>
        <Url>stun:global.stun.twilio.com:3478?transport=udp</Url>
      </IceServer>
      <IceServer>
        <Url>turn:global.turn.twilio.com:3478?transport=udp</Url>
        <Username>b759d275ddc641cd379f329882abe3c0618c8afdfc5e24be1b4d59482244240f</Username>
        <Credential>M87Dd74GbNfyrAydvEKiDR43go52fo6ldoJBHB6gim0=</Credential>
      </IceServer>
    </IceServers>
    <Registrars/>
    <DateCreated>Mon, 17 Nov 2014 23:42:45 +0000</DateCreated>
    <DateUpdated>Mon, 17 Nov 2014 23:42:45 +0000</DateUpdated>
  </Token>
</TwilioResponse>