コンテンツにスキップ

APIの使い方

APIを使うとアプリを使わず直接日報のデータを取得することができます。 主に外部のシステムと連携するのに使用します。 APIキーで日報を読むことができるのでAPIキーは厳重に管理し、外部に漏洩しないように注意してください。

APIの有効無効設定は管理者権限が必要です。

  1. 左メニューから組織設定をクリック
  2. APIを有効にするスタッフを選択
  3. APIの項目をクリックし、ボタンを緑色にする
スタッフごとにAPIキーの利用を許可・禁止にできます。初期状態では全スタッフが「禁止」です
スタッフごとにAPIキーの利用を許可・禁止にできます。初期状態では全スタッフが「禁止」です

初期状態では全員無効(赤色ボタン)です。安全のためにも利用するスタッフは最小限にとどめてください

APIキーは上記手順で有効されたスタッフの画面から取得ができます。

  1. 「アカウント」をクリック
  2. APIセクションまでスクロール
  3. ログインパスワードを入力
  4. 「APIキーの取得」ボタンをクリック
APIキーを取得するには再認証のためログインパスワードの入力が必要です
APIキーを取得するには再認証のためログインパスワードの入力が必要です

上記の手順で正しいパスワードが入力されるとAPIキーが表示されます。コピーして保存します。

以下の場合はAPIキーを速やかに無効化してください。

  • APIキーが外部に流出した可能性がある
  • APIを使う必要が無くなった
  • APIを使用しているスタッフが退職した

APIキーを無効にする最も簡単な方法は、管理者がAPI設定を赤色のボタン(無効)に戻すことです。

上記手順以外にAPIキーを無効にする方法もありますが、他の手順は無効化時にログアウトされます。

  • スタッフアカウントのAPI発行画面の下部にある「APIの破壊」をクリック
  • スタッフアカウントの状態が「無効」にされるとき
  • ユーザアカウントが削除されたとき
  • ユーザアカウントで大きな変更が検知された時(パスワードやメールアドレスの変更など)

APIを使い日報のデータを取得する

Section titled “APIを使い日報のデータを取得する”

APIの利用には少し技術者の知識が必要です。

  • CURL
  • JSON

このあたりの基本が理解できれば問題有りません。本ガイドはCURLを使用しています。コマンドが苦手な方はPostmanなどのGUIツールをご利用ください。

APIへリクエストを投げる基本の形を日報取得の例から見る

Section titled “APIへリクエストを投げる基本の形を日報取得の例から見る”
Terminal window
curl -X POST https://us-central1-nipo-plus.cloudfunctions.net/v0/【エンドポイント】 \
-H "Content-Type:application/json;charset=UTF-8" \
-H "Authorization: Bearer 【取得したAPIキー(200文字程度)】" \
-d "{ "【パラメータ1】": "【値1】", "【パラメータ2】": "【値2】" }"

【】で囲まれた部分には、独自の値を指定してください。

ここでは日報の取得に関するエンドポイントのみ紹介します。以下のいづれかの値を指定します。必須です。

reports/admin
管理者のみ実行可能。全ての日報を取得できるAPI
reports/outbox
自分が送信した日報のデータのみ取得できるAPI
reports/inbox
自分が受信した日報のデータのみ取得できるAPI
report/:日報のID
IDを指定して1件の日報を取得できるAPI

他のエンドポイントについては本ページ末尾で解説します。

日報取得に感るうパラメータを紹介します。 パラメータをセットします。グループIDは必須です。必要に応じて複数パラメータを指定できます。

属性名説明
groupIdString(必須)取得するグループのID
sizeNumber取得する日報の件数。1〜1000の間で指定します。未指定の場合は10が自動で適用されます
fromString期間(開始) 2022/08/01 00:00:00のような形で指定。必ずtoとセットで使用
toString期間(終了) 2022/09/31 23:59:59のような形で指定。必ずfromとセットで使用
tagsString配列タグのIDを配列で指定
statesString配列日報の状態で絞り込み。[“承認”, “棄却”, “修正”, “新規”, “進行”]のように指定
templatesString配列使用したテンプレートのIDで絞り込み。テンプレートIDの配列で指定
ownersString配列日報作成者IDで絞り込み。スタッフのIDを配列で指定

取得したAPIキーをCurlに含めてください。長いので必ずコピーペーストして使用してください。 APIキーの取得が済んでいないかたは先にAPIキーの取得を行ってください。

APIキーの取得

本ガイドではこれ以降も実際のAPIキーは使用せず解説します。

エンドポイントとパラメータを指定した最小限のCurl

Section titled “エンドポイントとパラメータを指定した最小限のCurl”
Terminal window
curl -X POST https://us-central1-nipo-plus.cloudfunctions.net/v0/reports/admin \
-H "Content-Type:application/json;charset=UTF-8" \
-H "Authorization: Bearer 【取得したAPIキー】" \
-d "{"groupId": "nipodefaultgroup" }"

このコマンドは日報を取得する命令を送っています。パラメータに期間の指定が無いため、直近10件の日報がAPI経由で取得できます。

パラメータを色々指定した実用性のあるCurl

Section titled “パラメータを色々指定した実用性のあるCurl”

設定可能なパラメータを追加した例です。

Terminal window
# パラメータが多いためヒアドキュメントを使っています
curl -X POST https://us-central1-nipo-plus.cloudfunctions.net/v0/reports/admin \
-H "Content-Type:application/json;charset=UTF-8" \
-H "Authorization: Bearer 【取得したAPIキー】" \
-d @- <<EOS
{
"groupId": "nipodefaultgroup",
"size": 1000,
"from": "2022/08/01 00:00:00",
"to": "2022/09/30 23:59:59",
"tags": ["oSGoygpZYCBlldTWGewA", "bo6wwrUSVrE6UbqlJjkf"]
"states": ["新規", "進行", "棄却"],
"templates": ["iELPWHa3ZjXYJS62Hn3N"],
"owners": ["mMSejOQa21d9OtXo1BtjFzrEt6J3"]
}
EOS

この例を少し詳しく見てみます

groupId
グループIDを指定します。グループIDはグループ全般やURLから確認できます。
size
日報を1000件リクエストしています
from・to
検索期間を2022年8月1日〜2022年9月30日に指定しています 
tags
タグによるフィルタを使う場合に指定します。タグ名ではなくタグのIDで指定します。タグのIDはタグ管理から確認できます
states
日報の状態によるフィルタを使う場合に指定します。この例では新規、進行、棄却の日報のみを取得します(承認や修正の日報は除外)
templates
テンプレートによるフィルタを使う場合に指定します。テンプレートIDを指定します。複数件指定できるため配列です
owners
日報を書いたスタッフによるフィルタを使う場合に指定します。スタッフIDを指定します

補足:URLからグループIDを確認する際はURLの意味を見てください。

https://nipoplus.sndbox.jp/#/room/組織ID/グループID/__/path/to/any...

例えばURLが次のようなデータだった場合

https://nipoplus.sndbox.jp/#/room/BLyx3SG72rId24BnKcGC/eZu8bXFNh73YtVoR83ic/teal/home/PageNameGroupSettingAbout

グループIDは「eZu8bXFNh73YtVoR83ic」となります。

日報の取得以外に用意されているエンドポイントとパラメータについてまとめています。

テンプレートの取得エンドポイント

Section titled “テンプレートの取得エンドポイント”
/templtes
パラメータで指定したグループ内の全てのテンプレートを取得します
/template/:テンプレートのID
IDで指定された1件のテンプレートを取得します

パラメータ:

名称説明必須
groupIdString取得するグループのID
Terminal window
# 記述例
curl -X POST https://us-central1-nipo-plus.cloudfunctions.net/v0/templates \
-H "Content-Type:application/json" \
-H "Authorization: Bearer 【取得したAPIキー】" \
-d "{ "groupId": "nipodefaultgroup" }"

ログデータ取得エンドポイント

Section titled “ログデータ取得エンドポイント”
/logs
ログデータを取得する

パラメータ:

名称説明必須
groupIdString取得するグループのID
sizeNumber取得する日報の件数。1〜1000の間で指定
fromString取得する日報の期間(開始点) 2022/08/01 00:00:00のような形で指定
tostring取得する日報の期間(終了点) 2022/09/31 23:59:59のような形で指定
Terminal window
# 記述例
curl -X POST https://us-central1-nipo-plus.cloudfunctions.net/v0/logs \
-H "Content-Type:application/json" \
-H "Authorization: Bearer 【取得したAPIキー】" \
-d "{"groupId": "nipodefaultgroup", "size": 1000, "from": "2022/08/01 10:00:00", "to": "2022/08/01 10:59:59"}"
/staffs
スタッフ情報を取得する
名称説明必須
groupIdString取得するグループのID
Terminal window
# 記述例
curl -X POST https://us-central1-nipo-plus.cloudfunctions.net/v0/staffs \
-H "Content-Type:application/json" \
-H "Authorization: Bearer 【取得したAPIキー】" \
-d "{ "groupId": "nipodefaultgroup" }"

タイムカード取得エンドポイント

Section titled “タイムカード取得エンドポイント”
/timecards/取得するスタッフのID
指定したスタッフのタイムカード情報を取得します
名称説明必須
groupIdString取得するグループのID
sizeNumber取得するタイムカードの件数。1〜1000の間で指定。未指定の場合は1000となる
fromString取得するタイムカードの期間(開始点) 2022/08/01 00:00:00のような形で指定
tostring取得するタイムカードの期間(終了点) 2022/09/31 23:59:59のような形で指定

このAPIポイントは「編集者権限」以上が必要です。 タイムカードの制限解除がされていない場合、取得件数は5件で固定されます(指定が5未満でも5になります) タイムカードの制限解除がされている場合、取得件数は1〜1000の間で任意に指定できます。 Sizeの指定が無い場合は1000として扱われます。

Terminal window
# 記述例(パラメータを改行する場合はこんな感じでEOSつければOK。お好みで)
curl -X POST https://us-central1-nipo-plus.cloudfunctions.net/v0/timecards/mMSejOQa21d9OtXo1BtjFzrEt6J3 \
-H "Content-Type:application/json" \
-H "Authorization: Bearer 【取得したAPIキー】" \
-d @- <<EOS
{
"groupId": "0XRC0tEQXvcMb2zRFKYj",
"size": 10,
"from": "2024/08/01 10:10:10",
"to": "2025/06/30 23:59:59"
}
EOS

組織全体に関する情報のためアクセスには管理者権限が必要です。

/staffs/admin
組織に所属している全スタッフのデータを取得します
/group/admin
組織内に作成された全てのグループを取得します

パラメータはありません。

Terminal window
# 記述例
curl -X POST https://us-central1-nipo-plus.cloudfunctions.net/v0/staffs/admin \
-H "Content-Type:application/json" \
-H "Authorization: Bearer 【取得したAPIキー】" \

WebAPIにリクエストを投げたとき、戻り値に{ error: true }がかえってきたときは何かしらのエラーが発生しています。 エラーの内容が messageプロパティにセットされていますので、メッセージを確認の上正しいパラメータを設定してください。

以下は代表的なエラーの例です

トークンの更新に失敗
Bearerトークンが失効しています.APIキーの管理から再度取得してください
グループIDが不正です
パラメータ groupIdに誤りがあります。groupIdを見直してください
このグループに対する権限がありません
指定したgroupIdに所属していないと権限不足が発生します。グループに所属してください
権限が足りません
エンドポイントの中にadminが含まれるものは管理者権限のBearerトークンでアクセスする必要があります
日付不正
パラメータ from / toの指定が誤っています。必ず yyyy/MM/dd hh:mm:ss の形式で指定する必要があります
データベースアクセスエラー
何らかの原因でデータベースへの問い合わせに失敗しました。少し時間を追いてリトライしてください
文法に誤りがあります
正しい文法に修正してください。json最後の , を消し忘れるなど初歩的なミスである場合が多いです
Expected X, received Y
パラメータが間違っています。Xの型を要求しているのにY型を渡されたという意味です。正しい型を指定してください
Number must be less than or equal to X
指定された数値が大きすぎます。X以下になるように指定します

普段見慣れた日報の形ではなくJSON形式で取得されます。 JSON形式は { key: value }の形で表現されたデータ構造です。

キー説明
idString20文字で構成されるランダムな文字列です。ユニークです(厳密には異なるが考慮の必要はない)
noNumberまたはNull日報に採番された番号です。連番は日報作成後に非同期で振られるためタイミングによってはNull
bodyObject日報文書本体
createTsNumber13桁の数値(ミリ秒含むUnixタイムスタンプ)。日報がサーバに初回保存された時刻
updateTsNumber13桁の数値(ミリ秒含むUnixタイムスタンプ)。日報が最後に更新された時刻
userTsNumber13桁の数値(ミリ秒含むUnixタイムスタンプ)。日報作成者が指定した表示上の日時
distIdString今現在その日報を承認・棄却出来る権限のスタッフID
distsString配列日報の提出先スタッフIDの配列です。配列の序列順に承認を行います。承認や棄却ができるのは上記のdistIdに一致したスタッフのみ
observerString配列その日報を読むことができるスタッフのID郡です。承認や棄却の権限はありません。
readedString配列その日報を読んだフラグを立てたスタッフIDの配列です。承認や棄却をしたスタッフもreadedに含まれます
tagsString配列日報に付けられたタグのID配列
signコレクション承認や棄却日時を記録したコレクションです。コードで書くと sign:{ uid: string, ts: number, agree: boolean}[]です。承認した日時や承認者IDを確認可能
stateString承認・棄却・修正・新規・進行 いづれかの文字
ownerString日報を作成したスタッフのID。共用を使うときに作成者IDとしてセットされる。共用を使わない場合は後述する「account」と常に同じ値が入る
accountString日報を作成したFirebase上のユーザID
templateIdStringその日報を作成するために使用されたテンプレートのID
taskIdString日報と予定を紐付けられたとき、予定のIDがセットされる

以下は実際にAPIを使ってロードした日報のデータのサンプルです。

{
"readed": ["mMSejOQa21d9OtXo1BtjFzrEt6J3"],
"id": "V9MGSesp0LUgXUPo0Skv",
"taskId": "none",
"no": 3,
"tags": [],
"owner": "mMSejOQa21d9OtXo1BtjFzrEt6J3",
"updateTs": 1659400505426,
"account": "mMSejOQa21d9OtXo1BtjFzrEt6J3",
"templateId": "uDE74jrGtn90vZZqsaci",
"distId": "mMSejOQa21d9OtXo1BtjFzrEt6J3",
"userTs": 1659400505425,
"sign": [],
"createTs": 1659400505426,
"body": {
"B2x": "あお",
"SAl": ["いちご","ごはん","餃子","干瓢"],
"1ST": ["餃子","うどん","焼きそば","牛乳","ごはん"],
"N70": ["いちご","干瓢","メロン"],
"iif": "あか"
},
"observer": ["mMSejOQa21d9OtXo1BtjFzrEt6J3"],
"dists": ["mMSejOQa21d9OtXo1BtjFzrEt6J3"],
"state": "新規"
};
キー説明
idString(任意)20文字で構成されるランダムな文字列です。ユニークです(厳密には異なるが考慮の必要はない)
dateString日付を表す文字列。形式は “YYYY-MM-DD”(例: “2023-03-21”)
dayNumber日付のUnixタイムスタンプ(ミリ秒)。JSTの0時基準
startString出勤時刻。“08:00” のような文字列
endString退勤時刻。“17:00” のような文字列
breaksArray休憩時間の配列。各要素は { start: string, end: string } 形式
redactedBoolean編集済みフラグ。ユーザーが編集した場合 true
isHolydayWorkBoolean休日出勤フラグ。休日に勤務した場合 true
memoString備考欄の文字列。自由記述
generatorStringこのタイムカードを作成したスタッフID
staffIdStringこのタイムカードの対象スタッフのID
createTsNumber初回作成日時。Unixタイムスタンプ(ミリ秒)
updateTsNumber最終更新日時。Unixタイムスタンプ(ミリ秒)
calcDataObject下記の計算結果データ(打刻や休憩などを元に算出された集計値)
キー説明
editStartString丸め後の出勤時刻(例: “08:00”)
editEndString丸め後の退勤時刻(例: “17:00”)
dayWorkNumber日勤労働時間(分)
nightWorkNumber夜勤労働時間(分)
totalWorkTimeNumber実労働時間(分)。日勤+夜勤−休憩
overWorkTimeNumber超過労働時間(分)
calcBreakTimeDayNumber日勤中の休憩時間(分)
calcBreakTimeNightNumber夜勤中の休憩時間(分)
dayWorkHolyDayNumber休日の日勤労働時間(分)
nightWorkHolyDayNumber休日の夜勤労働時間(分)
  • calcData はサーバ側で勤務情報から自動算出される集計値。
  • breaks に複数の休憩時間がある場合も、calcBreakTimeDaycalcBreakTimeNight に反映されます。
  • isHolydayWork が true のとき、dayWorkHolyDaynightWorkHolyDay に値が入る場合があります。
  • memoredacted はユーザー操作により変更される要素です。

タイムカードのAPIレスポンス例

Section titled “タイムカードのAPIレスポンス例”
{
"error": false,
"result": {
"data": [
{
"id": "vY8ovmFPaaz3z41GzKAy",
"date": "2023-03-21",
"breaks": [{ "start": "12:00", "end": "13:00" }],
"redacted": false,
"isHolydayWork": false,
"start": "08:00",
"generator": "mMSejOQa21d9OtXo1BtjFzrEt6J3",
"memo": "",
"createTs": 1679400813656,
"end": "17:00",
"day": 1679353200000,
"updateTs": 1679400813656,
"staffId": "mMSejOQa21d9OtXo1BtjFzrEt6J3",
"calcData": {
"calcBreakTimeDay": 60,
"calcBreakTimeNight": 0,
"dayWorkHolyDay": 0,
"nightWorkHolyDay": 0,
"dayWork": 480,
"nightWork": 0,
"totalWorkTime": 480,
"overWorkTime": 0,
"editStart": "08:00",
"editEnd": "17:00"
}
}
],
"count": 10,
"totalCalc": {
"totalWorkTime": 5040,
"overWorkTime": 240,
"dayWorkHolyDay": 0,
"nightWorkHolyDay": 0,
"dayWork": 5040,
"nightWork": 0,
"calcBreakTimeDay": 540,
"calcBreakTimeNight": 0
}
}
}
キー説明
tsNumberテンプレートが作成された日(ミリ秒含むUnixタイムスタンプ)
prefixString文書番号の前に付される記号。初期値は”No.”
activeBooleanテンプレートが有効な場合はTrue。無効にするとFalse
memoStringテンプレート自体に付されたメモ。初期値は”テンプレートメモ”
nameStringテンプレートの大見出し
norumaNumber?1日あたりの提出枚数目安。初期値は0
idStringテンプレートのID
tagsString[]テンプレートに付与したタグのID
bodyCollectionテンプレートの本体とも言える項目。詳細は次章

Bodyはテンプレートの入力フォームを束ねたオブジェクトでCollection(オブジェクトの配列)の構造をしています

キー説明
labelSizeString見出しの文字サイズ。label_sのような値が入る
labelString見出しの文字列
keyString入力のデータとテンプレートを紐付けるための鍵。この値が日報本体データ上のKeyとして使用される
labelColor見出しの色
reqBoolean入力必須ならTrue
typeString文字入力や数値入力など、データの構造に応じた値が入る
wNumberテンプレートで専有する幅 1〜12
anyanyその他、入力フォームに応じて必要なパラメータが追加されます…

テンプレートと日報本文の対応

Section titled “テンプレートと日報本文の対応”

例えば次のようなテンプレートがあったとします。説明のためBodyのみで、かつ内容も大幅に簡略化しています。

"body": [
{
"label": "今日の夜食",
"key": "N70",
"type": "text",
"w": 4
},
{
"label": "担当職員名",
"key": "1ST",
"type": "text",
"w": 4
},
{
"label": "スコア",
"key": "A4x",
"type": "number",
"w": 4
}
]

このテンプレートを使って作成された日報のBodyは次のようになります

"body": {
"N70": "やきうどん",
"1ST": "長谷川研究員",
"A4x": 100
}

テンプレート上の keyが、日報本文のキーとして使われています。