> ## Documentation Index
> Fetch the complete documentation index at: https://docs.therefrain.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 承認と通知

> Slack・Teams・Discord でステップ承認と完了通知を設定します。

## 概要

Refrain は 2 つのメッセージング機能を提供します。

* **承認** — `requiresConfirmation: true` が設定されたステップの実行前に、承認 / スキップ / 中止ボタン付きのメッセージをチームチャンネルに投稿します。誰かが応答するまで実行は一時停止します。
* **通知** — 実行完了後に、成功/失敗件数、実行時間、失敗ステップの詳細を含むサマリーカードを送信します。

<Note>
  Slack/Teams/Discord を使った HITL 承認には [Business 以上](/ja/concepts/plan-tiers)のプランが必要です。通知には [Team 以上](/ja/concepts/plan-tiers)が必要です。
</Note>

## 承認ワークフロー

`requiresConfirmation: true` のステップでは、エグゼキュータが：

1. 設定されたチャンネルにステップ詳細とリスクレベルを含むカードメッセージを送信
2. 実行を一時停止して応答を待機
3. 応答に基づいて再開：
   * **承認** — ステップを実行
   * **スキップ** — ステップをスキップして続行
   * **中止** — 実行全体を停止

デフォルトのタイムアウトは 5 分です。応答がない場合、実行は中止されます。

## 通知

実行完了後（成功・失敗問わず）にサマリーカードが投稿されます：

* 合計ステップ数、成功数、失敗数、スキップ数
* 実行時間
* 失敗ステップの詳細（ある場合）

通知の失敗は警告としてログに記録されますが、終了コードには影響しません。

## プラットフォーム設定

<Tabs>
  <Tab title="Slack">
    ### 1. Slack App を作成

    1. [api.slack.com/apps](https://api.slack.com/apps) にアクセスし、**Create New App** → **From scratch** を選択
    2. アプリ名（例：`refrain`）を入力し、ワークスペースを選択

    ### 2. Bot Token Scopes を追加

    **OAuth & Permissions** → **Bot Token Scopes** に以下を追加：

    | Scope         | 用途               |
    | ------------- | ---------------- |
    | `chat:write`  | メッセージ投稿（承認要求・通知） |
    | `files:write` | レポートファイルのアップロード  |

    ### 3. ワークスペースにインストール

    **Install to Workspace** をクリックし、**Bot User OAuth Token**（`xoxb-...`）をコピーします。

    ### 4. チャンネルにボットを招待

    Slack で対象チャンネルに `/invite @refrain` を実行します。

    チャンネル ID の確認方法：チャンネル名を右クリック → **チャンネル詳細を開く** → 最下部に表示される ID（`C0123456789` 形式）。

    ### 5. Interactivity を有効化（承認機能のみ）

    `--approval-mode slack` を使用する場合：

    1. **Interactivity & Shortcuts** → **On** に切り替え
    2. **Request URL** に `https://<your-domain>/webhooks/slack` を設定

    `--notify slack` のみの場合は不要です。

    ### 6. 環境変数を設定

    ```bash theme={null}
    export SLACK_BOT_TOKEN="xoxb-..."
    export SLACK_CHANNEL_ID="C0123456789"
    ```

    ### CLI 例

    ```bash theme={null}
    npx @refrainai/cli execute -- \
      --runbook ./payment-flow.yaml \
      --approval-mode slack \
      --notify slack
    ```
  </Tab>

  <Tab title="Teams">
    ### 環境変数

    ```bash theme={null}
    export TEAMS_APP_ID="..."
    export TEAMS_APP_PASSWORD="..."
    export TEAMS_CHANNEL_ID="..."
    ```

    ### CLI 例

    ```bash theme={null}
    npx @refrainai/cli execute -- \
      --runbook ./payment-flow.yaml \
      --approval-mode teams \
      --notify teams
    ```
  </Tab>

  <Tab title="Discord">
    ### 環境変数

    ```bash theme={null}
    export DISCORD_BOT_TOKEN="..."
    export DISCORD_PUBLIC_KEY="..."
    export DISCORD_APPLICATION_ID="..."
    export DISCORD_CHANNEL_ID="..."
    ```

    ### CLI 例

    ```bash theme={null}
    npx @refrainai/cli execute -- \
      --runbook ./payment-flow.yaml \
      --approval-mode discord \
      --notify discord
    ```
  </Tab>
</Tabs>

## CLI 例

**承認のみ：**

```bash theme={null}
npx @refrainai/cli execute -- \
  --runbook ./flow.yaml \
  --approval-mode slack
```

**通知のみ：**

```bash theme={null}
npx @refrainai/cli execute -- \
  --runbook ./flow.yaml \
  --notify slack
```

**両方：**

```bash theme={null}
npx @refrainai/cli execute -- \
  --runbook ./flow.yaml \
  --approval-mode slack \
  --notify slack
```

## トラブルシューティング

<AccordionGroup>
  <Accordion title="Slack でボタンクリック後「This didn't work」が表示される">
    Interactivity の Request URL が無効またはアクセスできない状態です。Slack App の Interactivity 設定で URL が正しいコールバックエンドポイントを指しているか確認してください。
  </Accordion>

  <Accordion title="承認がタイムアウトして実行が中止される">
    コールバックがエグゼキュータに到達していません。コールバックエンドポイントがインターネットからアクセス可能で、Request URL が正しく設定されているか確認してください。
  </Accordion>

  <Accordion title="'not_in_channel' エラー">
    ボットがチャンネルに招待されていません。対象チャンネルで `/invite @your-bot-name` を実行してください。
  </Accordion>
</AccordionGroup>

## 次のステップ

<CardGroup cols={2}>
  <Card title="手順書を実行する" icon="play" href="/ja/guides/execute-runbook">
    承認と通知を使って手順書を実行。
  </Card>

  <Card title="プラン" icon="credit-card" href="/ja/concepts/plan-tiers">
    メッセージング機能のプラン要件を確認。
  </Card>
</CardGroup>
