お知らせ:

当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

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)に移動し、以下のコマンドを実行します:

copy
$
npm install express --save

これにより、Expressモジュールがインストールされ、依存関係が保存されます。

install-express

Twilio

このチュートリアルでは、Twilioパッケージもインストールする必要があります。TwilioライブラリはTwilio APIへのHTTPリクエストを送信できるようにします。以下のコマンドを実行してTwilioの依存関係を追加してください。

copy
$
npm install twilio

install-twilio

この情報はpackage.jsonファイルにも更新されます。

package-json

次に、Functionファイルにコードを追加しましょう。Node.jsコードをコピーして、functions/dialerディレクトリのindex.jsに貼り付けてください。アプリケーションのファイルの作業には、お好みのIDEを使用できます。

注意: このセクションで示されたコードを十分に理解できるよう確認してください。FunctionとClientのアーキテクチャについては、次のセクションで説明します。
index.js
copy
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 = '+15612993019'; //Twilio電話番号に置き換えてください
var accountSid = "xxxxxxxxxxxxxxx"; //Twilio Account SIDに置き換えてください
var authToken = "{{7xxxxxxxxxxxxxxxxx8}}"; //Twilio Auth Tokenに置き換えてください
var twilioClient = twilio(accountSid, authToken);
var bodyParser = require('body-parser');
app.use(bodyParser.json()); // JSONエンコードされたボディをサポート
app.use(bodyParser.urlencoded({ extended: true })); // エンコードされたボディをサポート
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;
View more
注意: 6行目、7行目、8行目にTwilioのアカウントID、関連するTwilio電話番号、およびAuth Tokenの値を必ず追加してください。

Functionsディレクトリの設定が完了しました。FunctionとClientのコードについては、次のセクションで説明します。

最終更新日 2026-03-05 11:43:24 +0530 IST