---
title: "内部通知（ベルアイコン）を送信する"
description: "管理者から特定のベンダーや特定のユーザーへ、内部通知（ベルアイコン）を送る方法と注意点。"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.cs-cart.jp/llms.txt
> Use this file to discover all available pages before exploring further.

# 内部通知（ベルアイコン）を送信する

管理者から特定のベンダー（出品者）や特定のユーザーに対して、内部通知（ベルアイコン）を送る方法です。CS-Cart 4.19 系のマルチベンダーで確認した内容です。メールでの通知（`MailTransport`）の定義は、このページでは扱いません。[イベントの通知](/core/event-notifications/) を参照してください。

## 特定のベンダーに通知する

イベントのスキーマで `to_company_id` を設定すると、特定の企業（ベンダー）に通知できます。

```php
// schemas/notifications/events_multivendor.post.php
$schema['my_addon.event_name'] = [
    'group'         => 'my_addon',
    'data_provider' => [DataProvider::class, 'factory'],
    'receivers'     => [
        UserTypes::VENDOR => [
            InternalTransport::getId() => InternalMessageSchema::create([
                'tag'           => 'my_addon',
                'area'          => SiteArea::VENDOR_PANEL,
                'section'       => NotificationsCenter::SECTION_PRODUCTS,
                'to_company_id' => DataValue::create('to_company_id'), // 送信先を指定する
                // ...
            ]),
        ],
    ],
];
```

通知を発火するときは、送信先のベンダー ID を `to_company_id` に渡します。

```php
$notification_data = [
    'company_id'    => $target_company_id,
    'to_company_id' => $target_company_id, // 送信先のベンダー ID
];
Tygh::$app['event.dispatcher']->dispatch($event_name, $notification_data, $notification_rules);
```

## 特定のユーザーに通知する

`SearchCondition` と `ReceiverSearchMethods::USER_ID` を使います。

```php
use Tygh\Enum\ReceiverSearchMethods;
use Tygh\Notifications\Receivers\SearchCondition;

// 特定のユーザーを受信者として登録する（インストール時など）
fn_update_notification_receiver_search_conditions(
    'group',
    'my_addon',
    UserTypes::ADMIN, // または UserTypes::VENDOR
    [
        new SearchCondition(ReceiverSearchMethods::USER_ID, $target_user_id),
    ]
);
```

## 通知を送信する

```php
// ベンダーに通知する
$force_notification = [
    UserTypes::VENDOR => true,
];
$notification_rules = Tygh::$app['event.notification_settings.factory']->create($force_notification);

Tygh::$app['event.dispatcher']->dispatch(
    'my_addon.event_name',
    $notification_data,
    $notification_rules
);
```

## 必要なファイルの構成

```text
app/addons/<アドオンID>/
├── addon.xml                                  # functions セクションが必須
├── func.php                                   # install / uninstall 関数
├── schemas/notifications/
│   └── events_multivendor.post.php            # MULTIVENDOR でベンダーに通知するときに必須
├── resources/
│   └── internal_templates.xml                 # 通知のテンプレート
└── Tygh/Addons/<Addon>/Notifications/DataProviders/
    └── DataProvider.php                       # データプロバイダー
```

## UserTypes の定数

CS-Cart のユーザータイプは、次の3種類です。`UserTypes::USER` はありません。

| 定数 | 値 | 説明 |
| --- | --- | --- |
| `UserTypes::ADMIN` | `'A'` | 管理者 |
| `UserTypes::VENDOR` | `'V'` | ベンダー（出品者） |
| `UserTypes::CUSTOMER` | `'C'` | 顧客 |

定義は `app/Tygh/Enum/UserTypes.php` にあります。

## 内部通知（ベルアイコン）に対応するエリア

| SiteArea | 値 | 内部通知の UI | 備考 |
| --- | --- | --- | --- |
| `ADMIN_PANEL` | `'A'` | あり | 管理画面 |
| `VENDOR_PANEL` | `'V'` | あり | ベンダーパネル |
| `STOREFRONT` | `'C'` | なし | 顧客向けのショップフロント |

定義は `app/Tygh/Enum/SiteArea.php` にあります。

> **顧客向けの内部通知はありません**
>
> 顧客（`CUSTOMER`）向けには、内部通知の UI がありません。`design/themes/` の下に、通知センター（`notifications_center`）に関するテンプレートがないためです。内部通知は、管理画面とベンダーパネルだけの機能です。顧客への通知に使えるのは、メール（`MailTransport`）だけです。

## 注意点

> **実装時の注意**
>
> * MULTIVENDOR でベンダー向けに通知するときは、`events_multivendor.post.php` を使います。`events.post.php` では動作しません。
> * アドオンを有効化・無効化しても、`receiver_search_conditions` は更新されません。更新するには、再インストールが必要です。
> * `action_url` には、コアの例に倣って、相対 URL（`dispatch` の形式）を指定します。生成された URL が、意図した画面に遷移するかを確認してください。
> * `addon.xml` に `<functions>` セクションがないと、install 関数が呼ばれません。

## 参考にできる実装

CS-Cart コアの `vendor_communication` アドオンが参考になります。

## 関連ページ

* [イベントの通知](/core/event-notifications/)
* [フック](/addon-development/hooks/)
* [Add-on スキーマー](/addon-development/add-on-scheme/)

Source: https://docs.cs-cart.jp/addon-development/tips/notifications/index.mdx
