JSのいくつかの行で、バックエンドなしでanyroom.ioサービスを繰り返す方法





1か月前、Hacker Newsで、AnyRoomサービスに関する投稿がトップにリリースされました。電話会議を作成できるシンプルなGoバックエンドです。 評価は100以上、コメントでの議論、githubのソースコード、月額50ドルのサブスクリプション-一般的に、すべてが大人のようです。 最初の驚きの後、「これは本当に必要ですか?! そして、Voximplantでは、このようなものを30分と数十行のJavaScriptコードで組み立てることができます。 誰がスタートアップを作り、Hacker Newsで宣伝したいですか? 猫の下で私はあなたに方法を教えます。



AnyRoomはどのように機能しますか?



On GoおよびTwilio。 ユーザーの観点から見ると、これは次のとおりです。会議の主催者は、参加者に電話番号(サービス全体の電話番号)と会議番号の数桁を送信します。 すべての参加者が電話をかけ、会議番号を入力します-そして、互いに通信できます。 スカイプのように、機能するだけです。 内部では、GoバックエンドはTwilio HTTPリクエストと通信し、呼び出しの処理方法を説明するXMLを送信します。



Voximplantでそれを繰り返す方法は?



クラウドにはハイライトがあります。 呼び出しを処理するためのロジックは、呼び出しと並行して実行されるJavaScriptコードによって設定されます。 バックエンドとの通信に遅延はなく、ほとんどのシナリオではバックエンド自体は必要ありません:JavaScriptをWeb IDEで記述し、Webデバッガーでデバッグできます(そうすれば、番号を呼び出すか、クラウドが自分自身を呼び出します。 JavaScriptを使用して段階的にブラウザを開き、呼び出しで何が起こるかを確認します)。 また、継続的インテグレーションの一部としてGitLabなどからHTTP APIを介してダウンロードできます。



最小バージョンでAnyRoomを繰り返すには、電話番号にJavaScriptスクリプトを添付するだけで十分です。これにより、次のことが可能になります。





そのため、そのような実装はMVPになります。すでに使用することは可能ですが、改善の余地があります。 2人のユーザーが異なる会議を希望しているが、同じ番号(たとえば「111」)になった場合はどうなりますか? 会議番号ジェネレーターを備えたWebインターフェースは問題ありません。 しかし、MVPはそのようなシナリオで実装され、Voximplantで借りた番号(個人的な手紙で書いて、あなたが実験できるように残高を補充します)またはGotem Cityでのデバッグ番号にリンクできます。番号を使わずに電話をかける:



VoxEngine.addEventListener(AppEvents.CallAlerting, function(e) {
var inc = e.call;
var confName = "";
inc.answer();
inc.addEventListener(CallEvents.Connected, function (e) {
inc.say(" ! ", Language.RU_RUSSIAN_FEMALE);
inc.addEventListener(CallEvents.PlaybackFinished, function(e) {
inc.handleTones();
inc.addEventListener(CallEvents.ToneReceived, function(e) {
if ('#' === e.tone && confName.length) {
// , JavaScript .
// c
// , . ,
// 'conf_', 'conf_.*'
var out = VoxEngine.callConference('conf_' + confName);
out.addEventListener(CallEvents.Connected, function(e) {
// ,
// " " .
VoxEngine.sendMediaBetween(inc, out);
});
}
else {
confName += e.tone;
}
});
});
});
});
view raw conf-1 hosted with ❤ by GitHub


コールは会議に送信されることに注意してください。 これは、着信コール処理スクリプトと同じアプリケーションに追加する必要がある別のJavaScriptスクリプトです。



着信コールルールには、会議へのコールのみをトリガーするための正規表現「conf _。*」が含まれている必要があります。 このルールは、着信コールのルールの前に配置する必要がありますが、すべてのコールにはまったく機能しません。











この例では、会議自体のJavaScriptスクリプトはプリミティブです。 会議シナリオは複数の着信コールを受信できる唯一のシナリオであるため、1つの会議ミキサーが作成され、すべての通話で音声ストリームが混合されます。 会議ミキサーは、通常のミキサーとは異なり、ユーザー自身の音声ストリームを除くすべての音声ストリームをユーザーに提供します。



require(Modules.Conference);
var mixer = VoxEngine.createConference();
VoxEngine.addEventListener(AppEvents.CallAlerting, function(e) {
var inc = e.call;
inc.answer();
inc.addEventListener(CallEvents.Connected, function (e) {
VoxEngine.sendMediaBetween(inc, mixer);
});
});
view raw conf.js hosted with ❤ by GitHub


より良い方法はありますか?



私が書いたように、これは人気のあるサービスの非常にシンプルなクローンです。 会議IDを生成するためのWebインターフェイス、Webサイトから呼び出す機能(Web SDKがある)、モバイルアプリケーション(AndroidおよびiOS SDKがある)、会議で音楽を再生する(Playerオブジェクトを介して)、挨拶を合成する、通知する接続および切断されたユーザー、支払い統合(HTTP API経由)など。



私が話したいこと。 テレフォニーおよびビデオ通信に関連する多くの未解決のニーズがあるという事実。 これらはすべて、クラウド通信プラットフォームで迅速かつ非常に安価に組み立てることができます。 アイデアをすばやく確認し、修正とピボットをすばやく行います。 そしてもちろん、これにはJavaScriptを使用します。 Web開発者はJavaScriptを使用できるためです。



All Articles