🐥

(non-Cloudflare Topic) direct と daab をコンテナで起動してみる

2024/07/16に公開

direct と daab

direct とは株式会社L is B が提供しているビジネス用チャットサービスです。
daabとはdirect agent assist botの略称でdirect向けボットサービスです。そしてdirect SDKがそれを開発できるツールです。
こちらに開発者向け情報がまとまっています。

この記事では2回連載で以下を行っていきます。

  1. Daab を活用したBot環境をコンテナで起動
  2. 1.で出来上がったBotのコンテナ連携

0. 必要なもの

このハンズオンでは以下が必要です。
メールアドレス2つ
AWS アカウント Amazon EC2/Amazon Linux 2023

1. アカウント開設

無料のアカウントが開設でいますのでこちらからアカウントを開設します。登録を行うとメールが届きますのでそちらの内容に従って認証すれば開設できます。

2. 組織の設定とBot用アカウント作成

Chatbotを作成するためにBotを起動させるアカウントを登録する必要があります。管理者用アカウントは1.の手順で出来ていますので、それとは別にBot用アカウントを作成するのですが、その前にまず組織を作成する必要があります。
組織とは管理者により参加が許可されたユーザーの一覧が集まる空間を指します。directでは組織に参加していないユーザーはコミュニケーションを行うことができません。
image.png
まず組織の画面に移動し組織の作成をクリックします。
image.png
組織名を適当につけます。
image.png
会社名、氏名、住所、電話番号、などが求められますので適宜必要な情報を入力して組織を作成ボタンをおします。
image.png
確認ダイアログでOKを押します。
image.png
組織ができるとユーザーの招待画面になります。
image.png
役割をユーザーとして招待ボタンを押します。
image.png
メールが届きますので適当なパスワードを設定しログインします。パスワードは後ほど使いますので覚えておいてください。
組織への招待を承認します。
image.png
作業が終わったら一度管理者としてログインしなおしておきます。

3. Amazon Linux 2023 での Docker 設定

この手順ではAmazon EC2そのものの起動は割愛します。起動するインスタンスは無料利用枠の最小で問題ありません。

sudo yum install docker

でインストールを行います。

sudo systemctl start docker
systemctl status docker

を実行して以下のような情報が表示されれば起動は完了です。

● docker.service - Docker Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; preset: disabled)
     Active: active (running) since Mon 2024-07-15 05:03:49 UTC; 12s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
    Process: 26734 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS)
    Process: 26735 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS)
   Main PID: 26736 (dockerd)
      Tasks: 7
     Memory: 31.9M
        CPU: 324ms
     CGroup: /system.slice/docker.service
             └─26736 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit nofile=32768:65536

次にAmazon Linux 2023 用のDocker イメージをレポジトリからpullします。

sudo docker pull amazonlinux:2023
2023: Pulling from library/amazonlinux
ee5ee7078986: Pull complete 
Digest: sha256:d5b9690df4ce1a70d738d8c8f7a6b4275008df95d4ddc2435e4e8e4352db61a5
Status: Downloaded newer image for amazonlinux:2023
docker.io/library/amazonlinux:2023

次に先ほどpullした素の状態の Amazon Linux 2023 を起動します。

sudo docker run -it -d -p 18080:8080 --name daab amazonlinux:2023

以下のコマンドで起動状態を確認できます。

sudo docker ps
CONTAINER ID   IMAGE              COMMAND       CREATED              STATUS              PORTS                                         NAMES
274793d6f332   amazonlinux:2023   "/bin/bash"   About a minute ago   Up About a minute   0.0.0.0:18080->8080/tcp, :::18080->8080/tcp   daab

ではここからコンテナの中身に入りdaabのインストールを行っていきます。

sudo docker exec -it daab bash
mkdir daab
cd daab

(Node15移行だとルートディレクトリでの動作ではエラーが出ますので注意してください)
まず最初に動作に必要なNodenpmをインストールします。

yum install npm
npm -v

次にdaab本体をインストールします。

npm install -g daab

インストールが完了したらボットを初期化します。

daab init

全てEnterでデフォルトのまま初期化を行います。

? package name 
? version 0.1.0
? description 
? author 
? choose files you need 
daab initialized.

次に起動を行うために先ほど作成したbot用アカウントでログインします。

daab login
daab login
[2024-07-15 05:16:57]  Not enough parameters provided. I need a access token    
[2024-07-15 05:16:57]  WebSocket opened.    
Email: harunobu@cloudflare.com
Password: 
logged in.

ログインが完了したらbotを起動します。

daab start

4. テスト

ではdirectの画面にメイン管理者としてログインしてチャットを開始します。

image.png
pingと入力するとPONGと戻ってきます。
image.png

Linux側でexitを入力しても引き続き動作します。
今度は以下のコマンドでdaab用コンテナを停止させます。

sudo docker stop daab

再度pingと入力すると反応が戻ってこなくなるため、コンテナで正しくチャットボットが起動していたことがわかります。

5. 環境の簡単な解説

daab loginを行った時点で.envにクレデンシャルが書き込まれます。

cat .env  | grep HUBOT_DIRECT_TOKEN

daab はこのクレデンシャルを利用してdirectと通信を行っています。
起動されたdaabはdirect側と通信をしながらユーザー(今回の場合は管理者)からのチャットの呼びかけを待ち構えています。つまりチャットボット本体はdirectへアップロードされなくても動作する、という点が注意点です。

Discussion