flow審査 v1examples/review/temporal/review.ja.flow · dandori doc
Jev が申込を採点してその確信度も返し、その判断をそのまま実行するか、人の承認に回すかを規則が決める。そのまま承認するには、そのまま却下するより高い確信度が要る。Temporal 向けの版:採点は生成したアクティビティで、専用のタスクキューのワーカーの上で、TypeSafe の API キー(TYPESAFE_API_KEY)で Jev を呼ぶ。そのワーカーは別の言語で書かれていてもよい。お知らせも専用のタスクキューで動く、自分で書くアクティビティ。規則はワークフローのワーカーで動く。承認する人のツールは、生成したクライアントが送る Update でコールバックに応答する
flow| 行 | 呼び出し | 呼ぶもの | リトライ | タイムアウト | 失敗したとき |
|---|---|---|---|---|---|
| 49 | 結果 = 採点する(…) | jev · jev-1.13.0 | 10 秒おきに 2 回(混雑・過負荷) | 10 秒 | 混雑・過負荷・timeout・failure → 50 行目 |
| 51 | 判定 = 方針(…) | 規則 審査の方針.rule | 1 秒後と 2 秒後の 2 回(failure) | — | timeout・failure → ワークフローが失敗する |
| 55 | 返事 = 承認を求める(…) | 自分で書くタスク(応答はコールバック) | — | 3 日 | timeout → 56 行目failure → ワークフローが失敗する |
| 57 | 知らせる(…) | 自分で書くタスク・idempotent | — | — | timeout・failure → ワークフローが失敗する |
| 59 | 知らせる(…) | 自分で書くタスク・idempotent | — | — | timeout・failure → ワークフローが失敗する |
| 行 | 終わり方 |
|---|---|
| 50 | fail 採点不能 "申込 {申込.id} を採点できませんでした" |
| 56 | fail 承認なし "三日たっても承認がありません" |
| 58 | succeed 判断 = 承認 |
| 60 | succeed 判断 = 結果.判断 |
ステップを選ぶと、そこについて検査で分かったことが出ます。左のシナリオを選ぶと、その実行が通るところが光ります。ステップの横の数は、その実行が通った回数です。
審査 v1Jev が申込を採点してその確信度も返し、その判断をそのまま実行するか、人の承認に回すかを規則が決める。そのまま承認するには、そのまま却下するより高い確信度が要る。Temporal 向けの版:採点は生成したアクティビティで、専用のタスクキューのワーカーの上で、TypeSafe の API キー(TYPESAFE_API_KEY)で Jev を呼ぶ。そのワーカーは別の言語で書かれていてもよい。お知らせも専用のタスクキューで動く、自分で書くアクティビティ。規則はワークフローのワーカーで動く。承認する人のツールは、生成したクライアントが送る Update でコールバックに応答する
申込: 申込判断: 方針.判断examples/review/temporal/review.ja.flow結果 = 採点する(…) 49 行目49 let 結果 = 採点する(用途: 申込.用途) 50 on failure => fail 採点不能 "申込 {申込.id} を採点できませんでした"
jev · jev-1.13.0混雑・過負荷・timeout・failure → 50 行目24 # Jev は申込者が書いた用途を読み、判断の段階(低いほうから)のどこに当たるかと、その確信度を返す。 25 # 確信度は率で受け取り、規則が判断と一緒に見て決める。 26 task 採点する(用途: string) -> 採点 27 jev 28 判断 score "資金は、どれだけはっきり事業に使われるか" 29 却下 "私用や投機、法に反することに使う" 30 保留 "事業に使うが、何に払うのかがはっきりしない" 31 承認 "仕入れ、設備、人件費、店舗など、事業のはっきりした費目に使う" 32 確信度 confidence of 判断 33 model "jev-1.13.0" 34 queue "採点" 35 errors 混雑 = 429, 過負荷 = 529 36 retry 2 times every 10 seconds on 混雑, 過負荷 37 timeout 10 seconds
fail 採点不能 50 行目 50 on failure => fail 採点不能 "申込 {申込.id} を採点できませんでした"
判定 = 方針(…) 51 行目 51 let 判定 = 方針(判断: 結果.判断, 確信度: 結果.確信度)
審査の方針.ruletimeout・failure → ワークフローが失敗する 4 use rule 方針 from "../rules/審査の方針.rule"
match 判定.決定 52 行目52 match 判定.決定 53 承認, 却下 => pass 54 人に回す =>
返事 = 承認を求める(…) 55 行目55 let 返事 = 承認を求める(申込ID: 申込.id, 金額: 申込.金額, 確信度: 結果.確信度) 56 on timeout => fail 承認なし "三日たっても承認がありません"
timeout → 56 行目failure → ワークフローが失敗する39 # 承認する人が自分のツールで承認し、その結果がコールバックの ID と一緒に返ってくる。 40 task 承認を求める(申込ID: string, 金額: int, 確信度: rate[step 1%]) -> 承認 41 callback 42 timeout 3 days
fail 承認なし 56 行目 56 on timeout => fail 承認なし "三日たっても承認がありません"
知らせる(…) 57 行目 57 知らせる(申込ID: 申込.id, 本文: "{返事.承認者} さんが申込 {申込.id} を承認しました")
idempotenttimeout・failure → ワークフローが失敗する44 task 知らせる(申込ID: string, 本文: string) 45 queue "お知らせ" 46 idempotent
succeed 判断 = 承認 58 行目 58 succeed 判断 = 承認
知らせる(…) 59 行目 59 知らせる(申込ID: 申込.id, 本文: "申込 {申込.id} の審査が済みました: {結果.判断}")
idempotenttimeout・failure → ワークフローが失敗する44 task 知らせる(申込ID: string, 本文: string) 45 queue "お知らせ" 46 idempotent
succeed 判断 = 結果.判断 60 行目 60 succeed 判断 = 結果.判断
終わり(成功)flow が最後まで走り、ワークフローは成功します。
結果 = 採点する(…) ok判定 = 方針(…) okmatch 判定.決定 → 承認, 却下知らせる(…) oksucceed 判断 = 結果.判断結果 = 採点する(…) failure → on failurefail 採点不能結果 = 採点する(…) 混雑 ok判定 = 方針(…) failure failure failure → ここでは処理しない結果 = 採点する(…) ok結果 = 採点する(…) ok判定 = 方針(…) ok結果 = 採点する(…) ok判定 = 方針(…) okmatch 判定.決定 → 承認, 却下知らせる(…) failure → ここでは処理しない結果 = 採点する(…) ok判定 = 方針(…) okmatch 判定.決定 → 人に回す返事 = 承認を求める(…) ok知らせる(…) oksucceed 判断 = 承認結果 = 採点する(…) 混雑 ok判定 = 方針(…) okmatch 判定.決定 → 人に回す返事 = 承認を求める(…) timeout → on timeoutfail 承認なし結果 = 採点する(…) ok判定 = 方針(…) okmatch 判定.決定 → 人に回す返事 = 承認を求める(…) failure → ここでは処理しない結果 = 採点する(…) ok判定 = 方針(…) okmatch 判定.決定 → 人に回す返事 = 承認を求める(…) ok結果 = 採点する(…) ok判定 = 方針(…) okmatch 判定.決定 → 人に回す返事 = 承認を求める(…) ok知らせる(…) failure → ここでは処理しない