https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-to-record-audio-from-phone-call-node-js-dr/voice-record-call-node.png

Node.jsで着信の音声を録音する方法

最終更新日 May 17, 2021

所要時間:2 分

このチュートリアルは、「NexmoとNode.jsの入門」シリーズの第3回目であり、SMS APIの入門シリーズに続くものです。これらのシリーズの以前のチュートリアルへのリンクは、記事の下にあります。

前回のチュートリアルでは、音声アプリケーションを作成し、Nexmo Voice API と Node.js クライアントライブラリを使用してテキストから音声への通話を受信する方法を学びました。このチュートリアルでは、アプリを拡張して、発信者からのメッセージを録音します。

ソースコードを見る レコードコール.jsギットハブ

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.

着信を録音するためのNexmo Call Controlオブジェクトの定義

前回のチュートリアルでは、ウェブフック・エンドポイントのURLを作成し、それを音声アプリケーションに関連付け、着信コールを受け取る方法について説明しました。 着信コールを受け取る.このチュートリアルでは NCCOを修正します。前のチュートリアルをまだ完了していない場合は、まずそちらに従ってください。

開始するには を実行する。:

ngrok http 4002

のような転送 URL を、開発中の一時的なウェブフック・エンドポイントとして使用します。 https://db95720f.ngrok.ioを開発中の一時的なウェブフックエンドポイントとして使用することになります。

ngrokのURLでNexmoアプリケーションを更新してください。(同じngrokまたはサーバーのURLを使用して再開する場合は、この部分をスキップできます):

nexmo app:update YOUR_NEXMO_APPLICATION_ID "My Voice App" https://db95720f.ngrok.io/answer https://db95720f.ngrok.io/event

では、Webhookのコードを修正しましょう。

のリクエストを処理するために、HTTP GETルートのNCCOを編集する。 /answer:

app.get('/answer', function (req, res) {

const ncco = [
{
'action': 'talk',
'voiceName': 'Jennifer',
'text': 'Please leave your name and quick message after the tone, then press #.'
},
{
'action': 'record',
'eventUrl': ['https://db95720f.ngrok.io/record'],
'endOnSilence': '3',
'endOnKey' : '#',
'beepStart': 'true'
},
{
'action': 'talk',
'voiceName': 'Jennifer',
'text': 'Thank you for your message. Ciao!'
}
];
res.json(ncco);
});

に注目してほしい。 eventUrlに注目してほしい。ここに録画に関する情報が送られる。アプリケーション用に作成した一般的な /eventルートを再利用することもできますし、別のPOSTルートを作成することもできます:

app.post('/record', (req, res) => {
console.log(req.body);
res.status(204).end();
});

スクリプトを実行し、Nexmoの電話番号に電話をかけてみてください。すべてがうまくいっていれば、"Jennifer "からの挨拶とビープ音が聞こえるはずです。メッセージを残し、キーパッドの#を押してください。

デフォルトでは、録音された音声はMP3形式で保存され、Nexmoによって30日間保存されます。

録音が完了すると、イベントはオーディオファイルのURLを含む情報を返す、 recording_uuid:

{ start_time: '2017-01-19T00:34:48Z',
recording_url: 'https://api.nexmo.com/v1/files/486fadc7-2abb-4f56-985e-fb83102acb82',
size: 19181,
recording_uuid: '33e0c756-5405-44d9-b869-197e55e780f0',
end_time: '2017-01-19T00:34:53Z',
conversation_uuid: 'de783420-379c-409e-8c73-1ea1e6b2a38e' }

次に、録音を recording_url.

ボイスメールメッセージの取得

では /recordルートを修正して、録音が完了したらすぐにオーディオファイルをダウンロードするようにしよう。

Nexmo Node.jsライブラリをnpm経由でインストールします。この機能を使用するには、ライブラリのバージョン1.2.0が必要です。 save機能を使うにはライブラリのバージョン1.2.0が必要なので、古いバージョンを使っている場合はアップグレードしてください。

モジュールをインクルードし nexmoモジュールをインクルードし、認証情報、アプリID、そして前のチュートリアルのCLIツールで生成した秘密鍵で初期化する。 で生成した秘密鍵で初期化します。:

const Nexmo = require('nexmo');
const appId = 'c6b78717-db0c-4b8b-9723-ee91400137cf'; // Use your own App ID!
const privateKey = require('fs').readFileSync(__dirname + '/private.key');

const nexmo = new Nexmo({
apiKey: NEXMO_API_KEY,
apiSecret: NEXMO_API_SECRET,
applicationId: appId,
privateKey: privateKey
});

先に説明したように、Voiceメッセージが録音されると、指定されたWebhookがトリガーされ、その情報が recording_url.このURLからMP3音声ファイルを取得することができます。録音されたファイルIDは でないことに注意してください。他の uuids!

ルートを修正して /recordルートを修正して files.saveメソッドを使ってファイルをディスクにダウンロードしよう:

app.post('/record', (req, res) => {
let audioURL = req.body.recording_url;
let audioFile = audioURL.split('/').pop() + '.mp3';

nexmo.files.save(audioURL, audioFile, (err, response) => {
if(response) {console.log('The audio is downloaded successfully!');}
});
res.status(204).end();
});

スクリプトを実行し、Nexmoの電話番号に電話をかけてメッセージを録音します!通話が終わると、同じディレクトリに音声ファイルがダウンロードされます!やった

Nexmo Voice API - audio file download

さらに詳しく

Nexmo APIとNode.jsをより深く知るためのリソースをご紹介します。

APIリファレンスとツール

Nexmo Node.js入門ガイド

シェア:

https://a.storyblok.com/f/270183/150x150/a3d03a85fd/placeholder.svg
Tomomi Imuraヴォネージの卒業生

オープンなウェブとテクノロジー?HTML5、JavaScript、Node.js。猫ハック、Internet of Blings✨(LEDの点滅より少し多い)。サンフランシスコ、Vonageの元デベロッパー・アドボケイト。