Casual Developers Note

エンジニアやデザイナー向けの技術情報・英語学習情報・海外留学情報・海外旅行情報を提供中。世界を旅して人生を楽しもう。

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • お問い合わせ
現在の場所:ホーム / アーカイブchatbot

2018年2月12日 By KD コメントを書く

Slackにチャットするだけで為替レートを教えてくれるChatbotをPythonで作ろう

Slackにチャットするだけで為替レートを教えてくれるChatbotをPythonで作ろう

流行りのChatbotはいろいろな可能性を秘めています。流行っているのにはわけがあるのです。今回はSlackというチャットサービス上で、チャットするだけでボットが為替レートを教えてくれるChatbotをPythonで作ってみましょう。

はじめに

以下の以前の記事でChatfuelというサービスを使ったChatbotの作成方法について紹介しました。

ChatfuelでFacebookメッセンジャーを使うChatbot簡単入門

これはサービスなのでコーディング無しで簡単にChatbotが作れたわけですが、エンジニアからすると物足りないですよね。ということで、今回はPythonで実際にコーディングしながら、Slackにチャットするだけで為替レートを教えてくれるChatbotを作ってみましょう。

また、Pythonはインストールされている前提で進めます。インストール方法を知りたい人はこちらの記事を参考にして下さい。

Slackに登録する

Slackは仕事でよく使われるチャットサービスです。HipChatなどと比べると後発組になるので、デザインがオシャレで使いやすいです。デスクトップアプリはElectronで作られているのは以前の記事でお伝えしましたね。

それでは、Slackに登録していきましょう。Slackのサイトに行き、「Slackを始める」から「ワークスペースを新規作成」を選択します。ワークスペース名はチームで共有するチャットルームの名前ですが、今回はあなたとChatbotの会話になるので、好きな名前をつければ良いと思います。

スクリーンショット 2018 02 08 1 17 34

後は自分の名前とメールアドレスを登録すれば完了です。チームでの活動を前提とした作りなので他の人を招待するように促されますが、招待はしてもしなくても構いません。

SlackにBotsを登録する

次に、ワークスペースにログインし、「アプリを検索する」をクリックしましょう。

スクリーンショット 2018 02 08 1 28 17

アプリ一覧の検索画面が表示されるので、「bots」と入力して下さい。一番上に出てきたのが今回使う「Bots」というアプリです。「インストール」をクリックしましょう。

スクリーンショット 2018 02 08 1 30 42

続いて「設定を追加」をクリックします。

スクリーンショット 2018 02 08 1 31 01

「ユーザ名」はワークスペースに表示されるChatbot自体の名前になりますので、自由に決めてください。ユーザ名の入力が終わったら「ボットインテグレーションを追加する」をクリックします。

スクリーンショット 2018 02 08 1 31 32

SlackとBotsとのインテグレーションが完了すると、APIトークンが払い出されますので、メモしましょう。後で使います。

スクリーンショット 2018 02 08 1 31 47

これでSlack側の設定は完了です。

slackbotのインストール

今回はSlackのChatbotを実装するためにslackbotを使用します。

それでは、Pythonで仮想環境を作って、インストールしていきましょう。

$ python --version
Python 3.6.0
$ pip --version
pip 9.0.1
$ python -m venv slackbot-env
$ ls
slackbot-env/
$ cd slackbot-env/
$ ls
bin/        include/    lib/        pyvenv.cfg
$ pip install slackbot

これでインストールは完了です。

初期設定をする

インストールが終わったので、初期設定をしましょう。

フォルダとファイルを作る

まずは、今回必要なフォルダとファイルを作成します。

$ mkdir mybot
$ cd mybot/
$ touch slackbot_settings.py
$ touch run.py
$ mkdir plugins
$ cd plugins/
$ touch __init__.py
$ touch exchange_rate_bot.py
$ cd ..
$ tree
.
├── plugins
│   ├── __init__.py
│   └── exchange_rate_bot.py
├── run.py
└── slackbot_settings.py

1 directory, 4 files

設定ファイルを書く

「slackbot_settings」を書きましょう。

このファイルは、プロパティ値を書くためのファイルです。「API_TOKEN」に先程SlackのBotsの「インテグレーションの設定」で確認した「APIトークン」を記載して下さい。「DEFAULT_REPLY」はチャット上でメッセージを受け取った際に取るべきアクションがない場合に返却されるメッセージです。例えばSiriで言うところの「すみません、よくわかりません。」というメッセージのことです。「PLUGINS」は特定のフォルダを指定することで、そのフォルダ内のファイルを自動的に読み込んでくれる設定です。

API_TOKEN = "XXXX-XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXX"
DEFAULT_REPLY = "Sorry I didn't get you"
PLUGINS = ['plugins']

「run.py」を書きましょう。

このファイルは、slackbotを実行するためのスクリプトです。

from slackbot.bot import Bot


def main():
  bot = Bot()
  bot.run()


if __name__ == "__main__":
  print("Slack bot is starting...")
  main()

為替レートの取得とメッセージを実装する

それでは、メインのコーディングに入ります。

為替レートを取得するAPIですが、当初は以前使っていたYQLからYahoo!ファイナンスのデータを取得しようと思ったのですが、これは現在は動いていないです。なので、代わりに、FloatRatesのAPIを使います。データの取得は一日2回と書いてあるので、取得頻度が多い場合は向きませんが、今回は今日の為替レートが分かれば良いので、これを使います。

Pythonでコーディング

「exchange_rate_bot」の中身をコーディングしましょう。

ちゃちゃっとコーディングするとこうなります。

from slackbot.bot import respond_to
from slackbot.bot import listen_to
import re
import requests
import json

BASE_URL = "http://www.floatrates.com/"

JPY_URI = "daily/jpy.json"
USD_URI = "daily/usd.json"
CAD_URI = "daily/cad.json"


def getFloatRatesAPI(uri):
  floatrates_api_url = BASE_URL + uri
  res = requests.get(
      floatrates_api_url
  )
  return res


@respond_to('rates', re.IGNORECASE)
def mention_func(message):
  message.reply("Today's exchange rates are ...")
  jpy_data = getFloatRatesAPI(JPY_URI).json()
  usd_data = getFloatRatesAPI(USD_URI).json()
  uca_data = getFloatRatesAPI(CAD_URI).json()

  message.reply('[USD/JPY] ' + str(jpy_data['usd']['rate']) + "\n"
                + '[CAD/JPY] ' + str(jpy_data['cad']['rate']) + "\n"
                + '[JPY/USD] ' + str(usd_data['jpy']['rate']) + "\n"
                + '[JPY/CAD] ' + str(uca_data['jpy']['rate'])
                )

完成です。

円とアメリカ・ドルのレートと円とカナダ・ドルのレートを取得しています。「@respond_to」にチャットで聞く際のメッセージ(今回は「rates」)を記載し、「message.reply」で返答となるメッセージを設定しています。

Slackでチャットして動作確認する

最後に動作確認をしていましょう。

まずは、run.pyを実行してslackbotを起動します。

$ python run.py
Slack bot is starting...

すると、ワークスペースでmybotの起動を確認できます。

スクリーンショット 2018 02 08 16 15 55

それでは、mybotにチャットしてみましょう。mybotとのチャットページで「rates」と入力すると、今日の為替レートが返却されます。

スクリーンショット 2018 02 08 16 24 58

前から思っていましたが、カナダ・ドルのレートを見ると円高なんじゃないかと錯覚しますよね(笑)アメリカ・ドルと比べてお得感があるというか。

それはさておき、便利なボットなので、チームのみんなにも紹介してあげましょう。ということで、mybotを「#general」に招待します。

スクリーンショット 2018 02 08 16 24 15

すると、「#general」で誰でもmybotに為替レートを聞くことができます。

スクリーンショット 2018 02 08 16 25 15

返却される為替レートの結果は同じになりました。これは、最初に記載した通り、このAPIは一日2回のデータ更新なので、続けて実行しても結果は同じです。

それにしても律儀に毎回教えてくれるなんて、親切なボットができましたね。

最後に

いかがでしたか?Slackを使って為替レートを教えてくれるChatbotは楽しんでいただけましたか?天気予報やニュースと言った便利な情報を取得して教えてくれるボットや、ChatOpsなどのような何かアクションを代わりに実行してくれるようなボットなど、応用する範囲はいろいろあるので、試してみると面白いでしょう。それでは。

環境

  • PC : macOS High Sierra 10.13.3
  • python : 3.6.0
  • pip : 9.0.1
  • slackbot : 0.5.1

カテゴリ : 技術 Tips & Tutorials タグ : chatbot, exchange-rates, python, slack

2018年2月5日 By KD コメントを書く

ChatfuelでFacebookメッセンジャーを使うChatbot簡単入門

ChatfuelでFacebookメッセンジャーを使うChatbot簡単入門

AIの流行りと共に人気が出ているChatbotですが、最近ではサービスを使って簡単に作れるようになりました。今回はChatbotサービスであるChatfuelを紹介します。

Chatfuelとは?

ChatfuelはFacebookメッセンジャーを使ったChatbotを簡単に作れるサービスです。Chatbotは、人とコンピュータがインタラクティブに会話するプログラムのことですね。

Chatbotの始まりは1966年のELIZAと言われており、その後にIBMのWatson、MicrosoftのTay(問題発言で24時間で停止したのは有名な話)などが発表されてきました。最近では、iPhoneのSiriやGoogleのOk GoogleもChatbotです。チャットと言うより音声認識ですけどね。

また、少し古い記事ですが、BUSINESS INSIDERの「Messaging apps are now bigger than social networks」という記事によれば、SNSアプリよりChatアプリの方がアクティブユーザが多いそうです。私の場合はSNSは時間の無駄なのでほとんど見ていませんが、Chatアプリは毎日見ていますので、感覚的にも合っています。Chatbotが流行っているのは当然というわけです。

Chatfuelの始め方

それでは、ChatfuelでChatbotを作っていきましょう。

Facebookのアクセスを許可する

Chatfuelのサイトに行き、GET STARTED FOR FREEをクリックして下さい。

スクリーンショット 2018 01 21 0 10 00

すると、Facebookのアクセス確認の画面になりますので、「許可」をして下さい。

Facebookのページを作る

次に、Facebookのページを作るように促されるので、それに従って進みます。

スクリーンショット 2018 01 20 17 35 20

Facebookページはどれを作っても構いません。

スクリーンショット 2018 01 20 17 36 15

今回は「慈善活動またはコミュニティ」のページを作成します。

スクリーンショット 2018 01 20 18 28 58

ページ名は任意でOKです。「スタート」をクリックしたらページ作成は完了です。

ChatfuelとFacebookページを接続する

後は、「CONNECT TO PAGE」をクリックして、先程作ったFacebookページをChatfuelに接続します。

スクリーンショット 2018 01 20 18 30 02

接続が完了すると、作ったBotのページが表示されます。

スクリーンショット 2018 01 20 18 30 27

自動メッセージを設定する

次に、ユーザの入力に応じて返答するメッセージを設定していきましょう。

最初の挨拶とデフォルトの返答を設定する

右のメニューの「Automate」を選択します。

スクリーンショット 2018 01 20 22 39 09

「Welcome messege」を選びます。

スクリーンショット 2018 01 20 22 36 59

今回は以下のようにメッセージを設定してみました。SuperBotManとは我ながらセンスのない名前を付けてしまいましたが、このメッセージはこのBotが最初に表示するメッセージです。

スクリーンショット 2018 01 20 22 37 59

次に、「Default answer」を選びます。

スクリーンショット 2018 01 20 22 37 16

今回は以下のようにメッセージを設定しました。このメッセージは、ユーザの入力した内容に対して返答が用意されていない場合に、全て使われます。iPhoneのSiriがたまに言う「すみません、何とおっしゃったのかわかりません。」と同じです。

スクリーンショット 2018 01 20 22 38 47

自動の返答を設定する

それでは、ユーザの入力に合わせて返答していくルールを作っていきましょう。右のメニューの「Set UP AI」を選択します。

スクリーンショット 2018 01 20 22 39 24

今回は、デフォルトのグループを使い、日本語での会話にします。右上の言語を「Japnanese」にして下さい。

スクリーンショット 2018 01 20 22 44 10

「ADD AI RULE」でルールを設定していきます。右の「RANDOM」にチェックを入れると、返答のメッセージをランダムで表示することができます。

スクリーンショット 2018 01 20 22 43 47

この調子でいくつか返答を設定してみましょう。

スクリーンショット 2018 01 20 22 48 12

Facebookメッセンジャーで試す

オリジナルのBotができたので、Facebookメッセンジャーを使ってChatbotとして機能しているか確認していきましょう。

右上の「TEST THIS CHATBOT」をクリックします。

スクリーンショット 2018 01 20 23 16 15

すると、以下のようにFacebookログインの画面が出るのでログインします。

スクリーンショット 2018 01 20 23 16 27

その後で、先程の「TEST THIS CHATBOT」のボタンが「VIEW ON MESSANGER.COM」に変わっているので、クリックします。

スクリーンショット 2018 01 20 23 16 59

今度はFacebookメッセンジャーへのログイン画面が出るので、ログインします。

スクリーンショット 2018 01 20 23 17 09

これで、FacebookメッセンジャーのオリジナルBotのページが表示されます。試しに、メッセージを入力してみましょう。

スクリーンショット 2018 01 20 23 19 04

最初のランダムの挨拶で「お疲れ様です」が出てしまったので、少し変な会話になっていますが、想定通りの返答が返ってきていますね。

また、自分のFacebookページの右下にもMyBotのメッセンジャーが表示されていますので、通常のFacebookメッセンジャーと同じように入力できます。

スクリーンショット 2018 01 20 23 20 10

いろいろ設定を加えていけば、SiriのようなChatbotができそうですね。

最後に

いかかでしたか?自分のオリジナルのChatbotを作るのは面白いですし、開発面ではChatOpsに応用することが可能です。ではまた。

カテゴリ : 技術 Tips & Tutorials タグ : chatbot, facebook

ブログ更新情報や海外の関連情報などを配信する無料メルマガ

Sponsored Links

About Author

KD

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。

https://casualdevelopers.com/

最近の投稿

  • 2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年1月13日
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    2019年11月4日
  • ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    2019年10月30日
  • BashからZshに移行する方法(Mac編)

    BashからZshに移行する方法(Mac編)

    2019年10月21日
  • Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    2019年9月30日

カテゴリ

  • 技術 Tips & Tutorials (100)
  • 技術塾 (6)
  • ライフハック (26)
  • 海外留学 (12)
  • 英語学習 (3)
  • コラム (6)

アーカイブ

最高の学習のために

人気記事ランキング

  • MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
    MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
  • Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
    Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
  • SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
    SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
  • バンクーバー留学豆知識:バンクーバーのATMで日本の銀行のキャッシュカードを使ってお得にお金を引き出す方法
    バンクーバー留学豆知識:バンクーバーのATMで日本の銀行のキャッシュカードを使ってお得にお金を引き出す方法
  • Amazon EC2インスタンスにSSHできなくなった時の対処法
    Amazon EC2インスタンスにSSHできなくなった時の対処法
  • Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
    Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
  • TumblrからWordPressにブログ移転する最適な方法
    TumblrからWordPressにブログ移転する最適な方法
  • SpringBootのProfile毎にプロパティを使い分ける3つの方法
    SpringBootのProfile毎にプロパティを使い分ける3つの方法
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~
    今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~
  • バンクーバー留学豆知識: バンクーバーのカジノを攻略せよ!必勝法を公開します!
    バンクーバー留学豆知識: バンクーバーのカジノを攻略せよ!必勝法を公開します!

Bitcoin寄付 / BTC Donation

Bitcoinを寄付しよう

BTC
Select Payment Method
Personal Info

Donation Total: BTC 0.0010

このブログの運営のためにBitcoinでの寄付を募集しています。お気持ち程度の寄付を頂けると管理者の励みになります。

Bitcoin寄付について知りたい方はこちらの記事へ

ビットコイン取引ならここ

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • サイトマップ
  • タグ一覧
  • プライバシーポリシー
  • お問い合わせ

Copyright © 2023 KD - Casual Developers Notes