API接続
外部APIをenuchatに接続し、AIとルールがシステムからリアルタイムデータを取得できるようにします。
仕組み
API接続により、enuchatを予約エンジン、CRM、注文管理、在庫管理などのバックエンドシステムと統合できます。訪問者が質問すると、enuchatがAPIを呼び出して実際のデータを取得し、回答に含めることができます。
フロー
- 接続を設定 — APIのベースURLと認証
- エンドポイントを追加 — パステンプレートとレスポンスマッピングを持つ特定のAPI呼び出し
- ルールを作成 — CALL_APIアクションを持つAIまたはスタティックルール
- 訪問者が質問 — ルールがトリガーされ、APIを呼び出し、レスポンスをセッション変数にマッピング
- AIが実データで回答 — セッション変数がAIの正確な回答生成に利用可能
例:ホテルの客室空き状況
訪問者:「205号室は来週空いていますか?」
AIルールがマッチ:「訪問者が客室の空き状況について質問したとき」
CALL_APIアクション: GET https://api.hotel.com/rooms/205/availability
レスポンスマッピング: room_available = true、price = 「€120/泊」
AI回答:「205号室は来週、1泊€120でご利用いただけます。ご予約されますか?」
接続のセットアップ
ダッシュボードの設定 → API接続に移動してください。
1. 接続を作成
接続は1つの外部APIを表します。必要なもの:
| フィールド | 説明 | 例 |
|---|---|---|
| 名前 | この接続のラベル | ホテル予約API |
| ベースURL | APIのルートURL | https://api.hotel.com/v1 |
| 認証タイプ | 認証方法 | Bearerトークン、OAuth2など |
2. 認証タイプ
なし
認証不要の公開API向け。
APIキー
ヘッダーまたはクエリパラメータとして静的キーを送信。
| フィールド | 説明 |
|---|---|
| キー | APIキーの値 |
| ヘッダー名 | 使用するヘッダー(デフォルト:X-Api-Key) |
キーは次のように送信されます:X-Api-Key: your_key_here
Bearerトークン
Authorizationヘッダーに静的トークンを送信。
次のように送信されます:Authorization: Bearer your_token_here
Basic認証
ユーザー名とパスワードをbase64エンコードして送信。
次のように送信されます:Authorization: Basic dXNlcjpwYXNz
OAuth 2.0(クライアントクレデンシャル)
アクセストークンを自動的に取得し、期限切れまでキャッシュ。Salesforce、Google、カスタムOAuthサーバーなどの最新のAPIに最適。
| フィールド | 説明 |
|---|---|
| トークンURL | OAuthトークンエンドポイント(例:https://auth.example.com/oauth/token) |
| クライアントID | OAuthクライアントID |
| クライアントシークレット | OAuthクライアントシークレット |
| スコープ | スペース区切りのスコープ(例:read write) |
enuchatはトークンのライフサイクルを自動的に処理します — 最初の呼び出しで取得、期限切れまでキャッシュ、必要に応じて更新。
セキュリティ:すべての認証情報はlibsodiumを使用して保存時に暗号化されます。APIレスポンスでは決して公開されません — ダッシュボードではマスクされた値のみ表示されます。
エンドポイントの設定
各接続には複数のエンドポイントを設定できます — 実行したい特定のAPI呼び出しです。
| フィールド | 説明 | 例 |
|---|---|---|
| 名前 | このエンドポイントのラベル | 空き状況確認 |
| メソッド | HTTPメソッド | GET、POST、PUT、DELETE |
| パス | URLパス(ベースURLに追加)。動的値には{'{'}variable}を使用 | /rooms/{'{'}roomId}/availability |
| クエリパラメータ | キーと値のペアとしてのURLパラメータ。値は{'{'}variable}をサポート | date={'{'}checkIn} |
| ボディテンプレート | POST/PUT用のJSONボディ。{'{'}variable}の補間をサポート | {'{'}"guest": "{'{'}name}"} |
| レスポンスマッピング | ドット記法でJSONレスポンスフィールドをセッション変数にマッピング | data.available → room_available |
| 説明 | AI用のコンテキスト(このエンドポイントが返すデータ) | 客室の空き状況と料金を返します |
変数の補間
パス、クエリパラメータ、ボディテンプレートで{'{'}variableName}を使用。変数の出所:
- セッション変数 — 以前のルール(SET_VARIABLEアクション)で設定
- アクションパラメータ — CALL_APIルールアクションでハードコード
レスポンスマッピング
ドット記法でJSONレスポンスフィールドをセッション変数にマッピング:
// APIが返す:
{'{'}
"data": {'{'}
"available": true,
"price": {'{'} "amount": 120, "currency": "EUR" }
}
}
// マッピング:
data.available → room_available // "true"
data.price.amount → room_price // "120"
data.price.currency → room_currency // "EUR"マッピングされた変数は会話のセッション変数として保存され、AIの回答生成に利用できます。
ルールとの使用
API呼び出しはルールのCALL_APIアクションでトリガーされます。他のアクションと組み合わせることができます。
レシピ:注文ステータスの検索
接続:注文管理API — https://api.shop.com/v2 — Bearerトークン
エンドポイント: GET /orders/{'{'}orderId} → data.status → order_status、data.eta → delivery_etaにマッピング
ルール(AIタイプ):「訪問者が注文ステータスや配送について質問したとき」
アクション:
- CALL_API → 注文ステータスエンドポイント
- REPLY_AI → AIが
order_statusとdelivery_etaを使って応答
結果:訪問者:「注文#4521はどこですか?」 — AI:「注文#4521は現在発送中で、木曜日までにお届け予定です。」
レシピ:リアルタイム料金
接続:料金API — https://pricing.example.com — APIキー
エンドポイント: GET /products/{'{'}productId}/price → price → current_price、currency → price_currencyにマッピング
ルール(スタティック): MESSAGE_MATCHES_REGEX: /\b(price|cost|how much)\b/i
アクション:
- CALL_API → 料金エンドポイント
- REPLY_TEXT → 「現在の価格は{'{'}current_price} {'{'}price_currency}です。」
テスト
ルールで使用する前に、接続とエンドポイントを必ずテストしてください:
- 接続をテスト — 認証が動作するか確認(OAuth2の場合:トークンを取得)
- エンドポイントをテスト — サンプル変数で実際のAPI呼び出しを行い、レスポンスを表示
- ルールをテスト(ドライラン) — ルールページで、ルールがマッチするかどうかとどのアクションが実行されるかをテスト
ヒント:まず接続をテストし、次に各エンドポイント、最後に完全なルールをテストしてください。これにより、各レベルで問題を特定できます。
セキュリティ
- 保存時の暗号化 — すべての認証情報は保存前にlibsodiumで暗号化
- 非公開 — APIレスポンスに復号化された認証情報は含まれず、マスクされた値のみ
- SSRF保護 — enuchatはlocalhost、プライベートIP、内部ホスト名への呼び出しをブロック
- タイムアウト — 外部API呼び出しにはハングを防ぐ5秒のタイムアウト
- OAuth2トークンキャッシュ — アクセストークンは安全にキャッシュされ、自動的に更新
- テナント分離 — 接続はテナントにスコープされ、他者からアクセス不可