diff --git a/internal/route.go b/internal/route.go index 9787540..6b44851 100644 --- a/internal/route.go +++ b/internal/route.go @@ -36,6 +36,6 @@ func Routes(e *echo.Echo) { e.POST(router.BaseURL+"/send/document", ctlWhatsApp.SendDocument, middleware.JWTWithConfig(authJWTConfig)) e.POST(router.BaseURL+"/send/image", ctlWhatsApp.SendImage, middleware.JWTWithConfig(authJWTConfig)) e.POST(router.BaseURL+"/send/audio", ctlWhatsApp.SendAudio, middleware.JWTWithConfig(authJWTConfig)) - // e.POST(router.BaseURL+"/send/video", ctlWhatsApp.SendVideo, middleware.JWTWithConfig(authJWTConfig)) + e.POST(router.BaseURL+"/send/video", ctlWhatsApp.SendVideo, middleware.JWTWithConfig(authJWTConfig)) e.POST(router.BaseURL+"/logout", ctlWhatsApp.Logout, middleware.JWTWithConfig(authJWTConfig)) } diff --git a/internal/whatsapp/whatsapp.go b/internal/whatsapp/whatsapp.go index 216f2d3..200118f 100644 --- a/internal/whatsapp/whatsapp.go +++ b/internal/whatsapp/whatsapp.go @@ -59,6 +59,10 @@ func sendContent(c echo.Context, mediaType string) error { case "audio": fileStream, fileHeader, err = c.Request().FormFile("audio") + + case "video": + fileStream, fileHeader, err = c.Request().FormFile("video") + reqSendMessage.Message = strings.TrimSpace(c.FormValue("caption")) } // Don't Forget to Close The File Stream @@ -95,6 +99,9 @@ func sendContent(c echo.Context, mediaType string) error { case "audio": err = pkgWhatsApp.WhatsAppSendAudio(jid, reqSendMessage.RJID, fileBytes, fileType) + + case "video": + err = pkgWhatsApp.WhatsAppSendVideo(jid, reqSendMessage.RJID, fileBytes, fileType, reqSendMessage.Message) } // Return Internal Server Error @@ -230,12 +237,6 @@ func SendAudio(c echo.Context) error { return sendContent(c, "audio") } -/* - TODO: Send Media -*/ - -/* func SendVideo(c echo.Context) error { - return router.ResponseSuccess(c, "Successfully Send Video Message") + return sendContent(c, "video") } -*/ diff --git a/pkg/whatsapp/whatsapp.go b/pkg/whatsapp/whatsapp.go index d164ef4..26d4732 100644 --- a/pkg/whatsapp/whatsapp.go +++ b/pkg/whatsapp/whatsapp.go @@ -317,7 +317,7 @@ func WhatsAppSendImage(jid string, rjid string, imageBytes []byte, imageType str return err } - // Upload File to WhatsApp Storage Server + // Upload Image to WhatsApp Storage Server imageUploaded, err := WhatsAppClient[jid].Upload(context.Background(), imageBytes, whatsmeow.MediaImage) // Compose WhatsApp Proto @@ -355,7 +355,7 @@ func WhatsAppSendAudio(jid string, rjid string, audioBytes []byte, audioType str return err } - // Upload File to WhatsApp Storage Server + // Upload Audio to WhatsApp Storage Server audioUploaded, err := WhatsAppClient[jid].Upload(context.Background(), audioBytes, whatsmeow.MediaAudio) // Compose WhatsApp Proto @@ -383,3 +383,41 @@ func WhatsAppSendAudio(jid string, rjid string, audioBytes []byte, audioType str // Return Error WhatsApp Client is not Valid return errors.New("WhatsApp Client is not Valid") } + +func WhatsAppSendVideo(jid string, rjid string, videoBytes []byte, videoType string, videoCaption string) error { + if WhatsAppClient[jid] != nil { + // Make Sure WhatsApp Client is OK + err := WhatsAppClientIsOK(jid) + if err != nil { + return err + } + + // Upload Video to WhatsApp Storage Server + videoUploaded, err := WhatsAppClient[jid].Upload(context.Background(), videoBytes, whatsmeow.MediaVideo) + + // Compose WhatsApp Proto + content := &waproto.Message{ + VideoMessage: &waproto.VideoMessage{ + Url: proto.String(videoUploaded.URL), + DirectPath: proto.String(videoUploaded.DirectPath), + Mimetype: proto.String(videoType), + Caption: proto.String(videoCaption), + FileLength: proto.Uint64(videoUploaded.FileLength), + FileSha256: videoUploaded.FileSHA256, + FileEncSha256: videoUploaded.FileEncSHA256, + MediaKey: videoUploaded.MediaKey, + }, + } + + // Send WhatsApp Message Proto + _, err = WhatsAppClient[jid].SendMessage(WhatsAppComposeJID(rjid), "", content) + if err != nil { + return err + } + + return nil + } + + // Return Error WhatsApp Client is not Valid + return errors.New("WhatsApp Client is not Valid") +}