1
1

More than 5 years have passed since last update.

Node-RED で Twitter ダイレクト・メッセージ を送る場合の備忘録

Last updated at Posted at 2017-05-26

0. はじめに

ちょっとした落とし穴にハマった後、「こんなところにハマるのは自分だけだし、一度経験した自分も二度ハマるわけが無い」と思っていたところ、解決した記憶があるエラーを見続ける事になったので、記事にしておきます。

1. Twitter の出力ノードの使い方

Twitter.png

通常のツイート:
ドラッグ・ドロップ後に認証情報をセットアップすれば、msg.payload で渡した内容をツイートします。

ダイレクト・メッセージ:
ドキュメントに「記載の通り」、 msg.payload 内へ文字列で送信先を指定します。
間違えようの無い簡単さです。

msg.payload = "D 相手のユーザー名 ダイレクトメッセージで送る内容";

ドキュメントの記載:

To send a Direct Message (DM) - use a payload like "D {username} {message}"

(本文より長い)補足

1) Node-RED で何かする前に、通常の Twitter クライアントから、ダイレクトメッセージが意図した ID 間で送受信可能なことを事前確認します。
(言うまでも無いことですね。はい、やってませんでした。いや、以前は送受信できていたんですよ、その後 Twitter のアカウント設定を変更しましたが:sweat_smile:

2) JSON 風に記述するのは誤りです。

msg.payload = {
    D : {
        "username": "相手のユーザー名",
        "message": "ダイレクトメッセージで送る内容"
    }
};

他の理由でも発生し得る、つまりトラブルシューティングを難しくする以下のエラーとなります。

017/5/26 16:22:36node: Tweetmsg : error
"Error: HTTP Error 401: Unauthorized, API message: {"errors":[{"code":32,"message":"Could not authenticate you."}]}"

3) {} 自体を含めて文字列として記述するのも誤りです。

msg.payload = "D {相手のユーザー名} {ダイレクトメッセージで送る内容}";

当然、{} をエスケープしても誤りです。

msg.payload = "D \{"+ 相手のユーザー名 +"\} \{"+ ダイレクトメッセージで送る内容+"\}";

上記 2) と同様にエラーとなります。
このエラーの場合、「ユーザー名が認識できていない」という意味は伝わってきます。

2017/5/26 16:28:04node: Tweetmsg : error
"Error: HTTP Error 404: Not Found, API message: {"errors":[{"code":50,"message":"User not found."}]}"

ただし、ユーザー名 を @ユーザー名 と記載しても、問題なくダイレクトメッセージを送ることは確認しています。

もちろん、年寄りになったとか、みっちり開発作業を続ける機会を確保しきれていないとか、思うところは色々ありますが、割愛致します:sob:

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