Browse Source

feat: support webhook reaction

pull/94/head
Aldino Kemal 3 years ago
parent
commit
b15afdc291
  1. 2
      src/config/settings.go
  2. 12
      src/domains/send/message.go
  3. 84
      src/pkg/whatsapp/whatsapp.go
  4. 19
      src/validations/send_validation_test.go

2
src/config/settings.go

@ -6,7 +6,7 @@ import (
) )
var ( var (
AppVersion = "v4.7.2"
AppVersion = "v4.7.3"
AppPort = "3000" AppPort = "3000"
AppDebug = false AppDebug = false
AppOs = fmt.Sprintf("AldinoKemal") AppOs = fmt.Sprintf("AldinoKemal")

12
src/domains/send/message.go

@ -1,12 +0,0 @@
package send
type UpdateMessageRequest struct {
MessageID string `json:"message_id" uri:"message_id"`
Message string `json:"message" form:"message"`
Phone string `json:"phone" form:"phone"`
}
type UpdateMessageResponse struct {
MessageID string `json:"message_id"`
Status string `json:"status"`
}

84
src/pkg/whatsapp/whatsapp.go

@ -266,47 +266,49 @@ func sendAutoReplyWebhook(evt *events.Message) error {
audioMedia := evt.Message.GetAudioMessage() audioMedia := evt.Message.GetAudioMessage()
documentMedia := evt.Message.GetDocumentMessage() documentMedia := evt.Message.GetDocumentMessage()
message := evt.Message.GetConversation()
if extendedMessage := evt.Message.ExtendedTextMessage.GetText(); extendedMessage != "" {
message = extendedMessage
}
var quotedmessage interface{} = nil
if evt.Message.ExtendedTextMessage != nil {
quotedmessage = evt.Message.ExtendedTextMessage.ContextInfo.QuotedMessage.GetConversation()
if quotedmessage == "" {
quotedmessage = nil
}
}
var forwarded interface{} = nil
if evt.Message.ExtendedTextMessage != nil && evt.Message.ExtendedTextMessage.ContextInfo != nil {
forwarded = evt.Message.ExtendedTextMessage.ContextInfo.GetIsForwarded()
if forwarded == false {
forwarded = nil
}
}
body := map[string]any{
"message_id": evt.Info.ID,
"from": evt.Info.SourceString(),
"pushname": evt.Info.PushName,
"message": message,
"image": imageMedia,
"video": videoMedia,
"audio": audioMedia,
"document": documentMedia,
"location": evt.Message.GetLocationMessage(),
"sticker": stickerMedia,
"live_location": evt.Message.GetLiveLocationMessage(),
"view_once": evt.Message.GetViewOnceMessage(),
"list": evt.Message.GetListMessage(),
"order": evt.Message.GetOrderMessage(),
"contact": evt.Message.GetContactMessage(),
"forwarded": forwarded,
"quotedmessage": quotedmessage,
message := evt.Message.GetConversation()
if extendedMessage := evt.Message.ExtendedTextMessage.GetText(); extendedMessage != "" {
message = extendedMessage
}
var quotedmessage any
if evt.Message.ExtendedTextMessage != nil {
if conversation := evt.Message.ExtendedTextMessage.ContextInfo.QuotedMessage.GetConversation(); conversation != "" {
quotedmessage = conversation
}
}
var forwarded any
if evt.Message.ExtendedTextMessage != nil && evt.Message.ExtendedTextMessage.ContextInfo != nil {
if isForwarded := evt.Message.ExtendedTextMessage.ContextInfo.GetIsForwarded(); !isForwarded {
forwarded = nil
}
}
var reactionMessage any
if evt.Message.ReactionMessage != nil {
reactionMessage = *evt.Message.ReactionMessage.Text
}
body := map[string]interface{}{
"audio": audioMedia,
"contact": evt.Message.GetContactMessage(),
"document": documentMedia,
"forwarded": forwarded,
"from": evt.Info.SourceString(),
"image": imageMedia,
"list": evt.Message.GetListMessage(),
"live_location": evt.Message.GetLiveLocationMessage(),
"location": evt.Message.GetLocationMessage(),
"message": message,
"message_id": evt.Info.ID,
"order": evt.Message.GetOrderMessage(),
"pushname": evt.Info.PushName,
"quoted_message": quotedmessage,
"reaction_message": reactionMessage,
"sticker": stickerMedia,
"video": videoMedia,
"view_once": evt.Message.GetViewOnceMessage(),
} }
if imageMedia != nil { if imageMedia != nil {

19
src/validations/send_validation_test.go

@ -2,6 +2,7 @@ package validations
import ( import (
"context" "context"
domainMessage "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/message"
domainSend "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/send" domainSend "github.com/aldinokemal/go-whatsapp-web-multidevice/domains/send"
pkgError "github.com/aldinokemal/go-whatsapp-web-multidevice/pkg/error" pkgError "github.com/aldinokemal/go-whatsapp-web-multidevice/pkg/error"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -304,7 +305,7 @@ func TestValidateSendLink(t *testing.T) {
func TestValidateRevokeMessage(t *testing.T) { func TestValidateRevokeMessage(t *testing.T) {
type args struct { type args struct {
request domainSend.RevokeRequest
request domainMessage.RevokeRequest
} }
tests := []struct { tests := []struct {
name string name string
@ -313,7 +314,7 @@ func TestValidateRevokeMessage(t *testing.T) {
}{ }{
{ {
name: "should success normal condition", name: "should success normal condition",
args: args{request: domainSend.RevokeRequest{
args: args{request: domainMessage.RevokeRequest{
Phone: "1728937129312@s.whatsapp.net", Phone: "1728937129312@s.whatsapp.net",
MessageID: "1382901271239781", MessageID: "1382901271239781",
}}, }},
@ -321,7 +322,7 @@ func TestValidateRevokeMessage(t *testing.T) {
}, },
{ {
name: "should error with empty phone", name: "should error with empty phone",
args: args{request: domainSend.RevokeRequest{
args: args{request: domainMessage.RevokeRequest{
Phone: "", Phone: "",
MessageID: "1382901271239781", MessageID: "1382901271239781",
}}, }},
@ -329,7 +330,7 @@ func TestValidateRevokeMessage(t *testing.T) {
}, },
{ {
name: "should error with empty message id", name: "should error with empty message id",
args: args{request: domainSend.RevokeRequest{
args: args{request: domainMessage.RevokeRequest{
Phone: "1728937129312@s.whatsapp.net", Phone: "1728937129312@s.whatsapp.net",
MessageID: "", MessageID: "",
}}, }},
@ -347,7 +348,7 @@ func TestValidateRevokeMessage(t *testing.T) {
func TestValidateUpdateMessage(t *testing.T) { func TestValidateUpdateMessage(t *testing.T) {
type args struct { type args struct {
request domainSend.UpdateMessageRequest
request domainMessage.UpdateMessageRequest
} }
tests := []struct { tests := []struct {
name string name string
@ -356,7 +357,7 @@ func TestValidateUpdateMessage(t *testing.T) {
}{ }{
{ {
name: "should success normal condition", name: "should success normal condition",
args: args{request: domainSend.UpdateMessageRequest{
args: args{request: domainMessage.UpdateMessageRequest{
MessageID: "1382901271239781", MessageID: "1382901271239781",
Message: "some update message", Message: "some update message",
Phone: "1728937129312@s.whatsapp.net", Phone: "1728937129312@s.whatsapp.net",
@ -365,7 +366,7 @@ func TestValidateUpdateMessage(t *testing.T) {
}, },
{ {
name: "should error with empty phone", name: "should error with empty phone",
args: args{request: domainSend.UpdateMessageRequest{
args: args{request: domainMessage.UpdateMessageRequest{
MessageID: "1382901271239781", MessageID: "1382901271239781",
Message: "some update message", Message: "some update message",
Phone: "", Phone: "",
@ -374,7 +375,7 @@ func TestValidateUpdateMessage(t *testing.T) {
}, },
{ {
name: "should error with empty message id", name: "should error with empty message id",
args: args{request: domainSend.UpdateMessageRequest{
args: args{request: domainMessage.UpdateMessageRequest{
MessageID: "", MessageID: "",
Message: "some update message", Message: "some update message",
Phone: "1728937129312@s.whatsapp.net", Phone: "1728937129312@s.whatsapp.net",
@ -383,7 +384,7 @@ func TestValidateUpdateMessage(t *testing.T) {
}, },
{ {
name: "should error with empty message update", name: "should error with empty message update",
args: args{request: domainSend.UpdateMessageRequest{
args: args{request: domainMessage.UpdateMessageRequest{
MessageID: "1382901271239781", MessageID: "1382901271239781",
Message: "", Message: "",
Phone: "1728937129312@s.whatsapp.net", Phone: "1728937129312@s.whatsapp.net",

Loading…
Cancel
Save