Skip to content

Latest commit

 

History

History
244 lines (130 loc) · 10.6 KB

04_chat_output.md

File metadata and controls

244 lines (130 loc) · 10.6 KB

チャットにデータを送ってみよう

この章ではチャットにデータを送ってみましょう。

image

猫画像 API の仕組みでAPIとやり取りができるようになったので、 Discord というチャットツールで特定のチャンネルにメッセージを送るAPIがあるので使ってみます。

Discord とは

image

Discord (ソフトウェア) - Wikipedia

Discord(ディスコード)は、Windows・macOS・Linux・Android・iOS・Webブラウザで動作する、ビデオ通話・音声通話・VoIPフリーソフトウェアである。アメリカ合衆国で開発されており、2019年5月時点でユーザー数が2億5000万人に達している。

とのことで、当初はゲーム実況やゲーム時のコミュニケーションに使われていますが、当初よりボットやメッセージといった仕組みがプログラムからも作りやすく、最近では、開発に使う方がいたりと、なかなか扱いやすいチャットツールです。

チャットツールというと、LINE ・ Slack ・ Microsoft Teams ・ チャットワークといったツールもありますね。自由にメッセージが送れると、いろいろなことができます。

たとえば、

  • 自分用のチャットルームで必要なニュースやSNSでの情報を集めて把握しやすくする。
  • 仕事用のチャットルームで、今日1日の自分業務を朝にリマインドしていいスタートを切る。

といったことができます。

Discord でメッセージを送れる API をしらべる

image)

DiscordのWebhookドキュメント の Webhook 実行については、このように書かれています。

読み解くと、

  • POST /webhooks/{webhook.id}/{webhook.token}
    • POST メソッドでリクエストしてほしい
    • /webhooks/{webhook.id}/{webhook.token} 各チャンネルで特有のURLがある(後述)
  • 送るデータはJSONで content というオブジェクトの中に文字を入れればメッセージとして送れる
    • 例えば、こんな感じ。 {"content":"やっほー!"}

といった API のルールが書かれています。

今回のメッセージを送るチャンネル

image

私が持っている Discord サーバーの一つにチャンネルを一つ作りました。

あらかじめ、API の送り先を発行してあります。各ワークショップで振り分けていますので、いま入っているワークショップの方を使いましょう。

田中ワークショップルームの人

<当日だけ開かれたDiscordのURLを記述していました>

横井ワークショップルームの人

<当日だけ開かれたDiscordのURLを記述していました>

こちらです↑

今回はこちらのURLに、POSTリクエストで送るデータはJSONで content というオブジェクトの中に文字を入れてメッセージを送ります。

[実践]: Katacoda での Node-RED の準備

image

一旦、Katacodaをリロードして再起動しましょう。

https://www.katacoda.com/kazuhitoyokoi/scenarios/node-red

もしも閉じてしまった方はこちらから。再度、起動しましょう。

image

このように教材がはじまるので START SENARIO をクリックします。

image

起動して、しばらく待ちます。

image

おおよそ、40 秒 ~ 1 分待っていると起動するのでお待ちください。

Node-RED のフローを作ってみる

image

このように inject ノードで、メッセージの中身のデータを作って、http request ノードで前述した Discord の API URL に送るように設定して、debug ノードで送られた結果を受信する仕組みです。

それでははじめましょう!

image

はじめに、パレットから inject ノードをワークスペースにドラッグアンドドロップしましょう。

image

次に、パレットから http request ノードをワークスペースにドラッグアンドドロップしましょう。

image

最後に、パレットから debug ノードをワークスペースにドラッグアンドドロップしましょう。

image

各ノードを inject ノード → http request ノード → debug ノード の順につなぎます。これで、フローは完成です。

[実践]: inject ノードで、送るメッセージの中身のデータを作る

image

inject ノードをダブルクリックして詳細を設定します。

image

デフォルトでは msg.payload が日時(タイムスタンプ)になっています。

image

送るデータのタイプを、今回の送るデータタイプ JSON と合わせて JSON に設定しましょう。

image

このように送るデータを {"content":"やっほー!~~~だよ!"} というJSONデータで設定します。~~~だよ!~~~ の部分には、皆さんのお名前に書き換えてみてください。

設定出来たら、完了ボタンをクリックして設定を完了します。

image

送るデータは実際にはこのようなイメージです。

JSON データは msg の中の payload の中にある content というオブジェクトの中に、今回送りたい文字を入れています。

[実践]: http request ノードで前述した Discord の API URL に送るように設定

image

http request ノードをダブルクリックして詳細を設定します。

image

詳細設定はこのようになっています。

image

メソッドの項目を POST に変更して、今回の Discord API の仕様に合わせます。

image

URL の項目に今回のチャンネルへメッセージが送れる API URL の

<当日だけ開かれたDiscordのURLを記述していました>

を設定します。

設定出来たら、完了ボタンをクリックして設定を完了します。

image

デプロイをクリックして Node-RED に設定を反映させます。

試してみる

image

inject ノードのボタンをクリックして、データを送ってみましょう!

image

こちらの Discord チャンネルに、このようにデータが送られるはずです!

image

debug ノードは、データがちゃんと送られるときは "" という空文字がもどってきます。

トラブルシューティング

image

うまくデータが送られず debug ノードに上記のようにデータがきた場合は、APIのURLがコピーペーストがうまくいかず欠けてしまったときに、起きやすいエラーです。

image

こちらは送る JSON データがうまく設定できてないときにエラーがおきます。例えば {"content":"やっほー!~~~だよ!} のデータは だよ! のあとのダブルクォーテーションがなくなっていることで、送るメッセージ部分が文字列にならずエラーが起きています。

このあたりは、JSON データの書き方を読んでみると理解が深まります。

エクストラ1:画像を送ってみよう

inject ノードで送る JSON データを変更してみましょう。

{"content":"画像を送るよ! https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/Vombatus_ursinus_-Maria_Island_National_Park.jpg/1280px-Vombatus_ursinus_-Maria_Island_National_Park.jpg"}

こちらのデータを送ってみると、

image

このように、画像URLがあっていれば Discord で画像を見ることができます。今回の画像は、ウォンバット - Wikipedia から引用。

好きな画像を送ってみましょう!

エクストラ2:絵文字を送ってみよう

inject ノードで送る JSON データを変更してみましょう。

{"content":"ホッとするー!!!!:relaxed::relaxed::relaxed::relaxed::relaxed:"}

こちらのデータを送ってみると、

image

このように :relaxed: という部分が絵文字となって投稿できます。

Qiita/Github/Slack/Discord 絵文字一覧 - Qiita

こちらを参考に絵文字でメッセージを装飾してみましょう~。

この章のまとめ

image

Discordの今回設定した API URL にデータを送ってメッセージをチャンネルに表示することができました。

次の章