0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【EC-CUBE4.3】Chatwork API連携プラグインのご紹介

Posted at

はじめに

EC-CUBEのプラグインについて知識を深めるのと、ChatworkのAPIに興味があったので、ついででChatwork API連携プラグインを作ってみました。
その特徴と仕様を下記にまとめます。(ChatGPTまとめ)


📌 概要

このプラグインは、EC-CUBE4.3とChatworkを連携させることで、以下の機能を提供します:

  • お問い合わせや注文完了時にChatworkへ通知を送信
  • 通知内容、ルームID、APIキーを管理画面から設定可能
  • Symfony HttpClientを使用してChatwork API v2を呼び出し

✅ 主な仕様

項目 内容
通知トリガー お問い合わせ(MAIL_CONTACT)および注文完了(MAIL_ORDER)
送信先 指定されたChatworkグループチャット(Room ID)
通知内容 件名、送信者、本文を含むテンプレートメッセージ
API連携 Chatwork API v2(トークン認証)
設定項目 APIキー、ルームID、通知のON/OFF切替
安全設計 通知失敗時はログに記録し、ユーザーには影響を与えない設計
テスト機能 管理画面から接続テスト、ルーム情報取得、テストメッセージ送信が可能

🧩 構成

  • Entity : Config.php(APIキー、ルームID、通知ON/OFFの設定)
  • FormType : ConfigType.php(設定フォームの定義)
  • Controller : ConfigController.php(設定画面の制御)
  • Service : ChatworkApiService.php(API呼び出しと通知処理)
  • EventListener : Event.php(メール送信時のフック処理)
  • ナビゲーション追加 : Nav.php(管理画面メニューへの追加)

✉️ 通知メッセージフォーマット

通知メッセージは以下の形式でChatworkに送信されます:

件名: {件名}
送信者: {送信元のメールアドレス}

本文:
{本文}

例:

件名: 商品についての問い合わせ
送信者: user@example.com

本文:
商品Aの在庫はありますか?

image.png

🛡️ 通知失敗時の挙動

通知処理中にエラーが発生した場合でも、ユーザーには影響を与えず、ログにエラー情報を記録します:

try {
    $this->chatworkApiService->notify('お問い合わせ通知', $body);
} catch (\Throwable $e) {
    $this->logger->warning('[ChatworkApi] 通知失敗: ' . $e->getMessage());
}

⚙️ 管理画面からの接続テスト機能

管理画面には以下のテストボタンが用意されています:

  • 接続テスト(/v2/me
  • ルーム情報取得(/v2/rooms/{room_id}
  • テストメッセージ送信(/v2/rooms/{room_id}/messages

🎨 管理画面UI

  • c-toggleSwitchを使用した通知ON/OFFの切替スイッチ
  • Bootstrapベースのフォームレイアウト
  • 管理画面ナビゲーションに「Chatwork API 設定」を追加

image.png

🔗 関連リンク

🙌 最後に

もしよければご自由にご活用ください。
改善案やフィードバックなどありましたら、コメント欄でぜひ教えていただけると嬉しいです 😊

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?