miiboのカスタムアクションにはテンプレートがありますが、ここにURLクロール(Webページ情報取得)が追加されてました。
これ便利そうですね。テンプレというよりプラグインみたいな感じでインストールする機能にしちゃってもよいような機能。
ということで、リアルタイムにWebコンテンツを取得できているかが分かりやすいようにヤフーの路線情報から電車の運行状況を取得してみます。
手順
1. カスタムアクション追加
- テンプレートからURLクロールを選択してインポート => OKで進みます。
- 特に中身はいじらずに保存
これでOKです。
2. Webhook設定
次はWebhook設定です。
連携タイプはCustm Actionを指定して、先ほどのURLクロールのアクションを選択します。
-
AIにタイミングを判断させるにチェック - Function Name:
get_webcontentなどの適したタイトル - Function Descriptioon:
ユーザーから指定されたURLの情報を取得するなど挙動の説明
これで保存して、Webhookの公開設定を公開にすればOKです。
3. 試す
https://transit.yahoo.co.jp/diainfo/area/4などURLを送りつつ情報を教えてということでAIがカスタムアクションを実行して情報を取得してくれます。
ヤフーのサイトをみたら横浜線が遅れてたので横浜線の状況を聞いてみるとしっかりと運転見合わせを教えてくれました。
補足: 挙動をながめてみる
現状のテンプレコードがこちらでした。
/**
* 単一の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の指定箇所ですね。設定との連動はこのような形式
@{url}の書き方ですが、Function Callingで呼ばれるときのパラメータを代入してそうです。
Webhook設定側のFunction Parametersは以下のような形。
Fuction CallingでAIが判断して"クローリングしたいWebページのURL"を特定してくれて、それを@{url}の変数に代入してプログラムに送信してそうですね。
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "クローリングしたいWebページのURL"
}
},
"required": [
"url"
]
}
{
"message": "@{utterance}",
"userId": "#{user_id}",
"url": "@{url}" //←ここに代入
}
#{}と@{}の書き方がどっちがどっちだったっけ...となるときあるので気をつけたい
#{}







