Node-REDでtwitterボットを作る際に(正しく?)リプライ形式でツイートする方法のメモです。
単純なTweetやメンションによるメッセージ送付はサンプルがあちこちにあるのですが、受け付けたTweetに対するリプライを返す手順については見当たらなかったので、ここにまとめておきます。
ここでのリプライ形式とは、本家twittetサイトにて、当該ツイートをクリックした際にきちんと連結して表示されることをいいます。
![連結したツイート](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F82999%2Fa1ec2bd3-601b-cb81-a956-83195f5bffec.jpeg?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=7cfa917232b12432eb11b6da2ad710ed)
twittet出力ノードの前にfunctionノードで下記のように、冒頭でのメンションと、msg.paramsを付けることでリプライになります。
![twitter-bot-nodes.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.amazonaws.com%2F0%2F82999%2Fe0edcf4f-b865-3d4b-4af2-fc8423076ae6.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=870b881efb6dbe0837f5f64a52a888b1)
msg.payload = "@" + msg.tweet.user.screen_name + " " + msg.payload;
msg.params = {
in_reply_to_status_id: msg.tweet.id_str
}
ポイントは、in_reply_to_status_id_strではなく、in_reply_to_status_idがパラメータになることと、そこに入れる値は逆にmsg.tweet.idではなくmsg.tweet.id_strであるということです。
なんか、気持ち悪い感じがしますが、msg.tweet.idには正しい値が入らず、丸め込まれて下二桁が0になってしまっているからです。また、ソースを追ったところ、この値はpostされるまで参照されることはなく、リクエストパラメータに渡されるので、本来整数が入るべきところに文字列として入っていても問題なく、エラーにもなりません。