Laravel로 만드는 Slack Bot (1) - slack app 만들기 및 초기설정
- 요즘 현업에서 많이 사용하는 slack.
- slack 봇을 라라벨을 이용하여 구현합니다.
Slack App toekn DB화를 위한 모델 및 마이그레이션 파일 생성
- Slack은 보편적으로 다른 API Client처럼 key값을 1개만 쓰기는 아깝습니다.
- 이유인 즉슨, slack은 앱을 많이 다루고, 앱 속에서도 채널들을 많이 다루기 때문입니다.
- 때문에 앱 및 채널에 대한 토큰값들을 DB화 시키고, DB의 key value를 통해서 상황에 맞는 채널로 송신하게 구현합니다.
- setting 모델 및 migration 파일 생성하기
$ php artisan make:model Setting -m // -m 옵션으로 마이그레이션 파일까지 생성
Model created successfully.
Created Migration: 2022_03_02_060929_create_settings_table
- /database/migrations/create_settings_table.php 에서 settings 테이블 설계하기
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateSettingsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('settings', function (Blueprint $table) {
$table->id();
$table->string('key')->index();
$table->text('value');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('settings');
}
}
- php artisan migrate로 settings table 생성하기
$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (19.96ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (12.80ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (13.53ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated: 2019_12_14_000001_create_personal_access_tokens_table (19.44ms)
Migrating: 2022_03_02_060929_create_settings_table
Migrated: 2022_03_02_060929_create_settings_table (16.24ms)
api.slack.com에 접속하여 app생성 및 Token발급
- 아래 사이트에 접속하여 회원가입 후, create app을 실행합니다.
- https://api.slack.com/
- 본인은 Test라는 App을 만들었습니다.
- 만든 앱 화면에 들어가면 아래 사진처럼 App Credentials에 ClientID와 secret Key 등이 나옵니다.
- 좌측 Features > OAuth & Permissions 탭으로 들어가서 Scopes를 설정합니다.
- 봇은 채팅을 쓰기만 하면 됨으로 OAuth Scopte를 chat:write로 설정합니다.
- Scopes 설정을 끝냈다면, 바로 위의 OAuth Tokens For Your Workspace로 돌아가서
- Install to Workspace를 클릭한다.
- 본인이 설정한 scopes 권한에 따라 만들어진 OAuth Access Token을 받을 수 있는데
- 이를 활용하여 해당 Woarkspace(나의경우 Test App)와 slack bot을 사용한 메세지 전송이 가능해 진다.
- 본인이 설정한 스코프 권한(본인의 경우 메세지 보내기)을 확인한 후 허용을 누르면 Bot user OAuth Token이 발급된다.
- Bou User OAuth Token값을 잘 적어둡니다.
Workspace에 접속하여 채널 만들기
- 본인은 3개의 채널을 만들었습니다.
- channel1,channel2,channel3을 만들었고, 만드는 방법은 사진의 [채널 추가] 버튼을 통하여 만들었습니다.
- 각 채널들 우클릭 > 채널 세부정보 열기 를 클릭하면 채널별 ID값을 알 수 있는데, 이 또한 잘 메모하여 둡니다.
- 본인은 3개의 채널을 만들었으니 채널 ID 3개를 메모해 둡니다.
OAuth Token 및 Channel ID값 Json형태로 settings Table에 insert
- 본인은 bots(workspace)와 channels(각 채널)을 아래의 Json형태로 만들었습니다.
{
"bots": {"test": {"token": "xoxb-Yourcode"}},
"channels": {
"channel1": {"bot": "test","token": "YourChannelId"},
"channel2": {"bot": "test","token": "YourChannelId"},
"channel3": {"bot": "test","token": "YourChannelId"}
}
}
- 위 Json 형식을 가지고 tinker를 사용하여 key = slack, value = json 지정하여 삽입합니다.
$ php artisan tinker
Psy Shell v0.11.2 (PHP 8.0.16 — cli) by Justin Hileman
>>> App\Models\Setting::create([
'key'=>'salck',
'value'=>'{ "bots": { "test": { "token": "xoxb-3057450638550-3175622184597-VIEacdHH7QWtCczNy5ygx2Vv" } }, "channels": { "channel1": { "bot": "test", "token": "C031W3BFSNN" }, "channel2": { "bot": "test", "token": "C034TRH9F71" }, "channel3": { "bot": "test", "token": "C0351PVSFC6" } } }']);
=> App\Models\Setting {#3520
key: "salck",
value: "{ "bots": { "test": { "token": "xoxb-3057450638550-3175622184597-VIEacdHH7QWtCczNy5ygx2Vv" } }, "channels": { "channel1": { "bot": "test", "token": "C031W3BFSNN" }, "channel2": { "bot": "test", "token": "C034TRH9F71" }, "channel3": { "bot": "test", "token": "C0351PVSFC6" } } }",
updated_at: "2022-03-02 07:14:48",
created_at: "2022-03-02 07:14:48",
id: 1,
}
마무리
- slack 초기설정 하는데 시간이 많이 걸리는건 포스팅과 함께 적용하느라 그런 것 일까...?
'Laravel' 카테고리의 다른 글
How can change css in laravel nova??? (0) | 2022.03.10 |
---|---|
Laravel로 만드는 Slack Bot (2) - 슬랙 봇 구현 (0) | 2022.03.02 |
Laravel RestAPI 구현하기 (3) - 상품조회,주문,주문조회 구현 (0) | 2022.03.02 |
Laravel RestAPI 구현하기 (2) - 회원가입,로그인,로그아웃 구현 (1) | 2022.03.02 |
Laravel RestAPI 구현하기 (1) - 모델링 (0) | 2022.02.28 |