diff --git a/clients/valleywide/voip/PROVISIONING-STATUS.md b/clients/valleywide/voip/PROVISIONING-STATUS.md index a4107388..7b8d614b 100644 --- a/clients/valleywide/voip/PROVISIONING-STATUS.md +++ b/clients/valleywide/voip/PROVISIONING-STATUS.md @@ -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. --- diff --git a/clients/valleywide/voip/README.md b/clients/valleywide/voip/README.md index e75af2bd..2da8feac 100644 --- a/clients/valleywide/voip/README.md +++ b/clients/valleywide/voip/README.md @@ -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 diff --git a/clients/valleywide/voip/extension-mapping.md b/clients/valleywide/voip/extension-mapping.md index e85d629a..a7602e11 100644 --- a/clients/valleywide/voip/extension-mapping.md +++ b/clients/valleywide/voip/extension-mapping.md @@ -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 diff --git a/clients/valleywide/voip/provision-natalya-101.md b/clients/valleywide/voip/provision-natalya-101.md new file mode 100644 index 00000000..65d089af --- /dev/null +++ b/clients/valleywide/voip/provision-natalya-101.md @@ -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 ✓