Developers開発の実験等々、クイックサーブのメンバーが好き好きに書き込んでいく場所です。チャットワークからBacklogの課題を作成する(webhook/API)コメントを残す概要チャットワーク(chatwork)とBacklogのマッシュアップ。APIを用いて課題を作成する。課題作成後は、チャットワークAPIを用いて、元のチャットルームに作成した課題URLを通知する。テキストで説明するより以下のデモgifを見ると早い。チャットワークAPIをRubyで利用する課題作成フォーマット本記事では、以下のようなフォーマットのテキストを、webhookで設定したルーム内で発言した際に、連動してBacklogの課題が生成されるようにする。(課題タイトル)(課題本文1行目)(課題本文2行目)(課題本文3行目)一行目の@@のあとに、実行するコマンドを指定するイメージ。本記事では「課題登録」のみ実装。その後ろに課題のタイトルを、2行目以降に課題の本文を記述する。本課題の範囲では、タイトル/本文以外の各設定値を指定する手段は提供しない。Webhookの登録チャットワークのwebhookは、「アカウントイベント」と「ルームイベント」の何れかを適用できる。本記事では、ルームイベントとして、自身のマイチャットのルームIDを指定して登録する。webhookの登録は、チャットワークにログイン後のAPI設定の画面で以下のように行える。URLに対して、メッセージ内容とそのメタデータがPOSTされる。今回はPOSTの受け口として、Rubyの軽量フレームワークであるSinatraを用いて実装する。Sinatraについては本記事の本筋ではないので割愛するが、雰囲気でコードの内容は把握できるようになっている。Sinatraのコントローラにて、以下のようにPOST内容を受け取る。WebhookによるPOSTデータはJSONで届くので、parseして標準出力してみる。"update_time"=>0}}本記事ではこのデータを用いて課題の作成を行う。フォーマットに合致しない場合拒否するPOSTされたデータから、チャットワークのルームID(通知時に使う)と、メッセージ本文を取り出す。メッセージ本文に、フォーマットの必須要件である「@@課題登録」が含まれていない場合returnする。0正確にはこのタイミングで、ヘッダーをチェックして、確かにwebhookからのPOSTであることを確認しないと、不正に課題を量産されてしまうので注意メッセージから課題タイトルと課題本文を抜き出すメッセージは1行目と2行目以降で分かれているので、最初に改行毎に分割する。1行目は、スペース刻みでコマンド内容と課題タイトルに分かれているので、後半の課題タイトルの部分を抜き出す。2行目以降は課題本文なので、またjoinする。lines[1..-1].join("\n")Backlogに課題を作成するBacklogに課題を作成するために、BacklogAPIを用いる。本ブログではお馴染みのgemである、backlog_kitを用いるが、それを含めたBacklogAPIの使い方については以下記事に委譲する。BacklogをCUIで操作してみるAPIキーと、対象のBacklogスペースIDは事前に取得して環境変数に入れておく。ENV['PRIVATE_BACKLOG_API_KEY'])create_issueメソッドを用いて課題を作成する。課題タイトルと課題本文はwebhookより受け取ったメッセージに含まれてる内容を使用。該当する数値を入れておく。body,})課題作成成功後のレスポンスに、生成した課題のURLが含まれているので、それを抑えておく。result.headers.location登録した課題をチャットワークに通知する最後に、前項で作成した課題のURLをチャットワークに通知する。チャットワークにメッセージを投稿するためにチャットワークAPIを用いるが、ここでは手前味噌だが以下のクラスを利用する。Sa2Knight/chatwork-ruby上記クラスについての詳細は下記記事を参照。sendMessageメソッドにルームIDとメッセージ本文を指定すればメッセージを送信できることがわかればよい。チャットワークAPIをRubyで利用するチャットワークのinfoタグ、titleタグを組み合わせて、いい感じのメッセージを投げる。コメントをキャンセルメールアドレスが公開されることはありません。