お知らせ:

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

Event Functionの設定

ここでは、Zoho Cliqチャンネルに自動的にメッセージを送信するEvent Function Cliq_Notifierを設定します。このメッセージには、支払いが正常に完了した新規顧客の請求書詳細が含まれます。このFunctionは、Catalyst Signalsによってトリガーされた際に実行されます。

Functionsディレクトリfunctions/Cliq_Notifierには以下が含まれています:

  • CliqNotifier.javaメインFunctionファイル
  • catalyst-config.json設定ファイル
  • libフォルダ内のJavaライブラリファイル
  • .classpathおよび.project依存関係ファイル

CliqNotifier.javaファイルにコードを追加します。

Note: このセクションのコードを確認し、内容を十分に理解してください。

以下のコードをそのままコピーし、functions/Cliq_NotifierディレクトリにあるCliqNotifier.javaに貼り付けて、ファイルを保存してください。

CliqNotifier.java
copy
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.Arrays;
import java.io.IOException;
import org.json.JSONObject;
import org.json.JSONArray;
import org.json.JSONException;
import com.catalyst.Context;
import com.catalyst.event.EVENT_STATUS;
import com.catalyst.event.EventRequest;
import com.catalyst.event.CatalystEventHandler;
import com.zc.auth.connectors.ZCConnection;
import okhttp3.OkHttpClient;
import okhttp3.MediaType;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class CliqNotifier implements CatalystEventHandler {
private static final Logger LOGGER = Logger.getLogger(CliqNotifier.class.getName());

private static final String ZBOOKSDOMAIN = "{{YOUR_ZBOOKS_DOMAIN}}"; //リージョンに基づいたZoho Booksドメインを入力してください
private static final String ZBOOKSORG = "{{YOUR_ZBOOKS_ORGANIZATION_ID}}"; //Zoho BooksのOrganization IDを入力してください

private static final String ZCLIQDOMAIN = "{{YOUR_ZCLIQ_DOMAIN}}"; //リージョンに基づいたZoho Cliqドメインを入力してください
private static final String ZCLIQ_CHANNEL_UNIQUE_NAME = "{{YOUR_CHANNEL_UNIQUE_NAME}}"; //更新を投稿するチャンネルのユニーク名を入力してください
private static final String ZCLIQ_BOT_UNIQUE_NAME = "{{YOUR_BOT_UNIQUE_NAME}}"; //メッセージを投稿するボットのユニーク名を入力してください

private static final String ZACCOUNTSDOMAIN = "{{YOUR_ZACCOUNTS_DOMAIN}}"; //リージョンに基づいたZoho Accountsドメインを入力してください

@Override
public EVENT_STATUS handleEvent(EventRequest event, Context context) throws Exception {
	
	try {
        JSONArray data = extractInvoiceData(event);
        JSONArray rows = transformInvoiceData(data);
		JSONObject requestBody = prepareCliqRequest(rows);

        String accessToken = getAccessToken();
		sendToCliq(requestBody, accessToken);

		LOGGER.log(Level.INFO, "Message pushed to channel successfully");
        return EVENT_STATUS.SUCCESS;
    } catch (Exception e) {
		LOGGER.log(Level.SEVERE, "An unexpected error occurred: ", e);
        return EVENT_STATUS.FAILURE;
    }

}

private JSONArray extractInvoiceData(EventRequest event) throws JSONException {
    JSONObject payload = (JSONObject) event.getRawData();
    JSONArray data = payload.getJSONArray("data");

    JSONArray rows = new JSONArray();
    for (int i = 0; i < data.length(); i++) {
        JSONArray invoices = data.getJSONArray(i);
        for (int j = 0; j < invoices.length(); j++) {
            rows.put(invoices.getJSONObject(j));
        }
    }
    return rows;
}

private JSONArray transformInvoiceData(JSONArray rows) throws JSONException {
    for (int i = 0; i < rows.length(); i++) {
        JSONObject row = rows.getJSONObject(i);
        String invoiceId = row.optString("Invoice Id");
        row.put("Link", "https://" + ZBOOKSDOMAIN + "/app/" + ZBOOKSORG + "#/invoices/" + invoiceId);
        row.remove("Invoice Id");
    }
    return rows;
}

private JSONObject prepareCliqRequest(JSONArray rows) throws JSONException {
	
	JSONArray headers = new JSONArray(Arrays.asList(
		"Customer",
		"Invoice Number",
		"Amount",
		"Paid On",
		"Link"
	));

	JSONObject tableData = new JSONObject()
		.put("headers", headers)
		.put("rows", rows);

	JSONObject slide = new JSONObject()
		.put("type", "table")
		.put("data", tableData);

	return new JSONObject()
		.put("text", "Here are the invoices marked as Paid in the last hour:")
		.put("slides", new JSONArray().put(slide));
}

@SuppressWarnings("unchecked")
private String getAccessToken() throws Exception {
	
	org.json.simple.JSONObject  authConfig = new org.json.simple.JSONObject();
	org.json.simple.JSONObject connectorConfig = new org.json.simple.JSONObject();
	
	authConfig.put("client_id", "{{YOUR_CLIENT_ID}}"); //Client IDを入力してください
	authConfig.put("client_secret", "{{YOUR_CLIENT_SECRET}}"); //Client Secretを入力してください
	authConfig.put("auth_url", "https://" + ZACCOUNTSDOMAIN + "/oauth/v2/auth");
	authConfig.put("refresh_url", "https://" + ZACCOUNTSDOMAIN + "/oauth/v2/token");
	authConfig.put("refresh_token", "{{YOUR_REFRESH_TOKEN}}"); //Refresh Tokenを入力してください
	connectorConfig.put("CliqConnector", authConfig);
	
	return ZCConnection.getInstance(connectorConfig).getConnector("CliqConnector").getAccessToken();

}

private void sendToCliq(JSONObject payload, String accessToken) throws IOException {
    String cliqUrl = "https://" + ZCLIQDOMAIN + "/api/v2/channelsbyname/" + ZCLIQ_CHANNEL_UNIQUE_NAME + "/message?bot_unique_name=" + ZCLIQ_BOT_UNIQUE_NAME;

    Request request = new Request.Builder()
        .url(cliqUrl)
        .addHeader("Authorization", "Zoho-oauthtoken " + accessToken)
        .addHeader("Content-Type", "application/json")
        .post(RequestBody.create(MediaType.parse("application/json"), payload.toString()))
        .build();

    try (Response response = new OkHttpClient().newCall(request).execute()) {
        if (!response.isSuccessful()) {
            throw new IOException("Unexpected response from Cliq API: " + response.body().string());
        }
    }
}

}

View more

Note: コードをFunctionファイルにコピー&ペーストした後、インラインコメントに示されている通り、以下のプレースホルダーを実際の値に更新してください:
  • Zoho Booksドメイン(27行目):リージョンに基づいたZoho Books Organizationのドメインを入力してください。例:books.zoho.com、books.zoho.eu、books.zoho.in

  • Zoho Books Organization ID(28行目):Zoho Booksアカウントの一意のOrganization IDを入力してください。

  • Zoho Cliqドメイン(30行目):リージョンに基づいたZoho Cliq Organizationのドメインを指定してください。例:cliq.zoho.com、cliq.zoho.eu

  • Zoho Cliqチャンネルのユニーク名(31行目):支払い済み請求書の更新を投稿するZoho Cliqチャンネルのユニーク名を入力してください。

  • Zoho Cliqボットのユニーク名(32行目):上記チャンネルに追加されたZoho Cliqボットのユニーク名を入力してください。

  • Zoho Accountsドメイン(34行目):Catalyst、Zoho Books、Zoho Cliqへのログインに使用するZoho Accountsドメインを指定してください。例:accounts.zoho.com、accounts.zoho.in

  • Client ID(109行目)ステップ4のクライアント登録時に取得したClient IDを貼り付けてください。

  • Client Secret(110行目)ステップ4で生成された対応するClient Secretを貼り付けてください。

  • Refresh Token(113行目)ステップ5でAPIクライアントツールを使用して生成したRefresh Tokenを入力してください。

Event Functionの設定が完了しました。

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