送信取り消ししてもバレる！？送信取り消しBotを作ってみた

とりあえず動かしてみたい方はこちら→
https://lin.ee/g3JpMUG

<a data-v-6fa6a74a="" href="https://lin.ee/g3JpMUG"><img data-v-6fa6a74a="" src="https://scdn.line-apps.com/n/line_add_friends/btn/ja.png" alt="友だち追加" height="36" border="0"></a>

-----

<blockquote class="twitter-tweet" data-media-max-width="560"><p lang="ja" dir="ltr">⚫本日LINEBotのAPIにて送信取り消しEventを取得できるようになりました。<br><br>つまり、LINEの便利な送信取り消し機能はbotによって送信取り消せなくなりました。<br><br>友達登録はこちら→<a href="https://t.co/BhBECkE3fd">https://t.co/BhBECkE3fd</a><br><br>色々発見あったので後日Qiita書きます。<a href="https://twitter.com/hashtag/linedc?src=hash&amp;ref_src=twsrc%5Etfw">#linedc</a> <a href="https://twitter.com/hashtag/lineapi?src=hash&amp;ref_src=twsrc%5Etfw">#lineapi</a> <a href="https://t.co/3wx7ZLWtWH">pic.twitter.com/3wx7ZLWtWH</a></p>&mdash; ようかん / Yosuke Inoue (@inoue2002) <a href="https://twitter.com/inoue2002/status/1291027535182979073?ref_src=twsrc%5Etfw">August 5, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">【LINEAPIアップデート】<br><br>●送信取消イベントが追加<br>●動画視聴完了イベントが追加<br><br>これはLINEBotの新しい可能性が広がる熱いアップデート<br>✨💫<a href="https://twitter.com/hashtag/%E5%8B%95%E7%94%BB%E8%A6%96%E8%81%B4%E5%AE%8C%E4%BA%86%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%8C%E8%BF%BD%E5%8A%A0%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F?src=hash&amp;ref_src=twsrc%5Etfw">#動画視聴完了イベントが追加されました</a><a href="https://t.co/BU0mE1VXGB">https://t.co/BU0mE1VXGB</a></p>&mdash; ようかん / now / 🏠 (@inoue2002) <a href="https://twitter.com/inoue2002/status/1290853470744932353?ref_src=twsrc%5Etfw">August 5, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

#本記事の内容
本記事は昨日、2020/8/5にリリースされた、「送信取消イベント」を試してみた記事です。
ユーザーからメッセージを受け取ったりするEventに加えて、送信取消を行った際にもEventが発生し、Botとして機能を持たせられます。

送信取消イベントを試すLINEBotを開発した上で気になった点、他のAPIと異なる点などから、実際の活用例などまでを考えてみましたので、LINEBot開発をされている皆さんに知見を共有できたら嬉しいです。

#１. 応答イベントではない
![messageImage_1596634995493.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/c9c6fa5f-5dc4-5157-a9a0-24a43947eff4.jpeg)

↑の画像の通りなのですが、普通のメッセージを送った時のイベント(messageEvent)ではreplyTokenというものがあり、それを使ってLINEbotでは応答しています。しかし、送信取消した時に発動するイベント(unsendEvent)ではryplyTokenが発行されていない事が分かります。

そのため、活用方法によって色々ではありますが、送信取消を行ったタイミングで何かLINEBotからメッセージを送りたい場合はPUSH送信をするしかないようです。フリープラン(無料のLINEBot)では月にPUSHできる数が最大1000通となっているので考えて開発&運営していかなければいけません。

#2 . グループ/トークルームでしか使えない
![56513.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/1c898dd6-c712-abab-f355-63cc0c9a022f.jpeg)

LINEBotのトークルーム内ではそもそも送信取消を行う事ができないので、この機能を使う可能性としてはLINEBotをグループやトークルームに招待して使うシーンのみです。※LINEオープンチャットではまだLINEBotを招待する事はできません。

#3 . 送信取消イベントで受け取れる情報
<img width="901" alt="スクリーンショット 2020-08-06 1.14.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/7dfcf4e5-419b-175c-e3b3-cf905856a21c.png">

```
{
    "type": "unsend",
    "mode": "active",
    "timestamp": 1462629479859,
    "source": {
        "type": "group",
        "groupId": "Ca56f94637c...",
        "userId": "U4af4980629..."
    },
    "unsend": {
        "messageId": "325708"
    }
}
```
[公式ドキュメント](https://developers.line.biz/ja/reference/messaging-api/#message-event)


このように消されたメッセージの情報はmessageIdという形で取得する事ができます。このIDでは別の「[ユーザーが送ったコンテンツを取得する](https://developers.line.biz/ja/docs/messaging-api/receiving-messages/#webhook-event-types)」というAPIを使う事ができ、バイナリが返されます。しかし、テキストには対応していないので注意が必要です。
<img width="887" alt="スクリーンショット 2020-08-06 1.17.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488939/407a1d6d-329c-2319-2c1b-8e4b7ac98275.png">

#4 . グループに参加していても、Botと友達じゃないと反応しない
先ほど紹介した通り、このイベントは複数人が参加しているトークルームでのみ利用可能なのですが、そのグループで送信取消をした、誰もかもに反応できる訳ではありません。
友達登録を済ませる事でそのユーザーの送信取消に反応できるようになりました。
なお、ブロック状態の場合でも反応する事はできません。

#5 . 筆者が作ったDEMO-Bot
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">⚫本日LINEBotのAPIにて送信取り消しEventを取得できるようになりました。<br><br>つまり、LINEの便利な送信取り消し機能はbotによって送信取り消せなくなりました。<br><br>友達登録はこちら→<a href="https://t.co/BhBECkE3fd">https://t.co/BhBECkE3fd</a><br><br>色々発見あったので後日Qiita書きます。<a href="https://twitter.com/hashtag/linedc?src=hash&amp;ref_src=twsrc%5Etfw">#linedc</a> <a href="https://twitter.com/hashtag/lineapi?src=hash&amp;ref_src=twsrc%5Etfw">#lineapi</a> <a href="https://t.co/3wx7ZLWtWH">pic.twitter.com/3wx7ZLWtWH</a></p>&mdash; ようかん / now / 🏠 (@inoue2002) <a href="https://twitter.com/inoue2002/status/1291027535182979073?ref_src=twsrc%5Etfw">August 5, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">デモ <a href="https://t.co/X12yJatEz8">pic.twitter.com/X12yJatEz8</a></p>&mdash; ようかん / now / 🏠 (@inoue2002) <a href="https://twitter.com/inoue2002/status/1291030296758898693?ref_src=twsrc%5Etfw">August 5, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

このDEMOでは送信取消を行ったテキストに対しても反応を返していますが、これはこのAPIだけでは実装できません。ユーザーが送ってきたメッセージを全てDBに保存し、送信取消されたmessageIdをGETしてメッセージとして返すようになっています。
DBの運営が大変そうなのですぐDEMOはやめる予定です。


#6 . 活用できそうなシーン
【サービス系】というよりは、【ツール系】のLINEBotと考えるなら面白そうなものができるのかなと思います。
例えば、送信取消はするけど、このメッセージはどっかに保存しておきたい時とか。個人のBotから通知がくるとようにすればいろんなトークから送信取消をしたメッセージが一覧で見れるようになりますね。

あと、messageIdからコンテンツ取得をするというAPIをみて思ったのですが、messgaeIdがBotごとで管理されているなら、直接LINE友達ではなくても、そのLINEBotを介してメッセージを共有するサービスなんかも作れたりするのかななんて思っていました。この辺りに関してはまだ僕もあまり知見がないので詳しく分かり次第記事にしようと思います。


#7 . まとめ
今回僕が作ったような人間関係を破壊しかねそうなよくないBotは作るべきものではないです（面白そう！って言ってくれる友達は何人かいたからよかったけどw）
でも送信取消をした時って無音で処理が行われるので、そこにアクションをつけられるようになったのはある意味面白いなと思いました。
相手の送信取消しました。というメッセージを見るとなかなか気になったりすることもありますが、割とメッセージをあとから編集できたり、削除できたりするのはどこのSNSでも当たり前になってきています。
SNSで意味の捉え違いみたいな話がたまに話題になりますが、送信した、して無いみたいな事はコミュニケーションに置いて不整合が生まれるので極力送信取消はしないようにしていきたいものです。


次回はもう１つ同時に発表された、動画視聴完了Eventについて時間があったらやってみようと思います。

LINEBotをまだ作った事無い方は私の過去の記事でLINEBotの入門記事なんかも書いているのでよかったらご覧ください。
☆[誰でもサーバレスLINEBotが作れる記事](https://qiita.com/inoue2002/items/a87df2b520f8b6e37f42)