# Function Hub

Function Hubは現在、初期ベータ版として提供されており、Adaloビルダーにはまだ完全に統合されていません。APIキーを生成するには、コマンドラインツールのcURLを使用し、アプリケーションIDを指定してください。

```
$ curl -X POST https://functionhub.adalo.com/api/keys \
-H "Content-Type: application/json" \
-d '{"app_id": "YOUR-APP-ID"}' \
{"api_key":"124TYghFYU9898123PRTNF"}%
```

APIキーはJSON形式のレスポンスとして返されます。上記の例では、キーは`124TYghFYU9898123PRTNF`です。このキーをコピーして、パスワード管理ツールに保存してください。

### Function Hubを使用したカスタムアクションの設定方法

AdaloアプリからFunction Hubの各エンドポイントを呼び出す手順は以下の通りです。

1. Adaloエディタでアプリを開く
2. アクションのトリガーとなるコンポーネント、またはスクリーンを選択する
3. 「**Custom Action**（カスタムアクション）」を追加する
4. **API Base URL**（ベースURL）を以下に設定する：`https://functionhub.adalo.com`
5. **Method**（メソッド）を設定する（エンドポイントの仕様に合わせて POST または GET を選択します。）
6. 特定の商品の**URLパス**を入力する（例：`/api/math/sort`）
7. **Headers**（ヘッダー）に以下を追加する：
   * **Key:** `X-API-Key`
   * **Value:** あなたのAPIキー
8. （JSONボディを含むPOSTリクエストの場合のみ）**Headers**に以下を追加する：
   * **Key:** `Content-Type`
   * **Value:** `application/json`
9. 各エンドポイントの説明に従って、**Body**または**URLパラメータ**を設定する
10. **Response**（レスポンス）設定にて、出力フィールド（例：`result`）をMagic Textやアプリ内のプロパティに紐付ける（マッピングする）

### 対応しているエンドポイント

現在、実用的なエンドポイントが限定的に利用可能です。ユーザーの要望に基づき、今後も機能を拡充していきます！

#### 数値のソート

カンマ区切りの数値リストを昇順で並べ替えます。

**ユースケース**

* スコアや評価のリストを並べ替える
* 価格を安い順から高い順に並べる
* コレクション内の数値データをランク付けする

| **Method**   | POST             |
| ------------ | ---------------- |
| **URL**      | `/api/math/sort` |
| **Auth（認証）** | 必須               |

**Request Body（リクエストボディ）**

| パラメータ     | 型      | 要件 | 説明                         |
| --------- | ------ | -- | -------------------------- |
| `numbers` | string | 必須 | カンマ区切りの整数（例：`"5,2,9,1,3"`） |

**例**

**リクエスト：**

```
POST /api/math/sort
Content-Type: application/json
X-API-Key: your-api-key

{
  "numbers": "5,2,9,1,3"
}
```

**レスポンス (200)：**

```json
{
  "result": "1,2,3,5,9"
}
```

**cURLとAPIキーを使用して、このエンドポイントをテストできます。**

```
curl -X POST https://functionhub.adalo.com/api/math/sort \
    -H "Content-Type: application/json" \
    -H "X-API-Key: your-api-key" \
    -d '{"numbers": "5,3,8,1,9,2"}'

  Response:

  {"result": "1,2,3,5,8,9"}
```

**数値を並べ替えるカスタムアクションの設定**

* **Method:** POST
* **URL:** `/api/math/sort`
* **Body:** `numbers`をカンマ区切りのリストに設定します。データベースから値を取得するには、マジックテキストを使用できます。
* **Output（出力）:** `result`をマップ化し、ソートされたリストを表示します。

#### テキストの置換

文字列内の特定の部分文字列をすべて置換します。

**ユースケース**

* ユーザー入力のクリーンアップ（不要な文字の削除）
* プレースホルダーテキストを動的な値に置換
* 表示されるコンテンツから機密性の高い単語を伏せ字にする

| **Method**   | POST                                               |
| ------------ | -------------------------------------------------- |
| **URL**      | `/api/string/replace/{string}/{search}/{replace?}` |
| **Auth（認証）** | 必須                                                 |

**URLパラメータ**

| パラメータ     | 要件 | 説明                            |
| --------- | -- | ----------------------------- |
| `string`  | 必須 | 変更する元のテキスト                    |
| `search`  | 必須 | 検索対象となる文字列                    |
| `replace` | 不要 | 置換後のテキスト。省略された場合、検索語句は削除されます。 |

**例**

**単語を置き換える：**

```
POST /api/string/replace/hello world/world/universe
X-API-Key: your-api-key
```

```json
{
  "result": "hello universe"
}
```

**単語を削除する（置き換えなし）：**

```
POST /api/string/replace/hello world/world
X-API-Key: your-api-key
```

```json
{
  "result": "hello "
}
```

**文字列を置換するカスタムアクションの設定**

* **Method:** POST
* **URL:** マジックテキストを使用して動的にパスを構築する：`/api/string/replace/{YourTextField}/{SearchTerm}/{ReplacementText}`
* **Output（出力）:** `result`をテキストプロパティまたは表示フィールドに割り当てる

#### テキストの操作

組み込みのオプションのいずれかを使用して、文字列を変換します。

**ユースケース**

* ユーザー名をタイトルケース（`capitalize`）に統一する
* メールアドレスを小文字で保存する
* 見出しを大文字で表示する

|              |                                           |
| ------------ | ----------------------------------------- |
| **Method**   | POST                                      |
| **URL**      | `/api/string/convert/{function}/{string}` |
| **Auth（認証）** | 必須                                        |

**URLパラメータ**

| パラメータ      | 要件 | 説明                                                        |
| ---------- | -- | --------------------------------------------------------- |
| `function` | 必須 | One of: `uppercase`, `lowercase`, `capitalize`, `reverse` |
| `string`   | 必須 | The text to transform                                     |

利用可能な機能

| 機能           | 説明説明             | 入力例           | 出力例           |
| ------------ | ---------------- | ------------- | ------------- |
| `uppercase`  | すべての文字を大文字に変換する  | `hello world` | `HELLO WORLD` |
| `lowercase`  | すべての文字を小文字に変換する  | `Hello World` | `hello world` |
| `capitalize` | 各単語の最初の文字を大文字にする | `hello world` | `Hello World` |
| `reverse`    | 文字列を逆順にする        | `hello`       | `olleh`       |

**例**

```
POST /api/string/convert/capitalize/john doe
X-API-Key: your-api-key
```

```json
{
  "result": "John Doe"
}
```

**エラーレスポンス**

関数名が無効な場合：

```json
{
  "error": "Invalid function"
}
```

ステータス: **404**

**テキストを操作するためのカスタムアクションの設定**

* **Method:** POST
* **URL:** `/api/string/convert/capitalize/{YourTextField}` —  `capitalize` を必要な関数に置き換える
* **Output（出力）:** `result`をテキストプロパティに割り当てる

#### テキストの連結

カンマ区切りのテキストを、スペース区切りの単一の文字列に結合します。

**ユースケース**

* 名、姓、および敬称を組み合わせてフルネームを作成する
* 通り名、都市名、州名、郵便番号のフィールドから住所を作成する
* 複数のテキストフィールドを1つの表示用文字列に統合する

| **Method**   | POST                             |
| ------------ | -------------------------------- |
| **URL**      | `/api/string/concatenate/{text}` |
| **Auth（認証）** | 必須                               |

**URLパラメータ**

| パラメータ  | 要件 | 説明                           |
| ------ | -- | ---------------------------- |
| `text` | 必須 | 結合するカンマ区切り値（例：`hello,world`） |

空の値は自動的に除外され、各セグメントの先頭と末尾の空白文字が削除されます。

**例**

```
POST /api/string/concatenate/John,Doe,Jr.
X-API-Key: your-api-key
```

```json
{
  "result": "John Doe Jr."
}
```

**テキストを連結するカスタムアクションの設定**

* **Method:** POST
* **URL:** 「Magic Text」を使ってパスを作成する：`/api/string/concatenate/{FirstName},{LastName},{Suffix}`
* **Output（出力）:** `result` をテキストプロパティ（例：フルネーム）に割り当てる

#### 時間差

2つの時間の差を計算します。

**ユースケース**

* 勤務時間の長さを計算する
* 2つの予定されたイベントの間隔を表示する
* 締め切りまでの残り時間を表示する

| **Method**   | GET                                                   |
| ------------ | ----------------------------------------------------- |
| **URL**      | `/api/temporal/between/{startTime}/{endTime}/{unit?}` |
| **Auth（認証）** | 必須                                                    |

**URLパラメータ**

| パラメータ       | 要件 | 説明                                                             |
| ----------- | -- | -------------------------------------------------------------- |
| `startTime` | 必須 | 開始時刻は24時間表記（`HH:MM`、例：`09:00`）                                 |
| `endTime`   | 必須 | 終了時刻は24時間表記（`HH:MM`、例：`17:30`）                                 |
| `unit`      | 不要 | 出力単位。デフォルト：`minutes`。オプション：`minutes`, `hours`, `seconds`, `hm` |

**単位オプション**

| 単位        | レスポンスキー         | 説明           | 例 (09:00 から 10:30) |
| --------- | --------------- | ------------ | ------------------ |
| `minutes` | `minutes`       | 合計分数         | `90`               |
| `hours`   | `hours`         | 整数時間（切り捨て）   | `1`                |
| `seconds` | `seconds`       | 合計秒数         | `5400`             |
| `hm`      | `hours_minutes` | `H:MM`形式の時と分 | `"1:30"`           |

**例**

**デフォルト（分）：**

```
GET /api/temporal/between/09:00/17:30
X-API-Key: your-api-key
```

```json
{
  "minutes": 510
}
```

**時と分：**

```
GET /api/temporal/between/09:00/17:30/hm
X-API-Key: your-api-key
```

```json
{
  "hours_minutes": "8:30"
}
```

**時間差を計算するカスタムアクションの設定**

* **Method:** GET
* **URL:** 「Magic Text」を使ってパスを作成する：`/api/temporal/between/{StartTimeField}/{EndTimeField}/hm`
* **Output（出力）:** `hours_minutes`（または選択した単位に応じて`minutes`, `hours`, `seconds`）をテキストまたは数値のプロパティにマッピングする

#### 合計値

カンマ区切りの数値のリストの合計を計算します。

**ユースケース**

* 注文の明細を合計する
* 値のリストから累計を計算する
* 複数のカテゴリにわたるスコアを合計する

|              |                 |
| ------------ | --------------- |
| **Method**   | POST            |
| **URL**      | `/api/math/sum` |
| **Auth（認証）** | 必須              |

**Request Body（リクエストボディ）**

| パラメータ     | 型      | 要件 | 説明                     |
| --------- | ------ | -- | ---------------------- |
| `numbers` | string | 必須 | カンマ区切りの整数（例：`"1,2,3"`） |

**例**

**リクエスト：**

```
POST /api/math/sum
Content-Type: application/json
X-API-Key: your-api-key

{
  "numbers": "1,2,3"
}
```

**レスポンス (200)：**

```json
{
  "result": 6
}
```

**Adaloの設定**

* **Method:** POST
* **URL:** `/api/math/sum`
* **Body:** `numbers`をカンマ区切りのリストとして設定。データベースから値を取得するには、Magic Textを使用できます。
* **Output（出力）:** `result`を数値プロパティにマッピングする

***

#### 数値の平均

カンマ区切りの数値のリストの平均（算術平均）を計算します。

|              |                     |
| ------------ | ------------------- |
| **Method**   | POST                |
| **URL**      | `/api/math/average` |
| **Auth（認証）** | 必須                  |

**Request Body（リクエストボディ）**

| パラメータ     | 型      | 要件 | 説明                     |
| --------- | ------ | -- | ---------------------- |
| `numbers` | string | 必須 | カンマ区切りの整数（例：`"2,4,6"`） |

**例**

**リクエスト：**

```
POST /api/math/average
Content-Type: application/json
X-API-Key: your-api-key

{
  "numbers": "2,4,6"
}
```

**レスポンス (200)：**

```json
{
  "result": 4
}
```

**Adaloの設定**

* **Method:** POST
* **URL:** `/api/math/average`
* **Body:** `numbers`をカンマ区切りのリストとして設定。データベースから値を取得するには、マジックテキストを使用できます。
* **Output（出力）:** `result`を数値プロパティにマッピングする

**ユースケース**

* 複数のレビューから平均評価を算出する
* 一連の評価から平均スコアを求める
* 商品のリストから平均価格を算出する

***

#### 最小値

カンマ区切りの数値のリストから、最も小さい数値を求めます。

**ユースケース**

* 商品のセットの中から最も安い価格を探す
* 最低のスコアや評価を特定する
* 在庫がある中で最も早い数量を特定する

|              |                 |
| ------------ | --------------- |
| **Method**   | POST            |
| **URL**      | `/api/math/min` |
| **Auth（認証）** | 必須              |

**Request Body（リクエストボディ）**

| パラメータ     | 型      | 要件 | 説明                     |
| --------- | ------ | -- | ---------------------- |
| `numbers` | string | 必須 | カンマ区切りの整数（例：`"5,3,1"`） |

**例**

**リクエスト：**

```
POST /api/math/min
Content-Type: application/json
X-API-Key: your-api-key

{
  "numbers": "5,3,1"
}
```

**レスポンス (200)：**

```json
{
  "result": 1
}
```

**Adaloの設定**

* **Method:** POST
* **URL:** `/api/math/min`
* **Body:** `numbers`をカンマ区切りのリストに設定。データベースから値を取得するには、マジックテキストを使用できます。
* **Output（出力）:** `result`を数値プロパティにマッピングする

***

#### 最大値

カンマ区切りの数値のリストから、最大の数値を求めます。

**ユースケース**

* 最高入札額または最高売出価格の特定
* ランキングにおける最高スコアの特定
* 会場のリストから最大収容人数の算出

|              |                 |
| ------------ | --------------- |
| **Method**   | POST            |
| **URL**      | `/api/math/max` |
| **Auth（認証）** | 必須              |

**Request Body（リクエストボディ）**

| パラメータ     | 型      | 要件 | 説明                     |
| --------- | ------ | -- | ---------------------- |
| `numbers` | string | 必須 | カンマ区切りの整数（例：`"5,3,1"`） |

**例**

**リクエスト：**

```
POST /api/math/max
Content-Type: application/json
X-API-Key: your-api-key

{
  "numbers": "5,3,1"
}
```

**レスポンス (200)：**

```json
{
  "result": 5
}
```

**Adaloの設定**

* **Method:** POST
* **URL:** `/api/math/max`
* **Body:** `numbers`をカンマ区切りのリストとして設定。データベースから値を取得するには、マジックテキストを使用できます。
* **Output（出力）:** `result`を数値プロパティにマッピングする

***

#### 割合

ある数値が別の数値に対して何パーセントを占めるかを計算します。

**ユースケース**

* 完了進捗の表示（例：60件のタスクのうち15件完了＝25%）
* 割引率の計算
* 目標の達成率の表示

|              |                        |
| ------------ | ---------------------- |
| **Method**   | POST                   |
| **URL**      | `/api/math/percentage` |
| **Auth（認証）** | 必須                     |

**Request Body（リクエストボディ）**

| パラメータ    | 型       | 要件 | 説明               |
| -------- | ------- | -- | ---------------- |
| `number` | numeric | 必須 | 部分の値（例: `"50"`）  |
| `total`  | numeric | 必須 | 全体の値（例: `"200"`） |

**例**

**リクエスト：**

```
POST /api/math/percentage
Content-Type: application/json
X-API-Key: your-api-key

{
  "number": "50",
  "total": "200"
}
```

**レスポンス (200)：**

```json
{
  "result": 25
}
```

**Adaloの設定**

* **Method:** POST
* **URL:** `/api/math/percentage`
* **Body:** 「部分」の欄には`number`を、「合計」の欄には`total`を入力してください。データベースから値を取得するには、Magic Text を使用できます。
* **Output（出力）:** `result`を数値プロパティにマッピングする

### ヒントとベストプラクティス

* **特殊文字のURLエンコード** — テキストにスペースや特殊文字が含まれる場合、パスパラメータではURLエンコードが必要です（例：`hello world` は `hello%20world` となります）。Adaloで「Magic Text」を使用する場合、これは自動的に処理されます。
* **表示には `hm` を使用する** — `hm` 単位は `1:30` のような人間が読みやすい形式を返します。これはアプリのUIで「所要時間（期間）」を表示するのに最適です。
* **動的テキストには「Concatenate（結合）」を活用する** — concatenate エンドポイントを使用すると、Adaloのデータベースにある複数のフィールドを組み合わせて、フルネーム、住所、その他の任意のテキストを作成できます。
* **1つのアプリにつき1つのキー** — Adaloアプリ1つにつき、1つのAPIキーを作成してください。そのアプリ内のすべてのカスタムアクションで同じキーを使用します。
* **インタラクティブ・ドキュメントでテストする** — カスタムアクションを設定する前に、ベースURLの `/docs/api` にアクセスして、ブラウザ上で直接エンドポイントのテストを行うことができます。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.adalo.com/ja/integrations/function-hub.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
