github.com/grokify/go-ringcentral-client@v0.3.31/engagevoice/v1/examples/get_simple/main.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"log"
     7  	"net/http"
     8  	"os"
     9  	"strconv"
    10  	"strings"
    11  	"time"
    12  
    13  	engagevoice "github.com/grokify/go-ringcentral-client/engagevoice/v1/client"
    14  	engagevoiceutil "github.com/grokify/go-ringcentral-client/engagevoice/v1/util"
    15  	"github.com/grokify/mogo/config"
    16  	"github.com/grokify/mogo/fmt/fmtutil"
    17  	"github.com/jessevdk/go-flags"
    18  )
    19  
    20  type Options struct {
    21  	EnvPath        string `short:"e" long:"envPath" description:"Environment File Path"`
    22  	Token          string `short:"t" long:"token" description:"Token"`
    23  	AccountID      string `short:"a" long:"accountID" description:"AccountID"`
    24  	Object         string `short:"o" long:"object" description:"Object to retrieve" required:"true"`
    25  	ID             string `short:"i" long:"id" description:"id to get"`
    26  	AccountIdInt64 int64
    27  }
    28  
    29  func main() {
    30  	opts := Options{}
    31  	_, err := flags.Parse(&opts)
    32  	if err != nil {
    33  		log.Fatal(err)
    34  	}
    35  
    36  	_, err = config.LoadDotEnv([]string{opts.EnvPath, os.Getenv("ENV_PATH")}, 1)
    37  	if err != nil {
    38  		log.Fatal(err)
    39  	}
    40  
    41  	if len(opts.Token) == 0 {
    42  		opts.Token = os.Getenv("ENGAGE_VOICE_API_TOKEN")
    43  	}
    44  	if len(opts.AccountID) == 0 {
    45  		opts.AccountID = os.Getenv("ENGAGE_VOICE_ACCOUNT_ID")
    46  		accountIdInt, err := strconv.Atoi(opts.AccountID)
    47  		if err != nil {
    48  			log.Fatal(err)
    49  		}
    50  		opts.AccountIdInt64 = int64(accountIdInt)
    51  	}
    52  
    53  	clientApis := engagevoiceutil.NewClientAPIs(opts.Token)
    54  	apiClient := clientApis.APIClient
    55  
    56  	object := strings.ToLower(opts.Object)
    57  	switch object {
    58  	case "agent":
    59  		info, resp, err := apiClient.AgentsApi.GetAgents(
    60  			context.Background(), opts.AccountID, opts.ID)
    61  		handleErrors(resp, err)
    62  		fmtutil.PrintJSON(info)
    63  	case "agentgroup":
    64  		info, resp, err := apiClient.AgentsApi.GetAgentGroups(
    65  			context.Background(), opts.AccountID)
    66  		handleErrors(resp, err)
    67  		fmtutil.PrintJSON(info)
    68  	case "campaign":
    69  		campaigns, err := engagevoiceutil.GetAllCampaigns(
    70  			context.Background(), apiClient, opts.AccountID)
    71  		if err != nil {
    72  			log.Fatal(err)
    73  		}
    74  		fmtutil.PrintJSON(campaigns)
    75  	case "campaignclearcache":
    76  		campaigns, err := engagevoiceutil.GetAllCampaigns(
    77  			context.Background(), apiClient, opts.AccountID)
    78  		if err != nil {
    79  			log.Fatal(err)
    80  		}
    81  		if len(campaigns) == 0 {
    82  			log.Fatal("E_NO_CAMPAIGNS")
    83  		}
    84  		for _, campaign := range campaigns {
    85  			fmt.Println("CLEARING...")
    86  			fmtutil.PrintJSON(campaign)
    87  			resp, err := apiClient.DialGroupsApi.ClearCampaignCache(
    88  				context.Background(),
    89  				opts.AccountIdInt64,
    90  				campaign.DialGroup.Id,
    91  				campaign.CampaignId,
    92  				map[string]interface{}{},
    93  			)
    94  			handleErrors(resp, err)
    95  			fmt.Printf("SUCCESS [%v]\n", resp.StatusCode)
    96  			break
    97  		}
    98  	case "leadstate":
    99  		info, resp, err := apiClient.CampaignLeadsApi.GetLeadStates(
   100  			context.Background(), opts.AccountID)
   101  		handleErrors(resp, err)
   102  		fmtutil.PrintJSON(info)
   103  	case "country":
   104  		info, resp, err := apiClient.CountriesApi.GetAvailableCountries(
   105  			context.Background(), opts.AccountID)
   106  		handleErrors(resp, err)
   107  		fmtutil.PrintJSON(info)
   108  	case "dialgroup":
   109  		info, resp, err := apiClient.DialGroupsApi.GetDialGroups(
   110  			context.Background(), opts.AccountID)
   111  		handleErrors(resp, err)
   112  		fmtutil.PrintJSON(info)
   113  	case "systemdispositions":
   114  		info, resp, err := apiClient.CampaignLeadsApi.GetSystemDispositions(
   115  			context.Background(), opts.AccountID)
   116  		handleErrors(resp, err)
   117  		fmtutil.PrintJSON(info)
   118  	case "leadsearch":
   119  		//qry := engagevoice.CampaignLeadSearchCriteria{FirstName: "Jon"}
   120  		qry := engagevoice.CampaignLeadSearchCriteria{}
   121  		info, resp, err := apiClient.CampaignLeadsApi.SearchLeads(
   122  			context.Background(), opts.AccountID,
   123  			qry, nil,
   124  		)
   125  		handleErrors(resp, err)
   126  		fmtutil.PrintJSON(info)
   127  	case "token":
   128  		info, resp, err := apiClient.AuthApi.GetTokens(context.Background())
   129  		handleErrors(resp, err)
   130  		fmtutil.PrintJSON(info)
   131  	case "user":
   132  		info, resp, err := apiClient.UsersApi.GetUsers(context.Background())
   133  		handleErrors(resp, err)
   134  		fmtutil.PrintJSON(info)
   135  	default:
   136  		log.Fatal(fmt.Sprintf("Object not found [%v]", object))
   137  	}
   138  
   139  	if 1 == 0 {
   140  		info, resp, err := apiClient.DialGroupsApi.GetDialGroups(
   141  			context.Background(), opts.AccountID,
   142  		)
   143  		handleErrors(resp, err)
   144  		fmtutil.PrintJSON(info)
   145  		dialGroupIDs := []int64{}
   146  		for _, dg := range info {
   147  			dialGroupIDs = append(dialGroupIDs, dg.DialGroupId)
   148  		}
   149  		fmtutil.PrintJSON(dialGroupIDs)
   150  		for _, dialGroupID := range dialGroupIDs {
   151  			info, resp, err := apiClient.DialGroupsApi.GetCampaigns(
   152  				context.Background(),
   153  				opts.AccountID,
   154  				strconv.Itoa(int(dialGroupID)),
   155  			)
   156  			handleErrors(resp, err)
   157  			fmtutil.PrintJSON(info)
   158  			for _, campaign := range info {
   159  				campaignID := campaign.CampaignId
   160  				fmt.Printf("CAMPAIGN [%v]\n", campaignID)
   161  				uploadLeads(apiClient, opts.AccountID, strconv.Itoa(int(campaignID)))
   162  
   163  			}
   164  		}
   165  	}
   166  	fmt.Println("DONE")
   167  }
   168  
   169  func uploadLeads(client *engagevoice.APIClient, accountId, campaignId string) {
   170  	dt := time.Now()
   171  	leadsRequest := engagevoice.UploadLeadsRequest{
   172  		Description:       "Test from Go " + dt.Format(time.RFC3339),
   173  		DialPriority:      "IMMEDIATE",
   174  		DuplicateHandling: "RETAIN_ALL",
   175  		ListState:         "ACTIVE",
   176  		TimeZoneOption:    "NPA_NXX",
   177  		UploadLeads: []engagevoice.CampaignLead{
   178  			{
   179  				LeadPhone: "6505550100",
   180  				ExternId:  "1",
   181  				FirstName: "Jon",
   182  				LastName:  "Snow",
   183  				/*ExtendedLeadData: engagevoice.ExtendedLeadData{
   184  					Important:  "Priority 1: needs help right away",
   185  					Interested: true,
   186  				},*/
   187  			},
   188  		},
   189  	}
   190  	info, resp, err := client.CampaignsApi.UploadLeads(
   191  		context.Background(),
   192  		accountId,
   193  		campaignId,
   194  		leadsRequest,
   195  	)
   196  	handleErrors(resp, err)
   197  	fmtutil.PrintJSON(info)
   198  }
   199  
   200  func handleErrors(resp *http.Response, err error) {
   201  	if err != nil {
   202  		log.Fatal(err)
   203  	} else if resp.StatusCode >= 300 {
   204  		log.Fatal("E_STATUS_CODE_GTE_300")
   205  	}
   206  }