From afd5571188e46cdddfa08a6e97118ee9b785e336 Mon Sep 17 00:00:00 2001 From: Ruslan Efanov Date: Tue, 2 May 2023 14:38:03 +0300 Subject: [PATCH 1/2] add models for media and interactive templates --- v1/template.go | 3 +++ v1/template_test.go | 47 +++++++++++++++++++++++++++++++++++++++++++++ v1/types.go | 21 ++++++++++++++++++++ 3 files changed, 71 insertions(+) diff --git a/v1/template.go b/v1/template.go index 7e37632..2034dd1 100644 --- a/v1/template.go +++ b/v1/template.go @@ -43,6 +43,9 @@ type Template struct { Enabled bool `json:"enabled,omitempty"` Type string `json:"type"` Template []TemplateItem `json:"template"` + HeaderParams *HeaderParams `json:"headerParams,omitempty"` + Footer *string `json:"footer,omitempty"` + ButtonParams []ButtonParam `json:"buttonParams,omitempty"` } // TemplateItem is a part of template. diff --git a/v1/template_test.go b/v1/template_test.go index c9d9f26..0ebc8ca 100644 --- a/v1/template_test.go +++ b/v1/template_test.go @@ -63,3 +63,50 @@ func TestTemplateItem_UnmarshalJSON(t *testing.T) { assert.Equal(t, TemplateVarCustom, emptyVariableResult.VarType) assert.Empty(t, emptyVariableResult.Text) } + +func TestUnmarshalMediaInteractiveTemplate(t *testing.T) { + var template Template + input := `{ + "code":"aaa#bbb#ru", + "phone": "79252223456", + "channel_id": 1, + "headerParams": { + "textVars": [ + "Johny", + "1234C" + ], + "imageUrl": "http://example.com/intaro/d2354125", + "videoUrl": "http://example.com/intaro/d2222", + "documentUrl": "http://example.com/intaro/d4444" + }, + "footer": "Scooter", + "buttonParams": [ + { + "type": "URL", + "urlParameter": "222ddd" + }, + { + "type": "QUICK_REPLY", + "text": "Yes" + } + ] +}` + assert.NoError(t, json.Unmarshal([]byte(input), &template)) + + assert.Equal(t, "aaa#bbb#ru", template.Code) + assert.Equal(t, []string{"Johny", "1234C"}, template.HeaderParams.TextVars) + assert.Equal(t, "http://example.com/intaro/d2354125", template.HeaderParams.ImageURL) + assert.Equal(t, "http://example.com/intaro/d2222", template.HeaderParams.VideoURL) + assert.Equal(t, "http://example.com/intaro/d4444", template.HeaderParams.DocumentURL) + assert.Equal(t, "Scooter", *template.Footer) + assert.Equal(t, URLButton, template.ButtonParams[0].ButtonType) + assert.Equal(t, "222ddd", template.ButtonParams[0].URLParameter) + assert.Equal(t, QuickReplyButton, template.ButtonParams[1].ButtonType) + assert.Equal(t, "Yes", template.ButtonParams[1].Text) + + input = `{"footer": "Scooter"}` + template = Template{} + assert.NoError(t, json.Unmarshal([]byte(input), &template)) + assert.Nil(t, template.HeaderParams) + assert.Empty(t, template.ButtonParams) +} \ No newline at end of file diff --git a/v1/types.go b/v1/types.go index cd2a6f3..2a907af 100644 --- a/v1/types.go +++ b/v1/types.go @@ -629,3 +629,24 @@ func NewTransportErrorResponse(code TransportErrorCode, message string) Transpor }, } } + +type HeaderParams struct { + TextVars []string `json:"textVars,omitempty"` + ImageURL string `json:"imageUrl,omitempty"` + VideoURL string `json:"videoUrl,omitempty"` + DocumentURL string `json:"documentUrl,omitempty"` +} + +const ( + QuickReplyButton ButtonType = "QUICK_REPLY" + PhoneNumberButton ButtonType = "PHONE_NUMBER" + URLButton ButtonType = "URL" +) + +type ButtonType string + +type ButtonParam struct { + ButtonType ButtonType `json:"type"` + Text string `json:"text,omitempty"` + URLParameter string `json:"urlParameter,omitempty"` +} \ No newline at end of file From d2d285b3b24e421c812c0d2bdc3bffea21f5c07f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D1=84=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=A0=D1=83=D1=81?= =?UTF-8?q?=D0=BB=D0=B0=D0=BD?= Date: Fri, 5 May 2023 14:58:26 +0300 Subject: [PATCH 2/2] fixed code style --- v1/template.go | 18 +++++++++--------- v1/template_test.go | 2 +- v1/types.go | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/v1/template.go b/v1/template.go index 2034dd1..69b7370 100644 --- a/v1/template.go +++ b/v1/template.go @@ -37,15 +37,15 @@ var templateVarAssoc = map[string]interface{}{ // Template struct. type Template struct { - Code string `json:"code"` - ChannelID uint64 `json:"channel_id,omitempty"` - Name string `json:"name"` - Enabled bool `json:"enabled,omitempty"` - Type string `json:"type"` - Template []TemplateItem `json:"template"` - HeaderParams *HeaderParams `json:"headerParams,omitempty"` - Footer *string `json:"footer,omitempty"` - ButtonParams []ButtonParam `json:"buttonParams,omitempty"` + Code string `json:"code"` + ChannelID uint64 `json:"channel_id,omitempty"` + Name string `json:"name"` + Enabled bool `json:"enabled,omitempty"` + Type string `json:"type"` + Template []TemplateItem `json:"template"` + HeaderParams *HeaderParams `json:"headerParams,omitempty"` + Footer *string `json:"footer,omitempty"` + ButtonParams []ButtonParam `json:"buttonParams,omitempty"` } // TemplateItem is a part of template. diff --git a/v1/template_test.go b/v1/template_test.go index 0ebc8ca..7303b8d 100644 --- a/v1/template_test.go +++ b/v1/template_test.go @@ -109,4 +109,4 @@ func TestUnmarshalMediaInteractiveTemplate(t *testing.T) { assert.NoError(t, json.Unmarshal([]byte(input), &template)) assert.Nil(t, template.HeaderParams) assert.Empty(t, template.ButtonParams) -} \ No newline at end of file +} diff --git a/v1/types.go b/v1/types.go index 2a907af..bb11a14 100644 --- a/v1/types.go +++ b/v1/types.go @@ -649,4 +649,4 @@ type ButtonParam struct { ButtonType ButtonType `json:"type"` Text string `json:"text,omitempty"` URLParameter string `json:"urlParameter,omitempty"` -} \ No newline at end of file +}