#0. はじめに
ちょっとした落とし穴にハマった後、「こんなところにハマるのは自分だけだし、一度経験した自分も二度ハマるわけが無い」と思っていたところ、解決した記憶があるエラーを見続ける事になったので、記事にしておきます。
通常のツイート:
ドラッグ・ドロップ後に認証情報をセットアップすれば、msg.payload で渡した内容をツイートします。
ダイレクト・メッセージ:
ドキュメントに「記載の通り」、 msg.payload 内へ文字列で送信先を指定します。
間違えようの無い簡単さです。
msg.payload = "D 相手のユーザー名 ダイレクトメッセージで送る内容";
ドキュメントの記載:
To send a Direct Message (DM) - use a payload like "D {username} {message}"
#(本文より長い)補足
-
Node-RED で何かする前に、通常の Twitter クライアントから、ダイレクトメッセージが意図した ID 間で送受信可能なことを事前確認します。
(言うまでも無いことですね。はい、やってませんでした。いや、以前は送受信できていたんですよ、その後 Twitter のアカウント設定を変更しましたが) -
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."}]}"
- {} 自体を含めて文字列として記述するのも誤りです。
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."}]}"
ただし、ユーザー名 を @ユーザー名 と記載しても、問題なくダイレクトメッセージを送ることは確認しています。
もちろん、年寄りになったとか、みっちり開発作業を続ける機会を確保しきれていないとか、思うところは色々ありますが、割愛致します