1
1

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 3 years have passed since last update.

IBM Cloudで翻訳Botを作ってみた

Posted at

はじめに

まず、IBM Cloudで翻訳Botを作成するにあたって、チャットのインターフェースとなるツールを選択しないといけません。Slackは比較的簡単に連携できますが、日本人であれば、馴染みのあるLINEに連携させたいはず!!という事で、LINE連携で翻訳Botを作成します。

事前準備

・Node-REDで構築しますので、こちらを参考に環境を作成しておく。
こちらを参考にLINE Messaging APIを使う準備をしておく。

Watson Language Translatorの作成

  1. IBM Cloudにログインし、ダッシュボードより「カタログ」をクリック
    image.png

  2. 検索窓に「Language Translator」を入力
    image.png

  3. 適当なリージョン(基本はダラス)、料金プラン(ライトプラン)を選択し、「作成」ボタンをクリック
    これでWatson Language Translatorが使えるようになりました。
    image.png

LINE Messaging APIの作成(LINE Developers)

  1. LINE DevelopersにLINEアカウントでログイン
  2. チャネル設定から「新規チャネル作成」をクリック
    image.png
  3. 「Messaging API」を選択する
    image.png
  4. チャネル名に適当なBotの名前を入力(これがLINEに表示されるBotの名前になります)し、各種チェックボックスにチェック後、作成ボタンをクリック
    image.png
    image.png
  5. 「同意する」をクリック
    image.png
  6. チャネル基本設定の下の方にあるWebhook設定に以下を入力し更新ボタンをクリック
      https://「Node-REDのチャネル名」.mybluemix.net/trans
    image.png
  7. Chanel Access Tolenを取得
    右端にある「発行」ボタンをクリックし、Chanel Access Tolenを取得します。これは後続作業で使用しますので、控えておきます。
    image.png
  8. 応答メッセージの詳細設定から応答メッセージは「オフ」に変更する
    image.png

Node-REDでアプリ作成

まず、完成形から。最終的に以下のようなフローを作成します。
image.png

####1.左のノード一覧より「http in」ノードをパレットに配置
メソッドは「POST」、URLは「/trans」を設定します。
URLの「/trans」は上記、LINE Messaging APIの作成の6.で指定したWebhookのアドレスの末尾の文字列になります。
image.png

####2.IBM Watsonから「Language Translator」ノードを配置します。
「Language Translator」ノードのHelpを読むとmsg.payloadで渡して、msg.payloadで受け取るとあります。msg.payloadへデータを入れるための処理を「function」ノードで行います。これが上記フローの「翻訳準備」にあたる部分になります。「function」ノードはJavaScriptで記述します。Node-REDではmsgというJavaScriptオブジェクトを使ってノード間でデータを受け渡しを行います。

【「Language Translator」ノードのHelpより】
image.png

####3.「http request」ノードを配置
以下のようにURLを指定して、LINE Messaging APIをCALLし、翻訳結果を返信します。
LINEへ返信するための設定をその直前の「function」ノードでやっています。
この中で、Channel access token を指定します(LINE Messaging APIの作成の7.で取得したものです)
全てのノードを配置し終わったら、右上の「デプロイ」を実行します。
image.png

####4.完成
以下のように翻訳してくれるBotができました。
image.png

##参考
####1.エラーが発生した場合に備えて
以下のように「debug」ノードを配置しておくとログを見る事ができます。
image.png

####2.ソースコード
参考にソースコードを添付します。

[{"id":"221915cf.607392","type":"tab","label":"フロー 1","disabled":false,"info":""},{"id":"e05b84c2.2f69d8","type":"http request","z":"221915cf.607392","name":"LINE Messaging API実行","method":"POST","ret":"txt","paytoqs":"ignore","url":"https://api.line.me/v2/bot/message/reply","tls":"","persist":false,"proxy":"","authType":"","x":270,"y":560,"wires":[["35ca4ede.3372d2"]]},{"id":"35ca4ede.3372d2","type":"debug","z":"221915cf.607392","name":"APIリクエスト結果","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":600,"y":560,"wires":[]},{"id":"b7d87e2f.2c2888","type":"function","z":"221915cf.607392","name":"LINEへの返信準備","func":"var messageText = msg.payload;\nmsg.payload = {\"messages\": [{\"type\": \"text\", \"text\": messageText}], \"replyToken\": msg.replyToken};\nmsg.headers  ={    \"Content-Type\": \"application/json\",    \"Authorization\": \"ここにLINE Messaging APIのChannel access tokenを指定する\"};\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","x":440,"y":400,"wires":[["e05b84c2.2f69d8","e6dd74e4.ef9b98"]]},{"id":"e6dd74e4.ef9b98","type":"debug","z":"221915cf.607392","name":"Watsonの翻訳結果","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":750,"y":400,"wires":[]},{"id":"e61b56b4.932628","type":"debug","z":"221915cf.607392","name":"翻訳をリクエストした日本語","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":640,"y":220,"wires":[]},{"id":"945c7146.6e7b8","type":"watson-translator","z":"221915cf.607392","name":"翻訳","action":"translate","basemodel":"en-tr","domain":"general","srclang":"ja","destlang":"en","password":"","apikey":"Wo5q6_1jn45aqK5QCR5PNueRs9RTSYIHGOUMb84xTNnd","custom":"","domainhidden":"general","srclanghidden":"ja","destlanghidden":"en","basemodelhidden":"en-tr","customhidden":"","filetype":"forcedglossary","trainid":"","lgparams2":true,"service-endpoint":"https://api.us-south.language-translator.watson.cloud.ibm.com/instances/f371e853-a2ea-4a74-85c4-585a9718fe01","x":210,"y":400,"wires":[["b7d87e2f.2c2888"]]},{"id":"cdb992ab.e74ec8","type":"http in","z":"221915cf.607392","name":"POST","url":"/trans","method":"post","upload":false,"swaggerDoc":"","x":90,"y":220,"wires":[["4d77eeca.c59358"]]},{"id":"4d77eeca.c59358","type":"function","z":"221915cf.607392","name":"翻訳準備","func":"var event = msg.payload[\"events\"][0];\n\nmsg.replyToken = event[\"replyToken\"];\nmsg.payload = event[\"message\"][\"text\"];\n\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","x":320,"y":220,"wires":[["e61b56b4.932628","945c7146.6e7b8"]]}]

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?