From afd5571188e46cdddfa08a6e97118ee9b785e336 Mon Sep 17 00:00:00 2001 From: Ruslan Efanov Date: Tue, 2 May 2023 14:38:03 +0300 Subject: [PATCH] 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