github.com/twilio/twilio-go@v1.20.1/rest/taskrouter/v1/workspaces_task_queues.go (about)

     1  /*
     2   * This code was generated by
     3   * ___ _ _ _ _ _    _ ____    ____ ____ _    ____ ____ _  _ ____ ____ ____ ___ __   __
     4   *  |  | | | | |    | |  | __ |  | |__| | __ | __ |___ |\ | |___ |__/ |__|  | |  | |__/
     5   *  |  |_|_| | |___ | |__|    |__| |  | |    |__] |___ | \| |___ |  \ |  |  | |__| |  \
     6   *
     7   * Twilio - Taskrouter
     8   * This is the public Twilio REST API.
     9   *
    10   * NOTE: This class is auto generated by OpenAPI Generator.
    11   * https://openapi-generator.tech
    12   * Do not edit the class manually.
    13   */
    14  
    15  package openapi
    16  
    17  import (
    18  	"encoding/json"
    19  	"fmt"
    20  	"net/url"
    21  	"strings"
    22  
    23  	"github.com/twilio/twilio-go/client"
    24  )
    25  
    26  // Optional parameters for the method 'CreateTaskQueue'
    27  type CreateTaskQueueParams struct {
    28  	// A descriptive string that you create to describe the TaskQueue. For example `Support-Tier 1`, `Sales`, or `Escalation`.
    29  	FriendlyName *string `json:"FriendlyName,omitempty"`
    30  	// A string that describes the Worker selection criteria for any Tasks that enter the TaskQueue. For example, `'\\\"language\\\" == \\\"spanish\\\"'`. The default value is `1==1`. If this value is empty, Tasks will wait in the TaskQueue until they are deleted or moved to another TaskQueue. For more information about Worker selection, see [Describing Worker selection criteria](https://www.twilio.com/docs/taskrouter/api/taskqueues#target-workers).
    31  	TargetWorkers *string `json:"TargetWorkers,omitempty"`
    32  	// The maximum number of Workers to reserve for the assignment of a Task in the queue. Can be an integer between 1 and 50, inclusive and defaults to 1.
    33  	MaxReservedWorkers *int `json:"MaxReservedWorkers,omitempty"`
    34  	//
    35  	TaskOrder *string `json:"TaskOrder,omitempty"`
    36  	// The SID of the Activity to assign Workers when a task is reserved for them.
    37  	ReservationActivitySid *string `json:"ReservationActivitySid,omitempty"`
    38  	// The SID of the Activity to assign Workers when a task is assigned to them.
    39  	AssignmentActivitySid *string `json:"AssignmentActivitySid,omitempty"`
    40  }
    41  
    42  func (params *CreateTaskQueueParams) SetFriendlyName(FriendlyName string) *CreateTaskQueueParams {
    43  	params.FriendlyName = &FriendlyName
    44  	return params
    45  }
    46  func (params *CreateTaskQueueParams) SetTargetWorkers(TargetWorkers string) *CreateTaskQueueParams {
    47  	params.TargetWorkers = &TargetWorkers
    48  	return params
    49  }
    50  func (params *CreateTaskQueueParams) SetMaxReservedWorkers(MaxReservedWorkers int) *CreateTaskQueueParams {
    51  	params.MaxReservedWorkers = &MaxReservedWorkers
    52  	return params
    53  }
    54  func (params *CreateTaskQueueParams) SetTaskOrder(TaskOrder string) *CreateTaskQueueParams {
    55  	params.TaskOrder = &TaskOrder
    56  	return params
    57  }
    58  func (params *CreateTaskQueueParams) SetReservationActivitySid(ReservationActivitySid string) *CreateTaskQueueParams {
    59  	params.ReservationActivitySid = &ReservationActivitySid
    60  	return params
    61  }
    62  func (params *CreateTaskQueueParams) SetAssignmentActivitySid(AssignmentActivitySid string) *CreateTaskQueueParams {
    63  	params.AssignmentActivitySid = &AssignmentActivitySid
    64  	return params
    65  }
    66  
    67  //
    68  func (c *ApiService) CreateTaskQueue(WorkspaceSid string, params *CreateTaskQueueParams) (*TaskrouterV1TaskQueue, error) {
    69  	path := "/v1/Workspaces/{WorkspaceSid}/TaskQueues"
    70  	path = strings.Replace(path, "{"+"WorkspaceSid"+"}", WorkspaceSid, -1)
    71  
    72  	data := url.Values{}
    73  	headers := make(map[string]interface{})
    74  
    75  	if params != nil && params.FriendlyName != nil {
    76  		data.Set("FriendlyName", *params.FriendlyName)
    77  	}
    78  	if params != nil && params.TargetWorkers != nil {
    79  		data.Set("TargetWorkers", *params.TargetWorkers)
    80  	}
    81  	if params != nil && params.MaxReservedWorkers != nil {
    82  		data.Set("MaxReservedWorkers", fmt.Sprint(*params.MaxReservedWorkers))
    83  	}
    84  	if params != nil && params.TaskOrder != nil {
    85  		data.Set("TaskOrder", *params.TaskOrder)
    86  	}
    87  	if params != nil && params.ReservationActivitySid != nil {
    88  		data.Set("ReservationActivitySid", *params.ReservationActivitySid)
    89  	}
    90  	if params != nil && params.AssignmentActivitySid != nil {
    91  		data.Set("AssignmentActivitySid", *params.AssignmentActivitySid)
    92  	}
    93  
    94  	resp, err := c.requestHandler.Post(c.baseURL+path, data, headers)
    95  	if err != nil {
    96  		return nil, err
    97  	}
    98  
    99  	defer resp.Body.Close()
   100  
   101  	ps := &TaskrouterV1TaskQueue{}
   102  	if err := json.NewDecoder(resp.Body).Decode(ps); err != nil {
   103  		return nil, err
   104  	}
   105  
   106  	return ps, err
   107  }
   108  
   109  //
   110  func (c *ApiService) DeleteTaskQueue(WorkspaceSid string, Sid string) error {
   111  	path := "/v1/Workspaces/{WorkspaceSid}/TaskQueues/{Sid}"
   112  	path = strings.Replace(path, "{"+"WorkspaceSid"+"}", WorkspaceSid, -1)
   113  	path = strings.Replace(path, "{"+"Sid"+"}", Sid, -1)
   114  
   115  	data := url.Values{}
   116  	headers := make(map[string]interface{})
   117  
   118  	resp, err := c.requestHandler.Delete(c.baseURL+path, data, headers)
   119  	if err != nil {
   120  		return err
   121  	}
   122  
   123  	defer resp.Body.Close()
   124  
   125  	return nil
   126  }
   127  
   128  //
   129  func (c *ApiService) FetchTaskQueue(WorkspaceSid string, Sid string) (*TaskrouterV1TaskQueue, error) {
   130  	path := "/v1/Workspaces/{WorkspaceSid}/TaskQueues/{Sid}"
   131  	path = strings.Replace(path, "{"+"WorkspaceSid"+"}", WorkspaceSid, -1)
   132  	path = strings.Replace(path, "{"+"Sid"+"}", Sid, -1)
   133  
   134  	data := url.Values{}
   135  	headers := make(map[string]interface{})
   136  
   137  	resp, err := c.requestHandler.Get(c.baseURL+path, data, headers)
   138  	if err != nil {
   139  		return nil, err
   140  	}
   141  
   142  	defer resp.Body.Close()
   143  
   144  	ps := &TaskrouterV1TaskQueue{}
   145  	if err := json.NewDecoder(resp.Body).Decode(ps); err != nil {
   146  		return nil, err
   147  	}
   148  
   149  	return ps, err
   150  }
   151  
   152  // Optional parameters for the method 'ListTaskQueue'
   153  type ListTaskQueueParams struct {
   154  	// The `friendly_name` of the TaskQueue resources to read.
   155  	FriendlyName *string `json:"FriendlyName,omitempty"`
   156  	// The attributes of the Workers to read. Returns the TaskQueues with Workers that match the attributes specified in this parameter.
   157  	EvaluateWorkerAttributes *string `json:"EvaluateWorkerAttributes,omitempty"`
   158  	// The SID of the Worker with the TaskQueue resources to read.
   159  	WorkerSid *string `json:"WorkerSid,omitempty"`
   160  	// Sorting parameter for TaskQueues
   161  	Ordering *string `json:"Ordering,omitempty"`
   162  	// How many resources to return in each list page. The default is 50, and the maximum is 1000.
   163  	PageSize *int `json:"PageSize,omitempty"`
   164  	// Max number of records to return.
   165  	Limit *int `json:"limit,omitempty"`
   166  }
   167  
   168  func (params *ListTaskQueueParams) SetFriendlyName(FriendlyName string) *ListTaskQueueParams {
   169  	params.FriendlyName = &FriendlyName
   170  	return params
   171  }
   172  func (params *ListTaskQueueParams) SetEvaluateWorkerAttributes(EvaluateWorkerAttributes string) *ListTaskQueueParams {
   173  	params.EvaluateWorkerAttributes = &EvaluateWorkerAttributes
   174  	return params
   175  }
   176  func (params *ListTaskQueueParams) SetWorkerSid(WorkerSid string) *ListTaskQueueParams {
   177  	params.WorkerSid = &WorkerSid
   178  	return params
   179  }
   180  func (params *ListTaskQueueParams) SetOrdering(Ordering string) *ListTaskQueueParams {
   181  	params.Ordering = &Ordering
   182  	return params
   183  }
   184  func (params *ListTaskQueueParams) SetPageSize(PageSize int) *ListTaskQueueParams {
   185  	params.PageSize = &PageSize
   186  	return params
   187  }
   188  func (params *ListTaskQueueParams) SetLimit(Limit int) *ListTaskQueueParams {
   189  	params.Limit = &Limit
   190  	return params
   191  }
   192  
   193  // Retrieve a single page of TaskQueue records from the API. Request is executed immediately.
   194  func (c *ApiService) PageTaskQueue(WorkspaceSid string, params *ListTaskQueueParams, pageToken, pageNumber string) (*ListTaskQueueResponse, error) {
   195  	path := "/v1/Workspaces/{WorkspaceSid}/TaskQueues"
   196  
   197  	path = strings.Replace(path, "{"+"WorkspaceSid"+"}", WorkspaceSid, -1)
   198  
   199  	data := url.Values{}
   200  	headers := make(map[string]interface{})
   201  
   202  	if params != nil && params.FriendlyName != nil {
   203  		data.Set("FriendlyName", *params.FriendlyName)
   204  	}
   205  	if params != nil && params.EvaluateWorkerAttributes != nil {
   206  		data.Set("EvaluateWorkerAttributes", *params.EvaluateWorkerAttributes)
   207  	}
   208  	if params != nil && params.WorkerSid != nil {
   209  		data.Set("WorkerSid", *params.WorkerSid)
   210  	}
   211  	if params != nil && params.Ordering != nil {
   212  		data.Set("Ordering", *params.Ordering)
   213  	}
   214  	if params != nil && params.PageSize != nil {
   215  		data.Set("PageSize", fmt.Sprint(*params.PageSize))
   216  	}
   217  
   218  	if pageToken != "" {
   219  		data.Set("PageToken", pageToken)
   220  	}
   221  	if pageNumber != "" {
   222  		data.Set("Page", pageNumber)
   223  	}
   224  
   225  	resp, err := c.requestHandler.Get(c.baseURL+path, data, headers)
   226  	if err != nil {
   227  		return nil, err
   228  	}
   229  
   230  	defer resp.Body.Close()
   231  
   232  	ps := &ListTaskQueueResponse{}
   233  	if err := json.NewDecoder(resp.Body).Decode(ps); err != nil {
   234  		return nil, err
   235  	}
   236  
   237  	return ps, err
   238  }
   239  
   240  // Lists TaskQueue records from the API as a list. Unlike stream, this operation is eager and loads 'limit' records into memory before returning.
   241  func (c *ApiService) ListTaskQueue(WorkspaceSid string, params *ListTaskQueueParams) ([]TaskrouterV1TaskQueue, error) {
   242  	response, errors := c.StreamTaskQueue(WorkspaceSid, params)
   243  
   244  	records := make([]TaskrouterV1TaskQueue, 0)
   245  	for record := range response {
   246  		records = append(records, record)
   247  	}
   248  
   249  	if err := <-errors; err != nil {
   250  		return nil, err
   251  	}
   252  
   253  	return records, nil
   254  }
   255  
   256  // Streams TaskQueue records from the API as a channel stream. This operation lazily loads records as efficiently as possible until the limit is reached.
   257  func (c *ApiService) StreamTaskQueue(WorkspaceSid string, params *ListTaskQueueParams) (chan TaskrouterV1TaskQueue, chan error) {
   258  	if params == nil {
   259  		params = &ListTaskQueueParams{}
   260  	}
   261  	params.SetPageSize(client.ReadLimits(params.PageSize, params.Limit))
   262  
   263  	recordChannel := make(chan TaskrouterV1TaskQueue, 1)
   264  	errorChannel := make(chan error, 1)
   265  
   266  	response, err := c.PageTaskQueue(WorkspaceSid, params, "", "")
   267  	if err != nil {
   268  		errorChannel <- err
   269  		close(recordChannel)
   270  		close(errorChannel)
   271  	} else {
   272  		go c.streamTaskQueue(response, params, recordChannel, errorChannel)
   273  	}
   274  
   275  	return recordChannel, errorChannel
   276  }
   277  
   278  func (c *ApiService) streamTaskQueue(response *ListTaskQueueResponse, params *ListTaskQueueParams, recordChannel chan TaskrouterV1TaskQueue, errorChannel chan error) {
   279  	curRecord := 1
   280  
   281  	for response != nil {
   282  		responseRecords := response.TaskQueues
   283  		for item := range responseRecords {
   284  			recordChannel <- responseRecords[item]
   285  			curRecord += 1
   286  			if params.Limit != nil && *params.Limit < curRecord {
   287  				close(recordChannel)
   288  				close(errorChannel)
   289  				return
   290  			}
   291  		}
   292  
   293  		record, err := client.GetNext(c.baseURL, response, c.getNextListTaskQueueResponse)
   294  		if err != nil {
   295  			errorChannel <- err
   296  			break
   297  		} else if record == nil {
   298  			break
   299  		}
   300  
   301  		response = record.(*ListTaskQueueResponse)
   302  	}
   303  
   304  	close(recordChannel)
   305  	close(errorChannel)
   306  }
   307  
   308  func (c *ApiService) getNextListTaskQueueResponse(nextPageUrl string) (interface{}, error) {
   309  	if nextPageUrl == "" {
   310  		return nil, nil
   311  	}
   312  	resp, err := c.requestHandler.Get(nextPageUrl, nil, nil)
   313  	if err != nil {
   314  		return nil, err
   315  	}
   316  
   317  	defer resp.Body.Close()
   318  
   319  	ps := &ListTaskQueueResponse{}
   320  	if err := json.NewDecoder(resp.Body).Decode(ps); err != nil {
   321  		return nil, err
   322  	}
   323  	return ps, nil
   324  }
   325  
   326  // Optional parameters for the method 'UpdateTaskQueue'
   327  type UpdateTaskQueueParams struct {
   328  	// A descriptive string that you create to describe the TaskQueue. For example `Support-Tier 1`, `Sales`, or `Escalation`.
   329  	FriendlyName *string `json:"FriendlyName,omitempty"`
   330  	// A string describing the Worker selection criteria for any Tasks that enter the TaskQueue. For example '\\\"language\\\" == \\\"spanish\\\"' If no TargetWorkers parameter is provided, Tasks will wait in the queue until they are either deleted or moved to another queue. Additional examples on how to describing Worker selection criteria below.
   331  	TargetWorkers *string `json:"TargetWorkers,omitempty"`
   332  	// The SID of the Activity to assign Workers when a task is reserved for them.
   333  	ReservationActivitySid *string `json:"ReservationActivitySid,omitempty"`
   334  	// The SID of the Activity to assign Workers when a task is assigned for them.
   335  	AssignmentActivitySid *string `json:"AssignmentActivitySid,omitempty"`
   336  	// The maximum number of Workers to create reservations for the assignment of a task while in the queue. Maximum of 50.
   337  	MaxReservedWorkers *int `json:"MaxReservedWorkers,omitempty"`
   338  	//
   339  	TaskOrder *string `json:"TaskOrder,omitempty"`
   340  }
   341  
   342  func (params *UpdateTaskQueueParams) SetFriendlyName(FriendlyName string) *UpdateTaskQueueParams {
   343  	params.FriendlyName = &FriendlyName
   344  	return params
   345  }
   346  func (params *UpdateTaskQueueParams) SetTargetWorkers(TargetWorkers string) *UpdateTaskQueueParams {
   347  	params.TargetWorkers = &TargetWorkers
   348  	return params
   349  }
   350  func (params *UpdateTaskQueueParams) SetReservationActivitySid(ReservationActivitySid string) *UpdateTaskQueueParams {
   351  	params.ReservationActivitySid = &ReservationActivitySid
   352  	return params
   353  }
   354  func (params *UpdateTaskQueueParams) SetAssignmentActivitySid(AssignmentActivitySid string) *UpdateTaskQueueParams {
   355  	params.AssignmentActivitySid = &AssignmentActivitySid
   356  	return params
   357  }
   358  func (params *UpdateTaskQueueParams) SetMaxReservedWorkers(MaxReservedWorkers int) *UpdateTaskQueueParams {
   359  	params.MaxReservedWorkers = &MaxReservedWorkers
   360  	return params
   361  }
   362  func (params *UpdateTaskQueueParams) SetTaskOrder(TaskOrder string) *UpdateTaskQueueParams {
   363  	params.TaskOrder = &TaskOrder
   364  	return params
   365  }
   366  
   367  //
   368  func (c *ApiService) UpdateTaskQueue(WorkspaceSid string, Sid string, params *UpdateTaskQueueParams) (*TaskrouterV1TaskQueue, error) {
   369  	path := "/v1/Workspaces/{WorkspaceSid}/TaskQueues/{Sid}"
   370  	path = strings.Replace(path, "{"+"WorkspaceSid"+"}", WorkspaceSid, -1)
   371  	path = strings.Replace(path, "{"+"Sid"+"}", Sid, -1)
   372  
   373  	data := url.Values{}
   374  	headers := make(map[string]interface{})
   375  
   376  	if params != nil && params.FriendlyName != nil {
   377  		data.Set("FriendlyName", *params.FriendlyName)
   378  	}
   379  	if params != nil && params.TargetWorkers != nil {
   380  		data.Set("TargetWorkers", *params.TargetWorkers)
   381  	}
   382  	if params != nil && params.ReservationActivitySid != nil {
   383  		data.Set("ReservationActivitySid", *params.ReservationActivitySid)
   384  	}
   385  	if params != nil && params.AssignmentActivitySid != nil {
   386  		data.Set("AssignmentActivitySid", *params.AssignmentActivitySid)
   387  	}
   388  	if params != nil && params.MaxReservedWorkers != nil {
   389  		data.Set("MaxReservedWorkers", fmt.Sprint(*params.MaxReservedWorkers))
   390  	}
   391  	if params != nil && params.TaskOrder != nil {
   392  		data.Set("TaskOrder", *params.TaskOrder)
   393  	}
   394  
   395  	resp, err := c.requestHandler.Post(c.baseURL+path, data, headers)
   396  	if err != nil {
   397  		return nil, err
   398  	}
   399  
   400  	defer resp.Body.Close()
   401  
   402  	ps := &TaskrouterV1TaskQueue{}
   403  	if err := json.NewDecoder(resp.Body).Decode(ps); err != nil {
   404  		return nil, err
   405  	}
   406  
   407  	return ps, err
   408  }