Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions assistant/src/config/bundled-skills/phone-calls/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,10 @@ You are helping the user set up and make outgoing phone calls via Twilio. This s

## Prerequisites — Shared Twilio Setup

Twilio credentials and phone number configuration are shared between voice calls and SMS messaging. If Twilio is not yet configured, load the **twilio-setup** skill first:
Twilio credentials and phone number configuration are shared between voice calls and SMS messaging. If Twilio is not yet configured, install and load the **twilio-setup** skill first:

```
skill_load skill=twilio-setup
```
- Call `vellum_skills_catalog` with `action: "install"` and `skill_id: "twilio-setup"`.
Comment thread
noanflaherty marked this conversation as resolved.
- Then call `skill_load` with `skill: "twilio-setup"`.

The twilio-setup skill handles credential storage, phone number provisioning/assignment, and public ingress setup. Once complete, return here to enable the calls feature and start making calls.

Expand Down
10 changes: 6 additions & 4 deletions assistant/src/config/vellum-skills/twilio-setup/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,16 +49,18 @@ If credentials are not yet stored, guide the user through Twilio account setup:
- Call `credential_store` with `action: "prompt"`, `service: "twilio"`, `field: "account_sid"`, `label: "Twilio Account SID"`, `description: "Enter your Account SID from the Twilio Console dashboard"`, and `placeholder: "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"`.
- Call `credential_store` with `action: "prompt"`, `service: "twilio"`, `field: "auth_token"`, `label: "Twilio Auth Token"`, `description: "Enter your Auth Token from the Twilio Console dashboard"`, and `placeholder: "your_auth_token"`.

After both credentials are collected, store them via the daemon:
After both credentials are collected, retrieve them from secure storage and pass them to the daemon:

```json
{
"type": "twilio_config",
"action": "set_credentials"
"action": "set_credentials",
"accountSid": "<value from credential_store for twilio/account_sid>",
"authToken": "<value from credential_store for twilio/auth_token>"
}
```

The daemon retrieves the credentials from secure storage internally — you do not need to pass them in the message. If credentials are invalid, the daemon returns an error. Tell the user and ask them to re-enter via the secure prompt.
Both `accountSid` and `authToken` are required — the daemon validates the credentials against the Twilio API before storing them. If credentials are invalid, the daemon returns an error. Tell the user and ask them to re-enter via the secure prompt.

## Step 3: Get a Phone Number

Expand Down Expand Up @@ -185,7 +187,7 @@ If the user wants to disconnect Twilio, send:
}
```

This removes the stored Account SID, Auth Token, and phone number assignment. Both voice calls and SMS will stop working until credentials are reconfigured.
This removes the stored Account SID and Auth Token. Your phone number assignment will be preserved. Voice calls and SMS will stop working until credentials are reconfigured.

## Troubleshooting

Expand Down
2 changes: 1 addition & 1 deletion clients/ios/Views/Settings/TwilioSettingsSection.swift
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ struct TwilioSettingsSection: View {
}
Button("Cancel", role: .cancel) {}
} message: {
Text("This will remove your Twilio Account SID, Auth Token, and phone number assignment. Voice calls and SMS will stop working until reconfigured.")
Text("This will remove your Twilio Account SID and Auth Token. Your phone number assignment will be preserved. Voice calls and SMS will stop working until credentials are reconfigured.")
}
.onAppear { loadStatus() }
.onChange(of: clientProvider.isConnected) { _, connected in
Expand Down
Loading