この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Twilioで既存の03や050などの番号(0ABJ番号)を使用したい場合、ボイスワープなどの転送サービスを利用することで、既存の電話番号で着信を受けてTwilioの番号へ転送することができます。
ただし、この場合下記は実現できません。
例)既存の番号が03-1234-5678で、それをTwilioに転送している場合
- 発信者番号をTwilioで取得すること
- 転送元の番号(03-1234-5678)を着信番号として取得すること
- Twilioからの発信者番号を転送元の番号(03-1234-5678)にすること
この課題を解決するための唯一のソリューションとして、 ひかり電話 継続利用サービス (FC-GW) がございます。
FC-GW(エフシー・ゲートウェイ)とは
※FC-GW(エフシー・ゲートウェイ)のウェブサイト( https://www.fcgw.jp/toku/ )の図を引用いたします。
冒頭に記載した通り、既存の0ABJ番号をTwilioなどで利用できるサービスです。
ボイスワープなどの転送サービスの場合、転送元からTwilioなどのサービスへの転送料金は事業者側の負担になります。
また、発信者番号をTwilio側で取得できないと、CRMシステムなどで発信者番号をキーとした顧客検索をすることができなくなります。
FC-GW(エフシー・ゲートウェイ)を利用することで、これらの課題を解決することが可能です。
セットアップ手順
事前準備
Twilioで使用したいIPひかり回線をvBOX機器で収容し、Twilio用のFCGWサービスの環境を準備します。 これはFC-GW(エフシー・ゲートウェイ)を運営されているフォースネット社の作業になります。
Twilioの設定
フォースネット社より提供される情報を元に下記の設定を行います。
Elastic SIP Trunkingの設定
Twilio管理コンソールメニューの Elastic SIP Trunking
を選択します。
Trunks
を選択し、画面上の Create new SIP Trunk
を押します。
FRIENDLY NAME
は任意の名前にします。
Termination
メニューに移動します。 Termination SIP URI
にフォースネット社より受領した値を設定します。
Authentication
欄に移動します。Credential Lists
横のプラス(+)ボタンを押します。
FRIENDLY NAME
は任意の名前にします。
USERNAME
と PASSWORD
にフォースネット社より受領した値を設定し、 Create
ボタンを押します。
Credential Lists
に FRIENDLY NAME
が設定されていることを確認します。
Origination
メニューに移動します。Origination URIs
欄のプラス(+)ボタンを押します。
Origination SIP URI
にフォースネット社より受領した値を設定し、 Add
ボタンを押します。
Origination SIP URI
欄に登録したURIが表示されていることを確認します。
SIP Domain(Programmable Voice)の設定
Twilio管理コンソールメニューの Programmable Voice
を選択します。
SIP Domains
を選択し、画面上の プラス(+)ボタンを押します。
FRIENDLY NAME
と SIP URI
にフォースネット社より受領した値を設定します。
Voice Authentication
欄に進み、 CREDENTIAL LISTS
のプルダウンメニューを押して、上記の「Elastic SIP Trunkingの設定」の手順で登録したクレデンシャルリストを選択します。
SIP Registration
欄に進み、 ENABLED
にします。
CREDENTIAL LISTS
のプルダウンメニューを押して、上記の「Elastic SIP Trunkingの設定」の手順で登録したクレデンシャルリストを選択します。
Save
ボタンを押します。一覧に作成したSIP Domainが表示されていることを確認します。
動作確認
着信
FC-GWを経由して着信していることを確認したかったので、
こちらの記事で使用したサンプルアプリ の src/handler.js
に一部手を加えて、下記のようにいたしました。
// If the request to the /voice endpoint is TO your Twilio Number,
// then it is an incoming call towards your Twilio.Device.
if (requestBody.To == config.callerId) {
console.log("requestBody.To = " + requestBody.To);
dial = twiml.dial();
// This will connect the caller with your Twilio.Device/client
console.log("identity = " + identity);
dial.client(identity);
// FC-GW経由での着信の場合、Twilioデバイス(=ブラウザ)に着信させる
} else if (requestBody.To == "sip:03xxxxxxxx@***-fcgw03xxxxxxxx.sip.tokyo.twilio.com") {
console.log("requestBody.To = " + requestBody.To);
dial = twiml.dial();
// This will connect the caller with your Twilio.Device/client
console.log("identity = " + identity);
dial.client(identity);
} else if (requestBody.To) {
console.log("requestBody.To = " + requestBody.To);
// This is an outgoing call
// set the callerId
dial = twiml.dial({ callerId: config.callerId });
// Check if the 'To' parameter is a Phone Number or Client Name
// in order to use the appropriate TwiML noun
const attr = isAValidPhoneNumber(toNumberOrClientName)
? "number"
: "client";
dial[attr]({}, toNumberOrClientName);
} else {
twiml.say("Thanks for calling!");
}
return twiml.toString();
};
FC-GWのSIP Domainの着信設定にサンプルアプリを設定しました。
このように着信します。 発信者番号と着信番号がTwilio側で取得できております。
{
AccountSid: '************************',
ApiVersion: '2010-04-01',
CallSid: '************************',
CallStatus: 'ringing',
Called: 'sip:03xxxxxxxx@xxx-fcgw03xxxxxxxx.sip.tokyo.twilio.com', ←FC-GWを経由して着信させる既存の電話番号(=着信先の電話番号)
Caller: 'sip:050xxxxxxxx@***.***.***.***', ←私の携帯電話番号(=発信者)
Direction: 'inbound',
From: 'sip:050xxxxxxxx@***.***.***.***', ←私の携帯電話番号(=発信者)
SipCallId: '************************@***.***.***.***:5060',
SipDomain: 'xxx-fcgw03xxxxxxxx.sip.twilio.com',
SipDomainSid: '************************',
SipSourceIp: '***.***.***.***', ←FC-GWの接続先IPアドレス
To: 'sip:03xxxxxxxx@xxx-fcgw03xxxxxxxx.sip.tokyo.twilio.com' ←FC-GWを経由して着信させる既存の電話番号
}
発信
下記のようにして自分の携帯に発信できることを確認いたしました。 本当はサンプルアプリから発信したかったのですが、うまくいかなかったため、今後実現できましたら追記いたします。
exports.handler = function (context, event, callback) {
const VoiceResponse = require('twilio').twiml.VoiceResponse;
const response = new VoiceResponse();
const callTo = "架電先の電話番号";
const callerId = "テスト用の電話番号";
const dial = response.dial({
callerId: callerId
});
dial.sip({
username: 'SIPユーザー名',
password: 'SIPパスワード'
}, 'sip:' + callTo + '@接続先FC-GW');
console.log(response.toString());
callback(null, response);
};
関連情報
- ひかり電話 継続利用サービス (FC-GW)
- フォースネット株式会社(FC-GWの運営企業)