※和訳 by システム部技術広報ちはっぴーでお送りします!オリジナル(英語)版はこちら : https://gmor-sys.com/2020/09/11/chatbot-en/
皆さん、初めまして!
GMOリサーチシステム部の金野エイシアです。
皆さんは『チャットボット』をご存知でしょうか?
このブログを読んでいる方のほとんどがご存知だとは思いますが、一応説明しておくと、人工知能を利用した自動会話機能のことです。
企業のHPなどを訪れた際に、「何かお困りの方はありませんか?」などという文章と共にポップアップされている、アレです。
様々なことがインターネット上でのやりとりに切り替わってきている現在、チャットボットの重要性はこれまでになく高まっていると感じます。
もちろん、このような変化の時代の中でビジネスを成功させるためには、オフラインでの対応やマーケティングなども重要です。
これらを念頭に置いて、LINE API、Ruby、Herokuを使用してチャットボットを作成するという新しい取り組みに挑戦してみました。
それにより、新しい技術を学び、Rubyのスキルを磨くことができました。
ということで、今日はわたしと一緒にLINEチャットボットを作っていきましょう!
目次
- LINEメッセージAPIをセットアップする
- Herokuをセットアップする
- Rubyでコードを書く
- 3で書いたコードをHerokuサービスでデプロイする
- 作成したLINE botを友達登録してテストする、楽しむ!
それでは実際に作っていきます!
Step 1.LINEメッセージAPIをセットアップする
これを行うには、LINE Developersアカウントにサインアップする必要があります。
すでにLINEアカウントをお持ちの方はhttps://developers.line.biz/en/から簡単にログインできます。
LINEメッセージAPIは、メッセージをプッシュおよび受信できます。
ログインすると、準備完了です。
<手順>
まずはプロバイダを作成します。
プロバイダーを作成すると、ボット専用のメッセージAPIチャネルを作成できるようになります。
チャネルタイプの選択を求められたら、[Create a Messaging API channel]をクリックします。
チャネルアイコンと名前がbotのLINEプロフィールとして表示されますが、後で編集できない可能性があるため、注意してください。
チャネルを作成した後、[Basic Settings]タブでチャネルシークレットトークン、アサーション署名トークンを発行します。
その後、[Messaging API]タブに移動し、チャネルアクセストークンを発行します。
これは後で使用するので、メモしておくことをお勧めします。
Step 2: Heroku Web Appをセットアップする
アカウントを持っていない場合、Herokuの登録を行いましょう。
ログインできたら新しいアプリを作成していきます。
Herokuはクラウド上でアプリケーションを構築して実行するサービスなので、後でコードをHerokuにデプロイします。
Step 3: コードを書く
app.rb fileに下記を書いてみる:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# app.rb require "sinatra" require "json" require "net/http" require "uri" require "tempfile" require "line/bot" def client @client ||= Line::Bot::Client.new { |config| config.channel_secret = ENV["LINE_CHANNEL_SECRET"] config.channel_token = ENV["LINE_CHANNEL_TOKEN"] } end def chat_bot_replies(a_question, user_name) if a_question.match?(/(Hi|Hey|Konnichiwa|Hi there|Hey there|Hello|Test).*/i) "Hey " + user_name + ", how are you?" elsif a_question.match?(/(Good Morning|Wake up|Morning).*/i) "Good morning" elsif a_question.match?(/(Good night|Sleep|Night|Evening).*/i) ["Sweet dreams, "+ user_name, "Good night!" + user_name].sample elsif a_question.match?(/how\s+.*are\s+.*you.*/i) "I am super!, " + user_name elsif a_question.end_with?('?') "Nice question, " + user_name + "!" else ["Really?!", "Great to hear that.", "Wow."].sample end End post "/callback" do body = request.body.read signature = request.env["HTTP_X_LINE_SIGNATURE"] unless client.validate_signature(body, signature) error 400 do "Bad Request" end end events = client.parse_events_from(body) events.each { |event| case event when Line::Bot::Event::Message case event.type when Line::Bot::Event::MessageType::Text p event user_id = event["source"]["userId"] user_name = "" response = client.get_profile(user_id) case response when Net::HTTPSuccess then contact = JSON.parse(response.body) p contact user_name = contact["displayName"] else p "#{response.code} #{response.body}" end message = { type: "text", text: chat_bot_replies(event.message["text"], user_name) } client.reply_message(event["replyToken"], message) p 'One more message!' p event["replyToken"] p message p client else message = { type: "sticker", packageId: "11537", stickerId: ["52002742", "52002753", "52002745", "52002768"].sample } client.reply_message(event["replyToken"], message) end end } "OK" end |
まず始めに、このリンクのパッケージをアップロードします。
もちろん、PHPやPythonなどの他のプログラミング言語を使用することもできます。
読者の方それぞれが選択した言語を使用すると仮定して、Ruby環境のセットアップ手順はこれ以上は省かせていただきます。
ただし、もしRubyに興味がある場合は、Rubyの公式ドキュメントをチェックしてみてください。
Step 4: Herokuにコードをデプロイする
Herokuでボットをホストするのは非常に簡単です。
手順があるデプロイメントタブは、Herokuサイトですぐに利用できます。
URL: https://dashboard.heroku.com/apps/{HEROKU_APP_NAME}/deploy/heroku-git
または、以下の手順に従うこともできます。
利用できる展開方法は2つありますが、ここではHeroku CLI方法について説明していきます。
Heroku CLIをインストールする
Heroku CLI をインストールしましょう。
Herokuアカウントにログインし、もしSSH公開鍵を未作成の場合はプロンプトに従って新しい鍵を作成します。
1 |
$ heroku login |
新しいGit リポジトリを作成する
新規または既存のディレクトリでGITリポジトリを初期化していきましょう。
1 2 3 |
$ cd gmorbot/ $ git init $ heroku git:remote -a gmorbot |
手順2で保存したトークンをHerokuの環境変数として設定します。
1 2 |
$ heroku config:set LINE_CHANNEL_SECRET={YOUR LINE_CHANNEL_SECRET} $ heroku config:set LINE_CHANNEL_TOKEN={YOUR LINE_CHANNEL_TOKEN} |
Herokuダッシュボードに環境変数を直接入力できます。
アプリケーションをデプロイする
コードをリポジトリにコミットし、Gitを使用してHerokuにデプロイします。
変更するたびに、同じ手順を繰り返してくださいね!
1 2 3 |
$ git add . $ git commit -m "delete...add...edit..i hope it works" $ git push heroku master |
最後に、LINEコンソール(ページ)に戻り、[Massaging API]タブにWebhook URLを入力します。 URLは次の形式にする必要があります。
https://{HEROKU_APP_NAME}.herokuapp.com/callback
[確認]ボタンをクリックして、Webhookが機能することを確認します。
SUCCESSが返されたら、成功です!
Step 5: Botを友達追加してみよう
最後に、メッセージングAPIタブに表示されたQRコードを使用してLINEボットを追加します。
新しいボットの友達とチャットを始めることができます。
それが返信を返すなら、おめでとうございます!
シンプルなLINEボットを作成しました。
テストを続け、時間があれば、好きなように微調整してください。
APIを使用してステッカーやその他の種類のファイルを送信することもできます。
デバッグ用URL: https://dashboard.heroku.com/apps/{HEROKU_APP_NAME}/logs
追記
さらに、自分自身のプロジェクトにIBMのWatson視覚認識ツールを統合してみました。
これにより、画像がボットに送られてくると送られてきた画像を識別しようとします。
最後になりましたが、誰もが正規表現を使いこなせる訳ではないと思います。
そこで、Rubyの正規表現のテストにも使えるサイト(https://rubular.com/)を紹介させていただきます。
ぜひGMOR BotをLINEの友だちに追加してみてください。
それでは、最後までお読みいただきありがとうございました!
*
GMOリサーチでは、WEBエンジニア(サーバーサイド、インフラ、フロントエンド)を随時募集しております。
興味のある方は、ぜひこちらからご応募ください!
詳しい募集要項など採用情報はこちら
参考:
https://developers.line.biz/en/docs/messaging-api/building-bot/
https://developers.line.biz/en/docs/messaging-api/building-sample-bot-with-heroku/