質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

ChatWork

業務の効率化を目的としたコミュニケーションツール。 グループチャット、ビデオ・音声通話、ファイル共有、タスク管理などの機能を備えています。マルチデバイス対応で、ブラウザだけでなくタブレットやスマートフォンでも利用可能です。

Q&A

1回答

268閲覧

チャットワークのメッセージをグループチャットごとに一括削除したい

456

総合スコア0

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

ChatWork

業務の効率化を目的としたコミュニケーションツール。 グループチャット、ビデオ・音声通話、ファイル共有、タスク管理などの機能を備えています。マルチデバイス対応で、ブラウザだけでなくタブレットやスマートフォンでも利用可能です。

0グッド

2クリップ

投稿2024/01/23 08:13

実現したいこと

チャットワークを使用しています。
グループチャットごとに、自分が投稿したチャットを一括で削除したいです。

発生している問題・分からないこと

プログラミングの知識が無いため自力でソースを書けません。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

コピペで使えるものがほしいのですが、ググっても見当たりませんでした。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Google Apps Scriptのタグがありますので、
GASでの処理をご希望という前提で回答します。

GASでメッセージを取得できる件数には
ChatworkのAPIの制限があります。

最大で最新の100件までが取得可能ですが、
他のメンバーが投稿したものや
既に削除したものも含んで最後の100件が上限です。
それ以前のメッセージを遡っては取得することはできません。

このため、削除可能なメッセージの数は、
実際にはもっと少なくなります。

このことを前提としたスクリプトの例です。

JavaScript

1function deleteAllMyMessages() { 2 // const properties = PropertiesService.getScriptProperties().getProperties(); 3 // const token = properties.cw_token; 4 // const room_id = properties.cw_room_chatTest; 5 // const user_id = properties.cw_user_id; 6 7 const token = 'xxxxxxxxxxxxxx'; 8 const room_id = '99999999'; 9 const user_id = '99999999'; 10 11 // メッセージ一覧を取得(削除済、他メンバー送信も含め、上限は最新の100件) 12 const url = `https://api.chatwork.com/v2/rooms/${room_id}/messages`; 13 let options = {method: 'GET', headers: {'X-ChatWorkToken': token, accept: 'application/json'}}; 14 const response = UrlFetchApp.fetch(url + '?force=1', options).getContentText(); 15 console.log(response); 16 17 // 取得したメッセージから自分のメッセージID(未削除)を抽出 18 if (response.includes('message_id')) { 19 const contents = JSON.parse(response); 20 const message_ids = contents.filter(v => v.account.account_id == user_id && v.body != '[deleted]').map(v => v.message_id); 21 22 // メッセージを削除 23 if (message_ids.length > 0) { 24 options = {method: 'DELETE', headers: {'X-ChatWorkToken': token, accept: 'application/json'}}; 25 for (const id of message_ids) { 26 console.log(JSON.parse(UrlFetchApp.fetch(url + '/' + id, options))); 27 } 28 } else { 29 console.log('削除するメッセージがありませんでした。'); 30 } 31 } else { 32 console.log('メッセージを取得できませんでした。'); 33 } 34}

なお、
GASによる方法以外の方法で100件超のメッセージを全て取得する方法は、
丁寧にネットを検索すると見つかると思います。
この方法によってメッセージを取得できた場合は、
ダウンロードされたファイルのうち、
999999999_messages.jsonファイル(999999999はルームID)を
Googleドライブにアップロードして次のスクリプトで削除できます。

JavaScript

1function deleteChatworkMessages() { 2 const fileName = '999999999_messages.json'; 3 4 // const properties = PropertiesService.getScriptProperties().getProperties(); 5 // const token = properties.cw_token; 6 // const room_id = properties.cw_room_chatTest; 7 // const user_id = properties.cw_user_id; 8 9 const token = 'xxxxxxxxxxxxxx'; 10 const room_id = '99999999'; 11 const user_id = '99999999'; 12 13 const file = DriveApp.getFilesByName(fileName).next(); 14 if (file) { 15 const json = file.getBlob().getDataAsString('UTF-8'); 16 if (json.includes('aid')) { 17 const messages = JSON.parse(json); 18 const message_ids = messages.filter(v => v.aid == user_id && v.msg != '[deleted]').map(v => v.id); 19 if (message_ids.length > 0) { 20 const url = `https://api.chatwork.com/v2/rooms/${room_id}/messages`; 21 const options = {method: 'DELETE', headers: {'X-ChatWorkToken': token, accept: 'application/json'}}; 22 for (const id of message_ids) { 23 console.log(JSON.parse(UrlFetchApp.fetch(url + '/' + id, options))); 24 } 25 } else { 26 console.log('削除するメッセージがありませんでした。'); 27 } 28 } else { 29 console.log('メッセージを取得できませんでした。'); 30 } 31 } else { 32 console.log(`${fileName}というファイルが見つかりません。`); 33 } 34}

投稿2024/01/25 03:23

YellowGreen

総合スコア731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YellowGreen

2024/01/25 03:40 編集

> コピペで使えるものがほしい ということでしたが、 次の3 + 1行については、ご自身のものに書き換えていただく必要があります。 const token = 'xxxxxxxxxxxxxx'; const room_id = '99999999'; const user_id = '99999999'; const fileName = '999999999_messages.json'; また、100件超のメッセージを取得する方法について、 私が解説やフォローアップをすることはできませんのでごめんなさい。
456

2024/01/25 07:00

ありがとうございます! 100件までの削除はできました! ただ、私の力不足で100件超の削除はうまくいきませんでした・・・ もう少し頑張って検索してみます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問