AgentSkillsCN

Contacts

当您需要管理ConnectWise PSA联系人时,可使用此技能:创建、更新、搜索或管理联系人记录。本技能覆盖联系人类型、沟通渠道(电子邮件、电话)、门户访问权限,以及与公司的关联关系,是MSP在ConnectWise PSA中开展客户关系管理的必备工具。

SKILL.md
--- frontmatter
description: >
  Use this skill when working with ConnectWise PSA contacts - creating, updating,
  searching, or managing contact records. Covers contact types, communication items
  (email, phone), portal access, and relationships to companies. Essential for
  MSP customer relationship management in ConnectWise PSA.
triggers:
  - connectwise contact
  - contact management
  - create contact connectwise
  - contact email
  - contact phone
  - customer portal
  - portal access
  - communication items
  - contact type
  - primary contact

ConnectWise PSA Contact Management

Overview

Contacts in ConnectWise PSA represent individuals at your client companies. Contacts can be ticket requestors, agreement signers, project stakeholders, and portal users. This skill covers contact CRUD operations, communication items, contact types, and portal access management.

API Endpoint

code
Base: /company/contacts

Contact Types

Standard contact types in ConnectWise PSA:

Type IDNameDescription
1AdminAdministrative contact
2PrimaryMain point of contact
3BillingBilling/accounts payable
4TechnicalTechnical contact
5SalesSales contact

Note: Contact types are configurable. Query /company/contacts/types for your instance's types.

Complete Contact Field Reference

Core Fields

FieldTypeRequiredDescription
idintSystemAuto-generated unique identifier
firstNamestring(30)YesContact first name
lastNamestring(30)NoContact last name
companyobjectYes{id: companyId} - Parent company
siteobjectNo{id: siteId} - Company site
typeobjectNo{id: typeId} - Contact type

Contact Information

FieldTypeRequiredDescription
titlestring(50)NoJob title
departmentobjectNo{id: departmentId}
relationshipobjectNo{id: relationshipId}
nickNamestring(30)NoNickname/alias
schoolstring(50)NoSchool/university
marriedFlagbooleanNoMarital status
childrenFlagbooleanNoHas children
significantOtherstring(30)NoSpouse/partner name
anniversarydateNoAnniversary date
birthDaydateNoBirth date

Address Fields

FieldTypeRequiredDescription
addressLine1string(50)NoStreet address
addressLine2string(50)NoSuite/unit
citystring(50)NoCity
statestring(50)NoState/province
zipstring(12)NoPostal code
countryobjectNo{id: countryId}

Portal Access Fields

FieldTypeRequiredDescription
portalSecurityLevelintNoPortal access level (1-6)
disablePortalLoginFlagbooleanNoDisable portal access
unsubscribeFlagbooleanNoOpt out of emails

Tracking Fields

FieldTypeRequiredDescription
inactiveFlagbooleanNoContact is inactive
defaultMergeContactIdintNoID for merge operations
managerContactIdintNoManager contact ID
assistantContactIdintNoAssistant contact ID
_infoobjectSystemMetadata

Communication Items

Communication items store contact methods (email, phone, fax, etc.) for a contact.

Communication Item Endpoint

code
/company/contacts/{contactId}/communications

Communication Item Fields

FieldTypeRequiredDescription
idintSystemCommunication ID
typeobjectYes{id: typeId} - Email, Phone, Fax, etc.
valuestring(250)YesThe email/phone/etc. value
extensionstring(15)NoPhone extension
defaultFlagbooleanNoIs primary for this type
communicationTypestringNoDirect, Fax, Cell, Pager, etc.

Communication Types

Type IDNameDescription
1EmailEmail address
2PhonePhone number
3FaxFax number
4CellMobile phone
5PagerPager (legacy)
6DirectDirect line

Add Communication Item

http
POST /company/contacts/{contactId}/communications
Content-Type: application/json

{
  "type": {"id": 1},
  "value": "john.smith@acme.com",
  "defaultFlag": true,
  "communicationType": "Email"
}

Add Phone Number

http
POST /company/contacts/{contactId}/communications
Content-Type: application/json

{
  "type": {"id": 2},
  "value": "555-123-4567",
  "extension": "101",
  "defaultFlag": true,
  "communicationType": "Direct"
}

Portal Access

Portal Security Levels

LevelNameAccess
1AdminFull access to all company tickets/data
2ManagerAccess to department tickets
3UserAccess to own tickets only
4LimitedView only
5Read OnlyRead only, no create
6RestrictedMinimal access

Enable Portal Access

http
PATCH /company/contacts/{id}
Content-Type: application/json

{
  "portalSecurityLevel": 2,
  "disablePortalLoginFlag": false
}

Portal Password Reset

Portal passwords are managed through the ConnectWise portal. The API does not expose password fields.

Portal Invitation

To invite a contact to the portal:

  1. Ensure contact has valid email
  2. Set portalSecurityLevel > 0
  3. Set disablePortalLoginFlag = false
  4. Portal sends automatic invitation email

API Operations

Create Contact

http
POST /company/contacts
Content-Type: application/json

{
  "firstName": "John",
  "lastName": "Smith",
  "company": {"id": 12345},
  "title": "IT Director",
  "type": {"id": 4}
}

Create Contact with Communication Items

http
POST /company/contacts
Content-Type: application/json

{
  "firstName": "John",
  "lastName": "Smith",
  "company": {"id": 12345},
  "title": "IT Director",
  "type": {"id": 4},
  "communicationItems": [
    {
      "type": {"id": 1},
      "value": "john.smith@acme.com",
      "defaultFlag": true
    },
    {
      "type": {"id": 2},
      "value": "555-123-4567",
      "extension": "101",
      "defaultFlag": true
    }
  ]
}

Get Contact

http
GET /company/contacts/{id}

Update Contact

http
PATCH /company/contacts/{id}
Content-Type: application/json

{
  "title": "CTO",
  "type": {"id": 2}
}

Search Contacts

http
GET /company/contacts?conditions=company/id=12345 and inactiveFlag=false

Delete Contact

http
DELETE /company/contacts/{id}

Note: Contacts with related records (tickets, etc.) cannot be deleted. Mark as inactive instead.

Common Query Patterns

All contacts for a company:

code
conditions=company/id=12345

Active contacts only:

code
conditions=inactiveFlag=false

Contacts by type:

code
conditions=type/id=2

Contacts with portal access:

code
conditions=portalSecurityLevel>0 and disablePortalLoginFlag=false

Search by name:

code
conditions=firstName contains "John" or lastName contains "Smith"

Contacts by email:

code
conditions=communicationItems/value="john@acme.com"

Primary contacts only:

code
conditions=type/id=2 and inactiveFlag=false

Contact Relationships

Related Entities

EntityRelationship
Company/company/companies/{companyId}
Tickets/service/tickets?conditions=contact/id={id}
Notes/company/contacts/{id}/notes
Communications/company/contacts/{id}/communications
Groups/company/contacts/{id}/groups

Contact Notes

http
GET /company/contacts/{id}/notes
POST /company/contacts/{id}/notes

Note Fields:

FieldTypeDescription
textstringNote content
typeobject{id: noteTypeId}
flaggedbooleanFlagged for attention

Best Practices

  1. Always include company - Contacts must belong to a company
  2. Add communication items - Email/phone essential for notifications
  3. Set contact type - Helps identify primary contacts
  4. Use portal access wisely - Grant minimum necessary access
  5. Keep contacts active - Mark inactive rather than delete
  6. Link to site - Important for multi-site companies
  7. Avoid duplicates - Search before creating new contacts

Error Handling

ErrorCauseResolution
Company requiredMissing company referenceInclude company: {id: x}
firstName requiredMissing first nameProvide firstName field
Invalid companyCompany doesn't existVerify company ID
Cannot deleteHas related recordsMark as inactive instead
Email existsDuplicate emailUse existing contact

Related Skills