kjkkkk
This commit is contained in:
parent
a7073cac11
commit
0cbcc682e4
@ -315,33 +315,62 @@ func WebhookReceiveHandler(db *gorm.DB) http.HandlerFunc {
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("📩 Webhook reçu :", body)
|
||||
fmt.Println("\n📩 Webhook reçu :", body)
|
||||
|
||||
// Exemple de parsing
|
||||
entry := body["entry"].([]interface{})[0].(map[string]interface{})
|
||||
change := entry["changes"].([]interface{})[0].(map[string]interface{})
|
||||
value := change["value"].(map[string]interface{})
|
||||
|
||||
recipientID := value["metadata"].(map[string]interface{})["phone_number_id"].(string)
|
||||
var user models.User
|
||||
if err := db.Where("whatsapp_phone_number_id = ?", recipientID).First(&user).Error; err != nil {
|
||||
log.Println("❌ Utilisateur introuvable pour phone_number_id:", recipientID)
|
||||
w.WriteHeader(http.StatusOK)
|
||||
return
|
||||
}
|
||||
|
||||
messages := value["messages"].([]interface{})
|
||||
if len(messages) > 0 {
|
||||
msg := messages[0].(map[string]interface{})
|
||||
from := msg["from"].(string)
|
||||
msgType := msg["type"].(string)
|
||||
msgID := msg["id"].(string)
|
||||
|
||||
var content string
|
||||
if msgType == "text" {
|
||||
content = msg["text"].(map[string]interface{})["body"].(string)
|
||||
}
|
||||
|
||||
fmt.Printf("💬 Message reçu de %s : %s\n", from, content)
|
||||
contextID := ""
|
||||
if ctx, ok := msg["context"].(map[string]interface{}); ok {
|
||||
contextID = fmt.Sprintf("%v", ctx["id"])
|
||||
}
|
||||
|
||||
// TODO : enregistrer en base
|
||||
conv := models.Conversation{
|
||||
UserID: user.ID,
|
||||
From: from,
|
||||
To: recipientID,
|
||||
MessageID: msgID,
|
||||
Type: msgType,
|
||||
Content: content,
|
||||
Direction: "inbound",
|
||||
Status: "received",
|
||||
}
|
||||
|
||||
if contextID != "" {
|
||||
conv.Content += fmt.Sprintf(" (réponse à %s)", contextID)
|
||||
}
|
||||
|
||||
if err := db.Create(&conv).Error; err != nil {
|
||||
log.Println("❌ Erreur enregistrement conversation:", err)
|
||||
}
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func CreateUser(db *gorm.DB) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
var user models.User
|
||||
@ -474,9 +503,7 @@ func HandleTemplateTest(db *gorm.DB) http.HandlerFunc {
|
||||
http.Error(w, "Échec de l'appel API WhatsApp", http.StatusBadGateway)
|
||||
return
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// Lire la réponse pour capturer le message ID ou statut
|
||||
defer resp.Body.Close();
|
||||
var respBody map[string]interface{}
|
||||
json.NewDecoder(resp.Body).Decode(&respBody)
|
||||
|
||||
@ -487,10 +514,17 @@ func HandleTemplateTest(db *gorm.DB) http.HandlerFunc {
|
||||
}
|
||||
}
|
||||
|
||||
err = models.SaveMessageStatusError(db, user.ID, to, messageID, "sent", fmt.Sprintf("Template: %s", templateName))
|
||||
if err != nil {
|
||||
fmt.Println("⚠️ Erreur enregistrement statut message:", err)
|
||||
}
|
||||
description := fmt.Sprintf("Template: %s, Lang: %s, Params: %v", templateName, lang, params)
|
||||
db.Create(&models.Conversation{
|
||||
UserID: user.ID,
|
||||
From: "bot",
|
||||
To: to,
|
||||
MessageID: messageID,
|
||||
Type: "template",
|
||||
Content: description,
|
||||
Direction: "outbound",
|
||||
Status: "sent",
|
||||
})
|
||||
|
||||
w.WriteHeader(resp.StatusCode)
|
||||
json.NewEncoder(w).Encode(respBody)
|
||||
|
||||
@ -40,7 +40,6 @@ func RoutesProtected(r *mux.Router, db *gorm.DB) {
|
||||
r.HandleFunc("/test/send", renders.TestMessagesPages)
|
||||
r.HandleFunc("/test/send2", renders.TestMessagesPages2)
|
||||
r.HandleFunc("/admin/user/{id}/conversation-thread", renders.AdminConversationThread(db)).Methods("GET")
|
||||
|
||||
r.HandleFunc("/api/message/send2", handlers.HandleTemplateTest(db)).Methods("POST")
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user