--- title: "Event Functionの設定" url: https://docs.catalyst.zoho.com/ja/tutorials/invoice-notifier/nodejs/configure-function/ description: "Event FunctionsとCatalyst Signalsを使用して、Zoho BooksからZoho Cliqへの請求書更新を自動化するイベント駆動アーキテクチャを構築します。" last_updated: 2026-08-17T12:16:04Z service: All Services type: tutorial related_links: - name: "Event Functions" url: /ja/serverless/help/functions/event-functions/ - name: "Functionsディレクトリ構造" url: /ja/cli/v1/project-directory-structure/functions-directory --- # Event Functionの設定 ここでは、Zoho Cliqチャンネルに自動的にメッセージを送信するEvent Function `Cliq_Notifier`を設定します。このメッセージには、支払いが正常に完了した新規顧客の請求書詳細が含まれます。このFunctionは、Catalyst Signalsによってトリガーされた際に実行されます。 [Functionsディレクトリ](https://docs.catalyst.zoho.com/ja/cli/v1/project-directory-structure/functions-directory)、`functions/Cliq_Notifier`には以下が含まれています: - `index.js`メインFunctionファイル - `catalyst-config.json`設定ファイル - Nodeモジュール - `[package.json](https://docs.npmjs.com/files/package.json)`および`[package-lock.json](https://docs.npmjs.com/configuring-npm/package-lock-json.html)`依存関係ファイル `index.js`ファイルにコードを追加します。 このFunctionには、効率的に動作するためにaxiosパッケージが依存関係として必要です。`axios`はPromiseベースのHTTPクライアントで、Cliq APIエンドポイントにメッセージを投稿するための非同期HTTPリクエストの送信に使用します。 `axios`をインストールするには、Node FunctionのディレクトリDev(`functions/Cliq_Notifier`)に移動し、以下のコマンドを実行します: ```sh npm install axios ``` モジュールがインストールされます。 ![installing axios dependencies](https://catalyst-docs-development.zohostratus.in/images/tutorials/invoice-notifier/axios-cli.webp) これにより、以下の画像のように`Package.json`ファイルに**axios**依存関係が更新されます。 ![Add dependencies for the fucntion](https://catalyst-docs-development.zohostratus.in/images/tutorials/invoice-notifier/dependency.webp) Node.jsコードをコピーし、プロジェクトの`functions/Cliq_Notifier`ディレクトリにある`index.js`に貼り付けて、ファイルを保存してください。任意のIDEを使用してアプリケーションのファイルを操作できます。 > **Note**:このセクションのコードを確認し、内容を十分に理解してください。 **index.js** ```javascript const axios = require('axios'); const catalyst = require('zcatalyst-sdk-node'); const ZBOOKSDOMAIN = "{{YOUR_ZBOOKS_DOMAIN}}"; //リージョンに基づいたZoho Booksドメインを入力してください const ZBOOKSORG = "{{YOUR_ZBOOKS_ORGANIZATION_ID}}" //Zoho BooksのOrganization IDを入力してください const ZCLIQDOMAIN = "{{YOUR_ZCLIQ_DOMAIN}}"; //リージョンに基づいたZoho Cliqドメインを入力してください const ZCLIQ_CHANNEL_UNIQUE_NAME = "{{YOUR_CHANNEL_UNIQUE_NAME}}" //更新を投稿するチャンネルのユニーク名を入力してください const ZCLIQ_BOT_UNIQUE_NAME = "{{YOUR_BOT_UNIQUE_NAME}}" //メッセージを投稿するボットのユニーク名を入力してください const ZACCOUNTSDOMAIN = "{{YOUR_ZACCOUNTS_DOMAIN}}" //リージョンに基づいたZoho Accountsドメインを入力してください module.exports = async (event, context) => { try { const rows = transformEventData(event.getRawData()); const requestBody = buildCliqRequestBody(rows); const accessToken = await getAccessToken(context); await sendToCliq(requestBody, accessToken); console.log("Message pushed to channel successfully"); context.closeWithSuccess(); } catch (error) { console.error('Error occurred:', error); context.closeWithFailure(); } }; function transformEventData(rawData) { let rows = rawData.data.flat(); for (let row of rows) { const invoiceId = row["Invoice Id"]; delete row["Invoice Id"]; row["Link"] = `https://${ZBOOKSDOMAIN}/app/${ZBOOKSORG}#/invoices/${invoiceId}`; } return rows; } function buildCliqRequestBody(rows) { return { slides: [{ type: "table", data: { headers: ["Customer", "Invoice Number", "Amount", "Paid On", "Link"], rows: rows } }], text: "Here are the invoices marked as Paid in the last hour:" }; } async function getAccessToken(context) { const app = catalyst.initialize(context); var connector = app.connection({ CliqConnector: { client_id: "{{YOUR_CLIENT_ID}}", //Client IDを入力してください client_secret: "{{YOUR_CLIENT_SECRET}}", //Client Secretを入力してください auth_url: `https://${ZACCOUNTSDOMAIN}/oauth/v2/auth`, refresh_url: `https://${ZACCOUNTSDOMAIN}/oauth/v2/token`, refresh_token: "{{YOUR_REFRESH_TOKEN}}" //Refresh Tokenを入力してください } }) .getConnector('CliqConnector'); return await connector.getAccessToken(); } async function sendToCliq(body, accessToken) { const cliqChannelURL = `https://${ZCLIQDOMAIN}/api/v2/channelsbyname/${ZCLIQ_CHANNEL_UNIQUE_NAME}/message?bot_unique_name=${ZCLIQ_BOT_UNIQUE_NAME}`; const headers = { 'Content-Type': 'application/json', 'Authorization': 'Zoho-oauthtoken ' + accessToken }; const response = await axios.post(cliqChannelURL, body, { headers }); } ``` > **Note:** コードをFunctionファイルにコピー&ペーストした後、インラインコメントに示されている通り、以下のプレースホルダーを実際の値に更新してください: - **Zoho Booksドメイン(4行目)**:リージョンに基づいた[**Zoho Books**](https://www.zoho.com/in/books/) Organizationのドメインを入力してください。例:books.zoho.com、books.zoho.eu、books.zoho.in - **Zoho Books Organization ID(5行目)**:Zoho Booksアカウントの一意のOrganization IDを入力してください。 - **Zoho Cliqドメイン(7行目)**:リージョンに基づいた[Zoho Cliq](https://www.zoho.com/cliq/) Organizationのドメインを指定してください。例:cliq.zoho.com、cliq.zoho.eu - **Zoho Cliqチャンネルのユニーク名(8行目)**:支払い済み請求書の更新を投稿する[Zoho Cliqチャンネル](https://help.zoho.com/portal/ja/kb/zoho-cliq/user-guides/channels)のユニーク名を入力してください。 - **Zoho Cliqボットのユニーク名(9行目)**:上記チャンネルに追加された[Zoho Cliqボット](https://www.zoho.com/cliq/help/platform/bots.html)のユニーク名を入力してください。 - **Zoho Accountsドメイン(11行目)**:Catalyst、Zoho Books、Zoho Cliqへのログインに使用する[Zoho Accounts](https://www.accounts.zoho.com/)ドメインを指定してください。例:accounts.zoho.com、accounts.zoho.in - **Client ID(54行目)**:[ステップ4](https://docs.catalyst.zoho.com/ja/tutorials/invoice-notifier/nodejs/register-client/)のクライアント登録時に取得したClient IDを貼り付けてください。 - **Client Secret(55行目)**:[ステップ4](https://docs.catalyst.zoho.com/ja/tutorials/invoice-notifier/nodejs/register-client/)で生成された対応するClient Secretを貼り付けてください。 - **Refresh Token(58行目)**:[ステップ5](https://docs.catalyst.zoho.com/ja/tutorials/invoice-notifier/nodejs/refresh-token/)でAPIクライアントツールを使用して生成したRefresh Tokenを入力してください。 Event Functionの設定が完了しました。