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を渡せばそれも実現可能です。

```rb require "faraday"

class YoHook < Hook validates :api_token, presence: true

class << self # @return [Faraday::Connection] def faradayconnection @faradayconnection ||= ::Faraday::Connection.new do |connection| connection.request :urlencoded connection.adapter :nethttp end end end

# @note Override def triggerarticlecreated_hook yo end

private

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

おしまい

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