Webサービスの通知連携機能にYoを組み込む

最近 WikiHub というWebサービスをつくっている中で、Yo を利用した通知連携に対応してほしいという要望があったので、調べて実装してみました。Yo連携機能を追加しました - WikiHub Help という記事でYo連携機能の内容を紹介しています。この機能を実装する過程で得た知識をまとめておきます。

公式ページではアプリをインストールしてほしそう

YoはiPhoneとAndroidアプリを主な対象としたアプリケーションです。公式サイトのホームページ https://www.justyo.co/ だけ見ると、アプリをインストールしなければ利用できないような印象を受けます。

image

開発者用のページにいけばPCでもログインしたりできて便利

開発者用に別途 https://dashboard.justyo.co というページがあります。このページ経由であれば、PCからでも新しいYoアカウントをつくったり、既存のYoアカウントでログインしたりできます。

image

API用のアカウントは簡単に作成できる

開発者用のダッシュボードのページでは、新たなアカウントの発行や、アカウントのAPI Keyの表示などができます。Yoではサービスの性質上メッセージに含められる情報が少ないため、アカウント名を工夫することでそれを補う運用になると思います。そのため、必然的に新しいアカウントをつくる機会が増えることでしょう。Yoでは、メインのアカウント (ログインに利用するアカウント) に紐付ける形で、APIで利用するためのアカウントを複数作成できます。

APIキーを付けてPOSTすればYoできる

自分の利用用途では「何らかのイベントが発生したときに、あるアカウントを購読している全員にYoを送る」という要件が満たせればOKでした。これには POST /yoall/ というエンドポイントが利用できました。YoのREST APIにどんな機能があるかなどの情報は、http://docs.justyo.co/ というページから探せます。APIを利用するには対応するアカウントのAPIキーが必要ですが、これは先述した開発者用のダッシュボードのページから取得できます。

例えばRubyで POST /yoall を利用するにはこう

利用しているコードの一部をそのまま貼り付けますが、Rubyで POST /yoall を利用するなら例えばこういう風に実装できます。Yoのためのクライアントライブラリもありますが、今回はFaraday というRubyのHTTPクライアントのライブラリを利用してみています。YoのメッセージにはURLも付与でき、このエンドポイントにもURLを渡せばそれも実現可能です。

require "faraday"

class YoHook < Hook
  validates :api_token, presence: true

  class << self
    # @return [Faraday::Connection]
    def faraday_connection
      @faraday_connection ||= ::Faraday::Connection.new do |connection|
        connection.request :url_encoded
        connection.adapter :net_http
      end
    end
  end

  # @note Override
  def trigger_article_created_hook
    yo
  end

  private

  def yo
    self.class.faraday_connection.post(
      "http://api.justyo.co/yoall/",
      api_token: api_token,
    )
  end
end

おしまい

サービス上では、APIキーを入力してもらう機能や画面を提供したり、上記のコードで少し出てきたHookクラスを正しく実装したりということが必要ですが、Yoに関係する部分は以上です。Webサービスの簡易通知機能として、使い方次第でわりと便利にYoを利用できるケースがあるかもしれないので、たまにはYoのことを思い出してあげてください。