commit
def217cb2c
75
v1/client.go
75
v1/client.go
@ -384,6 +384,81 @@ func (c *MgClient) DeleteMessage(request DeleteData) (MessagesResponse, int, err
|
|||||||
return resp, status, err
|
return resp, status, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetFile implement get file url
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
//
|
||||||
|
// var client = v1.New("https://token.url", "cb8ccf05e38a47543ad8477d4999be73bff503ea6")
|
||||||
|
//
|
||||||
|
// data, status, err := client.GetFile("file_ID")
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// fmt.Printf("%v", err)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// fmt.Printf("%s\n", data.MessageID)
|
||||||
|
func (c *MgClient) GetFile(request string) (FullFileResponse, int, error) {
|
||||||
|
var resp FullFileResponse
|
||||||
|
var b []byte
|
||||||
|
|
||||||
|
data, status, err := c.GetRequest(fmt.Sprintf("/files/%s", request), b)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return resp, status, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if e := json.Unmarshal(data, &resp); e != nil {
|
||||||
|
return resp, status, e
|
||||||
|
}
|
||||||
|
|
||||||
|
if status != http.StatusOK {
|
||||||
|
return resp, status, c.Error(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp, status, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// UploadFile upload file
|
||||||
|
func (c *MgClient) UploadFile(request []byte) (UploadFileResponse, int, error) {
|
||||||
|
var resp UploadFileResponse
|
||||||
|
|
||||||
|
data, status, err := c.PostRequest("/files/upload", request)
|
||||||
|
if err != nil {
|
||||||
|
return resp, status, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if e := json.Unmarshal(data, &resp); e != nil {
|
||||||
|
return resp, status, e
|
||||||
|
}
|
||||||
|
|
||||||
|
if status != http.StatusOK {
|
||||||
|
return resp, status, c.Error(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp, status, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// UploadFileByURL upload file by url
|
||||||
|
func (c *MgClient) UploadFileByURL(request UploadFileByUrlRequest) (UploadFileResponse, int, error) {
|
||||||
|
var resp UploadFileResponse
|
||||||
|
outgoing, _ := json.Marshal(&request)
|
||||||
|
|
||||||
|
data, status, err := c.PostRequest("/files/upload_by_url", []byte(outgoing))
|
||||||
|
if err != nil {
|
||||||
|
return resp, status, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if e := json.Unmarshal(data, &resp); e != nil {
|
||||||
|
return resp, status, e
|
||||||
|
}
|
||||||
|
|
||||||
|
if status != http.StatusOK {
|
||||||
|
return resp, status, c.Error(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp, status, err
|
||||||
|
}
|
||||||
|
|
||||||
func (c *MgClient) Error(info []byte) error {
|
func (c *MgClient) Error(info []byte) error {
|
||||||
var data map[string]interface{}
|
var data map[string]interface{}
|
||||||
|
|
||||||
|
@ -57,6 +57,12 @@ func TestMgClient_ActivateTransportChannel(t *testing.T) {
|
|||||||
Creating: ChannelFeatureBoth,
|
Creating: ChannelFeatureBoth,
|
||||||
Deleting: ChannelFeatureSend,
|
Deleting: ChannelFeatureSend,
|
||||||
},
|
},
|
||||||
|
Image: ChannelSettingsFilesBase{
|
||||||
|
Creating: ChannelFeatureBoth,
|
||||||
|
},
|
||||||
|
File: ChannelSettingsFilesBase{
|
||||||
|
Creating: ChannelFeatureBoth,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,6 +100,12 @@ func TestMgClient_ActivateNewTransportChannel(t *testing.T) {
|
|||||||
Creating: ChannelFeatureBoth,
|
Creating: ChannelFeatureBoth,
|
||||||
Deleting: ChannelFeatureSend,
|
Deleting: ChannelFeatureSend,
|
||||||
},
|
},
|
||||||
|
Image: ChannelSettingsFilesBase{
|
||||||
|
Creating: ChannelFeatureBoth,
|
||||||
|
},
|
||||||
|
File: ChannelSettingsFilesBase{
|
||||||
|
Creating: ChannelFeatureBoth,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,6 +155,12 @@ func TestMgClient_UpdateTransportChannel(t *testing.T) {
|
|||||||
Creating: ChannelFeatureBoth,
|
Creating: ChannelFeatureBoth,
|
||||||
Deleting: ChannelFeatureSend,
|
Deleting: ChannelFeatureSend,
|
||||||
},
|
},
|
||||||
|
Image: ChannelSettingsFilesBase{
|
||||||
|
Creating: ChannelFeatureBoth,
|
||||||
|
},
|
||||||
|
File: ChannelSettingsFilesBase{
|
||||||
|
Creating: ChannelFeatureBoth,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,7 +173,7 @@ func TestMgClient_UpdateTransportChannel(t *testing.T) {
|
|||||||
t.Logf("Update selected channel: %v", data.ChannelID)
|
t.Logf("Update selected channel: %v", data.ChannelID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMgClient_Messages(t *testing.T) {
|
func TestMgClient_TextMessages(t *testing.T) {
|
||||||
c := client()
|
c := client()
|
||||||
t.Logf("%v", ext)
|
t.Logf("%v", ext)
|
||||||
|
|
||||||
@ -187,6 +205,46 @@ func TestMgClient_Messages(t *testing.T) {
|
|||||||
t.Logf("Message %v is sent", data.MessageID)
|
t.Logf("Message %v is sent", data.MessageID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMgClient_ImageMessages(t *testing.T) {
|
||||||
|
c := client()
|
||||||
|
t.Logf("%v", ext)
|
||||||
|
|
||||||
|
uploadFileResponse, st, err := c.UploadFileByURL(UploadFileByUrlRequest{
|
||||||
|
Url: "https://via.placeholder.com/300",
|
||||||
|
})
|
||||||
|
|
||||||
|
if st != http.StatusOK {
|
||||||
|
t.Errorf("%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
snd := SendData{
|
||||||
|
Message: Message{
|
||||||
|
ExternalID: ext,
|
||||||
|
Type: MsgTypeImage,
|
||||||
|
Items: []Item{{ID: uploadFileResponse.ID}},
|
||||||
|
},
|
||||||
|
User: User{
|
||||||
|
ExternalID: "6",
|
||||||
|
Nickname: "octopus",
|
||||||
|
Firstname: "Joe",
|
||||||
|
},
|
||||||
|
Channel: channelID,
|
||||||
|
ExternalChatID: "24798237492374",
|
||||||
|
}
|
||||||
|
|
||||||
|
data, status, err := c.Messages(snd)
|
||||||
|
|
||||||
|
if status != http.StatusOK {
|
||||||
|
t.Errorf("%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if data.Time.String() == "" {
|
||||||
|
t.Errorf("%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Logf("Message %v is sent", data.MessageID)
|
||||||
|
}
|
||||||
|
|
||||||
func TestMgClient_UpdateMessages(t *testing.T) {
|
func TestMgClient_UpdateMessages(t *testing.T) {
|
||||||
c := client()
|
c := client()
|
||||||
t.Logf("%v", ext)
|
t.Logf("%v", ext)
|
||||||
|
74
v1/types.go
74
v1/types.go
@ -26,6 +26,10 @@ const (
|
|||||||
MsgTypeOrder string = "order"
|
MsgTypeOrder string = "order"
|
||||||
// MsgTypeProduct product card
|
// MsgTypeProduct product card
|
||||||
MsgTypeProduct string = "product"
|
MsgTypeProduct string = "product"
|
||||||
|
// MsgTypeFile file card
|
||||||
|
MsgTypeFile string = "file"
|
||||||
|
// MsgTypeImage image card
|
||||||
|
MsgTypeImage string = "image"
|
||||||
|
|
||||||
// MsgOrderStatusCodeNew order status group new
|
// MsgOrderStatusCodeNew order status group new
|
||||||
MsgOrderStatusCodeNew = "new"
|
MsgOrderStatusCodeNew = "new"
|
||||||
@ -39,6 +43,8 @@ const (
|
|||||||
MsgOrderStatusCodeComplete = "complete"
|
MsgOrderStatusCodeComplete = "complete"
|
||||||
// MsgOrderStatusCodeCancel order status group cancel
|
// MsgOrderStatusCodeCancel order status group cancel
|
||||||
MsgOrderStatusCodeCancel = "cancel"
|
MsgOrderStatusCodeCancel = "cancel"
|
||||||
|
|
||||||
|
FileSizeLimit = 20 * 1024 * 1024
|
||||||
)
|
)
|
||||||
|
|
||||||
// MgClient type
|
// MgClient type
|
||||||
@ -59,11 +65,13 @@ type Channel struct {
|
|||||||
|
|
||||||
// ChannelSettings struct
|
// ChannelSettings struct
|
||||||
type ChannelSettings struct {
|
type ChannelSettings struct {
|
||||||
SpamAllowed bool `json:"spam_allowed"`
|
SpamAllowed bool `json:"spam_allowed"`
|
||||||
Status Status `json:"status"`
|
Status Status `json:"status"`
|
||||||
Text ChannelSettingsText `json:"text"`
|
Text ChannelSettingsText `json:"text"`
|
||||||
Product Product `json:"product"`
|
Product Product `json:"product"`
|
||||||
Order Order `json:"order"`
|
Order Order `json:"order"`
|
||||||
|
File ChannelSettingsFilesBase `json:"file"`
|
||||||
|
Image ChannelSettingsFilesBase `json:"image"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Product type
|
// Product type
|
||||||
@ -94,6 +102,46 @@ type ChannelSettingsText struct {
|
|||||||
Deleting string `json:"deleting"`
|
Deleting string `json:"deleting"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ChannelSettingsFilesBase struct
|
||||||
|
type ChannelSettingsFilesBase struct {
|
||||||
|
Creating string `json:"creating"`
|
||||||
|
Editing string `json:"editing"`
|
||||||
|
Quoting string `json:"quoting"`
|
||||||
|
Deleting string `json:"deleting"`
|
||||||
|
Max uint64 `json:"max_items_count"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// FullFileResponse uploaded file data
|
||||||
|
type FullFileResponse struct {
|
||||||
|
ID string `json:"id,omitempty"`
|
||||||
|
Type string `json:"type,omitempty"`
|
||||||
|
Size int `json:"size,omitempty"`
|
||||||
|
Url string `json:"url,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// UploadFileResponse uploaded file data
|
||||||
|
type UploadFileResponse struct {
|
||||||
|
ID string `json:"id"`
|
||||||
|
Hash string `json:"hash"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
Meta FileMeta `json:"meta"`
|
||||||
|
MimeType string `json:"mime_type"`
|
||||||
|
Size int `json:"size"`
|
||||||
|
Url *string `json:"source_url"`
|
||||||
|
CreatedAt time.Time `json:"created_at"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// FileMeta file metadata
|
||||||
|
type FileMeta struct {
|
||||||
|
Width *int `json:"width,omitempty"`
|
||||||
|
Height *int `json:"height,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// UploadFileByUrlRequest file url to upload
|
||||||
|
type UploadFileByUrlRequest struct {
|
||||||
|
Url string `json:"url"`
|
||||||
|
}
|
||||||
|
|
||||||
// ActivateResponse channel activation response
|
// ActivateResponse channel activation response
|
||||||
type ActivateResponse struct {
|
type ActivateResponse struct {
|
||||||
ChannelID uint64 `json:"id"`
|
ChannelID uint64 `json:"id"`
|
||||||
@ -156,6 +204,7 @@ type Message struct {
|
|||||||
ExternalID string `json:"external_id"`
|
ExternalID string `json:"external_id"`
|
||||||
Type string `json:"type,omitempty"`
|
Type string `json:"type,omitempty"`
|
||||||
Text string `json:"text,omitempty"`
|
Text string `json:"text,omitempty"`
|
||||||
|
Items []Item `json:"items,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendMessage struct
|
// SendMessage struct
|
||||||
@ -186,6 +235,12 @@ type SendData struct {
|
|||||||
Quote *SendMessageRequestQuote `json:"quote,omitempty"`
|
Quote *SendMessageRequestQuote `json:"quote,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Item struct
|
||||||
|
type Item struct {
|
||||||
|
ID string `json:"id"`
|
||||||
|
Caption string `json:"caption"`
|
||||||
|
}
|
||||||
|
|
||||||
// SendMessageRequestQuote type
|
// SendMessageRequestQuote type
|
||||||
type SendMessageRequestQuote struct {
|
type SendMessageRequestQuote struct {
|
||||||
ExternalID string `json:"external_id"`
|
ExternalID string `json:"external_id"`
|
||||||
@ -238,6 +293,15 @@ type WebhookData struct {
|
|||||||
Bot *MessageDataBot `json:"bot,omitempty"`
|
Bot *MessageDataBot `json:"bot,omitempty"`
|
||||||
Product *MessageDataProduct `json:"product,omitempty"`
|
Product *MessageDataProduct `json:"product,omitempty"`
|
||||||
Order *MessageDataOrder `json:"order,omitempty"`
|
Order *MessageDataOrder `json:"order,omitempty"`
|
||||||
|
Images *[]FileItem `json:"images,omitempty"`
|
||||||
|
Files *[]FileItem `json:"files,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// FileItem struct
|
||||||
|
type FileItem struct {
|
||||||
|
ID string `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Size int `json:"size"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// MessageDataUser user data from webhook
|
// MessageDataUser user data from webhook
|
||||||
|
Loading…
Reference in New Issue
Block a user