Multica Docs

Slack Bot

エージェント用の Slack Bot を作成し、DM、チャンネル、/issue コマンドから利用します。

Multica では、自分で作成した Slack app を使います。接続すると、チームメンバーは Bot へ DM を送る、チャンネルで @メンションする、/issue でイシューを作成するといった操作ができます。

1 つの Slack app に接続できる Multica エージェントは 1 つです。複数のエージェントを接続する場合は、エージェントごとに app を作成してください。

始める前に

接続はワークスペースの owner または admin が行います。最終的に次の 2 つの認証情報を Multica へ入力します。

  • xoxb- で始まる Bot User OAuth Token
  • xapp- で始まる App-level Token

1. manifest から Slack app を作成する

Slack API Apps を開き、Create New App → From a manifest をクリックして Slack workspace を選びます。次の内容を YAML に貼り付けてください。

display_information:
  name: Multica
features:
  app_home:
    home_tab_enabled: false
    messages_tab_enabled: true
    messages_tab_read_only_enabled: false
  bot_user:
    display_name: Multica
    always_online: true
  slash_commands:
    - command: /issue
      description: Create a Multica issue
      usage_hint: "[description]"
oauth_config:
  scopes:
    bot:
      - app_mentions:read
      - channels:history
      - groups:history
      - im:history
      - mpim:history
      - chat:write
      - reactions:write
      - users:read
      - commands
settings:
  event_subscriptions:
    bot_events:
      - app_mention
      - message.im
      - message.channels
      - message.groups
      - message.mpim
  interactivity:
    is_enabled: false
  org_deploy_enabled: false
  socket_mode_enabled: true
  token_rotation_enabled: false

作成前に、2 か所の Multica をエージェント名に変更してもかまいません。manifest の権限やイベントは削除しないでください。削除すると、DM、チャンネルでのメンション、返信、/issue が動作しないことがあります。

Bot は Socket Mode で Slack へ接続するため、公開 Request URL や OAuth Redirect URL の設定は不要です。

2. 2 つの token を取得する

Bot token

  1. Slack app で Install App を開きます。
  2. Install to Workspace をクリックし、権限を承認します。
  3. xoxb- で始まる Bot User OAuth Token をコピーします。

App-level token

  1. Basic Information → App-Level Tokens を開きます。
  2. Generate Token and Scopes をクリックします。
  3. connections:write scope を追加します。
  4. token を生成し、xapp- で始まる値をコピーします。

3. エージェントへ接続する

  1. Multica でエージェントを開き、Slack に接続するエージェントを選びます。
  2. 連携を開き、Slack に接続をクリックします。
  3. Bot token と App-level token を入力します。
  4. 接続をクリックします。

Multica は 2 つの token が同じ app のものか確認します。接続に成功すると、画面に Slack に接続済みと表示されます。

2 つの token は暗号化して Multica サーバーに保存されます。Token は認証情報です。イシュー、コメント、コードリポジトリには書き込まないでください。ほかのエージェントやワークスペースに接続済みの app をそのまま再利用することはできません。先に元の接続を解除してください。

初回利用

メンバーが初めて Bot に DM を送るか @メンションすると、アカウント連携用のリンクが届きます。そのワークスペースで使う Multica アカウントにログインしてから、Slack に戻ってもう一度メッセージを送ってください。

リンクは 1 回だけ使用でき、15 分後に期限切れになります。期限が切れた場合は、Bot にもう一度メッセージを送ると新しいリンクが届きます。同じ Multica ワークスペースにある複数の Bot が同じ Slack workspace のものなら、通常は既存のアカウント連携を再利用できます。

Bot を利用できるのは、現在の Multica ワークスペースのメンバーだけです。

Slack から仕事を依頼する

DM

Slack サイドバーの Apps から Bot を開き、そのままメッセージを送ります。@メンションは不要です。

チャンネルとグループ

まず /invite @your-bot を実行して Bot をチャンネルに追加し、@your-bot 依頼内容 を送ります。スレッドごとに独立したセッションが作られます。追加の依頼も、同じスレッドで Bot を @メンションしてください。

Bot が応答するのは、明示的に @メンションされたチャンネルメッセージだけです。実行時には、権限の範囲内でそのスレッドの直近のコンテキストを読み取ります。

/issue でイシューを作成する

チャンネルまたは DM で、次のように入力します。

/issue Safari ではログインに成功してもログイン画面に残る

このコマンドでは Bot の @メンションは不要です。Multica は説明を現在の Bot に対応するエージェントへ渡し、エージェントがタイトルと本文を整理してイシューを作成します。Slack には最初に自分だけが見える受付メッセージが表示されます。作成が完了すると、Multica のインボックスに通知が届きます。

接続を管理する

設定 → 連携を開くと、接続済みの Slack Bot をすべて確認できます。ワークスペースの owner と admin は接続を解除できます。

接続を解除すると Socket Mode の接続が停止し、Bot は新しいメッセージを受信しなくなります。既存の会話と監査記録は削除されません。

セルフホスト設定

Multica Cloud では追加設定は不要です。セルフホスト環境では、Slack token を暗号化するキーを先に設定してください。

MULTICA_SLACK_SECRET_KEY=<base64-encoded 32-byte key>

次のコマンドで生成できます。

openssl rand -base64 32

API サービスを再起動してから Slack app を接続します。このキーは継続して保管してください。変更または紛失すると既存の token を復号できなくなり、app の再接続が必要になります。

アカウント連携用リンクには MULTICA_APP_URL が使われ、未設定の場合は FRONTEND_ORIGIN にフォールバックします。メンバーがアクセスできる Multica のアドレスを指定してください。

よくある問題

  • 接続時に token が無効と表示される: 接頭辞を確認し、2 つの token が同じ app のものか確認します。
  • app を検証できない: manifest に users:read が含まれていることを確認します。権限を更新した後は app を再インストールしてください。
  • DM の入口がない: app_home.messages_tab_enabledtrue であることを確認します。
  • チャンネルで返信がない: Bot がチャンネルに招待されており、メッセージで @メンションされていることを確認します。
  • /issue がない: manifest に slash command と commands scope が含まれていることを確認し、app を再インストールします。
  • Bot が実行しない: エージェントがアーカイブされていないことと、使用するランタイムがオンラインであることを確認します。

次のステップ