Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What is going on with this article?

More than 3 years have passed since last update.

@ninomiyt

チャットワークAPIの自動投稿に未読を付ける

最近、チャットワークの仕様が変わったらしく、「チャットワークAPI経由で投稿した投稿に未読がつかなくなる」という変更がありました。

この変更には正直ちょっと戸惑っており、以前書いた「自社のIRをGoogle Apps ScriptでChatWorkに通知する」や通知系のプログラムに自分で気づけなくなってしまいました。

対処方法

考えられる対処方法は2つあると思います。

  1. 通知専用の別のアカウントを作る
  2. APIで「未読」を付け直す

「1.」のほうがお手軽ですが、社用のチャットワークなので、新しいアカウントを勝手に作って部屋に入れるわけにはいきません。

というわけで後者の方法で私は対応しました。

プログラム

先ほどの記事のGoogle Apps Script(GAS)のプログラムのメッセージをポストする箇所を変更しました。

GASでチャットワークに投稿するアドオンはあるものの、unreadを追加するメソッドは実装されてなかったため、ひとまずモンキーパッチで対応しました。

/**
 * チャットワークにメッセージを送信する
 */
function postChatWork(message, room_id) {
  var client = ChatWorkClient.factory({token: TOKEN});
  var res = client.sendMessage({room_id: room_id, body: message});

  // 「未読をつける」メソッドを追加
  client.makeMessageUnread = function(room_id, message_id) {
    return this.put("/rooms/" + room_id + "/messages/unread", {"message_id": message_id});
  }

  // 投稿直後ではAPIが失敗することがあるので、6秒ごとに10回トライする
  var err;
  for (var i = 0; i < 10; i++) {
    try {
      client.makeMessageUnread(room_id, res['message_id']);
      return;
    } catch(e) {
      if (e["errors"] === "The messages is already marked as unread.") return;
      err = e;
      Utilities.sleep(6000);
      continue;
    }
  }
  throw err;
}
6
Help us understand the problem. What is going on with this article?
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
6
Help us understand the problem. What is going on with this article?