メンバー、スレッド、チケットに挨拶するDiscordウェルカムボットの作り方

Piotr Grudzień
公開日 更新日 読了時間:約16分
ウェルカムチャンネル、新しいフォーラムスレッド、作成直後のチケットチャンネルで挨拶するDiscordボット

Discordウェルカムボットは、メンバーの参加、スレッドの作成、チャンネルの作成など、サーバー内で何かが起きたときに、用意したメッセージを投稿します。Quickchat AIでは、ダッシュボードで設定する3つのルールから送信します。コードもホスティングも不要です。

このチュートリアルでは、3種類すべてを設定してテストし、メンバーが挨拶に返信してAIとの会話が始まるところまで紹介します。DiscordとQuickchat AIを接続する両方の方法を扱い、自分のボットを使う場合にメンバー用ルールで必要なDeveloper Portalの追加設定も説明します。

この機能を作った理由:自社Discordに届いた3つの要望

私たちのDiscordサーバーでは、同じ要望が3つの形で繰り返し寄せられていました。そのたびに、サポートボットは実現できないと答えるしかありませんでした。

Quickchat AIのDiscordサーバーに届いた3件の実際のメッセージ。あるメンバーが「新しく参加した人を歓迎したり、話している人にメンションしたりできますか」と質問し、ボットは自動ウェルカムのトリガーはないと回答。別のメンバーが「新しいチケットを作ったら自動で挨拶してほしい」と質問し、ボットはチケット作成を検知できないと回答。3人目は「タグ付けせずに返信するサポートチケットにどう組み込めますか」と質問している。

3つをまとめると、要望は1つです。ボットから先に話しかけてほしい。参加した人を迎える。スレッドを開いた人に挨拶する。新しいチケットチャンネルで、利用者がボットの存在に気付くのを待たずに声をかける。

この質問は、Discordサーバーでもウィジェットでも一年中届いていました。今週から3種類すべてを、ダイアログで有効にする自動メッセージのルールとして使えるようになりました。この記事では、その設定を最初から最後まで紹介します。

Discordボットが既定では先に挨拶しない理由

DiscordのQuickchat AIボットは、メンションされたときや返信されたときに答えます。共有のワンクリック接続ボットは/askにも対応しています。すべてに反応すると活発なサーバーでは使いづらくなるため、これは意図的な設計です。ただし、10秒前に作られたばかりのチャンネルでは、誰もボットの存在を知りません。先に話しかけられないため、誰からも話しかけられないのです。

この最初のきっかけの不足は、新しいチケットチャンネルで特に問題になります。メンバーには質問があるのに、答えられるボットがいることを知りません。

チケットボットのパネルだけがある新しいチケットチャンネルと、2秒後にQuickchat AIが挨拶を投稿した同じチャンネルの比較

自動メッセージは、ボットから先に話しかける仕組みです。定型文なので費用はかからず、自分が書いていないことを勝手に言うこともありません。文末で、本当の会話を始める方法をメンバーに伝えます。3つのルールは先ほどの要望に対応しています。New member joins、New channel、New thread or forum postです。

作るもの

デモ用サーバーはNebula Lounge、エージェント名はOrbitです。設定を終えると、3種類の挨拶が動きます。

ルール起動するタイミング投稿先
New member joins人がサーバーに参加したとき選択した1つのチャンネル、#welcome
New thread or forum post公開スレッドまたはフォーラム投稿が作られたとき新しいスレッド内
New channelテキストチャンネルが作られたとき新しいチャンネル内

無料のQuickchat AIアカウントと、Discordサーバーにボットを追加する権限が必要です。Ticket Toolなどのチケットボットは任意で、最後のチケットのワークフローでのみ使います。

Discordの自動メッセージの仕組み

自動メッセージは、モデルの呼び出しではなく、決まった処理の流れです。Discordがイベントを送信し、Quickchat AIがルールの対象範囲を確認し、設定した時間だけ待ち、プレースホルダーを埋めてテキストを投稿します。

この経路で、モデルに何を言うか尋ねることはありません。そのため公開サーバーで動かし続けられるほど予測しやすく、クレジットも消費しません。

Discordイベントから投稿までの流れ:対象範囲の確認、待機、プレースホルダーの置換、投稿。AIとの会話は別の仕組みとして示されている

AIとの会話は別の仕組みで、その後メンバーがボットにメンションするか返信すると始まります。

自動メッセージに含まれないもの

「ウェルカムボット」から期待されることが多い、次の4つはこの機能の対象外です。

  • 認証機能。 CAPTCHA、年齢や本人の確認、認証済みロールの付与はありません。必要なら専用の認証ボットを併用してください。
  • AIによる文章作成。 メッセージは、自分の文章にプレースホルダーを埋めたものです。モデルはイベントを見ず、挨拶文も作りません。
  • チケット作成。 Quickchat AIはチケットチャンネルを作りません。チケットボットが作成し、Quickchat AIがその中の人に挨拶します。
  • 一斉送信や予約投稿。 各ルールは1つのDiscordイベントで起動します。「毎週月曜に投稿」のような指定や、メンバー一覧への送信はできません。

ボットをDiscordサーバーに接続する

Quickchat AIダッシュボードでExternal Appsを開き、Discordを選択します。独自の名前で表示したい場合はBot name in the new serverを設定し、Add to your Discord serverをクリックして認証します。これがワンクリック接続です。共有のQuickchat AIボットがサーバーに参加し、Discordアプリケーションの作成やトークンの取り扱いは不要です。

接続済みサーバーNebula LoungeとAutomated messagesボタンを表示したDiscord連携画面

投稿予定のすべての場所で、ボットにView ChannelとSend Messages権限があることを確認してください。見えない投稿先はドロップダウンに表示されず、投稿できない場所は送信時に通知なくスキップされます。

接続方法によって何が変わるか

Quickchat AIとDiscordの接続方法は2つあり、自動メッセージはどちらでも使えます。方法によって、ルールの場所と、Developer Portalでの設定が1つ必要かどうかが変わります。

ワンクリック自分のDiscordアプリ(Advanced)
投稿するボット共有のQuickchat AIアプリケーション自分で作成したアプリケーション
ルールの場所Connected servers内のサーバーにあるAutomated messagesDiscordページのAutomated messagesで、サーバーごとのConfigure
New channelとNew thread or forum postすぐに反映約1分以内に更新
New member joinsすぐに反映Server Members Intentが必要。その後、約1分以内に更新

ワンクリックと独自アプリの比較。独自アプリのメンバー参加ルールだけにServer Members Intentが必要であることを示す

最後の行の理由は、Quickchat AIではなくDiscordの仕様です。このチュートリアルで唯一の手動設定を理解するために、一度仕組みを確認しましょう。

Intentは、Discordのイベント購読の仕組みです。ボットは接続時に受信したいイベントの種類を宣言し、Discordはその種類だけを送信します。多くのインテントは、ボットが要求するだけで使えます。3つは特権付きで、アプリ所有者が手動で有効にするまで送られません。そのうち1つがサーバーのメンバーに関するものです。

つまり、アプリがメンバー参加イベントを受信するには、Developer PortalでServer Members Intentをオンにする必要があります。新しいアプリでは既定でオフです。チャンネル作成とスレッド作成は特権付きではないため、残り2つのルールには追加設定が要りません。

共有のワンクリック接続アプリは、すでにこのインテントが有効です。ワンクリックで接続した場合は、これらの作業は必要ありません。

Advanced設定のAutomated messages欄。独自ボットが参加するサーバーごとにConfigureボタンが表示されている

自分のアプリを使う場合は、Quickchat AIが設定を確認します。New member joinsルールを開くと、インテントがオフなら案内が表示され、オンなら何も表示されません。有効にするには、Discord Developer Portalでアプリを開き、Bot → Privileged Gateway IntentsからServer Members Intentをオンにして保存します。その後、Quickchat AIでルールをもう一度保存してください。その間もボットは通常どおり応答し、待機するのはこのルールだけです。

独自ボットのNew member joinsルール。Server Members Intentがオフで実行できないという警告が表示されている

構築前に知っておきたい制限があります。独自ボットが100を超えるサーバーに参加している場合、Discordはこのインテントを許可する前にアプリの認証を求めます。

Automated messagesを開く

サーバーを探してAutomated messagesを開きます。ワンクリック接続ではConnected serversの下、自分のアプリではAutomated messages欄のConfigureから開けます。3つのルールが並び、それぞれにスイッチがあります。初期状態ではすべてオフです。

接続済みDiscordサーバーの3つの自動メッセージルール。各ルールに説明と個別のスイッチがある

操作方法に関わるので、始める前に2点を押さえてください。

ルールは個別に保存されます。 ルールを開いて編集し、Saveをクリックすると、そのルールだけを保存して一覧に戻ります。他の2つは変わりません。

一覧のスイッチは切り替えた瞬間に保存されます。 他のボタンを押す必要はありません。ワンクリック設定は即時に反映され、Advanced接続のボットは約1分以内にルールを更新します。想定より挨拶が多ければ、ワンクリックで変更できます。

新しいメンバー全員を歓迎する

New member joinsを選択します。個別のスイッチ、投稿先、メッセージテンプレート、遅延時間が表示されます。

New member joinsルール。有効化スイッチ、ウェルカムチャンネル、プレースホルダー付きメッセージテンプレート、遅延時間を表示

Welcome channelを#welcomeにします。次にMessage templateを設定します。

Welcome to {server_name}, {username}! I'm {bot_name}. Mention me or use /ask whenever you need help.

Delayは2秒のままにし、Turn this message onで有効にして、Saveをクリックします。

ワンクリックボットではなく自分のDiscordアプリを使う場合は、/askに関する部分を削除してください。このスラッシュコマンドは、共有のQuickchat AIアプリにのみ存在します。

Message templateの入力欄と、その下のusername、bot_name、server_name、channel_nameの挿入ボタン

テンプレート下のボタンを押すと、カーソル位置にプレースホルダーを挿入できるので、正確な綴りを覚える必要はありません。{username}は参加したメンバー、{server_name}はサーバー、{bot_name}は接続時に設定した名前を含む、そのサーバーでのボット名です。

テストするには、別のDiscordアカウントで参加してください。

#welcomeチャンネル。DiscordがMartaの参加を通知し、その2秒後にOrbitが名前を使って歓迎している

Discord自身の参加通知と、その下の挨拶の間隔が、遅延時間の効果です。すべてのルールにあり、遅延なしから30秒まで設定できます。

遅延時間のドロップダウン。No delayと2、5、10、30秒の選択肢を表示

反応しないことのテスト: 別のボットをサーバーに招待してください。何も投稿されません。ボットアカウントは意図的に無視するため、アプリのインストールやWebhookに対して、ソフトウェアを歓迎する挨拶は出ません。

新しいスレッドとフォーラム投稿に挨拶する

New thread or forum postを選び、Parent channelをヘルプ用フォーラムにします。この親チャンネルの下に作られる公開スレッドとフォーラム投稿で起動し、非公開スレッドは無視します。

Parent channelは、新しいスレッドが属するチャンネルです。対応する種類は2つあります。通常のテキストチャンネルでは既存メッセージからスレッドが分岐します。フォーラムチャンネルでは各投稿自体がスレッドで、チャンネル固有の通常メッセージ履歴はありません。フォーラムは、サーバー設定でCommunityを有効にすると使えるようになります。どちらでも動きますが、質問ごとにスレッドができるヘルプフォーラムが自然に合います。フォーラムには非公開スレッドを作れないので、親がフォーラムならすべての投稿が対象です。

Hi {username}, I'm {bot_name}. Mention me in this thread if you'd like help. If you prefer a human, leave your question here and they'll follow up.

Parent channelをヘルプフォーラムに設定したNew thread or forum postルール

「独自ドメインは使えますか?」という新しいフォーラム投稿の下に、Orbitが投稿者の名前を使って挨拶している

ここでの{username}はスレッドを開いた人です。Discordが直接報告するので、常に正しい値です。{channel_name}はスレッド自体の名前です。

「質問ごとに作成するスレッド内だけで返信してほしい」という要望に応えるルールです。新しい質問スレッドには最初からボットがいて、使い方を伝えます。

反応しないことのテスト: 適切な通常のテキストチャンネルを親にして、非公開スレッドを作成してください。何も投稿されません。非公開スレッドは対象外です。フォーラムには非公開スレッドを作れないため、この確認にはテキストチャンネルを使います。

すべての新規チャンネル、またはチケットカテゴリだけに挨拶する

New channelを選択します。既定では、サーバー内のすべての新しいテキストチャンネルに投稿します。小規模なコミュニティでは、新しいチャンネルができるたびにボットが自己紹介する、この設定が便利です。

Hi {username}, I'm {bot_name}. Reply to me or mention me if you need help. If you'd rather wait for a human, share your question and they'll get back to you as soon as possible.

範囲を絞るには、Any categoryをOnly in this categoryに変更してカテゴリを選択します。

Discordのカテゴリは、左サイドバーでチャンネルをまとめる、折りたたみ可能なグループです。灰色の見出しの下にチャンネルが字下げされて並んでいます。チケットボットは通常、TicketsやSupportのようなカテゴリ内にチャンネルを作るため、絞り込み条件として使えます。

これがチケットのワークフローです。チケットボットがチャンネルを作るカテゴリを指定すると、サーバー内の他の場所に作られたチャンネルは無視されます。

New channelルールのカテゴリ選択。Any categoryとサーバーのカテゴリ一覧を表示

Active Ticketsカテゴリ外に作成された、挨拶のない空のチャンネル

反応しないことのテスト: ルールをActive Ticketsに限定し、別のカテゴリでチャンネルを作ります。そこには投稿されず、その直後に開いたチケットには通常どおり挨拶が届きます。

チケットへの挨拶が届く順番

Ticket ToolがActive Ticketsカテゴリにticket-0042を作り、自分のパネルを投稿します。数秒後に、Quickchat AIがその下へ挨拶を投稿します。この順番を作るのが遅延です。No delayだと2つのメッセージが競合し、先に読むべきパネルの上に挨拶が出る可能性があります。チケットボットがチャンネル権限を設定する時間も必要なので、まずは5秒が適しています。

チケットを開いた人をボットが判断する仕組み

チケットチャンネルの{username}は、報告された値ではなく推定値です。Discordのチャンネル作成イベントにはチャンネルとカテゴリの名前は含まれますが、チケットの依頼者は含まれません。Discordから見ると、作ったのはチケットボットだからです。

イベントに含まれているのは、チャンネルの権限の上書き設定です。

権限の上書きは、1つのチャンネルで特定のロールや人に設定し、サーバー全体の権限より優先させるものです。Discordの非公開チャンネルは、この仕組みで作られます。対象チャンネルで@everyoneのView Channelを外し、閲覧すべき限られた人にだけ付与します。

チケットボットも同じ仕組みを使います。新しいチャンネルで依頼者個人にView Channelを付与し、依頼者とサポートチームだけが見られるようにします。Quickchat AIは上書き設定を読み、その中の1人の人間を探します。多くのチケットボットは自分自身にもアクセス権を付けるため、個人への権限をDiscordに照会し、ボットを除外します。人間がちょうど1人残れば、その人が依頼者です。それ以外の場合や、Discordへの照会ができなかったアカウントがある場合は、推測せずthereを使います。

依頼者の推定方法。チャンネル作成イベントに依頼者情報がないため、権限の上書きを読み、ボットではなく人に属する1つの権限を特定する

非公開チケットチャンネルで、Orbitが依頼者の名前を使って挨拶している

チケットチャンネルのアクセス一覧。@everyoneは拒否、サポートロールは許可、個人向け権限は依頼者とチケットボットの2つ

根拠がない場合や複数の人に当てはまる場合、{username}はthereになります。上の英語テンプレートは、どちらでも自然に読めるようになっています。自分の文面もその点を考慮してください。また、名前を本人確認として扱わないでください。権限から推定した便利な表示であり、ユーザーを認証した結果ではありません。

プレースホルダーと置換される値

プレースホルダーNew member joinsNew thread or forum postNew channel
{username}参加したメンバースレッドを開いた人権限から推定した依頼者、またはthere
{bot_name}そのサーバーでのボット名同左同左
{server_name}サーバー名同左同左
{channel_name}ウェルカムチャンネル新しいスレッド新しいチャンネル

テンプレートは最大1,500文字です。この4つ以外のプレースホルダーは保存時に拒否されます。後から{braces}のような文字列がそのまま投稿されることはなく、コミュニティに見られる前にダッシュボードで誤りを発見できます。

遅延時間の選び方

遅延適した状況
No delay他に投稿するものがなく、挨拶を最初に表示したい
2秒既定値。他のボットが先にパネルや埋め込みを投稿する、多くのチケット・初期案内の設定
5~30秒他のボットが遅い、複数のメッセージを投稿する、作成後にチャンネル名を変更する

長めの遅延は、チケットボットがチャンネル権限を設定する時間も確保します。{username}はその権限から読み取ります。ただし、この処理の競合は通常1~2秒で終わるため、毎回thereになる場合は、遅延を延ばしても解決しません。

挨拶の後に起きること

挨拶の最後には、ボットへの話しかけ方が書かれています。その後は通常のQuickchat AIの会話です。ナレッジベースから回答し、チームメンバーはいつでもQuickchat AI Inboxから引き継げます。利用者はDiscordを離れる必要がありません。

チケットチャンネルでメンバーが挨拶に返信し、Orbitがナレッジベースから回答している

同じやり取りを表示したQuickchat AI Inbox。チャンネルはDiscordと表示されている

2つの仕組みが役割を分担します。定型メッセージが会話のきっかけを作り、その後の会話をAIが担当します。

トラブルシューティング

症状原因
挨拶がまったく出ない投稿先でView ChannelまたはSend Messagesが不足している。エラーを出さずスキップする
新しいスレッドに挨拶がないSend Messages in Threadsが不足しているか、非公開スレッドになっている
独自アプリで、メンバー参加時の挨拶がないアプリのServer Members Intentがオフ。Developer Portalで有効にし、ルールを再保存する
ボットが参加しても何も起きない仕様どおり。メンバー用ルールはボットを無視する
チケットの{username}がthereになる個人へのView Channel付与がないか、複数の人に付与されている。個人ではなくロールでアクセスを与えるチケットボットでは、この方法で特定できない
挨拶がチケットパネルの上に出る遅延が短すぎる。5秒に増やす
想定外のチャンネルに挨拶が出るNew channelがAny categoryになっている。Only in this categoryで絞る
保存時に、選択項目が利用できないと言われるDiscordでチャンネルやカテゴリが削除された。現在あるものを選び直して保存する

本番で使い始める

ルールは1つずつ有効にし、1日様子を見てから次を追加してください。投稿先を自分で選ぶメンバー参加ルールが、最初に試しやすいものです。New channelをAny categoryで使うと、チャンネルが作られるたびにどこでも投稿するので、特に注意して様子を見ましょう。

挨拶と会話は別々に測定してください。挨拶の送信試行は無料です。大切なのは、届いた挨拶のうち何件が、実際にボットへ話しかける行動につながったかです。届かない場合はDiscordの権限を確認してください。

FAQ

Discordウェルカムボットはどう作りますか?

Quickchat AIボットをワンクリックでサーバーに追加し、Connected serversのサーバーを開いてAutomated messagesを選択します。New member joinsを有効にし、ウェルカムチャンネルを選び、テンプレートを編集してSaveをクリックします。ホスティングもコードもDiscordアプリの作成も不要です。

誰かが参加したときにDiscordボットからメッセージを送れますか?

はい。New member joinsルールは、人が参加するたびに指定チャンネルへの定型メッセージ送信を1回試みます。そのチャンネルの閲覧・送信権限が必要です。ボットの参加は無視するため、Webhookやアプリの大量インストールでは起動しません。

チケットチャンネルが作られたときに挨拶できますか?

はい。それがこの機能を作った理由です。Ticket Toolなどがチャンネルを作り、New channelルールがそこに挨拶を投稿します。まず5秒程度の遅延を設け、チケットボットが先にパネルを投稿して権限を設定できるようにしてください。

すべての新規チャンネルと、特定カテゴリだけの両方に対応していますか?

はい。New channelは既定ですべての新しいテキストチャンネルに投稿します。チケット用カテゴリに絞るには、Any categoryをOnly in this categoryに変えて対象を選びます。他の場所に作られたチャンネルは無視されます。

Discordのウェルカムメッセージを遅らせられますか?

はい。No delay、2秒、5秒、10秒、30秒から選べます。既定は2秒です。チケットや初期案内のボットが先にパネルを出すことが多く、その下に挨拶がある方が、上に埋もれるより読みやすいためです。

ウェルカムメッセージをカスタマイズできますか?

はい。各ルールに最大1,500文字のテンプレートがあり、{username}、{bot_name}、{server_name}、{channel_name}が使えます。入力欄の下にあるプレースホルダーを選ぶと、カーソル位置に挿入できます。

ウェルカムメッセージでAIクレジットを消費しますか?

いいえ。プレースホルダーを埋めた定型文です。AIエージェントを呼ばず、会話クレジットを消費せず、AI Actionsも実行しません。その後メンバーがボットと会話した場合にだけクレジットを使います。

作るのにコードは必要ですか?

いいえ。Quickchat AIダッシュボードでの設定だけです。ワンクリック接続では、Discordアプリの作成、ホスティング、ボットトークンの取り扱いは不要です。

自分のボットトークンでDiscordに接続していても使えますか?

はい。どちらの接続方法でも使えます。Advancedでは、DiscordページのAutomated messagesにサーバーごとのConfigureがあります。追加で1つ、New member joinsルール用に、自分のDiscordアプリのServer Members Intentを有効にする必要があります。

Server Members Intentとは何ですか?なぜ必要ですか?

Discordはサーバーのメンバー情報を特権情報として扱います。そのため、Developer PortalでアプリのServer Members Intentをオンにした場合だけ、ボットはメンバー参加イベントを受け取れます。チャンネルとスレッドの2つのルールは既定で有効なインテントを使うので、追加設定は不要です。Quickchat AIが状態を確認し、オフならルール内で知らせます。

挨拶を投稿した後はどうなりますか?

誰かが返信するまでは何も起きません。挨拶は定型文で、メンバーがボットにメンションするか返信するとAIとの会話が始まります。共有のワンクリックボットは/askにも対応しています。挨拶の目的は、新しいチャンネルの人に、話しかけられる相手がいると伝えることです。

Discordの認証ボットですか?

いいえ。CAPTCHAの表示、本人や年齢の確認、認証済みロールの付与はしません。必要な場合は、専用の認証ボットを併用してください。

誰かが退出したときに、お別れのメッセージを投稿できますか?

いいえ。3つのルールはメンバー参加、スレッド・フォーラム投稿の作成、チャンネル作成で起動します。Discordの退出イベントは含まれないため、お別れのメッセージはありません。両方必要なら、専用の参加・退出メッセージ用ボットを併用してください。

Ticket Toolの代わりになりますか?

いいえ。Ticket Toolがチケットチャンネルを作り、Quickchat AIがその中の人に挨拶します。両方を並行して使うため、遅延の設定があります。

Ticket Tool以外のチケットボットでも使えますか?

はい。Ticket Tool固有の機能には依存していません。チャンネルを作り、依頼者個人にView Channelを付与するボットなら同じように動きます。手動で作成したチャンネルも同様です。Ticket Toolを例にしているのは広く使われているためで、必須だからではありません。

誰がチケットを開いたか、ボットにわかりますか?

通常はわかります。チケットボットが依頼者個人に付与したView ChannelをQuickchat AIが読み、ボットに属する権限を除外して{username}を埋めます。個人向け権限がない場合や、複数の人に付与されている場合はthereになるため、どちらでも自然に読めるテンプレートにしてください。

非公開スレッドにも挨拶しますか?

いいえ。選択した親チャンネルの公開スレッドとフォーラム投稿だけでルールが起動します。非公開スレッドは無視します。

どのDiscord権限が必要ですか?

すべての投稿先でView ChannelとSend Messages、スレッド用ルールでは加えてSend Messages in Threadsが必要です。送信できない場所は大きなエラーを出さずにスキップするため、挨拶が出ないときはまず権限を確認してください。

挨拶が多すぎるとき、すぐオフにできますか?

はい。一覧のスイッチは切り替えた瞬間に保存されるので、ワンクリックでオフにできます。ワンクリック接続の設定はすぐに反映され、Advanced接続のボットは約1分以内に更新します。ルールを開いたり、他の設定を保存したりする必要はありません。

Discordウェルカムボットの料金はいくらですか?

設定は無料です。自動メッセージはAIの使用ではなく設定済みの処理なので、どのプランでもクレジットを消費しません。無料プランで3つのルールすべてを動かせます。

関連するDiscordボットの作り方