クイック スタート (プラグインは初めてですか?)
プラグインは、OpenClaw を拡張する単なる 小さなコード モジュールです。 機能 (コマンド、ツール、ゲートウェイ RPC)。 ほとんどの場合、構築されていない機能が必要な場合はプラグインを使用します。 まだコア OpenClaw に取り入れていない (または、オプションの機能をメインの機能から外したい場合) インストールします)。 高速パス:- すでにロードされているものを確認します。
- 公式プラグインをインストールします (例: 音声通話)。
@latest は安定した軌道を維持します。 npm が次のいずれかを解決する場合
これらをプレリリースにすると、OpenClaw が停止し、明示的にオプトインするように求められます。
@beta/@rc などのプレリリース タグ、または正確なプレリリース バージョン。
- ゲートウェイを再起動し、
plugins.entries.<id>.configで設定します。
利用可能なプラグイン (公式)- Microsoft Teams は 2026.1.15 の時点でプラグインのみです。 Teams を使用している場合は、@openclaw/msteams をインストールします
- メモリ (コア) — バンドルされたメモリ検索プラグイン (
plugins.slots.memory経由でデフォルトで有効) - メモリ (LanceDB) — バンドルされた長期記憶プラグイン (自動呼び出し/キャプチャ、
plugins.slots.memory = "memory-lancedb"を設定) - 音声通話 —
@openclaw/voice-call - Zalo 個人 —
@openclaw/zalouser - マトリックス —
@openclaw/matrix - Nostr —
@openclaw/nostr - ザロ —
@openclaw/zalo - Microsoft Teams —
@openclaw/msteams - Google Antigravity OAuth (プロバイダー認証) —
google-antigravity-authとしてバンドルされています (デフォルトでは無効) - Gemini CLI OAuth (プロバイダー認証) —
google-gemini-cli-authとしてバンドルされています (デフォルトでは無効) - Qwen OAuth (プロバイダー認証) —
qwen-portal-authとしてバンドルされています (デフォルトでは無効) - Copilot プロキシ (プロバイダー認証) — ローカル VS Code Copilot プロキシ ブリッジ。組み込みの
github-copilotデバイス ログインとは異なります (バンドルされており、デフォルトで無効になっています)
- ゲートウェイ HTTP ルート
- エージェントツール
- CLIコマンド
- バックグラウンドサービス
- コンテキストエンジン
- オプションの構成検証
- スキル (プラグイン マニフェストに
skillsディレクトリをリストすることによる) - 自動応答コマンド (AI エージェントを呼び出さずに実行)
ランタイムヘルパー
プラグインは、api.runtime を介して選択されたコア ヘルパーにアクセスできます。テレフォニー TTS の場合:
- コア
messages.tts構成 (OpenAI または イレブンラボ) を使用します。 - PCM オーディオ バッファ + サンプル レートを返します。プラグインはプロバイダー用にリサンプリング/エンコードする必要があります。
- Edge TTS はテレフォニーではサポートされていません。
- コアメディア理解オーディオ構成 (
tools.media.audio) とプロバイダーのフォールバック順序を使用します。 - 文字起こし出力が生成されない場合 (スキップされた/サポートされていない入力など)、
{ text: undefined }を返します。
ゲートウェイ HTTP ルート
プラグインはapi.registerHttpRoute(...) を使用して HTTP エンドポイントを公開できます。
path: ゲートウェイ HTTP サーバーの下のルート パス。
auth: 必須。通常のゲートウェイ認証を要求するには"gateway"を使用し、プラグイン管理の認証/Webhook 検証には"plugin"を使用します。match: オプション。"exact"(デフォルト) または"prefix"。replaceExisting: オプション。同じプラグインが自身の既存のルート登録を置き換えることを許可します。handler: ルートがリクエストを処理したときにtrueを返します。
api.registerHttpHandler(...)は廃止されました。api.registerHttpRoute(...)を使用してください。- プラグイン ルートは
authを明示的に宣言する必要があります。 replaceExisting: trueを除き、正確なpath + matchの競合は拒否され、あるプラグインが別のプラグインのルートを置き換えることはできません。authレベルが異なる重複するルートは拒否されます。exact/prefixフォールスルー チェーンは同じ認証レベルでのみ保持してください。
プラグイン SDK インポート パス
次の場合は、モノリシックopenclaw/plugin-sdk インポートの代わりに SDK サブパスを使用してください。
オーサリングプラグイン:- openclaw/plugin-sdk/core は、汎用プラグイン API、プロバイダー認証タイプ、および共有ヘルパー用です。
openclaw/plugin-sdk/compatは、coreよりも広範な共有ランタイム ヘルパーを必要とするバンドル/内部プラグイン コード用です。openclaw/plugin-sdk/telegramテレグラム チャネル プラグイン用。openclaw/plugin-sdk/discordDiscord チャンネル プラグイン用。openclaw/plugin-sdk/slackSlack チャネル プラグイン用。openclaw/plugin-sdk/signalシグナルチャンネルプラグイン用。openclaw/plugin-sdk/imessageiMessage チャネル プラグイン用。openclaw/plugin-sdk/whatsappWhatsApp チャネル プラグイン用。openclaw/plugin-sdk/lineLINE チャネル プラグイン用。openclaw/plugin-sdk/msteamsバンドルされた Microsoft Teams プラグイン サーフェス用。- バンドルされた拡張機能固有のサブパスも利用できます。
openclaw/plugin-sdk/acpx、openclaw/plugin-sdk/bluebubbles、openclaw/plugin-sdk/copilot-proxy、openclaw/plugin-sdk/device-pair、openclaw/plugin-sdk/diagnostics-otel、openclaw/plugin-sdk/diffs、openclaw/plugin-sdk/feishu、openclaw/plugin-sdk/google-gemini-cli-auth、openclaw/plugin-sdk/googlechat、openclaw/plugin-sdk/irc、openclaw/plugin-sdk/llm-task、openclaw/plugin-sdk/lobster、openclaw/plugin-sdk/matrix、openclaw/plugin-sdk/mattermost、openclaw/plugin-sdk/memory-core、openclaw/plugin-sdk/memory-lancedb、openclaw/plugin-sdk/minimax-portal-auth、openclaw/plugin-sdk/nextcloud-talk、openclaw/plugin-sdk/nostr、openclaw/plugin-sdk/open-prose、openclaw/plugin-sdk/phone-control、openclaw/plugin-sdk/qwen-portal-auth、openclaw/plugin-sdk/synology-chat、openclaw/plugin-sdk/talk-voice、openclaw/plugin-sdk/test-utils、openclaw/plugin-sdk/thread-ownership、openclaw/plugin-sdk/tlon、openclaw/plugin-sdk/twitch、openclaw/plugin-sdk/voice-call、openclaw/plugin-sdk/zalo、およびopenclaw/plugin-sdk/zalouser。
openclaw/plugin-sdk は、既存の外部プラグインに対して引き続きサポートされます。
- 新しいバンドル プラグインと移行されたバンドル プラグインは、チャネルまたは拡張機能固有のプラグインを使用する必要があります
サブパス;一般的なサーフェスには
coreを使用し、より広い場合にのみcompatを使用します 共有ヘルパーが必要です。
読み取り専用チャネル検査
プラグインがチャンネルを登録する場合は、実装することを優先します。plugin.config.inspectAccount(cfg, accountId) を resolveAccount(...) と並べます。
理由:
resolveAccount(...)はランタイム パスです。資格情報を仮定することが許可されています は完全に実体化されており、必要なシークレットが欠落している場合はすぐに失敗する可能性があります。openclaw status、openclaw status --all、などの読み取り専用コマンド パスopenclaw channels status、openclaw channels resolve、およびドクター/構成 修復フローでは、実行時資格情報を具体化する必要はありません。 構成を説明します。
inspectAccount(...) 動作:- 説明的なアカウント状態のみを返します。
enabledとconfiguredを保存します。- 関連する場合、次のような認証情報ソース/ステータス フィールドを含めます。
tokenSource、tokenStatusbotTokenSource、botTokenStatusappTokenSource、appTokenStatussigningSecretSource、signingSecretStatus
- 読み取り専用をレポートするためだけに生のトークン値を返す必要はありません
可用性。
tokenStatus: "available"(および一致するソース) を返します フィールド) は、ステータス形式のコマンドには十分です。 - 資格情報が SecretRef 経由で設定されている場合は、
configured_unavailableを使用しますが、 現在のコマンド パスでは使用できません。
- プラグインの検出とマニフェストのメタデータは、短いインプロセス キャッシュを使用して、 急激な起動/リロード作業。
OPENCLAW_DISABLE_PLUGIN_DISCOVERY_CACHE=1を設定するか、OPENCLAW_DISABLE_PLUGIN_MANIFEST_CACHE=1を使用してこれらのキャッシュを無効にします。OPENCLAW_PLUGIN_DISCOVERY_CACHE_MSを使用してキャッシュ ウィンドウを調整し、OPENCLAW_PLUGIN_MANIFEST_CACHE_MS。
発見と優先順位
OpenClaw は次の順序でスキャンします。- 構成パス
plugins.load.paths(ファイルまたはディレクトリ)
- ワークスペース拡張機能
<workspace>/.openclaw/extensions/*.ts<workspace>/.openclaw/extensions/*/index.ts
- グローバル拡張機能
~/.openclaw/extensions/*.ts~/.openclaw/extensions/*/index.ts
- バンドルされた拡張機能 (OpenClaw に同梱されていますが、デフォルトではほとんどが無効になっています)
<openclaw>/extensions/*バンドルされているほとんどのプラグインは、次の方法で明示的に有効にする必要があります。plugins.entries.<id>.enabledまたはopenclaw plugins enable <id>。
device-pairphone-controltalk-voice- アクティブ メモリ スロット プラグイン (デフォルト スロット:
memory-core)
plugins.allowが空で、バンドルされていないプラグインが検出可能な場合、OpenClaw はプラグイン ID とソースを含む起動警告をログに記録します。- 候補パスは、検出許可の前に安全性がチェックされます。 OpenClaw は、次の場合に候補をブロックします。
- 拡張エントリはプラグイン ルートの外側で解決されます (シンボリックリンク/パス トラバーサル エスケープを含む)。
- プラグインのルート/ソース パスは誰でも書き込み可能です。
- バンドルされていないプラグインのパスの所有権は疑わしい (POSIX 所有者は現在の uid でも root でもない)。
- インストール/ロードパスの出自を持たずにロードされたバンドルされていないプラグインは警告を発するため、信頼を固定するか (
plugins.allow)、またはインストール追跡を行うことができます (plugins.installs)。
openclaw.plugin.json ファイルが含まれている必要があります。パスの場合
ファイルを指す場合、プラグインのルートはファイルのディレクトリであり、
マニフェストします。
複数のプラグインが同じ ID に解決される場合、上記の順序で最初に一致するプラグイン
優先順位の低いコピーは無視されます。
パッケージパック
プラグイン ディレクトリには、package.json と openclaw.extensions が含まれる場合があります。
~/.openclaw/mpm/plugins.json~/.openclaw/mpm/catalog.json~/.openclaw/plugins/catalog.json
OPENCLAW_PLUGIN_CATALOG_PATHS (または OPENCLAW_MPM_CATALOG_PATHS) を指定してください
1 つ以上の JSON ファイル (カンマ/セミコロン/PATH 区切り)。各ファイルは、
{ "entries": [ { "name": "@scope/pkg", "openclaw": { "channel": {...}, "install": {...} } } ] } が含まれています。
プラグイン ID
デフォルトのプラグイン ID:- パッケージ パック:
package.jsonname - スタンドアロン ファイル: ファイル ベース名 (
~/.../voice-call.ts→voice-call)プラグインがidをエクスポートする場合、OpenClaw はそれを使用しますが、それが 設定されたID。
構成
enabled: マスター切り替え (デフォルト: true)allow: 許可リスト (オプション)deny: 拒否リスト (オプション、拒否が優先)load.paths: 追加のプラグイン ファイル/ディレクトリslots:memoryやcontextEngineなどの排他的スロット セレクターentries.<id>: プラグインごとの切り替え + 設定
entries、allow、deny、またはslotsの不明なプラグイン ID は エラーです。- プラグイン マニフェストで宣言されていない限り、不明な
channels.<id>キーは エラー チャンネルID。 - プラグイン設定は、に埋め込まれた JSON スキーマを使用して検証されます。
openclaw.plugin.json(configSchema)。 - プラグインが無効になっている場合、その構成は保存され、警告が発行されます。
プラグイン スロット (排他的なカテゴリ)
一部のプラグイン カテゴリは 排他的です (一度に 1 つだけアクティブになります)。使用するplugins.slots でスロットを所有するプラグインを選択します。
memory: アクティブなメモリ プラグイン ("none"はメモリ プラグインを無効にします)contextEngine: アクティブなコンテキスト エンジン プラグイン ("legacy"は組み込みのデフォルトです)複数のプラグインがkind: "memory"またはkind: "context-engine"を宣言している場合のみ、 選択したプラグインがそのスロットにロードされます。その他は診断により無効になります。
コンテキスト エンジン プラグイン
コンテキスト エンジン プラグインは、取り込み、アセンブリ、 そして圧縮。プラグインからそれらを登録しますapi.registerContextEngine(id, factory)、次にアクティブなエンジンを選択します
plugins.slots.contextEngine。
プラグインがデフォルトのコンテキストを置換または拡張する必要がある場合にこれを使用します。
単にメモリ検索やフックを追加するのではなく、パイプラインを作成します。
コントロール UI (スキーマ + ラベル)
コントロール UI は、config.schema (JSON スキーマ + uiHints) を使用して、より適切なフォームをレンダリングします。
OpenClaw は、検出されたプラグインに基づいて実行時に uiHints を拡張します。
plugins.entries.<id>/.enabled/.configのプラグインごとのラベルを追加します。- プラグインが提供するオプションの設定フィールドのヒントを以下にマージします。
plugins.entries.<id>.config.<field>
uiHints を指定します。
例:
CLI
plugins update は、plugins.installs で追跡される npm インストールに対してのみ機能します。
保存されている整合性メタデータが更新間で変更されると、OpenClaw は警告を発し、確認を求めます (プロンプトをバイパスするには、グローバル --yes を使用します)。プラグインは独自の最上位コマンドを登録することもできます (例: openclaw voicecall)。
プラグイン API (概要)
プラグインは次のいずれかをエクスポートします。- 関数:
(api) => { ... } - オブジェクト:
{ id, name, configSchema, register(api) { ... } }
プラグインフック
プラグインは実行時にフックを登録できます。これにより、プラグインがイベント駆動型でバンドルできるようになります。 個別のフック パックをインストールすることなく自動化できます。例
api.registerHook(...)を介してフックを明示的に登録します。- フック適格性ルールは引き続き適用されます (OS/bins/env/config 要件)。
- プラグイン管理のフックは
openclaw hooks listとplugin:<id>に表示されます。 openclaw hooksを介してプラグイン管理のフックを有効/無効にすることはできません。代わりにプラグインを有効/無効にします。
エージェントのライフサイクル フック (api.on)
型指定されたランタイム ライフサイクル フックの場合は、api.on(...) を使用します。
before_model_resolve: セッションのロード前に実行されます (messagesは使用できません)。これを使用して、modelOverrideまたはproviderOverrideを決定的にオーバーライドします。before_prompt_build: セッションのロード後に実行されます (messagesが利用可能です)。これを使用してプロンプト入力を整形します。before_agent_start: 従来の互換性フック。上記の 2 つの明示的なフックを推奨します。
plugins.entries.<id>.hooks.allowPromptInjection: false を介してプラグインごとにプロンプト変更フックを無効にすることができます。
- 無効にすると、OpenClaw は
before_prompt_buildをブロックし、従来のmodelOverrideおよびproviderOverrideを保持しながら、従来のbefore_agent_startから返されたプロンプト変更フィールドを無視します。
before_prompt_build 結果フィールド:
prependContext: この実行のユーザー プロンプトの先頭にテキストを追加します。ターン固有のコンテンツや動的なコンテンツに最適です。systemPrompt: 完全なシステム プロンプト オーバーライド。prependSystemContext: 現在のシステム プロンプトの先頭にテキストを追加します。appendSystemContext: 現在のシステム プロンプトにテキストを追加します。
prependContextをユーザー プロンプトに適用します。systemPromptオーバーライドが指定されている場合は、それを適用します。prependSystemContext + current system prompt + appendSystemContextを適用します。
- フック ハンドラーは優先順位に従って実行されます (高い順)。
- マージされたコンテキスト フィールドの場合、値は実行順序で連結されます。
before_prompt_build値は、従来のbefore_agent_startフォールバック値の前に適用されます。
- プロバイダーが安定したシステム プレフィックス コンテンツをキャッシュできるように、静的ガイダンスを
prependContextからprependSystemContext(またはappendSystemContext) に移動します。 - ユーザー メッセージに関連付けられたままにするターンごとの動的コンテキスト用に
prependContextを保持します。
プロバイダープラグイン (モデル認証)プラグインは モデル プロバイダー認証 フローを登録できるため、ユーザーは OAuth または
OpenClaw 内での API キーのセットアップ (外部スクリプトは必要ありません)。api.registerProvider(...) を通じてプロバイダーを登録します。各プロバイダーは 1 つを公開します
または複数の認証方法 (OAuth、API キー、デバイス コードなど)。これらのメソッドにより次のことが可能になります。
openclaw models auth login --provider <id> [--method <id>]
runは、prompter、runtimeを含むProviderAuthContextを受け取ります。openUrlおよびoauth.createVpsAwareHandlersヘルパー。- デフォルトのモデルまたはプロバイダー構成を追加する必要がある場合は、
configPatchを返します。 --set-defaultがエージェントのデフォルトを更新できるように、defaultModelを返します。
メッセージング チャネルを登録する
プラグインは、組み込みチャンネルのように動作する チャンネル プラグイン を登録できます (WhatsApp、Telegramなど)。チャネル構成はchannels.<id> の下にあり、
チャンネルプラグインコードによって検証されます。
- 構成を
channels.<id>(plugins.entriesではありません) の下に置きます。 meta.labelは、CLI/UI リストのラベルに使用されます。meta.aliasesは、正規化および CLI 入力用の代替 ID を追加します。meta.preferOverは、両方が設定されている場合に自動有効化をスキップするチャネル ID をリストします。meta.detailLabelおよびmeta.systemImageにより、UI に豊富なチャンネル ラベル/アイコンが表示されます。
チャネルオンボーディングフック
チャネル プラグインは、plugin.onboarding でオプションのオンボーディング フックを定義できます。- configure(ctx) は、ベースラインのセットアップ フローです。
configureInteractive(ctx)は、構成済み状態と未構成状態の両方の対話型セットアップを完全に所有できます。configureWhenConfigured(ctx)は、すでに構成されているチャネルの動作のみをオーバーライドできます。
configureInteractive(存在する場合)configureWhenConfigured(チャネルステータスがすでに構成されている場合のみ)configureへのフォールバック
configureInteractiveおよびconfigureWhenConfiguredは以下を受け取ります。configured(trueまたはfalse)label(プロンプトで使用されるユーザー向けチャネル名)- 共有設定/ランタイム/プロンプター/オプション フィールドに加えて
"skip"を返すと、選択とアカウント追跡は変更されません。{ cfg, accountId? }を返すと、構成の更新が適用され、アカウントの選択が記録されます。
新しいメッセージング チャネルを作成する (ステップバイステップ)
モデル プロバイダーではなく、新しいチャット サーフェス (「メッセージング チャネル」) が必要な場合にこれを使用します。 モデル プロバイダーのドキュメントは/providers/* の下にあります。
- ID と構成の形状を選択します
- すべてのチャネル構成は
channels.<id>の下に存在します。 - マルチアカウント設定には
channels.<id>.accounts.<accountId>を推奨します。
- チャネルメタデータを定義する-
meta.label、meta.selectionLabel、meta.docsPath、meta.blurbは CLI/UI リストを制御します。
meta.docsPathは、/channels/<id>のようなドキュメント ページを指す必要があります。meta.preferOverにより、プラグインが別のチャンネルを置き換えることができます (自動有効化が優先されます)。meta.detailLabelおよびmeta.systemImageは、詳細テキスト/アイコンの UI によって使用されます。
- 必要なアダプターを実装する
config.listAccountIds+config.resolveAccountcapabilities(チャットの種類、メディア、スレッドなど)outbound.deliveryMode+outbound.sendText(基本送信用)
- 必要に応じてオプションのアダプターを追加します
setup(ウィザード)、security(DM ポリシー)、status(ヘルス/診断)gateway(開始/停止/ログイン)、mentions、threading、streamingactions(メッセージ アクション)、commands(ネイティブ コマンド動作)
- プラグインにチャンネルを登録します
api.registerChannel({ plugin })
plugins.load.paths) をロードし、ゲートウェイを再起動します。
次に、構成で channels.<id> を構成します。
エージェントツール
専用ガイドを参照してください: プラグイン エージェント ツール。ゲートウェイ RPC メソッドを登録する
CLI コマンドを登録する
自動応答コマンドを登録するプラグインは、** を呼び出さずに実行するカスタム スラッシュ コマンドを登録できます
AI エージェント**。これは、コマンドの切り替え、ステータス チェック、またはクイック アクションに便利です。 LLM 処理は必要ありません。senderId: 送信者の ID (利用可能な場合)channel: コマンドが送信されたチャネルisAuthorizedSender: 送信者が承認されたユーザーかどうかargs: コマンドの後に渡される引数 (acceptsArgs: trueの場合)commandBody: コマンドの全文config: 現在の OpenClaw 構成
name: コマンド名 (先頭の/を除く)nativeNames: スラッシュ/メニュー サーフェイスのオプションのネイティブ コマンド エイリアス。すべてのネイティブ プロバイダーにはdefaultを使用するか、discordのようなプロバイダー固有のキーを使用します。description: コマンド リストに表示されるヘルプ テキストacceptsArgs: コマンドが引数を受け入れるかどうか (デフォルト: false)。 false で引数が指定されている場合、コマンドは一致せず、メッセージは他のハンドラーに渡されます。requireAuth: 承認された送信者を要求するかどうか (デフォルト: true)handler:{ text: string }を返す関数 (非同期可能)
- コマンドはグローバルに登録され、すべてのチャネルで機能します
- コマンド名は大文字と小文字を区別しません (
/MyStatusは/mystatusと一致します) - コマンド名は文字で始まり、文字、数字、ハイフン、アンダースコアのみを含む必要があります
- 予約されたコマンド名 (
help、status、resetなど) はプラグインによってオーバーライドできません - プラグイン間でコマンドを重複して登録すると、診断エラーが発生して失敗します。
バックグラウンド サービスを登録する
命名規則
- ゲートウェイメソッド:
pluginId.action(例:voicecall.status) - ツール:
snake_case(例:voice_call) - CLI コマンド: kebab または Camel、ただしコア コマンドとの衝突を避ける
スキル
プラグインはリポジトリ (skills/<name>/SKILL.md) でスキルを出荷できます。
plugins.entries.<id>.enabled (または他の構成ゲート) でそれを有効にし、
ワークスペース/マネージド スキルの場所に存在します。
配布 (npm)
推奨梱包:- メインパッケージ:
openclaw(このリポジトリ) - プラグイン:
@openclaw/*の下の個別の npm パッケージ (例:@openclaw/voice-call)
package.json には、1 つ以上のエントリ ファイルを含む openclaw.extensions が含まれている必要があります。
- エントリ ファイルは
.jsまたは.tsです (jiti は実行時に TS をロードします)。 openclaw plugins install <npm-spec>はnpm packを使用し、~/.openclaw/extensions/<id>/に抽出し、構成で有効にします。- 構成キーの安定性: スコープ付きパッケージは、
plugins.entries.*の スコープ外 ID に正規化されます。
プラグインの例: 音声通話
このリポジトリには、音声通話プラグイン (Twilio またはログ フォールバック) が含まれています。- 出典:
extensions/voice-call - スキル:
skills/voice-call - CLI:
openclaw voicecall start|status - ツール:
voice_call - RPC:
voicecall.start、voicecall.status - 構成 (twilio):
provider: "twilio"+twilio.accountSid/authToken/from(オプションのstatusCallbackUrl、twimlUrl) - 構成 (開発):
provider: "log"(ネットワークなし)
extensions/voice-call/README.md を参照してください。
安全上の注意事項
プラグインはゲートウェイとインプロセスで実行されます。それらを信頼できるコードとして扱います。- 信頼できるプラグインのみをインストールしてください。
plugins.allow許可リストを優先します。- 変更後にゲートウェイを再起動します。
プラグインのテスト
プラグインはテストを配布できます (そしてそうすべきです):- リポジトリ内プラグインは、Vitest テストを
src/**の下に保持できます (例:src/plugins/voice-call.plugin.test.ts)。 - 別途公開されたプラグインは、独自の CI (lint/build/test) を実行し、ビルドされたエントリポイント (
dist/index.js) でopenclaw.extensionsポイントを検証する必要があります。