🛠️ Telephony
AIアシスタントに電話機能を追加し、Twilio
📺 まず動画で見る(YouTube)
▶ 【衝撃】最強のAIエージェント「Claude Code」の最新機能・使い方・プログラミングをAIで効率化する超実践術を解説! ↗
※ jpskill.com 編集部が参考用に選んだ動画です。動画の内容と Skill の挙動は厳密には一致しないことがあります。
📜 元の英語説明(参考)
Give Hermes phone capabilities without core tool changes. Provision and persist a Twilio number, send and receive SMS/MMS, make direct calls, and place AI-driven outbound calls through Bland.ai or Vapi.
🇯🇵 日本人クリエイター向け解説
AIアシスタントに電話機能を追加し、Twilio
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o telephony.zip https://jpskill.com/download/1151.zip && unzip -o telephony.zip && rm telephony.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/1151.zip -OutFile "$d\telephony.zip"; Expand-Archive "$d\telephony.zip" -DestinationPath $d -Force; ri "$d\telephony.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
telephony.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
telephonyフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-17
- 取得日時
- 2026-05-17
- 同梱ファイル
- 2
💬 こう話しかけるだけ — サンプルプロンプト
- › Telephony を使って、最小構成のサンプルコードを示して
- › Telephony の主な使い方と注意点を教えて
- › Telephony を既存プロジェクトに組み込む方法を教えて
これをClaude Code に貼るだけで、このSkillが自動発動します。
📖 Claude が読む原文 SKILL.md(中身を展開)
この本文は AI(Claude)が読むための原文(英語または中国語)です。日本語訳は順次追加中。
Telephony — Numbers, Calls, and Texts without Core Tool Changes
This optional skill gives Hermes practical phone capabilities while keeping telephony out of the core tool list.
It ships with a helper script, scripts/telephony.py, that can:
- save provider credentials into
~/.hermes/.env - search for and buy a Twilio phone number
- remember that owned number for later sessions
- send SMS / MMS from the owned number
- poll inbound SMS for that number with no webhook server required
- make direct Twilio calls using TwiML
<Say>or<Play> - import the owned Twilio number into Vapi
- place outbound AI calls through Bland.ai or Vapi
What this solves
This skill is meant to cover the practical phone tasks users actually want:
- outbound calls
- texting
- owning a reusable agent number
- checking messages that arrive to that number later
- preserving that number and related IDs between sessions
- future-friendly telephony identity for inbound SMS polling and other automations
It does not turn Hermes into a real-time inbound phone gateway. Inbound SMS is handled by polling the Twilio REST API. That is enough for many workflows, including notifications and some one-time-code retrieval, without adding core webhook infrastructure.
Safety rules — mandatory
- Always confirm before placing a call or sending a text.
- Never dial emergency numbers.
- Never use telephony for harassment, spam, impersonation, or anything illegal.
- Treat third-party phone numbers as sensitive operational data:
- do not save them to Hermes memory
- do not include them in skill docs, summaries, or follow-up notes unless the user explicitly wants that
- It is fine to persist the agent-owned Twilio number because that is part of the user's configuration.
- VoIP numbers are not guaranteed to work for all third-party 2FA flows. Use with caution and set user expectations clearly.
Decision tree — which service to use?
Use this logic instead of hardcoded provider routing:
1) "I want Hermes to own a real phone number"
Use Twilio.
Why:
- easiest path to buying and keeping a number
- best SMS / MMS support
- simplest inbound SMS polling story
- cleanest future path to inbound webhooks or call handling
Use cases:
- receive texts later
- send deployment alerts / cron notifications
- maintain a reusable phone identity for the agent
- experiment with phone-based auth flows later
2) "I only need the easiest outbound AI phone call right now"
Use Bland.ai.
Why:
- quickest setup
- one API key
- no need to first buy/import a number yourself
Tradeoff:
- less flexible
- voice quality is decent, but not the best
3) "I want the best conversational AI voice quality"
Use Twilio + Vapi.
Why:
- Twilio gives you the owned number
- Vapi gives you better conversational AI call quality and more voice/model flexibility
Recommended flow:
- Buy/save a Twilio number
- Import it into Vapi
- Save the returned
VAPI_PHONE_NUMBER_ID - Use
ai-call --provider vapi
4) "I want to call with a custom prerecorded voice message"
Use Twilio direct call with a public audio URL.
Why:
- easiest way to play a custom MP3
- pairs well with Hermes
text_to_speechplus a public file host or tunnel
Files and persistent state
The skill persists telephony state in two places:
~/.hermes/.env
Used for long-lived provider credentials and owned-number IDs, for example:
TWILIO_ACCOUNT_SIDTWILIO_AUTH_TOKENTWILIO_PHONE_NUMBERTWILIO_PHONE_NUMBER_SIDBLAND_API_KEYVAPI_API_KEYVAPI_PHONE_NUMBER_IDPHONE_PROVIDER(AI call provider: bland or vapi)
~/.hermes/telephony_state.json
Used for skill-only state that should survive across sessions, for example:
- remembered default Twilio number / SID
- remembered Vapi phone number ID
- last inbound message SID/date for inbox polling checkpoints
This means:
- the next time the skill is loaded,
diagnosecan tell you what number is already configured twilio-inbox --since-last --mark-seencan continue from the previous checkpoint
Locate the helper script
After installing this skill, locate the script like this:
SCRIPT="$(find ~/.hermes/skills -path '*/telephony/scripts/telephony.py' -print -quit)"
If SCRIPT is empty, the skill is not installed yet.
Install
This is an official optional skill, so install it from the Skills Hub:
hermes skills search telephony
hermes skills install official/productivity/telephony
Provider setup
Twilio — owned number, SMS/MMS, direct calls, inbound SMS polling
Sign up at:
Then save credentials into Hermes:
python3 "$SCRIPT" save-twilio ACXXXXXXXXXXXXXXXXXXXXXXXXXXXX your_auth_token_here
Search for available numbers:
python3 "$SCRIPT" twilio-search --country US --area-code 702 --limit 5
Buy and remember a number:
python3 "$SCRIPT" twilio-buy "+17025551234" --save-env
List owned numbers:
python3 "$SCRIPT" twilio-owned
Set one of them as the default later:
python3 "$SCRIPT" twilio-set-default "+17025551234" --save-env
# or
python3 "$SCRIPT" twilio-set-default PNXXXXXXXXXXXXXXXXXXXXXXXXXXXX --save-env
Bland.ai — easiest outbound AI calling
Sign up at:
Save config:
python3 "$SCRIPT" save-bland your_bland_api_key --voice mason
Vapi — better conversational voice quality
Sign up at:
Save the API key first:
python3 "$SCRIPT" save-vapi your_vapi_api_key
Import your owned Twilio number into Vapi and persist the returned phone number ID:
python3 "$SCRIPT" vapi-import-twilio --save-env
If you already know the Vapi phone number ID, save it directly:
python3 "$SCRIPT" save-vapi your_vapi_api_key --phone-number-id vapi_phone_number_id_here
Diagnose current state
At any time, inspect what the skill already knows:
python3 "$SCRIPT" diagnose
Use this first when resuming work in a later session.
Common workflows
A. Buy an agent number and keep using it later
-
Save Twilio credentials:
python3 "$SCRIPT" save-twilio AC... auth_token_here -
Search for a number:
python3 "$SCRIPT" twilio-search --country US --area-code 702 --limit 10 -
Buy it and save it into
~/.hermes/.env+ state:python3 "$SCRIPT" twilio-buy "+17025551234" --save-env -
Next session, run:
python3 "$SCRIPT" diagnoseThis shows the remembered default number and inbox checkpoint state.
B. Send a text from the agent number
python3 "$SCRIPT" twilio-send-sms "+15551230000" "Your deployment completed successfully."
With media:
python3 "$SCRIPT" twilio-send-sms "+15551230000" "Here is the chart." --media-url "https://example.com/chart.png"
C. Check inbound texts later with no webhook server
Poll the inbox for the default Twilio number:
python3 "$SCRIPT" twilio-inbox --limit 20
Only show messages that arrived after the last checkpoint, and advance the checkpoint when you're done reading:
python3 "$SCRIPT" twilio-inbox --since-last --mark-seen
This is the main answer to “how do I access messages the number receives next time the skill is loaded?”
D. Make a direct Twilio call with built-in TTS
python3 "$SCRIPT" twilio-call "+15551230000" --message "Hello! This is Hermes calling with your status update." --voice Polly.Joanna
E. Call with a prerecorded / custom voice message
This is the main path for reusing Hermes's existing text_to_speech support.
Use this when:
- you want the call to use Hermes's configured TTS voice rather than Twilio
<Say> - you want a one-way voice delivery (briefing, alert, joke, reminder, status update)
- you do not need a live conversational phone call
Generate or host audio separately, then:
python3 "$SCRIPT" twilio-call "+155****0000" --audio-url "https://example.com/briefing.mp3"
Recommended Hermes TTS -> Twilio Play workflow:
- Generate the audio with Hermes
text_to_speech. - Make the resulting MP3 publicly reachable.
- Place the Twilio call with
--audio-url.
Example agent flow:
- Ask Hermes to create the message audio with
text_to_speech - If needed, expose the file with a temporary static host / tunnel / object storage URL
- Use
twilio-call --audio-url ...to deliver it by phone
Good hosting options for the MP3:
- a temporary public object/storage URL
- a short-lived tunnel to a local static file server
- any existing HTTPS URL the phone provider can fetch directly
Important note:
- Hermes TTS is great for prerecorded outbound messages
- Bland/Vapi are better for live conversational AI calls because they handle the real-time telephony audio stack themselves
- Hermes STT/TTS alone is not being used here as a full duplex phone conversation engine; that would require a much heavier streaming/webhook integration than this skill is trying to introduce
F. Navigate a phone tree / IVR with Twilio direct calling
If you need to press digits after the call connects, use --send-digits.
Twilio interprets w as a short wait.
python3 "$SCRIPT" twilio-call "+18005551234" --message "Connecting to billing now." --send-digits "ww1w2w3"
This is useful for reaching a specific menu branch before handing off to a human or delivering a short status message.
G. Outbound AI phone call with Bland.ai
python3 "$SCRIPT" ai-call "+15551230000" "Call the dental office, ask for a cleaning appointment on Tuesday afternoon, and if they do not have Tuesday availability, ask for Wednesday or Thursday instead." --provider bland --voice mason --max-duration 3
Check status:
python3 "$SCRIPT" ai-status <call_id> --provider bland
Ask Bland analysis questions after completion:
python3 "$SCRIPT" ai-status <call_id> --provider bland --analyze "Was the appointment confirmed?,What date and time?,Any special instructions?"
H. Outbound AI phone call with Vapi on your owned number
-
Import your Twilio number into Vapi:
python3 "$SCRIPT" vapi-import-twilio --save-env -
Place the call:
python3 "$SCRIPT" ai-call "+15551230000" "You are calling to make a dinner reservation for two at 7:30 PM. If that is unavailable, ask for the nearest time between 6:30 and 8:30 PM." --provider vapi --max-duration 4 -
Check result:
python3 "$SCRIPT" ai-status <call_id> --provider vapi
Suggested agent procedure
When the user asks for a call or text:
- Determine which path fits the request via the decision tree.
- Run
diagnoseif configuration state is unclear. - Gather the full task details.
- Confirm with the user before dialing or texting.
- Use the correct command.
- Poll for results if needed.
- Summarize the outcome without persisting third-party numbers to Hermes memory.
What this skill still does not do
- real-time inbound call answering
- webhook-based live SMS push into the agent loop
- guaranteed support for arbitrary third-party 2FA providers
Those would require more infrastructure than a pure optional skill.
Pitfalls
- Twilio trial accounts and regional rules can restrict who you can call/text.
- Some services reject VoIP numbers for 2FA.
twilio-inboxpolls the REST API; it is not instant push delivery.- Vapi outbound calling still depends on having a valid imported number.
- Bland is easiest, but not always the best-sounding.
- Do not store arbitrary third-party phone numbers in Hermes memory.
Verification checklist
After setup, you should be able to do all of the following with just this skill:
diagnoseshows provider readiness and remembered state- search and buy a Twilio number
- persist that number to
~/.hermes/.env - send an SMS from the owned number
- poll inbound texts for the owned number later
- place a direct Twilio call
- place an AI call via Bland or Vapi
References
- Twilio phone numbers: https://www.twilio.com/docs/phone-numbers/api
- Twilio messaging: https://www.twilio.com/docs/messaging/api/message-resource
- Twilio voice: https://www.twilio.com/docs/voice/api/call-resource
- Vapi docs: https://docs.vapi.ai/
- Bland.ai: https://app.bland.ai/
同梱ファイル
※ ZIPに含まれるファイル一覧。`SKILL.md` 本体に加え、参考資料・サンプル・スクリプトが入っている場合があります。
- 📄 SKILL.md (12,905 bytes)
- 📎 scripts/telephony.py (46,375 bytes)