連携
通話中の
連携
連携の持ち方#
連携は
| 持ち方 | 使いどころ | つなぎ方 |
|---|---|---|
| テナントの |
事業者 |
埋め込みの |
| 環境の |
サービス全体で |
管理画面の |
通話の
鍵
プリセット#
| コネクター | 名前 | 種類 | つなぎ方 | AI が |
|---|---|---|---|---|
google_calendar |
Google カレンダー | 予約・予定 | Google の |
find_free_slots・create_event・cancel_event・find_events_by_phone_or_name |
m365_calendar |
Microsoft 365 の |
予約・予定 | Microsoft の |
Google カレンダーと |
google_sheets |
Google スプレッドシート | 顧客の |
Google の |
find_row_by_phone・append_row |
kintone |
kintone | 顧客の |
kintone の |
find_record_by_phone・create_record・update_record |
hubspot |
HubSpot | 顧客の |
HubSpot の |
find_contact_by_phone・create_contact・log_call |
slack |
Slack | 通知 | Slack の |
通知だけ |
chatwork |
Chatwork | 通知 | Chatwork の |
通知だけ |
lineworks |
LINE WORKS | 通知 | LINE WORKS の |
通知だけ |
teams |
Microsoft Teams | 通知 | Teams の |
通知だけ |
shannon_booking |
シャノンの |
予約・予定 | 呼び先の |
get_clinic_info・find_free_slots・find_patient・list_reservations・create_reservation・change_reservation・cancel_reservation |
GET /v1/connectorslist_connectors)gcal_find_free_slots など)available: false の
操作の中身#
- Google カレンダー・Microsoft 365:
find_free_slots { date_from, date_to?, duration_minutes? }は、受付の 時間・前後の 余白・埋まっている 時間を 考えて 空きを 8 件まで 返します (14 日先まで) 。 create_event { start, name, phone?, note?, duration_minutes? }・cancel_event { event_id }・find_events_by_phone_or_name { phone?, name? }(電話番号を 省くと、 かけてきた 番号) 。 つないだあとに、 使う カレンダー・予約の 長さ (5〜480 分、 既定 30) ・前後の 余白・ 曜日ごとの 受付の 時間・予定の 題名を 決めます。 予定の 題名には 病名などを 入れず、 用件は 予定の メモに だけ 入れます。 - Google スプレッドシート:
find_row_by_phone { phone? }・append_row { name?, phone?, note? }。使う 表と、 電話番号・名前・メモ・ 日時の 列を 決めます。 - kintone:
find_record_by_phone { phone? }・create_record { name?, phone?, note? }・update_record { record_id, name?, note? }。使う アプリと、 電話番号・名前・メモの フィールドを 決めます。 - HubSpot:
find_contact_by_phone { phone? }・create_contact { name, phone? }・log_call { summary, contact_id? }(受けた 電話と して 記録します) 。 - 通知
(Slack・Chatwork・LINE WORKS・Teams) : 通話のあと (要約が できた あと) に、 要約・用件の 分類・ 聞き取った 項目・管理画面への リンクを 送ります。 失敗した 通知は 送り直し、 ほかの 通知は 止めません。
会話の設定に書く#
連携をconnectors に
"connectors": [
{ "connector": "google_calendar", "actions": ["find_free_slots", "create_event", "cancel_event"] },
{ "connector": "slack" },
{ "connection": "con_…", "actions": ["*"] }
]| 項目 | 内容 |
|---|---|
connector |
プリセットの |
connection |
決まったcon_…) |
actions |
使う"*" |
confirm |
確認してから |
- 予約を
作る ・取り消すなど 書き換える 操作は、 いつも 内容を 読み上げて 相手の 同意を 得てから 使います (外せません) 。 - 使える
状態 ( active)の 連携の 操作だけが、 通話の ときに AI に 渡ります。 - 同じ
連携先は 1 回だけ、 connectorsは10 個までです。 AI に 見せる 道具の 名前 ( gcal_create_eventなど)が toolsの名前と 重なると 422 です。
埋め込みの連携の画面#
事業者
リンクの作り方#
curl https://api.voicast.jp/v1/tenants/ten_…/connect-links \
-H "Authorization: Bearer $VOICAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "connectors": ["google_calendar", "slack"], "frame_origin": "https://app.example.com" }'{ "url": "https://app.voicast.jp/connect/vcl_…", "expires_at": 1790000900000 }| 入力 | 内容 |
|---|---|
connectors |
画面にshannon_booking と |
frame_origin |
iframe で |
- リンクは
15 分で 切れます。 事業者が 設定の 画面を 開く たびに、 サーバーで 作り直します。 - 言語は
urlに?lang=jaか?lang=enを付けて 選べます (無ければ ブラウザの 言語) 。 - ログインは
要りません。 リンクの トークンで、 その テナントの 連携だけを 扱えます。
埋め込み#
<iframe src="https://app.voicast.jp/connect/vcl_…?lang=ja" title="連携" style="width: 100%; height: 720px; border: 0"></iframe>postMessage で
window.addEventListener('message', (e) => {
if (e.origin !== 'https://app.voicast.jp' || e.data?.type !== 'voicast.connect') return;
// { type: 'voicast.connect', result: 'ok' | 'error', error, connector, connection }
if (e.data.result === 'ok') refreshConnections();
});Google カレンダーなどneeds_setup で、
API キーや URL でつなぐ連携先#
Teams・シャノンのPOST /v1/connections でverify_failed です。
curl https://api.voicast.jp/v1/connections \
-H "Authorization: Bearer $VOICAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "connector": "teams", "tenant_id": "ten_…", "secret": "https://….logic.azure.com/workflows/…" }'カスタムの連携#
プリセットにtenant_id をinvalid_request にtenantexternal_id){ "connection": "con_…", "actions": [...] } でmcp1_…・api2_…)
URL と API キー(http)#
自社や
curl https://api.voicast.jp/v1/connections \
-H "Authorization: Bearer $VOICAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "connector": "http", "secret": "<API キー>", "input": { "base_url": "https://api.example.com", "header": "Authorization" } }'headerがAuthorizationならBearer <キー>を、ほかの 見出し ( X-API-Keyなど)なら キーを そのまま 付けます。 - 保存すると
設定待ちに なり、 道具 (10 個まで) を PATCH /v1/connections/{id}で保存すると 使えます。
{
"config": {
"tools": [
{
"name": "find_customer",
"description": "電話番号で顧客を探す",
"method": "GET",
"path": "/customers/search",
"params": [{ "name": "phone", "description": "電話番号(数字だけ)", "required": true }],
"confirm": false
}
]
}
}- 引数は
いつも 文字列で、 GET は クエリ、 POST は JSON の 本文で 送ります (10 個まで) 。 pathはつないだ URL の 下だけです。 - 呼び出しには
idempotency-key(通話と 呼び出しごとに 決まる 値) が 付きます。 - 応答は
JSON なら そのまま、 ほかは 文字で AI に 渡します (長い 文字は 切ります) 。
MCP サーバー(mcp)#
リモートの
- ログインなしで
使える サーバー・ 手元 (ローカル) の MCP サーバーは つなげません。 - 引数に
文字列・数・真偽の ほかの 形が 必須の 道具は 選べません。
呼んでよい URL#
連携からlocalhost・.local・.internal・点の
連携の状態#
status |
内容 |
|---|---|
active |
使える |
needs_setup |
つないだが、 |
needs_reauth |
トークンが |
連携がconnection.needs_reauth がtenant が
テナントをDELETE /v1/connections/{id})