1
0
mirror of synced 2024-11-22 04:56:06 +03:00

Media & interactive templates support

This commit is contained in:
Pavel 2023-05-05 15:21:12 +03:00 committed by GitHub
commit 81a71544c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 77 additions and 6 deletions

View File

@ -37,12 +37,15 @@ var templateVarAssoc = map[string]interface{}{
// Template struct. // Template struct.
type Template struct { type Template struct {
Code string `json:"code"` Code string `json:"code"`
ChannelID uint64 `json:"channel_id,omitempty"` ChannelID uint64 `json:"channel_id,omitempty"`
Name string `json:"name"` Name string `json:"name"`
Enabled bool `json:"enabled,omitempty"` Enabled bool `json:"enabled,omitempty"`
Type string `json:"type"` Type string `json:"type"`
Template []TemplateItem `json:"template"` 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. // TemplateItem is a part of template.

View File

@ -63,3 +63,50 @@ func TestTemplateItem_UnmarshalJSON(t *testing.T) {
assert.Equal(t, TemplateVarCustom, emptyVariableResult.VarType) assert.Equal(t, TemplateVarCustom, emptyVariableResult.VarType)
assert.Empty(t, emptyVariableResult.Text) 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)
}

View File

@ -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"`
}