4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

miiboのカスタムアクションのURLクロールで運行状況取得

4
Posted at

miiboのカスタムアクションにはテンプレートがありますが、ここにURLクロール(Webページ情報取得)が追加されてました。

これ便利そうですね。テンプレというよりプラグインみたいな感じでインストールする機能にしちゃってもよいような機能。

ということで、リアルタイムにWebコンテンツを取得できているかが分かりやすいようにヤフーの路線情報から電車の運行状況を取得してみます。

手順

1. カスタムアクション追加

  • テンプレートからURLクロールを選択してインポート => OKで進みます。

CleanShot 2025-05-11 at 23.26.59.png

CleanShot 2025-05-11 at 23.27.28.png

  • 特に中身はいじらずに保存

CleanShot 2025-05-11 at 23.28.16.png

これでOKです。

CleanShot 2025-05-11 at 23.28.26.png

2. Webhook設定

次はWebhook設定です。

連携タイプはCustm Actionを指定して、先ほどのURLクロールのアクションを選択します。

  • AIにタイミングを判断させるにチェック
  • Function Name: get_webcontent などの適したタイトル
  • Function Descriptioon: ユーザーから指定されたURLの情報を取得する など挙動の説明

CleanShot 2025-05-11 at 23.30.35.png

これで保存して、Webhookの公開設定を公開にすればOKです。

3. 試す

https://transit.yahoo.co.jp/diainfo/area/4などURLを送りつつ情報を教えてということでAIがカスタムアクションを実行して情報を取得してくれます。

ヤフーのサイトをみたら横浜線が遅れてたので横浜線の状況を聞いてみるとしっかりと運転見合わせを教えてくれました。

CleanShot 2025-05-12 at 00.10.19.png

補足: 挙動をながめてみる

現状のテンプレコードがこちらでした。


/**
 * 単一のURLをクローリングして、タイトルや概要等の情報を取得するサンプルコードです。
 * env.API_ENDPOINT, env.API_KEY, env.API_ENGINE を指定し、
 * input.url に対象となるWebページのURLを渡します。
 *
 * 例:
 *   input: {
 *     url: "https://example.com/about"
 *   }
 */

const result = {
  success: false,
  messages: [],
  error: null
};

try {
  if (!env.API_ENDPOINT) {
    throw new Error('Missing API_ENDPOINT in env');
  }
  if (!input.url) {
    throw new Error('URL is required in input');
  }

  // ペイロード定義
  const payload = {
    apiKey: env.API_KEY || '',
    engine: env.API_ENGINE, 
    urls: [ input.url ], // 単一URLを配列に入れて送る想定
    getCount: 0 // 深掘り (本文クロール) しない例
  };

  const response = fetch(env.API_ENDPOINT, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(payload)
  });

  if (response.status !== 200) {
    throw new Error('Web Search API request failed: HTTP ' + response.status);
  }

  // クロール結果をレスポンスとして格納
  result.success = true;
  result.messages = [
    'API request succeeded (URLクロール)',
    JSON.stringify(response.body)
  ];
} catch (err) {
  result.error = err.message;
}

result;
    

urls: [ input.url ]の箇所がURLの指定箇所ですね。設定との連動はこのような形式

CleanShot 2025-05-12 at 00.13.55.png

@{url}の書き方ですが、Function Callingで呼ばれるときのパラメータを代入してそうです。

Webhook設定側のFunction Parametersは以下のような形。

CleanShot 2025-05-12 at 00.17.05.png

Fuction CallingでAIが判断して"クローリングしたいWebページのURL"を特定してくれて、それを@{url}の変数に代入してプログラムに送信してそうですね。

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "クローリングしたいWebページのURL"
    }
  },
  "required": [
    "url"
  ]
}
{
  "message": "@{utterance}",
  "userId": "#{user_id}",
  "url": "@{url}" //←ここに代入
}

#{}@{}の書き方がどっちがどっちだったっけ...となるときあるので気をつけたい

#{}

4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?