最近話題の「マストドン(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 の他の記事 kintone と API 連携するためのアドオン(追加機能)を自作

アーカイブ

 RSS