EC-CUBE で B2B
構築を相談する

プラグイン一覧 / 業務の自動化

業務の自動化プラグイン

「こうなったら、こうする」を管理画面で決めて自動で動かします。注文が入ったら担当営業に知らせる、入金待ちが1週間たったら社内システムへ通知する、といった決まりを、プラグインを書かずに足せます。

単体で動きます。他のプラグインは要りません。

会員グループ管理・取引先アカウント管理・営業担当者・発注承認は必須ではありません。入れている場合だけ機能が増えます。

何のためのプラグインか

法人取引では、注文が入ったあとに人が動きます。担当営業に知らせる、入金待ちを追いかける、 承認待ちが溜まっていないか見に行く。どれも決まりきった手順です。

標準の EC-CUBE には、その決まりを書いておく場所がありません。

このプラグインは、きっかけ・条件・することの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 円。

予定価格です。オーナーズストアでの販売開始時に変わる場合があります。

販売ページの準備ができ次第、ここに載せます。

導入を任せる

サーバーの用意から EC-CUBE の設置、プラグインの導入と設定まで請け負います。 商習慣に合わせた作り足しもご相談ください。

この条件で回るか、確かめてから決めてください

締め日、支払サイト、請求書の様式、会計ソフトへの受け渡し。合うかどうかは商習慣によって変わります。やりたいことを書いて送ってください。