feat(voip): Extension 101 clarification - Natalya is receptionist
CLARIFIED (2026-07-10): - Extension 101: Natalya (Receptionist) - M365 Account: Customer Service (customerservice@valleywideplastering.com) - Phone: Test phone from yesterday (MAC 805e0cdd71b1 / Last 4: 71b1) - Status: Phone already registered, ready for user provisioning UPDATED: - Matched users: 11 -> 12 (Natalya now matched) - Unmatched users: 7 -> 6 (removed Natalya from unmatched list) - Created provision-natalya-101.md with step-by-step commands FILES MODIFIED: - extension-mapping.md: Updated ext 101 to show customerservice@ match - PROVISIONING-STATUS.md: Added clarified section for ext 101 - README.md: Updated user counts and added provision-natalya-101.md link - provision-natalya-101.md: NEW - Complete provisioning guide for receptionist NEXT ACTIONS: 1. Upload 11-user CSV to PacketDial (unchanged) 2. Provision extension 101 separately (commands documented) 3. Remaining 6 unmatched extensions need clarification Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -125,22 +125,25 @@ ymcs.py reboot --body '{
|
||||
}' --confirm
|
||||
```
|
||||
|
||||
### 3. Test Phone Identification
|
||||
### 3. Extension 101 - Natalya (Receptionist) - CLARIFIED 2026-07-10
|
||||
|
||||
**Test phone (805e0cdd71b1)** is for the receptionist (one of the 7 unmatched users, NOT in the CSV import).
|
||||
- Last 4 of MAC: `71b1`
|
||||
- This phone is already configured and registered
|
||||
- Do NOT create a device for this extension yet (waiting on user clarification)
|
||||
**CONFIRMED:**
|
||||
- Extension: 101
|
||||
- Name: Natalya (Receptionist)
|
||||
- M365 Account: Customer Service (customerservice@valleywideplastering.com)
|
||||
- Phone: Test phone from yesterday (MAC 805e0cdd71b1 / Last 4: 71b1)
|
||||
- Status: Already registered and working
|
||||
|
||||
**Action:** Create user 101 in PacketDial separately (not in the 11-user CSV), then update YMCS with correct credentials.
|
||||
|
||||
---
|
||||
|
||||
## PARKED FOR LATER (7 Extensions)
|
||||
## PARKED FOR LATER (6 Extensions)
|
||||
|
||||
**Need client clarification on these names:**
|
||||
|
||||
| Ext | Name Given | Status | Notes |
|
||||
|-----|------------|--------|-------|
|
||||
| 101 | Natalya | No M365 match | Verify real name |
|
||||
| 106 | Tammy | No M365 match | Verify real name |
|
||||
| 108 | Shannon | No M365 match | Verify real name |
|
||||
| 111 | Kitchen | Shared phone | May not need M365 account |
|
||||
@@ -148,7 +151,7 @@ ymcs.py reboot --body '{
|
||||
| 117 | Jesse III | No M365 match | Possibly Ryan Guerrero? |
|
||||
| 118 | Warehouse | Shared phone | May not need M365 account |
|
||||
|
||||
**Action:** Get client clarification, then create a second CSV for these 7 extensions.
|
||||
**Action:** Get client clarification, then create a second CSV for these 6 extensions.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -17,8 +17,9 @@
|
||||
- **[COMPLETE-CLIENT-SETUP.md](COMPLETE-CLIENT-SETUP.md)** - Complete VoIP setup guide (DIDs, queues, auto-attendants, time frames)
|
||||
|
||||
### Working Files
|
||||
- **[extension-mapping.md](extension-mapping.md)** - Extension to M365 account mapping (11 matched, 7 unmatched)
|
||||
- **[vwp-users-import.csv](vwp-users-import.csv)** - Bulk import CSV for PacketDial (ready to upload)
|
||||
- **[extension-mapping.md](extension-mapping.md)** - Extension to M365 account mapping (12 matched, 6 unmatched)
|
||||
- **[vwp-users-import.csv](vwp-users-import.csv)** - Bulk import CSV for PacketDial (ready to upload - 11 users)
|
||||
- **[provision-natalya-101.md](provision-natalya-101.md)** - Commands to provision Ext 101 (Receptionist/test phone) ← NEW
|
||||
- **[DEVICE-ASSIGNMENT-COMMANDS.md](DEVICE-ASSIGNMENT-COMMANDS.md)** - Copy-paste command reference for assigning phones to users
|
||||
|
||||
---
|
||||
@@ -117,8 +118,9 @@ Password: YJ5UgRd9pV
|
||||
|
||||
## User Summary
|
||||
|
||||
### Matched Users (11) - Ready for Import
|
||||
CSV file ready with correct M365 email addresses:
|
||||
### Matched Users (12 Total)
|
||||
|
||||
**In CSV Bulk Import (11 users):**
|
||||
- 102: Jesse Guerrero
|
||||
- 103: Rose Guerrero
|
||||
- 104: Shelly Dooley
|
||||
@@ -131,8 +133,12 @@ CSV file ready with correct M365 email addresses:
|
||||
- 115: Toni Billing
|
||||
- 116: Bart Graffin
|
||||
|
||||
### Unmatched Users (7) - Need Clarification
|
||||
- 101: Natalya - no M365 match
|
||||
**Separate Provisioning (1 user):**
|
||||
- 101: Natalya (Receptionist) - customerservice@valleywideplastering.com
|
||||
- Gets test phone (805e0cdd71b1)
|
||||
- See: provision-natalya-101.md
|
||||
|
||||
### Unmatched Users (6) - Need Clarification
|
||||
- 106: Tammy - no M365 match
|
||||
- 108: Shannon - no M365 match
|
||||
- 111: Kitchen - shared phone
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
| Ext | Name | M365 Display Name | M365 Email | Notes |
|
||||
|-----|------|-------------------|------------|-------|
|
||||
| 101 | Natalya | **NO MATCH IN M365** | natalya@valleywideplastering.com | Need to create M365 account or verify name |
|
||||
| 101 | Natalya (Receptionist) | Customer Service | customerservice@valleywideplastering.com | ✓ Matched - Gets test phone (805e0cdd71b1 / last 4: 71b1) |
|
||||
| 102 | Jesse | Jesse Guerrero | jesse@valleywideplastering.com | ✓ Matched |
|
||||
| 103 | Rose | Rose Guerrero | rose@valleywideplastering.com | ✓ Matched |
|
||||
| 104 | Shelly | Shelly Dooley | shelly@valleywideplastering.com | ✓ Matched |
|
||||
@@ -30,8 +30,8 @@
|
||||
|
||||
## Summary
|
||||
|
||||
- **Matched (confirmed M365 accounts):** 11
|
||||
- **No match found:** 7 (Natalya, Tammy, Shannon, Kitchen, Conference Room, Jesse III, Warehouse)
|
||||
- **Matched (confirmed M365 accounts):** 12
|
||||
- **No match found:** 6 (Tammy, Shannon, Kitchen, Conference Room, Jesse III, Warehouse)
|
||||
|
||||
## Other M365 Users (not assigned extensions)
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
|
||||
## Action Items
|
||||
|
||||
1. **Verify unmatched users:** Confirm if Natalya, Tammy, Shannon, Jesse III exist in M365 under different names
|
||||
1. **Verify unmatched users:** Confirm if Tammy, Shannon, Jesse III exist in M365 under different names
|
||||
2. **Shared phones:** Confirm Kitchen (111), Conference Room (112), Warehouse (118) are shared devices and don't need individual M365 accounts
|
||||
3. **Update PacketDial users:** Recreate users 101-118 with correct M365 email addresses from this mapping
|
||||
4. **Provision physical phones:** Once SIP accounts are configured in YMCS, provision the 16 physical Yealink phones
|
||||
|
||||
207
clients/valleywide/voip/provision-natalya-101.md
Normal file
207
clients/valleywide/voip/provision-natalya-101.md
Normal file
@@ -0,0 +1,207 @@
|
||||
# Provision Extension 101 - Natalya (Receptionist)
|
||||
|
||||
**Date:** 2026-07-10
|
||||
**Status:** Ready to provision
|
||||
**Phone:** Already registered (test phone from yesterday)
|
||||
|
||||
---
|
||||
|
||||
## User Information
|
||||
|
||||
```
|
||||
Extension: 101
|
||||
Name: Natalya (Receptionist)
|
||||
M365 Account: Customer Service
|
||||
Email: customerservice@valleywideplastering.com
|
||||
Phone MAC: 805e0cdd71b1
|
||||
Phone Last 4: 71b1
|
||||
Domain: vwp.91912.service
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Current Status
|
||||
|
||||
**Phone Hardware:**
|
||||
- MAC: 805e0cdd71b1
|
||||
- Status: Already registered (Status 1) with test credentials
|
||||
- YMCS Device ID: (need to look up)
|
||||
|
||||
**PacketDial:**
|
||||
- User 101: Does NOT exist yet (needs to be created)
|
||||
- Device for 101: Does NOT exist yet (will be created with user)
|
||||
|
||||
**YMCS:**
|
||||
- Physical phone: Exists and online
|
||||
- SIP account: Currently has test credentials (need to update with real user 101 credentials)
|
||||
|
||||
---
|
||||
|
||||
## Provisioning Steps
|
||||
|
||||
### Step 1: Create User 101 in PacketDial
|
||||
|
||||
```bash
|
||||
bash .claude/scripts/py.sh .claude/skills/packetdial/scripts/ns.py \
|
||||
create-user vwp.91912.service --body '{
|
||||
"user": "101",
|
||||
"name-first-name": "Natalya",
|
||||
"name-last-name": "Receptionist",
|
||||
"email": "customerservice@valleywideplastering.com",
|
||||
"emergency-address-id": "a-6a395c03d4cfe"
|
||||
}' --confirm
|
||||
```
|
||||
|
||||
### Step 2: Create SIP Device for Extension 101
|
||||
|
||||
```bash
|
||||
bash .claude/scripts/py.sh .claude/skills/packetdial/scripts/ns.py \
|
||||
create-device vwp.91912.service 101 --body '{
|
||||
"device": "101a@vwp.91912.service"
|
||||
}' --confirm
|
||||
```
|
||||
|
||||
### Step 3: Get Auto-Generated SIP Password
|
||||
|
||||
```bash
|
||||
bash .claude/scripts/py.sh .claude/skills/packetdial/scripts/ns.py \
|
||||
devices vwp.91912.service 101 | \
|
||||
python3 -c "import sys, json; d=json.load(sys.stdin); print('SIP Password:', d[0].get('device-sip-registration-password'))"
|
||||
```
|
||||
|
||||
**Save this password** - you'll need it for YMCS update.
|
||||
|
||||
### Step 4: Find Existing YMCS SIP Account
|
||||
|
||||
The test phone already has a SIP account. Find it:
|
||||
|
||||
```bash
|
||||
bash .claude/scripts/py.sh .claude/skills/yealink-ymcs/scripts/ymcs.py devices | grep -i "71b1" -A 20
|
||||
```
|
||||
|
||||
Extract:
|
||||
- Device ID (the "id" field)
|
||||
- Look for bound accounts
|
||||
|
||||
```bash
|
||||
# Get device ID from above, then check bound accounts
|
||||
bash .claude/scripts/py.sh .claude/skills/yealink-ymcs/scripts/ymcs.py \
|
||||
raw GET /v2/dm/devices/{DEVICE-ID}/boundAccounts
|
||||
```
|
||||
|
||||
Extract the account ID from the bound account.
|
||||
|
||||
### Step 5: Update Existing YMCS SIP Account with New Credentials
|
||||
|
||||
```bash
|
||||
bash .claude/scripts/py.sh .claude/skills/yealink-ymcs/scripts/ymcs.py \
|
||||
raw PATCH /v2/dm/sipAccounts/{ACCOUNT-ID} --body '{
|
||||
"registerName": "101@vwp.91912.service",
|
||||
"username": "101@vwp.91912.service",
|
||||
"password": "{SIP-PASSWORD-FROM-STEP-3}",
|
||||
"label": "Ext 101 - Natalya (Receptionist)",
|
||||
"displayName": "Natalya",
|
||||
"sipServer1": {
|
||||
"host": "pbx.packetdial.com",
|
||||
"port": 5060
|
||||
},
|
||||
"remark": "Valley Wide Plastering - customerservice@valleywideplastering.com"
|
||||
}' --confirm
|
||||
```
|
||||
|
||||
### Step 6: Reboot Phone to Apply New Credentials
|
||||
|
||||
```bash
|
||||
bash .claude/scripts/py.sh .claude/skills/yealink-ymcs/scripts/ymcs.py \
|
||||
reboot --body '{
|
||||
"deviceIds": ["{DEVICE-ID}"],
|
||||
"deviceType": 1
|
||||
}' --confirm
|
||||
```
|
||||
|
||||
### Step 7: Verify Registration
|
||||
|
||||
**Check in PacketDial:**
|
||||
```bash
|
||||
bash .claude/scripts/py.sh .claude/skills/packetdial/scripts/ns.py \
|
||||
devices vwp.91912.service 101
|
||||
```
|
||||
|
||||
Look for:
|
||||
- `device-sip-registration-state`: "registered"
|
||||
- `device-sip-registration-contact`: Shows phone IP
|
||||
|
||||
**Check in YMCS:**
|
||||
```bash
|
||||
bash .claude/scripts/py.sh .claude/skills/yealink-ymcs/scripts/ymcs.py \
|
||||
raw GET /v2/dm/devices/{DEVICE-ID}
|
||||
```
|
||||
|
||||
Look for:
|
||||
- `accounts[].status`: 1 (Registered)
|
||||
|
||||
---
|
||||
|
||||
## Alternative: Create New YMCS Account Instead of Updating
|
||||
|
||||
If you prefer to create a NEW SIP account instead of updating the test account:
|
||||
|
||||
### Step 4 (Alternative): Unbind Old Account
|
||||
|
||||
```bash
|
||||
# First, get the old account ID from boundAccounts
|
||||
bash .claude/scripts/py.sh .claude/skills/yealink-ymcs/scripts/ymcs.py \
|
||||
raw DELETE /v2/dm/devices/{DEVICE-ID}/bindAccounts/{OLD-ACCOUNT-ID} --confirm
|
||||
```
|
||||
|
||||
### Step 5 (Alternative): Create New SIP Account
|
||||
|
||||
```bash
|
||||
bash .claude/scripts/py.sh .claude/skills/yealink-ymcs/scripts/ymcs.py \
|
||||
add-sipaccount --body '{
|
||||
"registerName": "101@vwp.91912.service",
|
||||
"username": "101@vwp.91912.service",
|
||||
"password": "{SIP-PASSWORD-FROM-STEP-3}",
|
||||
"label": "Ext 101 - Natalya (Receptionist)",
|
||||
"displayName": "Natalya",
|
||||
"sipServer1": {
|
||||
"host": "pbx.packetdial.com",
|
||||
"port": 5060
|
||||
},
|
||||
"remark": "Valley Wide Plastering - customerservice@valleywideplastering.com",
|
||||
"siteId": "1e7578a6fe0e41cfb5a3e8b40933ffee"
|
||||
}' --confirm
|
||||
```
|
||||
|
||||
Save the account ID from response.
|
||||
|
||||
### Step 6 (Alternative): Bind New Account to Phone
|
||||
|
||||
```bash
|
||||
bash .claude/scripts/py.sh .claude/skills/yealink-ymcs/scripts/ymcs.py \
|
||||
raw POST /v2/dm/devices/{DEVICE-ID}/bindAccounts --body '[{
|
||||
"lineId": 1,
|
||||
"accountType": 0,
|
||||
"accountId": "{NEW-ACCOUNT-ID}"
|
||||
}]' --confirm
|
||||
```
|
||||
|
||||
### Step 7 (Alternative): Reboot and Verify (Same as Above)
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
- **Recommended approach:** Update existing YMCS account (simpler, phone already bound)
|
||||
- **Alternative approach:** Create new account if you want clean separation from test
|
||||
- Phone should remain registered throughout (just credentials change)
|
||||
- Extension 101 should be ready for calls immediately after reboot
|
||||
|
||||
---
|
||||
|
||||
**Status After Provisioning:**
|
||||
- Extension 101 created in PacketDial ✓
|
||||
- SIP device 101a created with password ✓
|
||||
- YMCS SIP account updated with real credentials ✓
|
||||
- Phone registered to extension 101 ✓
|
||||
- Receptionist can make/receive calls ✓
|
||||
Reference in New Issue
Block a user