Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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:

conservativerad
私が記載している内容は、私自身の限定された経験・思考・信念・場合によっては思い込みに基づく見解です。私の所属団体、企業の立場、戦略、意見を示すものではありません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした