LoginSignup
0
1

More than 5 years have passed since last update.

RESTfm を用いた Chatbot アプリケーションの例

Last updated at Posted at 2016-12-24

RESTfm を用いた Chatbot アプリケーションの例

最終日にはいよいよ RESTfm を用いたアプリケーションを作ってみましょう。ただ、普通の CRUD ができるアプリケーションでは面白くありません1

そこで今回は Chatbot を作ってみます。Read したいレコードを指定すると bot がそのレコードの内容を返してくれる、というシンプルなものです。

環境

諸事情があり、以下のような構成にします。本質的な内容は Hubot + Slack などでも同じです。

Ruboty のインストールと起動

Ruboty 自体のインストールや起動(常駐)方法についてはここでは省略します。

利用するデータベース

具体例として利用するデータベースを用意します。以下のようにStaffというデータベースのStaffDataレイアウト内のstaff_dataというテーブルを用います。

fm_Qiita_02.png

fm_Qiita_03.png

以下の5つのカラムが定義されているのが分かります。

  • id
  • name
  • gender
  • work
  • point

このテーブルに対して 7 つのデータが投入されています。

Ruboty の仕様

ChatWork 上の bot に対して、以下のように投げたら、そのidの人のnameを返すようにしてみます(ここではid2ですね)。bot の名前はsrmとします。

srm このID誰? 2

Ruboty のスクリプトを書いていく

ではスクリプトを書いていきましょう。「FileMaker API for Ruby (ginjo-rfm)」についての記事も参考にしてください。

まずは必要なものをrequireします。
restfm_ruboty.rb
require 'rfm'
require 'open-uri'
require 'json'
次に接続情報を書いてあげます。
restfm_ruboty.rb
RFM_CONFIG = {
  :host          => 'FileMaker Server のアドレス',
  :account_name  => 'ユーザ名',
  :password      => 'ユーザ名に対するパスワード',
  :database      => 'Staff',
  :layout        => 'StaffData',
  :ssl           => false # デフォルトが true なので注意
}
次に Ruboty の核の部分を書いていきましょう。まずはおまじない的な部分です2
restfm_ruboty.rb
module Ruboty
  module Handlers
    class Restfm < Base
      on(/このID誰? (.*)/, name: "who_is_this_id", description: "指定したIDの人は誰か")
メインのメソッドを書きましょう。check_who_is_this_idというメソッドにより@nameに名前が入るという設計です。
restfm_ruboty.rb
      def who_is_this_id(message)
        id = message.match_data.to_s.match(/このID誰? (.*)/)[1].to_s
        check_who_is_this_id(id)
        message.reply("ID #{id} の人の名前は #{@name} です!")
      end
check_who_is_this_id メソッドを書きましょう。RESTfm は http://hogehoge/RESTfm/ に配置されているものとします。
restfm_ruboty.rb
      def check_who_is_this_id(id)
        json = open("http://hogehoge/RESTfm/Staff/layout/StaffData/id%3D%3D%3D#{id}.json").read
        json_parse = JSON.parse(json)
        @name = json_parse["data"][0]["name"] # [0] を忘れない
      end

Ruby のスクリプトが完成

上述のスクリプトを組み合わせれば完成となります。完成したスクリプトは以下のとおりです。

restfm_ruboty.rb
require 'rfm'
require 'open-uri'
require 'json'

RFM_CONFIG = {
  :host          => 'FileMaker Server のアドレス',
  :account_name  => 'ユーザ名',
  :password      => 'ユーザ名に対するパスワード',
  :database      => 'Staff',
  :layout        => 'StaffData',
  :ssl           => false # デフォルトが true なので注意
}

module Ruboty
  module Handlers
    class Restfm < Base
      on(/このID誰? (.*)/, name: "who_is_this_id", description: "指定したIDの人は誰か")

      def who_is_this_id(message)
        id = message.match_data.to_s.match(/このID誰? (.*)/)[1].to_s
        check_who_is_this_id(id)
        message.reply("ID #{id} の人の名前は #{@name} です!")
      end

      def check_who_is_this_id(id)
        json = open("http://hogehoge/RESTfm/Staff/layout/StaffData/id%3D%3D%3D#{id}.json").read
        json_parse = JSON.parse(json)
        @name = json_parse["data"][0]["name"] # [0] を忘れない
      end

    end
  end
end

テストしてみる

さっそく Ruboty で試してみましょう。以下のように表示されれば成功です!

srm このID誰? 2

ID 2 の人の名前は higashino です!

様々なアプリケーションを作る

今回は RESTfm を用いて Chatbot を作ってみました。Web API が使えるということで、いわゆる CRUD ができる Webアプリケーション だけではなく、Chatbot のようなアプリケーションも簡単に作ることができます。

アイデアを活かして、様々なアプリケーションを作ってみてください3


  1. サンプルアプリケーションがありますし、フレームワークも多くあります 

  2. 荒い正規表現なので適当に修正をしてください 

  3. 今だと Amazon Dash Button を使ったアプリケーションが面白そうです 

0
1
0

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
0
1