Advanced I/O Functionの設定
functionコンポーネントを設定して、ダイヤラーアプリのコーディングを始めましょう。
functionのディレクトリfunctions/dialerには以下が含まれています:
- index.jsメインfunctionファイル
- catalyst-config.json設定ファイル
- Nodeモジュール
- package.jsonおよびpackage-lock.json依存関係ファイル
Node.js用パッケージのインストール
先に進む前に、アプリケーションのfunctionsディレクトリに2つの追加パッケージをインストールする必要があります。
Express
コードでExpress Node.jsパッケージをインポートするには、システムにExpress依存関係をインストールする必要があります。Expressフレームワークは、ルートの管理やHTTPリクエストへの応答に使用されます。
ローカルマシンにExpress.jsをインストールするには、ターミナルでfunctionのホームディレクトリ(functions/dialer)に移動し、以下のコマンドを実行します:
これにより、Expressモジュールがインストールされ、依存関係が保存されます。
Twilio
このチュートリアルでは、Twilioパッケージもインストールする必要があります。TwilioライブラリはTwilio APIへのHTTPリクエストを行うことができます。以下のコマンドを実行してTwilioの依存関係を追加します。
この情報はpackage.jsonファイルにも更新されます。
次に、functionファイルにコードを追加しましょう。Node jsコードをコピーして、functions/dialerディレクトリのindex.jsに貼り付けます。アプリケーションのファイルの作業には、お好みのIDEを使用できます。
const express = require("express");
const app = express();
var twilio = require('twilio');
const VoiceResponse = require("twilio").twiml.VoiceResponse;
var catalyst = require('zcatalyst-sdk-node');
var YOUR_TWILIO_NUMBER = '+xxxxxxxxxx';
var accountSid = "xxxxxxxxxxxxxx";
var authToken = "7xxxxxxxxxxxxxxx8";
var twilioClient = twilio(accountSid, authToken);
var bodyParser = require('body-parser');
app.use(bodyParser.json()); // JSONエンコードされたボディをサポート
app.use(bodyParser.urlencoded({ extended: true })); // URLエンコードされたボディをサポート
app.post("/makeCall", async (req, res) => {
try {
var salesNumber = req.body.salesNumber;
console.log(req.body)
const catalystApp = catalyst.initialize(req);
let rowData =
{
fromNumber: req.body.phoneNumber,
toNumber: req.body.salesNumber
};
console.log(rowData)
const catalystTable = catalystApp.datastore().table(‘CallLog’);
const data = await catalystTable.insertRow(rowData);
var url = ‘https://’ + req.headers.host + ‘/server/dialer/outbound/’ + encodeURIComponent(salesNumber);
var options = {
to: req.body.phoneNumber,
from: YOUR_TWILIO_NUMBER,
url: url,
method: ‘post’,
statusCallbackEvent: [‘answered’, ‘completed’],
statusCallback: ‘https://’ + req.headers.host + ‘/server/dialer/statusCheck?ROWID=’ + data.ROWID,
statusCallbackMethod: ‘POST’
};
twilioClient.calls.create(options).then((call) => {
res.status(200).send({ message: ‘Call Initiated’ });
}).catch((error) => {
console.log(error);
res.status(500).send({ “error”: error });
});
} catch (e) {
console.log(“Exception while making a Call ::” + e);
res.status(500).send({ “error”: ‘Internal Server Error Occured. Please Try again after sometime.’ });
}
});
app.post(’/outbound/:salesNumber’, function (req, res) {
try {
var salesNumber = req.params.salesNumber;
var twimlResponse = new VoiceResponse();
twimlResponse.say(‘Thanks for trying out the Catalyst Dialer App. Please hold on so that we can connect with your Customer… ‘, { voice: ‘alice’ });
twimlResponse.dial(salesNumber);
res.status(200).send(twimlResponse.toString());
} catch (e) {
console.log(“Exception while making Outbound Call ::” + e);
res.status(500).send({ “error”: ‘Internal Server Error Occured. Please Try again after sometime.’ });
}
});
app.post(’/statusCheck’, async (req, res) => {
try {
const catalystApp = catalyst.initialize(req);
if (req.body.CallStatus === “completed”) {
let updatedRowData = {
callDuration: req.body.CallDuration,
callStatus: req.body.CallStatus,
calledCountry: req.body.CalledCountry,
calledState: req.body.CalledState,
timeOfCall: req.body.Timestamp,
ROWID: req.body.ROWID
};
console.log(updatedRowData)
const catalystTable = catalystApp.datastore().table(‘CallLog’);
await catalystTable.updateRow(updatedRowData);
}
res.status(200).send(’ StatusCheck Completed’);
} catch (e) {
console.log(“Exception while checking status :: " + e);
res.status(500).send({ “error”: ‘Internal Server Error Occured. Please Try again after sometime.’ });
}
});
app.get(’/getLogs’, async function (req, res) {
try {
const catalystApp = catalyst.initialize(req);
const query = ‘SELECT callDuration,callStatus,calledCountry,timeOfCall,fromNumber,toNumber FROM CallLog’;
const queryResult = await catalystApp.zcql().executeZCQLQuery(query);
res.status(200).send(queryResult);
} catch (e) {
console.log(“Exception while getting Call Logs ::” + e);
res.status(500).send({ “error”: ‘Internal Server Error Occured. Please Try again after sometime.’ });
}
});
module.exports = app;
functionsディレクトリの設定が完了しました。
最終更新日 2026-03-05 11:43:24 +0530 IST


