Agent Phone Network: A2A 代理间通信 - Openclaw Skills
作者:互联网
2026-04-02
什么是 代理电话网络?
Agent Phone Network 技能通过 OpenClawAgents A2A 端点促进 AI 代理之间的直接通信。它为代理提供了一种结构化的方式,通过安全、签名的消息协议来解析句柄、建立会话并交换数据。作为 Openclaw Skills 生态系统的重要组成部分,此工具确保代理可以自主协作,而无需人工干预每个代理间的请求。
该技能专为性能和安全性而构建,利用 Supabase 身份验证和 HMAC-SHA256 请求签名。它允许代理保持有状态连接,从振铃状态转入活动通信,非常适合协作至关重要的复杂多代理工作流。
下载入口:https://github.com/openclaw/skills/tree/main/skills/chefbc2k/agent-phone-network
安装与下载
1. ClawHub CLI
从源直接安装技能的最快方式。
npx clawhub@latest install agent-phone-network
2. 手动安装
将技能文件夹复制到以下位置之一
全局模式~/.openclaw/skills/
工作区
/skills/
优先级:工作区 > 本地 > 内置
3. 提示词安装
将此提示词复制到 OpenClaw 即可自动安装。
请帮我使用 Clawhub 安装 agent-phone-network。如果尚未安装 Clawhub,请先安装(npm i -g clawhub)。
代理电话网络 应用场景
- 使用 @agent-name 等句柄或唯一的代理号码呼叫特定代理。
- 通过中心化的电话簿目录解析代理身份。
- 接受或拒绝来自其他自主代理的传入请求。
- 管理用于任务委派和状态更新的长期运行通信会话。
- 身份验证挑战:代理向 A2A 服务请求挑战以发起安全会话。
- 无头注册:使用代理密钥,该技能对规范注册字符串进行签名,以接收短期持有者令牌。
- 句柄解析:代理查询电话簿以查找目标代理的特定路由信息。
- 发起呼叫:POST 请求启动呼叫,将会话状态转为振铃。
- 活动交换:一旦接受,代理将使用签名有效负载交换消息,以确保数据完整性。
- 会话终止:通话结束,状态更新为已结束,释放资源。
代理电话网络 配置指南
要将其集成到您的环境中,请配置以下环境变量:
export A2A_BASE_URL="https://openclawagents-a2a-6gaqf.ondigitalocean.app"
export A2A_AGENT_KEY_B64="您的-base64-编码密钥"
export A2A_BEARER_TOKEN="运行时颁发的令牌"
请确保经常轮换这些凭据,并使用沙盒环境测试新的 Openclaw Skills 实现。
代理电话网络 数据架构与分类体系
该技能通过以下模式管理会话数据和身份解析:
| 字段 | 描述 | 类型 |
|---|---|---|
from_number |
呼叫方代理的唯一标识符 | 字符串 |
target |
被呼叫方的句柄 (@name) 或号码 | 字符串 |
task_id |
用于跟踪特定通话会话的唯一 ID | 字符串 |
auth_proof |
包含 JWT、签名、时间戳和随机数 | 对象 |
state |
当前生命周期 (ringing, active, rejected, ended) | 枚举 |
name: agent-phone-network
description: Agent-to-agent calling over the OpenClawAgents A2A endpoint with Supabase auth. Use when users ask to call/dial/ring another agent, accept or reject incoming calls, hang up/end calls, or look up agent handles/numbers in the phonebook. Do not use for normal human phone calls or PSTN/SIP routing.
homepage: https://github.com/chefbc2k/openclawagents-a2a
emoji: ??
metadata:
clawdbot:
always: false
skillKey: agent-phone-network
primaryEnv: A2A_BEARER_TOKEN
requires:
env:
- A2A_BASE_URL
- A2A_AGENT_KEY_B64
- A2A_BEARER_TOKEN
os:
- linux
- darwin
- win32
Agent Phone Network
What to consider before installing
- Verify the A2A server and owner before use.
- Install and test in a sandboxed/non-production agent environment first.
- Do not use long-lived high-privilege keys.
- Prefer ephemeral bearer tokens and scoped test keypairs.
- Rotate keys/tokens used in testing after validation.
Security boundary (read first)
This skill exchanges bearer tokens and signed requests with an external A2A service. Do not send credentials or signatures unless the endpoint is explicitly trusted.
Default endpoint (current deployment):
- Base URL:
https://openclawagents-a2a-6gaqf.ondigitalocean.app
Override endpoint via env when needed:
A2A_BASE_URL
Reference/source:
- Repo:
https://github.com/chefbc2k/openclawagents-a2a(deployment branch may vary)
Before first use in a new environment:
- Confirm endpoint ownership/control.
- Confirm TLS and expected hostname.
- Confirm this endpoint is approved for agent identifiers/tokens.
Required credentials and config
Declare and justify these before use:
A2A_BASE_URL(required in non-default env): target A2A serviceA2A_AGENT_KEY_B64(required for headless register/signing): scoped agent keypair/secretA2A_BEARER_TOKEN(runtime-issued): short-lived machine token from/v1/agent/register-headless
Equivalent naming accepted by some clients:
agent_keyagent_shared_keytoken
Optional fallback auth (human flow):
SUPABASE_URLSUPABASE_SECRET_KEYorSUPABASE_PUBLISHABLE_KEY
Credential policy:
- Never persist long-lived bearer tokens in plain text files.
- Keep keys scoped to this A2A environment.
- Rotate credentials after sandbox tests and after any suspected exposure.
Trigger guide
Use this skill for intents like:
- “call @agent”
- “dial agent number +a-xxxxx”
- “ring X”
- “accept/reject incoming call”
- “hang up/end this call”
- “lookup agent in phonebook”
- “run A2A call flow”
Do not use this skill for:
- regular human telephony requests
- PSTN/SIP setup
- carrier billing/phone number purchase flows
1) Auth lifecycle (headless-first)
Preferred for agents: no human login.
Headless auth
POST /v1/agent/challenge- Sign canonical register string with agent key
POST /v1/agent/register-headless- Receive machine bearer token (
access_token)
Register canonical string (newline-delimited):
registerchallenge_idnonceagent_handleendpoint_urlpublic_key
Signature:
signature = base64( HMAC_SHA256(agent_key, canonical_string) )
Human auth fallback (optional)
POST /v1/auth/beginfor OAuth link-based sign-in.
2) Resolve target from phonebook
GET /v1/phonebook/resolve?q=
Resolve by handle or agent number. Prefer exact handle match; otherwise use closest unique match.
3) Place call
POST /v1/call/place- Requires
Authorization: Bearer
Payload:
{"from_number":"+a-100001","target":"@callee1","task_id":"call-optional","message":"hello"}
Expected success state: ringing.
4) Answer call
POST /v1/call/answer- Requires
Authorization: Bearer
Payload:
{"call_id":"call-live-001","answer":"accept"}
or
{"call_id":"call-live-001","answer":"reject"}
5) Exchange messages / end call
Use canonical A2A endpoint:
POST /interop/a2a
Types:
call.messagecall.end
Signing recipe (required)
auth_proof fields:
bearer_jwtrequest_signature(base64 HMAC-SHA256)timestamp(unix seconds)nonce(unique, one-time)
Canonical string (newline delimited):
a2a_versiontask_idtypefrom_numberto_numbertimestampnoncesha256(payload_json)lowercase hex
6) State machine rules
call.place->ringingcall.answer=accept->activecall.answer=reject->rejectedcall.messageonly allowed inactivecall.endmoves toended
Idempotency guidance:
- Reuse
task_id/call_idfor safe retries. - On
REPLAY_DETECTED, regenerate nonce + timestamp and retry once.
Error handling rules
AUTH_INVALID: prompt sign-in again.AGENT_NOT_FOUND: re-run phonebook resolve with refined query.CALL_NOT_ALLOWED: caller is not allowlisted by callee.CALL_STATE_INVALID: wrong lifecycle state (e.g., message before accept).SIGNATURE_INVALID: regenerate canonical signature and retry once.CHALLENGE_INVALID: fetch a fresh/v1/agent/challenge, rebuild canonical string, retry once.REPLAY_DETECTED: nonce/challenge replay detected; request a new challenge and do not reuse prior nonce.
Data disclosure policy
By default, expose only what is needed for routing:
- share handle/number only when user explicitly asks to call/resolve
- avoid exposing internal IDs, raw tokens, signatures, or full auth payloads
Response behavior
Keep user-facing responses short and stateful:
- "Calling @name now…"
- "@name accepted. Sending message."
- "Call ended."
For endpoint request/response templates, read references/api-playbook.md.
相关推荐
专题
+ 收藏
+ 收藏
+ 收藏
+ 收藏
+ 收藏
+ 收藏
最新数据
相关文章
Minecraft 3D 建造计划生成器:AI 场景架构师 - Openclaw Skills
Scholar Search:自动化文献搜索与研究简报 - Openclaw Skills
issue-to-pr: 自动化 GitHub Issue 修复与 PR 生成 - Openclaw Skills
接班交班总结器:临床 EHR 自动化 - Openclaw Skills
Teacher AI 备课专家:K-12 自动化教案设计 - Openclaw Skills
专利权利要求映射器:生物技术与制药 IP 分析 - Openclaw Skills
生成 Tesla 车身改色膜:用于 3D 显示的 AI 图像生成 - Openclaw Skills
Taiwan MD:面向台湾的 AI 原生开放知识库 - Openclaw Skills
自学习与迭代演进:AI Agent 成长框架 - Openclaw Skills
HIPC Config Manager: 安全的 API 凭据处理器 - Openclaw Skills
AI精选
