プラグイン一覧 / 業務の自動化
業務の自動化プラグイン
「こうなったら、こうする」を管理画面で決めて自動で動かします。注文が入ったら担当営業に知らせる、入金待ちが1週間たったら社内システムへ通知する、といった決まりを、プラグインを書かずに足せます。
単体で動きます。他のプラグインは要りません。
会員グループ管理・取引先アカウント管理・営業担当者・発注承認は必須ではありません。入れている場合だけ機能が増えます。
何のためのプラグインか
法人取引では、注文が入ったあとに人が動きます。担当営業に知らせる、入金待ちを追いかける、 承認待ちが溜まっていないか見に行く。どれも決まりきった手順です。
標準の EC-CUBE には、その決まりを書いておく場所がありません。
- 注文が入ったことを知らせられるのは、店舗設定に書いた1つのアドレスだけ。取引先ごとに宛先を変えられない
- 「入金待ちのまま1週間たった受注」を教えてくれる仕組みがない。受注一覧を開いて自分で探す
- 社内システムへ流したいなら、プラグインを1本書くことになる
このプラグインは、きっかけ・条件・することの3つを管理画面で組み合わせてルールにします。 ルールは1本につき「きっかけ1つ・条件の AND・することの並び」です。

設定 → 業務の自動化 にルールが並びます。上から順に走ります。
受注を書き換えません
先に、しないことから書きます。
| しないこと | なぜ |
|---|---|
| 受注の作成・変更・キャンセル | 自動で在庫・ポイント・決済が動くと、取り消しが効きません。書き換えるのは管理用メモと印だけです |
| 分岐(if/else)や複数段の流れ | 画面で組み立てられるものが増えると、店が読めなくなります。分けたいときは別のルールを作ります |
| 画面でドラッグして組み立てる | フォームで足す形にしています |
| 実行記録を画面から消す | 記録は「同じ対象に2回動かない」ための台帳を兼ねています。手で消せると同じ知らせが二度飛びます |
自動で出荷したい、自動でステータスを進めたい、という用途には向きません。 このプラグインが できるのは、知らせること・印を付けること・外へ送ることまでです。
きっかけは4つ
| きっかけ | いつ動くか |
|---|---|
| フロントで注文が確定した | お客様が購入手続きを終えたとき。管理画面の受注登録では動きません |
| 受注ステータスが変わった | 管理画面の受注編集・一覧の一括操作・他のプラグインからの遷移を含みます |
| 会員が本会員になった | メールの本人確認、管理画面での切り替え、会員登録承認制の承認 |
| 1日1回のコマンド実行 | bin/console plugin:b2b-workflow:run-daily を cron から呼んだとき |
きっかけはルールを作ったあとに変えられません。 条件とすることがきっかけに紐づいているためです。 変えたいときは複製して作り直します(複製は無効の状態でできます)。
条件はすべて合ったときだけ
条件は AND です。1つも置かなければ、そのきっかけが起きるたびに必ず動きます。
| 条件 | 中身 |
|---|---|
| 受注の合計金額 | 以上/以下 |
| 支払い方法 | 選んだもののどれか |
| 受注ステータス | マスタから選びます |
| いまの受注ステータスになってからの日数 | N 日以上 |
| 初めての注文か | 初めて/2回目以降 |
| 最終注文からの日数 | N 日以上(一度も注文していない会員も入ります) |
| 会員グループ | 会員グループ管理を入れているときだけ |
| 取引先かどうか | 取引先アカウント管理を入れているときだけ |
受注ステータスはマスタから引いています。 発注承認を入れていれば、 あちらが足した「承認待ち」もそのまま選択肢に並びます。設定は要りません。
入れていない連携先の条件は選択肢に出ません。 保存済みのルールに残っていた場合、その条件は 「合わない」と答え、ルールは動きません。黙って条件が外れて全部に当たるより、安全側に倒しています。
することは4つ
上から順に行います。途中で失敗したら残りは行いません(「メールは飛ばなかったのに印だけ付いた」に ならないように)。
| すること | 中身 |
|---|---|
| メールを送る | 宛先は「決まったアドレス」「注文した会員」「取引先の管理者」「担当営業」から選びます。件名と本文は管理画面で書き、{{ order.order_no }} のような差し込みが使えます |
| 受注のメモに追記する | 管理用メモの末尾に [日時] 文 を1行足します。上書きしません |
| 受注に印を付ける | 受注一覧に出て、詳細検索の「印」で絞り込めます。受注 CSV・配送 CSV にも出せます(既定は出力しない側) |
| 外部へ送る(Webhook) | 基本設定に登録した宛先へ JSON を POST します |
「取引先の管理者」は取引先アカウント管理、「担当営業」は 営業担当者を入れているときだけ選べます。 宛先が決まらなければ失敗として記録に残します。 黙って店のアドレスへ送ったりしません。

条件とすることを行で足します。使える差し込みは画面の下に一覧で出ます。
ルールの例
| きっかけ | 条件 | すること |
|---|---|---|
| フロントで注文が確定した | 合計金額が 100,000 円以上 | 担当営業へメール/受注に「高額」の印 |
| 1日1回のコマンド実行 | 受注ステータスが「新規受付」/そのステータスになってから 7 日以上 | 社内システムへ Webhook |
| 1日1回のコマンド実行 | 受注ステータスが「承認待ち」/2 日以上 | 取引先の管理者へメール |
| 会員が本会員になった | (なし) | 会員へ案内のメール |
| 1日1回のコマンド実行 | 最終注文から 180 日以上 | 社内システムへ Webhook |
送る前に、送らずに試せます
ルールごとに「手で試す」があります。対象を1つ指定して、その場で走らせます。

「送らずに結果だけ見る」が既定です。 メールも Webhook も送らず、メモも印も書かず、実行記録にも 残りません。同じ対象で何度でも試せます。「実際に送る」を選ぶと本当に送り、記録に残ります。 記録に残ると同じ対象ではもう動きませんので、試し直すときは別の対象で。
何が動いたかは記録に残ります

| 結果 | 意味 |
|---|---|
| 成功 | することが全部通った |
| 失敗 | どれかが落ちた。注文や保存は通っています。 メッセージに理由が出ます |
| 対象外 | 条件に合わなかった、またはすでに実行済み |
ルール・結果・期間で絞れます。画面からは消せません。
記録は増え続けます。 保持日数(既定 90 日)より古い行を消すコマンドがありますが、 cron から呼ばなければ消えません。日次のルールを使わない店でも、こちらは仕掛けておいてください。
0 3 * * * cd /var/www/html && bin/console plugin:b2b-workflow:run-daily
30 3 * * * cd /var/www/html && bin/console plugin:b2b-workflow:purge-log
保持日数を短くしすぎると、二重実行を止める鍵まで消えます。同じ知らせが二度飛びます。
受注に付いた印で絞り込めます

印は |印A|印B| の形で受注に持たせています。区切りで囲んでいるので、「出荷待ち」で絞ったときに
「出荷待ち確認」は当たりません。CSV に出すには 設定 → CSV出力項目設定 で「印」を出す側へ移します。
印には差し込みが使えません。一覧の絞り込みの選択肢が無限に増えるためです。
注文の処理を止めません
ルールの実行で何が起きても、注文と保存はそのまま通ります。失敗は記録に残るだけです。
きっかけを見つけた時点では走らせず、リクエスト(またはコマンド)を返したあとに走らせます。 遅い Webhook や SMTP に購入手続きがぶら下がりません。
同じ対象に同じルールは1回だけ動きます。日次のコマンドは日付単位で1回なので、二度流しても 二重には動きません。条件に合わなかったものには鍵を入れないので、あとで条件に合えば動きます。 失敗したものには鍵を入れます。やり直しません。
送り先と本文まわりの決まり
外へ出るものなので、店が書いた文字列をそのまま信じない作りにしてあります。
| 決まり | 中身 |
|---|---|
| 本文を Twig として読まない | 決めた差し込みキーを置き換えるだけです。{{ 7*7 }} と書けば {{ 7*7 }} のまま出ます。知らないキーもそのまま残るので、打ち間違いに気づけます |
| 件名は1行に詰める | 差し込んだ会社名や氏名に改行が混ざると、メールヘッダーを足される余地ができます。改行・タブは空白1つにまとめ、200 文字で切ります |
| 宛先を二重に見る | 入力欄の検証と、送る直前の検証の2か所 |
| Webhook は https だけ | タイムアウト 5 秒、やり直しなし、リダイレクトを追いません。本文には共有シークレットの署名(HMAC-SHA256)が付きます |
| Webhook の宛先はルールに書けない | 基本設定に登録したものから選びます |

基本設定はシステム管理者だけが開けます。 外へ出す先と共有シークレットが並ぶためです。 「ルールは作れるが、送り先は決められない」という運用ができます。
できないこと
| できないこと | 補足 |
|---|---|
| 入れる前からある受注の「経過日数」が正確でない | ステータスが変わった日時を持っていないので、受注日で代えます。次にその受注のステータスが変わった時点から正確になります |
差し込みの {{ order.admin_url }} が cron から当てにならない |
ルーターはリクエストからホスト名を取るので、コマンドで動かすと http://localhost/... になります |
| Webhook の宛先に社内アドレス(プライベート IP)を止めていない | 社内の受け口へ出したい店があるためです。宛先を登録できるのがシステム管理者だけ、という前提で止めていません |
| 共有シークレットを平文で保存する | 署名を作るのに元の値が要るので、ハッシュにできません |
| 実行記録に個人情報が残る | 宛先のメールアドレスなどがメッセージに入ります。保持日数で消します |
| 日次のコマンドが一度に見る対象は 5,000 件まで | 終わらなくならないようにしています。それ以上ある店は条件で絞ってください |
きっかけ・条件・することを足せます
3つともタグで集めています。他のプラグインから足したものも、同じように管理画面の選択肢に並びます。
このプラグインのインターフェースを implements しません。 app/Plugin のクラスはまとめて
コンテナへ登録されるので、このプラグインが入っていない環境に implements と書いたファイルを置くと、
有効・無効に関係なくコンテナごと落ちます。合わせるのはタグ名とメソッドの形だけです。
// app/Plugin/YourPlugin/Workflow/PrefCondition.php
// タグ b2b_workflow.condition を付けるだけ。implements しない
class PrefCondition
{
public function getKey(): string { return 'yourplugin.pref'; }
public function getLabel(): string { return 'お届け先の都道府県'; }
public function matches(array $params, object $context): bool { /* ... */ }
// supports() / isAvailable() / buildParams() / describe()
}
そのまま使える例は同梱の docs/extension-samples.md にあります。
動作要件
| 項目 | 内容 |
|---|---|
| EC-CUBE | 4.4 系 |
| PHP | 8.2 / 8.3 |
| 必須プラグイン | ありません。単体で動きます |
| 任意 | 会員グループ管理・取引先アカウント管理(条件が増えます)、営業担当者・取引先アカウント管理(メールの宛先が増えます)、発注承認(「承認待ち」が受注ステータスの選択肢に並びます) |
| cron | 日次のルールと記録の掃除に要ります |
差し替えられるところ
主要な処理はインターフェースとして切ってあります。実装を差し替えれば動きが変わります。 自社の商習慣に合わない部分があれば、まず差し替えで済むかを確かめてください。
AI に書かせられます。このプラグインには CLAUDE.md と docs/extension-samples.md が 同梱されていて、差し替え口ごとにそのまま使えるサンプルが載っています。 やりたいことを日本語で伝えれば、AI コーディングツールが実装を書きます (くわしく)。
| インターフェース | できること |
|---|---|
TriggerInterface | きっかけを足す(出荷が登録された、見積が承認された、など)。宣言だけなので、火を点ける購読やコマンドは足した側で書く |
ConditionInterface | 条件を足す(お届け先の都道府県、取引先の等級、基幹システムの与信枠など)。ルールの中では AND で効く |
ActionInterface | することを足す(チャットへ流す、自社の基幹システムの API を叩く、独自の帳票を作る) |
入手する
オーナーズストアで購入
買い切りです。月額はかかりません。予定価格 税抜 50,000 円。
予定価格です。オーナーズストアでの販売開始時に変わる場合があります。
この条件で回るか、確かめてから決めてください
締め日、支払サイト、請求書の様式、会計ソフトへの受け渡し。合うかどうかは商習慣によって変わります。やりたいことを書いて送ってください。