@ -34,33 +34,53 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) {
waReaction := buildEventReaction ( evt )
forwarded := buildForwarded ( evt )
imageMedia := evt . Message . GetImageMessage ( )
stickerMedia := evt . Message . GetStickerMessage ( )
videoMedia := evt . Message . GetVideoMessage ( )
audioMedia := evt . Message . GetAudioMessage ( )
documentMedia := evt . Message . GetDocumentMessage ( )
body := map [ string ] interface { } {
"audio" : audioMedia ,
"contact" : evt . Message . GetContactMessage ( ) ,
"document" : documentMedia ,
"from" : evt . Info . SourceString ( ) ,
"image" : imageMedia ,
"list" : evt . Message . GetListMessage ( ) ,
"live_location" : evt . Message . GetLiveLocationMessage ( ) ,
"location" : evt . Message . GetLocationMessage ( ) ,
"message" : message ,
"order" : evt . Message . GetOrderMessage ( ) ,
"pushname" : evt . Info . PushName ,
"reaction" : waReaction ,
"sticker" : stickerMedia ,
"video" : videoMedia ,
"view_once" : evt . IsViewOnce ,
"forwarded" : forwarded ,
"timestamp" : evt . Info . Timestamp . Format ( time . RFC3339 ) ,
}
if imageMedia != nil {
body := make ( map [ string ] interface { } )
if from := evt . Info . SourceString ( ) ; from != "" {
body [ "from" ] = from
}
if message . Text != "" {
body [ "message" ] = message
}
if pushname := evt . Info . PushName ; pushname != "" {
body [ "pushname" ] = pushname
}
if waReaction . Message != "" {
body [ "reaction" ] = waReaction
}
if evt . IsViewOnce {
body [ "view_once" ] = evt . IsViewOnce
}
if forwarded {
body [ "forwarded" ] = forwarded
}
if timestamp := evt . Info . Timestamp . Format ( time . RFC3339 ) ; timestamp != "" {
body [ "timestamp" ] = timestamp
}
if audioMedia := evt . Message . GetAudioMessage ( ) ; audioMedia != nil {
path , err := ExtractMedia ( config . PathMedia , audioMedia )
if err != nil {
logrus . Errorf ( "Failed to download audio from %s: %v" , evt . Info . SourceString ( ) , err )
return nil , pkgError . WebhookError ( fmt . Sprintf ( "Failed to download audio: %v" , err ) )
}
body [ "audio" ] = path
}
if contactMessage := evt . Message . GetContactMessage ( ) ; contactMessage != nil {
body [ "contact" ] = contactMessage
}
if documentMedia := evt . Message . GetDocumentMessage ( ) ; documentMedia != nil {
path , err := ExtractMedia ( config . PathMedia , documentMedia )
if err != nil {
logrus . Errorf ( "Failed to download document from %s: %v" , evt . Info . SourceString ( ) , err )
return nil , pkgError . WebhookError ( fmt . Sprintf ( "Failed to download document: %v" , err ) )
}
body [ "document" ] = path
}
if imageMedia := evt . Message . GetImageMessage ( ) ; imageMedia != nil {
path , err := ExtractMedia ( config . PathMedia , imageMedia )
if err != nil {
logrus . Errorf ( "Failed to download image from %s: %v" , evt . Info . SourceString ( ) , err )
@ -68,7 +88,24 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) {
}
body [ "image" ] = path
}
if stickerMedia != nil {
if listMessage := evt . Message . GetListMessage ( ) ; listMessage != nil {
body [ "list" ] = listMessage
}
if liveLocationMessage := evt . Message . GetLiveLocationMessage ( ) ; liveLocationMessage != nil {
body [ "live_location" ] = liveLocationMessage
}
if locationMessage := evt . Message . GetLocationMessage ( ) ; locationMessage != nil {
body [ "location" ] = locationMessage
}
if orderMessage := evt . Message . GetOrderMessage ( ) ; orderMessage != nil {
body [ "order" ] = orderMessage
}
if stickerMedia := evt . Message . GetStickerMessage ( ) ; stickerMedia != nil {
path , err := ExtractMedia ( config . PathMedia , stickerMedia )
if err != nil {
logrus . Errorf ( "Failed to download sticker from %s: %v" , evt . Info . SourceString ( ) , err )
@ -76,7 +113,8 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) {
}
body [ "sticker" ] = path
}
if videoMedia != nil {
if videoMedia := evt . Message . GetVideoMessage ( ) ; videoMedia != nil {
path , err := ExtractMedia ( config . PathMedia , videoMedia )
if err != nil {
logrus . Errorf ( "Failed to download video from %s: %v" , evt . Info . SourceString ( ) , err )
@ -84,22 +122,6 @@ func createPayload(evt *events.Message) (map[string]interface{}, error) {
}
body [ "video" ] = path
}
if audioMedia != nil {
path , err := ExtractMedia ( config . PathMedia , audioMedia )
if err != nil {
logrus . Errorf ( "Failed to download audio from %s: %v" , evt . Info . SourceString ( ) , err )
return nil , pkgError . WebhookError ( fmt . Sprintf ( "Failed to download audio: %v" , err ) )
}
body [ "audio" ] = path
}
if documentMedia != nil {
path , err := ExtractMedia ( config . PathMedia , documentMedia )
if err != nil {
logrus . Errorf ( "Failed to download document from %s: %v" , evt . Info . SourceString ( ) , err )
return nil , pkgError . WebhookError ( fmt . Sprintf ( "Failed to download document: %v" , err ) )
}
body [ "document" ] = path
}
return body , nil
}