Centro de contacto

Considera un centro de contacto que opera entre las 8:30 y las 18:00, con cuatro agentes que pueden recibir llamadas en una variedad de idiomas. Existen tres cambios posibles en los que se pueden asignar los agentes: de 8:30 a 16:30, de 9:00 a 17:00 y de 10:00 a 18:00. A partir de previsiones anteriores, se sabe que la demanda para cada idioma varía según el día de la semana. Los lunes, las llamadas suelen realizarse en inglés y portugués, por lo que debe haber, al menos, un agente que conozca estos idiomas. Los martes, las llamadas suelen ser en español y francés, por lo que debe haber al menos un agente que domine cada uno de estos idiomas. Independientemente del idioma, debe haber al menos dos agentes disponibles en todo momento.

Varios turnos por día

En este ejemplo de centro de contacto, hay tres turnos por día y el horizonte de planificación se extiende de dos días. Por ejemplo, el cambio entre las 8:30 y las 16:30 de un lunes específico se representa de la siguiente manera:

  {
    "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
        }
      }
    ]
  }

Ejemplo con 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
        }
      }
    ]
  }
  

Lenguajes como habilidades de los empleados

Los idiomas que conoce un agente se representan como skill. La primera agente, Lauren, sabe español y portugués, y está representada de la siguiente manera:

  {
    "employees": [
      {
        "id": "Lauren",
        "role_ids": [
          "Agent"
        ],
        "skill_ids": [
          "ES",
          "PR"
        ]
      }
    ]
  }

También es posible agregar otros tipos de restricciones de programación, solicitudes de turnos y preferencias de los empleados, como se describe en otros ejemplos.

Ejemplo con los cuatro empleados


  {
    "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 la demanda para idiomas y agentes

La demanda de agentes o idiomas específicos se representa con los requisitos de cobertura. La necesidad de dos agentes se especifica en roleRequirements, mientras que el requisito de idiomas se especifica en skillRequirements. Los requisitos de cobertura para el lunes y el martes se representan de la siguiente manera:

  {
    "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"
    ]
  }

Ten en cuenta que todos los IDs de funciones y habilidades se deben definir en la solicitud. Deben coincidir con los ID que se usaron para definir a los empleados.

Ejemplo de una solicitud 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"
        ]
      }
    }
    

Ejemplo de respuesta

La respuesta del solucionador contiene la asignación de agentes a los cambios y el estado del procedimiento de optimización.

En el siguiente ejemplo, se muestran los turnos asignados:

  {
    "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"
  }