Considere uma central de atendimento que opere entre 8h30 e 18h, com quatro agentes que podem atender chamadas em vários idiomas. Há três possíveis mudanças em que os agentes podem ser atribuídos: 8h30-16h30, 9h-17h e 10h-18h. Com base nas previsões anteriores, sabe-se que a demanda por cada idioma varia de acordo com o dia da semana. Às segundas-feiras, as chamadas geralmente são feitas em inglês e português. Portanto, é necessário que haja pelo menos um agente que conheça esses idiomas. Às terças-feiras, as chamadas são geralmente em espanhol e francês. Portanto, é necessário que haja pelo menos um agente proficiente em cada um desses idiomas. Independentemente do idioma, é preciso haver pelo menos dois agentes disponíveis o tempo todo.
Vários turnos por dia
Neste exemplo de central de atendimento, há três turnos por dia, e o horizonte de planejamento abrange dois dias. Por exemplo, o turno das 8h30 às 16h30 em uma segunda-feira específica é representado como:
{
"shifts": [
{
"id": "Monday-2024-7-1 8:30-16:30",
"startDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 8,
"minutes": 30
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 16,
"minutes": 30
}
}
]
}
Exemplo com seis turnos
{
"shifts": [
{
"id": "Monday-2024-7-1 8:30-16:30",
"startDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 8,
"minutes": 30
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 16,
"minutes": 30
}
},
{
"id": "Monday-2024-7-1 9:00-17:00",
"startDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 9
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 17
}
},
{
"id": "Monday-2024-7-1 10:00-18:00",
"startDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 10
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 18
}
},
{
"id": "Tuesday-2024-7-2 8:30-16:30",
"startDateTime": {
"year": 2024,
"month": 7,
"day": 2,
"hours": 8,
"minutes": 30
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 2,
"hours": 16,
"minutes": 30
}
},
{
"id": "Tuesday-2024-7-2 9:00-17:00",
"startDateTime": {
"year": 2024,
"month": 7,
"day": 2,
"hours": 9
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 2,
"hours": 17
}
},
{
"id": "Tuesday-2024-7-2 10:00-18:00",
"startDateTime": {
"year": 2024,
"month": 7,
"day": 2,
"hours": 10
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 2,
"hours": 18
}
}
]
}
Idiomas como habilidades dos funcionários
As linguagens que um agente conhece são representadas como skill
. A primeira agente,
Lauren, conhece espanhol e português, e é representada como:
{
"employees": [
{
"id": "Lauren",
"role_ids": [
"Agent"
],
"skill_ids": [
"ES",
"PR"
]
}
]
}
Também é possível adicionar outro tipo de restrições de agendamento, solicitação de turno e preferências dos funcionários, conforme descrito em outros exemplos.
Exemplo com os quatro funcionários
{
"employees": [
{
"id": "Lauren",
"role_ids": [
"Agent"
],
"skill_ids": [
"ES",
"PR"
]
},
{
"id": "Markus",
"role_ids": [
"Agent"
],
"skill_ids": [
"EN",
"PR"
]
},
{
"id": "Hans",
"role_ids": [
"Agent"
],
"skill_ids": [
"EN",
"ES"
],
"shiftRequests": [
{
"shiftIds": [
"Monday-2024-7-1 10:00-18:00"
],
"type": "STATUS_NOT_WORK"
}
]
},
{
"id": "Peter",
"role_ids": [
"Agent"
],
"skill_ids": [
"EN",
"FR"
],
"shiftPreferences": [
{
"shiftId": "Monday-2024-7-1 10:00-18:00",
"preference": 1
}
]
}
]
}
Cobertura de demanda para agentes e idiomas
A demanda por agentes ou linguagens específicas é representada por requisitos
de cobertura. A necessidade de dois agentes é especificada em
roleRequirements
, enquanto o requisito para idiomas é especificado em
skillRequirements
. Os requisitos de cobertura para segunda e terça-feira são representados como:
{
"coverageRequirements": [
{
"startDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 8,
"minutes": 30
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 18
},
"roleRequirements": [
{
"role_id": "Agent",
"target_employee_count": 1,
"priority": "PRIORITY_HIGH"
}
],
"skillRequirements": [
{
"skill_id": "EN",
"target_employee_count": 1
},
{
"skill_id": "PR",
"target_employee_count": 1
}
]
},
{
"startDateTime": {
"year": 2024,
"month": 7,
"day": 2,
"hours": 8,
"minutes": 30
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 2,
"hours": 18,
"minutes": 0
},
"roleRequirements": [
{
"role_id": "Agent",
"target_employee_count": 1,
"priority": "PRIORITY_HIGH"
}
],
"skillRequirements": [
{
"skill_id": "ES",
"target_employee_count": 1
},
{
"skill_id": "FR",
"target_employee_count": 1
}
]
}
],
"role_ids": [
"Agent"
],
"skill_ids": [
"EN",
"ES",
"FR",
"PR"
]
}
Observe que todos os IDs de função e habilidade precisam ser definidos na solicitação. Eles precisam corresponder aos IDs usados para definir os funcionários.
Exemplo de uma solicitação completa
{
{
"requestId": "contact_center_examples",
"solve_parameters": {
"time_limit": {
"seconds": 60
}
},
"employees": [
{
"id": "Lauren",
"role_ids": [
"Agent"
],
"skill_ids": [
"ES",
"PR"
]
},
{
"id": "Markus",
"role_ids": [
"Agent"
],
"skill_ids": [
"EN",
"PR"
]
},
{
"id": "Hans",
"role_ids": [
"Agent"
],
"skill_ids": [
"EN",
"ES"
],
"shiftRequests": [
{
"shiftIds": [
"Monday-2024-7-1 10:00-18:00"
],
"type": "STATUS_NOT_WORK"
}
]
},
{
"id": "Peter",
"role_ids": [
"Agent"
],
"skill_ids": [
"EN",
"FR"
],
"shiftPreferences": [
{
"shiftId": "Monday-2024-7-1 10:00-18:00",
"preference": 1
}
]
}
],
"shifts": [
{
"id": "Monday-2024-7-1 8:30-16:30",
"startDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 8,
"minutes": 30
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 16,
"minutes": 30
}
},
{
"id": "Monday-2024-7-1 9:00-17:00",
"startDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 9
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 17
}
},
{
"id": "Monday-2024-7-1 10:00-18:00",
"startDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 10
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 18
}
},
{
"id": "Tuesday-2024-7-2 8:30-16:30",
"startDateTime": {
"year": 2024,
"month": 7,
"day": 2,
"hours": 8,
"minutes": 30
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 2,
"hours": 16,
"minutes": 30
}
},
{
"id": "Tuesday-2024-7-2 9:00-17:00",
"startDateTime": {
"year": 2024,
"month": 7,
"day": 2,
"hours": 9
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 2,
"hours": 17
}
},
{
"id": "Tuesday-2024-7-2 10:00-18:00",
"startDateTime": {
"year": 2024,
"month": 7,
"day": 2,
"hours": 10
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 2,
"hours": 18
}
}
],
"coverageRequirements": [
{
"startDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 8,
"minutes": 30
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 1,
"hours": 18
},
"roleRequirements": [
{
"role_id": "Agent",
"target_employee_count": 1,
"priority": "PRIORITY_HIGH"
}
],
"skillRequirements": [
{
"skill_id": "EN",
"target_employee_count": 1
},
{
"skill_id": "PR",
"target_employee_count": 1
}
]
},
{
"startDateTime": {
"year": 2024,
"month": 7,
"day": 2,
"hours": 8,
"minutes": 30
},
"endDateTime": {
"year": 2024,
"month": 7,
"day": 2,
"hours": 18,
"minutes": 0
},
"roleRequirements": [
{
"role_id": "Agent",
"target_employee_count": 1,
"priority": "PRIORITY_HIGH"
}
],
"skillRequirements": [
{
"skill_id": "ES",
"target_employee_count": 1
},
{
"skill_id": "FR",
"target_employee_count": 1
}
]
}
],
"role_ids": [
"Agent"
],
"skill_ids": [
"EN",
"ES",
"FR",
"PR"
]
}
}
Exemplo de resposta
A resposta do solucionador contém a atribuição de agentes a mudanças e o status do procedimento de otimização.
O exemplo a seguir mostra as mudanças atribuídas:
{
"solutionStatus": "OPTIMAL",
"shiftAssignments": [
{
"employeeId": "Lauren",
"shiftId": "Tuesday-2024-7-2 10:00-18:00",
"roleId": "Agent"
},
{
"employeeId": "Markus",
"shiftId": "Monday-2024-7-1 8:30-16:30",
"roleId": "Agent"
},
{
"employeeId": "Peter",
"shiftId": "Monday-2024-7-1 10:00-18:00",
"roleId": "Agent"
},
{
"employeeId": "Peter",
"shiftId": "Tuesday-2024-7-2 8:30-16:30",
"roleId": "Agent"
}
],
"requestId": "contact_center_examples"
}