Zealy ドキュメント

自動翻訳 · 英語で読む

API

外部プラットフォームでのアクションを自動化

作成者 Fredrika

API
このページの内容

概要

このガイドはAPIタスクについて説明します。完全なAPIドキュメントは こちら.

APIクエストは外部プラットフォームでのクエストを自動化するために使用されます。ユーザーが登録または購入したこと、Githubのイシューに対してPRを開いたこと、Redditのサポートを追加したことを確認するために使用できます。可能性は無限大です。開始して機能を試すために、他のZealyコミュニティとのパートナーシップを行う際に使用できる基本的なエンドポイントを提供しています。設定方法の詳細は以下をご覧ください。

基本

「API」タスクの作成

  1. クリック 「タスクを追加」.
  2. 選択 「Api」.
  3. 呼び出すエンドポイントと、必要に応じてAPIキーを定義します。
  4. ユーザーの識別方法を選択します。以下から選択できます: メール, Twitter, Discord, ウォレットアドレス、または Zealy Connect.
  • 選択した場合 ウォレット接続、使用するネットワークも選択できます。

新しいブロックチェーン

  • 選択した場合 Zealy Connect、次の手順に従ってください:

    1. リダイレクトURLを定義: このURLは認証に使用されます。ユーザーをこのURLにリダイレクトして、システムで認証させます。

    Zealy Connect APIタスク

    1. コミュニティシークレットを生成: コミュニティシークレットの生成は Zealy Connect が機能するために必要です。シークレットは Zealy Connect設定 の 統合セクション からコミュニティ設定で作成できます。

    コミュニティシークレット

APIの動作に関する詳細は、 APIドキュメント を参照し、Zealy Connectの管理については、 Zealy Connectドキュメント.

Dominoとの統合

DominoはWeb3のZapierです。Zealyの機能を拡張し、ネイティブでサポートされていないタスクを自動的にレビューできます。例:

  • ユーザーのTwitter名またはプロフィールに特定の単語が含まれているか確認
  • ユーザーのNFTとトークンの残高を確認
  • ユーザーがDiscordで特定の人数を招待したことを確認
  • など多数

統合については ドキュメント をご覧ください。

エンドポイントのテスト

エンドポイントを設定すると、エンドポイントが期待どおりに動作することを確認するために、次のテストが自動的に実行されます:

  1. 呼び出しが10秒を超えないことを確認
  2. エラーメッセージが正しい形式であることを確認し、ユーザーに表示できるようにする
  3. 予期しないステータスコードがないことを確認。エンドポイントは200または400のみを返す必要があります。

カスタムエンドポイントの作成

リクエスト

APIタスクは、次のボディを受け入れるカスタム POST エンドポイントで使用できます:

POST https://domain.com/endpoint
{
  /**
   * The user id on Zealy
   */
  userId: string;
  /**
   * Your community id on Zealy, if you use the endpoint
   * on multiple communities this might be useful
   */
  communityId: string;
  /**
   * Your community's subdomain on Zealy, if you use the endpoint
   * on multiple communities this might be useful
   */
  subdomain: string;
  /**
   * The id of the quest
   */
  questId: string;
  /**
   * This will be generated on every claim as a way to look up an error.
   * It will also be displayed for the user when a claim fails.
   */
  requestId: string;
  /**
   * Accounts will be sent if at least one identification method has been configured
   */
  accounts?: {
    /**
     * The user's email address
     */
    email?: string;
    /**
     * The user's Ethereum wallet address that he has authenticated with
     */
    wallet?: string;
    /**
     * The user's Discord id and handle
     */
    discord?: {
      id: string;
      handle: string;
    };
    /**
     * The user's Twitter id and username
     */
    twitter?: {
      id: string;
      username: string;
    };
    /**
     * Your platform user ID stored as part of the Zealy Connect integration
    */
    zealy-connect: string
  };
}

タスク作成時に設定されたAPIキーで保護できます。APIキーは次のようにヘッダーで送信されます:

Headers
{
  "X-Api-Key": apiKey,
}

レスポンス

ユーザーがアクションを正常に実行した場合、 200 ステータスを返す必要があります。ユーザーはタスクを正常にクレームできます。

RESPONSE 200
{
  "message": "User completed the action"
}

それ以外の場合は、 400 ステータスをレスポンスで返し、ボディにメッセージを含める必要があります。メッセージは生成された requestId とともに表示され、あなたとユーザーが問題をデバッグするのに役立ちます。できるだけ説明的にしてください。

RESPONSE 400
{
  "message": "We could not find a user with email kenny@zealy.io"
}

コード例

// server.js
//
// Use this sample code to handle quest verification in your endpoint.
//
// 1) Paste this code into a new file (server.js)
//
// 2) Install dependencies
//   npm install express
//
// 3) Run the server on http://localhost:3000
//   node server.js
 
const express = require('express');
const app = express();
 
const apiKey = '5888a6800dbac634e52d8504f097e064'; // Replace with your API key configured in Zealy task
 
app.post('/claim', express.raw({ type: 'application/json' }), (req, res) => {
  const payload = req.body;
  const headers = req.headers
 
  if (apiKey !== headers['x-api-key']) {
    throw new Error('Invalid API Key')
  }
 
 
  const success = true; // Replace with custom logic
 
  if (!success) {
    return res.status(400).send({
      message: 'Validation failed' // Replace with custom error message - will be displayed to the user
    })
  }
 
  return res.status(200).send({
    message: "Quest completed"
  })
});
 
app.listen(3000, () => console.log('Running on port 3000'));

ngrokを使用したローカルテスト

カスタムエンドポイントをローカルで開発およびテストする場合、ZealyがAPIリクエストを送信できるように、ローカルサーバーをインターネットに公開する方法が必要です。ngrokはlocalhostへの安全なトンネルを作成するツールで、この目的に最適です。ngrokを設定してエンドポイントをテストするには、次の手順に従ってください:

ステップ1: ngrokをインストール ngrokのウェブサイトからngrokをダウンロードします。 お使いのオペレーティングシステムのインストール手順に従ってください。

ステップ2: ngrokを設定 無料のngrokアカウントにサインアップし、ngrokダッシュボードからauthtokenを取得します。 ターミナルでngrok authtoken YOUR_AUTH_TOKENを実行してngrokアカウントを接続します。YOUR_AUTH_TOKENはngrokダッシュボードのトークンに置き換えてください。

ステップ3: ローカルサーバーを起動 エンドポイントをホストするローカルサーバーが実行されていることを確認します。たとえば、サーバーがNode.jsアプリの場合は、node server.jsを実行します。

ステップ4: ngrokでローカルサーバーを公開 新しいターミナルウィンドウを開き、 ngrok http http://127.0.0.1:3000を使用してローカルサーバーのポート(例: 3000)へのngrokトンネルを開始します。 ngrokはターミナルに転送URL(例: https://abc123.ngrok.io)を表示します。これはZealyがローカルサーバーにアクセスするために使用する公開URLです。

ステップ5: ZealyでAPIタスクを設定 ZealyでAPIタスクを設定する際に、ngrok転送URLをエンドポイントURLとして使用します。必要なパスを追加してください。例: https://abc123.ngrok.io/claim.

注意: ngrok URLは一時的であり、カスタムサブドメインをサポートする有料サブスクリプションがない限り、ngrokを再起動するたびに変更されます。ngrokを再起動するたびにZealyのエンドポイントを更新してください。

これらの手順に従うことで、本番サーバーにデプロイする前に、ローカル開発環境でカスタムエンドポイントを簡単にテストおよびデバッグできます。

Zealy Connect統合

Zealy Connectを使用する場合、タスク設定時に指定されたURLにユーザーをリダイレクトします。次のクエリパラメータを含めます:

  • zealyUserId: Zealyシステム内のユーザーの一意の識別子で、ユーザーをあなたのプラットフォームにリンクするために使用されます。
  • callback: 認証完了後にユーザーをリダイレクトしてタスクをクレームさせるためのURL。
  • signature: リクエストの信頼性を検証するために使用されるSHA-256ハッシュで、Zealyから発信されたことを保証します。

開始点として使用できる完全なエンドポイントの例を次に示します:

 
const YOUR_COMMUNITY_SECRET = "fdb68b155a1ccf2e636c7cd7e0816530"; // Replace with your secret generated in Settings > Integrations > Zealy Connect
 
app.get("/connect", (req, res) => {
  // Extract the query parameters
  const { zealyUserId, signature, callbackUrl } = req.query;
 
  /**
   * Verifying signature to ensure the request is coming from Zealy
   */
  const fullUrl = new URL(
    `${req.protocol}://${req.get("host")}${req.originalUrl}`
  );
  fullUrl.searchParams.delete("signature");
 
  const hmac = crypto.createHmac("sha256", YOUR_COMMUNITY_SECRET);
  hmac.update(fullUrl.toString());
  const generatedSignature = hmac.digest("hex");
 
  if (generatedSignature !== signature){
    return res.status(400).send("Invalid signature");
  }
 
  /**
   * Redirect to login if the user is not authenticated
   */
  if (!req.session.user) {
    res.redirect(`/login?redirect=${encodeURIComponent(req.originalUrl)}`); // Redirect back after the user logs in
  }
 
  /**
   * Save the Zealy User ID (optional)
  */
  // await updateUser(req.session.user.id, { zealyId: zealyUserId });
 
 
  /**
   * Redirect Back to Zealy
   */
  const userId = req.session.user.id; // Replace with your platform user ID
 
  const callbackWithParams = new URL(callbackUrl as string);
  callbackWithParams.searchParams.append("identifier", userId);
 
  const hmac = crypto.createHmac("sha256", YOUR_COMMUNITY_SECRET);
  hmac.update(callbackWithParams.toString());
  const callbackSignature = hmac.digest("hex");
 
  callbackWithParams.searchParams.append("signature", callbackSignature);
 
  res.redirect(callbackWithParams.toString());
});

1. 署名の検証

アプリケーションが最初に行うべきことは、コミュニティシークレットを使用して署名を検証することです。この検証により、呼び出しが本当に当社から発信され、変更されていないことが保証されます。

署名の生成にはSHA256ハッシュアルゴリズムを使用します。検証には次の方法を使用できます:

const fullUrl = new URL(
  `${req.protocol}://${req.get("host")}${req.originalUrl}`
);
fullUrl.searchParams.delete("signature");
 
const hmac = crypto.createHmac("sha256", YOUR_COMMUNITY_SECRET);
hmac.update(fullUrl.toString());
const generatedSignature = hmac.digest("hex");
 
const isSignatureValid = generatedSignature === req.query.signature;

2. Zealy User IDを使用する

次のステップは実行したい内容によって異なりますが、通常は顧客がプラットフォーム上で現在のユーザーをログインさせ、プラットフォームのユーザーIDをZealy User IDとリンクします。以下は例です:

  /**
   * Redirect to login if the user is not authenticated
   */
  if (!req.session.user) {
    res.redirect(`/login?redirect=${encodeURIComponent(req.originalUrl)}`); // Redirect back after the user logs in
  }
 
  /**
   * Save the Zealy User ID (optional)
  */
  // await updateUser(req.session.user.id, { zealyId: zealyUserId });
 

3. Zealyにリダイレクトして戻す

最後のステップは、提供するcallbackクエリパラメータを使用して、プラットフォームのユーザーIDを付けてユーザーをZealyにリダイレクトして戻すことです。これにより、ユーザーがタスクをクレームできるようになります。また、呼び出しがあなたからのものであり改変されていないことを検証できるよう、署名を生成する必要があります。以下の例を参照してください:

const callbackWithParams = new URL(callbackUrl as string);
callbackWithParams.searchParams.append("identifier", connectedUserId); // Set it to your platform user ID
 
const hmac = crypto.createHmac("sha256", YOUR_COMMUNITY_SECRET);
hmac.update(callbackWithParams.toString());
const callbackSignature = hmac.digest("hex");
 
callbackWithParams.searchParams.append("signature", callbackSignature);
 
res.redirect(callbackWithParams.toString());

4. Zealy

コールバックを受信すると、署名を検証し、プラットフォームのユーザーIDを保存して、APIタスクのボディの一部として送信できるようにします。

これでユーザーは、このタスクおよび同じリダイレクトURLを使用するZealy Connectを利用する他のタスクをクレームできるようになります。ユーザーがタスクごとに接続する必要がないよう、これを記憶します。

ユーザーのZealy Connectの関連付けを削除する必要がある場合は、次を使用できます: Delete Zealy Connect for Member APIルート。このルートでは、特定のメンバーのZealy Connectの関連付けを削除できます。このルートを呼び出した後、ユーザーはZealy Connectの機能を再度使用するためにアカウントを再接続する必要があります。

FAQ