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

More than 1 year has passed since last update.

最近 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のことを思い出してあげてください。