{"id":18251763,"url":"https://github.com/moqada/chatsdj","last_synced_at":"2026-05-10T05:18:14.620Z","repository":{"id":183269744,"uuid":"667643707","full_name":"moqada/ChatSDJ","owner":"moqada","description":"👨‍⚖️ チャット相談所へようこそ。どんなことでもま〜るくおさめまっせ。","archived":false,"fork":false,"pushed_at":"2024-04-01T23:43:13.000Z","size":488,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-23T12:43:50.692Z","etag":null,"topics":["deno","netlify-edge-functions","openai","slack-bot"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/moqada.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-18T01:50:52.000Z","updated_at":"2023-07-23T16:07:22.000Z","dependencies_parsed_at":null,"dependency_job_id":"bf2dc13e-007e-4d6c-abd0-0a3eab17652d","html_url":"https://github.com/moqada/ChatSDJ","commit_stats":null,"previous_names":["moqada/chatsdj"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/moqada/ChatSDJ","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moqada%2FChatSDJ","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moqada%2FChatSDJ/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moqada%2FChatSDJ/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moqada%2FChatSDJ/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/moqada","download_url":"https://codeload.github.com/moqada/ChatSDJ/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moqada%2FChatSDJ/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266913677,"owners_count":24005578,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-24T02:00:09.469Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deno","netlify-edge-functions","openai","slack-bot"],"created_at":"2024-11-05T09:48:26.044Z","updated_at":"2026-05-10T05:18:14.588Z","avatar_url":"https://github.com/moqada.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- deno-fmt-ignore-file --\u003e\n# ChatSDJ\n\nチャット相談所へようこそ。どんなことでもま〜るくおさめまっせ。\n\nメンションをすると、Google SpreadSheet 上の相談員たちが皆様の悩みにお答えします。\n\n※ Google SpreadSheet を利用しない場合、相談員は板東AI二に固定されます。\n\n![](assets/preview.png)\n\n\n## 設置方法\n\n### OpenAI API key の作成\n\nOpenAI の API keys から「Create new secret key」を実行します。\n\n- https://platform.openai.com/account/api-keys\n\n作成した API key を `OPENAI_API_KEY` として `.env` に追加します。\n\n\n### Google SpreadSheet の作成\n\n※ Google SpreadSheet の作成は任意です。作成・指定しなくてもアプリを利用できますが、相談員は板東AI二に固定されます。\n\n1行目に以下の列を持つ Google SpreadSheet を作成します。\n\n```\nname,emoji,prompt,model(任意),note(任意)\n```\n\n- `name`: 相談員の名前\n- `emoji`: 相談員のアイコン (Workspace に登録されている emoji を指定します)\n- `prompt`: 相談員の人格設定用のプロンプト\n- `model(任意)`: 相談員の GPT モデル (指定しない場合はアプリのデフォルト値が使用されます)\n- `note(任意)`: メモ欄\n\n例えば2行目に以下のように書くと、アイコンが :egg: な相談員「たまご」が設定されます。\n\n```\nたまご,egg,あなたは卵です。質問には全て絵文字で答えてください。\n```\n\n作成した SpreadSheet の URL から Id を抜き出し、 `GOOGLE_SPREADSHEET_ID` として `.env` に追加します。\n\n\n### Google Cloud プロジェクトの用意\n\n※ Google SpreadSheet を使用しない場合、この作業は省略可能です。\n\nGoogle Cloud プロジェクトを作成し、「Google Sheets API」を有効にします。\n\n「サービスアカウント」 \u003e 「サービスアカウントの作成」からサービスアカウントを作成します。省略可能項目は全て省略してかまいません。\n作成したサービスアカウントの「キー」から「鍵を追加」 \u003e 「新しい鍵を作成」を実行し、キーのタイプは「JSON」を選択して作成します。\n\nダウンロードした鍵を以下のコマンドで文字列にし、 `GOOGLE_CREDENTIALS` として `.env` に追加します。\n\n```\ndeno task encode /path/to/key\n```\n\n作成したサービスアカウントのメールアドレスを、先に作成した SpreadSheet の共有に閲覧者権限で追加します。\n\n\n### Netlify へのデプロイ\n\n※ このアプリは [Netlify Edge Functions](https://docs.netlify.com/edge-functions/overview/) 上で動作します。\n\n[Netlify CLI](https://docs.netlify.com/cli/get-started/) をインストールして、ログインします。\n\n```\nnetlify login\n```\n\nリポジトリと Netlify プロジェクトを紐づけます。\n\n```\nnetlify init\n```\n\nNetlify にデプロイします。\nここでデプロイされたURLをメモしておきます。\n\n```\nnetlify deploy --prod\n```\n\n環境変数を追加します。\n\n```\nnetlify env:import .env\n```\n\n### Slack App の作成\n\nSlack の Your Apps から「Create NewApp」を実行します。\n\n- https://api.slack.com/apps\n\n「From an app manifest」を選択し、対象の Workspace を選択後、manifest の入力フォームに [manifest.example.json](./manifest.example.json) の内容をコピーして貼り付けます。\n\nアプリが作成されたら「Install your app」から「Install to Workspace」を実行し、Workspace にアプリをインストールします。\n\nインストールが完了したら以下の値を `.env` に追加します。\n\n- Signing Secret (`SLACK_SIGNING_SECRET`)\n  - 「Basic Information」 \u003e 「App Credentials」を参照\n- Bot User OAuth Token (`SLACK_API_TOKEN`)\n  - 「OAuth \u0026 Permissions」 \u003e 「OAuth Tokens for Your Workspace」を参照\n\n「Event Subscriptions」の「Request URL」に先ほどメモしたデプロイされた URL に `/slack-events` を追記したものを登録します。\n\n### Slack Channel への招待\n\nSlack Workspace の任意のチャンネルに招待してメンションするとボットが回答します。\n\n\n## オプション\n\n### 環境変数\n\n環境変数でアプリの挙動を変更することができます。\n\n- `CHATSDJ_DEFAULT_COUNSELLOR_EMOJI`: デフォルト相談員 (板東AI二) のアイコン絵文字を指定します\n- `CHATSDJ_ERROR_MESSAGE`: エラーが発生した場合に返信するメッセージを指定します\n- `CHATSDJ_IMAGE_GENERATION_LOADING_MESSAGE`: 画像生成中に返信するメッセージを指定します\n- `CHATSDJ_INITIAL_MESSAGE`: 質問の受付直後に返信するメッセージを指定します\n- `CHATSDJ_LOADING_SIGN`: 回答途中のメッセージの末尾に表示する処理中マークを指定します\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoqada%2Fchatsdj","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoqada%2Fchatsdj","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoqada%2Fchatsdj/lists"}