2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Enebular & docomoAPI & Slackで雑談Bot作成

Last updated at Posted at 2019-02-09

今回は、enebularで雑談ボットを作りました。
参考にしたのは月刊I/O 19年1月号の記事。リンクとか貼るのがいいかと思いましたが、月刊I/Oのサイトにアクセスすると「セキュリティがあーだこーだ・・・」と警告が上がり断念しました。なのでamazonのリンクを貼っておきます。→こちら

#やったこと
Slackで雑談相手になってくれるチャットボットを作りました。Slackにはslackbotがありますが、彼は仕事熱心で雑談にのってくれるようなタイプではありません。(↓↓こんなやつ)

slack01.JPG

そこでenebulardocomo雑談対話APIのお力を借りて、話せる相手を作りました。

#使ったもの
Slack bots:会話の入出力
Docomo雑談対話API:会話の相手
enebular:上の二つの要素をロジックで結ぶ

#手順1 Slackにbots appを追加
まずは、適当なSlackのワークスペースを作成します。左の帯の部分に、App追加の+ボタンがるのでクリック。

image.png

すると、下のようなボタンがあるのでクリック。

image.png

検索スペースが出てくるので、"bots"と入力。出てきたAppをインストールします。

image.png

インストールされたAppの設定ページに飛びます。赤枠の鉛筆マークです。

image.png

設定のページにAPIトークンがあるので、メモ帳にコピペしておきます。また、名前もカスタマイズできます。英語の小文字のみのようですが、お話相手の名前を決めましょう。

image.png

ここまででSlackでやることはおしまいです。

#手順2 docomo雑談対話APIを準備
次にdocomo developer supportで雑談対話APIの利用申請をします。この辺はサクサク行きます。
「マイページ」→「API利用申請・管理」→「新規API利用申請」と進むと、利用申請のフォームに入力を求められます。そこを何とかクリアすると、API選択画面に移ります。
今回は自然対話:雑談対話を選択しました。他にもいろいろあって気になります。

image.png

登録申請が終わると、登録アプリケーション一覧でアプリケーション情報を確認できます。ここのAPI Keyはあとで使いますので控えておきましょう。

image.png

#手順3 enebularでFlowを構築
ここでやっとenebularを立ち上げます。
まず、必要なノードをインストールします。右上の「admin」タブでインストールできます。

image.png

以下の2つをインストールします。
・node-red-contrib-slacker
・node-red-contrib-docomoapi

次に雑談対話APIの「appID」を取得します。このAPIは会話ステータス管理のために、ユーザーごとに「appID」が必要になるとのこと。なんだか少し難しい話です。
その辺はおいおい理解するとして、以下のようにノードを繋げます。左から、「inject」ノード、「NaturalCattingRegistration」ノード(docomoAPI)、「debug」ノードです。

image.png

真ん中の「Natural~~~~」ノードの設定を行います。
・API Key:docomoAPI利用申請で控えたAPI Key
・BotID:雑談対話
・AppKind:任意
・Name:任意(ノードの名前)

これでひとまずデプロイします。「inject」ノードのボタン(上のピクチャの赤枠部分)を押すと、デバッグ画面に次のように「appID」が返されます。これを控えておきましょう。

image.png

次が本丸です。以下のようにノードを繋げます。

image.png

「debug」ノードを除いて左から、①「slack」ノード(インストールしたノード) → ②「function」ノード
 → ③「Dialogue」ノード(docomoAPI) → ④「function」ノード → ⑤「slack」ノード(インストールしたノード)

それぞれのノードを次のように設定します。

①「slack」ノード
・Token:Slackのbots appトークン

②「function」ノード
・コードを以下のように記述

var appRecvTime = flow.get("serverSendTime");

var payload = {
    "appId" : "雑談対話APIの「appID」",
    "voiceText" : msg.payload,
    "appRecvTime" : appRecvTime
};

msg.payload = payload;

return msg;

③「Dialogue」ノード
・API Key:「Natural~~~~」ノードと同じ
 ※雑談対話APIの「appID」を取得した時のAPI Key

④「function」ノード
・コードを以下のように記述

flow.set("serverSendTime",msg.payload.serverSendTime);

var payload = msg.payload.systemText.expression;
msg.payload = payload;

return msg;

⑤「slack」ノード
・Token:Slackのbots appトークン

これで完成。あとはSlackで会話を楽しみましょう。

#結果
出来上がりはこんな感じです。会話になっているようでなっていないですね。ズレ漫才的な空気が楽しめます。

image.png

docomoAPIの「キャラ変」を使えば、語尾も変えられるみたい。次はそれを追加してみよう。

#学んだこと
・node-redのノードがいろいろ作られていて、それをインストールして使うことができる
・初めて使うノードは”情報”タブでInputとOutputのデータ形式を確認する

#追加:キャラ変をやってみた
思いの外、キャラ変が簡単でした。②「function」ノードを以下のように書き換えます。

var appRecvTime = flow.get("serverSendTime");

var payload = {
    "appId" : "雑談対話APIの「appID」",
    "voiceText" : msg.payload,
    "appRecvTime" : appRecvTime,
    "clientData" :{
      "option":{
      "t":"akachan"
      }
    }
};
msg.payload = payload;

ここのakachanの部分を変えることでいろいろ試せます。

image.png

なぜか細分化された愛媛県が気になります。
結果がこちらです。

image.png

途中でコードを変えています。いろいろやってみましたが、最後の文のように、キャラになり切れていない時もあります。ボットくんも役作りが大変なんでしょうね。

2
3
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?