最近話題の「マストドン(Mastodon)」の API をクラウド BPM からたたいてみる

「マストドン(Mastodon)」の API をクラウド型 BPM ワークフロー Questetra からたたけるかを試してみた。また twitter の API についても確認

 

システム連携ネタでよくブログを書いている日下です。
※ちなみにこれまでのネタはこちら

マストドン:Mastodon は Twitterによく似たSNSを誰でも自由に運用できる「脱中央集権型」の短文投稿型のSNSサービス/フリーソフトウェア

最近よく耳にする「マストドン(Mastodon)」。

まだ私もそれほど使っていないのですが、twitter サーバを自分専用で建てられるもののようですね。

Mastodon には API もあるようなので、Questetra からたたけるかを調べてみました。

#実際にそういう用途があるかを考えると、今のところはあまりない気がしていますが、Mastodon がもっと広がったらマーケティングとしての活用も出てくるかもしれません

また、Mastodon の元とも言える twitter の API は以前から有名(試しに Web API をたたいてみるのにとりあえず twitter でやってみた、という人は多いんじゃないかと)なので、それとの比較もしてみました。

OAuth2 の grant_type(トークンの取得方法) は4種ありますが、Mastodon は authorization_codepassword が使えるようです。(対して twitter は client_credentials のみが使えるとのこと)
※他の grant_type に対応しているかどうかまでは未確認。また、grant_type の password は一般的にあまり推奨されていないので、その点もご留意ください。

参考:OAuth2 で規定されている grant_type 4種
・Authorizaton Code Grant (authorization_code)
・Implicit Grant (implicit)
・Resource Owner Password Credentials Grant (password)
・Client Credentials Grant (client_credentials)
※詳細はこちらのページを参考にしてください。

この2つの grant_type それぞれについて、Questetra → Mastodon の連携を試してみましょう。

 

Questetra にある「メッセージ送信中間イベント(HTTP)」を使います。
これはフローの途中で http リクエストを送付できる機能で、OAuth2 (grant_type は authorization_code)の連携設定も可能です。もしこれで API がたたけるケースならプログラミングは不要です。
設定の詳細は後述します。

※「メッセージ送信中間イベント(HTTP)」のマニュアルはこちら
M225 自動イベント 業務データを組み込んだHTTPリクエストが、自動的に送信されるように設定する

 

まず Mastodon へのクライアント登録については以下で行います。

curl -X POST -sS https://{ホスト名}/api/v1/apps -F "client_name={クライアント名}" -F "redirect_uris=https://fs.questetra.net/oauth2callback" -F "scopes=read write follow"

※「{ホスト名}」には対象とした Mastodon のホスト名を入れてください
※「{クライアント名}」には好きな名前を入れてください
※scopes はやりたいことに応じて変更してもいいですが、後で Questetra 側で行う設定とあわせてください
※処理結果から取得できる client_id と client_secret は後で使いますのでコピーしておいてください

 

「メッセージ送信中間イベント(HTTP)」の OAuth 設定の詳しい手順については、こちらの記事を参考にしてください。
※上記は少し古い記事になりますので、表記が変わっている部分があります。OAuth の設定値の画面は以下のように日本語に変わっています。また OAuth 設定の画面には、「メッセージ送信中間イベント(HTTP)」のプロパティの「セキュリティ/カスタムヘッダ」の「OAuth2.0 で接続する」の「設定はこちらから」ボタンからと、プロセスモデルの詳細画面の「▼アプリ」ボタンメニューの「OAuth2.0 設定」からのどちらからでもいけます。

名称
名前 (好きな設定名、後で指定する際に使います)
認可エンドポイントURL https://{ホスト名}/oauth/authorize
トークンエンドポイントURL https://{ホスト名}/oauth/token
スコープ read write follow(やりたいことに応じて変更してください)
クライアントID (クライアント登録時に取得したもの)
クライアントシークレット (クライアント登録時に取得したもの)

※「{ホスト名}」には対象とした Mastodon のホスト名を入れてください

OAuth の設定値としては、以下となります。「トークンの取得」がうまくいけばOKです。

 

投稿する API をたたく場合、「メッセージ送信中間イベント(HTTP)」の設定としては、以下となります。

名称
通信設定:URL https://{ホスト名}/api/v1/statuses
セキュリティ/カスタムヘッダ:OAuth2.0で接続する (さきほどの OAuth 設定名)
送信パラメータ status:(投稿したい文言)
※メッセージ送信中間イベント(HTTP)で API をたたく場合に、もしうまくいかなかったときに詳細情報がわかるよう、文字型複数行のデータ項目を2つ準備して、以下にそれぞれ設定するのをおすすめしています。
・通信設定:「エラー発生時にエラー内容を格納する文字型データ項目」
・レスポンス:「レスポンスを保存する」にチェックをつけて「保存先のデータ項目」

 


grant_type password の場合は、Questetra にある「スクリプトタスク(スクリプト工程)」を使います。設定の詳細は後述します。

※「スクリプトタスク(スクリプト工程)」のマニュアルはこちら
M230 自動工程 業務データの複雑なデータ加工が自動実行されるように設定する(ECMAスクリプト)

 

まず Mastodon へのクライアント登録については以下で行います。

curl -X POST -sS https://{ホスト名}/api/v1/apps -F "client_name={クライアント名}" -F "redirect_uris=urn:ietf:wg:oauth:2.0:oob" -F "scopes=read write follow"

※「{ホスト名}」には対象とした Mastodon のホスト名を入れてください
※「{クライアント名}」には好きな名前を入れてください
※scopes はやりたいことに応じて変更してもいいですが、後で Questetra 側で行う設定とあわせてください
※処理結果から取得できる client_id と client_secret は後で使いますのでコピーしておいてください

 

「スクリプトタスク(スクリプト工程)」で、アクセストークンの取得および投稿の URL をたたく形となります。以下サンプルコードです。それぞれ{}内には必要な値を入れてください。

var message = data.get("3");
var clientId = "{クライアントID}";
var secret = "{クライアントシークレット}";
var accessLog = "";

var uriToken = "https://{ホスト名}/oauth/token";
var response = httpClient.begin()
.formParam( "grant_type", "password" )
.formParam( "client_id", clientId )
.formParam( "client_secret", secret )
.formParam( "scope", "write read follow" )
.formParam( "username", "{ログインユーザ名}" )
.formParam( "password", "{ログインパスワード}" )
.post( uriToken );
accessLog += "---POST request--- " + response.getStatusCode() + "\n";
accessLog += response.getResponseAsString() + "\n";
var oauthTokenObj = JSON.parse( response.getResponseAsString() );
var oauthToken = oauthTokenObj.access_token;
accessLog += "oauthToken: " + oauthToken + "\n";

var uriExecute = "https://{ホスト名}/api/v1/statuses";
var responseCreate = httpClient.begin()
.bearer( oauthToken )
.formParam( "status", message )
.post( uriExecute );
accessLog += "---POST request--- " + responseCreate.getStatusCode() + "\n";
accessLog += responseCreate.getResponseAsString() + "\n";

retVal.put( "0", accessLog );

twitter は OAuth2 の grant_type として client_credentials のみが使えるとのこと。

※参考資料:twitter API ドキュメント POST oauth2/token

grant_type client_credentials の場合も、Questetra にある「スクリプトタスク(スクリプト工程)」を使います。設定の詳細は後述します。

 

まず、twitter へのクライアント登録については、こちらのページを参考にしてください。こちらも Consumer Key(client_id)と Consumer Secret(client_secret)は後で使いますのでコピーしておいてください

 

「スクリプトタスク(スクリプト工程)」で、アクセストークンの取得および一覧取得の URL をたたく形となります。
以下サンプルコードです。それぞれ{}内には必要な値を入れてください。

var clientId = "{クライアントID}";
var secret = "{クライアントシークレット}";
var accessLog = "";

var uriToken = "https://api.twitter.com/oauth2/token";
var response = httpClient.begin()
.formParam( "grant_type", "client_credentials" )
.formParam( "client_id", clientId )
.formParam( "client_secret", secret )
.post( uriToken );
accessLog += "---POST request--- " + response.getStatusCode() + "\n";
accessLog += response.getResponseAsString() + "\n";
var oauthTokenObj = JSON.parse( response.getResponseAsString() );
var oauthToken = oauthTokenObj.access_token;
accessLog += "oauthToken: " + oauthToken + "\n";

var uriExecute = "https://api.twitter.com/1.1/statuses/user_timeline.json";
var responseExecute = httpClient.begin()
.bearer( oauthToken )
.queryParam( "screen_name", "{スクリーン名}" )
.queryParam( "count", 3 )
.get( uriExecute );
accessLog += "---GET request--- " + responseExecute.getStatusCode() + "\n";
accessLog += responseExecute.getResponseAsString() + "\n";

retVal.put( "0", accessLog );

 

ただし、このやり方で取得した access token の場合は user context とひもづかないので、使える API が限定されてしまうとのこと・・・まあ authorization_code のケースのようにユーザ認証を通ってないので当然といえば当然なのですが
※参考資料:twitter API ドキュメント Application-only authentication

つまり、API をたたいて投稿等をしたい場合には以前からある OAuth1 の方を使わないといけないようです。ただ Questetra では OAuth1 での連携設定は未対応です・・・
そのため、API をたたいて投稿等がしたい場合には ifttt などの連携ツールと組み合わせるのが手っ取り早いかと思います。ifttt であれば、Questetra からメール送付して twitter 投稿などもカンタンに実現できます。

ということで、Questetra と Mastodon および twitter との連携、主に OAuth2 での連携について調べてみました。

grant_type が authorization_code であれば、楽に設定できることがわかっていただけたかと思います。
ただ、grant_type が authorization_code であっても、相手によってはうまくつながらないケースもあります・・・そのあたりの話はまた別の記事で説明する予定です。

 

もし、ご質問等がありましたら、お問い合わせフォームからご連絡ください。


こちらの Web フォームからお申込みいただきますと Questetra の無料アカウントが作成できます。上記のものを含め、全ての機能が使えますので、ぜひお試しください。

FreeQues

 

Kusaka Tsuyoshi の紹介

営業をやってますが、もともとエンジニアなので、プログラミングもやります。
Kusaka Tsuyoshi の投稿をすべて表示

あわせて読みたい
50.Questetra Tips の前の記事 kintone の「プロセス管理」で困ったときに(その2)
50.Questetra Tips の次の記事 backlog とクラウド BPM は連携できるのか?
Kusaka Tsuyoshi の他の記事 backlog とワークフローの連携をカンタンに実現する方法

アーカイブ

 RSS