---
title: カスタム処理を利用して、APIのメイン処理に渡すリクエスト値を書き換える
description: カスタム処理とAPI Pre-processingを使用して、APIのメイン処理に渡すリクエスト値を書き換える方法を紹介します。  
---

カスタム処理とAPI Pre-processingを使用して、APIのメイン処理に渡すリクエスト値を書き換える方法を紹介します。  

カスタム処理を利用することで、下記のような対応ができます。
- ユーザーの入力値を特定の形式に変換した上でAPIに渡す
- 追加の固定値をAPIに渡す

このチュートリアルでは、フォーム送信APIへのリクエスト時にユーザーが入力した全角数字を半角数字に変換する処理を実装します。

## カスタム処理を作成する
リクエスト書き換え処理を記述するためのカスタム処理を用意します。

### カスタム処理の一覧画面を表示する
サイドメニューより[オペレーション]を選択し、[カスタム処理]をクリックします。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/05fc571fc550915a05f0c13d0508e9f6.png)

### カスタム処理追加画面を表示する
カスタム処理一覧画面の右上の [追加] をクリックします。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/9998b0797d2ae3e08dd1c0ffde72420c.png)

### タイトル・カテゴリを入力する
カスタム処理のタイトルとカテゴリを入力します。  
今回は下記のように入力しました。
- タイトル：/rcms-api/3/inquiry/3/messages/send
- カテゴリ：Pre-processing
- 識別子：sample2_function

:::tip
同一カテゴリ内にタイトルが重複する処理を作成できないため、実装対象のエンドポイント名など、他と重複しないタイトルを命名してください。
:::

![Image from Gyazo](https://t.gyazo.com/teams/diverta/98811006f287ee88663d807d8cb7a105.png)

### カスタム処理を保存する
一旦ここまでで保存します。
画面下部までスクロールし、[追加する] ボタンをクリックして保存します。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/a7a9f5081b0ade550bd5f1f96d4a82b1.png)

## リクエスト値の書き換え処理を記述する
次に、リクエスト値の書き換え処理を記述します。 

### カスタム処理編集画面を表示する 
サイドメニューより[オペレーション]を選択し、[カスタム処理]をクリックします。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/05fc571fc550915a05f0c13d0508e9f6.png)

先ほど追加したカスタム処理のタイトルをクリックします。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/148deb8947cc1f228700150e34284eb7.png)

編集画面内のエディタにリクエスト値の書き換え処理を記述していきます。  

### リクエスト変数を初期化する
リクエスト値を格納するための$request変数を初期化します。  

| 変数名 | 型 | 説明
| :--- | :--- | :--- |
|$request |array |連想配列|


エディタに下記記入します。
```smarty
{* $request = [] *}
{assign_array var="request" values=""}
```

![Image from Gyazo](https://t.gyazo.com/teams/diverta/9d024902057e9db29cc7a4b28dd25481.png)


### リクエスト値の書き換え処理を実装する
ユーザーの入力値を変換し、$request変数に変換後の値を代入します。  
入力値を参照するためには、下記のいずれかの変数を利用します。

| 変数名 | 説明 |
| :--- | :--- |
|$smarty.get | クエリパラメータ |
|$smarty.post | JSON body |
|$smarty.request | クエリパラメータ & JSON body |

入力値の変換には、[mb_convert_kana](https://www.php.net/manual/ja/function.mb-convert-kana.php)を利用します。

下記のように追記します。

```smarty
{assign_array var="request" values=""}

{* [例] POSTされた値の全角数字を半角に書き換える *}
{if isset($smarty.post.ext_01)}
  {assign
    var="request.ext_01"
    value=$smarty.post.ext_01|mb_convert_kana:'n'}
{/if}
```

![Image from Gyazo](https://t.gyazo.com/teams/diverta/8b3a0562211ce196be329007665282b3.png)

### 保存する
処理の記述が完了したら、[更新する] ボタンをクリックし保存してください。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/cdd128a4f2f5cafbb30306da8b4ee7de.png)
## APIにカスタム処理を関連付ける
次に作成したカスタム処理をAPIに関連付けます。  

### API一覧画面を表示する
メニューの[API] をクリックし、エンドポイントを作成するAPIの一覧画面を表示します。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/edec43836bdd23fc3bcdce176502a1c6.png)

### エンドポイントを作成する
フォーム送信APIの処理を実装するためのエンドポイントを作成します。  
[新しいエンドポイントの追加]をクリックします。  
![Image from Gyazo](https://t.gyazo.com/teams/diverta/00c5593b74b2d0aca84a698fa9f708b5.png)

今回は下記のような設定でエンドポイントを作成しました。

| 親項目 | 子項目 | 値 |
| :--- | :--- | :--- |
| パス | - | inquiry/3/messages/send |
| モデル |カテゴリー |フォーム |
| モデル |モデル | InquiryMessage (v1) |
| モデル |オペレーション | send |
| 基本設定 |id | 3<br/>（こちらには送信対象フォームのIDを記述します。<br/>フォームIDは[フォーム一覧](/ja/docs/management/inquiry-forms/)画面から確認できます) |

![Image from Gyazo](https://t.gyazo.com/teams/diverta/b10bd880e9fdc541f263414b091a626c.jpg)

![Image from Gyazo](https://t.gyazo.com/teams/diverta/a847b8b20f1ebf7c9b35d17939cf7774.jpg)

記入したら[追加する]をクリックして、エンドポイント作成完了です。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/b23b07b23efc34bded37d3881edb1ea6.png)

### エンドポイントを選択する
API一覧画面より、先ほど作成したエンドポイントの[前処理] ボタンをクリックします。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/8d4b683129be98f4ed0dcd9093a12c85.png)

テーブルの下に、「カテゴリ」と「一覧」プルダウンが表示されます。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/a24336644c86da2635ffd47a04ec12c3.png)

### カスタム処理を関連付ける
エンドポイントとカスタム処理を関連付けます。  
プルダウンより、先ほど作成しておいたカスタム処理のカテゴリとタイトルを選択します。

- カテゴリ：Pre-processing
- コンテンツ：/rcms-api/3/inquiry/3/messages/send

![Image from Gyazo](https://t.gyazo.com/teams/diverta/4049222bb0ae8001f866126039f5faab.png)

## APIの動作を確認する
Swagger UI画面からリクエストを行い、リクエスト書き換え処理の動作を確認します。

### API情報画面を表示する
API一覧画面の[Swagger UI]をクリックし、Swagger UI画面を表示します。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/370b8d5684d3403541c61a654cd2252c.png)

### エンドポイントを選択する
作成した「/rcms-api/3/inquiry/3/messages/send」エンドポイントをクリックし、[Try it out] ボタンをクリックします。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/fa9316fed4f0b4ea4f2892190a6ad3c8.png)

### 全角数字を含む値を入力する  
[Request body]フィールドが記入できるようになるので、全角数字を含む値を [Request body] に入力します。  
今回は　`"ext_01": "string",`の箇所を下記に修正します。
```json title="Request&#x20;body"
{
  ...
  "ext_01": "１２３４５",
  ...
}
```

入力が完了したら、[Execute] ボタンをクリックし、リクエストを実行します。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/a4df314f7cd85e30d2264521349b6eb2.png)

リクエストが成功した場合、下記のようなレスポンスが出力されます。  
後ほど動作確認で使用するため、ここで発行されたidの数値を控えておいてください。
```json title="response"
{
  "errors": [],
  "messages": [
    "新規追加しました。"
  ],
  "id": 2,
  "thanks_tag": ""
}
```

### 保存された値を確認する
サイドメニューより[キャンペーン] -> [フォーム] の順にクリックし、フォーム一覧画面にアクセスします。

![Image from Gyazo](https://t.gyazo.com/teams/diverta/a30895f3564f6b6d32a2db57266c3381.png)

先ほど送信したフォームのタイトルをクリックし、フォーム詳細画面にアクセスします。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/c209690fb0cb6432e44608d39c5f9a6e.png)

[回答] タブを選択し、フォームの回答一覧画面にアクセスします。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/09f91e41f23d10a700bdda512ebee2d8.png)

[No.] 列より、フォーム送信時に発行されていたidを探し出し、数値のリンクをクリックして回答内容画面にアクセスします。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/91fa43a950fdf9abfab25e904c243413.png)

リクエスト値を上書きした項目を参照し、値が半角数字に書き換わっていることを確認します。  

![Image from Gyazo](https://t.gyazo.com/teams/diverta/5768683a946dd99f31387258ee94f825.png)

以上でカスタム処理とAPIの関連付けが完了です。

## 値が書き換わらない場合の確認ポイント
リクエスト値が想定通りに書き換わらない場合は、下記のポイントを確認してください。
- APIのPre-processingとカスタム処理が関連付いているか
- 関連付いているカスタム処理が正しいか
- 変数名(request)が正しいか
- チェック対象の項目名が正しいか
- リクエスト変換処理のロジックが正しいか
